Jak vypočítat pole SM Length v SMPP
V protokolu SMPP pole sm_length určuje délku obsahu krátké zprávy v bajtech, který je obsažen v poli short_message PDU, jako jsou submit_sm, deliver_sm a data_sm.
Podrobnosti pole
- Název pole: sm_length
- Velikost: 1 bajt (nezáporné celé číslo)
- Rozsah: 0–254 (maximální povoleno SMPP 3.4)
- Umístění: Přímo před polem
short_message - Účel: Udává počet bajtů v obsahu
short_message
Klíčové chování
Hodnota sm_length závisí na použité kodování:
| Kódování | Znaky na SMS | Velikost v bajtech | Poznámky |
|---|---|---|---|
| GSM 7-bit | Až 160 | Až 140 | Zabalené bity; skutečná velikost závisí na obsahu |
| UCS2 | Až 70 | 2 × počet znaků | Každý znak má 2 bajty |
| 8-bit binární | N/A | Až 140 | Surová délka v bajtech |
Příklad: ASCII zpráva
Jednoduchá zpráva s výchozím 7-bitovým kódováním:
Text: "Hello" Kódování: GSM 7-bit Zabalení bajtů (Hex): C8 32 9B FD 06 Délka v bajtech: 5 sm_length: 5
Příklad: UCS2 kódovaná zpráva
Unicode zpráva s kódováním UCS2 (data_coding = 0x08):
Text: "Hi" UCS2 Hex: 0048 0069 Pole bajtů: 00 48 00 69 Délka v bajtech: 4 sm_length: 4
Příklad SMPP PDU (submit_sm)
0000003B // Délka příkazu (59 bajtů)
00000004 // ID příkazu: submit_sm
00000000 // Stav příkazu
00000001 // Pořadové číslo
00 // service_type
01 // source_addr_ton
01 // source_addr_npi
31323334 // source_addr ("1234")
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
04 // sm_length: 4
00480069 // short_message: "Hi" v UCS2
Důležité poznámky
sm_lengthodkazuje na délku v bajtech, ne na počet znaků.- Pokud je obsah zprávy rozdělen do více zpráv (konkatenace), každá část má své vlastní
sm_length. - Nepleťte si
sm_lengths celkovou délkou zprávy (délka PDU).
Dělení a spojování zpráv
Když zpráva překročí maximální velikost obsahu, je rozdělena na části pomocí UDH (User Data Header). V takových případech sm_length zahrnuje také UDH:
Příklad: UDH (6 bajtů) + 67 UCS2 bajtů = 73 sm_length = 73
Závěr
Pole sm_length je v SMPP zprávách klíčové, protože definuje, kolik bajtů by měl SMSC přečíst pro tělo zprávy. Porozumění tomu, jak kódování ovlivňuje toto pole, zajišťuje přesné a úspěšné doručení zprávy.
Reference
- Specifikace SMPP 3.4
- Znaková sada GSM 03.38
- Kódování Unicode UCS2