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.
Hex | Zecimal | Codare | Descriere |
---|---|---|---|
0x00 | 0 | GSM 7-bit implicit | Set de caractere standard pentru SMS |
0x01 | 1 | ASCII | ASCII 8-bit (subset Latin-1) |
0x03 | 3 | Latin-1 (ISO 8859-1) | Set de caractere pentru Europa Occidentală |
0x08 | 8 | UCS2 | Unicode (16-bit, big-endian) |
0x04 | 4 | Binar | Date 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
- How to configure the SMPP Service Type field
- How to configure the SMPP Phone Number fields
- How to configure the SMPP ESM Class field
- How to configure the SMPP PID field
- How to configure the SMPP Prioirity field
- How to configure the SMPP Scheduled Time field
- How to configure the SMPP Validity Period field
- How to configure the SMPP Registered Delivery field
- How to configure the SMPP Replace if Present field
- How to configure the sm_default_msg_id field
- How to configure the SMPP DCS field
- How to calculate the SMPP SM Length field
- How to put data into the SMPP SM field