n8n workflows
AI-Corporate peut lancer des workflows n8n via un webhook de production. Cela est utile lorsque vous souhaitez démarrer un processus automatisé en dehors d’AI-Corporate, par exemple la création d’une tâche, la mise à jour d’un enregistrement CRM, le démarrage d’un flux de rapport ou le transfert des données d’un formulaire vers un autre système.
Exemple : article de presse sur le site d’entreprise
Supposons que l’organisation ait créé un workflow n8n qui publie un article sur le site WordPress de l’entreprise. Dans AI-Corporate, vous ne saisissez alors qu’un court extrait de texte, par exemple quelques phrases sur une étude de cas client, un événement ou un jalon interne. Avec ce texte, vous démarrez le workflow dans n8n.
Le workflow n8n peut ensuite, par exemple :
- Transformer le court texte en une ébauche bien rédigée avec un nœud LLM et une invite adaptée au ton de l’organisation.
- Faire créer une illustration adaptée avec un second nœud LLM, par exemple dans les couleurs de marque et dans un style illustratif identifiable.
- Préparer ou publier le texte et l’image en tant qu’article de blog sur le site WordPress.
C’est ainsi que AI-Corporate et n8n travaillent ensemble : dans AI-Corporate, l’utilisateur choisit le workflow et renseigne les informations nécessaires. n8n exécute ensuite les étapes automatisées et assure que l’article de presse soit correctement publié sur le site.
Que fait cette intégration ?
Vous démarrez un workflow n8n depuis la vue d’ensemble du workflow. Seul le webhook de production, POST et l’authentification par l’en-tête sont obligatoires. Les champs et les retours depuis n8n sont facultatifs et peuvent être configurés indépendamment les uns des autres.
- Si le workflow n’a pas de champs, le webhook est appelé immédiatement.
- S’il y a des champs, un formulaire s’ouvre d’abord. L’utilisateur remplit les champs et démarre ensuite le workflow avec le bouton.
- Les valeurs renseignées sont envoyées en JSON dans une requête POST au webhook n8n.
- Sans retours, AI-Corporate confirme simplement que le workflow a été démarré et continue dans n8n. La fenêtre n’affiche pas de spinner et peut être fermée immédiatement.
- Si cela a été activé lors de l’enregistrement, le workflow peut renvoyer des étapes intermédiaires ou la fin vers AI-Corporate.
- Si l’approbation est activée lors de l’enregistrement, l’utilisateur peut faire un choix directement dans AI-Corporate. n8n poursuit ensuite à partir de l’étape en attente.
Créer un workflow n8n dans AI-Corporate
Un administrateur enregistre le workflow comme suit :
- Aller à Assistants.
- Ouvrir Workflows.
- Choisir Nouveau workflow n8n.
- Saisir le nom du workflow et l’URL de production n8n.
- Configurer Header authentication avec un nom d’en-tête et une valeur secrète d’en-tête.
- Dans Retour des n8n sous, n’activer que les éléments réellement implémentés dans ce workflow n8n : progression, approbation et/ou fin du workflow.
- Ajouter éventuellement les champs qui doivent être envoyés dans la requête POST.
- Enregistrer le workflow.
Les trois options de retour sont désactivées par défaut. Si vous ajoutez plus tard des callbacks ou une étape d’approbation dans n8n, mettez également à jour l’enregistrement dans AI-Corporate. La dialoguer saura ainsi s’il faut afficher uniquement une confirmation de démarrage ou attendre d’autres signaux.
Champs
- Les champs sont optionnels.
- Chaque champ a un nom de champ et un type.
- Les types de champ pris en charge sont texte court, texte long, nombre, oui/non, date, une sélection et plusieurs sélections.
- Pour Une sélection et Plusieurs sélections, ajoutez les options disponibles. Une sélection s’affiche sous forme de liste de choix compacte ; Plusieurs sélections affiche des cases à cocher. La ou les valeurs choisies sont envoyées dans le corps JSON.
- Les champs obligatoires doivent être renseignés avant de pouvoir démarrer le workflow.
- Le nom du champ devient la clé dans le corps JSON envoyé à n8n.
Créer un workflow compatible dans n8n
- Créez un nouveau workflow dans n8n.
- Ajoutez en premier nœud un Webhook.
- Donnez exactement à ce nœud le nom Start workflow. Les expressions d’exemple ci-dessous utilisent ce nom.
- Définir HTTP Method sur POST.
- Choisir Authentication: Header Auth et utiliser le même nom d’en-tête et la même valeur secrète que dans AI-Corporate.
- Définir Respond ou Response Mode sur Immediately.
- Copier l’URL de production dans le champ n8n production URL dans AI-Corporate. N’utilisez pas l’URL de test avec
/webhook-test/. - Activer le workflow.
Les données reçues se trouvent sous body ; les données d’intégration techniques sous body.integration. Ne les supprimez pas dans une nœud Edit Fields, Set ou Code.
Exemple de corps JSON
Si vous définissez des champs avec les noms prompt, klantnaam, doelgroepen et datum, n8n recevra par exemple ce corps JSON. AI-Corporate ajoute automatiquement l’objet integration.
{
"prompt": "Maak een korte samenvatting van de aanvraag.",
"klantnaam": "Voorbeeldorganisatie",
"doelgroepen": ["medewerkers", "klanten"],
"datum": "2026-09-22",
"integration": {
"runId": "chat-document-id",
"tenant": "default",
"callbackUrl": "https://europe-west1-ai-corporate.cloudfunctions.net/n8nWorkflowCallback",
"callbackToken": "tijdelijk-token-voor-deze-uitvoering"
}
}
Le token de rappel (callback) est propre à une exécution. Ne pas le stocker dans les logs, les configurations fixes ou d’autres systèmes.
Optionnel : renvoyer les progrès et l’achèvement
AI-Corporate ne peut afficher que ce que retourne n8n. Utilisez ces callbacks uniquement si vous avez activé lors de l’enregistrement Reporter l’avancement intermédiaire et/ou Reporter la fin du workflow.
Configurez chaque nœud callback comme suit :
-
Choisir Method: POST.
-
Cliquer sur URL sur Expression et coller :
{{ $('Start workflow').first().json.body.integration.callbackUrl }} -
Choisir Authentication: None.
-
Activer Send Headers et ajouter les en-têtes ci-dessous.
-
Activer Send Body et choisir Body Content Type: JSON et Specify Body: Using JSON.
Utilisez ces en-têtes :
Authorization: Bearer {{ $('Start workflow').first().json.body.integration.callbackToken }}
Content-Type: application/json
Par exemple, envoyez ce message lorsqu’une étape commence :
{
"tenant": "{{ $('Start workflow').first().json.body.integration.tenant }}",
"runId": "{{ $('Start workflow').first().json.body.integration.runId }}",
"eventId": "document-maken-gestart",
"type": "progress",
"executionId": "{{ $execution.id }}",
"step": {
"id": "document_maken",
"label": "Document maken"
},
"message": "Le document est en cours de création."
}
- Pour chaque événement au sein de la même exécution, utilisez un identifiant d’événement unique
eventId. - Utilisez un label clair en néerlandais
step.label; ce texte sera affiché dans l’application. - Si vous avez activé Reporter la fin du workflow, envoyez toujours à la fin
type: "completed",type: "failed"outype: "rejected". - Ajoutez éventuellement un objet
outputavec le résultat danscompleted. - En cas de
failed, envoyez un message d’erreur explicite. L’exécution s’arrête également dans l’application.
Optionnel : demande d’approbation dans l’appli
Utilisez un nœud n8n Wait avec On Webhook Call lorsque le workflow ne peut continuer qu’après un choix. Envoyez avant le nœud Wait un callback avec type: "approval_required" :
Configurez le nœud Wait sur Resume: On Webhook Call, HTTP Method: POST et Authentication: Header Auth. Sélectionnez les mêmes identifiants de Header Auth que pour Start workflow. Ajoutez après le nœud Wait un nœud Switch et contrôlez {{ $json.body.decision }} dedans.
{
"tenant": "{{ $('Start workflow').first().json.body.integration.tenant }}",
"runId": "{{ $('Start workflow').first().json.body.integration.runId }}",
"eventId": "controle-document",
"type": "approval_required",
"executionId": "{{ $execution.id }}",
"step": {
"id": "controle_document",
"label": "Document controleren"
},
"approval": {
"question": "Mag de workflow doorgaan?",
"context": "Controleer eerst het gegenereerde document.",
"resumeUrl": "{{ $execution.resumeUrl }}",
"choices": [
{ "value": "approve", "label": "Goedkeuren" },
{ "value": "reject", "label": "Afwijzen" }
]
}
}
L’utilisateur voit les choix dans la fenêtre d’exécution. Après un choix, la Wait node reçoit notamment decision. Utilisez ensuite par exemple un nœud Switch pour déterminer la suite appropriée.
Une valeur de choix peut contenir uniquement des lettres, chiffres, _ et - ; le label peut contenir du texte lisible.
Définir l’URL de rappel de production
L’URL de rappel de production pour AI-Corporate est :
https://europe-west1-ai-corporate.cloudfunctions.net/n8nWorkflowCallback
Ne collez pas cette URL comme texte fixe dans chaque nœud callback. Choisissez dans le champ URL du nœud HTTP Request l’option Expression et utilisez :
{{ $('Start workflow').first().json.body.integration.callbackUrl }}
AI-Corporate fournit ainsi, à chaque démarrage, l’URL de production correcte. L’URL fixe ci-dessus est utilisée lors des tests pour vérifier que l’expression pointe vers AI-Corporate et non vers AI-School ou AI-Public.
Les callables triggerCustomN8nWorkflow, triggerN8nWorkflow et resumeN8nWorkflow sont appelés par l’application elle-même. Vous n’avez pas besoin de les configurer dans n8n.
Gestion des erreurs
Envoyez des erreurs prévues avec un callback de type failed. Pour les erreurs inattendues des nœuds, créez également un Flux d’Erreur central :
-
Créez un nouveau workflow avec un nœud Error Trigger.
-
Ajoutez ensuite un nœud HTTP Request avec Method: POST.
-
Dans URL, saisissez cette URL de production fixe :
https://europe-west1-ai-corporate.cloudfunctions.net/n8nWorkflowExecutionFailed -
Choisir Authentication: None et ajouter l’en-tête
n8n-handihow-nameavec la valeur secrète par défaut de l’administrateur de la plateforme. -
Choisir un corps JSON et coller :
{
"executionId": "{{ $json.execution.id }}",
"workflowId": "{{ $json.workflow.id }}",
"workflowName": "{{ $json.workflow.name }}",
"lastNode": "{{ $json.execution.lastNodeExecuted }}",
"message": "{{ $json.execution.error.message }}"
}
- Activer le Flux d’Erreur.
- Ouvrir les paramètres du workflow ordinaire et le sélectionner dans Error Workflow.
Envoyez immédiatement après Start workflow au moins un callback avec executionId: "{{ $execution.id }}". Sinon, AI-Corporate ne pourra pas relier une erreur inattendue à l’exécution correcte.
Limitations importantes
- Seuls les déclencheurs webhook sont pris en charge.
- Seuls les URLs de webhook de production sont pris en charge.
- Les webhooks de test avec
/webhook-test/sont refusés. - Seule la méthode POST est prise en charge.
- L’authentification par header générique est prise en charge.
- La valeur de l’en-tête est traitée comme secrète dans l’application.
- Les tokens de rappel et les URLs de reprise ne sont traités que côté serveur et ne sont pas directement accessibles pour les utilisateurs.
- Le tenant est déterminé côté serveur à partir de l’utilisateur connecté, et non à partir d’une valeur envoyée par le navigateur.
Dépannage
- 404 ou webhook non enregistré : activez le workflow dans n8n et utilisez l’URL de production.
- Erreur d’authentification : vérifiez que le nom d’en-tête et la valeur sont exactement les mêmes dans les deux systèmes.
- Données manquantes : vérifiez que les noms des champs dans l’application correspondent aux clés attendues par n8n.
- Aucune requête dans n8n : vérifiez que le workflow démarre avec un webhook trigger et utilise POST.
- La fenêtre d’exécution tourne sans fin : si vous avez activé Reporter la fin du workflow, vérifiez que n8n envoie un dernier callback
completed,failedourejected. Si vous n’attendez aucun retour, désactivez les trois options lors de l’enregistrement. - Aucune progression affichée : vérifiez que Reporter la progression intermédiaire est activé lors de l’enregistrement, ou que l’objet
integrationest conservé et que chaque callback possède un identifiant uniqueeventId. - Les boutons d’approbation ne fonctionnent pas : vérifiez le nœud Wait, le
resumeUrl, l’authentification par header et les caractères autorisés danschoices[].value.