Como calcular o campo SM Length no SMPP
No protocolo SMPP, o campo sm_length especifica o comprimento em bytes do conteúdo da mensagem curta contido no campo short_message de PDUs como submit_sm, deliver_sm e data_sm.
Detalhes do Campo
- Nome do Campo: sm_length
- Tamanho: 1 byte (inteiro sem sinal)
- Intervalo: 0–254 (máximo permitido pelo SMPP 3.4)
- Localização: Imediatamente antes do campo
short_message - Propósito: Indica o número de bytes no payload
short_message
Comportamento Chave
O valor de sm_length depende da codificação utilizada:
| Codificação | Caracteres por SMS | Tamanho em Bytes | Notas |
|---|---|---|---|
| GSM 7-bit | Até 160 | Até 140 | Bits compactados; o tamanho real em bytes depende do conteúdo |
| UCS2 | Até 70 | 2 × número de caracteres | Cada caractere ocupa 2 bytes |
| 8-bit binário | N/A | Até 140 | Comprimento bruto em bytes |
Exemplo: Mensagem ASCII
Uma mensagem simples usando codificação padrão 7-bit:
Texto: "Hello" Codificação: GSM 7-bit Bytes Compactados (Hex): C8 32 9B FD 06 Comprimento em Bytes: 5 sm_length: 5
Exemplo: Mensagem Codificada em UCS2
Uma mensagem Unicode usando codificação UCS2 (data_coding = 0x08):
Texto: "Hi" UCS2 Hex: 0048 0069 Array de Bytes: 00 48 00 69 Comprimento em Bytes: 4 sm_length: 4
Exemplo de PDU SMPP (submit_sm)
0000003B // Comprimento do Comando (59 bytes)
00000004 // ID do Comando: submit_sm
00000000 // Status do Comando
00000001 // Número de Sequência
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" em UCS2
Notas Importantes
sm_lengthrefere-se ao comprimento em bytes, não à contagem de caracteres.- Se o conteúdo da mensagem for dividido em várias mensagens (concatenação), cada parte tem seu próprio
sm_length. - Não confunda
sm_lengthcom o comprimento total da mensagem (comprimento da PDU).
Divisão e Concatenação de Mensagens
Quando uma mensagem excede o tamanho máximo do payload, ela é dividida em partes usando um UDH (User Data Header). O sm_length nesses casos inclui o UDH também:
Exemplo: UDH (6 bytes) + 67 bytes UCS2 = 73 sm_length = 73
Conclusão
O campo sm_length é crítico no SMPP, pois define quantos bytes o SMSC deve ler para o corpo da mensagem. Entender como a codificação afeta este campo garante a entrega precisa e bem-sucedida das mensagens.
Referências
- Especificação SMPP 3.4
- Conjunto de Caracteres GSM 03.38
- Codificação Unicode UCS2