Project Management con Spec Driven DevelopmentBeta

0%
Bloque Técnico-Operativo

Módulo 10

n8n Self-Hosted

4hn8nDockerPostgreSQLSlack API

Workflow de enriquecimiento de leads con n8n en Docker Compose. Conexión con CRM, Slack, Google Sheets y APIs externas.

Recursos descargables

Docker Compose — n8n Self-Hosted

Configuración mínima para levantar n8n con persistencia de datos en disco, con instrucciones de uso y notas de seguridad integradas

YAML

Workflow Enriquecimiento de Leads

Workflow n8n importable: clasifica cada lead por tamaño de empresa (Enterprise/Medium/Small) y lo guarda en Google Sheets — con instrucciones en el canvas

JSON
En este módulo
01
Introducción El Zapier de $200/mes que puedes correr gratis en tu propia máquina

Hay un momento en la vida de todo PM en consultoría en que dices: "necesito conectar estas 4 herramientas y no puedo pedirle a ingeniería una integración custom." Tienes datos en un Google Sheet, hay que enviarlos a un CRM, después a emails, después a Slack.

Podrías usar Zapier — pero cobra por tarea: un flujo de 500 leads con 10 pasos te quema el plan mensual en un día. Make cobra por operación; mejor, pero su plan gratis da 1.000 al mes. Y luego está n8n: la alternativa open-source que instalas en tu propia máquina. Sin costo por tarea, sin límite de pasos.

En este módulo instalas n8n con Docker —sí, un PM puede instalar Docker— y construyes tu primer workflow de enriquecimiento de leads. Y tus datos nunca salen de tu computadora.

Vamos.

02
Desarrollo teórico-práctico n8n vs Zapier/Make, Docker para PMs y la anatomía de un workflow

2.1. ¿Qué es n8n y Por Qué Self-Hosted?

n8n es una plataforma de automatización visual que conecta aplicaciones mediante nodos. Cada nodo hace una acción: leer un email, consultar una API, enviar un mensaje, transformar datos.

Comparativa de modelos de negocio (la decisión económica para el PM):

Plataforma Modelo de Cobro Costo para 500 leads/mes con 10 pasos c/u
Zapier Por tarea (5,000 tareas/mes) $30/mes (plan básico, se queda corto)
Make Por operación (10,000 ops/mes) $9/mes (plan básico, justo)
n8n Cloud Por workflow activo $20/mes (ilimitado en pasos)
n8n Self-Hosted Solo tu electricidad $0/mes

Por qué self-hosted es la decisión correcta para un PM:

  1. Sin límites artificiales. Tu workflow puede tener 50 pasos sin que el precio cambie.
  2. Tus datos no salen de tu red. Clientes de consultoría con datos sensibles no deberían pasar por servidores de terceros.
  3. Puedes experimentar sin pedir presupuesto. Abres tu laptop, instalas Docker, y estás corriendo en 15 minutos. Sin tarjeta de crédito.
  4. Escala contigo. Cuando el workflow crece, migras a un servidor dedicado. El mismo software.
Regla de oro

n8n self-hosted = $0 al mes y tus datos nunca salen de tu red. La única inversión es la configuración inicial de este módulo.

2.2. ¿Qué es Docker? (La Explicación que un PM Necesita)

Docker es una plataforma que empaqueta software en "contenedores".

📦
Analogía

Un contenedor es una caja de zapatos donde todo lo que el programa necesita está dentro: código, configuración, dependencias, sistema operativo mínimo. La caja se ve igual sin importar dónde la abras — tu laptop, un servidor en GCP, la máquina de un compañero.

Sin Docker Con Docker
"En mi máquina funciona" es la excusa más común de ingeniería. El contenedor es idéntico en todas partes. Si funciona local, funciona en producción.
Instalar n8n requiere Node.js, npm, configurar variables de entorno, resolver conflictos de versiones. Un solo comando y n8n corre aislado, sin tocar nada más de tu sistema.
Desinstalar n8n deja archivos, dependencias, configuraciones regadas. Borras el contenedor y no queda rastro.

Conceptos clave para entender los comandos:

