Como inserir dados no campo SM do SMPP

No SMPP (Short Message Peer-to-Peer), o payload da Mensagem Curta (SM) é o texto real (ou dados binários) da mensagem SMS sendo transmitida. Para garantir a interpretação correta desse conteúdo, o campo data_coding no PDU desempenha um papel crítico, indicando o formato de codificação da mensagem.

Codificações comuns no SMPP

O campo data_coding tem 1 byte e informa ao SMSC como interpretar o payload da mensagem.

HexDecimalCodificaçãoDescrição
0x000GSM 7-bit padrãoConjunto de caracteres padrão do SMS
0x011ASCIIASCII 8-bit (subconjunto Latin-1)
0x033Latin-1 (ISO 8859-1)Conjunto de caracteres da Europa Ocidental
0x088UCS2Unicode (16-bit, big-endian)
0x044BinárioDados binários brutos de 8-bit

Exemplos de mensagens codificadas

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

Codificação padrão de SMS. Eficiente (até 160 caracteres em uma única mensagem).

Texto: "Hello"
GSM 7-bit Empacotado: C8 32 9B FD 06

2. UCS2 (data_coding = 0x08)

Usado para scripts não latinos (ex.: árabe, chinês, emojis). Suporta 70 caracteres por mensagem.

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

3. ASCII (data_coding = 0x01)

Apenas caracteres latinos básicos, menos eficiente em espaço que GSM 7-bit.

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

Exemplo de PDU SMPP com codificação UCS2

Aqui está um PDU submit_sm do SMPP carregando uma mensagem Unicode:

0000004B  // Comprimento do comando (75 bytes)
00000004  // ID do comando (submit_sm)
00000000  // Status do comando
00000001  // Número de sequência
74657374  // service_type: "test"
01        // source_addr_ton: Internacional
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 bytes
06450631  // Mensagem em UCS2 (ex. "مر")
062D0628

Codificação e concatenação

Mensagens longas são divididas em partes usando UDH (User Data Header). Isso reduz o tamanho máximo do payload:

  • GSM 7-bit: 160 → 153 caracteres por parte
  • UCS2: 70 → 67 caracteres por parte

Exemplo de UDH para parte da mensagem:

05 00 03 CC 02 01
// 05: comprimento do cabeçalho
// 00 03: IEI de concatenação
// CC: Referência da mensagem
// 02: total de partes
// 01: parte atual

Resumo

O SMPP fornece opções flexíveis de codificação através do campo data_coding. A codificação adequada garante compatibilidade entre redes globais, especialmente ao lidar com texto multilíngue ou dados binários. Os desenvolvedores devem corresponder os tipos de codificação com o conteúdo e os destinatários esperados para evitar corrupção da mensagem.

Referências

  • Especificação SMPP 3.4
  • Conjunto de caracteres GSM 03.38
  • Padrão Unicode

More information