formbasedocs
Ir a la appApp

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 TriggerLas 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 OutcomeEl 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:

EventSe ejecuta cuandoLleva
Request CompletedEl destinatario envía el formulario.La solicitud, el resultado y cada respuesta.
Request ExpiredLa solicitud alcanza su fecha de expiración sin responder.Solo la solicitud.
Request CanceledAlguien 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:

Un nodo Switch llamado Outcome: la entrada muestra data › request con outcome approve, externalId approval-8 y el destinatario Grace Hansen; las reglas de enrutamiento comparan {{ $json.data.request.outcome }} con approve y changes, cada una con una salida renombrada

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 terminada: When clicking Execute workflow, Create request, Wait for the answer y un Switch llamado Outcome, todos en verde, con 1 elemento saliendo por la salida approve
  • 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/.

Siguiente