Contenido

Tutorial de Webhook en n8n: recibe datos externos y envía respuestas

Webhook permite que servicios externos «notifiquen» a n8n cuando ocurre un evento. Por ejemplo:

  • Alguien envía un formulario del sitio web
  • Una plataforma de pagos notifica que se ha realizado un pago
  • Hay un nuevo Pull Request en GitHub
  • Quieres activar un flujo de n8n desde un programa propio

El nodo Webhook de n8n genera una URL. Cualquier solicitud HTTP que se envíe a esa URL iniciará el flujo de trabajo.

Crear un Webhook

  1. Añade un flujo de trabajo y selecciona Webhook como primer nodo.
  2. Configura:
    • HTTP Method: normalmente POST
    • Path: la ruta de la URL, por ejemplo, contact-form
    • Respond: cuándo responder (consulta la explicación más abajo)

Encima del nodo aparecerán dos URL:

URLFormatoCuándo está activa
Test URLhttps://tu-dominio/webhook-test/contact-formDespués de pulsar «Listen for test event», recibe una solicitud
Production URLhttps://tu-dominio/webhook/contact-formDespués de publicar el flujo de trabajo
El nodo Webhook muestra Test URL y Production URL
Nodo Webhook: arriba puedes cambiar entre Test URL y Production URL. La URL muestra localhost, lo que indica que todavía no se ha configurado una URL pública

El error más común es configurar un servicio externo con la Test URL y luego no recibir datos al publicar el flujo. Para usarlo en producción, cambia siempre a la Production URL.

Probar

  1. Pulsa Listen for test event.
  2. Envía una solicitud desde el terminal:
curl -X POST https://tu-dominio/webhook-test/contact-form \
  -H "Content-Type: application/json" \
  -d '{"name": "Juan Pérez", "email": "ming@example.com", "message": "Quiero consultar un presupuesto"}'
  1. En OUTPUT del nodo Webhook aparecerán los datos recibidos:
{
  "headers": { "content-type": "application/json", "...": "..." },
  "params": {},
  "query": {},
  "body": {
    "name": "Juan Pérez",
    "email": "ming@example.com",
    "message": "Quiero consultar un presupuesto"
  }
}

Los nodos posteriores pueden leer los datos recibidos con {{ $json.body.name }}. Los parámetros de la URL (como ?id=123) están en {{ $json.query.id }}.

Formas de responder

La opción Respond determina cuándo responde n8n y qué devuelve al cliente:

OpciónComportamiento
ImmediatelyResponde en cuanto recibe la solicitud y el flujo de trabajo continúa ejecutándose en segundo plano
When Last Node FinishesEspera a que termine todo el flujo y devuelve los datos del último nodo
Using 'Respond to Webhook' NodeEl nodo Respond to Webhook del flujo determina el contenido de la respuesta

Si el cliente solo necesita saber que se recibió la solicitud (por ejemplo, una notificación de pago), elige Immediately. Para devolver el resultado del procesamiento (por ejemplo, crear una API), usa el nodo Respond to Webhook.

Crear una API sencilla con n8n

[Webhook GET /price] ─▶ [Google Sheets query] ─▶ [Respond to Webhook]
Un flujo formado por Webhook, Edit Fields y Respond to Webhook
Webhook → organizar los datos → Respond to Webhook devuelve JSON

En el nodo Respond to Webhook puedes configurar:

  • Respond With: JSON, texto, archivo binario o redirección
  • Response Code: por ejemplo, 200 o 404
  • Response Headers: por ejemplo, encabezados CORS


{ "product": "{{ $json.name }}", "price": {{ $json.price }} }

Parámetros de ruta

Path puede incluir variables:

orders/:orderId

Al llamar a /webhook/orders/A123, {{ $json.params.orderId }} tendrá el valor A123.

Autenticar las solicitudes

La Production URL es pública, así que cualquier persona que la conozca puede llamarla. Puedes protegerla de estas formas:

  1. Opción Authentication: Basic Auth, Header Auth o JWT Auth. Por ejemplo, configura el nombre X-API-Key en Header Auth; el cliente debe enviar el valor correcto.
  2. Verificar firmas: muchos servicios (Stripe, GitHub, LINE, entre otros) incluyen una firma en el encabezado, que puedes verificar con un nodo Code.
  3. Lista de IP permitidas: configura IP(s) Whitelist en Options del Webhook.
  4. Usa una cadena aleatoria difícil de adivinar en la ruta.

Recibir archivos

Cuando se carga un archivo desde un formulario (multipart/form-data), aparece en los datos binarios y puedes conectarlo directamente a nodos como Google Drive o Extract from File.

Permitir que los servicios externos accedan a tu n8n

Los servicios externos deben poder acceder a n8n a través de la red:

  • Despliegue en producción: usa un servidor con dominio y HTTPS, y configura correctamente la variable de entorno de la URL de Webhook. De lo contrario, la URL que muestra n8n será http://localhost:5678/.... Consulta Alojamiento propio.
  • Pruebas locales: puedes usar herramientas como Cloudflare Tunnel o ngrok para exponer temporalmente el puerto 5678 a Internet.

Problemas frecuentes

404: The requested webhook is not registered

  • Si usas Test URL: no has pulsado Listen for test event antes, o ya se recibió una solicitud.
  • Si usas Production URL: el flujo de trabajo no está publicado.
  • El método HTTP no coincide (configuraste POST, pero llamas con GET).

El body recibido está vacío

Comprueba que el cliente envíe el encabezado Content-Type: application/json.

El servicio externo agota el tiempo de espera

Has seleccionado When Last Node Finishes y el flujo tarda demasiado. Cambia a Immediately o acorta el flujo.

Actualizado 12 de octubre de 2026