Inicio / Códigos de error SMPP
Códigos de error SMPP: Cada command_status, qué significa y qué hacer
Cada respuesta SMPP (submit_sm_resp, bind_transceiver_resp…) lleva un command_status. 0 es éxito; cualquier otro valor es un código de error definido por SMPP 3.4 o por el fabricante del servidor. Esta tabla recoge los códigos que devuelven los gateways en la práctica, qué significan y qué hacer con cada uno.
Cómo leer un command_status
Es un entero de 32 bits que suele registrarse en hexadecimal (0x00000058) o decimal (88). Los códigos 0x00000000–0x000000FF los define la especificación SMPP 3.4; los 0x00000400–0x000004FF están reservados a errores propios de cada fabricante: para esos, consulta la documentación de tu proveedor.
Un command_status distinto de cero en submit_sm_resp significa que el mensaje no se aceptó: no se envió y, en la mayoría de plataformas, no se cobra. Un problema de entrega posterior se informa después en un recibo de entrega, no como command_status.
Errores que conviene reintentar
Solo unos pocos son temporales: ESME_RTHROTTLED (0x58), ESME_RMSGQFUL (0x14), ESME_RSYSERR (0x08) y ESME_RX_T_APPN (0x64). Reinténtalos con una espera creciente. Reintentar cualquier otro sin cambiar la petición devuelve el mismo error.
Todos los códigos
| Hex | Decimal | Nombre | Significado | Qué hacer |
|---|---|---|---|---|
| 0x00000000 | 0 | ESME_ROK | Sin error | Nada: el mensaje fue aceptado. |
| 0x00000001 | 1 | ESME_RINVMSGLEN | Longitud de mensaje no válida | Revisa la codificación y la longitud de short_message (máx. 254 octetos; los textos largos van en message_payload o en partes concatenadas). |
| 0x00000002 | 2 | ESME_RINVCMDLEN | Longitud de comando no válida | La PDU está mal formada: revisa la librería cliente o el codificador de PDU. |
| 0x00000003 | 3 | ESME_RINVCMDID | ID de comando no válido | El servidor no admite este comando (p. ej. submit_multi o query_sm): usa submit_sm. |
| 0x00000004 | 4 | ESME_RINVBNDSTS | Estado de bind incorrecto para este comando | Conéctate como transmitter o transceiver para enviar, y como receiver o transceiver para recibir recibos. |
| 0x00000005 | 5 | ESME_RALYBND | Ya conectado (bind) | La sesión ya tiene bind: no envíes un segundo bind por la misma conexión. |
| 0x00000006 | 6 | ESME_RINVPRTFLG | priority_flag no válido | Usa priority_flag de 0 a 3 (la mayoría de los gateways lo ignoran: envía 0). |
| 0x00000007 | 7 | ESME_RINVREGDLVFLG | registered_delivery no válido | Usa registered_delivery 0 (sin recibo) o 1 (recibo en éxito y fallo). |
| 0x00000008 | 8 | ESME_RSYSERR | Error del sistema | Problema temporal del servidor: reintenta más tarde con espera creciente; si sigue, contacta con soporte. |
| 0x0000000A | 10 | ESME_RINVSRCADR | Dirección de origen no válida | Revisa el remitente: alfanumérico de máx. 11 caracteres (TON 5, NPI 0) o número internacional (TON 1, NPI 1). |
| 0x0000000B | 11 | ESME_RINVDSTADR | Dirección de destino no válida | Envía el número en formato internacional sin "+" ni ceros iniciales (TON 1, NPI 1). |
| 0x0000000C | 12 | ESME_RINVMSGID | ID de mensaje no válido | El message_id no existe o no es tuyo (query_sm / cancel_sm). |
| 0x0000000D | 13 | ESME_RBINDFAIL | Bind fallido | Revisa system_id, contraseña, las IP permitidas y cuántos binds puede abrir la cuenta. |
| 0x0000000E | 14 | ESME_RINVPASWD | Contraseña no válida | Revisa la contraseña de la cuenta SMPP (distingue mayúsculas; máx. 8 caracteres en muchos servidores). |
| 0x0000000F | 15 | ESME_RINVSYSID | system_id no válido | Revisa el system_id de la cuenta SMPP. |
| 0x00000011 | 17 | ESME_RCANCELFAIL | cancel_sm fallido | No se pudo cancelar el mensaje (ya enviado o no encontrado). |
| 0x00000013 | 19 | ESME_RREPLACEFAIL | replace_sm fallido | No se pudo reemplazar el mensaje (ya enviado o no encontrado). |
| 0x00000014 | 20 | ESME_RMSGQFUL | Cola de mensajes llena | Reduce la velocidad y reintenta: la cola del servidor está llena. |
| 0x00000015 | 21 | ESME_RINVSERTYP | service_type no válido | Deja service_type vacío salvo que tu proveedor te haya dado un valor. |
| 0x00000033 | 51 | ESME_RINVNUMDESTS | Número de destinos no válido | submit_multi: revisa number_of_dests. |
| 0x00000034 | 52 | ESME_RINVDLNAME | Nombre de lista de distribución no válido | submit_multi: revisa el nombre de la lista. |
| 0x00000040 | 64 | ESME_RINVDESTFLAG | dest_flag no válido | submit_multi: dest_flag debe ser 1 (dirección) o 2 (lista). |
| 0x00000042 | 66 | ESME_RINVSUBREP | submit con replace no válido | Pon replace_if_present_flag a 0. |
| 0x00000043 | 67 | ESME_RINVESMCLASS | esm_class no válido | Usa esm_class 0, o 0x40 cuando el texto lleva UDH (partes concatenadas). |
| 0x00000044 | 68 | ESME_RCNTSUBDL | No se puede enviar a una lista de distribución | Envía a números individuales. |
| 0x00000045 | 69 | ESME_RSUBMITFAIL | submit_sm o submit_multi fallido | El servidor rechazó el mensaje (ruta, saldo o contenido): revisa la cuenta y reintenta más tarde. |
| 0x00000048 | 72 | ESME_RINVSRCTON | TON de origen no válido | Remitente alfanumérico: TON 5; número internacional: TON 1. |
| 0x00000049 | 73 | ESME_RINVSRCNPI | NPI de origen no válido | Remitente alfanumérico: NPI 0; número internacional: NPI 1. |
| 0x00000050 | 80 | ESME_RINVDSTTON | TON de destino no válido | Usa TON 1 (internacional). |
| 0x00000051 | 81 | ESME_RINVDSTNPI | NPI de destino no válido | Usa NPI 1 (ISDN / E.164). |
| 0x00000053 | 83 | ESME_RINVSYSTYP | system_type no válido | Deja system_type vacío salvo que tu proveedor te haya dado un valor. |
| 0x00000054 | 84 | ESME_RINVREPFLAG | replace_if_present_flag no válido | Pon replace_if_present_flag a 0. |
| 0x00000055 | 85 | ESME_RINVNUMMSGS | Número de mensajes no válido | Revisa los parámetros de la petición. |
| 0x00000058 | 88 | ESME_RTHROTTLED | Error de velocidad (demasiados mensajes por segundo) | Envía más despacio que la velocidad de tu cuenta, o reparte el tráfico en más binds si te lo permiten; reintenta los rechazados. |
| 0x00000061 | 97 | ESME_RINVSCHED | Hora de envío programado no válida | Usa el formato SMPP absoluto (YYMMDDhhmmsstnnp) o relativo (…R), o déjalo vacío. |
| 0x00000062 | 98 | ESME_RINVEXPIRY | Periodo de validez no válido | Usa el formato de hora SMPP, o déjalo vacío para la validez por defecto. |
| 0x00000063 | 99 | ESME_RINVDFTMSGID | Mensaje predefinido no válido o no encontrado | Pon sm_default_msg_id a 0. |
| 0x00000064 | 100 | ESME_RX_T_APPN | Error temporal de la aplicación receptora | Temporal: reintenta más tarde. |
| 0x00000065 | 101 | ESME_RX_P_APPN | Error permanente de la aplicación receptora | Permanente: no reintentes este mensaje tal cual. |
| 0x00000066 | 102 | ESME_RX_R_APPN | Mensaje rechazado por el receptor | El mensaje fue rechazado: no lo reintentes tal cual. |
| 0x00000067 | 103 | ESME_RQUERYFAIL | query_sm fallido | No se pudo consultar el mensaje (desconocido o demasiado antiguo). |
| 0x000000C0 | 192 | ESME_RINVOPTPARSTREAM | Error en la parte opcional de la PDU | Un TLV está mal formado: revisa la librería cliente. |
| 0x000000C1 | 193 | ESME_ROPTPARNOTALLWD | Parámetro opcional no permitido | Quita el TLV que el servidor no acepta. |
| 0x000000C2 | 194 | ESME_RINVPARLEN | Longitud de parámetro no válida | Un TLV tiene una longitud incorrecta: revisa la librería cliente. |
| 0x000000C3 | 195 | ESME_RMISSINGOPTPARAM | Falta un parámetro opcional esperado | Añade el TLV que exige el servidor (ver la documentación del proveedor). |
| 0x000000C4 | 196 | ESME_RINVOPTPARAMVAL | Valor de parámetro opcional no válido | Revisa el valor de los TLV que envías. |
| 0x000000FE | 254 | ESME_RDELIVERYFAILURE | Fallo de entrega (data_sm_resp) | No se pudo entregar el mensaje: mira el recibo o reintenta más tarde. |
| 0x000000FF | 255 | ESME_RUNKNOWNERR | Error desconocido | Error no especificado del servidor: contacta con soporte con el ID del mensaje y la hora. |
Preguntas frecuentes
¿Qué significa ESME_RTHROTTLED (0x58)?
Estás enviando más rápido de lo que permite tu cuenta. Baja a esa velocidad (o reparte el tráfico en los binds que tengas permitidos) y reenvía los mensajes rechazados.
¿Se cobra un mensaje con código de error?
Un mensaje rechazado con command_status distinto de cero no se aceptó, así que en la mayoría de plataformas no se cobra. Revisa las condiciones de tu proveedor.
¿Por qué recibo ESME_RINVDSTADR (0x0B)?
El número de destino no tiene el formato que espera el servidor. Envíalo en formato internacional, solo dígitos, con TON 1 y NPI 1.
¿Qué diferencia hay entre un command_status y un error del recibo de entrega?
El command_status responde a tu petición al momento (aceptada o no). El recibo de entrega llega después e indica si el mensaje aceptado llegó al teléfono, con sus propios campos stat y err.
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: ![]()