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.
bind_transceiverAbrir y autenticar la sesiónbind_transceiver_respSesión aceptadasubmit_smEnviar un mensajesubmit_sm_respAceptado, ID de mensaje devueltodeliver_smConfirmación de entrega o mensaje entrantedeliver_sm_respConfirmadoenquire_linkKeepalive en estado de inactividad
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.
id:0a1b2c3d4e sub:001 dlvrd:001 submit date:2607181432 done date:2607181433 stat:DELIVRD err:000 Text:Your code is 4Campo 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.
| 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.
| 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.
Especificaciones de la fuente
Las normas publicadas en las que se basa esta página. Se abre en una pestaña nueva.