Aller au contenu principal

n8n workflows

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 rapport ou transférer des données de formulaire vers un autre système.

Exemple : article de presse sur le site web de l’organisation

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

Le workflow n8n peut ensuite, par exemple:

  1. Transformer le court texte en un brouillon propre avec un nœud LLM et une invite adaptée au ton de l’organisation.
  2. Générer une illustration adaptée avec un second nœud LLM, par exemple dans les couleurs de l’identité visuelle 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. Ensuite, n8n exécute les étapes automatisées et assure que l’article soit correctement publié sur le site.

Que fait cette intégration ?

Vous démarrez un workflow n8n depuis la vue d’ensemble des workflows. Seuls le webhook de production, POST et l’authentification par header sont obligatoires. Les champs et les retours depuis n8n sont optionnels 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 remplies sont envoyées en JSON dans une requête POST au webhook n8n.
  • Sans retours, AI-Public confirme uniquement que le workflow a démarré et continue dans n8n. La fenêtre n’affiche pas de spinner et peut être fermée tout de suite.
  • Si cela a été activé lors de l’inscription, le workflow peut renvoyer des étapes intermédiaires ou la fin vers AI-Public.
  • Si l’approbation est activée lors de l’inscription, l’utilisateur peut faire un choix directement dans AI-Public. n8n continue ensuite à partir de l’étape en attente.

Créer le workflow n8n dans AI-Public

Un administrateur enregistre le workflow comme suit:

  1. Aller à Assistants.
  2. Ouvrir Workflows.
  3. Choisir Nouveau workflow n8n.
  4. Saisir le nom du workflow et l’URL de production n8n.
  5. Définir Header authentication avec un nom d’en-tête et une valeur d’en-tête secrète.
  6. Coter sous Retour d’informations depuis n8n uniquement les éléments réellement utilisés dans ce workflow n8n: progression, approbation et/ou fin du workflow.
  7. Ajouter éventuellement les champs qui doivent être envoyés dans la requête POST.
  8. Enregistrer le workflow.

Les trois options de retour d’information 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 sait alors 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: court texte, long texte, nombre, oui/non, date, une seule option et plusieurs options.
  • Pour Une seule option et Plusieurs options, ajoutez les options disponibles. Une seule option s’affiche sous forme de liste déroulante compacte; Plusieurs options affiche des cases à cocher. Les valeurs choisies sont envoyées dans le corps JSON.
  • Les champs obligatoires doivent être remplis avant que le workflow puisse démarrer.
  • Le nom du champ devient la clé dans le corps JSON envoyé à n8n.

Créer un workflow compatible dans n8n

  1. Créez dans n8n un nouveau workflow.
  2. Ajoutez en premier nœud une Webhook.
  3. Donnez à ce nœud exactement 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 qu dans AI-Public.
  6. Réglez Respond ou Response Mode sur Immediately.
  7. Copiez l’URL de production dans le champ n8n production 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 une nœud Éditer des Champs, Définir ou Code.

Exemple du corps JSON

Si vous définissez des champs avec les noms prompt, klantnaam, doelgroepen et datum, n8n recevra 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 rappel correspond à chaque exécution. Ne pas l’enregistrer dans les logs, configurations fixes ou autres systèmes.

Optionnel : renvoyer l’avancement et la finalisation

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

Configurez chaque nœud callback comme suit:

  1. Choisir Method: POST.

  2. Cliquer sur URL sur Expression et coller:

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

  4. Activer Send Headers et ajouter les en-têtes ci-dessous.

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

Envoyez par exemple ce message lorsque 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 dans la même exécution, utilisez un identifiant eventId unique.
  • Utilisez une étiquette step.label en néerlandais clair; ce texte est affiché dans l’application.
  • Si vous avez activé Signaler la fin du workflow, envoyez à la fin toujours 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 également dans l’application.

Optionnel : demander une approbation dans l’app

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

Réglez 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 après le Wait un nœud Switch et vérifiez dedans {{ $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 appropriée.

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

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 pas coller cette URL comme texte fixe dans chaque nœud callback. Sélectionnez dans le champ URL du nœud HTTP Request l’option Expression et utilisez:

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

AI-Public fournit ainsi automatiquement la bonne URL de production à chaque démarrage. L’URL fixe ci-dessus est à utiliser lors des tests pour vérifier que l’expression se réfère à AI-Public et non à AI-School ou AI-Corporate.

Les appels 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 attendues avec un callback de type failed. Pour les erreurs de nœud inattendues, créez également un Workflow d’erreur central:

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

  2. Ajoutez ensuite un nœud HTTP Request avec la méthode POST.

  3. Dans URL, saisissez 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 par défaut 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 Workflow d’erreur.
  2. Ouvrez les paramètres du workflow habituel et sélectionnez-le dans Error Workflow.

Envoyez immédiatement après le Start workflow au moins un callback avec executionId: "{{ $execution.id }}". Sinon AI-Public ne peut pas rattacher une erreur inattendue à l’exécution correcte.

Contraintes importantes

  • Seuls les déclencheurs webhook sont pris en charge.
  • Seuls les URLs de webhook de production sont pris en charge.
  • Les URLs de test webhook avec /webhook-test/ sont refusées.
  • Seule la méthode POST est prise en charge.
  • Seule 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 callback et les URL 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 transmise 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 et la valeur de l’en-tête sont exactement les mêmes 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.
  • Pas de requête dans n8n: vérifiez que le workflow démarre par un webhook et utilise POST.
  • La fenêtre d’exécution reste active: si vous avez activé Signaler la fin du workflow, vérifiez que n8n envoie bien un callback final completed, failed ou rejected. Si vous n’attendez pas de retours, désactivez ces trois options lors de l’inscription.
  • Pas de progression visible: vérifiez que Rapporter l’avancement intermédiaire est activé lors de l’inscription, ou que l’objet integration est conservé et que chaque callback a un eventId unique.
  • Boutons d’approbation qui ne fonctionnent pas: vérifiez le nœud Wait, l’URL de reprise, l’authentification par header et les caractères autorisés dans choices[].value.
WhatsApp