command_status es el campo de 4 bytes de la cabecera que informa del resultado de una operación. En una solicitud es 0 (ESME_ROK); en una respuesta transporta un código de error ESME_R*. 0x00000000 es éxito; los valores distintos de cero indican fallos concretos como contraseña no válida, limitación o cola de mensajes llena.
Cómo funciona command_status
Toda PDU de respuesta refleja el sequence_number de la solicitud y ajusta command_status al resultado. ESME_ROK (0) significa éxito. Cualquier otro valor es un error cuyo código numérico se corresponde con una constante ESME_R* con nombre en la especificación. Los códigos 0x00000100–0x000003FF se reservan para extensiones de SMPP y 0x00000400–0x000004FF para errores específicos del fabricante del SMSC, así que gestiona siempre con elegancia los códigos desconocidos.
Los códigos que verás de verdad
Un pequeño conjunto de códigos cubre la mayor parte del tratamiento real. Agrúpalos por respuesta: reintentar tras espera (limitación, cola llena, error de sistema), corregir la solicitud (dirección, TON/NPI, data_coding o longitud de mensaje no válidos) y fatal para la sesión (contraseña o system id no válidos, fallo de bind).
| Valor | Nombre | Significado | Reacción típica |
|---|---|---|---|
| 0x00000000 | ESME_ROK | No hay error | Éxito |
| 0x00000001 | ESME_RINVMSGLEN | Longitud de mensaje no válida | Corregir la carga útil/segmento |
| 0x00000005 | ESME_RALYBND | Bind ya establecido | No volver a hacer bind; reutilizar la sesión |
| 0x0000000A | ESME_RINVSRCADR | Dirección de origen no válida | Corregir remitente / TON / NPI |
| 0x0000000B | ESME_RINVDSTADR | Dirección de destino no válida | Corregir MSISDN del destinatario |
| 0x0000000D | ESME_RBINDFAIL | Fallo del bind | Aplicar backoff, verificar las credenciales |
| 0x0000000E | ESME_RINVPASWD | Contraseña no válida | Fatal: corregir credenciales |
| 0x0000000F | ESME_RINVSYSID | ID de sistema no válido | Fatal: corregir credenciales |
| 0x00000014 | ESME_RMSGQFUL | Cola de mensajes llena | Aplicar backoff y reintentar |
| 0x00000043 | ESME_RINVESMCLASS | esm_class no válido | Corregir bits de esm_class |
| 0x00000058 | ESME_RTHROTTLED | Limitación de tasa: tasa superada | Reducir la velocidad, backoff con jitter |
| 0x00000062 | ESME_RINVEXPIRY | validity_period no válido | Corregir el formato de validez |
| 0x000000FE | ESME_RDELIVERYFAILURE | Error de entrega (data_sm) | Inspeccionar/reintentar según la política |
| 0x000000FF | ESME_RUNKNOWNERR | Error desconocido | Registrar, alertar, reintentar con precaución |
Rangos reservados y de fabricante
No todos los códigos que recibas están en la especificación básica. La especificación reserva 0x00000100–0x000003FF para uso futuro de SMPP y 0x00000400–0x000004FF para códigos específicos del SMSC, así que tu proveedor puede devolver un valor que solo explique su documentación. Asigna los códigos específicos del proveedor a una taxonomía interna normalizada (número no válido, bloqueado, limitado, fallo temporal) para que la calidad entre rutas siga siendo comparable.
| Rango | Reservado para |
|---|---|
| 0x00000100 – 0x000003FF | Extensiones del protocolo SMPP |
| 0x00000400 – 0x000004FF | Errores específicos del proveedor SMSC |
| 0x00000500 – 0xFFFFFFFF | Reservado |
Preguntas frecuentes
¿Qué significa ESME_RTHROTTLED y cómo debo gestionarlo?
ESME_RTHROTTLED (0x00000058) significa que superaste tu tasa de mensajes permitida. Deja de aumentar la carga, pausa los envíos y aplica una espera con variación aleatoria antes de reintentar. Insistir a la misma tasa arriesga que el proveedor cierre el bind.
¿Es recuperable ESME_RINVPASWD?
No, no en tiempo de ejecución. ESME_RINVPASWD (0x0000000E) indica credenciales erróneas. No repitas el bind en bucle; corrige la configuración de system_id/password y reconecta. Bind fallidos repetidos pueden provocar el bloqueo de la IP.
¿Cuál es la diferencia entre ESME_RMSGQFUL y ESME_RTHROTTLED?
ESME_RMSGQFUL (0x00000014) significa que la cola del SMSC está temporalmente llena; ESME_RTHROTTLED (0x00000058) significa que superaste tu límite de tasa. Ambos exigen espera, pero la limitación tiene que ver con tu TPS y la cola llena con la capacidad del SMSC.
Recibí un código de error que no está en la especificación, ¿por qué?
SMPP reserva 0x400–0x4FF para códigos específicos del fabricante del SMSC, así que tu proveedor puede devolver un valor documentado solo por él. Consulta la tabla de errores del proveedor y asígnalo a tu taxonomía interna.
Especificaciones de la fuente
Las normas publicadas en las que se basa esta página. Se abre en una pestaña nueva.