Cześć! Chociaż komunikatory i media społecznościowe z dnia na dzień wypierają tradycyjne metody komunikacji, nie umniejsza to popularności SMS. Weryfikacja na popularnej stronie, czy powiadomienia o transakcjach, przypominają o tym, że SMS-y wciąż żyją i będą żyć. Zastanawiałeś się, jak to wszystko działa? Bardzo często do masowej wysyłki wiadomości wykorzystuje się protokół SMPP, o którym będzie mowa poniżej.
Na Hackerspace były już artykuły o SMPP, ,, ale ich celem nie było opisanie samego protokołu. Oczywiście możesz od razu zacząć od źródła — , ale myślę, że dobrze byłoby, żeby istniało również jego krótkie streszczenie. Będę tłumaczyć na przykładzie v3.4 Czekam na Twoją obiektywną krytykę.
Protokół SMPP to protokół wiadomości peer-to-peer. Oznacza to, że każdy węzeł / serwer hub jest równoprawny. W najprostszym przypadku wymiana SMS-ów wygląda tak:

Jednakże, jeśli krajowy operator nie ma połączenia do jakiegoś odległego regionu, prosi o pomoc pośrednika — hub SMS. Czasami, aby wysłać jednego SMS-a, trzeba stworzyć łańcuch między kilkoma krajami, a nawet kontynentami.
O protokole
SMPP to protokół warstwy aplikacji, który opiera się na wymianie PDU i jest przesyłany przez TCP / IP lub sesje X25 do przesyłania wiadomości SMS i USSD. Zazwyczaj SMPP jest używany w trybie stałego połączenia, co pozwala zaoszczędzić czas. SMPP stosuje model komunikacji klient — serwer.
Tryb komunikacji

Wymiana wiadomości między nadawcą a centrum SMS za pośrednictwem SMPP może przebiegać w następujących trybach:
Transmitter (nadajnik) — przesyłanie wiadomości w jedną stronę, w kolejności
Receiver (odbiornik) — tylko odbiór wiadomości od centrum SMS.
Transreceiver (nadajnik-odbiornik) — wymiana wiadomości między centrum SMS a użytkownikiem
Struktura

Długość wiadomości
Jedna wiadomość SMS może zawierać 70 znaków przy użyciu cyrylicy i nie więcej niż 157 znaków łacińskich + 3 UDH. Jeśli wyślesz SMS z większą ilością znaków, zostanie podzielony na kilka segmentów i połączony w odbierającym urządzeniu. W przypadku segmentacji liczba znaków zmniejsza się przez nagłówki wiadomości, w których wskazana jest część wiadomości. Dlatego wysyłając dużą wiadomość SMS, zawiera ona maksymalnie 153 znaki łacińskie lub 67 nietypowych znaków.
Schemat kodowania danych
Jednak do przesyłania wiadomości znaki muszą być kodowane. W protokole SMPP za kodowanie odpowiada specjalne pole — Data Coding Scheme, czyli DCS. To pole wskazuje, jak należy rozpoznawać wiadomości. Oprócz tego pole DCS zawiera:
- zbiór znaków, który określa kodowanie;
- klasę wiadomości;
- żądanie automatycznego usunięcia po przeczytaniu;
- informację o kompresji wiadomości;
- język wiadomości broadcastowej;
Standardowy 7-bitowy alfabet (GSM 03.38). Został opracowany dla systemu wiadomości w GSM. Takie kodowanie pasuje do angielskiego i wielu języków łacińskich. Każdy znak składa się z 7 bitów i jest kodowany w oktetach.
UTF-16 (w GSM UCS2) Aby włączyć brakujące znaki w 7-bitowym alfabecie, opracowano kodowanie UTF-16, które dodaje dodatkowe znaki (w tym cyrylicę), zmniejszając rozmiar wiadomości z 160 do 70. Ten typ kodowania prawie całkowicie powtarza Unicode.
8-bitowe dane zdefiniowane przez użytkownika. Takie jak KOI8-R i Windows-1251. Chociaż takie rozwiązanie wydaje się bardziej ekonomiczne w porównaniu do UTF-16, pojawia się uzasadnione pytanie o kompatybilność na różnych urządzeniach. Ponieważ w takim przypadku oba urządzenia muszą być wcześniej skonfigurowane.
Klasa wiadomości
- Class0, czyli wiadomość flash, przechowywana w pamięci telefonu według życzenia użytkownika;
- Class1, czyli te, które są przechowywane w pamięci telefonu;
- Class1, czyli te, które są przechowywane w pamięci telefonu;
- Class2, musi gwarantować, że wiadomość zostanie zachowana w pamięci mobilnego terminala, w przeciwnym razie musi wysłać powiadomienie do centrum SMS o niemożności zapisania;
- Class3 — w tym przypadku telefon musi wysłać powiadomienie, że wiadomość może być zapisana, niezależnie od ilości pamięci w urządzeniu. Taki typ wiadomości oznacza, że wiadomość dotarła do adresata;
Typ wiadomości
Cicha wiadomość (SMS0) Typ wiadomości SMS bez treści. Tego rodzaju SMS przychodzi bez powiadomienia i nie jest wyświetlany na ekranie urządzenia.
PDU
Każda operacja PDU jest parą i składa się z żądania i odpowiedzi. Na przykład: polecenie informujące o ustanowieniu połączenia (bind_transmitter / bind_transmitter_resp) lub o tym, że wiadomość została dostarczona (deliver_sm / deliver_sm_resp).