Imagen
Analogía: el plano de construcción; la receta para crear un contenedor.
docker pull n8nio/n8n descarga el plano. No estás ejecutando nada aún.
Contenedor
Analogía: la casa construida a partir del plano; una instancia en ejecución.
docker run o docker compose up construye la casa y la enciende.
Volumen
Analogía: el sótano que sobrevive aunque la casa se queme.
Con volumen (./n8n-data) los datos persisten aunque borres el contenedor.
Puerto
Analogía: la puerta de entrada a la casa.
5678:5678 = "lo que entre por el puerto 5678 de tu PC, pásalo al contenedor".
Docker Compose
Analogía: un mayordomo que sigue una lista de instrucciones.
Un archivo YAML con todo + docker compose up -d y listo.
El núcleo del módulo

Sin volumen, si borras el contenedor pierdes TODOS tus workflows. La línea ./n8n-data:/home/node/.n8n del compose es la diferencia entre un sistema y un juguete.

¿Por qué debería importarle a un PM?

Porque Docker es el estándar de la industria para desplegar software. Cuando le pidas a tu equipo de ingeniería que te ayude a poner n8n en un servidor, te van a pedir "un Dockerfile" o "un docker-compose.yml". Saber leer ese archivo y entender qué hace cada línea te da credibilidad técnica sin necesidad de saber programar.

Además, Docker te permite probar herramientas como si fueran apps en tu celular: descargas, pruebas, y si no te gustan, las borras sin ensuciar tu computadora. Quieres probar Supabase, Metabase, Airbyte, o cualquier herramienta open-source? Casi siempre hay un docker compose up -d y en 2 minutos la tienes corriendo.

Para instalar n8n con Docker, solo necesitas estos 3 movimientos:

docker pull n8nio/n8n      # Descargar la imagen de n8n
docker run ...             # Crear y ejecutar el contenedor
docker compose up -d       # La forma correcta con persistencia de datos

No necesitas ser ingeniero para esto. Solo copiar, pegar, y ejecutar. Lo que sigue es el paso a paso exacto.

2.3. Anatomía de un Workflow en n8n

TRIGGER
Lo que inicia el workflow:
Hora · Manual · webhook
FILTRO
Decide el camino:
IF el lead es "hot" → rama A; si no → rama B
ACCIÓN
Lo que hace cada paso:
consultar API · transformar JSON · crear contacto en CRM
SALIDA
Lo que produce:
registro en CRM · archivo en Drive · mensaje en Slack
Todo workflow de n8n es esta cadena: un disparador, cero o más filtros, acciones y una salida verificable.

2.4. El Caso de Uso: Enriquecimiento de Leads para Consultoría

Una consultora recibe leads desde un formulario web. Cada lead necesita:

  1. Ser enriquecido con datos públicos (LinkedIn, web de la empresa).
  2. Categorizado según industria y tamaño (Small/Medium/Enterprise).
  3. Asignado a un vendedor específico según categoría.
  4. Registrado en el CRM.
  5. Notificado al equipo en Slack.
