Skip to main content
Nivel: Avanzado · Etiquetas: IA, Herramientas, Handoff, WhatsApp, Telegram Funcionalidades: herramientas de IA (tool calling) · handoff humano (ctx.handoff, bot.resume) · comandos de escape durante el handoff · eventos 'message' y 'handoff' · enviar a otro chat (bot.send) · validación de argumentos con enum

Requisitos

  • Node.js 22.12 o superior.
  • Una API key de Anthropic en la variable de entorno ANTHROPIC_API_KEY (u otro modelo con tool calling, ver más abajo).
  • AGENTS_CHAT_ID, el chat donde tus agentes reciben los resúmenes (por ejemplo el id de un grupo de WhatsApp). Es obligatoria en WhatsApp y Telegram; el simulador usa un chat llamado agentes.

El bot

Cómo funciona

  • El modelo decide cuándo escalar. escalar_a_humano es una herramienta normal: la persona dice cuándo llamarla, y el enum limita motivo a un conjunto cerrado por el que puedes enrutar (colas, prioridades).
  • El resumen es un argumento de la herramienta. El modelo lo escribe al decidir escalar, así el agente recibe “problema, qué se probó, qué quiere el cliente” sin una llamada extra al modelo.
  • Primero el handoff, después el aviso. La herramienta llama a ctx.handoff() antes de avisar a los agentes, y avisarAgentes() captura sus propios errores: si no se puede llegar al chat de los agentes, el cliente pasa igualmente a una persona y el fallo va al log en vez de tumbar el proceso.
  • ctx.handoff() pausa el bot en ese chat. Los mensajes se siguen guardando, los hooks corren y el evento 'message' se emite (el ejemplo los reenvía a los agentes, empezando por el mensaje que provocó el escalado), pero ningún handler, flujo ni la IA responde. El estado sobrevive a los reinicios con un store persistente.
  • Recuperar el bot. handoff.allowCommands: ['bot'] deja pasar /bot durante el handoff; en producción tu bandeja de entrada llama a bot.resume(chatId) cuando el agente cierra el caso. Los agentes responden al cliente con bot.send(chatId, texto).
  • Aquí no hay confirmación. Escalar no tiene efectos para el cliente, así que la herramienta no lleva confirm: true; resérvalo para reembolsos o reservas.

Pruébalo

Una ejecución del código de arriba en el simulador de terminal, donde el chat del cliente es user. El modelo sigue un guion en el test que ejecuta esta página (packages/ai/tests/docs-examples-ai.test.ts); el handoff, el reenvío a agentes y /bot son los reales. Las líneas bot → agentes son lo que recibe el chat de los agentes.

Otros proveedores de modelos

El tool calling funciona con todos los proveedores; en Ollama elige un modelo etiquetado como tools.OpenAI (npm install openai, key en OPENAI_API_KEY):
Gemini (npm install @google/genai, key en GEMINI_API_KEY):
Ollama en tu máquina (sin paquete ni key; antes ejecuta ollama pull qwen3):

Ejecutarlo en WhatsApp o Telegram

node bot.js muestra un código QR: escanéalo con WhatsApp (Dispositivos vinculados) y pon en AGENTS_CHAT_ID el grupo donde están tus agentes. Para Telegram, instala @botmesh/telegram, arranca la fábrica con new TelegramProvider({ token: process.env.TELEGRAM_TOKEN ?? '' }) y usa el id numérico del grupo de agentes.

Siguientes pasos