Quickstart
Este tutorial crea un agente IA funcional para uno de tus clientes paso a paso. Elegí tu lenguaje arriba en cualquier bloque — la selección se sincroniza en toda la página.
Prerrequisitos
Sección titulada «Prerrequisitos»- API key de partner (tu tenant debe tener acceso Partner habilitado — contacta a contacto@overtaker.online)
- Al menos un Rol disponible en
GET /partner/roles
Configuración
Sección titulada «Configuración»Todas las llamadas usan la misma base y header de autenticación:
BASE="https://api.overtaker.online/api/v1"KEY="sk_live_xxx"# Se incluye en cada request: -H "Authorization: Bearer $KEY"import requests
BASE = "https://api.overtaker.online/api/v1"HEADERS = {"Authorization": "Bearer sk_live_xxx"}const BASE = "https://api.overtaker.online/api/v1";const HEADERS = { Authorization: "Bearer sk_live_xxx", "Content-Type": "application/json",};Paso 1 — Conoce tus planes disponibles
Sección titulada «Paso 1 — Conoce tus planes disponibles»curl "$BASE/partner/plans" -H "Authorization: Bearer $KEY"plans = requests.get(f"{BASE}/partner/plans", headers=HEADERS).json()const plans = await fetch(`${BASE}/partner/plans`, { headers: HEADERS }) .then((r) => r.json());Respuesta:
[ { "id": "starter", "name": "Starter", "price": 20.0, "currency": "USD", "max_monthly_conversations": 1000 }]Paso 2 — Crear el tenant
Sección titulada «Paso 2 — Crear el tenant»curl -X POST "$BASE/partner/tenants" \ -H "Authorization: Bearer $KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Marca Acme", "email": "admin@acme.com", "plan_id": "starter", "bot_name": "Sofia" }'tenant = requests.post(f"{BASE}/partner/tenants", headers=HEADERS, json={ "name": "Marca Acme", "email": "admin@acme.com", "plan_id": "starter", "bot_name": "Sofia",}).json()tenant_id = tenant["tenant_id"]const tenant = await fetch(`${BASE}/partner/tenants`, { method: "POST", headers: HEADERS, body: JSON.stringify({ name: "Marca Acme", email: "admin@acme.com", plan_id: "starter", bot_name: "Sofia", }),}).then((r) => r.json());const tenantId = tenant.tenant_id;Respuesta:
{ "tenant_id": "tenant_abc123", "name": "Marca Acme", "subdomain": "marca-acme", "status": "ACTIVE", "plan_id": "starter", "admin_email": "admin@acme.com", "admin_temp_password": "Xk9mP2..."}Guarda tenant_id y las credenciales del admin — la contraseña solo se muestra una vez. Esas credenciales se usan para conectar un canal.
Paso 3 — Conoce los roles disponibles
Sección titulada «Paso 3 — Conoce los roles disponibles»curl "$BASE/partner/roles" -H "Authorization: Bearer $KEY"roles = requests.get(f"{BASE}/partner/roles", headers=HEADERS).json()const roles = await fetch(`${BASE}/partner/roles`, { headers: HEADERS }) .then((r) => r.json());Paso 4 — Configurar el bot
Sección titulada «Paso 4 — Configurar el bot»# Parámetros del botcurl -X PUT "$BASE/partner/tenants/tenant_abc123/bot-config" \ -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \ -d '{ "tone": "profesional", "session_timeout_hours": 24 }'
# Asignar rolcurl -X PUT "$BASE/partner/tenants/tenant_abc123/bot-config/role" \ -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \ -d '{ "bot_role_id": "role_xyz789" }'requests.put(f"{BASE}/partner/tenants/{tenant_id}/bot-config", headers=HEADERS, json={"tone": "profesional", "session_timeout_hours": 24})
requests.put(f"{BASE}/partner/tenants/{tenant_id}/bot-config/role", headers=HEADERS, json={"bot_role_id": "role_xyz789"})await fetch(`${BASE}/partner/tenants/${tenantId}/bot-config`, { method: "PUT", headers: HEADERS, body: JSON.stringify({ tone: "profesional", session_timeout_hours: 24 }),});
await fetch(`${BASE}/partner/tenants/${tenantId}/bot-config/role`, { method: "PUT", headers: HEADERS, body: JSON.stringify({ bot_role_id: "role_xyz789" }),});Paso 5 — Cargar conocimiento
Sección titulada «Paso 5 — Cargar conocimiento»curl -X POST "$BASE/partner/tenants/tenant_abc123/kb/answers" \ -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \ -d '{ "entries": [ { "question": "¿Cuáles son sus horarios?", "answer": "Lunes a viernes de 9:00 a 18:00 hrs." } ] }'requests.post(f"{BASE}/partner/tenants/{tenant_id}/kb/answers", headers=HEADERS, json={ "entries": [ {"question": "¿Cuáles son sus horarios?", "answer": "Lunes a viernes de 9:00 a 18:00 hrs."} ]})await fetch(`${BASE}/partner/tenants/${tenantId}/kb/answers`, { method: "POST", headers: HEADERS, body: JSON.stringify({ entries: [ { question: "¿Cuáles son sus horarios?", answer: "Lunes a viernes de 9:00 a 18:00 hrs." }, ], }),});Paso 6 — Verificar que está listo
Sección titulada «Paso 6 — Verificar que está listo»curl "$BASE/partner/tenants/tenant_abc123/health" -H "Authorization: Bearer $KEY"health = requests.get(f"{BASE}/partner/tenants/{tenant_id}/health", headers=HEADERS).json()const health = await fetch(`${BASE}/partner/tenants/${tenantId}/health`, { headers: HEADERS }) .then((r) => r.json());Respuesta esperada:
{ "ready": true, "checks": { "bot_config": true, "role_assigned": true, "knowledge_entries": 1, "channel_connected": false }, "missing": ["channel_connected"]}channel_connected es false hasta que conectes un canal en el panel del tenant — ver Conectar un canal. Si tu producto opera el agente solo por API, podés ignorarlo.
Paso 7 — Enviar el primer mensaje
Sección titulada «Paso 7 — Enviar el primer mensaje»curl -X POST "$BASE/partner/tenants/tenant_abc123/chat" \ -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \ -d '{ "message": "Hola, ¿en qué horario atienden?", "session_id": "user_123" }'reply = requests.post(f"{BASE}/partner/tenants/{tenant_id}/chat", headers=HEADERS, json={ "message": "Hola, ¿en qué horario atienden?", "session_id": "user_123",}).json()const reply = await fetch(`${BASE}/partner/tenants/${tenantId}/chat`, { method: "POST", headers: HEADERS, body: JSON.stringify({ message: "Hola, ¿en qué horario atienden?", session_id: "user_123" }),}).then((r) => r.json());Respuesta:
{ "response": "¡Hola! Atendemos de lunes a viernes de 9:00 a 18:00 hrs. ¿En qué más puedo ayudarte?", "session_id": "user_123"}Paso 8 — Registrar tu webhook (opcional)
Sección titulada «Paso 8 — Registrar tu webhook (opcional)»curl -X POST "$BASE/partner/webhooks" \ -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \ -d '{ "url": "https://tuapp.com/webhooks/overtaker", "events": ["message.received", "lead.created"] }'wh = requests.post(f"{BASE}/partner/webhooks", headers=HEADERS, json={ "url": "https://tuapp.com/webhooks/overtaker", "events": ["message.received", "lead.created"],}).json()webhook_secret = wh["webhook_secret"]const wh = await fetch(`${BASE}/partner/webhooks`, { method: "POST", headers: HEADERS, body: JSON.stringify({ url: "https://tuapp.com/webhooks/overtaker", events: ["message.received", "lead.created"], }),}).then((r) => r.json());const webhookSecret = wh.webhook_secret;Guarda el webhook_secret de la respuesta para verificar las firmas HMAC.
¡Listo! Tu agente está funcionando. Consulta la Referencia de API para todos los endpoints, o las Guías para casos de uso completos.