15 min → 3 s
por lead procesado
125 h
ahorradas al mes con 500 leads
$200 → $0
al mes vs. un plan alto de Zapier
03
Paso a paso técnico (Hands-on) De instalar Docker a un workflow condicional corriendo en localhost:5678
  1. Instalar Docker (lo que el PM necesita)

    Docker Desktop es una aplicación que corre en tu computadora y gestiona los contenedores. Piensa en ella como el "panel de control" de tus contenedores: puedes ver cuáles están corriendo, cuánta memoria usan, y encenderlos/apagarlos con un clic.

    Requisitos del sistema (verifica antes de empezar)

    • Windows: 8 GB RAM mínimo (16 GB ideal), WSL 2 habilitado
    • macOS: Apple Silicon (M1/M2/M3) o Intel, 4 GB RAM mínimo
    • Linux: 2 GB RAM mínimo
    • Espacio en disco: ~3 GB libres

    Windows

    1. Pre-requisito: habilita WSL 2. Abre PowerShell como administrador y ejecuta:
      # Habilita el subsistema de Linux
      wsl --install
      
      # Configura WSL 2 como versión predeterminada
      wsl --set-default-version 2
      
      Esto instala un kernel de Linux ligero dentro de Windows. Docker lo necesita para correr contenedores de forma eficiente (más rápido que Hyper-V y con menos memoria).
    2. Descargar e instalar: ve a docker.com/products/docker-desktop/ y descarga el instalador para Windows.
    3. Durante la instalación: marca "Use WSL 2 instead of Hyper-V" si te lo pregunta.
    4. Abrir Docker Desktop: búscalo en el menú Inicio y ábrelo. Acepta los términos. Si ves "Docker Desktop is running" y el ícono de la ballena en la barra de tareas, Docker está activo.
    5. Verificar con PowerShell: docker --version — deberías ver Docker version 27.x.x, build xxxxx.
    Problema común

    Si docker --version no se reconoce, cierra y vuelve a abrir tu terminal: necesitas una sesión nueva para que el PATH se actualice.

    macOS

    1. Descarga Docker Desktop desde docker.com (versión Apple Silicon si tienes M1/M2/M3, Intel si tienes Mac antiguo).
    2. Arrastra la aplicación a la carpeta Applications y ábrela.
    3. Acepta los términos de servicio. Espera a que la ballena aparezca en la barra de menú.
    4. Verifica en terminal: bash docker --version

    Linux (Ubuntu/Debian)

    En Linux no usas Docker Desktop. Usas la versión nativa (más ligera):

    # Actualiza la lista de paquetes
    sudo apt update
    
    # Instala Docker Engine y Compose
    sudo apt install docker.io docker-compose-v2
    
    # Habilita Docker para que arranque automáticamente al prender el equipo
    sudo systemctl enable --now docker
    
    # Agrega tu usuario al grupo docker (para no tener que usar sudo en cada comando)
    sudo usermod -aG docker $USER
    
    # Cierra sesión y vuelve a entrar, o ejecuta:
    newgrp docker
    
    # Verifica
    docker --version
    
  2. ¿Qué es Docker Compose y por qué usarlo?

    Docker Compose te permite definir y ejecutar múltiples contenedores con un solo archivo. En lugar de escribir comandos largos cada vez, escribes un docker-compose.yml con toda la configuración y ejecutas docker compose up -d.

    ¿Por qué es mejor que docker run?

    • Reproducible: el archivo YAML es tu "receta". Lo compartes con un compañero y obtiene exactamente la misma configuración.
    • Persistente: los datos se guardan en una carpeta local. Si el contenedor se cae o lo borras, tus workflows sobreviven.
    • Portable: el mismo archivo funciona en tu laptop y en un servidor en la nube sin cambios.
  3. Instalar n8n con Docker Compose

    Crea una carpeta para n8n (por ejemplo C:\n8n en Windows o ~/n8n en Mac/Linux) y dentro de ella crea un archivo docker-compose.yml:

    # docker-compose.yml
    # Este archivo le dice a Docker cómo ejecutar n8n con persistencia de datos
    version: "3.8"
    
    services:
      n8n:
        image: n8nio/n8n             # La imagen oficial de n8n (qué programa correr)
        container_name: n8n           # El nombre del contenedor (para referirte a él)
        restart: unless-stopped       # Política de reinicio automático
        ports:
          - "5678:5678"               # Mapeo de puertos: [tuPC:contenedor]
        volumes:
          - ./n8n-data:/home/node/.n8n  # Persistencia de datos: [carpetaLocal:carpetaContenedor]
        environment:
          - N8N_SECURE_COOKIE=false     # Desactivado para uso local (HTTP, no HTTPS)
          - N8N_METRICS=false           # Desactiva métricas innecesarias
          - N8N_SKIP_WEBHOOK_DEREGISTRATION_ON_SHUTDOWN=true  # Mantiene webhooks al reiniciar
    

    Qué hace cada línea explicado para un PM:

    Línea ¿Qué significa? ¿Qué pasa si la cambias o la quitas?
    image: n8nio/n8n Le dice a Docker: "descarga el programa n8n de la tienda oficial" Si la cambias por otra imagen (ej. n8nio/n8n:2.0), obtienes una versión específica
    container_name: n8n Le pone nombre al contenedor para identificarlo fácilmente Si no la pones, Docker le asigna un nombre aleatorio como n8n_xyz123
    restart: unless-stopped "Si n8n se cae, reinícialo automáticamente, a menos que yo lo detenga explícitamente" Sin esto, si tu compu se reinicia, n8n queda apagado y tienes que iniciarlo manual
    ports: "5678:5678" "Todo lo que entre al puerto 5678 de tu compu, pásalo al puerto 5678 del contenedor donde n8n está escuchando" Si cambias el puerto izquierdo a 8080:5678, accedes a n8n en http://localhost:8080
    volumes: ./n8n-data:/home/node/.n8n "Crea un vínculo entre la carpeta ./n8n-data de tu compu y la carpeta interna de n8n donde guarda sus datos" Sin esto, si borras el contenedor, pierdes todos tus workflows y configuraciones
    N8N_SECURE_COOKIE=false "No exijas HTTPS para las cookies de sesión" En producción deberías ponerlo en true, pero en local sin HTTPS no funciona

    Guarda el archivo docker-compose.yml y en la terminal (asegúrate de estar en la misma carpeta donde lo guardaste):

    # Crea la carpeta donde n8n guardará sus datos (tu "sótano")
    mkdir n8n-data
    
    # Inicia n8n en segundo plano (-d = "detached", se ejecuta sin bloquear la terminal)
    docker compose up -d
    

    ¿Qué acaba de pasar?

    1. Docker descargó la imagen de n8n (la primera vez toma ~1 minuto).
    2. Docker creó un contenedor a partir de esa imagen.
    3. Docker vinculó la carpeta ./n8n-data con la carpeta interna de n8n.
    4. Docker abrió el puerto 5678 de tu compu.
    5. Todo está corriendo en segundo plano.

    Si todo salió bien, ves algo como [+] Running 2/2 - Container n8n Started.

    Verificar que n8n está corriendo:

    # Lista los contenedores activos
    docker ps
    
    # Deberías ver algo como:
    # CONTAINER ID   IMAGE        ...   PORTS                    NAMES
    # abc123def456   n8nio/n8n    ...   0.0.0.0:5678->5678/tcp   n8n
    

    Abre tu navegador y ve a http://localhost:5678. Deberías ver la pantalla de bienvenida de n8n. Si ves "This site can't be reached", espera 10 segundos y recarga —a veces tarda un poco en arrancar.

    Si algo sale mal:

    # Ver los logs de n8n para entender qué falló
    docker compose logs --tail 20
    
    # Detener y volver a empezar
    docker compose down
    docker compose up -d
    
  4. Para detener y reiniciar n8n
    # Detener n8n (los datos se conservan)
    docker compose stop
    
    # Iniciar de nuevo
    docker compose start
    
    # Ver los logs en vivo
    docker compose logs -f
    
    # Detener y borrar el contenedor (datos se conservan en n8n-data/)
    docker compose down
    
  5. Construir el workflow de enriquecimiento de leads

    Escenario: una consultora de servicios TI recibe leads desde un formulario de Google Forms. Quiere enriquecerlos con información de la empresa del lead y categorizarlos automáticamente.

    Paso 1 — Trigger: Manual (para pruebas). En el panel de n8n:

    1. Haz clic en "New Workflow".
    2. Nómbralo: Enriquecimiento de Leads.
    3. Agrega un nodo "Manual Trigger" (el que tiene una mano como icono).
    4. Define los datos de entrada que simularán un lead:
    [
      {
        "nombre": "Carlos Pérez",
        "email": "carlos@techcorp.com",
        "empresa": "TechCorp SAS",
        "cargo": "CTO",
        "pais": "Colombia",
        "empleados": 120,
        "industria": "Tecnología",
        "fecha": "2026-06-03"
      }
    ]
    

    Paso 2 — Enriquecer: Categorizar por tamaño de empresa

    Agrega un nodo "IF" (condicional) después del trigger:

    Condición: {{ $json.empleados > 500 }}
    → Sí: "Enterprise"
    → No: → Siguiente condición
    

    Agrega otro "IF" anidado para el rango medio:

    Condición: {{ $json.empleados >= 50 && $json.empleados <= 500 }}
    → Sí: "Medium"
    → No: "Small"
    

    Paso 3 — Crear el registro en un Google Sheet

    1. Agrega un nodo "Google Sheets".
    2. Conéctalo después de las condiciones.
    3. Configura:
      • Operación: "Append"
      • Sheet ID: el ID de tu Google Sheet (lo sacas de la URL: docs.google.com/spreadsheets/d/[ID]/edit).
      • Datos a escribir:
    Nombre: {{ $json.nombre }}
    Email: {{ $json.email }}
    Empresa: {{ $json.empresa }}
    Categoría: {{ $json.categoria }} (la variable que definiste en el IF)
    Fecha: {{ $json.fecha }}
    

    Para conectar n8n con Google Sheets necesitas autenticarte. n8n te guía con OAuth. El proceso es: autorizar, pegar el código, listo.

    Paso 4 — Enviar notificación a Slack

    1. Agrega un nodo "Slack" después de Google Sheets.
    2. Conecta tu espacio de trabajo de Slack.
    3. Configura:
      • Canal: #leads-entrantes
      • Mensaje:
    📩 Nuevo lead: {{ $json.nombre }} de {{ $json.empresa }}
    Categoría: {{ $json.categoria }} ({{ $json.empleados }} empleados)
    Email: {{ $json.email }}
    

    Paso 5 — Conectar los nodos

    La lógica ramificada de tu workflow:

    ⚡ Manual Trigger — entra el lead
    IF: empleados > 500
    ✅ Sí → Asignar "Enterprise" → Google Sheets → Slack
    No → IF: empleados entre 50 y 500
    ✅ Sí → Asignar "Medium" → Google Sheets → Slack
    ❌ No → Asignar "Small" → Google Sheets → Slack
    Las tres ramas convergen en el mismo destino: Google Sheets registra y Slack notifica. En el canvas de n8n se ve como un diagrama de flujo visual con esta misma lógica.

    Paso 6 — Ejecutar y probar

    1. Haz clic en "Execute Workflow" (el botón de play).
    2. Revisa los logs de cada nodo. n8n te muestra qué datos entraron y salieron de cada paso.
    3. Verifica que el Google Sheet tiene el nuevo registro.
    4. Verifica que el mensaje llegó a Slack.
  6. Workflow completo: el código JSON

    Puedes importar este workflow directamente en n8n (Settings → Import). Es el mismo workflow descrito arriba pero en formato JSON (también viene en el kit: workflow-enriquecimiento-leads.json):

    {
      "name": "Enriquecimiento de Leads",
      "nodes": [
        {
          "parameters": {},
          "name": "Manual Trigger",
          "type": "n8n-nodes-base.manualTrigger",
          "position": [250, 300]
        },
        {
          "parameters": {
            "conditions": {
              "options": {
                "caseSensitive": true,
                "leftValue": "",
                "typeValidation": "strict"
              },
              "conditions": [
                {
                  "id": "e3e3c416-f652-4e93-b5f8-6c184a5b7a3a",
                  "leftValue": "={{ $json.empleados }}",
                  "rightValue": "500",
                  "operator": {
                    "type": "number",
                    "operation": "larger"
                  }
                }
              ]
            }
          },
          "name": "¿Es Enterprise?",
          "type": "n8n-nodes-base.if",
          "position": [450, 300]
        },
        {
          "parameters": {
            "conditions": {
              "options": {
                "caseSensitive": true,
                "typeValidation": "strict"
              },
              "conditions": [
                {
                  "id": "b7b7a416-f652-4e93-b5f8-6c184a5b7a3a",
                  "leftValue": "={{ $json.empleados }}",
                  "rightValue": "50",
                  "operator": {
                    "type": "number",
                    "operation": "largerEqual"
                  }
                },
                {
                  "id": "c7c7a416-f652-4e93-b5f8-6c184a5b7a3a",
                  "leftValue": "={{ $json.empleados }}",
                  "rightValue": "500",
                  "operator": {
                    "type": "number",
                    "operation": "smallerEqual"
                  }
                }
              ]
            }
          },
          "name": "¿Es Medium?",
          "type": "n8n-nodes-base.if",
          "position": [450, 500]
        },
        {
          "parameters": {
            "keepOnlySet": true,
            "values": [
              {
                "name": "categoria",
                "value": "Enterprise"
              }
            ]
          },
          "name": "Categoría: Enterprise",
          "type": "n8n-nodes-base.set",
          "position": [650, 200]
        },
        {
          "parameters": {
            "keepOnlySet": true,
            "values": [
              {
                "name": "categoria",
                "value": "Medium"
              }
            ]
          },
          "name": "Categoría: Medium",
          "type": "n8n-nodes-base.set",
          "position": [650, 400]
        },
        {
          "parameters": {
            "keepOnlySet": true,
            "values": [
              {
                "name": "categoria",
                "value": "Small"
              }
            ]
          },
          "name": "Categoría: Small",
          "type": "n8n-nodes-base.set",
          "position": [650, 600]
        },
        {
          "parameters": {
            "sheetId": "TU_SHEET_ID",
            "options": {},
            "operation": "append",
            "columns": {
              "mappingMode": "defineBelow",
              "value": [
                {
                  "key": "Nombre",
                  "value": "={{ $json.nombre }}"
                },
                {
                  "key": "Email",
                  "value": "={{ $json.email }}"
                },
                {
                  "key": "Empresa",
                  "value": "={{ $json.empresa }}"
                },
                {
                  "key": "Categoría",
                  "value": "={{ $json.categoria }}"
                },
                {
                  "key": "Fecha",
                  "value": "={{ $json.fecha }}"
                }
              ]
            }
          },
          "name": "Guardar en Google Sheets",
          "type": "n8n-nodes-base.googleSheets",
          "position": [850, 300]
        }
      ],
      "connections": {
        "Manual Trigger": {
          "main": [[{ "node": "¿Es Enterprise?", "type": "main", "index": 0 }]]
        },
        "¿Es Enterprise?": {
          "main": [
            [{ "node": "Categoría: Enterprise", "type": "main", "index": 0 }],
            [{ "node": "¿Es Medium?", "type": "main", "index": 0 }]
          ]
        },
        "¿Es Medium?": {
          "main": [
            [{ "node": "Categoría: Medium", "type": "main", "index": 0 }],
            [{ "node": "Categoría: Small", "type": "main", "index": 0 }]
          ]
        },
        "Categoría: Enterprise": {
          "main": [[{ "node": "Guardar en Google Sheets", "type": "main", "index": 0 }]]
        },
        "Categoría: Medium": {
          "main": [[{ "node": "Guardar en Google Sheets", "type": "main", "index": 0 }]]
        },
        "Categoría: Small": {
          "main": [[{ "node": "Guardar en Google Sheets", "type": "main", "index": 0 }]]
        }
      }
    }
    

    Para importarlo: Settings → Import → Pegar este JSON.

  7. Migrar de trigger manual a trigger programado

    Para que el workflow se ejecute automáticamente cada hora (en lugar de manual):

    1. Reemplaza el nodo "Manual Trigger" por un nodo "Schedule Trigger" (reloj).
    2. Configura: intervalo "Minutes", cada 60.

    O si tienes un formulario real:

    1. Reemplaza por "Webhook Trigger".
    2. n8n genera una URL tipo https://localhost:5678/webhook/xyz.
    3. Configura tu formulario para que envíe los datos a esa URL.
