POST a su servidor cada vez que algo sucede en su operación: llega un mensaje, se crea un
contacto, el agente completa un campo.
Cada empresa tiene como máximo un webhook. No es una colección: usted configura una URL y
elige qué eventos recibe. Intentar crear un segundo devuelve
409.Configurar
POST /v1/webhooks con la URL y la lista de eventos. Scope necesario: webhooks:create.
Qué envía Nuvia
Cada entrega es unPOST con estos headers:
Y el cuerpo siempre tiene la misma estructura de tres campos:
event: el evento que disparó la entrega.timestamp: ISO 8601 UTC, generado en el momento en que la entrega fue encolada.data: el recurso relacionado con el evento (ver la tabla de abajo).
Eventos disponibles
En los eventos de mensaje, conversación y contacto,
data trae el recurso en el mismo formato que
la Referencia de la API devuelve en los GET correspondientes, por ejemplo
GET /v1/messages/conversation/{id} para mensajes.
Trate
data de forma tolerante: lea los campos que use e ignore el resto. Pueden aparecer
campos nuevos a medida que la plataforma evoluciona, y eso no se considera una ruptura de
contrato.FIELD_UPDATED es diferente
Este evento no devuelve una entidad, sino la descripción del cambio:
field.context indica a qué pertenece el campo: contact, conversation o business. value
tiene el tipo del campo: string, número, booleano o lista. conversationId solo viene cuando el
cambio ocurrió dentro de una conversación.
Validar que la llamada vino de Nuvia
El mecanismo disponible escustom_headers: registre un valor secreto y verifíquelo en cada
solicitud.
Node.js
PUT /v1/webhooks/{id} si sospecha de una filtración.
Garantías de entrega
Estas son las características reales de la entrega. Léalas antes de construir algo que dependa de un webhook:Un solo intento por evento, sin reintento
Un solo intento por evento, sin reintento
Si su servidor está fuera de línea, devuelve
5xx o agota el tiempo límite, el evento se
pierde. La falla queda registrada del lado de Nuvia, pero nada se reenvía. Para datos
críticos, reconcilie periódicamente con la API (por ejemplo, listando los mensajes de la
conversación) en vez de confiar solo en el webhook.Tiempo límite de 10 segundos
Tiempo límite de 10 segundos
Nuvia espera como máximo 10 segundos su respuesta. Responda
2xx de inmediato y haga el
procesamiento en segundo plano. Si procesa antes de responder, entregas legítimas se
convierten en timeout.El orden no está garantizado
El orden no está garantizado
Los eventos de estado vienen de WhatsApp, que puede entregarlos fuera de orden (un
MESSAGE_DELIVERED llegando después del MESSAGE_READ del mismo mensaje). Nuvia no los
reordena. Trate cada evento por el estado que trae, sin asumir una secuencia.Los eventos de estado solo se disparan en la transición real
Los eventos de estado solo se disparan en la transición real
MESSAGE_DELIVERED y MESSAGE_READ solo se envían cuando el estado realmente cambia.
WhatsApp reenvía el mismo estado varias veces, y esas repeticiones se descartan: usted no
recibe duplicados por eso. Aun así, escriba un handler idempotente: use el identificador del
mensaje como clave.Nada se entrega con el webhook inactivo
Nada se entrega con el webhook inactivo
Con
status: "INACTIVE", o para eventos que no incluyó en events, Nuvia no encola ninguna
entrega, y no hay historial para recuperar después. Reactivarlo no recupera el período
detenido.Gestionar la configuración
El
GET devuelve un objeto con la configuración de la empresa, o null si no hay ninguna.
No es una lista. El id usado en el PUT y en el DELETE viene de ese objeto. Después de
eliminarlo, la empresa vuelve a poder crear un webhook nuevo.
Para pausar temporalmente sin perder la configuración, prefiera PUT con status: "INACTIVE" en
vez de eliminarlo.
Próximos pasos
Ejemplos de integración
El webhook dentro de un caso de uso completo, con respuesta automática.
Referencia de la API
Parámetros y respuestas de los endpoints de webhook.