flujos de trabajo de n8n
AI-Corporate puede iniciar flujos de trabajo de n8n mediante un webhook de producción. Esto es útil cuando quieres iniciar un proceso automatizado fuera de AI-Corporate, por ejemplo crear una tarea, actualizar un registro de CRM, iniciar un flujo de informes o reenviar datos de formularios a otro sistema.
Ejemplo: artículo de noticias en el sitio web de la empresa
Supón que la organización ha creado un flujo de trabajo de n8n que publica un artículo de noticias en el sitio web de WordPress de la empresa. En AI-Corporate solo rellenas un texto breve, por ejemplo unas frases sobre un caso de cliente, un evento o un hito interno. Con ese texto inicias el flujo de trabajo en n8n.
El flujo de trabajo de n8n puede luego, por ejemplo:
- Convertir el texto breve en un borrador pulido con un nodo LLM y un prompt que encaje bien con el tono de la organización.
- Generar una ilustración adecuada con un segundo nodo LLM, por ejemplo con los colores de marca y en un estilo ilustrativo reconocible.
- Dejar preparado o publicar el texto y la imagen como entrada de blog en el sitio web de WordPress.
Así colaboran AI-Corporate y n8n: en AI-Corporate el usuario elige el flujo de trabajo y rellena la información necesaria. Después n8n ejecuta los pasos automatizados y se asegura de que el artículo de noticias llegue correctamente al sitio web.
¿Qué hace esta integración?
Inicias un flujo de trabajo de n8n desde la vista general de flujos de trabajo. Solo el webhook de producción, POST y Header Auth son obligatorios. Los campos y las devoluciones desde n8n son opcionales y pueden configurarse de forma independiente.
- Si el flujo de trabajo no tiene campos, el webhook se invoca inmediatamente.
- Si el flujo de trabajo sí tiene campos, primero se abre un formulario. El usuario rellena los campos y luego inicia el flujo de trabajo con el botón.
- Los valores introducidos se envían como JSON en una solicitud POST al webhook de n8n.
- Sin devoluciones, AI-Corporate solo confirma que el flujo de trabajo se ha iniciado y continúa en n8n. La ventana no muestra spinner y puede cerrarse inmediatamente.
- Si se ha activado en el registro, el flujo de trabajo puede devolver pasos intermedios o el final a AI-Corporate.
- Si se ha activado la aprobación en el registro, el usuario puede hacer una elección directamente en AI-Corporate. n8n continúa después desde el paso de espera.
Crear un flujo de trabajo de n8n en AI-Corporate
Un administrador registra el flujo de trabajo de la siguiente manera:
- Ve a Asistentes.
- Abre la pestaña Asistentes de flujo de trabajo.
- En la tarjeta superior, haz clic en Nuevo flujo de trabajo y elige flujo de trabajo de n8n.
- Rellena el nombre del flujo de trabajo y la URL de producción de n8n.
- Configura Header authentication con un nombre de cabecera y un valor secreto de cabecera.
- En Devoluciones desde n8n, marca solo los elementos que realmente se hayan construido en este flujo de trabajo de n8n: progreso, aprobación y/o el final del flujo de trabajo.
- Añade opcionalmente los campos que deban enviarse en la solicitud POST.
- Guarda el flujo de trabajo.
Las tres opciones de devolución están desactivadas por defecto. Si más adelante añades callbacks o un paso de aprobación en n8n, actualiza también el registro en AI-Corporate. Así el diálogo sabe si solo debe mostrar una confirmación de inicio o esperar más señales.
Campos
- Los campos son opcionales.
- Cada campo tiene un nombre de campo y un tipo.
- Los tipos de campo compatibles son texto corto, texto largo, número, sí/no, fecha, una opción y varias opciones.
- En Una opción y Varias opciones añades las opciones disponibles. Una opción se muestra como una lista desplegable compacta; Varias opciones muestra casillas de verificación. El valor o valores elegidos se envían en el cuerpo JSON.
- Los campos obligatorios deben completarse antes de que el flujo de trabajo pueda iniciarse.
- El nombre del campo se convierte en la clave del cuerpo JSON que se envía a n8n.
Crear un flujo de trabajo compatible en n8n
- Crea un nuevo flujo de trabajo en n8n.
- Añade como primer nodo un Webhook.
- Dale a este nodo exactamente el nombre Start workflow. Las expresiones de ejemplo de abajo usan este nombre.
- Pon HTTP Method en POST.
- Elige Authentication: Header Auth y usa el mismo nombre de cabecera y valor secreto que en AI-Corporate.
- Pon Respond o Response Mode en Immediately.
- Copia la Production URL al campo n8n productie-url en AI-Corporate. No uses la URL de prueba con
/webhook-test/. - Activa el flujo de trabajo.
Los datos recibidos están bajo body; los datos técnicos de integración están bajo body.integration. No los elimines en un nodo Edit Fields, Set o Code.
Ejemplo del cuerpo JSON
Si defines campos con los nombres prompt, klantnaam, doelgroepen y datum, n8n recibirá por ejemplo este cuerpo JSON. AI-Corporate añade automáticamente el objeto integration.
{
"prompt": "Haz un resumen breve de la solicitud.",
"klantnaam": "Organización de ejemplo",
"doelgroepen": ["empleados", "clientes"],
"datum": "2026-09-22",
"integration": {
"runId": "chat-document-id",
"tenant": "default",
"callbackUrl": "https://europe-west1-ai-corporate.cloudfunctions.net/n8nWorkflowCallback",
"callbackToken": "token-temporal-para-esta-ejecución"
}
}
El callbacktoken pertenece a una sola ejecución. No lo guardes en registros, configuración fija ni otros sistemas.
Opcional: enviar progreso y finalización
AI-Corporate solo puede mostrar lo que n8n devuelve. Usa estos callbacks solo si en el registro has activado Informar progreso intermedio y/o Informar el final del flujo de trabajo.
Configura cada nodo callback de la siguiente manera:
-
Elige Method: POST.
-
En URL, haz clic en Expression y pega:
{{ $('Start workflow').first().json.body.integration.callbackUrl }} -
Elige Authentication: None.
-
Activa Send Headers y añade las cabeceras siguientes.
-
Activa Send Body y elige Body Content Type: JSON y Specify Body: Using JSON.
Usa estas cabeceras:
Authorization: Bearer {{ $('Start workflow').first().json.body.integration.callbackToken }}
Content-Type: application/json
Por ejemplo, envía este mensaje cuando empiece un paso:
{
"tenant": "{{ $('Start workflow').first().json.body.integration.tenant }}",
"runId": "{{ $('Start workflow').first().json.body.integration.runId }}",
"eventId": "documento-creado-iniciado",
"type": "progress",
"executionId": "{{ $execution.id }}",
"step": {
"id": "documento_crear",
"label": "Crear documento"
},
"message": "Se está creando el documento."
}
- Usa un
eventIdúnico para cada evento dentro de la misma ejecución. - Usa un
step.labelclaro en neerlandés; este texto se mostrará en la app. - Si has activado Informar el final del flujo de trabajo, envía siempre al final
type: "completed",type: "failed"otype: "rejected". - En
completed, añade opcionalmente un objetooutputcon el resultado. - En
failed, envía un mensaje de error comprensible. La ejecución también se detendrá en la app.
Opcional: solicitar aprobación en la app
Usa un nodo Wait de n8n con On Webhook Call cuando el flujo de trabajo solo pueda continuar después de una elección. Envía antes del nodo Wait un callback con type: "approval_required":
Configura el nodo Wait en Resume: On Webhook Call, HTTP Method: POST y Authentication: Header Auth. Selecciona la misma credencial Header Auth que en Start workflow. Añade después del nodo Wait un nodo Switch y comprueba allí {{ $json.body.decision }}.
{
"tenant": "{{ $('Start workflow').first().json.body.integration.tenant }}",
"runId": "{{ $('Start workflow').first().json.body.integration.runId }}",
"eventId": "control-documento",
"type": "approval_required",
"executionId": "{{ $execution.id }}",
"step": {
"id": "control_documento",
"label": "Revisar documento"
},
"approval": {
"question": "¿Puede continuar el flujo de trabajo?",
"context": "Revisa primero el documento generado.",
"resumeUrl": "{{ $execution.resumeUrl }}",
"choices": [
{ "value": "approve", "label": "Aprobar" },
{ "value": "reject", "label": "Rechazar" }
]
}
}
El usuario ve las opciones en la ventana de ejecución. Después de elegir, el nodo Wait recibe entre otras cosas decision. Después usa, por ejemplo, un nodo Switch para determinar el siguiente paso correcto.
Un valor de elección solo puede contener letras, números, _ y -. La etiqueta sí puede contener texto normal legible.
Configurar la URL de callback de producción
La URL de callback de producción para AI-Corporate es:
https://europe-west1-ai-corporate.cloudfunctions.net/n8nWorkflowCallback
No pegues esta URL como texto fijo en cada nodo callback. En el campo URL del nodo HTTP Request, elige Expression y usa:
{{ $('Start workflow').first().json.body.integration.callbackUrl }}
Así AI-Corporate proporciona automáticamente la URL de producción correcta en cada inicio. La URL fija anterior la usas durante las pruebas para comprobar que la expresión apunta a AI-Corporate y no a AI-School o AI-Public.
Las funciones triggerCustomN8nWorkflow, triggerN8nWorkflow y resumeN8nWorkflow las invoca la propia app. No necesitas configurar estas URLs en n8n.
Gestionar errores
Envía los errores esperados con un callback de tipo failed. Para errores inesperados de nodo, crea además un Error Workflow central:
-
Crea un nuevo flujo de trabajo con un nodo Error Trigger.
-
Añade después un nodo HTTP Request con Method: POST.
-
En URL, introduce esta URL fija de producción:
https://europe-west1-ai-corporate.cloudfunctions.net/n8nWorkflowExecutionFailed -
Elige Authentication: None y añade la cabecera
n8n-handihow-namecon el valor secreto estándar del administrador de la plataforma. -
Elige un cuerpo JSON y pega:
{
"executionId": "{{ $json.execution.id }}",
"workflowId": "{{ $json.workflow.id }}",
"workflowName": "{{ $json.workflow.name }}",
"lastNode": "{{ $json.execution.lastNodeExecuted }}",
"message": "{{ $json.execution.error.message }}"
}
- Activa el Error Workflow.
- Abre los ajustes del flujo de trabajo normal y selecciónalo en Error Workflow.
Envía inmediatamente después de Start workflow al menos un callback con executionId: "{{ $execution.id }}". Solo así AI-Corporate puede vincular un error inesperado con la ejecución correcta.
Limitaciones importantes
- Solo se admiten desencadenadores webhook.
- Solo se admiten URLs de webhook de producción.
- Se rechazan las URLs de prueba con
/webhook-test/. - Solo se admite POST.
- Solo se admite autenticación de cabecera genérica.
- El valor de la cabecera se trata como secreto en la aplicación.
- Los callbacktokens y las resume-url solo se procesan en el servidor y no están disponibles directamente para los usuarios.
- El tenant se determina en el servidor a partir del usuario conectado, no a partir de un valor enviado por el navegador.
Solucionar problemas
- 404 o webhook no registrado: activa el flujo de trabajo en n8n y usa la URL de producción.
- Error de autenticación: comprueba que el nombre y el valor de la cabecera sean exactamente iguales en ambos sistemas.
- Falta de datos: comprueba que los nombres de campo en la aplicación coincidan con las claves que espera n8n.
- No llega ninguna solicitud a n8n: comprueba que el flujo de trabajo empiece con un webhook trigger y use POST.
- La ventana de ejecución sigue girando: si has activado Informar el final del flujo de trabajo, comprueba que n8n envíe un callback final
completed,failedorejected. Si no esperas devoluciones, desactiva las tres opciones en el registro. - No se ve el progreso: comprueba que Informar progreso intermedio esté activado en el registro, que se conserve el objeto
integrationy que cada callback tenga uneventIdúnico. - Los botones de aprobación no funcionan: comprueba el nodo Wait,
resumeUrl, la autenticación de cabecera y los caracteres permitidos enchoices[].value.