# N8N - Guía Completa de Automatizaciones

## Introducción y Fundamentos

### ¿Qué es n8n?
- **Definición**: Plataforma de automatización open source alternativa a Make y Zapier
- **Ventaja principal**: Código abierto permite deployment en servidor propio
- **Modelo de pricing**: 
  - Cloud: 20€/mes por 2,500 ejecuciones (no gratuito)
  - Self-hosted: COMPLETAMENTE GRATIS E ILIMITADO

### Diferencias Clave vs Make

#### Modelo de Cobro
- **n8n**: Cobra por ejecución de workflow completo (sin importar número de nodos)
- **Make**: Cobra por operación individual (cada "burbuja" o nodo)
- **Implicación**: En n8n da igual si tienes 2 nodos o 60 nodos, pagas igual por ejecución

#### Procesamiento de Datos
- **n8n**: Procesamiento por bloques/lotes
- **Make**: Procesamiento secuencial (uno por uno)
- **Ejemplo**: 1000 emails
  - n8n: Procesa todos a la vez en lote
  - Make: Procesa 1→envía→procesa 2→envía→etc.

#### Interfaz y UX
- **n8n**: Look más técnico, input/output más visual
- **Make**: Más intuitivo para principiantes
- **Ventaja n8n**: Información del nodo más clara (izquierda=input, derecha=output)

### Opciones de Deployment

#### Cloud (n8n.io)
```
Precio: 20€/mes
Límite: 2,500 ejecuciones
Trial: 14 días gratis
Ventaja: Sin configuración técnica
```

#### Self-Hosted (Recomendado)
```
Precio: GRATIS
Límite: ILIMITADO
Desventaja: Requiere servidor propio
Ventaja: Control total, sin restricciones
```

## Configuración de Workspace

### Estructura de n8n
```
- Creative Workflow: Crear nuevos flujos
- Overview: Dashboard de ejecuciones y estadísticas
- Workflows: Lista de todos los escenarios
- Executions: Historial de ejecuciones
- Variables: Variables globales
- Data tables: Tablas de datos
```

### Organización
- **Personal**: Organización por carpetas
- **Team**: Gestión de equipos
- **Templates**: +7,400 workflows de la comunidad (mucho mejor que Make)

### Templates y Comunidad
```
URL: templates.n8n.io
Contenido: 7,422+ workflows
Calidad: Superior a Make (workflows activos de la comunidad)
Importación: Directa con "Use for free"
```

## Configuración de Conexiones

### Tipos de Conexión

#### 1. OAuth (Más Simple)
```
Ejemplo: LinkedIn
Proceso: 
1. Seleccionar Connection Type → OAuth
2. Nombre de conexión
3. Autorizar → Redirección automática
4. Listo
```

#### 2. API Key (Común para IA)
```
Ejemplo: OpenAI
Proceso:
1. Obtener API key de OpenAI
2. En n8n → Create new connection
3. Pegar API key
4. Save
```

#### 3. Client ID + Secret (Complejo)
```
Ejemplo: Gmail
Requiere: Client ID + Client Secret
Configuración: Video específico requerido
Documentación: Available in n8n help
```

### Gestión de Credenciales HTTP

Para APIs sin módulo nativo:

```javascript
// Headers de autenticación típicos
Header: Authorization
Value: Bearer YOUR_API_KEY

// En n8n:
Authentication → Generic Credential Auth
Name: authorization  
Value: Bearer YOUR_API_KEY
```

#### Ejemplo con Key.com (Marketplace de imágenes):
```
1. Obtener API key de key.com
2. En n8n HTTP node:
   - Authentication → Generic Credential Auth
   - Name: authorization
   - Value: Bearer YOUR_API_KEY
3. Guardar credencial para reutilizar
```

## Creación de Workflows

### Primer Workflow - Estructura Básica

#### 1. Triggers (Disparadores)
```
Tipos disponibles:
- Manual trigger
- Schedule trigger (cron jobs)
- Webhook trigger
- Google Sheets trigger
- Y muchos más...
```

