Cum să introduceți date în câmpul SM SMPP

În SMPP (Short Message Peer-to-Peer), sarcina mesajului scurt (SM) reprezintă textul real (sau datele binare) al mesajului SMS transmis. Pentru a asigura interpretarea corectă a acestui conținut, câmpul data_coding din PDU joacă un rol crucial prin indicarea formatului de codare al mesajului.

Codări comune în SMPP

Câmpul data_coding are 1 octet și informează SMSC cum să interpreteze sarcina mesajului.

HexZecimalCodareDescriere
0x000GSM 7-bit implicitSet de caractere standard pentru SMS
0x011ASCIIASCII 8-bit (subset Latin-1)
0x033Latin-1 (ISO 8859-1)Set de caractere pentru Europa Occidentală
0x088UCS2Unicode (16-bit, big-endian)
0x044BinarDate binare brute 8-bit

Exemple de mesaje codate

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

Codare standard pentru SMS. Eficientă (până la 160 de caractere într-un singur mesaj).

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

2. UCS2 (data_coding = 0x08)

Folosit pentru scripturi non-Latine (e.g., arabă, chineză, emoji). Suportă 70 de caractere pe mesaj.

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

3. ASCII (data_coding = 0x01)

Doar caractere Latine de bază, mai puțin eficient ca spațiu decât GSM 7-bit.

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

Exemplu de PDU SMPP cu codare UCS2

Iată un PDU SMPP submit_sm care transportă un mesaj Unicode:

0000004B  // Lungimea comenzii (75 de octeți)
00000004  // ID-ul comenzii (submit_sm)
00000000  // Starea comenzii
00000001  // Numărul de secvență
74657374  // service_type: "test"
01        // source_addr_ton: Internațional
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 octeți
06450631  // Mesaj în UCS2 (e.g. "مر")
062D0628

Codare și concatenare

Mesajele lungi sunt împărțite în părți folosind UDH (User Data Header). Acest lucru reduce dimensiunea maximă a sarcinii:

  • GSM 7-bit: 160 → 153 caractere pe parte
  • UCS2: 70 → 67 caractere pe parte

Exemplu de UDH pentru o parte a mesajului:

05 00 03 CC 02 01
// 05: lungimea antetului
// 00 03: IEI de concatenare
// CC: Referința mesajului
// 02: părți totale
// 01: partea curentă

Rezumat

SMPP oferă opțiuni flexibile de codare prin câmpul data_coding. O codare corespunzătoare asigură compatibilitatea pe rețelele globale, în special atunci când se manipulează text multilingv sau date binare. Dezvoltatorii trebuie să potrivească tipurile de codare cu conținutul și destinatarii așteptați pentru a evita coruperea mesajelor.

Referințe

  • Specificația SMPP 3.4
  • Setul de caractere GSM 03.38
  • Standardul Unicode

More information