Inicio / Recibos de entrega SMPP
Recibos de entrega SMPP: Formato, valores de stat, códigos err y tiempos
Un recibo de entrega (DLR) te dice qué pasó con un mensaje después de que el gateway lo aceptara. En SMPP llega como un deliver_sm del servidor, con un texto de formato estándar y, en la mayoría de servidores, algunos TLV.
Cómo pedir el recibo
Pon registered_delivery a 1 en submit_sm para recibir un recibo por cada estado final (éxito y fallo). Los recibos llegan por un bind receiver o transceiver; con solo un bind transmitter nunca llegan.
El formato del recibo
El recibo es un deliver_sm con esm_class 0x04 y un short_message como este (SMPP 3.4, apéndice B):
id:2611041903 sub:001 dlvrd:001 submit date:2611041903 done date:2611041904 stat:DELIVRD err:000 text:Your code is 4821
| Campo | Significado |
|---|---|
| id | El ID del mensaje que devolvió el servidor en submit_sm_resp. |
| sub | Número de mensajes enviados (normalmente 001; suele ser fijo). |
| dlvrd | Número de entregados (001 = entregado, 000 = no). |
| submit date | Cuándo se envió el mensaje, AAMMDDhhmm, con el reloj de la red. |
| done date | Cuándo llegó a su estado final, mismo formato. |
| stat | El estado final (o intermedio), ver la tabla siguiente. |
| err | Código de error de 3 dígitos. 000 = sin error. Su significado depende de la red o del fabricante. |
| text | Los primeros caracteres del mensaje (a menudo 20). |
Valores de stat
| stat | Significado | Final |
|---|---|---|
| ENROUTE | En camino (intermedio) | no |
| DELIVRD | Entregado al teléfono | sí |
| EXPIRED | No entregado antes de que venciera su validez (teléfono apagado o sin cobertura) | sí |
| DELETED | Borrado por la red antes de entregarse | sí |
| UNDELIV | No entregable (número no válido, bloqueado o inalcanzable) | sí |
| ACCEPTD | Aceptado por la red (intermedio, o leído en nombre del abonado) | no |
| UNKNOWN | La red no informó de un estado final | sí |
| REJECTD | Rechazado por la red (ruta, contenido o remitente) | sí |
TLV del recibo
La mayoría de servidores envían también receipted_message_id (0x001E: el ID del mensaje, sin tener que leer el texto), message_state (0x0427: 1 ENROUTE, 2 DELIVERED, 3 EXPIRED, 4 DELETED, 5 UNDELIVERABLE, 6 ACCEPTED, 7 UNKNOWN, 8 REJECTED) y network_error_code (0x0423: 3 octetos, un tipo de red — 1 ANSI-136, 2 IS-95, 3 GSM — y un error de 2 octetos).
Errores de red GSM habituales
Cuando network_error_code es de tipo GSM, el error suele ser un error MAP de 3GPP TS 29.002. Estos son los más frecuentes:
| Código | Significado |
|---|---|
| 1 | Abonado desconocido (el número no existe) |
| 5 | Abonado no identificado |
| 6 | Abonado ausente (SM) |
| 9 | Abonado no permitido |
| 11 | Teleservicio no aprovisionado (la línea no puede recibir SMS) |
| 12 | Equipo no permitido |
| 13 | Llamada bloqueada |
| 21 | Función no soportada |
| 27 | Abonado ausente (teléfono apagado o sin cobertura) |
| 31 | Abonado ocupado para SMS MT |
| 32 | Fallo de entrega del SM (memoria llena o error del teléfono) |
| 33 | Lista de mensajes en espera llena |
| 34 | Fallo del sistema |
| 35 | Faltan datos |
| 36 | Valor de datos inesperado |
Cuánto tarda un recibo
La mayoría llegan en segundos. Si el teléfono está apagado o sin cobertura, la red guarda el mensaje hasta que vuelve o vence el periodo de validez; entonces el recibo dice EXPIRED. Sin periodo de validez se aplica el de la red (a menudo de 24 a 72 horas).
Las fechas del recibo las escribe la red con su propio reloj y zona horaria: compáralas entre sí, no con la hora de tu servidor.
Un recibo no prueba la lectura
DELIVRD significa que el teléfono confirmó el mensaje, no que la persona lo leyera. Algunas rutas envían DELIVRD sin confirmación real del teléfono; una plataforma que muestre el código err y la ruta ayuda a detectarlo.
Preguntas frecuentes
¿Por qué no recibo recibos de entrega?
Comprueba que registered_delivery sea 1, que tengas abierto un bind receiver o transceiver y que relacionas los recibos por receipted_message_id o por el id del texto.
¿Qué significa err:000?
Sin error. Cualquier otro valor de err es propio de la red o del fabricante; junto con stat explica por qué falló un mensaje.
¿Puede un mensaje recibir más de un recibo?
Sí: algunas rutas envían un recibo intermedio (ENROUTE o ACCEPTD) antes del final. Toma como resultado solo los estados finales.
Sigue leyendo
Habla con un equipo técnico
Somos un equipo técnico. Hablarás con alguien que entiende SMPP, enrutamiento wholesale e interconexiones carrier. Propuesta técnica en menos de 24 horas.
Email técnico: ![]()