Casos de uso
El Canal API es deliberadamente genérico: enviás un mensaje y recibís la respuesta del bot. Lo que cambia entre integraciones es dónde vive la conversación y cómo entregás la respuesta al usuario final. Estos son los patrones más comunes.
1. Widget de chat en tu sitio web
Sección titulada «1. Widget de chat en tu sitio web»El visitante chatea desde tu web sin que tu sk_live_ salga del backend.
- Tu backend genera un token efímero
csk_eph_*scoped alsession_iddel visitante. - El browser envía mensajes directo a
POST /channel/messagecon ese token. - La respuesta del bot llega a tu webhook; la empujás al browser por WebSocket/SSE, o usás directamente streaming SSE para el efecto “typing”.
Claves: token en memoria (no localStorage), TTL bajo, session_id = un identificador opaco por visitante (cookie, UUID de sesión).
2. Chat dentro de tu app móvil
Sección titulada «2. Chat dentro de tu app móvil»La app conversa contra tu backend; tu backend habla con el Canal API con la sk_live_ (server-to-server).
- La app manda el texto del usuario a tu backend.
- Tu backend hace
POST /channel/messageconsession_id= el ID del usuario en tu sistema. - Recibís
message.responseen tu webhook y lo entregás a la app (push notification, WebSocket, long-polling).
Claves: un session_id estable por usuario mantiene el contexto entre sesiones de la app. Usá Idempotency-Key por mensaje para tolerar reintentos de red del móvil.
3. Agente embebido en tu CRM o help desk
Sección titulada «3. Agente embebido en tu CRM o help desk»Sumás una bandeja conversacional dentro de tu propio CRM/help desk.
- Cada hilo del CRM mapea a un
session_id. - Mostrás el historial con
GET /channel/conversations/{session_id}/messages. - Cuando llega
handoff.requested, marcás el hilo como “requiere humano” y lo asignás a un agente; usásconversation_urlpara abrir la conversación completa en el panel de Overtaker.
Claves: handoff.requested es tu señal de escalamiento — no esperes respuestas del bot después de recibirlo.
4. Bot dentro de tu SaaS multi-tenant
Sección titulada «4. Bot dentro de tu SaaS multi-tenant»Ofrecés un asistente a tus usuarios finales dentro de tu producto.
- Un
session_idpor usuario final (no por cuenta) para que cada uno tenga su propio contexto. - Enriquecé el lead pasando
emailcuando lo conozcas: el bot lo asocia al Lead correcto y podés leer el snapshot del lead para tu CRM interno.
5. Captura de leads + handoff a tu equipo
Sección titulada «5. Captura de leads + handoff a tu equipo»Una landing o formulario conversacional que califica antes de pasar a ventas.
- El visitante conversa; el bot captura datos y emite
lead.captured(granular). - Consolidás el lead completo con
GET /channel/leads/{lead_id}— incluyequalification_score,funnel_stage,sentiment,value,tags. - Cuando el lead está listo, el bot emite
handoff.requestedy tu equipo lo toma.
Claves: los campos de fields en lead.captured solo traen lo que cambió; el snapshot trae todo. Decidí tu umbral de handoff con qualification_score.
6. Completar datos estructurados de a poco (formulario conversacional)
Sección titulada «6. Completar datos estructurados de a poco (formulario conversacional)»Una entrevista o encuesta conversacional que va llenando campos de un registro de tu sistema (un perfil, un proyecto, un onboarding) a medida que el usuario responde.
- Creás la sesión con un
session_idestable por entidad (ej.proyecto-<id>) → todos los datos se acumulan en un mismo contacto. - El agente captura cada respuesta y emite
contact.updatedconchanges— solo lo nuevo/cambiado en esa interacción. - Mapeás el
session_iddel evento a tu registro y guardás cada campo dechanges. Si el usuario corrige algo, llega uncontact.updatedcon el valor actualizado. - Tu sistema decide cuándo está “completo” haciendo seguimiento de los campos que fue recibiendo (no hay un evento de “completado”).
Claves: las claves de changes son los nombres de campo que definís en la config del agente; usá un session_id estable para que sea 1 entidad = 1 contacto; event_id para idempotencia.
Cómo configurar al agente para capturar estos campos
Sección titulada «Cómo configurar al agente para capturar estos campos»La captura la define quien administra el agente (en el panel), no la API. Hay dos modos:
- Inferencia automática: el agente capta datos personales que el usuario menciona y los guarda con claves descriptivas que elige el modelo. Sirve para no perder información, pero no controla el nombre exacto de la clave.
- Captura controlada por protocolo (recomendada para integraciones): el agente cuenta con la herramienta
save_permanent_data, que persiste un dato en los datos permanentes del contacto bajo el nombre de variable exacto que se le indica. Un protocolo del agente define qué preguntar y, ante cada respuesta, llama asave_permanent_datacon ese nombre. Ejemplo:El nombre (save_permanent_data(variable="rubro", value="gastronomía")rubro) es exactamente la clave que llega enchangesdel eventocontact.updated. El agente además puede inferir respuestas de lo que el usuario ya dijo y preguntar solo lo que falta (no repite lo que ya tiene).
Como los protocolos se activan según la situación de la conversación, la entrevista puede correr por etapas: distintos protocolos para distintos momentos — el agente captura solo lo de esa etapa.
7. Soporte con tickets integrado a tu sistema interno
Sección titulada «7. Soporte con tickets integrado a tu sistema interno»Si el tenant tiene el módulo de Tickets activo (BotRole con goal support_ticket), el bot abre y mueve tickets que vos sincronizás con tu sistema.
ticket.created→ creás el ticket en tu herramienta conticket_number,category,urgency,description.ticket.state_changed→ reflejás el cambio de estado (NUEVO → ABIERTO → ... → CERRADO).ticket.resolved→ cerrás el ticket con el camporesolution.
8. Sandbox en CI/CD y wizards de setup
Sección titulada «8. Sandbox en CI/CD y wizards de setup»Validá tu integración sin gastar LLM ni cuota:
GET /channel/pingen tu pipeline para verificar que la key es válida y el plan incluye Canal API.POST /channel/message/sandboxpara simular el flujo completo (incluido el webhook firmado) sin orquestar una conversación real.POST /channel/webhooks/testpara probar tu handler de cada tipo de evento.
Claves: el sandbox usa su propio bucket (600/min) y marca los payloads con "sandbox": true, así tu handler los distingue del tráfico real.