Aller au contenu principal

Workflows n8n

AI-Public peut lancer des workflows n8n via un webhook de production. C’est utile lorsque vous souhaitez démarrer un processus automatisé en dehors d’AI-Public, par exemple créer une tâche, mettre à jour un enregistrement CRM, lancer un flux de reporting ou transmettre des données de formulaire vers un autre système.

Exemple : article d’actualité sur le site web de l’organisation​

Supposons que l’organisation ait créé un workflow n8n qui publie un article d’actualité sur le site WordPress. Dans AI-Public, vous ne saisissez alors qu’un court texte, par exemple quelques phrases sur une réunion, un projet ou une annonce publique. Avec ce texte, vous lancez le workflow dans n8n.

Le workflow n8n peut ensuite, par exemple :

  1. Transformer le court texte en un brouillon soigné avec un nœud LLM et un prompt adapté au ton de l’organisation.
  2. Faire créer une illustration appropriée avec un second nœud LLM, par exemple dans les couleurs de la charte et dans un style illustratif reconnaissable.
  3. Préparer ou publier le texte et l’image comme article de blog sur le site WordPress.

Ainsi, AI-Public et n8n travaillent ensemble : dans AI-Public, l’utilisateur choisit le workflow et renseigne les informations nécessaires. n8n exécute ensuite les étapes automatisées et veille à ce que l’article d’actualité soit correctement publié sur le site.

Que fait cette intégration ?​

Vous lancez un workflow n8n depuis l’aperçu des workflows. Seuls le webhook de production, POST et Header Auth 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.
  • Si le workflow a des champs, un formulaire s’ouvre d’abord. L’utilisateur remplit les champs puis lance le workflow avec le bouton.
  • Les valeurs saisies sont envoyées en JSON dans une requête POST vers le webhook n8n.
  • Sans retours, AI-Public confirme seulement que le workflow a été lancé 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 à AI-Public.
  • Si l’approbation a été activée lors de l’enregistrement, l’utilisateur peut faire un choix directement dans AI-Public. n8n continue ensuite à partir de l’étape en attente.

Créer un workflow n8n dans AI-Public​

Un administrateur enregistre le workflow comme suit :

  1. Allez dans Assistants.
  2. Ouvrez l’onglet Assistants de workflow.
  3. Dans la carte en haut, cliquez sur Nouveau workflow et choisissez Workflow n8n.
  4. Renseignez le nom du workflow et l’URL de production n8n.
  5. Configurez Header authentication avec un nom d’en-tête et une valeur secrète.
  6. Sous Retours depuis n8n, cochez uniquement les éléments réellement construits dans ce workflow n8n : progression, approbation et/ou fin du workflow.
  7. Ajoutez éventuellement les champs à envoyer dans la requête POST.
  8. Enregistrez 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 aussi à jour l’enregistrement dans AI-Public. La boîte de dialogue saura ainsi si elle doit seulement afficher une confirmation de démarrage ou rester en attente d’autres signaux.

Champs​

  • Les champs sont facultatifs.
  • Chaque champ a un nom de champ et un type.
  • Les types de champs pris en charge sont : texte court, texte long, nombre, oui/non, date, choix unique et choix multiples.
  • Pour Choix unique et Choix multiples, ajoutez les options disponibles. Choix unique s’affiche comme une liste de sélection compacte ; Choix multiples affiche des cases à cocher. La ou les valeurs choisies sont envoyées dans le corps JSON.
  • Les champs obligatoires doivent être remplis avant que le workflow puisse être lancé.
  • Le nom du champ devient la clé dans le corps JSON envoyé à n8n.

Créer un workflow compatible dans n8n​

  1. Créez un nouveau workflow dans n8n.
  2. Ajoutez d’abord un nœud Webhook.
  3. Donnez exactement à ce nœud le nom Start workflow. Les expressions d’exemple ci-dessous utilisent ce nom.
  4. Réglez HTTP Method sur POST.
  5. Choisissez Authentication: Header Auth et utilisez le même nom d’en-tête et la même valeur secrète que dans AI-Public.
  6. Réglez Respond ou Response Mode sur Immediately.
  7. Copiez l’URL de production dans le champ n8n productie-url dans AI-Public. N’utilisez pas l’URL de test avec /webhook-test/.
  8. Activez le workflow.

Les données reçues se trouvent sous body; les données techniques d’intégration se trouvent sous body.integration. Ne les supprimez pas dans un nœud Edit Fields, Set ou Code.

Exemple du corps JSON​

Si vous définissez des champs nommés prompt, klantnaam, doelgroepen et datum, n8n reçoit par exemple ce corps JSON. AI-Public ajoute automatiquement l’objet integration.

{
"prompt": "Maak een korte samenvatting van de aanvraag.",
"klantnaam": "Voorbeeldorganisatie",
"doelgroepen": ["inwoners", "medewerkers"],
"datum": "2026-09-22",
"integration": {
"runId": "chat-document-id",
"tenant": "default",
"callbackUrl": "https://europe-west1-ai-public-pro.cloudfunctions.net/n8nWorkflowCallback",
"callbackToken": "tijdelijk-token-voor-deze-uitvoering"
}
}

Le token de callback appartient à une seule exécution. Ne le stockez pas dans les journaux, dans une configuration fixe ou dans d’autres systèmes.

Optionnel : renvoyer la progression et la fin​

AI-Public peut afficher uniquement ce que n8n renvoie. Utilisez ces callbacks uniquement si vous avez activé Signaler la progression intermédiaire et/ou Signaler la fin du workflow lors de l’enregistrement.

