Decodificador de PDU SMPP.
Cole o hexadecimal de um PDU SMPP v3.4 para decodificar o seu cabeçalho de 16 bytes — command_length, command_id (com o nome), command_status e sequence_number — e ver o layout obrigatório de campos do corpo para submit_sm e deliver_sm. Nada sai do seu dispositivo.
ESME_ROK — No error
PDU apenas com cabeçalho — sem corpo (típico de enquire_link, unbind e da maioria das confirmações _resp).
A resposta curta
O que é um PDU SMPP?
Um PDU (Unidade de Dados de Protocolo) é uma única mensagem SMPP no fio. Todo PDU — um bind, um submit_sm, um relatório de entrega, um enquire_link — começa com o mesmo cabeçalho de 16 bytes composto por quatro inteiros de 32 bits big-endian: command_length (o comprimento total em bytes incluindo o cabeçalho), command_id (qual operação é), command_status (o resultado, que é 0 / ESME_ROK numa resposta bem-sucedida) e sequence_number (usado para associar uma resposta ao seu pedido). Quaisquer campos do corpo seguem o cabeçalho.
O layout do cabeçalho de 16 bytes
| Bytes | Campo | Significado |
|---|---|---|
| 0–3 | command_length | Comprimento total do PDU em octetos, cabeçalho incluído. |
| 4–7 | command_id | Identifica a operação (ex. 0x00000004 = submit_sm). |
| 8–11 | command_status | Código de resultado; 0 = ESME_ROK. Só relevante em respostas. |
| 12–15 | sequence_number | Correlaciona um pedido com a sua resposta. |
Campos do corpo submit_sm / deliver_sm
Após o cabeçalho, um submit_sm ou deliver_sm transporta os seus campos obrigatórios numa ordem fixa, opcionalmente seguidos de parâmetros TLV (opcionais). Esta ferramenta lista a ordem; não analisa totalmente as cadeias C-Octet de comprimento variável, pois os seus limites dependem dos terminadores nulos e do campo sm_length.
| Campo | Tipo | Significado |
|---|---|---|
| service_type | C-Octet String | Indica o serviço de aplicação SMS (nulo = predefinido). |
| source_addr_ton | Integer (1) | Tipo de número do remetente. |
| source_addr_npi | Integer (1) | Indicador do plano de numeração do remetente. |
| source_addr | C-Octet String | Endereço do originador da mensagem. |
| dest_addr_ton | Integer (1) | Tipo de número do destinatário. |
| dest_addr_npi | Integer (1) | Indicador do plano de numeração do destinatário. |
| destination_addr | C-Octet String | MSISDN / código curto de destino. |
| esm_class | Integer (1) | Modo e tipo de mensagem (ex. 0x04 = relatório de entrega). |
| protocol_id | Integer (1) | Identificador de protocolo (específico da rede). |
| priority_flag | Integer (1) | Nível de prioridade da mensagem. |
| schedule_delivery_time | C-Octet String | Hora de entrega agendada (nulo = imediato). |
| validity_period | C-Octet String | Período de validade da mensagem (nulo = predefinido). |
| registered_delivery | Integer (1) | Se é solicitado um relatório de entrega (DLR). |
| replace_if_present_flag | Integer (1) | Substituir uma mensagem existente, se presente. |
| data_coding | Integer (1) | Esquema de codificação (0 = GSM-7, 8 = UCS-2). |
| sm_default_msg_id | Integer (1) | Identificador de mensagem predefinido. |
| sm_length | Integer (1) | Comprimento em octetos do campo short_message. |
| short_message | Octet String | A carga útil da mensagem (até 254 octetos). |
Perguntas frequentes
Quais são os quatro campos do cabeçalho SMPP?
Todo PDU SMPP começa com um cabeçalho de 16 bytes composto por quatro inteiros de 32 bits big-endian: command_length (comprimento total do PDU em octetos, incluindo o cabeçalho), command_id (a operação, como 0x00000004 para submit_sm), command_status (o código de resultado, 0 = ESME_ROK) e sequence_number (que correlaciona uma resposta com o seu pedido original).
Por que motivo command_status é normalmente 0 nos meus pedidos?
command_status só é relevante em PDUs de resposta e generic_nack. Em PDUs de pedido (submit_sm, bind, enquire_link) é reservado e deve ser definido como 0. Um valor diferente de zero num _resp indica um erro — por exemplo, 0x00000058 é ESME_RTHROTTLED.
Os inteiros do SMPP são big-endian?
Sim. O SMPP codifica inteiros multi-octeto na ordem de bytes de rede (big-endian, byte mais significativo primeiro). Este decodificador lê cada campo de cabeçalho de 4 bytes como um inteiro sem sinal de 32 bits big-endian.
Esta ferramenta decodifica o texto da mensagem?
Decodifica o cabeçalho fixo de 16 bytes e lista a ordem dos campos do corpo para submit_sm e deliver_sm, mas não analisa completamente o corpo de comprimento variável em valores individuais. As cadeias C-Octet terminam em nulo e o comprimento de short_message é transportado em sm_length, pelo que uma análise completa do corpo depende desses limites — esta ferramenta mantém-se no layout de cabeçalho baseado na norma.
Onde posso pesquisar um command_status que não reconheço?
Utilize a referência de códigos de erro do SMPP, que lista cada valor command_status do SMPP v3.4 pelo nome hexadecimal e simbólico, com um significado em linguagem simples e a causa e correção prováveis.
Precisa de um bind SMPP real?
A BroadNet oferece ligações SMPP 3.4 diretas juntamente com uma API REST e webhooks de entrega em 200+ países. Fale com a nossa equipa sobre débito e encaminhamento.