# Actúa según el resultado de una solicitud en n8n

Inicia un flujo de trabajo cuando una solicitud se completa, expira o se cancela, o pausa el flujo de trabajo que la envió hasta que el destinatario responde, y ramifica según el veredicto.

## 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.

<p>
  Necesitas una <a href="/es/guides/n8n/connect">credencial de formbase en n8n</a>, y tu n8n debe ser accesible desde internet por HTTPS;{' '}
  consulta <a href="/es/guides/n8n/install-the-node">Instala el nodo de formbase en n8n</a>. Para ramificar según un veredicto, el
  formulario necesita una <a href="/es/requests/decisions-and-approvals">pregunta de decisión</a>. Esta guía usa un formulario Approval con
  una.
</p>

<h2 id="trigger">Inicia un flujo de trabajo desde el disparador</h2>

<h3 id="pick-the-event">1. Elige el evento</h3>

<p>
  Añade un <strong>formbase Trigger</strong>, elige la credencial y el formulario, y elige uno de los eventos de solicitud bajo{' '}
  <strong>Event</strong>:
</p>

<h3 id="test-the-trigger">2. Pruébalo con una solicitud real</h3>

<p>
  Una solicitud de prueba nunca inicia un disparador de solicitud, así que envía una real con Delivery puesto en None, como en{' '}
  <a href="/es/guides/n8n/send-a-request">Envía una solicitud desde un flujo de trabajo de n8n</a>, y abre su enlace tú mismo. Luego haz{' '}
  clic en <strong>Execute step</strong> y completa el formulario en menos de dos minutos.
</p>

<p>
  El evento lleva un objeto <strong>data.request</strong> junto a las respuestas. Su <code>outcome</code> es <code>approve</code>,{' '}
  <code>decline</code> o <code>changes</code>, y su <code>externalId</code> es el ID que fijaste, así que puedes encontrar el registro del{' '}
  que trataba la solicitud. Cada campo está en el <a href="/es/requests/callbacks#payload">payload del callback</a>.
</p>

<p>
  Los eventos de expiración y cancelación son difíciles de capturar con <strong>Execute step</strong>. Publica el flujo de trabajo y{' '}
  comprueba <strong>Executions</strong> en su lugar.
</p>

<h3 id="branch-on-the-outcome">3. Ramifica según el resultado</h3>

<p>
  Añade un nodo <strong>Switch</strong> con una regla de enrutamiento por veredicto. Cada regla compara{' '}
  <code>{'{{ $json.data.request.outcome }}'}</code> con un valor; activa <strong>Rename Output</strong> para nombrar la rama según él:
</p>

<p>
  Ramifica según <code>data.request.outcome</code> en lugar de <code>data.answers.decision</code>: falta, en vez de tener otro valor, cuando
  la solicitud expiró o se canceló. Compara con los valores, nunca con las etiquetas de <code>data.display</code>: una etiqueta cambia
  cuando renombras la opción o el destinatario responde en otro idioma.
</p>

<p>
  Conecta un nodo a cada rama, y luego haz clic en <strong>Publish</strong> del flujo de trabajo. A partir de entonces, cada solicitud{' '}
  completada al formulario lo ejecuta.
</p>

<h2 id="wait-for-the-outcome">Espera el resultado en el mismo flujo de trabajo</h2>

<p>
  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 <a href="/es/guides/n8n/send-a-request">Envía una solicitud desde un flujo de trabajo de n8n</a>.
</p>

<h3 id="turn-on-wait">1. Activa Wait for the Outcome</h3>

<p>
  En el nodo <strong>Create request</strong>, activa <strong>Wait for the Outcome</strong>. El nodo envía a formbase la URL de reanudación{' '}
  de esta ejecución como el callback de la solicitud. Deja <strong>Callback URL</strong> vacío; el nodo rechaza ambos a la vez.
</p>

<p>
  Cada ejecución tiene su propia URL de reanudación, así que un External ID reutilizado de una ejecución anterior falla. Incluye{' '}
  <code>{'{{ $execution.id }}'}</code> en él, o déjalo vacío.
</p>

<h3 id="add-a-wait-node">2. Añade un nodo Wait</h3>

<p>
  Añade un nodo <strong>Wait</strong> justo después, con <strong>Resume</strong> puesto en <strong>On Webhook Call</strong> y el método HTTP
  dejado en <code>POST</code>.
</p>

<h3 id="branch-on-the-event">3. Ramifica según el evento</h3>

<p>
  Añade un <strong>Switch</strong> después del nodo Wait. El nodo Wait pone el evento bajo <code>body</code>, así que compara{' '}
  <code>{'{{ $json.body.data.request.outcome }}'}</code>. Para distinguir una solicitud completada de una expirada o cancelada, compara{' '}
  <code>{'{{ $json.body.type }}'}</code> con <code>request.completed</code>, <code>request.expired</code> o <code>request.canceled</code>.
</p>

<p>
  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:
</p>

<ul>
  <li>
    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.
  </li>
  <li>
    Una solicitud expira a los 30 días a menos que fijes <strong>Expires At</strong>, y la expiración reanuda la ejecución con{' '}
    <code>request.expired</code>. Fija <strong>Expires At</strong> para terminar la espera antes.
  </li>
  <li>
    El nodo Wait no comprueba la cabecera <code>X-formbase-Signature</code>; 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.
  </li>
</ul>

<h2 id="troubleshooting">Si nada se ejecuta</h2>

<ul>
  <li>
    <strong>Era una solicitud de prueba.</strong> Una solicitud creada con Test Mode activado, o con <strong>Pruébalo tú mismo</strong>,{' '}
    nunca inicia un disparador de solicitud. Solo se dispara su <a href="/es/requests/callbacks">callback</a>.
  </li>
  <li>
    <strong>La solicitud era de otro formulario.</strong> El disparador escucha el formulario que elegiste en él.
  </li>
  <li>
    <strong>El flujo de trabajo no está publicado, o su credencial llega a otro espacio de trabajo.</strong> Consulta las comprobaciones en{' '}
    <a href="/es/guides/n8n/public-link-submissions#troubleshooting">la guía de enlace público</a>.
  </li>
  <li>
    <strong>
      Create request falla con <em>callbackUrl is not allowed</em>.
    </strong>{' '}
    Tu n8n entrega una URL de reanudación <code>http://</code> o privada. Consulta{' '}
    <a href="/es/guides/n8n/install-the-node#public-address">Dile a n8n su dirección pública</a>.
  </li>
  <li>
    <strong>El nodo Wait nunca se reanuda.</strong> formbase no puede alcanzar la URL de reanudación, por ejemplo porque el túnel está caído
    o el proxy bloquea <code>/webhook-waiting/</code>.
  </li>
</ul>

<h2 id="next">Siguiente</h2>

<div class="not-prose grid gap-3 sm:grid-cols-2 mb-8">
  - [Busca, recuerda y cancela solicitudes en n8n](/es/guides/n8n/manage-requests) — Busca una solicitud por External ID, recuerda al destinatario, o retírala.
  - [Decisiones y aprobaciones](/es/requests/decisions-and-approvals) — La pregunta de decisión y sus tres valores.
</div>
