Probado: n8n 2.44.5, 22 de octubre de 2026. Proyectos con datos ficticios.
Un webhook permite que una petición entrante inicie un workflow. En este proyecto recibiremos nombre y email, quitaremos los espacios y responderemos con un JSON. Si falta un campo, devolveremos un error 400 en lugar de aceptar silenciosamente datos incompletos.
Qué necesitas y qué vamos a probar
Necesitas n8n local y el proyecto 06-webhook-formulario.json. Trabajaremos con una petición de prueba, sin conectar un formulario público ni guardar datos de personas reales. El nombre y el correo del ejemplo son ficticios.
El recorrido es Recibir formulario → Preparar campos → Campos completos. La condición conduce a Responder aceptado o Responder incompleto. Los dos últimos nodos controlan tanto el cuerpo de la respuesta como el código HTTP.
1. Importa y revisa el Webhook
Descomprime el ZIP e importa el JSON en un workflow nuevo. En Recibir formulario el método es POST y la ruta es n8nfacil-formulario-demo. El modo de respuesta utiliza un nodo Respond to Webhook. Eso permite tomar una decisión antes de contestar.
n8n distingue URL de prueba y URL de producción. Para esta guía utiliza Test URL y pulsa Execute workflow en el lienzo para ejecutar el recorrido completo. Listen for test event dentro del nodo permite recoger solo la entrada del disparador; no equivale a probar las respuestas de los nodos finales. La URL de prueba solo funciona mientras n8n espera ese evento. No publiques el workflow para hacer este ensayo.
2. Envía datos ficticios
Con n8n esperando, envía un POST a http://localhost:5678/webhook-test/n8nfacil-formulario-demo con Content-Type application/json y este cuerpo: {"nombre":" Ana ","email":" ANA@EXAMPLE.COM "}.
En Windows puedes abrir PowerShell y ejecutar el comando incluido más abajo. Guarda el resultado para compararlo con la salida del workflow. Cada nueva prueba puede requerir volver a activar la escucha del webhook de prueba.
$datos = @{ nombre = ' Ana '; email = ' ANA@EXAMPLE.COM ' } | ConvertTo-Json
Invoke-RestMethod -Method Post -Uri 'http://localhost:5678/webhook-test/n8nfacil-formulario-demo' -ContentType 'application/json' -Body $datosEsto es una simulación del envío de un formulario. Si conectas después un formulario HTML con otro formato de contenido, comprueba cómo llega su cuerpo: no des por hecho que tendrá exactamente la misma estructura.
3. Normaliza sin asumir el tipo de entrada
El nodo Preparar campos lee $json.body.nombre y $json.body.email. Solo aplica trim a valores de tipo texto; si falta el campo o llega otro tipo, produce un texto vacío. El email además pasa a minúsculas.
Esta comprobación evita llamar a trim sobre un dato inexistente. No valida que la dirección de correo exista ni que su formato sea correcto. La condición de este proyecto únicamente exige dos textos no vacíos después de limpiarlos.
4. Devuelve una respuesta coherente
Campos completos comprueba que nombre y email tienen longitud mayor que cero. La rama verdadera llega a Responder aceptado, que devuelve HTTP 200 y {"ok":true,"nombre":"Ana","email":"ana@example.com"} para la entrada inicial.
La rama falsa usa Responder incompleto y devuelve HTTP 400 con {"ok":false,"error":"nombre y email son obligatorios"}. El código permite que quien envía el formulario distinga un dato incompleto de una respuesta correcta sin interpretar un texto ambiguo.
5. Prueba también el caso incompleto
Vuelve a activar la escucha y envía solo {"nombre":"Ana"}. Esperamos la rama falsa y el código 400. PowerShell puede presentar ese estado como un error de la petición: es el comportamiento esperado de esta prueba, no significa necesariamente que n8n haya fallado.
Repite con nombre vacío o espacios si quieres ampliar el ensayo. Revisa siempre la última ejecución. Una captura verde de la prueba anterior no demuestra que la petición actual haya recorrido el mismo camino.
Localhost y producción no son lo mismo
Localhost significa el propio equipo desde el que se hace la petición. Una web alojada en Internet no llega a tu n8n local usando esa dirección. Para una integración real necesitarás una URL accesible y una configuración adecuada de HTTPS, autenticación, validación y límites. Este tutorial no expone tu contenedor a Internet.
Errores frecuentes y siguiente paso
Un 404 en la URL de prueba suele requerir revisar la ruta, el método POST y si la escucha está activa. Si no llega una respuesta, comprueba el modo de respuesta del Webhook y las conexiones hacia los nodos Respond to Webhook. Una integración posterior con Google Sheets debe añadir sus propias reglas de validación y tratamiento de duplicados.
Fuentes de referencia: https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.webhook/ y https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.respondtowebhook/
Capturas de las pruebas reales



