Ogave

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

HexDecimalNombreSignificadoQué hacer
0x000000000ESME_ROKSin errorNada: el mensaje fue aceptado.
0x000000011ESME_RINVMSGLENLongitud de mensaje no válidaRevisa la codificación y la longitud de short_message (máx. 254 octetos; los textos largos van en message_payload o en partes concatenadas).
0x000000022ESME_RINVCMDLENLongitud de comando no válidaLa PDU está mal formada: revisa la librería cliente o el codificador de PDU.
0x000000033ESME_RINVCMDIDID de comando no válidoEl servidor no admite este comando (p. ej. submit_multi o query_sm): usa submit_sm.
0x000000044ESME_RINVBNDSTSEstado de bind incorrecto para este comandoConéctate como transmitter o transceiver para enviar, y como receiver o transceiver para recibir recibos.
0x000000055ESME_RALYBNDYa conectado (bind)La sesión ya tiene bind: no envíes un segundo bind por la misma conexión.
0x000000066ESME_RINVPRTFLGpriority_flag no válidoUsa priority_flag de 0 a 3 (la mayoría de los gateways lo ignoran: envía 0).
0x000000077ESME_RINVREGDLVFLGregistered_delivery no válidoUsa registered_delivery 0 (sin recibo) o 1 (recibo en éxito y fallo).
0x000000088ESME_RSYSERRError del sistemaProblema temporal del servidor: reintenta más tarde con espera creciente; si sigue, contacta con soporte.
0x0000000A10ESME_RINVSRCADRDirección de origen no válidaRevisa el remitente: alfanumérico de máx. 11 caracteres (TON 5, NPI 0) o número internacional (TON 1, NPI 1).
0x0000000B11ESME_RINVDSTADRDirección de destino no válidaEnvía el número en formato internacional sin "+" ni ceros iniciales (TON 1, NPI 1).
0x0000000C12ESME_RINVMSGIDID de mensaje no válidoEl message_id no existe o no es tuyo (query_sm / cancel_sm).
0x0000000D13ESME_RBINDFAILBind fallidoRevisa system_id, contraseña, las IP permitidas y cuántos binds puede abrir la cuenta.
0x0000000E14ESME_RINVPASWDContraseña no válidaRevisa la contraseña de la cuenta SMPP (distingue mayúsculas; máx. 8 caracteres en muchos servidores).
0x0000000F15ESME_RINVSYSIDsystem_id no válidoRevisa el system_id de la cuenta SMPP.
0x0000001117ESME_RCANCELFAILcancel_sm fallidoNo se pudo cancelar el mensaje (ya enviado o no encontrado).
0x0000001319ESME_RREPLACEFAILreplace_sm fallidoNo se pudo reemplazar el mensaje (ya enviado o no encontrado).
0x0000001420ESME_RMSGQFULCola de mensajes llenaReduce la velocidad y reintenta: la cola del servidor está llena.
0x0000001521ESME_RINVSERTYPservice_type no válidoDeja service_type vacío salvo que tu proveedor te haya dado un valor.
0x0000003351ESME_RINVNUMDESTSNúmero de destinos no válidosubmit_multi: revisa number_of_dests.
0x0000003452ESME_RINVDLNAMENombre de lista de distribución no válidosubmit_multi: revisa el nombre de la lista.
0x0000004064ESME_RINVDESTFLAGdest_flag no válidosubmit_multi: dest_flag debe ser 1 (dirección) o 2 (lista).
0x0000004266ESME_RINVSUBREPsubmit con replace no válidoPon replace_if_present_flag a 0.
0x0000004367ESME_RINVESMCLASSesm_class no válidoUsa esm_class 0, o 0x40 cuando el texto lleva UDH (partes concatenadas).
0x0000004468ESME_RCNTSUBDLNo se puede enviar a una lista de distribuciónEnvía a números individuales.
0x0000004569ESME_RSUBMITFAILsubmit_sm o submit_multi fallidoEl servidor rechazó el mensaje (ruta, saldo o contenido): revisa la cuenta y reintenta más tarde.
0x0000004872ESME_RINVSRCTONTON de origen no válidoRemitente alfanumérico: TON 5; número internacional: TON 1.
0x0000004973ESME_RINVSRCNPINPI de origen no válidoRemitente alfanumérico: NPI 0; número internacional: NPI 1.
0x0000005080ESME_RINVDSTTONTON de destino no válidoUsa TON 1 (internacional).
0x0000005181ESME_RINVDSTNPINPI de destino no válidoUsa NPI 1 (ISDN / E.164).
0x0000005383ESME_RINVSYSTYPsystem_type no válidoDeja system_type vacío salvo que tu proveedor te haya dado un valor.
0x0000005484ESME_RINVREPFLAGreplace_if_present_flag no válidoPon replace_if_present_flag a 0.
0x0000005585ESME_RINVNUMMSGSNúmero de mensajes no válidoRevisa los parámetros de la petición.
0x0000005888ESME_RTHROTTLEDError 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.
0x0000006197ESME_RINVSCHEDHora de envío programado no válidaUsa el formato SMPP absoluto (YYMMDDhhmmsstnnp) o relativo (…R), o déjalo vacío.
0x0000006298ESME_RINVEXPIRYPeriodo de validez no válidoUsa el formato de hora SMPP, o déjalo vacío para la validez por defecto.
0x0000006399ESME_RINVDFTMSGIDMensaje predefinido no válido o no encontradoPon sm_default_msg_id a 0.
0x00000064100ESME_RX_T_APPNError temporal de la aplicación receptoraTemporal: reintenta más tarde.
0x00000065101ESME_RX_P_APPNError permanente de la aplicación receptoraPermanente: no reintentes este mensaje tal cual.
0x00000066102ESME_RX_R_APPNMensaje rechazado por el receptorEl mensaje fue rechazado: no lo reintentes tal cual.
0x00000067103ESME_RQUERYFAILquery_sm fallidoNo se pudo consultar el mensaje (desconocido o demasiado antiguo).
0x000000C0192ESME_RINVOPTPARSTREAMError en la parte opcional de la PDUUn TLV está mal formado: revisa la librería cliente.
0x000000C1193ESME_ROPTPARNOTALLWDParámetro opcional no permitidoQuita el TLV que el servidor no acepta.
0x000000C2194ESME_RINVPARLENLongitud de parámetro no válidaUn TLV tiene una longitud incorrecta: revisa la librería cliente.
0x000000C3195ESME_RMISSINGOPTPARAMFalta un parámetro opcional esperadoAñade el TLV que exige el servidor (ver la documentación del proveedor).
0x000000C4196ESME_RINVOPTPARAMVALValor de parámetro opcional no válidoRevisa el valor de los TLV que envías.
0x000000FE254ESME_RDELIVERYFAILUREFallo de entrega (data_sm_resp)No se pudo entregar el mensaje: mira el recibo o reintenta más tarde.
0x000000FF255ESME_RUNKNOWNERRError desconocidoError 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: Email address