04
Cómo usarlo en tu día a día Mantener n8n vivo, ideas de workflows y el entregable

4.1. Lo que Debe Estar Corriendo Siempre

# Verificar que n8n está activo
docker ps | findstr n8n    # Windows
docker ps | grep n8n       # macOS/Linux

# Ver logs
docker compose logs -f --tail 50

Si n8n no está corriendo, ningún workflow se ejecuta. Pon Docker Desktop para que arranque con tu sistema operativo.

4.2. Ideas de Workflows para tu Consultoría

Workflow Disparador Acción Ahorro Semanal
Enriquecimiento de leads Forms / Webhook Categorizar → CRM → Slack 2h
Facturación recurrente Cada mes Buscar contratos activos → Generar factura → Enviar email 3h
Seguimiento de proyectos Cada lunes Consultar estado en Jira → Resumir → Enviar a Slack 1h
Onboarding de clientes Forms llenado Crear carpeta Drive → Docs → Calendar → Email 1h
Alertas de presupuesto Cada hora Consultar gasto en herramienta → Si > 80% → Alerta a Slack 30min

4.3. Diagnóstico Rápido

  • Autodiagnóstico: ¿n8n self-hosted es para ti?
  • ¿Pagas por Zapier o Make hoy? → Multiplica tu gasto mensual × 12. Eso es lo que ahorrarías en un año con n8n self-hosted.
  • ¿Pasas datos de una herramienta a otra manualmente? → Si son más de 2 horas a la semana, un workflow de n8n se paga solo en tiempo ahorrado.
  • ¿Manejas datos sensibles de clientes que no deberían pasar por servidores de terceros? → n8n self-hosted mantiene todo en tu red.

