Webhook en n8n: tu formulario con aviso en Telegram

Un cliente abre la página de pedidos de la panadería, rellena el formulario y, en ese mismo segundo, tu Telegram te avisa: quién es, su teléfono, qué quiere y para qué día. El formulario lleva los colores de la panadería y el aviso sale del mismo sitio que la página, un solo nodo de n8n: el Webhook.

Este es el quinto capítulo de n8n desde cero, nuestra serie gratuita en YouTube. Aquí tienes el vídeo y, debajo, el paso a paso para montarlo aunque no le des al play, con el workflow terminado y los dos HTML para descargar.

📌 En resumen

Un único nodo Webhook atiende GET y POST en la misma dirección. Por GET contesta con tu formulario en HTML (Respond to Webhook con Respond With: Text y la cabecera Content-Type: text/html). El formulario se envía por POST a esa misma dirección, los datos llegan en body, Telegram te avisa y otro Respond to Webhook le enseña al cliente la página de gracias. La Test URL sirve para probar, la Production URL solo funciona con el workflow publicado y lo que no uses, mejor despublicado.

Qué es un webhook y por qué sirve para un formulario

En el capítulo 4 n8n trabajaba solo, a su hora. En este va a escuchar: un webhook es una dirección web de n8n y, cada vez que alguien la llama, el workflow arranca.

Esa dirección se puede llamar de dos maneras, que se llaman métodos. Con GET, que es lo que hace el navegador cuando abres una página, y con POST, que es lo que hace cuando envías un formulario. El truco de este capítulo es que la misma dirección sirve para las dos cosas: cuando el cliente la abre llega un GET y le contestas con el formulario; cuando lo envía llega un POST, mandas el aviso a Telegram y le contestas con la página de gracias.

Qué necesitas antes de empezar

  • El bot de Telegram y su credencial, que creamos en el capítulo 3.
  • Tu chat id, que sacamos en el capítulo 4.
  • El código del formulario y el de la página de gracias. Los tienes en la descarga de más abajo, listos para pegar: no hace falta saber programar.

El paso a paso

1. El nodo Webhook

Crea un workflow nuevo y llámalo, por ejemplo, Formulario y webhook. Pulsa la tecla N, busca webhook y elige Webhook. En Path escribe pedido: es el final de la dirección. Arriba verás dos direcciones, la Test URL para probar y la Production URL, la de verdad, que solo funciona cuando el workflow está publicado.

2. GET y POST a la vez

De serie el Webhook atiende un solo método. Entra en Settings, los ajustes del nodo, y activa Allow Multiple HTTP Methods. Vuelve a Parameters y, en HTTP Methods, marca GET y también POST.

3. Quién contesta

En Respond elige Using 'Respond to Webhook' Node: así la respuesta no la decide n8n, la decides tú con otro nodo. Cierra el nodo y fíjate en que ahora tiene dos salidas, una para GET y otra para POST.

4. La respuesta del GET: el formulario

Detrás de la salida GET añade un Respond to Webhook. En Respond With elige Text y en Response Body pega el HTML del formulario. Después, en Options, añade Response Headers con este par:

Name:  Content-Type
Value: text/html; charset=utf-8

Esa cabecera le dice al navegador que lo que llega es una página y que la dibuje. Sin ella, verás el código en vez del formulario.

5. Lo que importa del código

Del HTML solo te interesan dos cosas. La etiqueta form lleva method="post" y ninguna dirección, así que el formulario se envía a la misma dirección por la que ha llegado. Cada campo lleva su name, que es el nombre con el que te llegará cada dato:

<form class="caja" method="post">
  <input id="nombre" name="nombre" required>
  <input id="telefono" name="telefono" type="tel">
  <textarea id="pedido" name="pedido" required></textarea>
  <input id="recogida" name="recogida" type="date">
  <button type="submit">Enviar pedido</button>
</form>

Si cambias el formulario a tu gusto, mantén los name o acuérdate de cambiarlos también en el aviso de Telegram.

6. Primer punto de control: ver el formulario

Pulsa Execute workflow y n8n se queda escuchando. Abre una pestaña nueva del navegador y pega la Test URL: tiene que salir el formulario de la panadería, con sus colores.

7. La respuesta del POST: gracias

Ahora la otra salida. Detrás de POST añade otro Respond to Webhook igual que el anterior (Respond With: Text y la misma cabecera Content-Type), pero con el HTML de la página de gracias en Response Body.

8. Enviarlo de prueba

En modo prueba, n8n escucha una sola llamada cada vez que pulsas Execute workflow, así que vuelve a pulsarlo antes de enviar. Rellena el formulario como si fueras una clienta (en el vídeo es Marta) y pulsa Enviar pedido: te tiene que contestar la página de gracias.

Abre el Webhook y mira la rama POST. Dentro de body están los datos, cada uno con el name de su campo: nombre, telefono, pedido y recogida. Un formulario normal los manda en un formato que se llama form urlencoded, y n8n los deja directamente en body.

9. El aviso por Telegram

