Guías · n8n (autoalojado)
Actúa según el resultado de una solicitud en n8n
n8n puede enterarse del resultado de una solicitud de dos formas: un formbase Trigger que se ejecuta para cada solicitud a un formulario, o un nodo Wait que pausa el flujo de trabajo que creó la solicitud. Ambas terminan en un Switch según approve, decline o changes.
Last checked
Necesitas una credencial de formbase en n8n, y tu n8n debe ser accesible desde internet por HTTPS; consulta Instala el nodo de formbase en n8n. Para ramificar según un veredicto, el formulario necesita una pregunta de decisión. Esta guía usa un formulario Approval con una.
| Úsalo cuando | |
|---|---|
| formbase Trigger | Las solicitudes al formulario se envían desde cualquier sitio: el panel, la API, un agente u otro flujo de trabajo. Un flujo de trabajo publicado las gestiona todas. |
| Wait for the Outcome | El flujo de trabajo que crea la solicitud debe continuar con la respuesta, conservando todo lo que sabía antes, como el registro con el que estaba trabajando. |
Inicia un flujo de trabajo desde el disparador
1. Elige el evento
Añade un formbase Trigger, elige la credencial y el formulario, y elige uno de los eventos de solicitud bajo Event:
| Event | Se ejecuta cuando | Lleva |
|---|---|---|
| Request Completed | El destinatario envía el formulario. | La solicitud, el resultado y cada respuesta. |
| Request Expired | La solicitud alcanza su fecha de expiración sin responder. | Solo la solicitud. |
| Request Canceled | Alguien cancela la solicitud, desde el panel, la API o un nodo Cancel request, o formbase la cancela porque el formulario se movió a la papelera. | La solicitud y el motivo de cancelación. |
2. Pruébalo con una solicitud real
Una solicitud de prueba nunca inicia un disparador de solicitud, así que envía una real con Delivery puesto en None, como en Envía una solicitud desde un flujo de trabajo de n8n, y abre su enlace tú mismo. Luego haz clic en Execute step y completa el formulario en menos de dos minutos.
El evento lleva un objeto data.request junto a las respuestas. Su outcome es approve,
decline o changes, y su externalId es el ID que fijaste, así que puedes encontrar el registro del
que trataba la solicitud. Cada campo está en el payload del callback.
Los eventos de expiración y cancelación son difíciles de capturar con Execute step. Publica el flujo de trabajo y comprueba Executions en su lugar.
3. Ramifica según el resultado
Añade un nodo Switch con una regla de enrutamiento por veredicto. Cada regla compara
{{ $json.data.request.outcome }} con un valor; activa Rename Output para nombrar la rama según él:

Ramifica según data.request.outcome en lugar de data.answers.decision: falta, en vez de tener otro valor, cuando
la solicitud expiró o se canceló. Compara con los valores, nunca con las etiquetas de data.display: una etiqueta cambia
cuando renombras la opción o el destinatario responde en otro idioma.
Conecta un nodo a cada rama, y luego haz clic en Publish del flujo de trabajo. A partir de entonces, cada solicitud completada al formulario lo ejecuta.
Espera el resultado en el mismo flujo de trabajo
Aquí el flujo de trabajo que envía la solicitud se pausa hasta que el destinatario responde, y luego continúa. Requiere tres cambios en el flujo de trabajo de Envía una solicitud desde un flujo de trabajo de n8n.
1. Activa Wait for the Outcome
En el nodo Create request, activa Wait for the Outcome. El nodo envía a formbase la URL de reanudación de esta ejecución como el callback de la solicitud. Deja Callback URL vacío; el nodo rechaza ambos a la vez.
Cada ejecución tiene su propia URL de reanudación, así que un External ID reutilizado de una ejecución anterior falla. Incluye
{{ $execution.id }} en él, o déjalo vacío.
2. Añade un nodo Wait
Añade un nodo Wait justo después, con Resume puesto en On Webhook Call y el método HTTP
dejado en POST.
3. Ramifica según el evento
Añade un Switch después del nodo Wait. El nodo Wait pone el evento bajo body, así que compara
{{ $json.body.data.request.outcome }}. Para distinguir una solicitud completada de una expirada o cancelada, compara
{{ $json.body.type }} con request.completed, request.expired o request.canceled.
Ejecuta el flujo de trabajo. La ejecución se detiene en el nodo Wait hasta que el destinatario envía el formulario, y luego se reanuda por la rama correspondiente:

Una ejecución desde el editor también espera una respuesta real. Test Mode funciona aquí: el callback de una solicitud de prueba igualmente reanuda el flujo de trabajo.
Una solicitud expira a los 30 días a menos que fijes Expires At, y la expiración reanuda la ejecución con
request.expired. Fija Expires At para terminar la espera antes.El nodo Wait no comprueba la cabecera
X-formbase-Signature; depende de que la URL de reanudación sea difícil de adivinar. Si eso no es suficiente, usa el formbase Trigger, que comprueba cada evento.
Si nada se ejecuta
Era una solicitud de prueba. Una solicitud creada con Test Mode activado, o con Pruébalo tú mismo, nunca inicia un disparador de solicitud. Solo se dispara su callback.
La solicitud era de otro formulario. El disparador escucha el formulario que elegiste en él.
El flujo de trabajo no está publicado, o su credencial llega a otro espacio de trabajo. Consulta las comprobaciones en la guía de enlace público.
Create request falla con callbackUrl is not allowed.
Tu n8n entrega una URL de reanudación
http://o privada. Consulta Dile a n8n su dirección pública.El nodo Wait nunca se reanuda. formbase no puede alcanzar la URL de reanudación, por ejemplo porque el túnel está caído o el proxy bloquea
/webhook-waiting/.