flujos de n8n
AI-Corporate puede iniciar flujos de n8n a través de 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 pasar datos de un formulario a otro sistema.
Ejemplo: noticia en el sitio web de la empresa
Supón que la organización ha creado un flujo de n8n que publica una noticia en el sitio web WordPress de la empresa. En AI-Corporate solo introduces un breve texto, por ejemplo unas frases sobre un caso de cliente, un evento o un hito interno. Con ese texto inicias el flujo en n8n.
El flujo de n8n puede hacer luego, por ejemplo:
- Tomar el texto corto y convertirlo en un borrador con una nodo LLM y un prompt que encaje con el tono de la organización.
- Crear una ilustración adecuada con una segunda nodo LLM, por ejemplo en los colores de la marca y en un estilo ilustrativo reconocible.
- Preparar o publicar el texto e la imagen como entrada de blog en el sitio de WordPress.
Así trabajan AI-Corporate y n8n juntos: en AI-Corporate el usuario elige el flujo y llena la información necesaria. Luego n8n ejecuta los pasos automatizados y se asegura de que la noticia aparezca correctamente en el sitio web.
¿Qué hace esta integración?
Inicias un flujo de n8n desde la vista general de flujos. Solo el webhook de producción, POST y la autenticación por encabezados son obligatorios. Campos y retroalimentaciones desde n8n son opcionales y pueden configurarse de forma independiente.
- Si el flujo no tiene campos, se invoca el webhook de inmediato.
- Si el flujo tiene campos, primero se abre un formulario. El usuario completa los campos y luego inicia el flujo con el botón.
- Los valores introducidos se envían como JSON en una solicitud POST al webhook de n8n.
- Sin retroalimentaciones, AI-Corporate solo confirma que el flujo se ha iniciado y continúa en n8n. La ventana no muestra un spinner y puede cerrarse de inmediato.
- Si esto está activado en el registro, el flujo puede enviar de vuelta pasos intermedios o el final a AI-Corporate.
- Si la aprobación está activada en el registro, el usuario puede elegir directamente en AI-Corporate. n8n continúa desde el paso que está en espera.
Crear flujo de n8n en AI-Corporate
Un administrador registra el flujo de la siguiente manera:
- Ve a Asistentes.
- Abre Flujos de trabajo.
- Elige Nuevo flujo de n8n.
- Escribe el nombre del flujo y la URL de producción de n8n.
- Configura Autenticación por encabezados con un nombre de encabezado y un valor secreto de encabezado.
- Marca bajo Retroalimentaciones desde n8n solo los elementos que realmente se construyen en este flujo de n8n: progreso, aprobación y/o final del flujo.
- Añade, si es necesario, los campos que deben enviarse en la solicitud POST.
- Guarda el flujo.
Las tres opciones de retroalimentación están desactivadas por defecto. Si más tarde añades callbacks o un paso de aprobación en n8n, actualiza también el registro en AI-Corporate. El diálogo sabrá así si solo debe mostrar una confirmación de inicio o seguir esperando señales.
Campos
- Los campos son opcionales.
- Cada campo tiene un nombre de campo y un tipo.
- Los tipos de campo soportados son texto corto, texto largo, número, sí/no, fecha, una selección y múltiples selecciones.
- En Una selección y Múltiples selecciones añade las opciones disponibles. Una selección se muestra como una lista desplegable; Múltiples selecciones muestra casillas de verificación. El valor o los valores elegidos se envían en el cuerpo JSON.
- Los campos obligatorios deben completarse antes de que el flujo pueda iniciarse.
- El nombre del campo se convierte en la clave en el cuerpo JSON que se envía a n8n.
Crear flujo compatible en n8n
- Crea en n8n un flujo nuevo.
- Añade como primera nodo un Webhook.
- Dale a este nodo exactamente el nombre Start workflow. Las expresiones de ejemplo a continuación usan este nombre.
- Configura HTTP Method en POST.
- Elige Authentication: Header Auth y utiliza el mismo nombre de encabezado y valor secreto que en AI-Corporate.
- Configura Respond o Response Mode en Immediately.
- Copia la Production URL en el campo n8n producción-url en AI-Corporate. No uses la URL de prueba con
/webhook-test/. - Activa el flujo.
Los datos recibidos están bajo body; los datos de integración técnica están bajo body.integration. No los elimines en un Nodo Edit Fields, Set o Code.
Ejemplo de la JSON body
Si defines campos con los nombres prompt, klantnaam, doelgroepen y datum, n8n recibirá, por ejemplo, este JSON body. AI-Corporate añade automáticamente el objeto integration.
{
"prompt": "Haz un resumen corto de la solicitud.",
"klantnaam": "Organización de ejemplo",
"doelgroepen": ["empleados", "clientes"],
"datum": "2026-09-22",
"integration": {
"runId": "document-id",
"tenant": "default",
"callbackUrl": "https://europe-west1-ai-corporate.cloudfunctions.net/n8nWorkflowCallback",
"callbackToken": "token-temporal-para-ejecución-actual"
}
}
El callback-token pertenece a una única ejecución. No lo guardes en logs, configuraciones fijas ni otros sistemas.
Opcional: enviar progreso y finalización
AI-Corporate solo puede mostrar lo que n8n retroalimente. Usa estos callbacks solo si en el registro has activado Progreso intermedio reportado y/o Final de flujo reportado.
Configura cada nodo de 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 los siguientes encabezados.
-
Activa Send Body y elige Body Content Type: JSON y Specify Body: Using JSON.
Usa estos encabezados:
Authorization: Bearer {{ $('Start workflow').first().json.body.integration.callbackToken }}
Content-Type: application/json
Por ejemplo, envía este mensaje cuando un paso comienza:
{
"tenant": "{{ $('Start workflow').first().json.body.integration.tenant }}",
"runId": "{{ $('Start workflow').first().json.body.integration.runId }}",
"eventId": "documento-creacion-iniciada",
"type": "progress",
"executionId": "{{ $execution.id }}",
"step": {
"id": "documento_crear",
"label": "Crear documento"
},
"message": "El documento se está creando."
}
- Usa para cada evento dentro de la misma ejecución un
eventIdúnico. - Usa un
step.labelclaro en español; este texto se mostrará en la app. - Si has activado Final de flujo reportado, envía al final siempre
type: "completed",type: "failed"otype: "rejected". - Si usas
completed, añade opcionalmente un objetooutputcon el resultado. - Si es
failed, acompaña con un mensaje de error comprensible. La ejecución también se detiene en la app.
Opcional: solicitar aprobación en la app
Usa un nodo n8n Wait con On Webhook Call cuando el flujo no puede continuar hasta que haya una decisió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 las mismas credenciales de Header Auth que en Start workflow. Después del nodo Wait añade un nodo Switch y verifica dentro {{ $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": "Controlar documento"
},
"approval": {
"question": "¿Puede continuar el flujo?",
"context": "Primero revisa el documento generado.",
"resumeUrl": "{{ $execution.resumeUrl }}",
"choices": [
{ "value": "approve", "label": "Aprobar" },
{ "value": "reject", "label": "Rechazar" }
]
}
}
El usuario verá las opciones en la ventana de ejecución. Tras una decisión, la Wait node recibirá entre otras cosas decision. Después usa, por ejemplo, un nodo Switch para determinar el siguiente paso.
Un valor de elección solo puede contener letras, números, _ y -. La etiqueta puede contener texto legible normal.
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 de callback. Elige en el campo URL del nodo HTTP Request la opción Expression y usa:
{{ $('Start workflow').first().json.body.integration.callbackUrl }}
AI-Corporate proporcionará automáticamente la URL de producción correcta para cada inicio. La URL fija anterior se usa para probar que la expresión se refiera a AI-Corporate y no a AI-School o AI-Public.
Las llamadas triggerCustomN8nWorkflow, triggerN8nWorkflow y resumeN8nWorkflow las llama la propia app. No necesitas configurarlas en n8n.
Manejo de errores
Devuelve errores esperados con un callback de tipo failed. Para errores de nodo inesperados, crea además un flujo de errores central:
-
Crea un nuevo flujo con un nodo Error Trigger.
-
Luego añade un nodo HTTP Request con Method: POST.
-
En URL usa esta URL de producción fija:
https://europe-west1-ai-corporate.cloudfunctions.net/n8nWorkflowExecutionFailed -
Selecciona Authentication: None y añade el encabezado
n8n-handihow-namecon el valor secreto por defecto 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 flujo de errores.
- Abre la configuración del flujo normal y selecciónalo en Error Workflow.
Después de Start workflow envía al menos un callback con executionId: "{{ $execution.id }}". Solo así AI-Corporate puede vincular un error inesperado a la ejecución correcta.
Importantes limitaciones
- Solo se admiten disparadores de webhook.
- Solo se admiten URLs de webhook de producción.
- Se rechazan webhooks de prueba con
/webhook-test/. - Solo se admite POST.
- Solo se admite autenticación por encabezados genéricos.
- El valor del encabezado se maneja como secreto en la aplicación.
- Los tokens de callback y las URLs de reanudación se procesan solo en el servidor y no están disponibles directamente para los usuarios.
- El tenant se determina en el servidor a partir del usuario que ha iniciado sesión, no a partir de un valor que envíe el navegador.
Solución de problemas
- 404 o webhook no registrado: activa el flujo en n8n y usa la URL de producción. -Error de autenticación: verifica que el nombre de encabezado y el valor sean exactamente iguales en ambos sistemas.
- Datos faltantes: verifica que los nombres de campo en la aplicación coincidan con las claves que espera n8n.
- Sin solicitud en n8n: verifica que el flujo comience con un disparador de webhook y que use POST.
- La ventana de ejecución sigue girando: si activaste Final de flujo reportado, verifica si n8n envía un callback final
completed,failedorejected. Si no esperas retroalimentaciones, desactiva las tres opciones en el registro. - No hay progreso visible: verifica si Progreso intermedio reportado está activo en el registro, o si el objeto
integrationse mantiene y si cada callback tiene uneventIdúnico. - Los botones de aprobación no funcionan: verifica el nodo Wait, la
resumeUrl, la autenticación por encabezados y los caracteres permitidos enchoices[].value.