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_length
refere-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_length
com 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
More information
- Como configurar o campo Tipo de serviço SMPP
- Como configurar os campos de número de telefone SMPP
- Como configurar o campo Classe ESM do SMPP
- Como configurar o campo PID do SMPP
- Como configurar o campo de prioridade do SMPP
- Como configurar o campo de tempo agendado do SMPP
- Como configurar o campo de período de validade do SMPP
- Como configurar o campo de entrega registrada do SMPP
- Como configurar o campo Substituir se presente do SMPP
- Como configurar o campo sm_default_msg_id
- Como configurar o campo DCS do SMPP
- Como calcular o campo de comprimento SM do SMPP
- Como inserir dados no campo SM SMPP