// Guía de n8n
Automatización n8n: la guía completa
Todo lo que necesitas para dominar n8n: qué es, cómo instalarlo, tu primer workflow, precios y comparativas. De cero a experto.
Guía completa · por Miguel López · Actualizado 7 de julio de 2026
Introducción: Por qué n8n es la Herramienta de Automatización que Necesitas en 2026
La automatización de procesos ya no es opcional para empresas y profesionales que buscan escalar. Entre todas las plataformas disponibles, n8n destaca como la solución más poderosa y flexible del mercado actual. ¿La razón? Es open-source, auto-alojable y completamente personalizable.
Mientras que herramientas como Zapier o Make te cobran por cada operación, n8n te permite ejecutar automatizaciones ilimitadas en tu propio servidor. Esto significa control total, costos predecibles y privacidad absoluta sobre tus datos.
En esta guía encontrarás todo lo necesario para dominar la automatización con n8n: desde conceptos fundamentales hasta 38 hacks profesionales que transformarán tu manera de trabajar. Si estás cansado de pagar suscripciones mensuales por automatizaciones básicas o necesitas procesos complejos que otras plataformas no pueden manejar, has llegado al lugar correcto.
Según estudios recientes de HubSpot, las empresas que implementan automatización aumentan su productividad hasta un 60%. Con n8n, ese potencial se multiplica gracias a su flexibilidad sin precedentes.
¿Qué es n8n? Fundamentos y Filosofía Open-Source
n8n es una plataforma de automatización de flujos de trabajo (workflow automation) de código abierto que te permite conectar aplicaciones, servicios y APIs sin límites. Tienes la versión ampliada —con ejemplos y comparativas— en nuestra guía sobre qué es n8n. Su nombre proviene de "nodemation" (automatización por nodos), reflejando su arquitectura basada en nodos visuales interconectados.
La Filosofía Open-Source de n8n
A diferencia de soluciones propietarias, n8n se construye sobre principios fundamentales:
- Transparencia total: El código fuente está disponible en GitHub para auditoría y contribuciones
- Control de datos: Tus automatizaciones y datos permanecen en tu infraestructura
- Personalización ilimitada: Modifica el código según tus necesidades específicas
- Comunidad activa: Miles de desarrolladores contribuyen con integraciones y mejoras
Self-Hosted vs n8n Cloud: ¿Cuál Elegir?
Existen dos formas de usar n8n, con modelos de precios de n8n muy distintos: n8n Self-Hosted (Auto-alojado)
- Instalas n8n en tu propio servidor (VPS, AWS, DigitalOcean)
- Ejecuciones ilimitadas sin costo adicional
- Control total sobre seguridad y privacidad
- Requiere conocimientos técnicos básicos
- Ideal para: Empresas con flujos intensivos, desarrolladores, proyectos sensiblesn8n Cloud
- Servicio gestionado por el equipo de n8n
- Sin mantenimiento técnico
- Pago por ejecuciones (modelo freemium)
- Actualizaciones automáticas
- Ideal para: Equipos pequeños, proyectos iniciales, quienes prefieren simplicidad
Ventajas de n8n sobre Zapier y Make
Comparado con otras plataformas populares, n8n ofrece ventajas significativas: vs Zapier:
- ✅ Costo: $0 en self-hosted vs $30-600/mes en Zapier
- ✅ Límites: Ejecuciones ilimitadas vs 750-50,000/mes
- ✅ Flexibilidad: Código JavaScript integrado vs lógica limitada
- ✅ Privacidad: Datos en tu servidor vs servidores de Zapier**n8n vs Make (antes Integromat):**
- ✅ Transparencia: Código abierto vs propietario
- ✅ Pricing: Sin límites en self-hosted vs $9-299/mes
- ✅ Customización: Modificable vs cerrado
- ✅ Comunidad: Contribuciones abiertas vs desarrollo cerrado
Casos de Uso Principales de la Automatización n8n
Las posibilidades son prácticamente infinitas, pero estos son los casos más implementados:
-
Marketing Automation: Sincronizar leads desde formularios web hacia CRM, enviar secuencias de email personalizadas, actualizar listas de contactos automáticamente
-
Gestión de Datos: Extraer información de múltiples fuentes, transformar formatos, cargar en bases de datos (ETL pipelines)
-
Atención al Cliente: Respuestas automáticas con IA, ticket routing, notificaciones a equipos
-
E-commerce: Sincronizar inventarios, procesar pedidos, gestionar devoluciones
-
Reporting Automatizado: Recopilar métricas, generar informes periódicos, enviar dashboards
-
Integración con IA: Conectar GPT-4, Claude o modelos locales para procesar texto, imágenes o datos
Arquitectura de n8n: Entendiendo el Sistema de Nodos
Para aprovechar todo el potencial de la automatización en n8n, necesitas comprender su arquitectura fundamental.
Sistema de Nodos y Workflows
Un workflow (flujo de trabajo) en n8n es una secuencia de nodos conectados que procesan datos paso a paso. Piensa en ello como una línea de producción donde cada estación realiza una tarea específica. Componentes básicos:
- Nodo: Unidad individual que realiza una acción (consultar API, transformar datos, enviar email)
- Conexión: Línea que une nodos indicando el flujo de datos
- Ejecución: Instancia única de un workflow procesando datos reales
- Credenciales: Configuraciones de autenticación almacenadas de forma segura
Tipos de Nodos: Trigger, Regular y Output
n8n clasifica los nodos en tres categorías funcionales:
1. Nodos Trigger (Disparadores)
Inician la ejecución del workflow. Sin trigger, el workflow no se ejecuta. Tipos principales:
- Webhook: Recibe peticiones HTTP externas (ideal para formularios, integraciones)
- Schedule Trigger: Ejecuta en intervalos de tiempo (cada hora, diariamente)
- Manual Trigger: Ejecución manual para testing
- Polling Trigger: Consulta periódicamente un servicio buscando cambios Ejemplo práctico: Un webhook que recibe datos cuando un usuario se registra en tu web.
2. Nodos Regular (Procesamiento) Realizan las operaciones principales del workflow:
- API Requests: HTTP Request, GraphQL
- Transformación: Set, Function, Merge, Split
- Servicios: Google Sheets, Airtable, Notion, Slack
- IA: OpenAI, Anthropic, modelos locales
- Bases de datos: PostgreSQL, MySQL, MongoDB 3. Nodos Output (Salida) Aunque técnicamente son nodos regulares, marcan el punto final del proceso:
- Enviar email (Gmail, SMTP)
- Guardar en base de datos
- Actualizar CRM
- Crear notificaciones
Expresiones y Variables en n8n
Las expresiones son el superpoder de n8n. Te permiten manipular datos dinámicamente usando JavaScript. Sintaxis básica:
{{ $json.campo }} // Accede al campo "campo" del JSON anterior
{{ $node["Nombre Nodo"].json.dato }} // Accede a datos de nodo específico
{{ new Date().toISOString() }} // JavaScript puro
Variables del sistema:
$json: Datos del nodo anterior$node: Acceso a cualquier nodo del workflow$input: Datos entrantes al nodo actual$now: Fecha/hora actual$env: Variables de entornoEjemplo real: Formatear nombre a mayúsculas
{{ $json.nombre.toUpperCase() }}
Function Nodes con JavaScript
Para lógica compleja, n8n incluye nodos Function y Code donde escribes JavaScript completo. Function Node básico:
// Filtrar items por condición
items = items.filter(item => {
return item.json.precio > 100;
});return items;
Uso avanzado:
// Transformar array de productos
const productos = $input.all();
const resultado = [];for (const producto of productos) {
resultado.push({
id: producto.json.id,
titulo: producto.json.nombre.toUpperCase(),
descuento: producto.json.precio * 0.1,
fecha_proceso: new Date().toISOString()
});
}return resultado.map(item => ({ json: item }));
Credentials y Seguridad
n8n almacena credenciales de forma cifrada en su base de datos. Nunca viajan en el workflow. Tipos de autenticación soportados:
- OAuth2 (Google, Microsoft, etc.)
- API Key
- Basic Auth
- Headers personalizados
- JWTMejores prácticas de seguridad:
- Usa variables de entorno para datos sensibles
- Limita acceso al servidor n8n con firewall
- Implementa SSL/TLS obligatorio
- Rota credenciales periódicamente
- Audita accesos en logs Para gestionar credenciales en n8n self-hosted, accede a Settings → Credentials y crea una nueva con el tipo correspondiente al servicio.
Los 38 Hacks Profesionales de Automatización n8n
Esta sección contiene técnicas avanzadas que transformarán tu productividad con n8n. Cada hack incluye explicación, caso de uso y código cuando aplica.
A) Hacks de Productividad (10 técnicas esenciales)
Hack #1: Atajos de Teclado que Multiplican tu Velocidad
Los atajos de teclado son fundamentales para trabajar rápido en n8n. Esenciales:
Ctrl/Cmd + N: Nuevo workflowCtrl/Cmd + S: Guardar workflowCtrl/Cmd + Enter: Ejecutar workflow completoCtrl/Cmd + D: Duplicar nodo seleccionadoDel/Backspace: Eliminar nodoTab: Abrir búsqueda de nodosE: Editar nodo seleccionadoA: Activar/desactivar workflowNavegación:Espacio + Drag: Mover canvasCtrl/Cmd + Scroll: Zoom in/outF: Centrar workflow en pantallaCtrl/Cmd + Click: Selección múltipleProductividad avanzada:Ctrl/Cmd + Z: DeshacerCtrl/Cmd + Shift + Z: RehacerCtrl/Cmd + C/V: Copiar/pegar nodos (incluso entre workflows)
Hack #2: Templates y Snippets Reutilizables
Crea una biblioteca personal de workflows reutilizables. Si buscas un punto de partida más rápido, en nuestra colección de plantillas de n8n tienes decenas ya listas para adaptar. Cómo implementarlo:
- Diseña workflows modulares para tareas comunes
- Expórtalos como JSON (Botón → Download)
- Guárdalos organizados por categoría en Google DriveTemplates útiles:
- Email parser + CRM insert
- Webhook receiver + data validation
- Error handler + notification
- Data transformation pipeline
- API pagination handler
Hack #3: Duplicación Inteligente de Workflows
Para crear variaciones de un workflow existente:
- Duplica el workflow completo (botón Duplicate)
- Usa etiquetas (tags) para organizar: "Producción", "Testing", "Cliente X"
- Nombra descriptivamente: "Lead Capture - Variante FB Ads" Tip profesional: Mantén un workflow "master" como plantilla y crea copias para cada cliente/proyecto.
Hack #4: Debugging Eficiente con Breakpoints
n8n permite ejecutar hasta un nodo específico. Técnica:
- Click derecho en cualquier nodo → "Execute Up To This Node"
- Revisa los datos sin ejecutar todo el workflow
- Identifica problemas en nodos específicosCuándo usarlo:
- Workflows con muchos pasos
- APIs con límites de rate
- Cuando modificas lógica en medio del flujo
Hack #5: Sticky Notes para Documentación Visual
Usa notas adhesivas (Sticky Notes) para documentar: Añadir nota:
- Click en espacio vacío del canvas
- Selecciona "Add Sticky Note"
- Escribe la explicaciónCasos de uso:
- Explicar lógica compleja
- Advertencias sobre rate limits
- Instrucciones para el equipo
- TODOs pendientes
Hack #6: Versionado con Git
Aunque n8n tiene historial interno, el versionado profesional requiere Git. Setup básico:
- Exporta workflows como JSON
- Guárdalos en repositorio Git
- Usa branches para cambios grandes
- Documenta cambios en commitsEstructura de carpetas:
/workflows
/produccion
/desarrollo
/templates
/credenciales (gitignored)
/documentacion
Hack #7: Testing Automatizado de Workflows
Crea workflows de testing que validen otros workflows. Estructura:
Trigger Schedule (diario)
→ HTTP Request (ejecuta workflow a testear)
→ Function (valida respuesta esperada)
→ IF (resultado OK o ERROR)
→ Slack notification (si error)
Hack #8: Organización con Tags y Folders
A partir de cierto volumen de workflows, la organización es crítica. Sistema recomendado:
- Por cliente: "Cliente-Amazon", "Cliente-Coca"
- Por función: "Marketing", "Ventas", "Ops"
- Por estado: "Activo", "Testing", "Deprecated" Usa múltiples tags por workflow para máxima flexibilidad.
Hack #9: Quick Access Panel Personalizado
Configura tu panel de acceso rápido con tus nodos más usados. Cómo: Settings → Node Access → Star NodesSugerencias:
- HTTP Request
- Function
- Set
- IF
- Merge
- Google Sheets
- OpenAI
Hack #10: Backup Automático en Google Drive
Evita pérdida de datos con backups automatizados. Workflow de backup:
Schedule Trigger (diario 3am)
→ n8n (Get Many Workflows)
→ Loop Over Items
→ Google Drive (Search) [busca si existe]
→ IF (found)
→ Google Drive (Update) [actualiza]
→ ELSE
→ Google Drive (Create) [crea nuevo]
Este es uno de los workflows obligatorios si usas n8n self-hosted. Un fallo de servidor puede perder todo tu trabajo.
B) Hacks de Datos (10 técnicas de transformación)
Hack #11: Merge Avanzado de Múltiples Fuentes
El nodo Merge combina datos de diferentes nodos. Modos principales:
- Append: Concatena todos los items
- Merge By Index: Combina por posición
- Merge By Key: Combina por campo común (como SQL JOIN)Ejemplo práctico - Enriquecer leads:
Trigger: New lead in HubSpot
→ Branch 1: Get company data from Clearbit
→ Branch 2: Get social profiles from Hunter.io
→ Merge By Key (email field)
→ Update HubSpot contact (datos enriquecidos)
Hack #12: Split In Batches para Procesar Grandes Volúmenes
Cuando procesas miles de registros, el nodo Split In Batches es esencial. Configuración:
- Batch Size: 100 (procesa 100 items a la vez)
- Options → Reset: Enable (para permitir re-ejecución)Caso de uso:
Google Sheets (5000 filas)
→ Split In Batches (100)
→ HTTP Request (API con limit 100/min)
→ Wait (1 minuto)
→ Loop back to Split In Batches
Hack #13: Expresiones Regex para Limpieza de Datos
Las expresiones regulares limpian y validan datos eficientemente. Extraer email de texto:
{{ $json.texto.match(/[\w.-]+@[\w.-]+\.\w+/)[0] }}
Limpiar números de teléfono:
{{ $json.telefono.replace(/\D/g, '') }}
Validar formato:
{{ /^\d{4}-\d{2}-\d{2}$/.test($json.fecha) }}
Hack #14: Function Node para Transformaciones Complejas
Cuando las expresiones no son suficientes, Function Node da control total. Calcular métricas agregadas:
const items = $input.all();
const total = items.reduce((sum, item) => sum + item.json.precio, 0);
const promedio = total / items.length;
const maximo = Math.max(...items.map(i => i.json.precio));return [{
json: {
total_ventas: total,
ticket_promedio: promedio,
venta_maxima: maximo,
cantidad_ventas: items.length
}
}];
Hack #15: Manejo de Arrays Anidados
APIs complejas devuelven arrays dentro de arrays. Usa Item Lists para aplanarlos. Problema:
{
"pedido": {
"items": [
{"producto": "A", "cantidad": 2},
{"producto": "B", "cantidad": 1}
]
}
}
Solución con Function:
const items = $json.pedido.items;
return items.map(item => ({
json: {
pedido_id: $json.pedido_id,
producto: item.producto,
cantidad: item.cantidad
}
}));
Hack #16: Date/Time Conversions Universales
Trabajar con fechas es común y problemático. Estas expresiones resuelven casos frecuentes: ISO a formato legible:
{{ new Date($json.fecha).toLocaleDateString('es-ES') }}
Calcular días entre fechas:
{{ Math.floor((new Date($json.fecha_fin) - new Date($json.fecha_inicio)) / (10006060*24)) }}
Timestamp a ISO:
{{ new Date($json.timestamp * 1000).toISOString() }}
Hack #17: Deduplicación Inteligente
Elimina duplicados basándote en campos específicos. Function Node:
const items = $input.all();
const unicos = [];
const vistos = new Set();for (const item of items) {
const key = item.json.email; // Campo único
if (!vistos.has(key)) {
vistos.add(key);
unicos.push(item);
}
}return unicos;
Hack #18: Data Validation con IF Conditionals
Valida datos antes de procesarlos para evitar errores. Estructura recomendada:
HTTP Request (recibe datos)
→ Function (validación)
→ IF (datos válidos?)
→ TRUE: Procesar normalmente
→ FALSE:
→ Set (crear log de error)
→ Slack (notificar equipo)
→ Stop Execution
Validaciones comunes:
- Email válido
- Fecha en rango correcto
- Campos requeridos presentes
- Formato de teléfono correcto
Hack #19: Lookup Tables para Enriquecimiento
Usa Google Sheets como tabla de referencia. Caso: Categorizar productos automáticamente
1. Google Sheets con columnas: [SKU, Categoría, Margen]
2. Workflow recibe pedido con SKUs
3. Loop over items:
→ Google Sheets Lookup (busca SKU)
→ Merge datos encontrados
4. Producto enriquecido con categoría y margen
Hack #20: JSON Path Queries Avanzadas
Para extraer datos de JSONs complejos, usa notación de puntos y corchetes. Acceso profundo:
{{ $json.respuesta.datos[0].usuario.perfil.email }}
Con arrays:
{{ $json.items.map(i => i.nombre).join(', ') }}
Condicional:
{{ $json.items.find(i => i.activo === true)?.nombre }}
C) Hacks de Integración (10 técnicas de conexión)
Hack #21: Webhook Security con Tokens
Protege tus webhooks de accesos no autorizados. Implementación:
- Genera token único:
openssl rand -hex 32 - Configura URL:
https://tu-n8n.com/webhook/abc123?token=TU_TOKEN - En workflow, valida token:```javascript // Function Node al inicio const tokenRecibido = $json.query.token; const tokenEsperado = 'TU_TOKEN_SECRETO';if (tokenRecibido !== tokenEsperado) { throw new Error('Token inválido'); }return [$json];
#### Hack #22: Rate Limiting para APIs Externas
Respeta límites de APIs sin ser bloqueado.
**Técnica con Wait Node:**
Split In Batches (50 requests) → HTTP Request (API call) → Wait (12 segundos) // 300 requests/hour = 1 cada 12s → Loop back
**Alternativa con Function:**
```javascript
// Implementar token bucket algorithm
const RATE_LIMIT = 100; // requests por minuto
const intervalo = 60000 / RATE_LIMIT; // ms entre requests// Espera calculada
await new Promise(resolve => setTimeout(resolve, intervalo));
Hack #23: Autenticación OAuth2 Custom
Para servicios sin nodo predefinido, configura OAuth2 manualmente. Pasos:
- Credentials → Create New → OAuth2 API
- Completa:
- Authorization URL
- Access Token URL
- Client ID
- Client Secret
- Scope
- En HTTP Request, usa credencial OAuth2 Ejemplo con LinkedIn:
Authorization URL: https://www.linkedin.com/oauth/v2/authorization
Access Token URL: https://www.linkedin.com/oauth/v2/accessToken
Scope: r_liteprofile r_emailaddress w_member_social
Hack #24: Retry Logic para APIs Inestables
Implementa reintentos automáticos ante fallos temporales. Con Error Trigger:
Workflow Principal
→ HTTP Request (puede fallar)
Error Trigger Workflow
→ IF (error type = timeout o 503)
→ Wait (30 segundos)
→ HTTP Request (retry)
→ IF (success)
→ Continue normal flow
→ ELSE
→ Slack notification (alerta equipo)
Hack #25: GraphQL Queries Optimizadas
GraphQL permite consultar exactamente los datos necesarios. HTTP Request con GraphQL:
Method: POST
URL: https://api.ejemplo.com/graphql
Body:
{
"query": "query { usuario(id: \"123\") { nombre email pedidos { id total fecha } } }"
}
Headers:
{
"Content-Type": "application/json",
"Authorization": "Bearer {{$credentials.token}}"
}
Ventaja: Una sola petición obtiene usuario y sus pedidos relacionados.
Hack #26: Pagination Automática
Maneja APIs paginadas extrayendo todos los resultados. Patrón común:
// Function Node - Loop control
const currentPage = $json.page || 1;
const totalPages = $json.total_pages || 100;if (currentPage **Workflow:**
Set (page=1) → HTTP Request (GET /api?page={{$json.page}}) → Function (check more pages?) → IF (continue?) → Set (increment page) → Loop back to HTTP Request
#### Hack #27: Webhook Response Customization
Controla exactamente qué responde tu webhook.
**Respond to Webhook Node:**
Webhook Trigger → [Tu lógica de procesamiento] → Respond to Webhook Status Code: 200 Body: { "success": true, "id": "{{$json.nuevo_id}}", "message": "Procesado correctamente" }
**Uso:** Confirmación inmediata al cliente mientras procesamiento continúa en background.
#### Hack #28: API Key Rotation Automática
Rota claves de API periódicamente por seguridad.
**Workflow de rotación:**
Schedule (mensual) → HTTP Request (genera nueva API key en servicio) → Set (guarda nueva key) → Update n8n Credential (via API de n8n) → Slack (notifica cambio completado)
#### Hack #29: Webhook Broadcasting a Múltiples Destinos
Recibe un webhook y distribuye a varios servicios.
**Patrón:**
Webhook Trigger → Set (normaliza datos) → Split branches: Branch 1: → Airtable (Create Record) Branch 2: → Slack (Send Message) Branch 3: → Email (Send) Branch 4: → HTTP Request (otro webhook)
Todas las ramas se ejecutan en paralelo.
#### Hack #30: CORS Handling en Webhooks
Permite que tu frontend llame webhooks n8n directamente.
**Configuración en Respond to Webhook:**
Headers: { "Access-Control-Allow-Origin": "*", "Access-Control-Allow-Methods": "POST, GET, OPTIONS", "Access-Control-Allow-Headers": "Content-Type" }
**Importante:** En producción, reemplaza `*` con tu dominio específico.
### D) Hacks de Performance (8 técnicas de optimización)
#### Hack #31: Batch Processing para Reducir Ejecuciones
Agrupa operaciones en lotes en lugar de ejecutar por cada item.
**Ejemplo - Insertar en base de datos:**
// MAL: 1000 items = 1000 inserts Loop 1000 items → PostgreSQL Insert (1 por vez)// BIEN: 1000 items = 10 inserts Split In Batches (100) → Function (crear array de items) → PostgreSQL Bulk Insert (100 a la vez)
**Resultado:** 10x menos ejecuciones, 10x más rápido.
#### Hack #32: Caching con Redis
Almacena resultados temporalmente para evitar llamadas repetidas.
**Setup:**
1. Instala Redis en tu servidor n8n
2. Credencial Redis en n8n**Workflow con cache:**
HTTP Request (check cache) → IF (cache hit?) → Return cached data → ELSE → API Request (fetch fresh data) → Redis Set (cache for 1 hour) → Return data
#### Hack #33: Async Execution con Queue System
Para workflows largos, usa sistema de colas.
**Arquitectura:**
Webhook (recibe request) → PostgreSQL Insert (queue table) → Respond immediately (200 OK)Workflow separado: Schedule (cada 5 min) → PostgreSQL Select (pending items) → Loop & Process → PostgreSQL Update (mark processed)
Ventaja: Respuesta instantánea al usuario, procesamiento en background.
#### Hack #34: Execution Timeout Management
Configura timeouts apropiados para evitar ejecuciones colgadas.
**En Settings → Workflows:**
- Default timeout: 120 segundos
- Max timeout: 300 segundos**Por nodo HTTP Request:**
Options → Timeout: 30000 (30 segundos)
**Mejores prácticas:**
- APIs rápidas: 10-30s
- APIs lentas: 60-120s
- Webhooks: 5-10s (responder rápido)
#### Hack #35: Minimize Data Transfer Between Nodes
Pasa solo datos necesarios entre nodos.
**MAL:**
```javascript
// Pasa objeto gigante completo
return [{ json: $json }]; // 500KB
BIEN:
// Extrae solo campos necesarios
return [{
json: {
id: $json.id,
email: $json.email
}
}]; // 1KB
Reduce memoria y acelera ejecuciones.
Hack #36: Database Indexing para Lookups
Si consultas frecuentemente campos específicos, crea índices. PostgreSQL ejemplo:
CREATE INDEX idx_email ON usuarios(email);
CREATE INDEX idx_fecha ON pedidos(fecha_creacion);
Convierte búsquedas de segundos a milisegundos.
Hack #37: Lazy Loading de Datos Grandes
No cargues todo si no lo necesitas. Pagination en lugar de "get all":
// MAL:
HTTP Request → Get 10,000 registros// BIEN:
HTTP Request → Get 100 registros (página 1)
→ Process
→ IF needed, get next page
Hack #38: Monitoring y Alertas de Performance
Detecta workflows lentos proactivamente. Workflow de monitoreo:
Schedule (diario)
→ n8n API (Get Executions)
→ Function (filtrar ejecuciones >2 min)
→ IF (hay lentas?)
→ Slack (alerta equipo)
→ Google Sheets (log para análisis)
E) Hacks Avanzados (8 técnicas profesionales)
Hack #39: RAG (Retrieval Augmented Generation) con n8n
Implementa sistemas de IA que consultan tus documentos propios. Arquitectura completa:
1. CARGA DE DOCUMENTOS:
Google Drive (PDFs)
→ Split Text (chunks de 1000 chars)
→ OpenAI Embeddings
→ Pinecone Insert (base vectorial)2. CONSULTA:
Webhook (pregunta usuario)
→ OpenAI Embeddings (pregunta)
→ Pinecone Search (documentos relevantes)
→ Merge (contexto + pregunta)
→ OpenAI GPT-4 (respuesta basada en docs)
→ Respond to Webhook
Caso de uso real: Chatbot que responde basándose en manuales internos de empresa.
Hack #40: Agents de IA con Tool Calling
Los agentes de IA pueden decidir qué herramientas usar dinámicamente. Setup con OpenAI:
Webhook (input usuario)
→ OpenAI Agent
Tools disponibles:
- Google Search
- Calculator
- Database Query
- Send Email
→ Agent decide qué tool usar
→ Ejecuta tool
→ Agent genera respuesta final
Hack #41: Workflow Recursivo para Procesamiento Profundo
Workflows que se llaman a sí mismos para estructuras anidadas. Ejemplo - Procesar carpetas recursivamente:
Trigger (carpeta inicial)
→ Google Drive List (archivos y subcarpetas)
→ Split:
Branch 1: Process files
Branch 2: For each subfolder
→ HTTP Request (ejecuta este mismo workflow con subcarpeta)
Hack #42: State Management con PostgreSQL
Mantén estado entre ejecuciones de workflow. Tabla de estado:
CREATE TABLE workflow_state (
workflow_id VARCHAR,
key VARCHAR,
value JSONB,
updated_at TIMESTAMP
);
En workflow:
// Leer estado
PostgreSQL → SELECT value WHERE workflow_id='lead-capture'// Procesar con estado previo
Function (lógica usando estado)// Guardar nuevo estado
PostgreSQL → UPDATE value SET {...}
Hack #43: A/B Testing de Workflows
Compara diferentes versiones de automatizaciones. Implementación:
Webhook
→ Function (random 0-100)
→ IF (
Analiza cuál versión performa mejor.
#### Hack #44: Multi-tenant Architecture
Gestiona múltiples clientes en una sola instancia n8n.
**Pattern:**
Webhook (include client_id in URL/header) → Set (extract client_id) → PostgreSQL (get client config) → Function (apply client-specific logic) → Process with client credentials
Cada cliente tiene sus propias credenciales y configuraciones.
#### Hack #45: Integration Testing Pipeline
Crea suite de tests que se ejecute automáticamente.
**Estructura:**
Schedule (after deploy) → Loop test scenarios: → Execute workflow with test data → Validate output → IF (fail) → Rollback deployment → Slack alert → ELSE → Continue next test → Report results
#### Hack #46: Workflow Orchestration Complex
Coordina múltiples workflows interdependientes.
**Orquestador maestro:**
Schedule → Execute Workflow 1 (data extraction) → Wait for completion → Execute Workflow 2 (transformation) → Wait for completion → Execute Workflow 3 (load to warehouse) → Slack (pipeline completado)
Gestiona dependencias y errores centralizadamente.
[Para profundizar en técnicas avanzadas de automatización, consulta nuestra guía sobre [integración de IA en procesos empresariales](/automatizacion-con-ia/casos-uso)]
## Instalación y Setup de n8n: Guía Paso a Paso
### Instalación con Docker (Método Recomendado)
Docker es la forma más sencilla y confiable de instalar n8n. Aquí tienes el proceso resumido; si prefieres el paso a paso ampliado con troubleshooting incluido, consulta nuestra [guía de instalación de n8n](/herramientas-automatizacion/n8n/instalar).
**Requisitos previos:**
- Servidor VPS (Ubuntu 20.04 o superior)
- 2 GB RAM mínimo (recomendado 4 GB)
- Docker y Docker Compose instalados**Paso 1: Instalar Docker**
```bash
# Actualizar sistema
sudo apt update && sudo apt upgrade -y
# Instalar Docker
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh
# Instalar Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
Paso 2: Crear docker-compose.yml
version: '3.8'services:
n8n:
image: n8nio/n8n
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=tu-dominio.com
- WEBHOOK_URL=https://tu-dominio.com/
- GENERIC_TIMEZONE=Europe/Madrid
- N8N_EDITOR_BASE_URL=https://tu-dominio.com/
volumes:
- n8n_data:/home/node/.n8nvolumes:
n8n_data:
Paso 3: Iniciar n8n
docker-compose up -d
Accede a tu n8n en http://tu-servidor:5678. A partir de aquí, sigue nuestro tutorial de n8n para construir tu primer workflow.
Deployment en Cloud Providers
Opción 1: DigitalOcean (Recomendado)
Ventajas:
- Pricing predecible desde $6/mes
- Interfaz intuitiva
- Documentación excelenteSetup:
- Crea Droplet Ubuntu 20.04
- Selecciona mínimo $12/mes (2 GB RAM)
- SSH al servidor
- Sigue instalación con Docker anterior
Opción 2: AWS EC2
Ventajas:
- Escalabilidad automática
- Integración con servicios AWSSetup básico:
- Lanza instancia t3.small (2 vCPU, 2 GB RAM)
- Security Group: abre puerto 5678 y 443
- Conecta por SSH
- Instala Docker y n8n
Opción 3: Hetzner Cloud
Ventajas:
- Más económico (€4.15/mes)
- Servidores en EuropaSetup:
- Crea servidor CX21 (2 vCPU, 4 GB RAM)
- SSH y sigue instalación Docker
Configuración de Base de Datos PostgreSQL
Por defecto n8n usa SQLite, pero PostgreSQL es mejor para producción. docker-compose.yml con PostgreSQL:
version: '3.8'services:
postgres:
image: postgres:15
restart: always
environment:
- POSTGRES_USER=n8n
- POSTGRES_PASSWORD=tu_password
- POSTGRES_DB=n8n
volumes:
- postgres_data:/var/lib/postgresql/data n8n:
image: n8nio/n8n
restart: always
ports:
- "5678:5678"
environment:
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_PORT=5432
- DB_POSTGRESDB_DATABASE=n8n
- DB_POSTGRESDB_USER=n8n
- DB_POSTGRESDB_PASSWORD=tu_password
volumes:
- n8n_data:/home/node/.n8n
depends_on:
- postgresvolumes:
postgres_data:
n8n_data:
SSL/TLS y Seguridad con Traefik
Para HTTPS automático, usa Traefik como reverse proxy. docker-compose.yml completo con Traefik:
version: '3.8'services:
traefik:
image: traefik:v2.10
restart: always
command:
- "--api.insecure=true"
- "--providers.docker=true"
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
- "--certificatesresolvers.myresolver.acme.email=tu@email.com"
- "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
- "--certificatesresolvers.myresolver.acme.httpchallenge.entrypoint=web"
ports:
- "80:80"
- "443:443"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro"
- "letsencrypt:/letsencrypt" n8n:
image: n8nio/n8n
restart: always
environment:
- N8N_HOST=n8n.tu-dominio.com
- WEBHOOK_URL=https://n8n.tu-dominio.com/
volumes:
- n8n_data:/home/node/.n8n
labels:
- "traefik.enable=true"
- "traefik.http.routers.n8n.rule=Host(`n8n.tu-dominio.com`)"
- "traefik.http.routers.n8n.entrypoints=websecure"
- "traefik.http.routers.n8n.tls.certresolver=myresolver"volumes:
letsencrypt:
n8n_data:
Configuración de Backups Automáticos
Script de backup (backup.sh):
#!/bin/bash
# Variables
BACKUP_DIR="/backups/n8n"
DATE=$(date +%Y%m%d_%H%M%S)
CONTAINER_NAME="n8n"
# Crear directorio si no existe
mkdir -p $BACKUP_DIR
# Backup de volumen Docker
docker run --rm \
-v n8n_data:/source \
-v $BACKUP_DIR:/backup \
alpine tar czf /backup/n8n_backup_$DATE.tar.gz -C /source .
# Backup de base de datos PostgreSQL
docker exec postgres pg_dump -U n8n n8n > $BACKUP_DIR/db_backup_$DATE.sql
# Eliminar backups antiguos (>30 días)
find $BACKUP_DIR -name "*.tar.gz" -mtime +30 -delete
find $BACKUP_DIR -name "*.sql" -mtime +30 -deleteecho "Backup completado: $DATE"
Automatizar con cron:
# Editar crontab
crontab -e
# Añadir backup diario a las 3am
0 3 * /root/backup.sh >> /var/log/n8n-backup.log 2>&1
Updates y Mantenimiento
Actualizar n8n:
# Pull última imagen
docker-compose pull n8n
# Reiniciar con nueva imagen
docker-compose up -d
Monitoreo de recursos:
# Ver uso de recursos
docker stats n8n
# Ver logs
docker-compose logs -f n8n
Health checks: Añade health check al docker-compose:
n8n:
healthcheck:
test: ["CMD", "wget", "--spider", "http://localhost:5678/healthz"]
interval: 30s
timeout: 10s
retries: 3
Tutoriales Prácticos: Automatizaciones Completas
Tutorial 1: Sistema Completo de Captura y Gestión de Leads
Objetivo: Automatizar completamente el proceso desde que un lead llega hasta su cualificación y asignación. Componentes:
- Formulario web → Webhook n8n
- Validación y enriquecimiento de datos
- Scoring automático
- Inserción en CRM
- Notificación al equipo comercial Workflow completo:
Webhook Trigger (POST /webhook/lead-capture)
↓
Function Node - Validación de datos
{
const email = $json.email;
const nombre = $json.nombre;
if (!email || !/\S+@\S+\.\S+/.test(email)) {
throw new Error('Email inválido');
}
return [{ json: $json }];
}
↓
HTTP Request - Enrichment con Clearbit
URL: https://person.clearbit.com/v2/combined/find?email={{$json.email}}
Headers: Authorization: Bearer YOUR_API_KEY
↓
Function Node - Calcular Lead Score
{
let score = 0;
// Scoring por empresa
if ($json.employment?.role?.includes('director')) score += 30;
if ($json.employment?.role?.includes('manager')) score += 20;
// Scoring por tamaño empresa
const employees = $json.employment?.employees;
if (employees > 1000) score += 30;
else if (employees > 100) score += 20;
// Scoring por industria
const industrias_target = ['software', 'technology', 'saas'];
if (industrias_target.some(i => $json.employment?.industry?.toLowerCase().includes(i))) {
score += 25;
}
return [{
json: {
...$json,
lead_score: score,
prioridad: score > 70 ? 'Alta' : score > 40 ? 'Media' : 'Baja'
}
}];
}
↓
HubSpot - Create or Update Contact
Properties:
- email: {{$json.email}}
- firstname: {{$json.nombre}}
- company: {{$json.employment.name}}
- jobtitle: {{$json.employment.role}}
- hs_lead_status: {{$json.prioridad}}
↓
IF Node - ¿Lead score > 70?
↓ (TRUE)
Slack - Notify Sales Team
Channel: #leads-calientes
Message:
🔥 **Lead HOT detectado**
Nombre: {{$json.nombre}}
Empresa: {{$json.employment.name}}
Cargo: {{$json.employment.role}}
Score: {{$json.lead_score}}
Email: {{$json.email}}
[Ver en HubSpot](link)
↓ (FALSE)
Gmail - Add to Nurturing Sequence
To: {{$json.email}}
Subject: Bienvenido a [Tu Empresa]
Template: nurturing_sequence_01
Código completo para copiar: El workflow JSON completo estaría disponible para importar directamente en n8n.
Tutorial 2: Asistente de IA con GPT-4 y Memoria de Conversación
Objetivo: Chatbot inteligente que recuerda conversaciones previas y accede a base de conocimiento.
Arquitectura:
Webhook (mensaje usuario)
↓
PostgreSQL - Buscar historial conversación
SELECT messages FROM conversations
WHERE user_id = '{{$json.user_id}}'
ORDER BY created_at DESC LIMIT 10
↓
Function - Preparar contexto
{
const historial = $node["PostgreSQL"].json.messages || [];
const mensajeActual = $json.message;
const contexto = historial.map(m =>
`${m.role}: ${m.content}`
).join('\n');
return [{
json: {
conversacion_previa: contexto,
mensaje_nuevo: mensajeActual,
user_id: $json.user_id
}
}];
}
↓
OpenAI GPT-4
Model: gpt-4-turbo-preview
Messages:
- System: "Eres un asistente útil de [Empresa]. Usa el contexto de conversación previa para mantener coherencia."
- User: "Contexto: {{$json.conversacion_previa}}\n\nNuevo mensaje: {{$json.mensaje_nuevo}}"
Temperature: 0.7
Max Tokens: 500
↓
Function - Formatear respuesta
{
const respuesta = $json.choices[0].message.content;
return [{
json: {
user_id: $node["Webhook"].json.user_id,
mensaje_usuario: $node["Webhook"].json.message,
respuesta_ia: respuesta,
timestamp: new Date().toISOString()
}
}];
}
↓
PostgreSQL - Guardar en historial
INSERT INTO conversations (user_id, role, content, created_at)
VALUES
('{{$json.user_id}}', 'user', '{{$json.mensaje_usuario}}', '{{$json.timestamp}}'),
('{{$json.user_id}}', 'assistant', '{{$json.respuesta_ia}}', '{{$json.timestamp}}')
↓
Respond to Webhook
Body:
{
"response": "{{$json.respuesta_ia}}",
"timestamp": "{{$json.timestamp}}"
}
Mejora con RAG (documentos propios):
Añade antes del llamado a GPT-4:
OpenAI Embeddings (pregunta usuario)
↓
Pinecone Vector Search
Index: knowledge-base
Query: {{$json.embedding}}
Top K: 3
↓
Function - Añadir contexto documental
{
const documentosRelevantes = $json.matches
.map(m => m.metadata.text)
.join('\n\n');
return [{
json: {
...$node["Function"].json,
contexto_docs: documentosRelevantes
}
}];
}
```Actualiza el prompt de GPT-4:
"Contexto de documentos: {{$json.contexto_docs}} Conversación previa: {{$json.conversacion_previa}} Pregunta: {{$json.mensaje_nuevo}}Responde basándote PRINCIPALMENTE en el contexto de documentos proporcionado."
### Tutorial 3: Web Scraping Inteligente con Rotación de Proxies
**Objetivo:** Extraer datos de sitios web de forma confiable y sin ser bloqueado.
Schedule Trigger (diario 6am) ↓ HTTP Request - Obtener lista de URLs a scrapear URL: {{$env.INTERNAL_API}}/urls-pendientes ↓ Split In Batches (10) ↓ Function - Seleccionar proxy rotativo { const proxies = [ 'http://proxy1.ejemplo.com:8080', 'http://proxy2.ejemplo.com:8080', 'http://proxy3.ejemplo.com:8080' ];
const randomProxy = proxies[Math.floor(Math.random() * proxies.length)];
return [{ json: { url: $json.url, proxy: randomProxy } }]; } ↓ HTTP Request - Scraping URL: {{$json.url}} Proxy: {{$json.proxy}} Headers: User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)... Accept-Language: es-ES,es;q=0.9 ↓ HTML Extract - Extraer datos Selector CSS:
- Título: h1.product-title
- Precio: span.price
- Descripción: div.description
- Imagen: img.main-image @src ↓ Function - Limpiar y estructurar datos { return [{ json: { url: $node["Split In Batches"].json.url, titulo: $json.titulo?.trim(), precio: parseFloat($json.precio.replace(/[^0-9.]/g, '')), descripcion: $json.descripcion?.trim(), imagen_url: $json.imagen, fecha_scraping: new Date().toISOString() } }]; } ↓ PostgreSQL - Insert INSERT INTO productos_scraped (url, titulo, precio, descripcion, imagen_url, fecha_scraping) VALUES (...) ↓ Wait (5 segundos) // Evitar rate limiting ↓ Loop back to Split In Batches
**Manejo de errores:**
Error Trigger (captura errores del workflow principal) ↓ IF - ¿Error de bloqueo? (403, 429) ↓ (TRUE) Wait (60 segundos) → Retry con proxy diferente ↓ (FALSE) Slack Notification (alerta equipo)
### Tutorial 4: Pipeline ETL Completo (Extract, Transform, Load)
**Objetivo:** Consolidar datos de múltiples fuentes en data warehouse.
Schedule Trigger (cada 6 horas) ↓ [EXTRACT PHASE] ↓ Branch 1: Google Sheets - Ventas del día Branch 2: PostgreSQL - Datos de usuarios Branch 3: HTTP Request - API de inventario Branch 4: Airtable - Campañas marketing ↓ Merge (Append all sources) ↓ [TRANSFORM PHASE] ↓ Function - Normalización de datos { const items = $input.all(); const normalized = [];
for (const item of items) { const source = item.json.source; let record = {};
// Mapear campos según origen
if (source === 'google_sheets') {
record = {
id: item.json.id,
fecha: new Date(item.json.fecha).toISOString(),
tipo: 'venta',
valor: parseFloat(item.json.total),
cliente_id: item.json.cliente_id
};
} else if (source === 'postgres') {
record = {
id: item.json.user_id,
fecha: item.json.created_at,
tipo: 'registro',
valor: 0,
cliente_id: item.json.user_id
};
}
// ... más transformaciones
normalized.push({ json: record });
}
return normalized; } ↓ Function - Calcular métricas agregadas { const items = $input.all();
// Agrupar por fecha const porFecha = {}; items.forEach(item => { const fecha = item.json.fecha.split('T')[0]; if (!porFecha[fecha]) { porFecha[fecha] = { ventas: 0, registros: 0, total: 0 }; }
if (item.json.tipo === 'venta') {
porFecha[fecha].ventas++;
porFecha[fecha].total += item.json.valor;
} else if (item.json.tipo === 'registro') {
porFecha[fecha].registros++;
}
});
// Convertir a array return Object.entries(porFecha).map(([fecha, datos]) => ({ json: { fecha, ...datos } })); } ↓ [LOAD PHASE] ↓ PostgreSQL - Upsert a Data Warehouse INSERT INTO analytics.daily_metrics (fecha, ventas, registros, total) VALUES (...) ON CONFLICT (fecha) DO UPDATE SET ventas = EXCLUDED.ventas, registros = EXCLUDED.registros, total = EXCLUDED.total ↓ HTTP Request - Actualizar dashboard URL: https://metabase.empresa.com/api/refresh Method: POST Body: { "dashboard_id": 42 } ↓ Slack - Notificar completado Channel: #data-pipeline Message: ✅ ETL completado. {{$json.ventas}} ventas procesadas.
Estos tutoriales proporcionan ejemplos completos y accionables que puedes implementar inmediatamente.
## Comparativa Técnica: n8n vs Alternativas
### n8n vs Zapier: Análisis Detallado
| Característica | n8n Self-Hosted | n8n Cloud | Zapier |
|---------------|-----------------|-----------|---------|
| **Precio mensual** | $0-50 (servidor) | $0-200 | $30-600+ |
| **Ejecuciones/mes** | Ilimitadas | 2,500-1M | 750-50,000 |
| **Integraciones** | 400+ | 400+ | 6,000+ |
| **Código custom** | ✅ JavaScript | ✅ JavaScript | ❌ Limitado |
| **Self-hosting** | ✅ Sí | ❌ No | ❌ No |
| **Control de datos** | ✅ Total | ⚠️ Parcial | ❌ Ninguno |
| **Curva aprendizaje** | Media-Alta | Baja | Muy Baja |
| **Escalabilidad** | ✅ Ilimitada | ⚠️ Por plan | ⚠️ Por plan |
| **API access** | ✅ Completo | ✅ Completo | ⚠️ Limitado |
| **Comunidad** | ✅ Activa | ✅ Activa | ⚠️ Foro oficial |**Cuándo elegir n8n:**
- Necesitas ejecutar más de 10,000 automatizaciones/mes
- Requieres personalización profunda con código
- Trabajas con datos sensibles (salud, finanzas)
- Tienes capacidad técnica para gestionar servidor
- Presupuesto limitado a largo plazo**Cuándo elegir Zapier:**
- Necesitas integraciones específicas no en n8n
- Prefieres simplicidad absoluta sin configuración
- Volumen bajo de automatizaciones (
### n8n vs Make: ¿Cuál Usar?
| Aspecto | n8n | Make |
|---------|-----|------|
| **Modelo pricing** | Ejecuciones ilimitadas (self-hosted) | $9-299/mes por operaciones |
| **Visual builder** | Flujo lineal principalmente | Flujo visual bidimensional |
| **Complejidad lógica** | JavaScript nativo | Visual conditions |
| **Error handling** | Manual + triggers | Avanzado visual |
| **Debugging** | Logs detallados | Visual step-by-step |
| **Templates** | Comunidad | Oficial + comunidad |
**Ejemplo comparativo - Mismo workflow:**
**n8n:**
- 5 nodos principales
- 2 Function nodes con JavaScript
- Configuración: 20 minutos
- Costo mensual: $0 (self-hosted)**Make:**
- 7 módulos visuales
- 4 routers + filters
- Configuración: 15 minutos
- Costo mensual: $29 (10,000 ops)**Recomendación:**
- **n8n**: Proyectos técnicos, alto volumen, necesitas código
- **Make**: Equipos no técnicos, workflows complejos visuales, presupuesto moderado
### n8n Cloud vs n8n Self-Hosted
**n8n Cloud - Ideal para:**
- Startups sin equipo DevOps
- Proyectos en fase de validación
- Equipos pequeños (**Pros:**
- Setup en 5 minutos
- Actualizaciones automáticas
- Soporte oficial
- Alta disponibilidad garantizada**Contras:**
- Límite de ejecuciones
- Costo escalable con uso
- Menor control**n8n Self-Hosted - Ideal para:**
- Empresas con requisitos de compliance
- Alto volumen de automatizaciones
- Necesidad de personalización profunda
- Presupuesto IT disponible**Pros:**
- Ejecuciones ilimitadas
- Control total de datos
- Personalización completa
- Costo fijo predecible**Contras:**
- Requiere conocimientos técnicos
- Mantenimiento propio
- Responsabilidad de backups
**Costo comparativo 12 meses:**
n8n Cloud (plan Pro):
- $168/mes × 12 = $2,016N8N Self-Hosted:
- VPS DigitalOcean: $12/mes × 12 = $144
- Dominio: $12/año
- Tiempo setup: ~4 horas (one-time)
- **Total: $156/año**
Ahorro: **92% menos** con self-hosted.
### Tabla Comparativa Completa
| Criterio | n8n Self-Hosted | n8n Cloud | Zapier | Make | Integromat |
|----------|----------------|-----------|--------|------|------------|
| Ejecuciones/mes | ∞ | 2.5K-1M | 750-50K | 1K-500K | Discontinued |
| Precio/mes | $0-50 | $0-200 | $30-600 | $9-299 | - |
| Integraciones | 400+ | 400+ | 6,000+ | 1,500+ | - |
| Código custom | ✅✅✅ | ✅✅✅ | ⚠️ | ⚠️ | - |
| Visual builder | ✅✅ | ✅✅ | ✅✅✅ | ✅✅✅ | - |
| API access | ✅✅✅ | ✅✅✅ | ⚠️ | ✅✅ | - |
| Self-hosting | ✅✅✅ | ❌ | ❌ | ❌ | - |
| Open-source | ✅✅✅ | ⚠️ | ❌ | ❌ | - |
| Curva aprendizaje | Media | Baja | Baja | Media
