Jak umieścić dane w polu SM SMPP

W SMPP (Short Message Peer-to-Peer), ładunek wiadomości krótkiej (SM) to rzeczywisty tekst (lub dane binarne) przesyłanej wiadomości SMS. Aby zapewnić prawidłową interpretację tej zawartości, pole data_coding w PDU odgrywa kluczową rolę, wskazując format kodowania wiadomości.

Typowe kodowania SMPP

Pole data_coding ma rozmiar 1 bajta i informuje SMSC, jak interpretować ładunek wiadomości.

HexDziesiętnyKodowanieOpis
0x000GSM 7-bit domyślneStandardowy zestaw znaków SMS
0x011ASCII8-bitowe ASCII (podzbiór Latin-1)
0x033Latin-1 (ISO 8859-1)Zachodnioeuropejski zestaw znaków
0x088UCS2Unicode (16-bit, big-endian)
0x044BinarnySurowe dane binarne 8-bitowe

Przykłady zakodowanych wiadomości

1. GSM 7-bit (data_coding = 0x00)

Standardowe kodowanie SMS. Efektywne (do 160 znaków w jednej wiadomości).

Tekst: "Hello"
GSM 7-bit Packed: C8 32 9B FD 06

2. UCS2 (data_coding = 0x08)

Używane dla skryptów niełacińskich (np. arabski, chiński, emoji). Obsługuje 70 znaków na wiadomość.

Tekst: "مرحبا"
UCS2 Hex: 0645 0631 062D 0628 0627
Bajty (hex): 06 45 06 31 06 2D 06 28 06 27

3. ASCII (data_coding = 0x01)

Tylko podstawowe znaki łacińskie, mniej efektywne niż GSM 7-bit.

Tekst: "Hello"
ASCII Hex: 48 65 6C 6C 6F

Przykład PDU SMPP z kodowaniem UCS2

Oto PDU submit_sm SMPP przenoszące wiadomość Unicode:

0000004B  // Długość polecenia (75 bajtów)
00000004  // ID polecenia (submit_sm)
00000000  // Status polecenia
00000001  // Numer sekwencji
74657374  // service_type: "test"
01        // source_addr_ton: Międzynarodowy
01        // source_addr_npi: ISDN
31323334  // source_addr: "1234" (ASCII)
00
01        // dest_addr_ton
01        // dest_addr_npi
35363738  // destination_addr: "5678"
00
00        // esm_class
00        // protocol_id
00        // priority_flag
00        // schedule_delivery_time
00        // validity_period
00        // registered_delivery
00        // replace_if_present_flag
08        // data_coding: UCS2
00        // sm_default_msg_id
0A        // sm_length: 10 bajtów
06450631  // Wiadomość w UCS2 (np. "مر")
062D0628

Kodowanie i konkatenacja

Długie wiadomości są dzielone na części przy użyciu UDH (User Data Header). Zmniejsza to maksymalny rozmiar ładunku:

  • GSM 7-bit: 160 → 153 znaków na część
  • UCS2: 70 → 67 znaków na część

Przykład UDH dla części wiadomości:

05 00 03 CC 02 01
// 05: długość nagłówka
// 00 03: IEI konkatenacji
// CC: Referencja wiadomości
// 02: całkowita liczba części
// 01: bieżąca część

Podsumowanie

SMPP zapewnia elastyczne opcje kodowania poprzez pole data_coding. Właściwe kodowanie zapewnia kompatybilność w globalnych sieciach, szczególnie przy obsłudze tekstów wielojęzycznych lub danych binarnych. Programiści muszą dopasować typy kodowania do treści i oczekiwanych odbiorców, aby uniknąć uszkodzenia wiadomości.

Referencje

  • Specyfikacja SMPP 3.4
  • Zestaw znaków GSM 03.38
  • Standard Unicode

More information