Zaawansowane
Ten rozdział obejmuje tematy dla użytkowników zaawansowanych, które omijają normalny interfejs sieciowy zamiast go używać: bezpośredni dostęp do bazy danych i SQL, oraz skrypty oczyszczania bazy danych z wiersza poleceń. Większość użytkowników nigdy nie będzie potrzebować tego rozdziału.
Bezpośrednie połączenie z bazą danych SMSEagle
Baza danych SMSEagle działa na PostgreSQL. Możesz uzyskać do niej bezpośredni dostęp do odczytu lub zapisu wiadomości SMS za pośrednictwem zapytań SQL, zamiast korzystać z interfejsu sieciowego lub API.
Dostęp do bazy danych dla aplikacji zewnętrznych jest domyślnie wyłączony. Włącz go w sekcji Settings > Global settings > Application > Access to DB for external applications.
Po włączeniu połącz się z bazą danych z aplikacji zewnętrznej, używając:
Host: adres IP urządzenia
Nazwa bazy danych:
smseagleUżytkownik:
smseagleuserHasło:
postgreeagle
Wstrzykiwanie krótkiej wiadomości SMS za pomocą SQL
Krótka wiadomość tekstowa (do 160 znaków):
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;
Powyższa wiadomość należy do użytkownika z id_user 1 (domyślny użytkownik admin) - wartości id_user innych użytkowników znajdują się w tabeli public."user". Pole SenderID identyfikuje, który modem wysyła wiadomość: smseagle1 dla modemu 1, smseagle2 dla modemu 2.
Wstrzykiwanie długiej wiadomości SMS za pomocą SQL
Wiadomości wieloczęściowe wymagają również nagłówka UDH, przechowywane jako ciąg szesnastkowy w polu UDH. O ile nie masz konkretnego powodu, aby to robić ręcznie, użyj zamiast tego API (zobacz API i integracja dla deweloperów).
W przypadku długiej wiadomości tekstowej, UDH zaczyna się od 050003, a następnie jeden bajt używany jako odniesienie wiadomości (dowolna wartość szesnastkowa, ale różna dla każdej wiadomości - D3 poniżej), jeden bajt na całkowitą liczbę części (02 poniżej, unikatowa dla każdej wiadomości wysłanej na ten sam numer), i jeden bajt na numer bieżącej części (01 dla pierwszej części, 02 dla drugiej, i tak dalej).
Dwuczęściowa długa wiadomość wygląda następująco:
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;
Dodanie UDH zmniejsza miejsce na tekst - przykład powyżej pozwala tylko na 153 znaki na część wiadomości.
Skrypty oczyszczania bazy danych
Kilka skryptów jest dostępnych do usuwania wiadomości SMS z bazy danych za pośrednictwem Linux CLI, znajdujących się w /mnt/nand-user/scripts/:
Skrypt |
Użycie |
Cel |
|---|---|---|
|
|
Usun wiadomości SMS z Inbox i SentItems starsze niż podana data |
|
|
Usuń wiadomości SMS z Inbox i SentItems starsze niż 7 dni |
|
|
Czyszczenie Inbox, SentItems i Outbox — przeznaczone do okresowego uruchamiania przez cron |
|
|
Usuwanie wiadomości SMS z wybranego folderu |
Dodawanie skryptu do crona: utwórz plik w katalogu /etc/cron.d/ (na przykład db_cleaner) z zawartością taką jak:
0 0 1 * * root /mnt/nand-user/scripts/db_delete_allfolders
Ten przykład uruchamia skrypt czyszczący 1. dnia każdego miesiąca.
Przekazywanie dzienników do serwera zewnętrznego
SMSEagle zapisuje swoje dzienniki za pośrednictwem rsyslog. Aby wysłać ich kopię na centralny serwer syslog, dodaj regułę przekazywania przez SSH. Nie ma ustawienia dla tego w interfejsie sieciowym.
Zaloguj się na urządzenie przez SSH jako
root.Utwórz plik
/etc/rsyslog.d/005-remote.confz tą regułą, zastępując adres, port i protokół swoim serwerem:*.* action(type="omfwd" target="192.0.2.250" port="514" protocol="udp" action.resumeRetryCount="10" queue.type="linkedList" queue.size="10000")target- adres IP lub nazwa hosta serwera syslog.port- port, na którym nasłuchuje serwer, zwykle514.protocol-udplubtcp.Ustawienia kolejki przechowują do 10000 wiadomości na urządzeniu, gdy serwer jest niedostępny, i wysyłają je, gdy wróci do stanu dostępności.
Sprawdź konfigurację, a następnie uruchom ponownie rsyslog:
rsyslogd -N1 systemctl restart rsyslog
Zachowaj nazwę pliku. Własne dzienniki SMSEagle (Application, API, Message i usługi email, call, Signal i WhatsApp) są zapisywane przez reguły w
/etc/rsyslog.d/010-*.confdo018-*.conf, a każda z tych reguł zatrzymuje dalsze przetwarzanie swoich wiadomości. Reguła przekazywania umieszczona po nich, na przykład na końcu/etc/rsyslog.conf, przekazuje tylko dzienniki systemowe. Prefiks005-powoduje, że rsyslog odczytuje regułę przekazywania jako pierwszy, dzięki czemu każda wiadomość jest przekazywana.
Aby szyfrować ruch dziennika za pomocą TLS, zapoznaj się z przewodnikiem rsyslog Encrypting Syslog Traffic with TLS.