Pasa el ratón por la conexión entre POST y la página de gracias, pulsa el + y añade Telegram con la acción Send a text message. Elige la credencial de tu bot y pega tu chat id.

En el texto escribe Nuevo pedido y, para los datos, no hace falta teclear ninguna expresión: arrastra desde la izquierda cada campo de body y n8n la escribe por ti. El aviso del workflow descargable queda así:

Nuevo pedido

Nombre: {{ $json.body.nombre }}
Teléfono: {{ $json.body.telefono }}
Pedido: {{ $json.body.pedido }}
Recogida: {{ $json.body.recogida }}

Como en los capítulos anteriores, en Additional Fields quita la firma de n8n (Append n8n Attribution desactivado).

10. La dirección de verdad

Para usar la Production URL, publica el workflow con Publish. Ábrela en otra pestaña, como haría un cliente, rellena un pedido y envíalo: el cliente ve la página de gracias y a ti te llega al móvil el aviso con su nombre, su teléfono, lo que quiere y el día de recogida.

Test URL y Production URL

Test URLProduction URL
Para quéProbar mientras montas el workflowUsarlo de verdad con tus clientes
Cuándo funcionaDespués de pulsar Execute workflow, y solo para una llamadaMientras el workflow está publicado
Para quiénPara ti, desde el lienzoPara tus clientes o la aplicación que la llame

Seguridad: que no entre cualquiera

La Production URL es pública y cualquiera que la tenga puede mandarte datos. En un formulario para tus clientes eso es lo normal, pero si la dirección la va a llamar otra aplicación, ciérrala: en Authentication elige Header Auth y crea una credencial con una clave que solo conozca esa aplicación.

La otra regla es despublicar lo que no uses. Abre el menú de Publish, pulsa Unpublish y confírmalo: una dirección que no escucha no se puede usar contra ti.

Si te falla

  • Ves el código en vez del formulario: falta la cabecera Content-Type en el Respond to Webhook, o Respond With no está en Text.
  • La dirección dice que el webhook no está registrado: estás usando la Test URL sin haber pulsado Execute workflow, o la Production URL con el workflow sin publicar.
  • El aviso no llega: revisa el chat id y comprueba que le has escrito antes a tu bot.

Los capítulos del vídeo

MinutoQué se ve
1:06Qué es un webhook: GET y POST
1:41El nodo Webhook
2:04GET y POST a la vez
2:20Respond to Webhook y las dos salidas
2:36La respuesta del GET: el formulario
3:14Ver el formulario
3:42La respuesta del POST: gracias
4:12Los datos llegan en body
4:30El aviso por Telegram
5:06La dirección de verdad
5:30Que no entre cualquiera
6:01Si te falla

Descarga el formulario y el workflow

Un zip con el workflow del vídeo terminado, para pegarlo en tu lienzo con Ctrl+V, y los dos HTML sueltos (el formulario de la panadería y la página de gracias) por si quieres cambiarlos a tu gusto. Viene sin credenciales y con TU_CHAT_ID en el aviso, para que pongas los tuyos.

Recibirás un correo para confirmar tu dirección y, al confirmarla, otro con el zip adjunto. Si ya confirmaste en otra descarga de la serie, te llega directamente.

Preguntas frecuentes

¿Qué es un webhook en n8n?
Una dirección web de n8n que arranca el workflow cada vez que alguien la llama. Puede recibir llamadas GET, como cuando abres una página, y POST, como cuando envías un formulario.

¿Puede un mismo Webhook atender GET y POST?
Sí. En Settings activas Allow Multiple HTTP Methods, marcas GET y POST en HTTP Methods y el nodo pasa a tener una salida para cada método.

¿Por qué veo el código del formulario en vez de la página?
Porque el Respond to Webhook no lleva la cabecera Content-Type con el valor text/html; charset=utf-8. Añádela en Options > Response Headers y comprueba que Respond With está en Text.

¿Qué diferencia hay entre la Test URL y la Production URL?
La Test URL funciona después de pulsar Execute workflow y solo para una llamada; es para probar. La Production URL es la que compartes con tus clientes, y solo responde mientras el workflow está publicado.

¿Es seguro dejar el webhook abierto?
Para un formulario de clientes es lo normal, porque tiene que ser público. Si lo va a llamar otra aplicación, protégelo con Header Auth, y despublica los workflows que no uses.

Sigue la serie: ← capítulo 4: un resumen diario en Telegram · todos los capítulos de n8n desde cero · capítulo 6: Google Sheets →

Webhooks de verdad, con casos reales

En el curso de n8n de nacaIA Academy conectamos webhooks con tiendas online, pagos y formularios de varios pasos, lección a lección, junto con el resto del temario: de los primeros nodos a los agentes de IA y n8n en producción.

Ver el curso de n8n
JB

Jorge Benítez

Fundador de nacaIA · Especialista en automatizaciones con n8n y desarrollo de software

Ayudo a empresas a automatizar procesos con n8n, IA y desarrollo a medida. Más sobre mí →