Avanzado
Este capítulo cubre temas para usuarios avanzados que evitan la interfaz web normal en lugar de utilizarla: acceso directo a la base de datos y SQL, y scripts de limpieza de base de datos desde la línea de comandos. La mayoría de los usuarios nunca necesitarán este capítulo.
Conexión directa a la base de datos de SMSEagle
La base de datos de SMSEagle se ejecuta en PostgreSQL. Puede acceder a ella directamente para leer o escribir mensajes SMS mediante consultas SQL, en lugar de hacerlo a través de la interfaz web o la API.
El acceso a la base de datos para aplicaciones externas está deshabilitado por defecto. Habilítelo en Settings > Global settings > Application > Access to DB for external applications.
Una vez habilitado, conéctese a la base de datos desde una aplicación externa utilizando:
Host: la dirección IP del dispositivo
Database name:
smseagleUser:
smseagleuserPassword:
postgreeagle
Inyección de un SMS corto mediante SQL
Un mensaje de texto corto (hasta 160 caracteres):
INSERT INTO outbox (
DestinationNumber,
TextDecoded,
CreatorID,
Coding,
Class,
SenderID
) VALUES (
'1234567',
'This is a SQL test message',
'Program',
'Default_No_Compression',
-1,
'smseagle1'
);
INSERT INTO user_outbox (
id_outbox,
id_user
) SELECT CURRVAL(pg_get_serial_sequence('outbox','ID')), 1;
El mensaje anterior pertenece al usuario con id_user 1 (el usuario admin por defecto) - los valores de id_user de otros usuarios se encuentran en la tabla public."user". El campo SenderID identifica qué módem envía el mensaje: smseagle1 para el módem 1, smseagle2 para el módem 2.
Inyección de un SMS largo mediante SQL
Los mensajes multiparte también necesitan un encabezado UDH, almacenado como una cadena hexadecimal en el campo UDH. A menos que tenga una razón específica para hacerlo manualmente, utilice la API en su lugar (ver API and Developer Integration).
Para un mensaje de texto largo, el UDH comienza con 050003, seguido de un byte utilizado como referencia de mensaje (cualquier valor hexadecimal, pero diferente para cada mensaje - D3 a continuación), un byte para el número total de partes (02 a continuación, único por mensaje enviado al mismo número), y un byte para el número de la parte actual (01 para la primera parte, 02 para la segunda, y así sucesivamente).
Un mensaje largo de dos partes se ve así:
INSERT INTO outbox (
"DestinationNumber",
"CreatorID",
"MultiPart",
"UDH",
"TextDecoded",
"Coding",
"Class",
"SenderID"
) VALUES (
'1234567',
'Program',
'true',
'050003D30201',
'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, qui',
'Default_No_Compression',
-1,
'smseagle1'
)
INSERT INTO outbox_multipart (
"ID",
"SequencePosition",
"UDH",
"TextDecoded",
"Coding",
"Class"
) SELECT
CURRVAL(pg_get_serial_sequence('outbox','ID')),
2,
'050003D30202',
's nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.',
'Default_No_Compression',
-1;
INSERT INTO user_outbox (
id_outbox,
id_user
) SELECT
CURRVAL(pg_get_serial_sequence('outbox','ID')),
1;
Agregar un UDH deja menos espacio para el texto - el ejemplo anterior permite solo 153 caracteres por parte del mensaje.
Scripts de limpieza de base de datos
Hay varios scripts disponibles para eliminar mensajes SMS de la base de datos a través de la CLI de Linux, ubicados en /mnt/nand-user/scripts/:
Script |
Uso |
Propósito |
|---|---|---|
|
|
Eliminar SMS de Inbox y SentItems más antiguos que la fecha indicada |
|
|
Eliminar SMS de Inbox y SentItems más antiguos de 7 días |
|
|
Limpiar Inbox, SentItems y Outbox - diseñado para ejecutarse periódicamente vía cron |
|
|
Eliminar SMS de una carpeta elegida |
Agregar un script a cron: crear un archivo en /etc/cron.d/ (por ejemplo db_cleaner) con contenido como:
0 0 1 * * root /mnt/nand-user/scripts/db_delete_allfolders
Este ejemplo ejecuta el script de limpieza el 1º de cada mes.
Reenvío de registros a un servidor externo
SMSEagle escribe sus registros a través de rsyslog. Para enviar una copia de ellos a un servidor syslog centralizado, agregue una regla de reenvío sobre SSH. No hay ninguna configuración para esto en la interfaz web.
Conéctese al dispositivo por SSH como
root.Cree el archivo
/etc/rsyslog.d/005-remote.confcon esta regla, reemplazando la dirección, el puerto y el protocolo por los de su servidor:*.* action(type="omfwd" target="192.0.2.250" port="514" protocol="udp" action.resumeRetryCount="10" queue.type="linkedList" queue.size="10000")target- Dirección IP o nombre de host del servidor syslog.port- puerto en el que escucha el servidor, normalmente514.protocol-udpotcp.La configuración de cola mantiene hasta 10000 mensajes en el dispositivo mientras el servidor es inaccesible, y los envía una vez que vuelva a estar disponible.
Compruebe la configuración y, a continuación, reinicie rsyslog:
rsyslogd -N1 systemctl restart rsyslog
Conserve el nombre del archivo. Los registros propios de SMSEagle (Application, API, Message y los servicios de correo electrónico, llamada, Signal y WhatsApp) se escriben mediante reglas en
/etc/rsyslog.d/010-*.confa018-*.conf, y cada una de esas reglas detiene el procesamiento posterior de sus mensajes. Una regla de reenvío colocada después de ellas, por ejemplo al final de/etc/rsyslog.conf, solo reenvía los registros del sistema. El prefijo005-hace que rsyslog lea la regla de reenvío primero, por lo que cada mensaje se reenvía.
Para cifrar el tráfico de registros con TLS, consulte la guía de rsyslog Encrypting Syslog Traffic with TLS.