message.status_changed
Lo envía el área conversaciones: suscribite en Webhooks › Suscripciones › Suscripciones de webhooks.
Cambió el estado de entrega de un mensaje enviado.
Se emite cuando cambia el estado de entrega de un mensaje que enviaste a un contacto, ya sea desde el chat, una automatización o un asistente de IA (incluye los enviados con clave). No se emite para mensajes de difusiones ni para mensajes recibidos. message_id es el id que devuelve la API, contact_id el del contacto y device_id el número de tu cuenta por el que salió el mensaje, el mismo device_id que usas para enviar (null si no tiene). status es sent, delivered, read o failed. previous_status es el estado que el mensaje tenía justo antes de este cambio y es null en tres casos: es el primer aviso del mensaje, es el mismo estado que status (por ejemplo, el proveedor confirma el sent que ya registró el envío) o no se pudo leer. error solo viene cuando status es failed: code es el código numérico del proveedor y title su título, y cualquiera de los dos puede ser null si el proveedor no los informa. error.reason es null cuando el fallo lo informó el proveedor; cuando Funnelchat decidió que un mensaje enviado con clave no salía (por ejemplo, por saldo insuficiente o ventana de 24 horas cerrada) trae el motivo (device_unavailable, insufficient_balance, window_closed, recipient_unreachable, template_not_found, template_unresolved_placeholder, not_queued o not_sent), code es null y title es un texto llano en el idioma de la cuenta. occurred_at es el momento en que Funnelchat registró el estado, en UTC. client_reference es la referencia que mandaste al enviar el mensaje (por ejemplo pedido-1001) y null si el envío no la llevaba: sirve para relacionar cada aviso con tu envío también cuando la llamada de envío no respondió. Cada estado se informa una sola vez por mensaje: si llegan varios avisos juntos se informa el más avanzado y un aviso atrasado que no cambia el estado no genera evento. Un mensaje que no llegó a salir (por ejemplo, por ventana de 24 horas cerrada) no recibe avisos de estado, salvo uno enviado con clave: ese recibe un único aviso failed con previous_status en null, su error.reason y su client_reference. Un mensaje enviado con clave cuyo resultado no se conoce (el proveedor no respondió o el envío se interrumpió) no recibe aviso. Un mensaje cuyo envío no empezó dentro de la hora ya no sale: pasada la hora sin resultado, su estado es null, o failed con error.reason not_sent y su aviso si su envío llega tarde. Reintentar es un envío nuevo, que sólo puede duplicar si el envío había empezado y se cortó. Un mensaje queued no es enviado: su resultado llega por este evento o por la consulta del mensaje. En cuentas con mucho tráfico, los eventos que excedan el límite de entrega por minuto de la cuenta se descartan. Para recibirlo debes suscribirte a message.status_changed de forma explícita: una suscripción a * no lo incluye.
X-Funnelchat-Signature*stringFirma de la entrega: t=<timestamp>,v1=<firma>. Se calcula sobre t + "." + cuerpo crudo.
X-Funnelchat-Event*stringTipo de evento (igual que type en el cuerpo).
X-Funnelchat-Delivery*stringIdentificador de esta entrega; cambia en cada intento.
application/json- body
Cualquier respuesta 2xx en 10 segundos o menos confirma la entrega.
Ejemplos
/message.status_changed