AzterDocs

Plataforma

Webhooks y eventos

Todo lo que ocurre dentro de Azter emite un evento. Suscribe tus sistemas para reaccionar en tiempo real: actualizar el ERP, disparar un flujo interno o alimentar tu data warehouse.

conversation.startedSe abre un hilo nuevo en cualquier canal.
conversation.escalatedEl agente deriva el caso a una persona.
quote.createdSe emitió una cotización.
quote.acceptedEl cliente aceptó la cotización.
order.confirmedLa orden quedó confirmada y sincronizada con el ERP.
payment.succeededSe recibió el pago.
agent.run.completedUn agente terminó una tarea, con su traza asociada.
policy.blockedUna política impidió una acción y generó una tarea.

Crear una suscripción

terminal
1curl https://api.azter.ai/v1/webhooks \
2 -H "Authorization: Bearer $AZTER_API_KEY" \
3 -d '{
4 "url": "https://tu-sistema.com/hooks/azter",
5 "events": ["order.confirmed", "payment.succeeded"],
6 "secret": "whsec_••••"
7 }'

Estructura del evento

POST /hooks/azter
1{
2 "id": "evt_9f31",
3 "type": "order.confirmed",
4 "created": "2026-08-13T14:04:19Z",
5 "data": {
6 "order_id": "ord_3320",
7 "contact_id": "cnt_4412",
8 "total": 2157600,
9 "currency": "CLP",
10 "decided_by": "agt_ventas",
11 "approved_by": "usr_marta"
12 }
13}

Verificar la firma

Cada entrega incluye la cabecera Azter-Signature con timestamp y HMAC SHA-256 del cuerpo crudo. Verifica siempre antes de procesar.

verify.ts
1import { createHmac, timingSafeEqual } from "node:crypto";
2
3export function verify(rawBody: string, header: string, secret: string) {
4 const [tPart, sPart] = header.split(",");
5 const timestamp = tPart.replace("t=", "");
6 const signature = sPart.replace("v1=", "");
7 const expected = createHmac("sha256", secret)
8 .update(`${timestamp}.${rawBody}`)
9 .digest("hex");
10 return timingSafeEqual(Buffer.from(signature), Buffer.from(expected));
11}

Entrega y reintentos

  • Reintentos con backoff exponencial durante 24 horas ante cualquier respuesta distinta de 2xx.
  • Entrega al menos una vez: usa el id del evento para deduplicar en tu lado.
  • Orden no garantizado entre tipos distintos; usa el campo created para reconstruir la secuencia.
  • Historial de entregas y reenvío manual disponibles en la consola y por API.

Responde rápido

Devuelve 2xx en menos de 5 segundos y procesa de forma asíncrona. Una respuesta lenta cuenta como fallo y activa el reintento.