Códigos command_status
Toda respuesta del servidor SMPP trae un command_status. Con 0 todo salió bien; con cualquier otro valor, esta tabla te dice por qué y qué hacer.
4 min de lectura
Los códigos
| Código | Llega en | Causa | Qué hacer | ¿Cierra la conexión? |
|---|---|---|---|---|
0x00000000 ESME_ROK | bind_*_resp, | Aceptado. | En un submit_sm_resp, guarda el message_id: los acuses lo traen. | No |
0x00000001 ESME_RINVMSGLEN | submit_sm_resp | El submit_sm está mal formado, o no trae texto ni en short_message ni en message_payload. | Revisa cómo arma el PDU tu cliente. No lo reintentes igual. | No |
0x00000002 ESME_RINVCMDLEN | generic_nack | El command_length está fuera de rango (menos de 16 octetos o más de 64 KiB) o una cadena no termina en NUL. | Corrige el armado del PDU. La conexión se cierra. | Sí |
0x00000003 ESME_RINVCMDID | generic_nack | El comando no se admite: por ejemplo query_sm, submit_multi, data_sm, replace_sm o cancel_sm. | Desactiva ese comando en tu cliente. La conexión sigue abierta. | No |
0x00000004 ESME_RINVBNDSTS | submit_sm_resp, | El comando no corresponde al estado de la conexión: llegó antes de un bind exitoso (incluido enquire_link), o es un submit_sm por una conexión receiver. | Haz el bind primero, y envía por una conexión transmitter o transceiver. Un unbind sin bind recibe este código y además cierra la conexión. | En algunos casos (ver la causa) |
0x00000005 ESME_RALYBND | bind_*_resp | La conexión ya tenía un bind, o llegaste al tope de conexiones y la nueva es transmitter: no se cierra la última conexión que recibe acuses para abrirle paso. | Reutiliza tus conexiones en vez de abrir más. | No |
0x00000008 ESME_RSYSERR | bind_*_resp, | Error interno de Hablame. | Reintenta con espera. Si se repite, avísanos por WhatsApp con tu system_id y la hora. | No |
0x0000000A ESME_RINVSRCADR | bind_*_resp | Te conectaste desde una IP que no está autorizada para tu cuenta. | Pide a soporte que autorice esa IP. | No |
0x0000000B ESME_RINVDSTADR | submit_sm_resp | El submit_sm no trae destination_addr. | Envía el número de destino. | No |
0x0000000D ESME_RBINDFAIL | bind_*_resp | La contraseña es incorrecta, el bind está mal formado (y se cierra la conexión), o hubo demasiados intentos fallidos: tras 5 en un minuto desde la misma IP y el mismo system_id, el resto de ese minuto recibe este código aunque la contraseña sea correcta. | Revisa la contraseña y espera al minuto siguiente antes de reintentar. | En algunos casos (ver la causa) |
0x0000000F ESME_RINVSYSID | bind_*_resp | El system_id no existe o la cuenta está deshabilitada. | Revisa el system_id. Si es el correcto, escribe a soporte. | No |
0x00000014 ESME_RMSGQFUL | submit_sm_resp | Hablame no puede recibir más mensajes en este momento. | Reintenta más tarde, con espera creciente. | No |
0x00000045 ESME_RSUBMITFAIL | submit_sm_resp | Tu cuenta no puede enviar en este momento, por ejemplo porque está suspendida. | No reintentes en bucle: escribe a soporte. | No |
0x00000058 ESME_RTHROTTLED | submit_sm_resp | Superaste 3.000 submit_sm por segundo en esa conexión, o Hablame está frenando la entrada por un momento para protegerse. | Baja el ritmo y reintenta ese mensaje con espera. La conexión sigue abierta. | No |
generic_nack
Cuando el servidor no puede responder con la respuesta propia del comando, porque no lo entiende o no lo admite, responde generic_nack con 0x00000002 o 0x00000003. Las respuestas que llegan sin que las hayamos pedido se ignoran sin contestar.
Contraseña incorrecta
Una contraseña incorrecta recibe 0x0000000D (ESME_RBINDFAIL), no 0x0000000E (ESME_RINVPASWD): el servidor nunca devuelve ese código. Hay clientes SMPP que, ante ese código, dejan de reconectar para siempre; con 0x0000000D siguen reintentando y se recuperan solos en cuanto corriges la contraseña.
Cuándo reintentar
- Reintenta con espera creciente: 0x00000058, 0x00000014 y 0x00000008. Son pasajeros.
- No reintentes igual: 0x00000001, 0x0000000B y 0x00000003. El problema está en el PDU.
- Revisa tu cuenta antes de reintentar: 0x0000000A, 0x0000000D, 0x0000000F y 0x00000045.