Workflows Discourse

:discourse2: Résumé Discourse Workflows permet aux administrateurs de créer des automatisations avancées via un constructeur visuel pour automatiser presque tout dans votre communauté.
:open_book: Guide d’installation Ce plugin est inclus dans le noyau de Discourse. Il n’est pas nécessaire d’installer le plugin séparément.

Workflows est un constructeur d’automatisation visuelle qui permet aux administrateurs de créer des automatisations avancées et multiétapes à l’aide d’un canevas par glisser-déposer — en connectant des déclencheurs, des conditions, des actions et des nœuds de contrôle de flux pour automatiser presque tout sur votre site Discourse.

:discourse: Discourse Workflows est disponible sur les plans Business ou Enterprise.

Concepts clés

Si vous êtes familier avec d’autres outils d’automatisation, vous reconnaîtrez probablement la plupart des termes utilisés dans Workflows :

  • Workflow : Une automatisation enregistrée composée de nœuds connectés.
  • Nœud : Une étape unique dans un workflow : déclencheurs, conditions, actions et contrôle de flux / utilitaires.
  • Déclencheur : Le point de départ d’un workflow. Un déclencheur peut être manuel ou initié par un événement spécifique — création d’un sujet, exécution d’un calendrier, ou réception d’un webhook.
  • Condition : Un nœud de routage qui évalue une règle et divise le flux en branches. Par exemple, un nœud Si achemine le flux en fonction d’une évaluation vraie ou fausse.
  • Action : Un nœud qui effectue une tâche spécifique — création d’un message, attribution d’un badge, appel à une API externe, etc.
  • Élément : Les données qui circulent entre les nœuds. Les éléments sont des objets JSON que vous pouvez inspecter dans les journaux d’exécution et référencer à l’aide d’expressions.
  • Expression : Une valeur dynamique écrite sous la forme {{ ... }} qui est résolue à l’exécution et utilisée pour référencer des données provenant de nœuds antérieurs, de variables de workflow ou de paramètres du site.

Création d’un workflow

Pour créer un workflow :

  1. Allez dans Admin > Plugins > Workflows et cliquez sur Nouveau workflow.

  1. Nommez votre workflow.
  2. Cliquez sur Ajouter la première étape et choisissez votre déclencheur.

  1. Utilisez le bouton + pour ajouter des nœuds supplémentaires.

  1. Double-cliquez sur un nœud pour le configurer. Dans le panneau de configuration, les détails concernant les entrées du nœud s’afficheront sur le côté gauche et les détails concernant les sorties du nœud s’afficheront sur le côté droit de l’écran. Vous devrez peut-être exécuter le workflow une fois avant de voir tous les différents détails.

  1. Lorsque vous êtes prêt à le mettre en ligne, cliquez sur Publier.

:light_bulb: Conseils :

  • Utilisez les post-it, situés dans le menu à trois points en haut à droite du constructeur, pour documenter ce que fait votre workflow. Les post-it n’ont aucun effet sur le workflow, mais facilitent la compréhension des modèles et des workflows partagés.
  • Utilisez le nœud journal pendant le développement pour envoyer des valeurs de débogage dans le journal d’exécution sans affecter le comportement du workflow.
  • Vous pouvez exporter et importer des workflows au format JSON pour les partager avec vos collègues ou recréer des workflows provenant d’autres sites.

Expressions et données dynamiques

Les champs qui acceptent des expressions affichent un bouton {/} dans l’éditeur. Cliquez dessus pour parcourir les données disponibles provenant du déclencheur et des nœuds antérieurs et insérer une référence.

Expressions courantes

Expression Ce qu’elle retourne
{{ $json.topic.title }} Le titre du sujet de l’élément actuel
{{ $json.post.url }} L’URL du message de l’élément actuel
{{ $json.user.username }} Le nom d’utilisateur de l’utilisateur associé à l’élément actuel
{{ $vars.my_variable }} La valeur d’une variable de workflow nommée my_variable
{{ $site_settings.title }} Le titre de votre site
{{ $execution.id }} L’identifiant unique de l’exécution actuelle
{{ $('Nom du nœud').item.json.property }} La sortie d’un nœud en amont spécifique, référencé par son nom sur le canevas

Valeurs statiques et dynamiques

