Avancé
Ce chapitre couvre des sujets avancés qui contournent l’interface web normale plutôt que de la traverser : accès direct à la base de données et SQL, et scripts de nettoyage de base de données en ligne de commande. La plupart des utilisateurs n’auront jamais besoin de ce chapitre.
Connexion directe à la base de données SMSEagle
La base de données de SMSEagle s’exécute sur PostgreSQL. Vous pouvez y accéder directement pour lire ou écrire des messages SMS via des requêtes SQL, au lieu de passer par l’interface web ou l’API.
L’accès à la base de données pour les applications externes est désactivé par défaut. Activez-le sous Settings > Global settings > Application > Access to DB for external applications.
Une fois activé, connectez-vous à la base de données depuis une application externe en utilisant :
Host : l’adresse IP de l’appareil
Database name:
smseagleUser:
smseagleuserPassword:
postgreeagle
Injection d’un SMS court via SQL
Un message texte court (jusqu’à 160 caractères) :
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;
Le message ci-dessus appartient à l’utilisateur avec id_user 1 (l’utilisateur admin par défaut) - les valeurs id_user des autres utilisateurs se trouvent dans la table public."user". Le champ SenderID identifie quel modem envoie le message : smseagle1 pour le modem 1, smseagle2 pour le modem 2.
Injection d’un SMS long via SQL
Les messages multipièces ont également besoin d’un en-tête UDH, stocké sous forme de chaîne hexadécimale dans le champ UDH. À moins d’avoir une raison spécifique de le faire manuellement, utilisez l’API à la place (voir API and Developer Integration).
Pour un message texte long, l’UDH commence par 050003, suivi d’un octet utilisé comme référence de message (n’importe quelle valeur hexadécimale, mais différente pour chaque message - D3 ci-dessous), un octet pour le nombre total de parties (02 ci-dessous, unique par message envoyé au même numéro), et un octet pour le numéro de la partie actuelle (01 pour la première partie, 02 pour la deuxième, et ainsi de suite).
Un message long en deux parties ressemble à ceci :
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;
L’ajout d’un UDH réduit l’espace disponible pour le texte - l’exemple ci-dessus permet seulement 153 caractères par partie de message.
Scripts de nettoyage de base de données
Quelques scripts sont disponibles pour supprimer des messages SMS de la base de données via la CLI Linux, situés à /mnt/nand-user/scripts/ :
Script |
Utilisation |
Objectif |
|---|---|---|
|
|
Supprimer les SMS de la Inbox et des SentItems plus anciens que la date donnée |
|
|
Supprimer les SMS de la Inbox et des SentItems plus anciens que 7 jours |
|
|
Nettoie les dossiers Inbox, SentItems et Outbox - conçu pour s’exécuter périodiquement via cron |
|
|
Supprime les SMS d’un dossier choisi |
Ajouter un script à cron : créez un fichier sous /etc/cron.d/ (par exemple db_cleaner) avec un contenu tel que :
0 0 1 * * root /mnt/nand-user/scripts/db_delete_allfolders
Cet exemple exécute le script de nettoyage le 1er de chaque mois.
Transfert des journaux vers un serveur externe
SMSEagle écrit ses journaux via rsyslog. Pour envoyer une copie vers un serveur syslog central, ajoutez une règle de transfert via SSH. Il n’y a pas de paramètre pour cela dans l’interface web.
Connectez-vous au dispositif via SSH en tant que
root.Créez le fichier
/etc/rsyslog.d/005-remote.confavec cette règle, en remplaçant l’adresse, le port et le protocole par ceux de votre serveur :*.* action(type="omfwd" target="192.0.2.250" port="514" protocol="udp" action.resumeRetryCount="10" queue.type="linkedList" queue.size="10000")target- Adresse IP ou nom d’hôte du serveur syslog.port- port sur lequel le serveur écoute, généralement514.protocol-udpoutcp.Les paramètres de file d’attente conservent jusqu’à 10000 messages sur le dispositif lorsque le serveur est inaccessible, et les envoient une fois qu’il est de retour.
Vérifiez la configuration, puis redémarrez rsyslog :
rsyslogd -N1 systemctl restart rsyslog
Conservez le nom du fichier. Les propres journaux de SMSEagle (Application, API, Message, ainsi que les services de messagerie, appel, Signal et WhatsApp) sont écrits par des règles dans
/etc/rsyslog.d/010-*.confà018-*.conf, et chacune de ces règles arrête le traitement ultérieur de ses messages. Une règle de transfert placée après celles-ci, par exemple à la fin de/etc/rsyslog.conf, ne transfère que les journaux système. Le préfixe005-fait que rsyslog lit la règle de transfert en premier, de sorte que chaque message est transféré.
Pour chiffrer le trafic des journaux avec TLS, consultez le guide rsyslog Encrypting Syslog Traffic with TLS.