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)
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 |
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_flagseparado.
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.