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.
bind_transceiverAbrir e autenticar a sessãobind_transceiver_respSessão aceitasubmit_smEnviar uma mensagemsubmit_sm_respAceito, ID da mensagem devolvidadeliver_smRelatório de entrega ou mensagem recebidadeliver_sm_respConfirmadoenquire_linkKeepalive em modo ocioso
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.
id:0a1b2c3d4e sub:001 dlvrd:001 submit date:2607181432 done date:2607181433 stat:DELIVRD err:000 Text:Your code is 4Campo 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.
| Campo | Significado |
|---|---|
| id | SMSC message_id do submit_sm original |
| sub | Número de mensagens curtas enviadas (segmentos) |
| dlvrd | Número de mensagens curtas entregues |
| data de envio | Quando a mensagem foi enviada (YYMMDDhhmm) |
| data de conclusão | Quando a mensagem atingiu o seu estado final (YYMMDDhhmm) |
| stat | Estado final da mensagem — palavra-chave de 7 caracteres (veja abaixo) |
| err | Código de erro específico da rede/SMSC (000 = nenhum) |
| Texto | Os primeiros 20 caracteres da mensagem original |
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.
| stat | message_state | Final? | Significado |
|---|---|---|---|
| ENROUTE | 1 | No | Em trânsito |
| DELIVRD | 2 | Sim | Entregue ao aparelho |
| EXPIRED | 3 | Sim | Período de validade expirado |
| DELETED | 4 | Sim | Mensagem apagada |
| UNDELIV | 5 | Sim | Não entregue |
| ACCEPTD | 6 | No | Aceito / lido manualmente |
| UNKNOWN | 7 | Sim | Estado desconhecido |
| REJECTD | 8 | Sim | Rejeitado pela rede |
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
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.
Especificações de origem
Os padrões publicados nos quais esta página se baseia. Abre num novo separador.