Introducción a los Webhooks
Los webhooks te permiten recibir notificaciones en tiempo real sobre eventos en tu organización de Altur. Cuando ocurre un evento (por ejemplo, el fin de una llamada), Altur envía una solicitud HTTP POST con los datos del evento al endpoint que configures, manteniendo tus sistemas o CRM al día sin necesidad de hacer polling.Cómo Funcionan los Webhooks
-
Configura tu Endpoint
Configura la URL del webhook en la plataforma de Altur. Esta URL recibirá las solicitudes POST cuando se dispare un evento. -
Recibe Notificaciones
Cuando ocurre un evento, Altur envía un POST con los detalles del evento en formato JSON a tu endpoint. -
Confirma la Recepción
Tu endpoint debe responder con un código200 OKpara confirmar la recepción. Altur espera hasta 5 segundos por la respuesta. Si la solicitud falla, hace timeout o devuelve un estado distinto de 2xx, Altur reintenta con backoff exponencial (hasta 5 intentos en total).
Tipos de Evento
Los webhooks pueden disparar los siguientes tipos de evento:on_call_end: Se dispara al final de una llamada. Envía información detallada de la llamada junto con datos básicos del agente de IA y del usuario final.campaign.status_changed: Se dispara cuando una Campaña cambia de estado. Incluye el snapshot de analíticas cuando la campaña llega afinished.campaign.cycle_completed: Se dispara cuando una iteración del ciclo de una Campaña termina, con el número de iteración completada y el timestamp de la siguiente iteración.
Los webhooks de campaña usan un envelope versionado (
event_id, event_type,
occurred_at, api_version, project_id, data). Usa event_id para
procesamiento idempotente. El evento on_call_end es anterior a este
envelope y mantiene su forma plana en el nivel superior.Asegurando tus Webhooks
Para garantizar comunicaciones seguras y verificar la autenticidad de las solicitudes, Altur incluye una firma HMAC en el headerX-Altur-Signature de cada solicitud.
Cómo Funciona
- Secreto Compartido: Cada integración de webhook se configura con una llave secreta única codificada en base64.
- Generación del HMAC: Altur genera un hash HMAC SHA-256 usando el secreto compartido (decodificado de base64) y el payload JSON de la solicitud (serializado sin espacios). El hash se codifica en base64 y se incluye en el header
X-Altur-Signature. - Validación: Tu endpoint debe validar la firma usando el mismo secreto compartido y el mismo formato de serialización JSON.
Función de Validación de Ejemplo
Ejemplo de Uso
Ejemplo 1: Usando un dict JSON ya parseado (recomendado)
Ejemplo 2: Usando un string JSON crudo
Headers Enviados con el Webhook
Content-Type:application/jsonX-Altur-Signature: hash HMAC SHA-256 codificado en base64 del payload JSON compacto
Por Qué Importa
Este mecanismo garantiza que:- La solicitud proviene de Altur.
- El payload no fue modificado en tránsito.
Política de Reintentos
Si tu endpoint no responde con un estado 2xx (o no responde antes de los 5 segundos del request timeout), Altur reintenta la entrega:- Intentos máximos: 5 (entrega inicial más 4 reintentos).
- Backoff: 60s después del primer fallo, duplicándose en cada intento (60s, 2m, 4m, 8m).
Ejemplo de Flujo
Un flujo típico para manejar webhooks:-
Configura tu Endpoint
Crea un endpoint en tu backend, por ejemplo
/webhooks/altur/on-call-end. Debe ser accesible públicamente y aceptar solicitudes POST conContent-Type: application/json. - Parsea el Payload Extrae y procesa el payload JSON enviado por Altur. Maneja casos como payloads malformados o campos faltantes para evitar errores en runtime.
-
Valida la Autenticidad
Usa el header
X-Altur-Signaturepara verificar la autenticidad. Esto implica:- Recomputar la firma HMAC usando el secreto compartido y el payload.
- Compararla con la firma del header.
-
Responde Rápido
Devuelve
200 OKpara confirmar la recepción. Altur hace timeout a los 5 segundos, así que responde mucho antes de ese límite para evitar reintentos innecesarios. - Registra los Eventos Guarda logs de las solicitudes y del procesamiento para tener trazabilidad. Es especialmente útil al depurar problemas con payloads o reintentos.
- Maneja los Reintentos Diseña tu sistema para tolerar reintentos. Asegúrate de que tu endpoint sea idempotente: procesar el mismo evento varias veces no debe duplicar acciones (por ejemplo, inserts en BD o llamadas a APIs).
Buenas Prácticas
-
Asegura tu Endpoint
- Autentica las Solicitudes: Verifica la firma HMAC en cada request. Usa un secreto único y seguro por integración.
- Restringe el Acceso: Usa whitelisting de IP o firewall para permitir solicitudes únicamente desde los servidores de Altur.
- Cifra la Comunicación: Usa HTTPS para que los datos viajen cifrados.
-
Registra los Eventos
- Registra Todo: Guarda timestamps, headers, payloads y respuestas de cada solicitud entrante.
- Monitorea Fallos: Configura alertas para fallos repetidos o solicitudes inválidas.
- Mantén Logs: Retén los logs por un periodo razonable para auditoría o debugging.
-
Prueba Bien
- Simula Eventos: Usa el dashboard de Altur para simular eventos y confirmar que tu endpoint los maneja correctamente.
- Prueba Casos Borde: Payloads malformados, payloads grandes, campos faltantes.
- Usa Entornos de Staging: Mantén un endpoint dedicado para pruebas, separado de producción.
-
Optimiza el Rendimiento
- Responde Rápido: Altur hace timeout a los 5 segundos. Si el procesamiento es más largo, responde
200 OKde inmediato y procesa en background. - Minimiza el Procesamiento: Haz solo validación ligera y encolado en el endpoint; deja el trabajo pesado a workers.
- Usa Caching: Cuando aplique, cachea respuestas para solicitudes redundantes.
- Responde Rápido: Altur hace timeout a los 5 segundos. Si el procesamiento es más largo, responde
-
Sé Idempotente
- Evita Acciones Duplicadas: Diseña el sistema para que los reintentos no causen operaciones duplicadas (inserts en BD, llamadas a APIs). Usa el
event_idúnico de Altur para deduplicar.
- Evita Acciones Duplicadas: Diseña el sistema para que los reintentos no causen operaciones duplicadas (inserts en BD, llamadas a APIs). Usa el
-
Comunica los Fallos
- Devuelve Status Codes Correctos: Usa
400para solicitudes inválidas,500para errores del servidor, etc. - Loguea y Notifica: Registra los fallos y considera notificar al equipo si los reintentos críticos se agotan.
- Devuelve Status Codes Correctos: Usa
Solución de Problemas con la Validación de Firma
Si tienes problemas validando la firma, revisa estos puntos comunes:1. Formato de Serialización JSON
Usa el mismo formato JSON que Altur:- Formato compacto: Sin espacios después de comas ni de dos puntos.
- Orden consistente: Usa exactamente el payload recibido.
2. Formato de la Llave Secreta
- Tu secreto debe estar codificado en base64.
- Debe ser el mismo configurado en tu integración de webhook en Altur.
3. Nombre del Header
- El header es
X-Altur-Signature(algunos frameworks son case-sensitive). - Confirma que estás leyendo el header correcto.
4. Timing Attacks
Usa siempre funciones de comparación timing-safe:- Python:
hmac.compare_digest() - Node.js:
crypto.timingSafeEqual() - PHP:
hash_equals()