Avanzado
Este capítulo cubre temas para usuarios avanzados que evitan la interfaz web normal en lugar de usarla: acceso directo a bases de datos y SQL, y scripts de limpieza de bases de datos por línea de comandos. La mayoría de los usuarios nunca necesitarán este capítulo.
Conectarse directamente 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 ir 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 usando:
Host: la dirección IP del dispositivo
Database name:
smseagleUser:
smseagleuserPassword:
postgreeagle
Inyectar un SMS corto usando 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 predeterminado) - los valores de id_user de otros usuarios están 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.
Inyectar un SMS largo usando 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, use la API en su lugar (consulte 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 abajo), un byte para el número total de partes (02 abajo, único por mensaje enviado al mismo número), y un byte para el número de 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 texto - el ejemplo anterior permite solo 153 caracteres por parte de mensaje.
Scripts de limpieza de bases de datos
Hay algunos 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 anteriores a la fecha especificada |
|
|
Eliminar SMS de Inbox y SentItems anteriores a 7 días |
|
|
Limpiar Inbox, SentItems y Outbox - diseñado para ejecutarse periódicamente vía cron |
|
|
Eliminar SMS de una carpeta seleccionada |
Agregar un script a cron: crear un archivo bajo /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 primer día de cada mes.
Reenvío de registros a un servidor externo
SMSEagle escribe sus registros a través de rsyslog. Para enviar una copia a un servidor syslog centralizado, agregue una regla de reenvío sobre SSH. No hay ninguna configuración para esto en la interfaz web.
Inicie sesión en el dispositivo por SSH como
root.Cree el archivo
/etc/rsyslog.d/005-remote.confcon esta regla, reemplazando la dirección, puerto y 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 está disponible nuevamente.
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, llamadas, Signal y WhatsApp) se escriben mediante reglas en
/etc/rsyslog.d/010-*.confa018-*.conf, y cada una de esas reglas detiene el procesamiento adicional 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 primero la regla de reenvío, de modo que todos los mensajes se reenvíen.
Para cifrar el tráfico de registro con TLS, consulte la guía de rsyslog Encrypting Syslog Traffic with TLS.