#### 2. Ejemplo: Google Sheets → Gmail
```json
Flujo:
1. Google Sheets (Get rows) → 2. Gmail (Send message)

Google Sheets Config:
- Document: Seleccionar hoja
- Sheet: Hoja específica (ej: Hoja1)
- Preview: Botón para ver directamente la hoja
```

#### 3. Configuración Gmail
```json
{
  "to": "{{$json.email}}", // Variable de Google Sheets
  "subject": "Invitación boda para {{$json.nombre}}",
  "html": "Hola {{$json.nombre}}, tu mesa asignada es {{$json.mesa}}..."
}
```

### Sistema de Variables

#### Sintaxis de Variables
```javascript
// Estructura base
{{$json.nombre_campo}}

// Con módulo específico  
{{$node["Google Sheets"].json.email}}

// Siempre: item.json.campo_name
```

#### Modos de Configuración
```
1. Fixed Mode: Valores fijos
2. Expression Mode: Variables dinámicas (recomendado)
   - Drag & drop de variables
   - Conversión automática a expresión
```

### Triggers Múltiples (Ventaja Única de n8n)

```
Configuración:
1. Trigger manual
2. + Add another trigger
3. Schedule trigger (ej: diario 3PM)
4. Conectar ambos al mismo nodo siguiente

Ventaja: Make solo permite 1 trigger por escenario
```

### Sistema de Pin (Testing)

#### Funcionalidad Pin
```
Activar: Botón pin o tecla "P"
Efecto: Guarda datos de ejecución
Ventaja: No re-ejecuta datos ya procesados
Uso: Testing rápido de flujos complejos

Ejemplo:
1. Google Sheets → Pin activado
2. Siguiente ejecución usa datos guardados
3. No consulta Google Sheets nuevamente
```

## Lógica y Filtros

### Condicionales Simple (IF)

```json
Nodo: IF
Configuración:
- Value 1: {{$json.mesa}}
- Condition: equal
- Value 2: 4

Ramas:
- True: Mesa 4
- False: Otras mesas
```

### Switch (Router Avanzado)

```json
Nodo: Switch
Configuración múltiple:
- Rule 1: mesa = 2 → Rename: "mesa2"
- Rule 2: mesa = 3 → Rename: "mesa3"  
- Rule 3: mesa = 4 → Rename: "mesa4"
- Fallback: Default route
```

### Actualización de Variables Post-Switch

```javascript
// IMPORTANTE: Después de Switch, cambiar referencias
// Antes del switch:
{{$json.mesa}}

// Después del switch:
{{$node["Google Sheets"].json.mesa}}
// Especificar el nodo fuente original
```

## Procesamiento de Datos

### Split Out (Iterador)

#### Configuración
```json
Nodo: Split Out Items
Campo: {{$json.datos}} // Array a separar
Incluir otros campos: Sí/No
Resultado: Convierte 1 item en N items
```

#### Ejemplo Práctico
```javascript
// Input: 1 item con array de invitados
{
  "invitados": [
    {"nombre": "Angel", "email": "angel@email.com"},
    {"nombre": "Carlos", "email": "carlos@email.com"}
  ]
}

// Output: 2 items separados
Item 1: {"nombre": "Angel", "email": "angel@email.com"}
Item 2: {"nombre": "Carlos", "email": "carlos@email.com"}
```

### Agregación (Menos Usado en n8n)

```json
Nodo: Aggregate
Configuración:
- Campos específicos: nombre, email, mesa
- O todos los campos: "data"
Resultado: N items → 1 item con array
```

### Código JavaScript (Recomendado)

#### Ventaja del Nodo Code
```javascript
// Prompt para ChatGPT:
"Dame código JavaScript para n8n que agregue todos los datos del iterador, solo nombre y email"

// Código generado:
const items = $input.all();
const result = {
  invitados: items.map(item => ({
    nombre: item.json.nombre,
    email: item.json.email
  }))
};
return [{json: result}];
```

#### Por qué usar Code vs Aggregate:
- Más flexible y potente
- ChatGPT genera el código
- No requiere conocimiento de programación
- Mejor control sobre la estructura de datos

### Loops (Procesamiento por Lotes)

