¿Cansado de responder las mismas preguntas una y otra vez? ¿Tu negocio necesita atención 24/7 pero no puedes permitirte un equipo completo de soporte? Un chatbot con IA puede revolucionar tu comunicación, y con n8n puedes crearlo gratis, sin programar, y con el control total de tus datos.
En esta guía completa aprenderás a crear un chatbot desde cero con n8n, paso a paso. Desde la configuración básica hasta técnicas avanzadas de memoria conversacional, integración con múltiples plataformas y optimización de costes. Todo con ejemplos reales y workflows que puedes copiar directamente.
¿Por qué crear un chatbot con n8n?
n8n es una plataforma de automatización de flujos de trabajo visual que te permite conectar aplicaciones y servicios sin necesidad de escribir código complejo. A diferencia de plataformas cerradas como Zapier o Make, n8n te da control total sobre tus datos y lógica de negocio.
Ventajas de usar n8n para chatbots:
- ✅ Gratis y open source: Autohospedable sin límites de ejecuciones
- ✅ Sin vendor lock-in: Tus datos y workflows son tuyos
- ✅ Múltiples modelos LLM: OpenAI, Claude, Llama local, Mistral, OpenRouter
- ✅ Integración nativa: WhatsApp, Telegram, Slack, web widget
- ✅ Memoria conversacional: El bot recuerda contexto de conversaciones anteriores
- ✅ Workflow visual: No necesitas ser programador
- ✅ Extensible: Añade lógica personalizada con JavaScript/Python
Comparativa: ¿Qué modelo LLM usar para tu chatbot?
Antes de empezar, necesitas elegir qué cerebro tendrá tu chatbot. Aquí está la comparativa completa:
| Modelo | Coste | Calidad | Velocidad | Privacidad | Mejor para |
|---|---|---|---|---|---|
| GPT-4o (OpenAI) | $$$ | ⭐⭐⭐⭐⭐ | Rápida | ❌ Cloud | Conversaciones complejas, múltiples idiomas |
| GPT-3.5 Turbo | $ | ⭐⭐⭐⭐ | Muy rápida | ❌ Cloud | FAQs, soporte básico, volumen alto |
| Claude 3.5 Sonnet | $$ | ⭐⭐⭐⭐⭐ | Rápida | ❌ Cloud | Respuestas largas, análisis, creatividad |
| Llama 3.1 (8B local) | GRATIS | ⭐⭐⭐ | Media | ✅ 100% local | Datos sensibles, sin coste, volumen ilimitado |
| Mistral (OpenRouter) | $ | ⭐⭐⭐⭐ | Muy rápida | ❌ Cloud | Balance coste/calidad, multiidioma |
| OpenRouter (varios) | $ – $$$ | Varía | Varía | ❌ Cloud | Probar múltiples modelos sin cambiar código |
Recomendación según caso de uso:
- Startup/prueba de concepto: GPT-3.5 Turbo (barato, efectivo)
- Empresa con datos sensibles: Llama 3.1 local (privacidad total)
- Alto volumen, presupuesto ajustado: Mistral vía OpenRouter
- Calidad máxima, presupuesto disponible: GPT-4o o Claude 3.5 Sonnet
- Experimentación: OpenRouter (acceso a 100+ modelos con una API)
Arquitectura de un chatbot con n8n
Antes de empezar a construir, entiende cómo funciona un chatbot con n8n:
Usuario envía mensaje
↓
Webhook/Trigger recibe mensaje (Telegram, WhatsApp, Web)
↓
[Opcional] Buscar contexto conversacional anterior (Base de datos)
↓
Nodo LLM procesa mensaje + contexto
↓
[Opcional] Guardar nueva conversación en BD
↓
Enviar respuesta al usuario
Componentes clave:
- Trigger (Webhook/Polling): Recibe mensajes del usuario
- Context Manager: Recupera y guarda historial de conversación
- LLM Node: Procesa el mensaje con IA
- Response Node: Envía respuesta al canal
- [Opcional] Database: Postgres/Redis para memoria persistente
Paso 1: Configurar tu entorno n8n
Opción A: n8n Cloud (más fácil)
- Ve a n8n.io y crea cuenta gratuita
- Accede a tu instancia cloud
- Listo para usar (limitado a 5,000 ejecuciones/mes en plan gratuito)
Opción B: n8n autohospedado con Docker (recomendado)
Para control total y ejecuciones ilimitadas, instala n8n en tu servidor:
# docker-compose.yml
version: '3.8'
services:
n8n:
image: n8nio/n8n:latest
restart: always
ports:
- "5678:5678"
environment:
- N8N_BASIC_AUTH_ACTIVE=true
- N8N_BASIC_AUTH_USER=admin
- N8N_BASIC_AUTH_PASSWORD=tu_password_seguro
- N8N_HOST=n8n.tudominio.com
- N8N_PROTOCOL=https
- NODE_ENV=production
- WEBHOOK_URL=https://n8n.tudominio.com/
volumes:
- n8n_data:/home/node/.n8n
postgres:
image: postgres:15
restart: always
environment:
- POSTGRES_USER=n8n
- POSTGRES_PASSWORD=password_seguro
- POSTGRES_DB=n8n
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
n8n_data:
postgres_data:
Ejecuta:
docker-compose up -d
Accede a http://tu-servidor:5678 y configura tu cuenta.
Para una guía completa de instalación, consulta nuestra Guía Completa de n8n v2.
Paso 2: Obtener API keys necesarias
Para OpenAI (GPT-3.5/GPT-4)
- Ve a platform.openai.com/api-keys
- Crea una nueva API key
- Añade créditos (mínimo $5 para empezar)
- Guarda la key en n8n: Credentials → Add Credential → OpenAI
Para Claude (Anthropic)
- Ve a console.anthropic.com
- Crea API key
- Guarda en n8n: Credentials → Add Credential → Anthropic
Para OpenRouter (acceso a 100+ modelos)
- Ve a openrouter.ai/keys
- Crea API key
- Añade créditos ($5 mínimo)
- Guarda en n8n: Credentials → Add Credential → HTTP Header Auth
- Name:
Authorization - Value:
Bearer TU_OPENROUTER_API_KEY
- Name:
Para Ollama (modelos locales gratis)
- Instala Ollama en tu servidor:
curl -fsSL https://ollama.com/install.sh | sh ollama run llama3.1:8b - Ollama corre en
http://localhost:11434 - No necesitas API key, solo la URL del endpoint
Para configurar Ollama con n8n, consulta nuestra Guía de Servidor IA Casero.
Paso 3: Crear el workflow base del chatbot
Vamos a crear un chatbot funcional paso a paso. Empezamos con la versión más simple y luego añadimos features avanzadas.
Workflow básico (sin memoria)
- En n8n, crea un nuevo workflow: + New Workflow
- Añade los siguientes nodos:
Nodo 1: Webhook (Trigger)
Este nodo recibe mensajes del usuario:
- Node:
Webhook - HTTP Method:
POST - Path:
chatbot - Response Mode:
Last Node
Tu webhook URL será: https://tu-n8n.com/webhook/chatbot
Nodo 2: Extract Message (Set)
Extrae el mensaje del usuario del payload:
- Node:
Set - Keep Only Set: ✓
- Values to Set:
- Name:
userMessage - Value:
{{ $json.body.message }}
- Name:
Nodo 3: OpenAI Chat (LLM)
Procesa el mensaje con IA:
- Node:
OpenAI - Resource:
Chat - Operation:
Message - Model:
gpt-3.5-turbo - Messages:
- Role:
system - Content:
Eres un asistente útil y amigable. Responde en español de forma concisa y clara.
- Role:
user - Content:
{{ $json.userMessage }}
- Role:
Nodo 4: Format Response (Set)
Formatea la respuesta para el usuario:
- Node:
Set - Values to Set:
- Name:
response - Value:
{{ $json.message.content }}
- Name:
Nodo 5: Respond to Webhook
Envía respuesta al usuario:
- Node:
Respond to Webhook - Response Body:
{{ $json.response }}
¡Listo! Ya tienes un chatbot funcional. Guarda el workflow y actívalo.
Probar el chatbot
Usa curl o Postman para enviar un mensaje:
curl -X POST https://tu-n8n.com/webhook/chatbot \
-H "Content-Type: application/json" \
-d '{"message": "Hola, ¿cómo estás?"}'
Deberías recibir una respuesta del chatbot en español.
Paso 4: Añadir memoria conversacional
El chatbot anterior no recuerda conversaciones anteriores. Vamos a añadir memoria usando Postgres:
Configurar base de datos
- Si usas Docker Compose, Postgres ya está corriendo
- Conecta a Postgres:
docker exec -it [container_id] psql -U n8n - Crea tabla para conversaciones:
CREATE TABLE chat_history ( id SERIAL PRIMARY KEY, user_id VARCHAR(255) NOT NULL, role VARCHAR(50) NOT NULL, content TEXT NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); CREATE INDEX idx_user_id ON chat_history(user_id);
Modificar workflow para usar memoria
Añade estos nodos ANTES del nodo OpenAI:
Nodo: Get User ID
- Node:
Set - Values to Set:
- Name:
userId - Value:
{{ $json.body.user_id || 'default_user' }}
- Name:
Nodo: Load Chat History
- Node:
Postgres - Operation:
Execute Query - Query:
SELECT role, content FROM chat_history WHERE user_id = '{{ $json.userId }}' ORDER BY created_at DESC LIMIT 10
Nodo: Build Context (Code)
- Node:
Code - Mode:
Run Once for All Items - JavaScript:
// Obtener historial de mensajes const history = $input.all().reverse(); // Construir array de mensajes para OpenAI const messages = [ { role: "system", content: "Eres un asistente útil. Recuerda el contexto de conversaciones anteriores." } ]; // Añadir historial history.forEach(item => { if (item.json.role && item.json.content) { messages.push({ role: item.json.role, content: item.json.content }); } }); // Añadir mensaje actual del usuario messages.push({ role: "user", content: $('Extract Message').item.json.userMessage }); return { messages };
Modifica el nodo OpenAI para usar estos mensajes:
- Messages:
={{ $json.messages }}
Nodo: Save User Message (después de OpenAI)
- Node:
Postgres - Operation:
Insert - Table:
chat_history - Columns:
user_id:{{ $('Get User ID').item.json.userId }}role:usercontent:{{ $('Extract Message').item.json.userMessage }}
Nodo: Save Bot Response
- Node:
Postgres - Operation:
Insert - Table:
chat_history - Columns:
user_id:{{ $('Get User ID').item.json.userId }}role:assistantcontent:{{ $json.message.content }}
¡Listo! Ahora tu chatbot recuerda conversaciones anteriores y puede mantener contexto entre mensajes.
Paso 5: Integrar con canales (Telegram, WhatsApp, Web)
Integración con Telegram
- Crea un bot en Telegram:
- Habla con @BotFather
- Envía
/newbot - Sigue instrucciones y guarda el Bot Token
- En n8n, reemplaza el nodo Webhook por Telegram Trigger:
- Node:
Telegram Trigger - Credentials: Añade tu Bot Token
- Updates:
message
- Node:
- Reemplaza el nodo Response por Telegram:
- Node:
Telegram - Resource:
Message - Operation:
Send Text - Chat ID:
={{ $json.message.chat.id }} - Text:
={{ $('OpenAI').item.json.message.content }}
- Node:
Para una guía completa de bots en Telegram, consulta nuestro artículo Crea tu Bot de Telegram con n8n.
Integración con WhatsApp (Evolution API)
- Instala Evolution API:
docker run -d \ --name evolution-api \ -p 8080:8080 \ -e AUTHENTICATION_API_KEY=tu_api_key_segura \ atendai/evolution-api:latest - Conecta WhatsApp:
- Accede a
http://tu-servidor:8080 - Escanea QR con WhatsApp
- Accede a
- En n8n, usa nodo HTTP Request para enviar/recibir mensajes de Evolution API
Para configuración completa de WhatsApp + n8n, consulta la guía oficial en la comunidad de n8n.
Widget web embebido
Para incrustar el chatbot en tu web, usa el nodo Webhook + un widget HTML/JavaScript:
<!-- Ejemplo de widget HTML -->
<div id="chatbot-widget">
<div id="chat-messages"></div>
<input type="text" id="chat-input" placeholder="Escribe tu mensaje..." />
<button id="chat-send">Enviar</button>
</div>
<script>
document.getElementById('chat-send').addEventListener('click', async () => {
const message = document.getElementById('chat-input').value;
const response = await fetch('https://tu-n8n.com/webhook/chatbot', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
message: message,
user_id: 'web_user_' + Date.now()
})
});
const data = await response.json();
// Mostrar respuesta en chat
document.getElementById('chat-messages').innerHTML +=
`<p><strong>Bot:</strong> ${data.response}</p>`;
});
</script>
Paso 6: Casos de uso reales y personalización
Caso 1: Bot de soporte técnico con FAQs
Añade un nodo antes del LLM para buscar en una base de conocimiento:
// Nodo Code: Check FAQs
const userMessage = $input.item.json.userMessage.toLowerCase();
const faqs = {
'horario': 'Nuestro horario es de lunes a viernes, 9:00 a 18:00.',
'precio': 'Nuestros planes empiezan desde $9.99/mes.',
'cancelar': 'Puedes cancelar en cualquier momento desde tu panel de usuario.'
};
// Buscar coincidencias
for (const [keyword, answer] of Object.entries(faqs)) {
if (userMessage.includes(keyword)) {
return {
useFAQ: true,
response: answer
};
}
}
return { useFAQ: false };
Conecta con un nodo IF para enviar respuesta FAQ directamente o pasar a LLM si no hay coincidencia.
Caso 2: Bot de reservas con calendario
Integra con Google Calendar para agendar citas:
- Después del nodo LLM, añade nodo Code para detectar intención de reserva:
const response = $input.item.json.message.content; // Detectar si el usuario quiere agendar if (response.includes('agendar') || response.includes('reservar')) { return { needsBooking: true }; } return { needsBooking: false }; - Añade nodo Google Calendar para crear evento
- Confirma al usuario con detalles de la reserva
Caso 3: Bot multiidioma
Detecta idioma del usuario y responde en el mismo idioma:
// Nodo Code: Detect Language
const userMessage = $input.item.json.userMessage;
// Detectar idioma simple (puedes usar una API para mejor precisión)
const spanishWords = ['hola', 'qué', 'cómo', 'gracias'];
const englishWords = ['hello', 'what', 'how', 'thanks'];
let language = 'en';
if (spanishWords.some(word => userMessage.toLowerCase().includes(word))) {
language = 'es';
}
// Modificar system prompt según idioma
const systemPrompts = {
es: 'Eres un asistente útil. Responde siempre en español.',
en: 'You are a helpful assistant. Always respond in English.'
};
return {
language,
systemPrompt: systemPrompts[language]
};
Paso 7: Optimización de costes
Estrategia de fallback: Modelos locales + Cloud
Para reducir costes, usa modelos locales (Ollama) para consultas simples y reserva GPT-4 para consultas complejas:
// Nodo Code: Route to Model
const userMessage = $input.item.json.userMessage;
// Consultas simples → Ollama (gratis)
const simplePatterns = /^(hola|hi|adiós|bye|gracias|thanks)/i;
if (simplePatterns.test(userMessage) || userMessage.length < 50) {
return { useModel: 'ollama' };
}
// Consultas complejas → GPT-4
return { useModel: 'gpt4' };
Conecta a un nodo Switch que dirija a diferentes nodos LLM según el resultado.
Caché de respuestas frecuentes
Usa Redis para cachear respuestas a preguntas repetidas:
- Antes del LLM, busca en Redis si existe respuesta cacheada
- Si existe, retorna inmediatamente (ahorro de API call)
- Si no existe, procesa con LLM y guarda en caché
Troubleshooting: Problemas comunes
Problema 1: "Webhook not responding"
Causa: n8n no está accesible públicamente o workflow no está activado.
Solución:
- Verifica que el workflow está Active (switch arriba a la derecha)
- Si usas autohospedado, configura túnel con ngrok o Cloudflare Tunnel
- Verifica firewall permite conexiones en puerto 5678
Problema 2: "OpenAI API error 429"
Causa: Límite de rate limit excedido o sin créditos.
Solución:
- Verifica créditos en platform.openai.com/usage
- Añade delay entre requests con nodo Wait
- Cambia a tier de pago para mayor límite
Problema 3: "Bot no recuerda conversación anterior"
Causa: Base de datos no guarda o no carga historial correctamente.
Solución:
- Verifica que los nodos Save están conectados y ejecutándose
- Revisa logs de Postgres para errores de INSERT
- Confirma que user_id es consistente entre requests
Problema 4: "Respuestas muy lentas"
Causa: Modelo lento o n8n con pocos recursos.
Solución:
- Usa GPT-3.5 Turbo en lugar de GPT-4 (10x más rápido)
- Reduce
max_tokensen OpenAI node (respuestas más cortas) - Aumenta RAM de contenedor Docker n8n
- Usa streaming si el canal lo soporta
Deployment en producción
Checklist de producción
- ✅ HTTPS configurado (Cloudflare Tunnel o certificado SSL)
- ✅ Rate limiting activado (evitar abuse)
- ✅ Backup de base de datos automatizado
- ✅ Monitorización (logs, alertas si workflow falla)
- ✅ Escalabilidad (multiple workers si alto tráfico)
- ✅ API keys rotadas regularmente
- ✅ Fallback responses si LLM falla
Monitorización con n8n
Crea workflow separado que chequee salud del chatbot cada 5 minutos:
- Cron Trigger cada 5 minutos
- HTTP Request a tu webhook con mensaje de prueba
- IF verifica si respuesta correcta
- Si falla, Send Email/Telegram con alerta
Recursos y plantillas
Workflows listos para importar
Artículos relacionados
- Guía Completa de n8n v2: De Cero a Experto
- Crea tu Bot de Telegram con n8n (Guía Completa)
- Chatbot AI con n8n y OpenRouter
- Maestría del Nodo HTTP Request en n8n
- 20 Workflows de n8n Listos para Usar
Preguntas Frecuentes (FAQ)
¿Es difícil crear un chatbot con n8n?
No. El workflow básico tiene solo 5 nodos y puedes copiarlo directamente. La parte más compleja es configurar las API keys, que son 5 minutos de trabajo. Si sigues esta guía paso a paso, tendrás un chatbot funcionando en menos de 30 minutos.
¿Necesito saber programar para usar n8n?
No para el workflow básico. Todo es visual con drag & drop. Solo necesitas JavaScript si quieres lógica personalizada avanzada (detección de intención, routing complejo), pero incluso eso son snippets de código simples que puedes copiar.
¿Qué canales puedo usar para mi chatbot?
n8n soporta: WhatsApp (vía Evolution API), Telegram (nativo), Slack (nativo), Discord (nativo), Facebook Messenger (webhook), web widget (HTML/JS), email, SMS (Twilio), y cualquier plataforma con API REST mediante HTTP Request node.
¿Cuánto cuesta ejecutar un chatbot con OpenAI?
Con GPT-3.5 Turbo: ~$0.002 por conversación (50 tokens entrada + 100 tokens salida). Un bot con 1,000 conversaciones/mes = $2-3/mes. Con GPT-4: ~$0.03 por conversación = $30/mes para 1,000 conversaciones. Usa modelos locales (Ollama) para coste $0.
¿Cómo evito que usuarios abusen del chatbot?
Implementa rate limiting con nodo Code que guarde timestamps en Redis/Postgres. Ejemplo: máximo 10 mensajes por usuario cada hora. También puedes añadir CAPTCHA en widget web o authentication por API key.
¿El chatbot puede buscar en mi documentación/base de conocimiento?
Sí. Para eso necesitas implementar RAG (Retrieval Augmented Generation). Antes del LLM, añade un nodo que busque en tu base de datos/documentos y pasa los resultados relevantes como contexto. Consulta nuestra Guía Completa de RAG desde Cero.
¿Puedo usar múltiples modelos LLM en el mismo chatbot?
Sí. Usa un nodo Switch para enrutar según criterios (complejidad de pregunta, idioma, usuario premium vs free). OpenRouter facilita esto porque accedes a 100+ modelos con una sola API key.
¿Cómo hago que el bot recuerde conversaciones de hace días/semanas?
La memoria en Postgres que implementamos guarda indefinidamente. Modifica la query de Load Chat History para cargar más mensajes (actualmente 10 últimos). Considera implementar summarization: cada 20 mensajes, usa LLM para resumir conversación y guardar summary en vez de todos los mensajes (ahorra tokens).
Conclusión y próximos pasos
Has aprendido a crear un chatbot completo con n8n, desde el workflow básico hasta features avanzadas de memoria conversacional, multi-plataforma y optimización de costes. Este chatbot es production-ready y puede manejar miles de conversaciones diarias.
ROI esperado después de implementar:
- ⏱️ Ahorro de tiempo: 60-80% de consultas rutinarias automatizadas
- 💰 Ahorro de costes: $500-2,000/mes vs contratar soporte humano 24/7
- 📈 Satisfacción cliente: Respuesta inmediata 24/7 vs esperas de horas
- 🔍 Insights: Base de datos de conversaciones para analizar patrones
Próximos pasos recomendados:
- Implementa RAG para que el bot acceda a tu documentación completa
- Añade analytics (dashboards con Grafana para ver uso, queries más comunes)
- Configura A/B testing con diferentes prompts de system
- Integra con CRM (HubSpot, Salesforce) para crear tickets automáticamente
- Explora fine-tuning de modelos para tu caso de uso específico
¿Necesitas más automatización? Consulta estos artículos:
- 20 Workflows de n8n Listos para Copiar
- n8n + LangChain: Pipelines de IA Automatizadas
- Servidor IA Casero: Guía Completa 2025
¿Te ha resultado útil esta guía? Ahora tienes todas las herramientas para crear chatbots profesionales sin dependencias de plataformas cerradas. ¡Empieza a automatizar y libera tu tiempo para lo que realmente importa!
