Skip to main content
Cada fallo es un objeto JSON con un único message. El estado es la parte legible por máquina.
El catálogo completo está en Errores de la API. Esta página trata sobre lo que su cliente debería hacer.

Tabla de reintentos

No hay Retry-After en un 429. Aplique backoff propio: exponencial, con jitter. Un intervalo fijo entre muchos workers los resincroniza en la siguiente ráfaga, que es como un límite de tasa breve se convierte en sostenido.

Por qué un 500 es seguro de reintentar

500 Cannot send message significa que la pasarela aceptó su petición y no pudo encolarla. Todo cargo se revierte. Es una propiedad deliberada del ingress, no un accidente: el saldo se retira antes de encolar y se devuelve cuando el encolado falla. Así que un reintento cuesta un mensaje, no dos. Es exactamente la garantía que hace defendible un reintento automático aquí y no en un 402.

Construya para el acuse, no para la respuesta

El error de integración más común, con diferencia, es tratar un 200 como entrega. La respuesta al envío se emite antes de que se ejecute el enrutamiento, por lo que aceptación y entrega son afirmaciones independientes. Un mensaje puede ser aceptado y luego rechazado por un remitente no aprobado, descartado por falta de ruta o rechazado por el operador, y nada de eso puede aparecer en la llamada original.
1

Guarde el messageId

Es lo único que correlaciona su registro con todo lo que viene después.
2

Trate el envío como 'submitted', no 'sent'

Un estado separado en su propio modelo, para que la diferencia siga siendo visible.
3

Pase a estado final solo con un acuse de nivel 2

ACCEPTD y BUFFRED llegan como nivel 1 y sigue otro acuse.
4

Aplique su propio timeout

Un mensaje que nunca reciba un acuse final debería expirar también en su sistema, o quedará “submitted” para siempre.

Errores que encontrará en producción, no en pruebas

Su cuenta tiene la aprobación de sender ID obligatoria. El from que usó no ha sido aprobado, o lo omitió y su nombre de login tampoco está aprobado.No es reintentable ni corregible por código: requiere una aprobación de su proveedor.
Su cuenta solo envía redacciones aprobadas. Un mensaje que funciona en staging y falla en producción suele deberse a esto.Los espacios en blanco se compactan antes de comparar, así que los espacios y saltos de línea adicionales no son la causa. Una palabra cambiada, un punto añadido o una variable en otra posición sí lo son.
El saldo se reserva en bloques, no por mensaje —unos veinte mensajes de golpe— y las recargas son asíncronas. Un mensaje que llega mientras la siguiente reserva está en curso se rechaza aunque quede saldo.Ese es transitorio: reinténtelo. Un 402 que persiste con un saldo saludable no lo es, y merece la pena escalarlo.
Todos los demás campos tratan _ y - como el mismo carácter. custom_tlvs es la única excepción y conserva su guion bajo.

Relacionado

Todos los estados

El catálogo completo con qué provoca cada uno.

Acuses de entrega

La mitad de la historia que la respuesta no puede contarle.