Każdy pakiet PDU składa się z dwóch części — nagłówka (header) i treści (body). Struktura nagłówka jest taka sama dla każdego pakietu PDU: długość polecenia to długość pakietu, id to nazwa pakietu, a polecenie status wskazuje, czy wiadomość została pomyślnie przesłana, czy wystąpił błąd.
Dodatkowe parametry TLV
TLV (Tag Length Value), czyli dodatkowe pola. Takie parametry są używane do rozszerzania funkcji protokołu i nie są obowiązkowe. To pole jest wskazywane na końcu pola PDU. Na przykład, za pomocą TLV dest_addr_np_information można zorganizować przesyłanie informacji o przenoszeniu numeru.
Ton i Npi
TON (Typ numeru) - parametr informujący SMSC o formacie adresacji i typie sieci.
NPI (Identyfikacja planu numeracji) - parametr wskazujący na plan numeracji.

Adres źródła wiadomości, lub nazwa alfanumeryczna
Wiadomości wysyłane na telefon mogą mieć dwie formy: cyfrowe i literowe. Cyfrowe mogą być długie (podobne do numeru telefonu) i krótkie. Czasami operatorzy mają ograniczenia co do wysyłania wiadomości od neutralnych nazw, takich jak Infosms, Alert itd. Czasami operatorzy nie przepuszczają ruchu, jeśli nazwa nie jest zarejestrowana w ich sieci. Jednak to są raczej cechy konkretnego operatora.
Etapy wysyłania
![]()
SMS-SUBMIT — to wysłanie wiadomości MO FSM (krótkiej wiadomości z mobilnego terminala)
SMS-SUBMIT REPORT — potwierdzenie, że wiadomość została wysłana przez SMSC
SRI SM (SendRoutingInfo) — SMSC otrzymuje informacje od HLR dotyczące miejsca pobytu MSC / VLR abonenta
SRI SM RESP — odpowiedź od HLR dotycząca miejsca pobytu abonenta
MT-FSM — po otrzymaniu lokalizacji wysyłana jest wiadomość, używając operacji «Forward Short Message»
MT-FSM ACK — odpowiedź od SMSC, że wiadomość została wysłana
SMS-STATUS REPORT — SMSC wysyła status dotyczący dostarczenia wiadomości.
Status dostarczenia wiadomości
SMS-STATUS REPORT może przyjmować kilka wartości:
DELIVRD wiadomość została pomyślnie dostarczona
REJECTD — wiadomość została odrzucona przez centrum SMS
EXPIRED — wiadomość została usunięta z kolejki wysyłania po upływie TTL (czas życia wiadomości)
UNDELIV — inne przypadki niedostarczenia
UNKNOWN- brak odpowiedzi dotyczącej wysyłki.
Błędy przesyłania
Czasami przyczyny, dla których wiadomości SMS nie są dostarczane do abonenta, powodują wystąpienie błędów. Błędy te są zwracane w PDUs_sms_resp. Wszystkie błędy można podzielić na błędy tymczasowe (Temporary) i stałe (Permanent).
Na przykład, do tymczasowych można zaliczyć absent_subscriber — abonent niedostępny lub offline, a do stałych — abonent nie istnieje. W zależności od błędów, które występują, kształtuje się polityka ponownego przesyłania tych wiadomości.
Na przykład, jeśli abonent był zajęty rozmową i otrzymał błąd MT handset is busy, wiadomość można wysłać ponownie po kilku minutach, jednak jeśli abonent ma zablokowaną usługę odbierania wiadomości, ponowne przesłanie nie ma sensu. Listę błędów można znaleźć na stronach SMSC, na przykład jak .
Źródło: habr.com
