n8n avanzado: flujos de automatización con webhooks y APIs externas

n8n es una plataforma de automatización de flujos de trabajo open source, similar a Zapier o Make pero self-hosted.

Con su interfaz visual de nodos puedes conectar más de 400 servicios: recibir webhooks, consultar APIs, transformar datos, enviar emails, actualizar bases de datos y mucho más, sin escribir apenas código.

Instalación con Docker

version: '3.8'
services:
  n8n:
    image: n8nio/n8n:latest
    restart: unless-stopped
    ports:
      - "5678:5678"
    environment:
      N8N_HOST: n8n.miempresa.com
      N8N_PORT: 5678
      N8N_PROTOCOL: https
      WEBHOOK_URL: https://n8n.miempresa.com/
      N8N_ENCRYPTION_KEY: clave_de_cifrado_aleatoria_32chars
      N8N_BASIC_AUTH_ACTIVE: "true"
      N8N_BASIC_AUTH_USER: admin
      N8N_BASIC_AUTH_PASSWORD: password_seguro
      GENERIC_TIMEZONE: Europe/Madrid
      DB_TYPE: postgresdb
      DB_POSTGRESDB_HOST: postgres
      DB_POSTGRESDB_PORT: 5432
      DB_POSTGRESDB_DATABASE: n8n
      DB_POSTGRESDB_USER: n8n
      DB_POSTGRESDB_PASSWORD: n8npassword
    volumes:
      - n8n_data:/home/node/.n8n

  postgres:
    image: postgres:15-alpine
    restart: unless-stopped
    environment:
      POSTGRES_DB: n8n
      POSTGRES_USER: n8n
      POSTGRES_PASSWORD: n8npassword
    volumes:
      - postgres_data:/var/lib/postgresql/data

volumes:
  n8n_data:
  postgres_data:
docker compose up -d

Flujo de ejemplo 1: Webhook → Slack

Caso: Cuando el sistema de monitorización detecta un problema, envía un webhook a n8n y n8n lo formatea y envía a Slack.

[Webhook] → [Function] → [Slack]

Configuración del nodo Webhook:

  • Method: POST
  • Path: /alertas-servidor
  • URL resultante: https://n8n.miempresa.com/webhook/alertas-servidor

Nodo Function (transformar el mensaje):

// Transformar el payload del webhook en mensaje legible
const alerta = $input.first().json;

const emojis = {
  critical: "🔴",
  warning: "🟡",
  ok: "🟢"
};

return [{
  json: {
    text: ${emojis[alerta.severity] || "⚪"} ${alerta.host}: ${alerta.message},
    severity: alerta.severity,
    host: alerta.host,
    timestamp: new Date().toISOString()
  }
}];

Nodo Slack:

  • Credential: OAuth de Slack
  • Channel: #alertas-infra
  • Message: {{ $json.text }}

Flujo de ejemplo 2: Formulario → Email + Base de datos

Caso: Nuevo empleado rellena un formulario → n8n crea su cuenta en Nextcloud, le envía un email de bienvenida y lo registra en una hoja de Google Sheets.

[Webhook] → [IF] → [HTTP Request Nextcloud API]
                 ↓
           [Send Email]
                 ↓
           [Google Sheets]
// Nodo Function: preparar los datos
const form = $input.first().json;

return [{
  json: {
    username: (form.nombre[0] + form.apellido).toLowerCase().replace(/\s/g, ''),
    displayName: ${form.nombre} ${form.apellido},
    email: form.email,
    department: form.departamento,
    createdAt: new Date().toISOString()
  }
}];

Nodo HTTP Request para crear usuario en Nextcloud:

  • Method: POST
  • URL: https://cloud.miempresa.com/ocs/v1.php/cloud/users
  • Headers: OCS-APIREQUEST: true, Authorization: Basic
  • Body: { userid: "{{ $json.username }}", password: "TempPass123!" }

Flujo de ejemplo 3: Monitorización de precios (cron + web scraping)

Caso: Revisar el precio de un componente de servidor cada hora y alertar si baja de un umbral.

[Cron] → [HTTP Request] → [HTML Extract] → [IF precio < umbral] → [Email]

Nodo Cron: 0 (cada hora)

Nodo HTTP Request: GET a la URL del producto

Nodo HTML Extract:

  • CSS selector: .precio-actual
  • Tipo de dato: Number

Nodo IF: {{ $json.precio }} < 299

Flujo de ejemplo 4: CI/CD básico con webhooks de Git

[GitHub Webhook] → [IF rama=main] → [SSH Command: git pull &amp;&amp; systemctl restart app]
                                  → [Slack: "Despliegue completado"]

Nodo SSH Command (requiere credenciales SSH configuradas):

cd /var/www/miapp && git pull origin main && npm install --production && pm2 restart app

Código en nodos Function

n8n soporta JavaScript completo en los nodos Function:

// Ejemplo: parsear logs y extraer IPs bloqueadas
const logs = $input.all();

const ips_bloqueadas = logs
  .map(item => item.json.message)
  .filter(msg => msg.includes('Ban '))
  .map(msg => {
    const match = msg.match(/Ban (\d+\.\d+\.\d+\.\d+)/);
    return match ? match[1] : null;
  })
  .filter(Boolean);

// Eliminar duplicados
const ips_unicas = [...new Set(ips_bloqueadas)];

return ips_unicas.map(ip => ({
  json: { ip, timestamp: new Date().toISOString() }
}));

Gestión de credenciales

n8n cifra todas las credenciales con la N8N_ENCRYPTION_KEY. Añade credenciales desde SettingsCredentials:

  • Slack OAuth
  • Gmail / SMTP
  • PostgreSQL / MySQL
  • SSH Key
  • HTTP Basic Auth
  • API Keys de cualquier servicio

Exportar e importar flujos

docker exec n8n n8n export:workflow --all --output=/home/node/.n8n/backup-workflows.json


docker exec n8n n8n import:workflow --input=/home/node/.n8n/workflows.json

Conclusión

n8n cierra la brecha entre los scripts personalizados y las plataformas de automatización cloud. Self-hosted, sin límites de ejecuciones, con JavaScript completo disponible cuando necesitas lógica compleja y con más de 400 integraciones listas. Para sysadmins, el caso de uso más inmediato es la automatización de alertas: webhook de Zabbix → formatear → Slack + ticket en Jira, todo en un flujo visual de 5 nodos.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *