Webhooks
Recibe los eventos de chats y llamadas de un cliente en tu propio endpoint, firmados y verificables
Recibe eventos de chats y llamadas en tiempo real en tu propio servidor: Happ envía JSON por POST cuando ocurre algo, para que puedas impulsar avisos en Slack, búsquedas en el CRM, analíticas o flujos de trabajo personalizados.
Conectar
- Abre el catálogo de Integraciones y haz clic en Conectar en Webhook de chat o Webhook de llamadas.
- En el modal, introduce tu URL del Webhook: el endpoint HTTPS que recibe los eventos.
- Opcionalmente define un Secreto del webhook para verificar las solicitudes.
- Haz clic en Conectar.
No hay una página aparte de webhooks, ni interruptores de suscripción a eventos, ni registro de entregas en la aplicación: el modal es solo URL + secreto opcional.
Eventos enviados
| Webhook | Se dispara con |
|---|---|
| Chat | Cada mensaje en un chat observado: del cliente, del asistente y de un operador |
| Llamada | El final de una llamada: una única entrega posterior con duración, metadatos y la URL de la grabación si existe |
Evento de llamada
El webhook de llamadas envía un objeto JSON plano por cada llamada finalizada (sin result_json anidado). Campos principales:
| Campo | Significado |
|---|---|
event_type | Siempre post_call |
call_uuid | ID único de la llamada — deduplica por él, la misma llamada puede llegar más de una vez |
externalNumber | Teléfono del cliente, el mismo que en el historial de llamadas; null si no hubo (p. ej., llamada web) |
direction | inbound, outbound o null |
summary, callSuccessful | Resumen y veredicto de la IA: success, failure o unknown |
dynamicVariables | Las variables con las que se inició la llamada, devueltas — pasa tu ID de contacto en el CRM o de pedido al iniciar la llamada y léelo aquí. Las variables de sistema de VA (system__*) se omiten |
Esquema completo y ejemplo: api.happ.tools/reference.
Verificar las solicitudes
Define un secreto del webhook y cada entrega llevará dos encabezados:
| Encabezado | Valor |
|---|---|
Authorization | Basic <secret>: tu secreto tal cual, no el base64 de user:password |
X-Signature | sha256=<hex>: HMAC-SHA256 del cuerpo bruto de la solicitud, calculado con tu secreto |
Verifica recalculando el HMAC-SHA256 sobre el cuerpo bruto (antes de parsear el JSON) y comparando en tiempo constante. Si tu plataforma no da acceso al cuerpo bruto, comprueba en su lugar el encabezado Authorization. Sin secreto definido, no se envía ninguno de los dos encabezados. El mismo mecanismo que en las herramientas del asistente.
Usa solo HTTPS, responde 200 rápido (procesa de forma asíncrona) y gestiona las entregas duplicadas de forma idempotente.
Webhooks frente a webhooks de herramientas
| Webhooks de integración | Webhooks de herramientas | |
|---|---|---|
| Disparador | Automático ante eventos | Los llama la IA durante la conversación |
| Dirección | Happ → tu servidor | Happ → tu servidor → respuesta → IA |
| Respuesta | Confirmación HTTP 200 | JSON que usa el asistente |
| Caso de uso | Supervisión, registro, avisos | Consultas dinámicas, acciones |
Para los webhooks que la IA llama durante la conversación, consulta Herramientas.
Siguiente
- Herramientas: webhooks que llama la IA
- Notificaciones: avisos integrados
- Integraciones: el catálogo completo
Help me solve it
Happ answers right away and hands over to a manager when needed.