Tu solicitud de envío puede tener éxito antes de que el teléfono del destinatario reciba algo. Un informe posterior del operador proporciona otro resultado, que tu aplicación debe manejar por separado de la aceptación de la solicitud.
¿Qué me dice un acuse de recibo de entrega?
Un acuse de recibo informa el éxito de la entrega o un problema de entrega desde la perspectiva de la red.
Un resultado de entrega SMS puede llegar mientras el teléfono permanece sin leer en un cajón. No demuestra que el destinatario vio la identidad del remitente. Tampoco establece que haya leído el texto completo.
La red envía los acuses de recibo por separado de su respuesta a una solicitud de envío. También puede suprimir algunos informes. La referencia de acuses de recibo SMPP documenta estos controles para conexiones con operadores.
¿Qué acuses de recibo de operador expone Bird?
Recibes eventos públicos para resultados de entrega reconocidos. Los acuses de recibo en búfer permanecen internos.
Un acuse de recibo en búfer indica que el operador está reteniendo el mensaje. Bird lo registra en su registro de eventos interno sin cambiar el estado público del mensaje. No ves ninguna actualización en la línea de tiempo pública ni en tus webhooks.
| Estado de acuse de recibo del operador | Evento Bird |
|---|---|
delivered | sms.delivered |
expired | sms.expired |
rejected | sms.rejected |
delivery_failed con una razón recuperable | sms.undelivered |
delivery_failed con una razón permanente o no clasificada | sms.failed |
buffered | Sin evento público |
Un estado de operador no reconocido no produce ningún evento. Por lo tanto, la ausencia de una actualización pública no establece que el operador no haya enviado un acuse de recibo.
¿Por qué un mismo estado de fallo produce eventos diferentes?
Bird usa la razón de fallo del operador para decidir si el problema subyacente puede resolverse.
| Razón del operador | Código de error Bird | Clasificación |
|---|---|---|
unavailable_subscriber | unreachable | Recuperable |
received_network_error | provider_unavailable | Recuperable |
capacity_limit_reached | provider_unavailable | Recuperable |
unknown_subscriber | invalid_destination | Permanente |
opted_out | recipient_opted_out | Permanente |
carrier_rejected | content_rejected | Permanente |
Un fallo recuperable produce sms.undelivered. El mensaje sigue siendo final: Bird no lo reintenta automáticamente. Alcanzar al destinatario requiere otro envío después de que el problema subyacente se resuelva.
Un fallo permanente produce sms.failed. Una razón no clasificada también produce ese evento con el código de error unknown. Ese resultado significa que Bird no pudo clasificar la razón del operador. No demuestra por sí solo que el destino sea permanentemente inalcanzable.
¿Puedo configurar cuándo el operador deja de intentar?
No puedes configurar la fecha límite de entrega del operador a través del endpoint de envío de Bird.
Bird rechaza cualquier validity_period proporcionado con HTTP 422 SMSUnsupportedFeature. Ese campo controlaría cuánto tiempo el operador sigue intentando entregar el texto.
El campo de respuesta correspondiente no se devuelve. Bird produce sms.expired cuando un operador informa expiración. Tu aplicación no puede inferir el período de espera del operador a partir de un campo ausente.
¿Cómo debo manejar los acuses de recibo en mi aplicación?
Debes rastrear los resultados de entrega por separado de la aceptación de la solicitud y de cualquier acción que tome el destinatario.
Trata un mensaje sin un resultado de entrega final como pendiente. Lee el código de error junto con un evento de fallo para poder investigar su causa. Conserva los códigos desconocidos en tus registros porque el conjunto de códigos de error es extensible.
Usa los eventos de entrega como métrica de entrega. Para un flujo de código de verificación o confirmación, registra el éxito cuando el destinatario completa la acción. Un acuse de recibo de entrega por sí solo no puede proporcionar esa medición.
Eventos SMS documenta las cargas útiles de los eventos públicos y la línea de tiempo del mensaje.
En resumen
Entrega no significa lectura.
Un acuse de recibo informa el resultado de entrega de la red sin confirmar que una persona vio el texto.
Algunos acuses de recibo no tienen evento público.
Bird registra los acuses de recibo en búfer internamente sin cambiar el estado público, la línea de tiempo ni el flujo de webhooks.
La razón determina el evento de fallo.
Las razones recuperables del operador producen sms.undelivered; las razones permanentes o no clasificadas producen sms.failed.
Una razón recuperable no dispara otro envío.
Un mensaje no entregado es final, así que otro intento requiere un envío separado.