Códigos de error SMPP.
Cada valor command_status definido en la especificación SMPP v3.4 — código hexadecimal, nombre simbólico, significado en lenguaje sencillo y causa probable y solución. Busque por código o nombre para depurar rápidamente un fallo de bind o submit_sm.
| Hexadecimal | Nombre simbólico | Significado y causa probable / solución |
|---|---|---|
| 0x00000000 | ESME_ROK | Sin errores. La PDU fue aceptada. En submit_sm, esto solo significa que el SMSC aceptó el mensaje para su procesamiento, no que fue entregado — siga la entrega mediante la confirmación de entrega (DLR) en deliver_sm. |
| 0x00000001 | ESME_RINVMSGLEN | Longitud de mensaje no válida. short_message o message_payload es demasiado largo o está vacío para la codificación usada. Segmente el contenido largo o use el TLV message_payload; verifique que data_coding coincida con la longitud en bytes. |
| 0x00000002 | ESME_RINVCMDLEN | Longitud de comando no válida. El command_length de la cabecera de la PDU no coincide con los bytes realmente enviados. Casi siempre un error del codificador de PDU del cliente o un error de límite de trama/búfer. |
| 0x00000003 | ESME_RINVCMDID | ID de comando no válido. El command_id es desconocido o no compatible con el SMSC. Compruebe que envía una operación válida y la versión correcta de SMPP. |
| 0x00000004 | ESME_RINVBNDSTS | Estado BIND incorrecto para el comando dado. Operación no permitida en el modo de bind actual — por ejemplo, submit_sm en un bind receiver, o una solicitud antes de completar el bind. Enlace primero como transmitter o transceiver. |
| 0x00000005 | ESME_RALYBND | El ESME ya está en estado enlazado. Se emitió un segundo bind en una sesión ya enlazada. Reutilice la sesión existente o haga unbind antes de volver a enlazar. |
| 0x00000006 | ESME_RINVPRTFLG | Indicador de prioridad no válido. priority_flag está fuera del rango 0–3 que acepta el SMSC. Use un valor admitido (normalmente 0). |
| 0x00000007 | ESME_RINVREGDLVFLG | Indicador de entrega registrada no válido. registered_delivery contiene un valor no admitido. Use una máscara de bits que el SMSC admita (p. ej., 0x01 para solicitar un DLR final). |
| 0x00000008 | ESME_RSYSERR | Error del sistema. Fallo genérico del lado del SMSC que impide el procesamiento. Transitorio: reintente con backoff; si persiste, contacte al proveedor. |
| 0x0000000A | ESME_RINVSRCADR | Dirección de origen no válida. source_addr (el ID de remitente) está malformado o no permitido — longitud incorrecta, caracteres ilegales, o un remitente alfanumérico no registrado. Registre o autorice el remitente. |
| 0x0000000B | ESME_RINVDSTADR | Dirección de destino no válida. destination_addr está malformada o no es enrutable — formato de MSISDN incorrecto, código de país ausente, o rango bloqueado. Normalice al formato E.164. |
| 0x0000000C | ESME_RINVMSGID | ID de mensaje no válido. El message_id de un query_sm, cancel_sm o replace_sm no coincide con ningún mensaje conocido. Use el ID exacto devuelto en submit_sm_resp. |
| 0x0000000D | ESME_RBINDFAIL | Fallo de bind. La solicitud de bind fue rechazada por un motivo distinto de las credenciales — p. ej., IP no autorizada, TLS requerido, o tipo de bind no permitido para la cuenta. |
| 0x0000000E | ESME_RINVPASWD | Contraseña no válida. La contraseña en la PDU de bind es incorrecta o ha caducado. Verifique las credenciales; el campo está limitado a 8 octetos en SMPP 3.4. |
| 0x0000000F | ESME_RINVSYSID | ID de sistema no válido. El system_id (nombre de usuario) es desconocido para el SMSC. Verifique el identificador de la cuenta y que esté habilitado. |
| 0x00000011 | ESME_RCANCELFAIL | Fallo de Cancel SM. cancel_sm no pudo eliminar el mensaje — puede que ya se haya entregado o haya caducado. Nada que reintentar. |
| 0x00000013 | ESME_RREPLACEFAIL | Fallo de Replace SM. replace_sm no pudo actualizar el mensaje, normalmente porque ya salió de la cola. Envíe un mensaje nuevo en su lugar. |
| 0x00000014 | ESME_RMSGQFUL | Cola de mensajes llena. La cola de almacenamiento y reenvío del SMSC está al máximo de su capacidad. Reduzca su tasa de envío y reintente con backoff. |
| 0x00000015 | ESME_RINVSERTYP | Tipo de servicio no válido. El valor de service_type no se reconoce o no está permitido. Déjelo nulo o use un valor acordado con el proveedor. |
| 0x00000033 | ESME_RINVNUMDESTS | Número de destinos no válido. number_of_dests en una PDU submit_multi está fuera de rango. Manténgalo dentro del límite de destinos por PDU del SMSC. |
| 0x00000034 | ESME_RINVDLNAME | Nombre de lista de distribución no válido. La lista de distribución referenciada en submit_multi no existe en el SMSC. Cree la lista o envíe a direcciones explícitas. |
| 0x00000040 | ESME_RINVDESTFLAG | Indicador de destino no válido. En submit_multi, el dest_flag de una entrada no es ni una dirección SME (1) ni una lista de distribución (2). Corrija el indicador por destino. |
| 0x00000042 | ESME_RINVSUBREP | Solicitud de 'envío con reemplazo' no válida. replace_if_present_flag se estableció en una operación que no lo admite, o se combinó con listas de distribución. Elimine el indicador. |
| 0x00000043 | ESME_RINVESMCLASS | Datos del campo esm_class no válidos. esm_class contiene una combinación no admitida — p. ej., un bit UDHI o de confirmación de entrega que el SMSC rechaza. Revise los bits de modo/tipo del mensaje. |
| 0x00000044 | ESME_RCNTSUBDL | No se puede enviar a la lista de distribución. La cuenta no tiene permiso para enviar a la lista de distribución indicada. Use direccionamiento directo o solicite permiso. |
| 0x00000045 | ESME_RSUBMITFAIL | Fallo de submit_sm o submit_multi. Fallo genérico de envío en el SMSC. Suele ser transitorio (enrutamiento/capacidad); reintente con backoff e inspeccione los TLV para un motivo más específico. |
| 0x00000048 | ESME_RINVSRCTON | TON de dirección de origen no válido. source_addr_ton no es válido para el formato del remitente — p. ej., se requiere TON 5 (alfanumérico) para un remitente de texto, pero se envió un TON numérico. |
| 0x00000049 | ESME_RINVSRCNPI | NPI de dirección de origen no válido. source_addr_npi no es válido o es incoherente con el TON. Use NPI 0 con remitentes alfanuméricos y NPI 1 (E.164) para MSISDN. |
| 0x00000050 | ESME_RINVDSTTON | TON de dirección de destino no válido. dest_addr_ton no es válido para el destino. Use TON 1 (internacional) con un MSISDN en formato E.164. |
| 0x00000051 | ESME_RINVDSTNPI | NPI de dirección de destino no válido. dest_addr_npi no es válido o es incoherente con el TON. NPI 1 (ISDN/E.164) es el valor habitual para números móviles. |
| 0x00000053 | ESME_RINVSYSTYP | Campo system_type no válido. El system_type de la PDU de bind no es aceptado. Déjelo nulo o use el valor exacto asignado por el proveedor. |
| 0x00000054 | ESME_RINVREPFLAG | Indicador replace_if_present no válido. replace_if_present_flag tiene un valor distinto de 0 o 1. Envíe un indicador booleano válido. |
| 0x00000055 | ESME_RINVNUMMSGS | Número de mensajes no válido. El campo sm_count / número de mensajes está fuera de rango. Corrija el valor en la PDU. |
| 0x00000058 | ESME_RTHROTTLED | Error de limitación — se superó el límite de mensajes. Está enviando más rápido que la tasa permitida para la cuenta (mensajes por segundo). Reduzca el ritmo de envío y reintente con backoff. Es una condición transitoria y reintentable. |
| 0x00000061 | ESME_RINVSCHED | Hora de entrega programada no válida. schedule_delivery_time está malformado o en el pasado. Use el formato de hora SMPP absoluto/relativo (YYMMDDhhmmsstnnp) o déjelo nulo. |
| 0x00000062 | ESME_RINVEXPIRY | Período de validez del mensaje no válido. validity_period está malformado o fuera de la ventana permitida. Use el formato de hora SMPP o déjelo nulo para el valor predeterminado del SMSC. |
| 0x00000063 | ESME_RINVDFTMSGID | Mensaje predefinido no válido o no encontrado. sm_default_msg_id hace referencia a un mensaje predefinido que el SMSC no tiene. Envíe el texto completo o un ID predefinido válido. |
| 0x00000064 | ESME_RX_T_APPN | Código de error de aplicación temporal del receptor ESME. Devuelto por su ESME (o un sistema anterior) para indicar un fallo temporal de la aplicación al procesar deliver_sm/data_sm. El SMSC puede reintentar la entrega más tarde. |
| 0x00000065 | ESME_RX_P_APPN | Código de error de aplicación permanente del receptor ESME. La aplicación receptora rechaza el mensaje de forma permanente. El SMSC no reintentará — corrija el gestor posterior o el motivo del rechazo. |
| 0x00000066 | ESME_RX_R_APPN | Código de error de rechazo de mensaje del receptor ESME. La aplicación receptora pide al SMSC que rechace el mensaje. Se usa para declinar contenido entrante específico. |
| 0x00000067 | ESME_RQUERYFAIL | Fallo de la solicitud query_sm. No se pudo completar la consulta de estado — el message_id puede ser desconocido o haber caducado del almacén del SMSC. Verifique el ID. |
| 0x000000C0 | ESME_RINVOPTPARSTREAM | Error en la parte opcional del cuerpo de la PDU. El flujo TLV (parámetro opcional) está malformado — longitud incorrecta o truncada. Corrija el codificador de TLV de su cliente. |
| 0x000000C1 | ESME_ROPTPARNOTALLWD | Parámetro opcional no permitido. Se envió un TLV que esta operación o el SMSC no permite. Elimine el parámetro opcional no admitido. |
| 0x000000C2 | ESME_RINVPARLEN | Longitud de parámetro no válida. La longitud declarada de un TLV no coincide con su valor. Corrija el campo de longitud del parámetro opcional. |
| 0x000000C3 | ESME_RMISSINGOPTPARAM | Falta el parámetro opcional esperado. No se proporcionó un TLV requerido para esta operación (p. ej., message_payload cuando short_message está vacío). Añada el parámetro opcional obligatorio. |
| 0x000000C4 | ESME_RINVOPTPARAMVAL | Valor de parámetro opcional no válido. Un TLV tiene un valor fuera de su conjunto permitido. Consulte la especificación SMPP para los valores permitidos de ese parámetro. |
| 0x000000FE | ESME_RDELIVERYFAILURE | Fallo de entrega (data_sm_resp). Se usa con data_sm para indicar que el mensaje no pudo entregarse al teléfono. Trátelo como un DLR fallido e inspeccione la red/ruta. |
| 0x000000FF | ESME_RUNKNOWNERR | Error desconocido. Valor genérico cuando el SMSC no tiene un código específico. Reintente una vez con backoff; si persiste, repórtelo al proveedor con una muestra de la PDU. |
Los valores no listados están reservados. Según la especificación SMPP v3.4: 0x00000100–0x000003FF está reservado para extensiones del protocolo SMPP, 0x00000400–0x000004FF para errores específicos del proveedor del SMSC, y 0x00000500–0xFFFFFFFF está reservado. Los huecos individuales por debajo de 0xFF (p. ej. 0x09, 0x10) están reservados por el estándar.
La respuesta breve
¿Qué es un código de error SMPP?
Un código de error SMPP es el valor del campo command_status de cada PDU de respuesta SMPP. Indica al cliente (ESME) si el SMSC aceptó la operación — 0x00000000 (ESME_ROK) significa éxito, y cualquier valor distinto de cero identifica por qué falló un bind, submit_sm, query_sm u otra solicitud. Los códigos están definidos por la especificación SMPP v3.4 y son coherentes en todos los SMSC compatibles.
Un submit_sm_resp exitoso con ESME_ROK solo confirma que el SMSC aceptó el mensaje para su procesamiento — la entrega final al teléfono se informa por separado en la confirmación de entrega (deliver_sm). Trate los errores en el momento del envío y en el momento de la entrega como dos capas distintas.
Preguntas frecuentes
¿Qué es command_status en SMPP?
command_status es un campo de 4 bytes en la cabecera de cada PDU de respuesta SMPP. En una PDU de solicitud es cero; en una respuesta lleva el resultado — 0x00000000 (ESME_ROK) para éxito o un código de error distinto de cero que identifica el fallo. Es la señal principal que usa su cliente para decidir si reintentar, corregir la PDU, o fallar.
¿Qué significa ESME_RTHROTTLED (0x00000058)?
Significa que está enviando mensajes más rápido que la tasa permitida para su cuenta (mensajes por segundo). Reduzca su bucle de envío, aplique un retroceso exponencial y manténgase dentro del rendimiento acordado con su proveedor. Es una condición transitoria y reintentable.
¿Cuál es la diferencia entre ESME_RINVSRCADR y ESME_RINVDSTADR?
ESME_RINVSRCADR (0x0000000A) significa que la dirección de origen — su ID de remitente — está malformada o no permitida, a menudo un remitente alfanumérico no registrado. ESME_RINVDSTADR (0x0000000B) significa que el MSISDN de destino está malformado o no es enrutable. Normalice las direcciones a E.164 y registre los ID de remitente donde sea necesario.
¿Significa ESME_ROK que el mensaje fue entregado?
No. ESME_ROK en submit_sm_resp solo confirma que el SMSC aceptó el mensaje para su procesamiento. La entrega final al teléfono se informa más tarde en la confirmación de entrega (deliver_sm), que lleva su propio estado como DELIVRD, UNDELIV o EXPIRED. Concilie siempre la aceptación del envío con el DLR.
¿Qué errores de SMPP son seguros de reintentar?
Los códigos transitorios del lado del sistema son reintentables con backoff: ESME_RSYSERR (0x08), ESME_RMSGQFUL (0x14), ESME_RTHROTTLED (0x58), ESME_RSUBMITFAIL (0x45) y ESME_RUNKNOWNERR (0xFF). Los errores de validación como direcciones no válidas, TON/NPI, longitud del mensaje o credenciales incorrectas son permanentes — corrija la solicitud o la configuración en lugar de reintentar.
¿Son estos códigos iguales en todos los SMSC?
Los códigos 0x00000000–0x000000FF están definidos por la especificación SMPP v3.4 y son coherentes en todos los SMSC compatibles. Los rangos 0x00000400–0x000004FF están reservados para errores específicos del proveedor, por lo que un SMSC dado puede devolver códigos adicionales allí con sus propios significados — consulte siempre la documentación de su proveedor para esos casos.
La especificación tras esta herramienta, en la biblioteca de referencia.
SMSC de calidad de operador sobre SMPP + SS7.
REST + SMPP 3.4, autenticación con token Bearer, webhooks de entrega.
Guía rápida, TypeScript SDK, referencias y herramientas.
¿Va a establecer una sesión SMPP?
BroadNet ofrece enlaces SMPP 3.4 directos con rendimiento predecible y un manejo claro de command_status. Hable con nuestro equipo sobre una conexión.