Crea un Chatbot Sencillo con n8n para Automatizar tu Comunicación

¿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:

  1. Trigger (Webhook/Polling): Recibe mensajes del usuario
  2. Context Manager: Recupera y guarda historial de conversación
  3. LLM Node: Procesa el mensaje con IA
  4. Response Node: Envía respuesta al canal
  5. [Opcional] Database: Postgres/Redis para memoria persistente

Paso 1: Configurar tu entorno n8n

Opción A: n8n Cloud (más fácil)

  1. Ve a n8n.io y crea cuenta gratuita
  2. Accede a tu instancia cloud
  3. 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)

  1. Ve a platform.openai.com/api-keys
  2. Crea una nueva API key
  3. Añade créditos (mínimo $5 para empezar)
  4. Guarda la key en n8n: Credentials → Add Credential → OpenAI

Para Claude (Anthropic)

  1. Ve a console.anthropic.com
  2. Crea API key
  3. Guarda en n8n: Credentials → Add Credential → Anthropic

Para OpenRouter (acceso a 100+ modelos)

  1. Ve a openrouter.ai/keys
  2. Crea API key
  3. Añade créditos ($5 mínimo)
  4. Guarda en n8n: Credentials → Add Credential → HTTP Header Auth
    • Name: Authorization
    • Value: Bearer TU_OPENROUTER_API_KEY

Para Ollama (modelos locales gratis)

  1. Instala Ollama en tu servidor:
    curl -fsSL https://ollama.com/install.sh | sh
    ollama run llama3.1:8b
    
  2. Ollama corre en http://localhost:11434
  3. 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)

  1. En n8n, crea un nuevo workflow: + New Workflow
  2. 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 }}

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 }}

Nodo 4: Format Response (Set)

Formatea la respuesta para el usuario:

  • Node: Set
  • Values to Set:
    • Name: response
    • Value: {{ $json.message.content }}

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

  1. Si usas Docker Compose, Postgres ya está corriendo
  2. Conecta a Postgres:
    docker exec -it [container_id] psql -U n8n
    
  3. 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' }}

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: user
    • content: {{ $('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: assistant
    • content: {{ $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

  1. Crea un bot en Telegram:
    • Habla con @BotFather
    • Envía /newbot
    • Sigue instrucciones y guarda el Bot Token
  2. En n8n, reemplaza el nodo Webhook por Telegram Trigger:
    • Node: Telegram Trigger
    • Credentials: Añade tu Bot Token
    • Updates: message
  3. 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 }}

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)

  1. Instala Evolution API:
    docker run -d \
      --name evolution-api \
      -p 8080:8080 \
      -e AUTHENTICATION_API_KEY=tu_api_key_segura \
      atendai/evolution-api:latest
    
  2. Conecta WhatsApp:
    • Accede a http://tu-servidor:8080
    • Escanea QR con WhatsApp
  3. 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:

  1. 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 };
    
  2. Añade nodo Google Calendar para crear evento
  3. 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:

  1. Antes del LLM, busca en Redis si existe respuesta cacheada
  2. Si existe, retorna inmediatamente (ahorro de API call)
  3. 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_tokens en 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:

  1. Cron Trigger cada 5 minutos
  2. HTTP Request a tu webhook con mensaje de prueba
  3. IF verifica si respuesta correcta
  4. Si falla, Send Email/Telegram con alerta

Recursos y plantillas

Workflows listos para importar

Artículos relacionados

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:

  1. Implementa RAG para que el bot acceda a tu documentación completa
  2. Añade analytics (dashboards con Grafana para ver uso, queries más comunes)
  3. Configura A/B testing con diferentes prompts de system
  4. Integra con CRM (HubSpot, Salesforce) para crear tickets automáticamente
  5. Explora fine-tuning de modelos para tu caso de uso específico

¿Necesitas más automatización? Consulta estos artículos:

¿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!

El Diario IA
Resumen de privacidad

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.