Zaawansowane
Rozdział obejmuje tematy dla zaawansowanych użytkowników, które omijają normalny interfejs sieciowy: bezpośredni dostęp do bazy danych i SQL, oraz skrypty czyszczące bazę 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 korzystania z interfejsu sieciowego lub API.
Dostęp do bazy danych dla aplikacji zewnętrznych jest domyślnie wyłączony. Włącz go w 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
Wstrzyknięcie 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;
Wiadomość powyżej 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.
Wstrzyknięcie długiej wiadomości SMS za pomocą SQL
Wiadomości wieloczęściowe wymagają również nagłówka UDH, przechowywanego jako ciąg szesnastkowy w polu UDH. Chyba że masz konkretny powód, aby robić to ręcznie, użyj zamiast tego API (zobacz API and Developer Integration).
Dla długiej wiadomości tekstowej UDH zaczyna się od 050003, a następnie jeden bajt używany jako odwołanie do wiadomości (dowolna wartość szesnastkowa, ale różna dla każdej wiadomości - D3 poniżej), jeden bajt dla całkowitej liczby części (02 poniżej, unikalny dla każdej wiadomości wysłanej na ten sam numer), i jeden bajt dla numeru bieżącej części (01 dla pierwszej części, 02 dla drugiej itd.).
Wiadomość dwuczęściowa 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 dostępne na tekst - przykład powyżej pozwala tylko na 153 znaki na każdą część wiadomości.
Skrypty czyszczące bazę danych
Kilka skryptów jest dostępnych do usuwania wiadomości SMS z bazy danych za pośrednictwem interfejsu Linux CLI, znajdujących się w /mnt/nand-user/scripts/:
Skrypt |
Użycie |
Przeznaczenie |
|---|---|---|
|
|
Usuń 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 SMS z jednego wybranego folderu |
Dodawanie skryptu do crona: utwórz plik w /etc/cron.d/ (na przykład db_cleaner) o zawartości takiej 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 na zewnętrzny serwer
SMSEagle zapisuje swoje dzienniki przez rsyslog. Aby wysłać ich kopię na centralny serwer syslog, dodaj regułę przekazywania przez SSH. Nie ma ustawienia dla tego w interfejsie internetowym.
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ół Twojego serwera:*.* 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 po jego powrocie.
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 najpierw czyta regułę przekazywania, więc każda wiadomość jest przekazywana.
Aby zaszyfrować ruch dziennika za pomocą TLS, zobacz przewodnik rsyslog Encrypting Syslog Traffic with TLS.