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

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

- URL canônico: https://www.broadnet.me/pt/reference/smpp-delivery-receipts-dlr
- Idioma: pt
- Última atualização: 2026-07-18
- Editor: BroadNet (https://www.broadnet.me)

O formato de texto do relatório de entrega do Apêndice B dentro do deliver_sm: id, sub, dlvrd, submit date, done date, stat, err e Text — mais as palavras-chave stat e os seus números message_state.

## 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
```

## 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)*

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

*Palavras-chave stat ↔ message_state*

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

## Fontes

- [SMPP v3.4 specification — Appendix B (delivery receipt)](https://smpp.org/SMPP_v3_4_Issue1_2.pdf)
- [3GPP TS 23.040 — SMS status report](https://www.3gpp.org/dynareport/23040.htm)

## Relacionados

- [Decodificador DLR (ferramenta gratuita)](https://www.broadnet.me/pt/tools/dlr-decoder)
- [deliver_sm SMPP e mensagens MO](https://www.broadnet.me/pt/reference/smpp-deliver-sm)
- [Parâmetros opcionais SMPP TLV](https://www.broadnet.me/pt/reference/smpp-tlv-parameters)
- [Lista de verificação (guia) para integração SMPP](https://www.broadnet.me/pt/guides/smpp-integration-checklist)
- [Produto API SMS](https://www.broadnet.me/pt/products/sms-api)