Les champs commençant par = sont traités comme des expressions. Les champs sans = initial sont traités comme du texte brut. Le sélecteur d’expressions gère cela automatiquement pour vous.

Gestion des workflows

Il existe plusieurs fonctionnalités pour vous aider à gérer vos workflows existants.

Exécutions

Chaque fois qu’un workflow s’exécute, Discourse enregistre une exécution. Allez dans Workflows → Exécutions pour voir l’historique.

Chaque exécution affiche la date et l’heure de sa complétion ainsi que son statut :

  • Terminé : S’est exécuté jusqu’au bout sans erreur.
  • Erreur : A échoué à un nœud spécifique ; cliquez sur l’exécution pour voir l’erreur et les données qui l’ont causée.
  • En cours : En cours de traitement.
  • En attente : Mis en pause en raison d’un nœud Attendre ; en attente d’une réponse dans un formulaire, une modale, une approbation par chat ; ou un nœud Appeler un workflow en attente de la complétion d’un sous-workflow.
  • Limité par le débit : Le workflow a été ignoré en raison de la limitation de débit.
  • Ignoré : Le déclencheur s’est activé, mais le workflow n’était pas publié.

Vous pouvez cliquer sur le bouton Afficher pour un examen plus approfondi de l’exécution du workflow. Cela affiche chaque étape du workflow, que vous pouvez développer pour afficher les détails exacts, ainsi que la durée de cette étape.

En bas de la page, vous pouvez voir la durée totale du workflow. Vous pouvez également Exporter le journal si nécessaire pour le partager ou pour le dépannage.

Paramètres

Sur l’onglet Workflows → Paramètres, vous pouvez :

  • Configurer un workflow d’erreur qui doit se déclencher en cas d’échec lors de l’exécution de ce workflow. Si le workflow possède un déclencheur d’erreur, il gérera les erreurs comme défini par ce déclencheur.
  • Définir le fuseau horaire pour les déclencheurs de calendrier. Le workflow utilisera par défaut le fuseau horaire du site si cela n’est pas défini.
  • Supprimer le workflow. :warning: Cette action est définitive, vous devriez donc envisager d’exporter votre workflow (accessible dans le menu à trois points en haut à droite du constructeur de workflow) avant de continuer.

Versions

Chaque fois que vous mettez à jour le workflow, nous sauvegardons la ou les version(s) précédente(s). Cela facilite la Annulation des changements qui ne fonctionnaient pas comme prévu.

Variables

Les variables sont des paires clé-valeur limitées à un seul workflow. Définissez-les dans le panneau Variables du workflow et référencez-les n’importe où avec {{ $vars.nom_clé }}. Utilisez les variables pour stocker des valeurs de configuration (comme un ID de catégorie ou un nom d’utilisateur destinataire) que vous souhaitez pouvoir modifier sans modifier le graphique du workflow.

Identifiants

Certains nœuds — comme la requête HTTP ou l’Agent IA — doivent s’authentifier auprès de services externes. Stockez les clés API et les secrets dans Workflows → Identifiants plutôt que de les coller directement dans les champs des nœuds. Les identifiants sont chiffrés au repos et peuvent être réutilisés entre les workflows.

Types d’identifiants pris en charge :

  • Authentification de base (nom d’utilisateur + mot de passe)
  • Jeton Bearer
  • Authentification par en-tête (nom et valeur d’en-tête personnalisés)

Tableaux de données

Les tableaux de données sont des tableaux structurés persistants internes au plugin Workflows. Utilisez le nœud Tableau de données pour lire ou écrire dans ceux-ci. Ils prennent en charge les types de colonnes string, number, boolean et date.

Les tableaux de données sont utiles pour :

  • Dédoublonnage — enregistrer quels utilisateurs ou sujets un workflow a déjà traités
  • État — suivre si un sujet est à une étape particulière d’un processus
  • Requêtes — stocker des mappages (comme ID de sujet → membre du personnel assigné) que vos workflows peuvent interroger

Exécutions

Vous pouvez afficher toutes les exécutions de tous les workflows depuis l’onglet Exécutions. Le format et la fonction sont très similaires aux exécutions spécifiques au workflow, mais s’affichent pour tous les workflows pour une surveillance plus facile.

Modèles