#### Loop Over Items
```json
Configuración:
- Batch Size: Número de items por lote (ej: 50)
- Loop Logic: Lógica a repetir por lote

Ejemplo con 1000 emails:
1. Procesa 50 emails
2. Wait 30 minutos
3. Procesa siguientes 50
4. Repite hasta completar 1000
```

#### Nodo Wait
```json
Configuración:
- Time: Tiempo de espera
- Units: seconds, minutes, hours
Uso: Entre lotes para no saturar APIs
```

#### Estructura Loop Completa
```
Flow:
1. Split Out (5 items)
2. Loop Over Items (batch size: 1)
3. Gmail (Send message)
4. Wait (5 seconds)
5. Loop back to step 2
6. Done (cuando termina)
```

## Visualización de Datos

### Modos de Vista

#### Table Mode
```
Funcionalidad: Ver todos los items en tabla
Uso: Mejor para múltiples registros
Vista: Estructura tabular clara
```

#### JSON Mode  
```
Funcionalidad: Vista de código JSON
Uso: Debugging y estructura de datos
Vista: Formato técnico
```

#### Schema Mode
```
Funcionalidad: Estructura de datos
Uso: Entender jerarquía de información
Vista: Árbol de datos
```

### Preview de Datos
```
Ubicación: Parte inferior del nodo
Funcionalidad: Vista previa del output
Ejemplo: "Hola {{nombre}}, tu mesa es {{mesa}}"
Preview: "Hola Angel, tu mesa es 4"
```

## Integración con IA

### OpenAI en n8n

#### Configuración del Modelo
```json
Modelo: gpt-4 / gpt-4-mini (más barato)
Messages: Array de mensajes
System: Instrucciones del sistema
User: Prompt del usuario con variables
```

#### Ejemplo Práctico
```json
{
  "model": "gpt-4-mini",
  "messages": [
    {
      "role": "user", 
      "content": "Crea una broma con humor sobre la canción {{$json.baile_asignado}} para {{$json.nombre}} que está en la mesa {{$json.mesa}}. Es para invitación de boda. 2-3 frases cortas con humor para animar el correo."
    }
  ]
}
```

#### Output de IA
```
Variable: {{$json.result}} o {{$json.choices[0].message.content}}
Uso: Directamente en siguiente nodo (Gmail)
```

### Agentes de IA

```json
Nodo: OpenAI Agent
Configuración: Tools, memory, prompts específicos
Capacidades: Mejores que Make para agentes complejos
```

## Plantillas y Workflows

### Importación de Templates

```
1. Ir a templates.n8n.io
2. Buscar por categoría/función
3. Click "Use for free"  
4. Importación automática a tu n8n
5. Configurar conexiones específicas
```

### Trending Templates con IA
```
- Chatbots conversacionales
- Procesamiento de documentos
- Automatización de contenido
- Lead generation automatizado
- E-commerce automation
```

## Best Practices

### Organización de Workflows
```
1. Naming convention clara
2. Uso de carpetas por proyecto
3. Documentación en nodos (notes)
4. Testing con sistema Pin
```

### Performance
```
1. Usar loops para grandes volúmenes
2. Implementar waits para rate limiting
3. Monitorear executions dashboard
4. Batch processing en lugar de uno por uno
```

### Debugging
```
1. Usar Pin para testing iterativo
2. Table view para múltiples items
3. Execution history para troubleshooting
4. Schema view para estructura de datos
```

### Conexiones
```
1. Reutilizar credenciales
2. Usar Generic Auth para APIs custom
3. Documentar APIs utilizadas
4. Backup de API keys importantes
```

## Comandos y Shortcuts

```
P: Toggle Pin en nodo seleccionado
Ctrl+A: Seleccionar todos los nodos
Botón Beautify: Auto-organizar workflow
Execute Workflow: Ejecutar flujo completo
Execute Node: Ejecutar solo nodo específico
```

## URLs y Recursos

```
- n8n Cloud: https://n8n.io
- Templates: https://templates.n8n.io  
- Documentation: https://docs.n8n.io
- Community: https://community.n8n.io
- GitHub: https://github.com/n8n-io/n8n
```

---

*Este documento contiene toda la información técnica necesaria para implementar cualquier automatización enseñada en el curso sin necesidad de los videos originales.*