n8n para principiantes: tu primer flujo de automatización, paso a paso
Lo Que Dominarás en Este Tutorial
- Entender el modelo de n8n: disparadores, nodos, elementos y expresiones.
- Construir un flujo de 5 nodos: programar, obtener, transformar, decidir, avisar.
- Importar un flujo como JSON y probar las dos ramas a propósito.
1. Qué es n8n, en palabras simples
n8n es una herramienta de automatización de flujos: dibujas una cadena de pasos —un disparador y luego nodos que obtienen, transforman, deciden y envían— y n8n la ejecuta según un horario o bajo demanda. Cada nodo hace una cosa pequeña y entrega su salida, como elementos JSON, al siguiente. Si encadenaste herramientas en Zapier o Make, el modelo mental es el mismo; n8n se diferencia en que puedes alojarlo tú, en que expone el JSON crudo entre nodos en vez de esconderlo, y en que es una base común para agentes de IA: un nodo de «llamar a un LLM» encaja en la cadena como cualquier otro.
Esta guía construye un flujo completo y real —pequeño, pero con los tipos de nodo que usa casi toda automatización. También es la rampa de entrada a la serie de ingresos con agentes IA: sus agentes de ventas y recepción son, mecánicamente, flujos como este con un LLM en el medio.
2. Elige tu instalación: nube o autoalojado
- n8n Cloud es la versión alojada por el equipo de n8n: te registras y construyes en minutos; actualizaciones, disponibilidad y copias son problema suyo. Es un producto de suscripción de pago. Para un primer flujo y para demos con clientes, es el comienzo pragmático.
- Autoalojarlo significa correrlo por tu cuenta —habitualmente con Docker en un servidor pequeño. El software puede ejecutarse sin coste de licencia para la mayoría de los usos personales e internos bajo su Licencia de Uso Sostenible; tus costes son el servidor y tu mantenimiento: actualizaciones, copias y arreglarlo cuando se rompa a las 3 a. m.
En ambos casos el flujo de abajo es idéntico, y los flujos se exportan e importan como JSON entre uno y otro: nada te encierra en uno.
3. Construye el flujo, nodo a nodo
El trabajo: cada hora, obtener un registro de una API pública de pruebas, construir el texto del aviso, comprobar si la tarea sigue pendiente y, solo entonces, enviar un mensaje de Telegram. (¿Sin Telegram? Cambia el último nodo por correo; todo lo anterior queda idéntico.)
Nodo 1 — Schedule Trigger (disparador por horario)
Añade un nodo Schedule Trigger. Ajusta la regla a un intervalo de 1 hora, como en el JSON terminado de abajo (en el editor puedes elegir igualmente «cada día a las 08:00»). Ajusta tu zona horaria en la configuración del flujo: el disparador sigue la zona del flujo, no la de tu portátil. Este nodo emite un elemento con la marca de tiempo actual; su único trabajo es arrancar la cadena.
Nodo 2 — HTTP Request
Añade un nodo HTTP Request y conéctalo al disparador. Método: GET. URL: https://jsonplaceholder.typicode.com/todos/1 — un endpoint público de pruebas que devuelve un registro JSON pequeño (una tarea con título y marca de completada). Sin autenticación. Ejecútalo una vez y mira el panel de salida: verás el JSON con campos como userId, id, title y completed. Leer esa salida antes de construir el siguiente nodo es el hábito que hace fácil todo lo demás.
Nodo 3 — Edit Fields (Set)
Añade un nodo Edit Fields (en versiones anteriores, simplemente «Set»). Crea una asignación: reminderText con la expresión =Task #{{$json.id}}: {{$json.title}} (done: {{$json.completed}}). El $json se refiere al elemento actual y el prefijo = marca el valor como expresión, no como texto literal. Activa «incluir los demás campos» para que completed sobreviva hasta el nodo IF: el aviso se construye aquí; la decisión usa el campo original.
Nodo 4 — IF
Añade un nodo IF con una condición booleana: completed es verdadero. IF tiene dos salidas: verdadero y falso. Conectamos hacia adelante la salida falsa: si la tarea ya está completada no hay nada que recordar y el flujo termina sin enviar nada; si sigue pendiente, el elemento avanza al aviso. Qué rama continúa es decisión tuya; no la dejes nunca al azar.
Nodo 5 — Telegram (o correo)
Añade un nodo Telegram en la salida falsa del nodo IF. Crea una credencial con un token de bot (el BotFather de Telegram crea bots: es la ruta estándar), ajusta el ID del chat y pon el texto en ={{$json.reminderText}}. La primera vez, envíate el mensaje a ti: esta es una plantilla, y avisarte a ti es la forma de probarla.
Conecta los nodos en orden —disparador → HTTP Request → Edit Fields → IF → Telegram—, guarda, y ya tienes el flujo. La siguiente sección es el mismo flujo como JSON portable.
4. El mismo flujo como JSON
Todo flujo se exporta a JSON (menú → Download) y se importa del mismo modo. Pega esto en un flujo en blanco con Import from File o Import from URL/Clipboard, sustituye YOUR_CHAT_ID y conecta tu credencial de Telegram, y tendrás la sección 3 sin hacer clic. Léelo una vez contra la lista de nodos: nodos, parámetros y el objeto de conexiones que los enlaza.
{
"name": "My First Automation - Task Reminder",
"nodes": [
{
"parameters": { "rule": { "interval": [ { "field": "hours", "hoursInterval": 1 } ] } },
"name": "Every Hour",
"type": "n8n-nodes-base.scheduleTrigger",
"typeVersion": 1.2,
"position": [240, 300]
},
{
"parameters": { "url": "https://jsonplaceholder.typicode.com/todos/1", "options": {} },
"name": "Fetch Task",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [460, 300]
},
{
"parameters": { "assignments": { "assignments": [
{ "id": "a1", "name": "reminderText",
"value": "=Task #{{$json.id}}: {{$json.title}} (done: {{$json.completed}})",
"type": "string" } ] }, "includeOtherFields": true, "options": {} },
"name": "Build Message",
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [680, 300]
},
{
"parameters": { "conditions": { "options": { "caseSensitive": true },
"conditions": [ { "id": "c1", "leftValue": "={{$json.completed}}",
"rightValue": true, "operator": { "type": "boolean", "operation": "true", "singleValue": true } } ],
"combinator": "and" } },
"name": "Already Done?",
"type": "n8n-nodes-base.if",
"typeVersion": 2.2,
"position": [900, 300]
},
{
"parameters": { "chatId": "YOUR_CHAT_ID",
"text": "={{$json.reminderText}}", "additionalFields": {} },
"name": "Send Reminder",
"type": "n8n-nodes-base.telegram",
"typeVersion": 1.2,
"position": [1120, 220]
}
],
"connections": {
"Every Hour": { "main": [ [ { "node": "Fetch Task", "type": "main", "index": 0 } ] ] },
"Fetch Task": { "main": [ [ { "node": "Build Message", "type": "main", "index": 0 } ] ] },
"Build Message": { "main": [ [ { "node": "Already Done?", "type": "main", "index": 0 } ] ] },
"Already Done?": { "main": [ [], [ { "node": "Send Reminder", "type": "main", "index": 0 } ] ] }
},
"settings": {},
"staticData": null
}
5. Prueba y depura en serio
- Ejecuta nodo a nodo. El «Execute Step» del editor en cada nodo muestra su entrada y salida reales. Casi toda la confusión de principiante es un campo que nunca estuvo ahí: visible al instante en el panel de salida.
- Fija los datos mientras construyes. Fija (pin) la salida del HTTP Request: los nodos siguientes reutilizarán ese elemento mientras iteras, en lugar de volver a obtenerlo en cada prueba.
- Lee las ejecuciones, no las sensaciones. La lista de Ejecuciones muestra cada corrida, qué nodo falló y con qué entrada: un nodo en rojo más su entrada explican casi cualquier error.
- Prueba la otra rama. Fuerza una corrida con
completeden verdadero y confirma que no llega ningún mensaje. Un flujo que nunca has visto saltar correctamente es un flujo que todavía no entiendes. - Activa con intención. Un flujo solo corre con su disparador cuando está activo: las pruebas usan ejecución manual; producción significa pulsar Active — y acordarte de que lo hiciste.
6. Errores de principiante que vale la pena saltarse
- Zona horaria equivocada. Los horarios siguen la zona horaria configurada en el flujo. Ajústala una vez, en Configuración, antes de preguntarte por qué «las 8 a. m.» se dispararon a la hora de comer.
- Secretos pegados en los nodos. Las claves y tokens van en las Credenciales, que n8n cifra y reutiliza — nunca en campos de nodos, desde donde se filtran a cada exportación JSON (la de la sección 4 referencia una credencial, no el token).
- Expresiones escritas como texto. Sin el
=inicial,{{ $json.title }}se envía literalmente, llaves incluidas. La mitad de los «n8n está roto» son esto. - Sin ruta de fallo. Los flujos reales añaden un flujo de error o al menos una rama de aviso para cuando la llamada HTTP falle. Añádela el día en que el flujo empiece a importar, no tras su primer fallo silencioso.
7. A dónde ir después
Sustituye la API de pruebas por algo que te importe —un feed, un formulario, los pedidos de una tienda— y este esqueleto se convierte en una automatización real. Desde aquí, Agentes de IA con n8n añade nodos de IA, patrones de agente y el lado comercial de vender automatizaciones. Y en la serie de ingresos con agentes IA, la guía del agente de ventas muestra esta estructura sosteniendo un flujo en vivo.