Lorsque vous créez un nouveau workflow, vous pouvez commencer à partir d’un modèle plutôt que d’un canevas vierge. Les modèles sont des workflows préconstruits pour des cas d’utilisation courants — ils sont annotés avec des post-it expliquant comment ils fonctionnent et constituent un bon moyen d’apprendre le système.

:megaphone: Intéressé par la vue de plus de modèles ? Nous travaillerons à l’expansion de la bibliothèque de modèles disponibles au fil du temps, mais n’hésitez pas à nous faire savoir s’il y a un modèle que vous aimeriez voir ici pour faciliter votre utilisation de Workflows.

Vous pouvez également exporter n’importe quel workflow en tant que fichier JSON pour le partager avec d’autres ou l’utiliser comme point de départ.

21 « J'aime »

Bonjour, lorsque j’essaie d’activer ce plugin, j’obtiens le message d’erreur suivant : Vous n’avez pas la permission de modifier les paramètres cachés : discourse_workflows_enabled

2 « J'aime »

Pour le moment, il doit être activé depuis /admin/config/upcoming-changes, et non admin/plugins

3 « J'aime »

Salut, si je comprends bien l’objectif de ces Workflows, un exemple de modèle que j’aimerais ajouter est un bouton administrateur sur les sujets qui permettrait de les remonter immédiatement. Est-ce réalisable ? :grinning_face:

1 « J'aime »

Salut !

Comment faire en sorte que « Build with AI » utilise un LLM en particulier ?
Lorsque j’utilise Google Gemini comme LLM par défaut dans notre système, je reçois l’erreur suivante : Invalid JSON payload received. Unknown name “additionalProperties” at ‘tools[0].function_declarations[5].parameters’: Cannot find field

Merci !

1 « J'aime »

Quel modèle Gemini utilisez-vous ? Pour le changer, sélectionnez l’agent de workflow et remplacez le LLM par défaut.

1 « J'aime »

Salut Sam ! Gemini 3 Flash.

J’ai trouvé le paramètre de workflow et c’était bien Gemini Flash 3. Je suis passé à GPT Nano 5, mais j’obtiens toujours la même erreur.

J’ai même changé le paramètre par défaut pour tout le monde vers GPT Nano 5 et vérifié le paramètre de workflow individuel. Je l’ai aussi défini pour qu’il soit remplacé par GPT Nano 5.

Toujours rien qui fonctionne. :frowning:

1 « J'aime »

Y a-t-il une chance que vous ayez accès à Luna ou Terra, ou à 3.5 Flash ou Sonnet ?

L’agent IA de flux de travail dispose de nombreux outils, donc il a tendance à nécessiter un LLM récent.

1 « J'aime »

J’aurais juré que Flash Lite fonctionnait, mais ce n’était pas le cas. GPT Nano 5 fonctionnait en revanche parfaitement. Il semble que ce soit un problème connu, même avec WordPress. Voici un lien pour référence. Ce que nous devons faire, c’est supprimer l’élément additionalProperties du schéma de réponse JSON chaque fois que nous utilisons un fournisseur Gemini : Remove `additionalProperties` from the JSON response schema - Pull Request #18 - WordPress/ai-provider-for-google - GitHub

zut, je suis en train de préparer une migration vers l’API Interactions, donc je pense que cela nous donnera un pont bien plus stable vers les modèles Gemini, espérerons-le pour la semaine prochaine.

2 « J'aime »

Super, et merci pour ta réponse rapide ! J’ai trouvé d’autres contenus, mais je pense que tu as compris l’idée. :wink:

Voici l’explication officielle de Google concernant Gemini. J’espère que cela a du sens ? Je ne comprends pas tout, mais je sais juste que le système bloque sur cette propriété. LOL.

En bref : L’erreur persiste car Google utilise deux moteurs entièrement différents pour le traitement des schémas. Bien que Gemini prenne en charge le JSON Schema standard pour les sorties structurées (response_json_schema), son moteur d’appel de fonctions / exécution d’outils utilise toujours le parseur Protobuf OpenAPI 3.0 strict de Google, qui rejette ou bloque sur additionalProperties.

1. Appel d’outils vs. Sortie structurée (La séparation des moteurs)

