n8n avanzado: Webhook, ramas IF/Switch y diseño de flujos event-driven

El botón naranja “Test Workflow” llevaba pulsado diecisiete veces.
Cada vez había que hacer clic manualmente. ¿No podía funcionar como una API de verdad — alguien llama y el flujo arranca solo? Luego descubrí el Webhook de n8n: en pocas palabras, un timbre; cuando suena, el workflow entra en acción.
Aquí veremos cómo instalar ese timbre y, según quién llame, derivar a distintas ramas. Si ya dominas nodos básicos de n8n pero sientes que tus flujos “esperan pasivamente”, esto puede abrirte camino.
Contenido:
- Parámetros del nodo Webhook que marean al principio
- IF vs Switch: cuándo usar cada uno
- Caso completo de pedidos, listo para importar
- Trampas habituales en producción
1. Configuración profunda del nodo Webhook
Primero: Webhook y disparador programado no son lo mismo.
El programado es un despertador — suena cada X minutos haga falta o no. Webhook es un timbre — solo suena cuando alguien llama. Eso es lo event-driven. No revisas la puerta cada cinco minutos; el repartidor toca y ya lo sabes. Datos oficiales indican que los webhooks reducen el overhead de polling un 90-95% Reducción de polling — menos recursos, menos espera.
1.1 Qué método HTTP elegir
Lo primero en el nodo Webhook es HTTP Method. n8n soporta DELETE, GET, HEAD, PATCH, POST y PUT.
Guía rápida:
- POST: recibir datos (formularios, nuevos pedidos). Lo más habitual.
- GET: disparo simple (enlace corto que ejecuta el flujo).
- PUT/PATCH: actualizar datos (p. ej. cambio de estado de pedido).
Yo uso POST casi siempre por el body.
1.2 Cuatro modos de respuesta
“Response Mode” define cómo n8n responde al llamador:
| Modo | Cuándo usarlo |
|---|---|
| Immediately | Devuelve 200 al instante, sin esperar el resto. Tareas en segundo plano. |
| When Last Node Finishes | Espera a que termine el flujo. Cuando necesitas devolver datos. |
| Using ‘Respond to Webhook’ Node | Un nodo intermedio decide la respuesta. Más flexible, un nodo extra. |
| Streaming response | Salida streaming de Agent IA. Función reciente. |
Trampa: con “Immediately” el cliente recibe 200 aunque falle un nodo posterior. En tareas background, añade notificación de errores.
1.3 Parámetros de ruta RESTful
Path admite rutas dinámicas, p. ej. orders/:orderId. Tras los dos puntos va el nombre de variable.
Llamando /orders/12345, en el flujo usas {{ $params.orderId }} y obtienes 12345. Más limpio que query strings.
1.4 Límite de payload
El máximo es 16MB Payload máximo. Por encima, error.
Opciones para archivos grandes:
- Variable de entorno
N8N_PAYLOAD_SIZE_MAX - Subir a object storage y pasar solo la URL al Webhook
16 MB cubre la mayoría de casos; para ficheros grandes, la segunda opción es más sensata.
2. IF vs Switch: cómo elegir ramas condicionales
Ambos enrutan datos, pero mal elegidos generan IF anidados interminables o un Switch mal dimensionado.
2.1 IF: dos salidas
Solo true y false.
Como preguntar al repartidor: “¿Es perecedero?” Sí → nevera; no → puerta.
Tipos soportados: String, Number, Date & Time, Boolean, Array, Object — contains, regex, greater than, etc.
2.2 Switch: múltiples salidas
Varias salidas. “¿De qué departamento?” Finanzas, técnico, operaciones…
Modos:
- Rules: una condición por salida. Intuitivo.
- Expression: JavaScript que devuelve el índice de salida. Lógica compleja.
2.3 Tabla de decisión
| Escenario | Nodo | Motivo |
|---|---|---|
| Solo true/false | IF | Dos salidas bastan |
| 3+ ramas | Switch | Sin anidar |
| Lógica compleja | Switch + Expression | Código más rápido que formularios |
| Merge posterior | IF | Combina bien con Merge |
Señal de alerta: IF dentro de IF dentro de IF → usa Switch.
2.4 Tipos comparables
String, Number, Date & Time, Boolean, Array, Object — mismos operadores en IF y Switch.
Date & Time sirve para pedidos vencidos, comparando fechas directamente.
3. Caso práctico: procesamiento automático de pedidos
Un amigo con e-commerce revisaba pedidos a mano: panel, avisos, llamadas. Le dije que n8n podía automatizarlo; dudaba.
Dos semanas después, almacén: “¿Cómo es que no se nos escapa ningún pedido?“
3.1 Requisitos
- pending → avisar almacén
- paid → email de confirmación
- shipped → actualizar logística
- cancelled → reembolso
Cuatro estados → Switch.
3.2 Configuración Webhook
- HTTP Method: POST
- Path:
orders/:orderId - Response Mode: When Last Node Finishes
- Authentication: Header Auth
Header X-Shop-Secret con valor aleatorio; solo quien lo conoce puede invocar.
3.3 Switch en modo Rules
Regla 1: {{ $json.status }} equals "pending" → pending
Regla 2: {{ $json.status }} equals "paid" → paid
Regla 3: {{ $json.status }} equals "shipped" → shipped
Regla 4: {{ $json.status }} equals "cancelled" → cancelled
Fallback Output: Extra Output para estados desconocidos.
3.4 JSON del flujo completo
Importable en n8n:
{
"name": "Order Processing",
"nodes": [
{
"name": "Webhook",
"type": "n8n-nodes-base.webhook",
"position": [250, 300],
"parameters": {
"httpMethod": "POST",
"path": "orders/:orderId",
"responseMode": "responseNode",
"authentication": "headerAuth"
}
},
{
"name": "Switch",
"type": "n8n-nodes-base.switch",
"position": [500, 300],
"parameters": {
"mode": "rules",
"rules": [
{ "output": "pending", "conditions": { "value1": "{{ $json.status }}", "operation": "equals", "value2": "pending" } },
{ "output": "paid", "conditions": { "value1": "{{ $json.status }}", "operation": "equals", "value2": "paid" } },
{ "output": "shipped", "conditions": { "value1": "{{ $json.status }}", "operation": "equals", "value2": "shipped" } },
{ "output": "cancelled", "conditions": { "value1": "{{ $json.status }}", "operation": "equals", "value2": "cancelled" } }
],
"fallbackOutput": "extra"
}
},
{
"name": "Notify Warehouse",
"type": "n8n-nodes-base.slack",
"position": [750, 200]
},
{
"name": "Send Confirmation",
"type": "n8n-nodes-base.emailSend",
"position": [750, 300]
},
{
"name": "Update Tracking",
"type": "n8n-nodes-base.httpRequest",
"position": [750, 400]
},
{
"name": "Process Refund",
"type": "n8n-nodes-base.stripe",
"position": [750, 500]
}
],
"connections": {
"Webhook": { "main": [[{ "node": "Switch", "type": "main", "index": 0 }]] },
"Switch": {
"main": [
[{ "node": "Notify Warehouse", "type": "main", "index": 0 }],
[{ "node": "Send Confirmation", "type": "main", "index": 0 }],
[{ "node": "Update Tracking", "type": "main", "index": 0 }],
[{ "node": "Process Refund", "type": "main", "index": 0 }]
]
}
}
}
Sustituye Slack, Email, HTTP Request y Stripe por tu configuración.
3.5 Prueba y activación
Dos URLs:
- Test URL: solo al probar manualmente
- Production URL: activa con el interruptor Active
Flujo: probar con Test URL → activar → configurar Production URL en la plataforma.
Prueba con curl:
curl -X POST https://your-n8n-instance.com/webhook/orders/12345 \
-H "Content-Type: application/json" \
-H "X-Shop-Secret: your-secret-key" \
-d '{"status": "paid", "customer_email": "[email protected]"}'
200 y logs de ejecución = éxito.
4. Evitar problemas en producción
4.1 No escatimes en seguridad
Header Auth es el mínimo. Si la IP del llamador es fija, añade IP Whitelist en opciones avanzadas del Webhook.
JWT Auth es más robusto pero más complejo. Para sistemas propios, Header Auth + IP Whitelist suele bastar.
4.2 Alguien debe enterarse de los errores
Si el Webhook falla, el cliente puede ver solo un 500.
Añade Error Trigger → Slack con mensaje e ID de ejecución. Problemas de madrugada en el móvil, no al día siguiente por quejas.
4.3 Rendimiento: responder rápido
Muchas APIs externas al final del flujo = respuesta lenta y timeout del cliente.
Modo Immediately: 200 al instante, procesamiento en background. El cliente no sabe el resultado final.
Válido para tareas batch o avisos no críticos; no para pagos o consultas en tiempo real.
4.4 Depurar con Executions
Menú Executions: entrada/salida, duración por nodo, errores.
Por defecto se guardan 1000 ejecuciones; ajusta EXECUTIONS_DATA_MAX_AGE o exporta logs.
Logs de Test y Production están separados.
Resumen
Webhook = timbre para n8n. Configura HTTP Method y Response Mode; usa parámetros de ruta cuando puedas.
IF para dos ramas; Switch para tres o más. No anides IF.
El flujo de pedidos es reutilizable; cambia Slack, Email y Stripe. Prueba con Test URL antes de activar.
Seguridad: Header Auth y, si aplica, IP Whitelist. Errores con notificación — si no, ni te enteras.
Configurar un flujo Webhook en n8n
Construir desde cero un flujo de pedidos disparado por Webhook, con ramas condicionales y autenticación
⏱️ Estimated time: 30 min
- 1
Step 1: Configurar el nodo Webhook
Parámetros básicos:
• HTTP Method: POST (recibir datos)
• Path: orders/:orderId (ruta dinámica)
• Response Mode: When Last Node Finishes (devolver resultado)
• Authentication: Header Auth - 2
Step 2: Diseñar ramas Switch
Cuatro reglas:
• pending → avisar almacén
• paid → email de confirmación
• shipped → actualizar logística
• cancelled → reembolso
Fallback Output: Extra Output para estados desconocidos. - 3
Step 3: Añadir nodos por rama
Un nodo por salida:
• Slack: almacén
• Email: confirmación
• HTTP Request: logística
• Stripe: reembolso
Sustituye por tus servicios. - 4
Step 4: Configurar seguridad
Producción:
• Header Auth: X-Shop-Secret personalizado
• IP Whitelist: restringir IP
• Error Trigger: Slack en caso de error - 5
Step 5: Probar y activar
Validación:
• Test URL + curl
• Revisar Executions
• Activar Production URL
• Configurar URL en la plataforma de comercio
FAQ
¿Qué diferencia hay entre Webhook y disparador programado?
¿IF o Switch?
• Dos ramas (true/false) → IF
• Tres o más → Switch
• Lógica compleja → Switch + Expression
Si anidas IF, pasa a Switch.
¿Cuál es el límite de payload del Webhook?
¿Cómo configurar autenticación?
• Header Auth con header y secreto personalizados
• IP Whitelist
• JWT Auth (más seguro, más complejo)
En desarrollo Header Auth basta; en producción añade IP Whitelist.
¿Immediately vs When Last Node Finishes?
¿Cómo depurar un flujo Webhook?
• Entrada/salida y tiempos por nodo
• Logs separados Test vs Production
• Por defecto 1000 ejecuciones; ajustable por variable de entorno
¿Qué tener en cuenta en producción?
• Header Auth + IP Whitelist
• Error Trigger + Slack
• Immediately + procesamiento background en alto tráfico
• Exportar o limpiar logs periódicamente
• Test URL para pruebas; Production URL solo tras validar
6 min de lectura · Publicado el: 9 abr 2026 · Actualizado el: 21 ago 2026
Guía práctica de n8n
Si llegaste desde búsqueda, lo más rápido es ir al artículo anterior o siguiente de esta misma serie.
Anterior
Crear flujos de trabajo en n8n: de nodos a escenarios de automatización
Guía completa para crear flujos de trabajo en n8n: tipos de nodos, configuración de disparadores, lógica de paso de datos y casos prácticos como alertas meteorológicas, notificaciones de formularios, sincronización de datos e integración con IA.
Parte 1 de 3
Siguiente
Automatización de flujos con IA: n8n + Agent de principiante a avanzado
De Zapier a n8n: evolución de la automatización con IA. Funciones clave del AI Agent de n8n, integración MCP y caso de atención al cliente inteligente
Parte 3 de 3



Comentarios
Inicia sesión con GitHub para dejar un comentario