4.4. Entregable del Módulo

🛠 Actividad: n8n local + workflow condicional de 3 niveles

Parte A — n8n funcionando localmente:

  • Docker Desktop instalado y funcionando.
  • n8n corriendo en http://localhost:5678 (usa el docker-compose.yml del kit).
  • Captura de pantalla del panel de n8n mostrando los workflows.

Parte B — Workflow de enriquecimiento de leads:

  • Trigger manual que recibe datos de un lead simulado.
  • Lógica condicional que categoriza por tamaño de empresa (Enterprise/Medium/Small).
  • Google Sheets como destino (o archivo local si no conectaste Sheets).
  • Al menos una notificación (Slack o email).

Parte C — Documentación del workflow:

  • Captura de pantalla del canvas (el diagrama visual).
  • Breve explicación de qué hace cada nodo, qué trigger usa y qué produce.
  • Los datos de prueba que usaste y el resultado en el Google Sheet.

Formato de entrega: capturas del workflow funcionando + el JSON de exportación (Settings → Export). Si no puedes instalar Docker, usa n8n cloud gratis 14 días en app.n8n.cloud.

⚠ Errores comunes
  • Error: levantar n8n con docker run "para probar rápido" y construir workflows sin volumen. Corrección: usa siempre el docker-compose.yml con ./n8n-data: sin volumen, borrar el contenedor borra tus workflows.
  • Error: ejecutar docker compose up -d en una carpeta distinta a la del archivo compose. Corrección: verifica con pwd/ls que estás en la carpeta donde guardaste docker-compose.yml.
  • Error: condiciones IF que dejan huecos (¿qué pasa con exactamente 500 empleados?). Corrección: prueba el workflow con valores frontera (49, 50, 500, 501) y revisa los logs de cada nodo.
  • Error: abandonar la conexión con Google Sheets cuando OAuth pide autorización. Corrección: el flujo es normal: autorizar → pegar el código → listo. n8n te guía paso a paso.
  • Error: esperar que los workflows corran con la laptop apagada o Docker detenido. Corrección: n8n local solo corre si Docker está activo; para 24/7 necesitas el hosting del módulo 10.1.
