BroadNet
SMPPOperações

Formato dos relatórios de entrega (DLR) do SMPP

Atualizado em 3 min de leituraBaseado em padrões
Resposta direta

Um relatório de entrega (DLR) é um deliver_sm cujo esm_class o marca como recibo. O short_message transporta um texto de formato fixo — id, sub, dlvrd, submit date, done date, stat, err, Text — definido no Apêndice B do SMPP v3.4. O campo stat (DELIVRD, EXPIRED, UNDELIV, REJECTD…) é o estado terminal da mensagem.

DiagramaUma sessão SMPP entre a sua plataforma e BroadNet
A sua plataforma (ESME)
BroadNet SMSC
Uma conexão TCP/TLS persistente
  1. bind_transceiverAbrir e autenticar a sessão
  2. bind_transceiver_respSessão aceita
  3. submit_smEnviar uma mensagem
  4. submit_sm_respAceito, ID da mensagem devolvida
  5. deliver_smRelatório de entrega ou mensagem recebida
  6. deliver_sm_respConfirmado
  7. enquire_linkKeepalive em modo ocioso
§01

O texto de recibo do Apêndice B

Quando o SMSC reporta o desfecho de uma mensagem, envia um deliver_sm com o bit de recibo ativo no esm_class (0x04) e coloca uma string de texto estruturada no short_message. O formato está definido no Apêndice B da especificação v3.4. Cada campo é uma chave seguida de um valor; o campo id liga o recibo ao message_id do seu submit_sm_resp.

Um recibo de entregue (conteúdo de short_message)text
id:0a1b2c3d4e sub:001 dlvrd:001 submit date:2607181432 done date:2607181433 stat:DELIVRD err:000 Text:Your code is 4
§02

Campo a campo

O recibo é compacto mas cada campo importa para a reconciliação. As datas usam o formato YYMMDDhhmm. sub e dlvrd contam os segmentos submetidos e entregues. stat é o estado terminal de sete caracteres. err é um código de erro específico da rede/SMSC (000 em sucesso). Text são os primeiros 20 caracteres da mensagem original.

Campos do relatório de entrega (Apêndice B)
CampoSignificado
idSMSC message_id do submit_sm original
subNúmero de mensagens curtas enviadas (segmentos)
dlvrdNúmero de mensagens curtas entregues
data de envioQuando a mensagem foi enviada (YYMMDDhhmm)
data de conclusãoQuando a mensagem atingiu o seu estado final (YYMMDDhhmm)
statEstado final da mensagem — palavra-chave de 7 caracteres (veja abaixo)
errCódigo de erro específico da rede/SMSC (000 = nenhum)
TextoOs primeiros 20 caracteres da mensagem original
§03

Palavras-chave stat e números message_state

A palavra-chave stat é o estado terminal legível por humanos; o TLV message_state (0x0427) transporta a mesma informação como número. Trate DELIVRD como o único sucesso inequívoco; EXPIRED, UNDELIV, REJECTD, DELETED e UNKNOWN são falhas terminais. ACCEPTD e ENROUTE não são finais e não devem encerrar uma mensagem.

Palavras-chave stat ↔ message_state
statmessage_stateFinal?Significado
ENROUTE1NoEm trânsito
DELIVRD2SimEntregue ao aparelho
EXPIRED3SimPeríodo de validade expirado
DELETED4SimMensagem apagada
UNDELIV5SimNão entregue
ACCEPTD6NoAceito / lido manualmente
UNKNOWN7SimEstado desconhecido
REJECTD8SimRejeitado pela rede
§04

Interpretar em segurança

Interprete o recibo a partir do short_message do deliver_sm, mas correlacione pelo TLV receipted_message_id (0x001E) em vez de apenas pelo texto do id, e normalize os formatos de id em hexadecimal vs decimal. Distinga recibos intermédios (bit de notificação intermédia do esm_class) dos estados finais e mapeie o código err para uma taxonomia normalizada — subscritor ausente, terminal ocupado, bloqueado por spam, número inválido — pois os valores de err brutos variam por rota. Responda sempre deliver_sm_resp.

Perguntas frequentes

Perguntas frequentes

O que significa stat:DELIVRD?

DELIVRD é o estado terminal que significa que a mensagem chegou ao terminal do destinatário. Corresponde ao message_state 2 e é o único valor de stat que representa sucesso de forma inequívoca.

Onde no PDU está o texto do relatório de entrega?

No campo short_message de um deliver_sm cujo esm_class tem o bit de relatório de entrega (0x04) ativo. O texto segue o formato do Apêndice B: id, sub, dlvrd, submit date, done date, stat, err, Text.

O que é o campo err num DLR?

err é um código de erro específico da rede ou do SMSC que dá o motivo de uma não-entrega (000 significa nenhum). Como os valores diferem por rota, mapeie-os para uma taxonomia interna normalizada para um relato de qualidade consistente.

Porque é que o id do meu DLR não corresponde ao message_id do submit_sm_resp?

Normalmente uma incompatibilidade de formato: alguns SMSCs devolvem o message_id em hexadecimal no submit_sm_resp mas em decimal no recibo (ou vice-versa). Normalize ambos para uma só representação antes de comparar e prefira o TLV receipted_message_id.

Todos os relatórios de entrega são finais?

Não. ENROUTE e ACCEPTD são estados intermédios, e algumas redes enviam notificações intermédias. Encerre uma mensagem apenas com um stat final como DELIVRD, EXPIRED, UNDELIV, REJECTD, DELETED ou UNKNOWN.

Referências

Especificações de origem

Os padrões publicados nos quais esta página se baseia. Abre num novo separador.

BNMantido pela equipa de engenharia BroadNet·Mensagens de nível de operadora desde 2003
Coloque-o no fio.

Construa com uma vinculação SMPP real e uma API REST.

Solicite acesso de teste com chaves de teste reais: envie primeiro para o seu próprio número verificado e, em seguida, passe para o ambiente de produção em mais de 200 países assim que a sua identidade de remetente e rotas forem aprovadas.