Un agente es la IA que habla con tus pacientes por ti. Le dices en palabras sencillas cuál es su trabajo y qué no debe hacer nunca, le das documentos para consultar y herramientas para buscar información en tus sistemas, y lo pones en un número de teléfono, un número de WhatsApp o el chat de tu sitio web. Responde ahí, y un agente de voz también puede llamar a personas para una campaña. En la app de Raíz, los agentes se llaman Trabajadores.
Para crear uno paso a paso, sigue Crear un agente. Esta página explica sus partes.
Voz o texto
Cada agente tiene una modality, que se elige al crearlo:
modality |
Habla en | Cómo abre la conversación |
|---|---|---|
voice |
Llamadas telefónicas, entrantes y salientes. | firstMessage: lo que dice cuando se conecta una llamada. |
text |
WhatsApp y chat web. | En WhatsApp, settings.greeting decide cómo responde a un contacto que abre una conversación. Una conversación que tu organización inicia en WhatsApp se abre con una plantilla aprobada. |
La modalidad debe corresponder al canal: los agentes de voz atienden números de teléfono, y los agentes de texto, números de WhatsApp y chat web. Solo puede cambiar mientras el agente no tenga canales ni una línea de voz publicada; si no, la actualización responde 409 AGENT_MODALITY_LOCKED.
De qué se compone un agente
| Campo | Qué es |
|---|---|
name |
Hasta 120 caracteres. Obligatorio, junto con modality. |
instructions |
Su trabajo en palabras sencillas: su rol, lo que puede y no puede hacer, la información en la que se apoya. Hasta 100.000 caracteres. |
firstMessage |
Agentes de voz: lo primero que dice cuando se conecta una llamada, entrante o saliente. |
language, timeZone |
Una etiqueta de idioma BCP 47, como es-CO, y una zona horaria IANA, como America/Bogota. |
status |
active o paused. Un agente en pausa no responde nada ni hace llamadas. |
settings |
Cómo se comporta. Consulta Configuración. |
knowledgeDocumentIds |
Hasta 100 documentos de Conocimiento que consulta. |
integrationTools |
Hasta 200 herramientas de tus integraciones que puede llamar. Consulta Herramientas y skills. |
integrationSkills |
Agentes de texto: hasta 32 skills que publican tus conexiones. |
skills |
Agentes de texto: hasta 32 procedimientos propios, de 256 KiB en total. |
description |
Texto libre, hasta 2000 caracteres. |
Un agente también informa sus channels (hasta 50, cada uno con su tipo y su estado), channelCount, toolCount y version.
Listo y sincronizado
Dos campos dicen si un agente puede trabajar:
readyestruecuando puede sostener conversaciones: estáactive, tiene instrucciones y, si es un agente de voz, está publicado para llamadas.synceddice si las llamadas ya usan su versión actual. Un agente de voz se publica en sus líneas telefónicas en segundo plano después de cada cambio; hasta quesyncedseatrue, las llamadas usan la versión anterior, ysyncErrorCodeda el error del último intento. Corregir la causa, como unvoiceIdinválido o la falta de instrucciones, lo vuelve a publicar. Los agentes de texto siempre estánsynced.
curl -s "https://api.getarbol.com/v1/raiz/agents/agt_01jd8x5k2m7q9r3t6v8w0y4z1b" \
--header "Authorization: Bearer $ARBOL_API_KEY" \
| jq '.data | {status, ready, synced, syncErrorCode, version}'Configuración
settings contiene cómo se comporta el agente. Los ajustes de texto aplican solo a los agentes de texto, y los de voz, solo a los agentes de voz; un ajuste que no corresponde a la modalidad, o que contradice a otro, responde 422 AGENT_SETTINGS_INVALID. En una actualización, settings es el valor nuevo completo: las claves que omitas vuelven a su valor por defecto. Algunos de ellos:
| Ajuste | Agentes | Qué hace |
|---|---|---|
model |
Texto | El nivel que escribe las respuestas: arbolito/agile (el predeterminado; el más rápido y económico), arbolito/balanced, arbolito/advanced o arbolito/top (el más capaz). |
reasoningEffort |
Texto | Cuánto deliberan arbolito/advanced y arbolito/top, de none a xhigh. Un nivel que no razona lo rechaza. |
greeting |
Texto, WhatsApp | Cómo responde a un contacto que abre una conversación que nadie ha respondido todavía. Su type es message (un texto fijo), businessApp (el saludo que envía la app WhatsApp Business) o instructions (instrucciones adicionales para su primera respuesta). |
followUpAfterMinutes, followUpMessage |
Texto | Cuando fue el último en hablar y preguntó algo, escribir una vez más después de esta cantidad de minutos de silencio (solo WhatsApp, dentro de su ventana de 24 horas). |
sessionCloseAfterMinutes |
Texto | Cerrar una conversación después de esta cantidad de minutos sin mensajes. Por defecto: 1440 en WhatsApp, 30 en chat web. |
humanEscalation.instructions |
Ambos | Cuándo pedirle a tu equipo que intervenga. Una solicitud explícita de hablar con una persona siempre se respeta. |
handoffMessage |
Texto, WhatsApp | El aviso que se agrega después de pasarle la conversación a tu equipo. Un texto vacío desactiva el aviso; el traspaso igual ocurre. |
automaticKnowledge |
Texto | Buscar Conocimiento relevante antes de responder un mensaje con contenido sustancial, no solo cuando el agente busca. |
monthlyTokenBudget |
Texto | Un límite mensual de tokens. En WhatsApp, cuando se agota, el contacto lee budgetExhaustedMessage y la conversación pasa a tu equipo. |
evalGate |
Texto, WhatsApp | Exigir una ejecución de evaluación aprobada antes de que entre en vigor un cambio en lo que lee el modelo. |
voice.voiceId |
Voz | Una voz de raiz.voices.list, que filtra las voces por language y enlaza muestras para escuchar. |
voice.llm |
Voz | El nivel con el que piensa en las llamadas, de los mismos cuatro. |
voice.recordCalls |
Voz | Guardar la grabación de cada llamada. |
voice.redactKeypadInput |
Voz | Reemplazar por <REDACTED> los números marcados en el teclado del teléfono en las transcripciones y los análisis guardados, para las llamadas futuras. El agente igual recibe los dígitos. Desactivado por defecto. |
voice.maxDurationSeconds |
Voz | Lo máximo que puede durar una llamada. Por defecto: 600 segundos. |
La referencia lista todos los ajustes, como humanReplyTimeoutMinutes: cuándo se reanudan las respuestas automáticas después de que una persona toma un chat de WhatsApp.
Herramientas y skills
- Herramientas de integración. Cada entrada empareja un
connectionIdcon unatoolque ofrece esa conexión, tal como las listaaccount.connections.list. Raíz guarda cada herramienta con su definición en ese momento, sudigesty sueffect:readsolo consulta,writepuede cambiar datos. Si la herramienta de la conexión cambia después, el agente conserva la definición guardada hasta que lo vuelvas a guardar. Una herramienta que no está en la conexión, o que Raíz no puede ejecutar, responde422 INTEGRATION_TOOL_UNAVAILABLE. - Las skills de integración son skills que publica una conexión, guardadas con su texto en ese momento. Sus nombres deben ser distintos de los de las skills propias del agente.
- Las skills son tus propios procedimientos, cada una con un
name, unadescriptionde una línea, susinstructionsy hasta 16resourcesde referencia. El agente carga una cuando la necesita. Las skills nunca le dan más herramientas a un agente ni ejecutan scripts.
Para algo temporal, como un día sin citas, publica una novedad en lugar de cambiar las instrucciones.
Versiones y actualizaciones seguras
Cada agente lleva una version. Envía la que leíste como expectedVersion a raiz.agents.update: el cambio se aplica solo si nadie cambió el agente desde entonces, y si no, responde 409 VERSION_CONFLICT, así que vuelve a leerlo y aplica de nuevo tu cambio. Los campos que omites se quedan como están; settings, integrationTools, integrationSkills, skills y knowledgeDocumentIds reemplazan el valor completo.
Con settings.evalGate activado, una actualización que cambia lo que lee el modelo (instrucciones, skills, skills de integración, model o reasoningEffort) también debe enviar evalRunId: una ejecución de evaluación completada de exactamente ese contenido en la que pasaron todos los casos. Si no, responde 409 EVAL_GATE_UNMET.
Operaciones
| Operación | Qué hace |
|---|---|
raiz.agents.create |
Crea un agente. No es idempotente: después de un resultado desconocido, lista los agentes antes de intentarlo de nuevo. |
raiz.agents.get |
Lee la configuración completa de un agente por agentId. |
raiz.agents.list |
Busca agentes por status, modality o q (el nombre), del más reciente al más antiguo. |
raiz.agents.update |
Cambia un agente. "status": "paused" hace que deje de responder y de llamar. |
raiz.voices.list |
Busca una voz para un agente de voz. |
raiz.channels.update |
Pone el agente en un canal. Consulta Canales. |
Todas están en la referencia de Agents, y la guía Crear un agente muestra cada solicitud y sus errores.