05
Rúbrica de evaluación Cómo saber si dominaste el módulo
Criterio No Aprobado (0) Aprobado (1) Sobresaliente (2)
1. n8n está instalado y corriendo localmente No instaló Docker, no puede acceder a localhost:5678, o el contenedor no arranca n8n está instalado pero corre en modo temporal (sin docker compose, los datos se pierden al reiniciar) n8n está instalado con docker compose, persiste datos, y el PM puede detener/iniciar el servicio con comandos básicos
2. El workflow tiene lógica condicional funcionando El workflow no tiene condiciones o ejecuta todas las ramas sin importar los datos de entrada El workflow tiene condiciones pero no maneja correctamente los 3 casos (Enterprise/Medium/Small) o el caso "Small" nunca se ejecuta El workflow clasifica correctamente los 3 niveles según el número de empleados, cada rama produce el resultado esperado, y los logs de cada nodo muestran datos coherentes
3. El workflow produce un resultado verificable No hay destino configurado (ni Sheets, ni Slack, ni archivo) o el destino no recibe datos El destino recibe datos pero faltan campos (categoría vacía, nombre mal formateado) o hay duplicados El destino recibe datos correctamente, todos los campos están completos, y el PM puede demostrar que ejecutar el workflow con datos diferentes produce resultados diferentes en el destino

Aprobación: 2 de 3 criterios en "Aprobado" o superior.

🔑 Lo esencial del módulo
  • n8n self-hosted elimina el costo por tarea: $0 al mes y sin límite de pasos.
  • Docker empaqueta n8n en una caja idéntica en cualquier máquina: docker compose up -d y está corriendo.
  • El volumen (./n8n-data) es lo único que separa tus workflows de la pérdida total.
  • Todo workflow es TRIGGER → FILTRO → ACCIÓN → SALIDA; la lógica condicional hace el trabajo de clasificación.
  • 500 leads/mes a 15 minutos cada uno son 125 horas: ese es el tamaño del premio.

Kit: n8n Self-Hosted

ArchivoDescripción
⬇ docker-compose.yml Docker Compose para n8n local con persistencia de datos
⬇ workflow-enriquecimiento-leads.json Workflow JSON importable en n8n: enriquecimiento de leads

📁 kits/m10-n8n/