# Formato de las confirmaciones de entrega (DLR) de SMPP

> Una confirmación de entrega (DLR) es un deliver_sm cuyo esm_class lo marca como acuse. short_message transporta un texto de formato fijo —id, sub, dlvrd, submit date, done date, stat, err, Text— definido en el Apéndice B de SMPP v3.4. El campo stat (DELIVRD, EXPIRED, UNDELIV, REJECTD…) es el estado terminal del mensaje.

- URL canónica: https://www.broadnet.me/es/reference/smpp-delivery-receipts-dlr
- Idioma: es
- Última actualización: 2026-07-18
- Editor: BroadNet (https://www.broadnet.me)

El formato de texto de la confirmación de entrega del Apéndice B dentro de deliver_sm: id, sub, dlvrd, submit date, done date, stat, err y Text, más las palabras clave stat y sus números message_state.

## El texto de acuse del Apéndice B

Cuando el SMSC informa del resultado de un mensaje, envía un deliver_sm con el bit de acuse activo en esm_class (0x04) y coloca una cadena de texto estructurada en short_message. El formato se define en el Apéndice B de la especificación v3.4. Cada campo es una clave seguida de un valor; el campo id vincula el acuse con el message_id de tu submit_sm_resp.

*Un acuse de entrega correcta (contenido 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 por campo

El acuse es compacto pero cada campo importa para la conciliación. Las fechas usan el formato YYMMDDhhmm. sub y dlvrd cuentan los segmentos enviados y entregados. stat es el estado terminal de siete caracteres. err es un código de error específico de la red/SMSC (000 en caso de éxito). Text son los primeros 20 caracteres del mensaje original.

*Campos de la confirmación de entrega (Apéndice B)*

| Campo | Significado |
|---|---|
| id | SMSC message_id del submit_sm original |
| sub | Número de mensajes cortos enviados (segmentos) |
| dlvrd | Número de mensajes cortos entregados |
| fecha de envío | Fecha y hora de envío del mensaje (AAMMDDhhmm) |
| fecha de finalización | Cuando el mensaje alcanzó su estado final (AAMMDDhhmm) |
| stat | Estado final del mensaje: palabra clave de 7 caracteres (ver más abajo) |
| err | Código de error específico de la red/SMSC (000 = ninguno) |
| Texto | Los primeros 20 caracteres del mensaje original |

## Palabras clave stat y números message_state

La palabra clave stat es el estado terminal legible por humanos; el TLV message_state (0x0427) transporta la misma información como número. Trata DELIVRD como el único éxito inequívoco; EXPIRED, UNDELIV, REJECTD, DELETED y UNKNOWN son fallos terminales. ACCEPTD y ENROUTE no son finales y no deben cerrar un mensaje.

*Palabras clave stat ↔ message_state*

| stat | message_state | ¿Final? | Significado |
|---|---|---|---|
| ENROUTE | 1 | No | En tránsito |
| DELIVRD | 2 | Sí | Entregado al terminal |
| EXPIRED | 3 | Sí | Período de validez transcurrido |
| DELETED | 4 | Sí | Mensaje eliminado |
| UNDELIV | 5 | Sí | No entregable |
| ACCEPTD | 6 | No | Aceptado / leído manualmente |
| UNKNOWN | 7 | Sí | Estado desconocido |
| REJECTD | 8 | Sí | Rechazado por la red |

## Analizar con seguridad

Analiza el acuse desde el short_message del deliver_sm, pero correlaciona con el TLV receipted_message_id (0x001E) en lugar de solo el texto id, y normaliza los formatos hexadecimal frente a decimal del identificador. Distingue los acuses intermedios (bit de notificación intermedia de esm_class) de los estados finales, y asigna el código err a una taxonomía normalizada —abonado ausente, terminal ocupado, bloqueado por spam, número no válido— ya que los valores de err brutos varían por ruta. Responde siempre deliver_sm_resp.

## Preguntas frecuentes

### ¿Qué significa stat:DELIVRD?

DELIVRD es el estado terminal que significa que el mensaje llegó al terminal del destinatario. Se corresponde con message_state 2 y es el único valor de stat que representa éxito de forma inequívoca.

### ¿Dónde está el texto de la confirmación de entrega dentro de la PDU?

En el campo short_message de un deliver_sm cuyo esm_class tiene activo el bit de confirmación de entrega (0x04). El texto sigue el formato del Apéndice B: id, sub, dlvrd, submit date, done date, stat, err, Text.

### ¿Qué es el campo err en un DLR?

err es un código de error específico de la red o del SMSC que da el motivo de una no entrega (000 significa ninguno). Como los valores difieren por ruta, asígnalos a una taxonomía interna normalizada para un informe de calidad coherente.

### ¿Por qué no coincide mi id de DLR con el message_id de submit_sm_resp?

Suele ser un desajuste de formato: algunos SMSC devuelven el message_id en hexadecimal en submit_sm_resp pero en decimal en el acuse (o viceversa). Normaliza ambos a una representación antes de comparar y prefiere el TLV receipted_message_id.

### ¿Son finales todas las confirmaciones de entrega?

No. ENROUTE y ACCEPTD son estados intermedios, y algunas redes envían notificaciones intermedias. Cierra un mensaje solo con un stat final como DELIVRD, EXPIRED, UNDELIV, REJECTD, DELETED o UNKNOWN.

## Fuentes

- [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)

## Relacionado

- [Decodificador DLR (herramienta gratuita)](https://www.broadnet.me/es/tools/dlr-decoder)
- [SMPP deliver_sm y mensajes MO](https://www.broadnet.me/es/reference/smpp-deliver-sm)
- [Parámetros opcionales SMPP TLV](https://www.broadnet.me/es/reference/smpp-tlv-parameters)
- [Lista de verificación (guía) para la integración SMPP](https://www.broadnet.me/es/guides/smpp-integration-checklist)
- [Producto SMS API](https://www.broadnet.me/es/products/sms-api)