L’API Gemini de Google valide les schémas à deux endroits distincts :

  • Sorties structurées (response_json_schema) : Conçues pour formater la réponse finale du modèle. Elles utilisent l’analyse standard du JSON Schema et gèrent additionalProperties proprement.

  • Appel d’outils / de fonctions (tools[0].function_declarations) : Conçu pour transmettre les outils du site (comme la recherche Discourse AI, les actions de persona ou la navigation web) au modèle. Ce point de terminaison analyse les schémas dans l’objet Protobuf interne google.ai.generativelanguage.v1beta.Schema de Google.

Étant donné que le point de terminaison des outils mappe les paramètres vers un sous-ensemble hérité d’OpenAPI 3.0, l’envoi de additionalProperties dans une déclaration de fonction provoque le retour d’une erreur 400 Bad Request ou MALFORMED_FUNCTION_CALL par le parseur de l’API.

GitHub

2. Pourquoi les frameworks comme Discourse l’injectent

Les frameworks d’orchestration (Discourse AI, Model Context Protocol/MCP, LangChain, Pydantic, Zod) génèrent automatiquement des schémas JSON pour les outils personnalisés :

  1. Valeurs par défaut d’exécution stricte : Les générateurs ajoutent automatiquement "additionalProperties": false pour forcer un typage strict des paramètres.

  2. Tables/Dictionnaires dynamiques : Si un paramètre d’outil utilise une table de hachage clé-valeur (par exemple, dict[str, Any] ou un Hash Ruby), les générateurs de schéma produisent "additionalProperties": { "type": "string" }.

  3. Charge utile non nettoyée : Lorsque Discourse envoie ces schémas d’outils générés automatiquement au point de terminaison des déclarations de fonctions de Google, le parseur Protobuf de Gemini identifie additionalProperties comme un champ invalide ou inconnu.

3. Comment résoudre le problème dans Discourse

Si vous rencontrez cette erreur dans les appels d’outils Discourse AI :

  • Évitez les paramètres de type Hash/Dict dynamiques : Assurez-vous que les paramètres d’outils personnalisés définissent explicitivement chaque clé attendue sous properties plutôt que d’utiliser des objets ouverts.

  • Sérialisez les données dynamiques en chaînes : Si un outil doit accepter des paires clé-valeur arbitraires, définissez le paramètre comme une STRING et instructez l’outil à accepter une chaîne JSON sérialisée.

  • Filtrez additionalProperties dans les outils personnalisés : Si vous avez défini des outils IA personnalisés sous /admin/plugins/discourse-ai/ai-tools, modifiez le schéma JSON des paramètres pour supprimer tout bloc "additionalProperties".

Je viens de créer une PR qui ajoute le support pour l’API d’interaction. Si vous avez un environnement de test, je serais ravi que vous fassiez quelques tests supplémentaires.

Y a-t-il des prévisions pour permettre la récupération des identifiants externes des utilisateurs via les workflows ? J’aimerais créer un formulaire qui vérifie certaines informations concernant l’utilisateur actuel dans le système de fournisseur d’identité avant de poursuivre, mais le nœud « Obtenir l’utilisateur » ne semble pas renvoyer de champ external_id, autant que je sache.

Merci pour vos commentaires, cela devrait résoudre le problème : FIX: supports optional data for workflow user node (#42400) · discourse/discourse@4d0c688 · GitHub

3 « J'aime »

Existe-t-il un moyen de convertir un user_id en username ? J’examine un cas d’utilisation qui envoie un message privé au créateur d’un sujet. Mais à partir de l’objet topic, je ne peux obtenir que le user_id, et l’action pour envoyer un message privé exige un username à la place.

Ou, alternativement — s’il existait un moyen de récupérer le premier message à partir du topic_id, cela fonctionnerait aussi, car je vois que le post possède un champ username.

1 « J'aime »

@thgl Oui, étant donné que nous disposons d’un nœud data-explorer, tout type de requête pour obtenir toute sorte d’informations est possible (dans ce cas, j’ai codé en dur le user_id, mais vous avez l’idée) :

workflow-nodes-2026-08-18.json (2,1 Ko)

2 « J'aime »

@patrickemin Je ne sais pas si tu l’as déjà vu, mais j’ai ajouté tous les éléments nécessaires pour ce cas d’utilisation. Dis-moi si tu as besoin d’aide.

1 « J'aime »

Ah, c’est super, merci !

Eh bien, je n’ai pas trouvé l’action à affecter au bouton de sujet administrateur pour ce cas d’utilisation :