Plataforma
Para desarrolladores
Los endpoints públicos de guren.cl (chat de Ana, ingreso de leads y demos de David y Laura), sus contratos, errores y límites.
Esta es la API que usa el sitio guren.cl. Sirve para entender los contratos y probar integraciones. En una implementación, tu empresa recibe sus propios endpoints con autenticación, límites y destinos configurados para tu caso.
#Base y convenciones
- Base:
https://guren.cl/api. Todo en JSON (Content-Type: application/json). - Respuestas de error con
{"error": "..."}o{"ok": false, ...}y el código HTTP correspondiente. - Límites de uso por IP para evitar abusos; si se superan, la respuesta es
429.
#Endpoints
| Método y ruta | Qué hace |
|---|---|
POST /api/ana/chat | Envía un mensaje a Ana y recibe su respuesta y la etapa de la conversación. |
POST /api/lead | Ingresa un lead y lo envía al destino configurado. |
POST /api/david/simulate | Demo: valida una consulta y devuelve una vista previa con datos de ejemplo. |
POST /api/laura/cadence | Demo: ejecuta un paso de la cadencia de Laura con respuestas de ejemplo. |
GET /api/health | Estado del servicio. |
#Chat de Ana
Envía el mensaje nuevo y el historial de la conversación. Ana es sin estado: el historial lo mantiene quien llama.
curl -X POST https://guren.cl/api/ana/chat \
-H "Content-Type: application/json" \
-d '{
"message": "¿Pueden atender llamadas fuera de horario?",
"history": [
{ "role": "user", "content": "Hola, tengo una clínica dental" },
{ "role": "assistant", "content": "¡Hola! Cuéntame, ¿qué te gustaría resolver?" }
]
}'{
"ok": true,
"role": "assistant",
"name": "Ana",
"content": "Sí. Atiendo llamadas 24/7 y agendo directo en tu calendario...",
"stage": "SOLUTION_MAPPING"
}La etapa (stage) puede ser DISCOVERY, SOLUTION_MAPPING, QUALIFICATION o BOOKING. Si falta message, responde 400.
#Ingreso de leads
Ver el contrato completo en Leads, CRM y webhooks. Campos obligatorios: name, email y company.
| Código | Cuándo |
|---|---|
200 | Lead recibido; devuelve leadId y timestamp. |
400 | Falta un campo obligatorio o el correo no es válido. |
405 | Método distinto de POST. |
#Demo de David
Requiere el encabezado Idempotency-Key. Las consultas que intentan modificar datos se rechazan.
{
"ok": false,
"status": "REJECTED_BY_AST_GUARDRAIL",
"risk": "MUTATION_ATTEMPT",
"reason": "Destructive operation blocked by David AST Guardrail: Contains 'DELETE'. Only SELECT queries are permitted."
}#Webhooks hacia tus sistemas
Cuando llega un lead, guren.cl puede avisar a un webhook (Slack, Discord o una URL tuya) con un mensaje de texto. En una implementación, los eventos se acuerdan contigo (lead recibido, reunión agendada, traspaso, baja) y se firman para que tu sistema verifique que vienen de nosotros.
import { createHmac, timingSafeEqual } from 'node:crypto';
// La firma llega en un encabezado; el secreto se comparte en la implementación
export function firmaValida(cuerpoCrudo, firmaRecibida, secreto) {
const esperada = createHmac('sha256', secreto).update(cuerpoCrudo).digest('hex');
const a = Buffer.from(esperada), b = Buffer.from(firmaRecibida || '');
return a.length === b.length && timingSafeEqual(a, b);
}