Agente de IA en WhatsApp con n8n: paso a paso completo
Para armar un agente de IA en WhatsApp con n8n, usa un nodo Webhook para recibir el mensaje, un nodo Code para normalizar y filtrar, el nodo AI Agent con memoria por contacto y un nodo HTTP Request que llame a POST /send/text para responder. El paquete de la comunidad n8n-nodes-zapzap (versión 0.1.3 en npm el 27/10/2026) es una alternativa al HTTP Request, pero solo corre en n8n self-hosted. Abajo está el flujo completo.
Publicado el · 7 min de lectura
Este artículo también está disponible en: Português · English
Cómo funciona el flujo de punta a punta
El diseño tiene seis nodos. Webhook (disparador) recibe el evento messages de la instancia. Un nodo Code extrae número, texto e id y descarta tus propios mensajes. Un IF o el propio Code corta duplicados y conversaciones que ya están con un humano. El nodo AI Agent recibe el texto, usa la memoria de ese contacto y, si hace falta, llama a herramientas. Por último, un HTTP Request (o el nodo de la comunidad) envía la respuesta por send/text.
Antes de armarlo, entiende qué entrega n8n y qué no: orquesta, pero el modelo de IA es del proveedor que configures en la credencial del nodo, y el costo de ese proveedor es aparte. La página de la integración con n8n y la guía para integrar WhatsApp en n8n cubren la base; aquí el foco es el agente.
Qué necesitas antes de empezar
Una instancia de ZapZap conectada por código QR, la clave y el secreto de la API, un n8n accesible desde internet (self-hosted con HTTPS o n8n Cloud) y una credencial de un proveedor de modelo de IA. Para pruebas locales, n8n necesita una URL pública; un túnel sirve para desarrollar, no para producción.
En n8n, crea una credencial Header Auth o usa campos de cabecera fijos para x-api-key y x-api-secret. Así el secreto queda en la credencial, no escrito en cada nodo. Si prefieres partir de algo listo, hay modelos en plantillas de n8n para WhatsApp.
Paso 1: recibir el mensaje con el nodo Webhook
Agrega un nodo Webhook, método POST, y copia la Production URL (la de prueba solo funciona con el flujo en modo de escucha). Registra esa URL en la instancia con POST /webhook, activando el evento messages. Activa el flujo antes de usar la URL de producción.
Prueba con POST /instances/{id}/webhook/test: dispara un evento de prueba y devuelve el status HTTP y el tiempo de respuesta de tu endpoint. Si algo falla, GET /instances/{id}/webhook/deliveries muestra las últimas entregas y GET /webhook/errors, las fallas.
cURL (registrar o webhook do n8n)
curl -X POST https://api.zapzapapi.com/api/v1/SEU_INSTANCE_ID/webhook \
-H "Content-Type: application/json" \
-H "x-api-key: SUA_API_KEY" \
-H "x-api-secret: SEU_API_SECRET" \
-d '{"url":"https://SEU-N8N.com/webhook/whatsapp-agente","enabled":true,"events":["messages"]}'Paso 2: normalizar y filtrar con un nodo Code
Este es el nodo que evita los tres bugs más comunes: que el agente responda a su propio mensaje (fromMe), que responda dos veces al mismo evento y que responda en grupos sin querer. Comprueba la estructura exacta del evento en la pestaña de ejecución del Webhook, con un mensaje real; el código usa lectura defensiva y tú ajustas los nombres.
El nodo devuelve un ítem con numero, texto e id. Si el mensaje no debe tratarse, devuelve una lista vacía, lo que termina el flujo en esa rama. La deduplicación usa el almacenamiento estático del workflow, suficiente para un n8n único; con varias instancias de n8n, usa una base de datos o Redis.
n8n (nó Code, JavaScript)
const evento = $input.first().json.body ?? $input.first().json;
const msg = evento.message ?? evento.data ?? evento;
if (msg.fromMe) return [];
const id = msg.messageid ?? msg.id;
const numero = msg.sender ?? msg.from;
const texto = msg.text ?? msg.body ?? "";
const grupo = String(msg.chatid ?? msg.chatId ?? "").endsWith("@g.us");
if (!numero || !texto || grupo) return [];
const estado = $getWorkflowStaticData("global");
estado.vistos = estado.vistos ?? [];
if (id && estado.vistos.includes(id)) return [];
if (id) estado.vistos = [...estado.vistos.slice(-500), id];
return [{ json: { numero: String(numero).replace(/\D/g, ""), texto, id } }];Paso 3: configurar el nodo AI Agent con memoria por contacto
Agrega el nodo AI Agent. Configura tres cosas. Modelo de chat: elige el proveedor y el modelo en la credencial (el nombre del modelo queda en tu configuración, no en esta guía). Memoria: usa una memoria de ventana con la clave de sesión igual al número del contacto, para que cada cliente tenga su propia conversación. Prompt de sistema: rol, tono, límites y regla de traspaso a un humano.
Un prompt de sistema funcional, en pocas líneas: quién es el asistente y para qué empresa; responde en mensajes cortos, con tono de WhatsApp; usa solo la información provista; si no sabes o si el cliente pide una persona, responde exactamente la frase de traspaso acordada. Esa frase fija permite que el flujo detecte el handoff enseguida, con un nodo IF.
Si el agente necesita consultar datos (agenda, pedido, inventario), agrega herramientas: un HTTP Request como herramienta que apunte a tu sistema, con una descripción clara de lo que hace. Mantén pocas herramientas y bien descritas; los modelos se equivocan más cuando tienen muchas opciones.
Paso 4: enviar la respuesta por la API
Después del agente, agrega un HTTP Request. Method POST; URL https://api.zapzapapi.com/api/v1/SU_INSTANCE_ID/send/text; cabeceras x-api-key y x-api-secret; cuerpo JSON con number y text. El campo text viene de la salida del agente, y number viene del nodo Code.
El campo delay de send/text y la presencia escribiendo (message/presence) hacen la respuesta más natural, y un pequeño retraso evita parecer una máquina. Úsalos con moderación: lo que más pesa para el número es el comportamiento general, no un truco de envío.
n8n (HTTP Request, corpo JSON)
{
"number": "{{ $('Normalizar').item.json.numero }}",
"text": "{{ $json.output }}",
"delay": 2000
}cURL equivalente
curl -X POST https://api.zapzapapi.com/api/v1/SEU_INSTANCE_ID/send/text \
-H "Content-Type: application/json" \
-H "x-api-key: SUA_API_KEY" \
-H "x-api-secret: SEU_API_SECRET" \
-d '{"number":"5511999999999","text":"Resposta do agente","delay":2000}'Usar el paquete n8n-nodes-zapzap en vez del HTTP Request
Existe un paquete de nodos de la comunidad, n8n-nodes-zapzap, publicado en npm (versión 0.1.3 comprobada el 27/10/2026), que cubre envío de mensajes, multimedia, encuestas, botones y listas, reacciones, gestión de instancias y recepción de eventos en tiempo real. Simplifica la configuración, porque el nodo ya conoce los campos.
Un límite importante: según la documentación de n8n (leída el 27/10/2026), los nodos de la comunidad no verificados no están disponibles en n8n Cloud y exigen n8n self-hosted. Como este paquete es de la comunidad y no tenemos el sello de verificado de n8n, el camino garantizado en n8n Cloud es el HTTP Request. Los dos funcionan con la misma API y las mismas credenciales.
Instalação (n8n self-hosted)
n8n-nodes-zapzapPaso 5: detectar el traspaso a humano y pausar el agente
Después del agente, un nodo IF verifica si la respuesta es la frase de traspaso. Si lo es, el flujo marca al contacto como con humano (en una tabla de n8n, Redis o tu CRM), avisa al equipo y le envía al cliente un mensaje corto. Antes del agente, otro IF consulta esa marca y termina el flujo si el contacto está con un humano.
La marca necesita un plazo de expiración o un botón de liberar, de lo contrario el contacto nunca vuelve al bot. Este mismo diseño aparece en la guía del chatbot de WhatsApp con IA, con reglas de handoff y costo.
Errores comunes y cómo resolverlos
| Síntoma | Causa probable | Solución |
|---|---|---|
| El flujo no se dispara | Webhook en modo de prueba o flujo inactivo | Activar el flujo y usar la Production URL |
| El agente responde dos veces | Evento duplicado | Deduplicar por id del mensaje |
| El bot conversa solo en bucle | Mensajes fromMe sin filtrar | Descartar fromMe en el nodo Code |
| Todos los clientes comparten la misma conversación | Clave de sesión de la memoria fija | Usar el número del contacto como clave |
| Error 401 o 403 en el envío | Cabeceras de autenticación incorrectas | Revisar x-api-key y x-api-secret |
| La respuesta llega, pero fuera de contexto | Prompt genérico o sin material | Reforzar el prompt y dar el contenido de la empresa |
Para el día a día, mantén activo el historial de ejecuciones de n8n los primeros días, revisa muestras de conversación y ajusta el prompt. Para ver todos los recursos de la API que el agente puede usar como herramienta, abre la referencia y el OpenAPI.
Resumen rápido
- El flujo es Webhook, nodo Code (filtro), AI Agent con memoria por contacto y HTTP Request a /send/text.
- Filtra fromMe, grupos y eventos duplicados antes del agente, o responderá a sí mismo.
- Usa el número del contacto como clave de sesión de la memoria para separar las conversaciones.
- El paquete n8n-nodes-zapzap (0.1.3 en npm el 27/10/2026) solo corre en n8n self-hosted; en n8n Cloud usa el HTTP Request.
- Combina una frase fija de traspaso con un IF para pausar el agente cuando un humano asuma.
Sigue leyendo
Lee también
Preguntas frecuentes
¿Cómo conecto WhatsApp a un agente de IA en n8n?
Registra la Production URL de un nodo Webhook como webhook de la instancia (POST /webhook, evento messages), trata el mensaje con un nodo Code, pasa el texto al nodo AI Agent con memoria por contacto y envía la respuesta con un HTTP Request a /send/text.
¿El nodo n8n-nodes-zapzap funciona en n8n Cloud?
En la práctica, no. Según la documentación de n8n, los nodos de la comunidad no verificados exigen n8n self-hosted, y este paquete es de la comunidad, sin sello de verificado de n8n. En n8n Cloud, usa el nodo HTTP Request con las mismas cabeceras de autenticación.
¿Cómo evito que el agente se responda a sí mismo?
Descarta, en el primer nodo, los eventos con fromMe verdadero y deduplica por id del mensaje. Sin ese filtro, la respuesta que envió el agente vuelve como evento y el flujo entra en bucle.
¿Qué modelo de IA debo usar en el nodo AI Agent?
Cualquiera que n8n soporte y para el que tengas credencial. La elección depende de costo, velocidad y calidad en tu caso. Prueba con algunas decenas de conversaciones reales antes de decidir y usa un modelo menor para preguntas simples.
¿El agente puede consultar mi sistema?
Sí. Agrega herramientas al nodo AI Agent, como un HTTP Request que apunte a tu API, con una descripción clara de lo que hace la herramienta. Mantén pocas herramientas y limita lo que cada una puede modificar.
Conecta un agente de IA a tu WhatsApp
Crea la cuenta, verifica tu teléfono y recibe el crédito de bienvenida, sin depositar (uno por teléfono, sujeto a la campaña vigente). Conecta por código QR, registra el webhook de n8n y prueba.