Configurez chaque nœud de callback comme suit :

  1. Choisissez Method: POST.

  2. Cliquez sur Expression dans URL et collez :

    {{ $('Start workflow').first().json.body.integration.callbackUrl }}
  3. Choisissez Authentication: None.

  4. Activez Send Headers et ajoutez les en-têtes ci-dessous.

  5. Activez Send Body et choisissez 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

Envoyez par exemple 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": "Het document wordt gemaakt."
}
  • Utilisez un eventId unique pour chaque événement au sein d’une même exécution.
  • Utilisez un step.label clair en néerlandais ; ce texte est affiché dans l’application.
  • Si vous avez activé Signaler la fin du workflow, envoyez toujours à la fin type: "completed", type: "failed" ou type: "rejected".
  • Pour completed, ajoutez éventuellement un objet output avec le résultat.
  • Pour failed, envoyez un message d’erreur compréhensible. L’exécution s’arrête alors aussi dans l’application.

Optionnel : demander une approbation dans l’application​

Utilisez un nœud n8n Wait avec On Webhook Call lorsque le workflow ne doit continuer qu’après un choix. Envoyez un callback avec type: "approval_required" avant le nœud Wait :

Configurez le nœud Wait sur Resume: On Webhook Call, HTTP Method: POST et Authentication: Header Auth. Sélectionnez les mêmes identifiants Header Auth que pour Start workflow. Ajoutez un nœud Switch après le nœud Wait et contrôlez-y {{ $json.body.decision }}.

{
"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, le nœud Wait reçoit notamment decision. Utilisez ensuite par exemple un nœud Switch pour déterminer la suite correcte.

Une valeur de choix ne peut contenir que des lettres, des chiffres, _ et -. Le libellé peut, lui, contenir du texte lisible normal.

Définir l’URL de callback de production​

L’URL de callback de production pour AI-Public est :

https://europe-west1-ai-public-pro.cloudfunctions.net/n8nWorkflowCallback

Ne collez pas cette URL comme texte fixe dans chaque nœud de callback. Dans le champ URL du nœud HTTP Request, choisissez Expression et utilisez :

{{ $('Start workflow').first().json.body.integration.callbackUrl }}

AI-Public fournit ainsi automatiquement à chaque lancement l’URL de production correcte. L’URL fixe ci-dessus sert à vérifier pendant les tests que l’expression pointe bien vers AI-Public et non vers AI-School ou AI-Corporate.

Les callables triggerCustomN8nWorkflow, triggerN8nWorkflow et resumeN8nWorkflow sont appelées par l’application elle-même. Vous n’avez pas besoin de configurer ces URL dans n8n.

Gestion des erreurs​

Renvoyez les erreurs attendues avec un callback de type failed. Pour les erreurs de nœud imprévues, créez en plus un Error Workflow central :

  1. Créez un nouveau workflow avec un nœud Error Trigger.

  2. Ajoutez ensuite un nœud HTTP Request avec Method: POST.

  3. Renseignez cette URL de production fixe :

    https://europe-west1-ai-public-pro.cloudfunctions.net/n8nWorkflowExecutionFailed
  4. Choisissez Authentication: None et ajoutez l’en-tête n8n-handihow-name avec la valeur secrète standard de l’administrateur de la plateforme.

  5. Choisissez un corps JSON et collez :

{
"executionId": "{{ $json.execution.id }}",
"workflowId": "{{ $json.workflow.id }}",
"workflowName": "{{ $json.workflow.name }}",
"lastNode": "{{ $json.execution.lastNodeExecuted }}",
"message": "{{ $json.execution.error.message }}"
}
  1. Activez le Error Workflow.
  2. Ouvrez les paramètres du workflow normal et sélectionnez-le sous Error Workflow.

Envoyez juste après Start workflow au moins un callback avec executionId: "{{ $execution.id }}". Ce n’est qu’ainsi qu’AI-Public peut associer une erreur inattendue à la bonne exécution.

Limites importantes​

  • Seuls les déclencheurs webhook sont pris en charge.
  • Seules les URL de webhook de production sont prises en charge.
  • Les URL de test avec /webhook-test/ sont refusées.
  • Seul POST est pris en charge.
  • Seule l’authentification générique par en-tête est prise en charge.
  • La valeur de l’en-tête est traitée comme secrète dans l’application.
  • Les tokens de callback et les URL de reprise ne sont traités que côté serveur et ne sont pas directement accessibles aux 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.

Résolution des problèmes​

  • 404 ou webhook non enregistré : activez le workflow dans n8n et utilisez l’URL de production.
  • Erreur d’authentification : vérifiez que le nom et la valeur de l’en-tête sont exactement identiques dans les deux systèmes.
  • Données manquantes : vérifiez que les noms de champs dans l’application correspondent aux clés attendues par n8n.
  • Aucune requête dans n8n : vérifiez que le workflow commence par un déclencheur webhook et utilise POST.
  • La fenêtre d’exécution continue de tourner : si vous avez activé Signaler la fin du workflow, vérifiez que n8n envoie bien un dernier callback completed, failed ou rejected. Si vous n’attendez aucun retour, désactivez les trois options lors de l’enregistrement.
  • Aucune progression visible : vérifiez que Signaler la progression intermédiaire est activé lors de l’enregistrement, que l’objet integration est conservé et que chaque callback possède un eventId unique.
  • Les boutons d’approbation ne fonctionnent pas : vérifiez le nœud Wait, resumeUrl, l’authentification par en-tête et les caractères autorisés dans choices[].value.