Saltar al contenido principal
Nivel: Intermedio · Etiquetas: IA, Herramientas, WhatsApp, Telegram Funcionalidades: herramientas de IA (tool calling) · confirmación humana (confirm: true) · confirmLines con precios de tu código · dedupe de efectos repetidos · validación de argumentos con enum · botones Sí/No · eventos de auditoría

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).

El bot

Cómo funciona

  • Las herramientas son funciones normales. Cada entrada de tools tiene una description que lee el modelo, un schema JSON opcional y un handler. El plugin ejecuta el bucle de herramientas: llama al modelo, ejecuta las herramientas que pide y le devuelve los resultados hasta que escribe la respuesta (maxSteps lo acota).
  • Confirmación antes de los efectos. confirm: true hace que el plugin pregunte al cliente y ejecute la herramienta solo tras un “sí” claro. La pregunta se hace dentro de una conversación, así que el chat nunca queda bloqueado mientras espera. En canales con botones (Telegram, WhatsApp Cloud API, el simulador) muestra botones Sí/No; en WhatsApp con Baileys pide un sí/no escrito.
  • Tu código manda en los números. confirmLines muestra el servicio y el precio de SERVICIOS, y el handler también los devuelve, así el modelo los repite en vez de calcularlos.
  • Sin reservas dobles. dedupe: 'args' se salta una llamada con los mismos argumentos que una reserva hecha en los últimos 10 minutos; al modelo se le dice que ya estaba hecha. Un handler que devuelve { error } no hizo nada y no se recuerda.
  • Cada alta tiene su listado y su cancelación. Sin mis_citas y cancelar_cita un modelo “arregla” una reserva haciendo otra.
  • Auditoría. Cada paso del bucle es un evento 'ai.tool'; el ejemplo registra las ejecuciones en el log.

Pruébalo

Una ejecución del código de arriba en el simulador de terminal. El modelo sigue un guion en el test que ejecuta esta página (packages/ai/tests/docs-examples-ai.test.ts); las confirmaciones, los botones y los resultados de las herramientas son los reales. En el simulador también puedes responder una confirmación con :click 1. En el cuarto mensaje el modelo pide otra vez la misma reserva: dedupe se la salta sin preguntar, y la cancelación rechazada deja la cita como estaba.

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). Para Telegram, instala @botmesh/telegram y arranca la fábrica con new TelegramProvider({ token: process.env.TELEGRAM_TOKEN ?? '' }): la confirmación usa entonces botones Sí/No en línea, que se quitan al responder.

Siguientes pasos