Como configurar o campo ESM Class do SMPP

Configurações de classe ESM no Ozeki SMS Gateway

O Ozeki SMS Gateway permite configurar manualmente o campo ESM class (Figura 1)

Figura 1 - Configuração do campo ESM class

O que é o campo ESM Class?

O Extended Service Message (ESM) Class no SMPP é um campo de 1 byte nos PDUs do SMPP que controla recursos avançados de manipulação de mensagens. Ele é usado nas operações submit_sm, deliver_sm e data_sm para especificar:

  • Tipos de mensagem (ex.: SMS, recibo de entrega)
  • Comportamento do recibo de entrega
  • Presença de UDH (User Data Header)
  • Sinalizadores de prioridade e roteamento da mensagem

Estrutura e Bitmask do ESM Class

O ESM class é uma bitmask onde cada bit ou grupo de bits ativa recursos específicos:

Bits Descrição
7 Modo de Mensagem: 0 = Padrão, 1 = Datagrama
6 Tipo de Mensagem: 0 = Normal, 1 = Recibo de Entrega
5 Indicador UDHI: 1 = UDH presente no payload
4 Caminho de Resposta: 1 = Caminho de resposta solicitado
3-2 Prioridade da Mensagem (00 = Normal, 01 = Interativa, 10 = Urgente, 11 = Emergência)
1-0 Reservado

Valores Comuns de ESM Class

ESM (Hex) Binário Descrição
0x00 00000000 Padrão (sem tratamento especial)
0x04 00000100 Flag UDHI ativada (UDH presente)
0x08 00001000 Caminho de resposta solicitado
0x20 00100000 Recibo de entrega (bit 6 = 1)
0x30 00110000 Prioridade urgente + recibo de entrega
0x60 01100000 Modo datagrama + recibo de entrega
Observação: Muitos SMSCs ignoram os bits reservados (1-0). Os níveis de prioridade (bits 3-2) dependem da rede.

Casos de Uso Principais

1. SMS Concatenado (Flag UDHI)

Ao enviar mensagens multiparte, defina o bit 5 (UDHI=1) e inclua um User Data Header (UDH) no payload. Exemplo para uma mensagem de 3 partes:

ESM Class: 0x40 (binário 01000000: UDHI ativado)
Payload: 
05 00 03 02 01  // UDH (5 bytes: IEI=00, IEDL=03, parte 1 de 2)
C8329BFD06       // Payload GSM-7 ("Olá")

2. Solicitações de Recibo de Entrega

Defina o bit 6 (0x20) para solicitar um recibo de entrega. Frequentemente combinado com o campo registered_delivery:

ESM Class: 0x20 (binário 00100000)
registered_delivery: 0x01 (solicitar recibo)

3. Mensagens Prioritárias

Use os bits 3-2 para priorizar mensagens. Exemplo para prioridade urgente:

ESM Class: 0x10 (binário 00010000: Prioridade urgente)

Exemplos de PDUs SMPP

Exemplo 1: SMS Básico (ESM=0x00)

0000001D  // Comprimento do Comando (29 bytes)
00000004  // ID do Comando (SubmitSM)
00000001  // Número de Sequência
00        // TON da Origem
00        // NPI da Origem
736F7572636500  // Endereço de Origem ("source")
00        // TON do Destino
00        // NPI do Destino
36353433323100  // Endereço de Destino ("654321")
00        // ESM Class (0x00: Padrão)
00        // Protocol ID (PID)
00        // Prioridade
00        // Horário de Entrega Agendada
00        // Período de Validade
00        // Entrega Registrada
00        // Substituir-se-Presente
00        // Codificação de Dados (DCS=0x00)
00        // ID Padrão de Mensagem SM
07        // Comprimento SM (7 septets)
C8329BFD06DDDF72  // Payload ("Olá!")

Exemplo 2: SMS Concatenado (ESM=0x40)

00000025  // Comprimento do Comando (37 bytes)
00000004  // ID do Comando (SubmitSM)
00000002  // Número de Sequência
00        // TON da Origem
00        // NPI da Origem
736F7572636500  // Endereço de Origem ("source")
00        // TON do Destino
00        // NPI do Destino
36353433323100  // Endereço de Destino ("654321")
40        // ESM Class (0x40: UDHI ativado)
00        // Protocol ID (PID)
00        // Prioridade
00        // Horário de Entrega Agendada
00        // Período de Validade
00        // Entrega Registrada
00        // Substituir-se-Presente
00        // Codificação de Dados (DCS=0x00)
00        // ID Padrão de Mensagem SM
0C        // Comprimento SM (12 bytes)
0500030201C8329BFD06DDDF72  // UDH + "Olá" (Parte 1/2)

Exemplo 3: Recibo de Entrega (ESM=0x20)

0000001D  // Comprimento do Comando (29 bytes)
00000004  // ID do Comando (SubmitSM)
00000003  // Número de Sequência
00        // TON da Origem
00        // NPI da Origem
736F7572636500  // Endereço de Origem ("source")
00        // TON do Destino
00        // NPI do Destino
36353433323100  // Endereço de Destino ("654321")
20        // ESM Class (0x20: Recibo de entrega)
00        // Protocol ID (PID)
00        // Prioridade
00        // Horário de Entrega Agendada
00        // Período de Validade
01        // Entrega Registrada (recibo solicitado)
00        // Substituir-se-Presente
00        // Codificação de Dados (DCS=0x00)
00        // ID Padrão de Mensagem SM
07        // Comprimento SM (7 septets)
C8329BFD06DDDF72  // Payload ("Olá!")

Interações com Outros Campos

  • UDHI (ESM) + DCS: Se UDHI estiver definido, certifique-se de que o DCS suporte UDH (ex.: GSM-7 ou 8-bit).
  • ESM Class + registered_delivery: Use ambos para solicitar recibos de entrega explicitamente.
  • Bits de Prioridade + Flag de Prioridade: Alguns SMSCs priorizam mensagens com base nos bits ESM em vez do campo de prioridade separado.

Armadilhas Comuns

  • Definir UDHI sem incluir um User Data Header válido.
  • Usar flags de recibo de entrega (ESM=0x20) sem definir registered_delivery.
  • Incompatibilidade entre os bits de prioridade do ESM e o campo priority_flag separado.

Conclusão

A classe ESM é uma ferramenta poderosa para controlar o comportamento das mensagens em SMPP. Seu design de bitmask permite recursos como concatenação, recibos e priorização. Sempre verifique o suporte do SMSC para flags avançadas e teste as configurações minuciosamente. Para detalhes autorizados, consulte a especificação SMPP v3.4 ou v5.0.

More information