Descargar el proyecto
Descargar workflow en ZIP. Descomprime e importa el JSON en un workflow nuevo. El archivo no contiene credenciales.
Instalar n8n en Windows con Docker · Limpiar datos con Edit Fields · Practicar condiciones con IF
Continúa aprendiendo
Cómo importar y exportar workflows en n8n sin perderte con el JSON · HTTP Request en n8n: consulta una API y selecciona los datos que necesitas
Construye este workflow desde cero
Puedes crear los nodos manualmente en lugar de importar el ZIP. Los ajustes siguientes corresponden al archivo del proyecto y a la versión indicada al comienzo de la guía; los nombres de los controles pueden variar en otras versiones.
Recibir formulario · Webhook
Método POST, Path n8nfacil-formulario-demo y respuesta mediante Respond to Webhook. Usa la Test URL y pulsa Listen for test event antes de enviar la petición.
Preparar campos · Edit Fields (Set)
Añade Edit Fields (Set) y selecciona Manual Mapping. Crea los siguientes campos; utiliza Fixed para valores literales y Expression para fórmulas. Conserva solo los campos configurados para reproducir la salida del proyecto.
| Campo | Tipo | Modo | Valor |
|---|---|---|---|
| nombre | string | Expression | {{ typeof $json.body?.nombre === "string" ? $json.body.nombre.trim() : "" }} |
| string | Expression | {{ typeof $json.body?.email === "string" ? $json.body.email.trim().toLowerCase() : "" }} |
Las comillas de los valores de texto de la tabla indican que son cadenas: no las escribas en el campo Fixed. Conserva los espacios cuando formen parte de los datos de prueba.
Campos completos · IF
Configura las condiciones de la tabla del tutorial. Mantén el tipo correcto del valor y conecta las salidas true y false a sus nodos de resultado.
Responder aceptado · Respond to Webhook
Selecciona Respond With: JSON. Introduce el cuerpo como expresión y configura el código HTTP en Options → Response Code.
{{ { ok: true, nombre: $json.nombre, email: $json.email } }}Código HTTP: 200.
Responder incompleto · Respond to Webhook
Selecciona Respond With: JSON. Introduce el cuerpo como expresión y configura el código HTTP en Options → Response Code.
{{ { ok: false, error: "nombre y email son obligatorios" } }}Código HTTP: 400.
Conecta los nodos y revisa el recorrido
- Recibir formulario → Preparar campos.
- Preparar campos → Campos completos.
- Campos completos → Responder aceptado (salida 0, contando desde 0).
- Campos completos → Responder incompleto (salida 1, contando desde 0).
Ejecuta desde el inicio y abre la salida de cada nodo. Comprueba los valores y el número de elementos antes de seguir. Un nodo verde indica ejecución completada, pero debes comparar su salida con los resultados esperados de esta guía.
Autor: Javier Fernández, estudiante. Cómo documento mis prácticas · Comunicar un error.

Deja una respuesta