Discourse ワークフロー

:discourse2: 概要 Discourse Workflows を使用すると、管理者はビジュアルビルダーを通じて高度な自動化を作成し、コミュニティ内のほぼすべての作業を自動化できます。
:open_book: インストールガイド このプラグインは Discourse コアにバンドルされています。プラグインを別途インストールする必要はありません。

Workflows は、ドラッグ&ドロップキャンバスを使用してトリガー、条件、アクション、フロー制御ノードを接続し、Discourse サイト上のほぼすべての作業を自動化できる、高度な複数ステップの自動化を作成できるビジュアル自動化ビルダーです。

:discourse: Discourse WorkflowsBusiness または Enterprise プランで利用可能です。

基本概念

他の自動化ツールに精通している場合、Workflows で使用される用語のほとんどはご存知でしょう。

  • ワークフロー: 接続されたノードで構成される保存された自動化。
  • ノード: ワークフロー内の単一のステップ:トリガー、条件、アクション、フロー制御/ユーティリティ。
  • トリガー: ワークフローの開始点。トリガーは手動、または特定のイベント(トピックの作成、スケジュールの実行、インバウンド Webhook)によって開始される場合があります。
  • 条件: ルールを評価し、フローをブランチに分割するルーティングノード。例えば、If ノードは true または false の評価に基づいてフローをルーティングします。
  • アクション: 特定の処理を実行するノード — ポストの作成、バッジの付与、外部 API の呼び出しなど。
  • アイテム: ノード間で流れるデータ。アイテムは、実行ログで確認し、式を使用して参照できる JSON オブジェクトです。
  • : {{ ... }} として記述され、実行時に解決される動的値。これを使用して、前のノード、ワークフロー変数、またはサイト設定からのデータを参照します。

ワークフローの作成

ワークフローを構築するには:

  1. 管理者 > プラグイン > Workflows に移動し、新しいワークフロー をクリックします。

  1. ワークフローに名前を付けます。
  2. 最初のステップを追加 をクリックし、トリガーを選択します。

  1. + ボタンを使用して、追加のノードを追加します。

  1. ノードをダブルクリックして設定します。設定パネルでは、画面の左側にノードのインプットの詳細、右側にノードのアウトプットの詳細が表示されます。すべての詳細を表示するには、ワークフローを一度実行する必要がある場合があります。

  1. 公開する準備ができたら、公開 をクリックします。

:light_bulb: ヒント:

  • ビルダーの右上にある三点リーダーメニューにある スティッキーノート を使用して、ワークフローが何をするかを文書化します。スティッキーはワークフローに何の影響も与えませんが、テンプレートや共有ワークフローを理解しやすくします。
  • 開発中は ログノード を使用して、ワークフローの動作に影響を与えずにデバッグ値を実行ログに送信します。
  • ワークフローを JSON として エクスポートおよびインポート して、チームメンバーと共有したり、他のサイトからのワークフローを再作成したりできます。

式と動的データ

式を受け付けるフィールドには、エディターに {/} ボタンが表示されます。これをクリックして、トリガーと以前のノードから利用可能なデータを参照し、参照を挿入します。

一般的な式

返す内容
{{ $json.topic.title }} 現在のアイテムからのトピックのタイトル
{{ $json.post.url }} 現在のアイテムからのポストの URL
{{ $json.user.username }} 現在のアイテムに関連付けられたユーザーのユーザー名
{{ $vars.my_variable }} my_variable という名前のワークフロー変数の値
{{ $site_settings.title }} サイトのタイトル
{{ $execution.id }} 現在の実行の一意の ID
{{ $('Node Name').item.json.property }} キャンバス名で参照される特定のアップストリームノードからの出力

静的および動的値

= で始まるフィールドは式として扱われます。先頭の = を持たないフィールドはプレーンテキストとして扱われます。式ピッカーはこれを自動的に処理します。

ワークフローの管理

既存のワークフローを管理するのに役立つ機能がたくさんあります。

実行

ワークフローが実行されるたびに、Discourse は実行を記録します。履歴を確認するには、Workflows → Executions に移動します。

各実行には、完了した日時とステータスが表示されます。

  • 完了: エラーなく完了しました。
  • エラー: 特定のノードで失敗しました。エラーと原因となったデータを確認するには、実行をクリックします。
  • 実行中: 現在処理中です。
  • 待機中: Wait ノードによって一時停止中。フォーム、モーダル、チャット承認からの応答を待機中、またはサブワークフローの完了を待機している Call Workflow ノード。
  • レート制限: レート制限によりワークフローがスキップされました。
  • スキップ: トリガーが発動しましたが、ワークフローは未公開でした。

ワークフローの実行の詳細を確認するには、表示 ボタンをクリックします。これにより、ワークフローの各ステップが表示され、展開して正確な詳細とステップの所要時間を確認できます。

ページの下部には、ワークフローの全体の所要時間が表示されます。必要に応じて、ログを エクスポート して共有やトラブルシューティングに使用することもできます。

設定

Workflows → Settings タブで、次のことができます。

  • このワークフローの実行中に失敗があった場合にトリガーされる エラーワークフロー を設定します。ワークフローにエラートリガーがある場合、そのトリガーで定義されたようにエラーを処理します。
  • スケジュールトリガーの タイムゾーン を設定します。これが未設定の場合、ワークフローはデフォルトでサイトのタイムゾーンを使用します。
  • ワークフローを削除 します。:warning: これは 永続的 なので、続行する前にワークフローをエクスポートすることを検討してください(ワークフロービルダーの右上隅の三点リーダーメニューからアクセス可能)。

バージョン

ワークフローを更新するたびに、以前のバージョンが保存されます。これにより、期待通りに機能しなかった変更を 元に戻す ことが容易になります。

変数

変数は、単一のワークフローにスコープされたキーと値のペアです。ワークフローの Variables パネルで定義し、{{ $vars.key_name }} を使用してどこからでも参照します。ワークフローグラフを編集せずに変更できるように、カテゴリ ID や受信者ユーザー名などの設定値を格納するために変数を使用します。

資格情報

HTTP リクエストや AI エージェントなどの一部のノードは、外部サービスと認証する必要があります。API キーやシークレットをノードのフィールドに直接貼り付けるのではなく、Workflows → Credentials に格納します。資格情報は静止時に暗号化され、ワークフロー間で再利用できます。

サポートされている資格情報の種類:

  • Basic Auth(ユーザー名 + パスワード)
  • Bearer token
  • Header auth(カスタムヘッダー名と値)

データテーブル

データテーブルは、Workflows プラグイン内部の永続的な構造化テーブルです。Data table ノードを使用して、それらから読み取りまたは書き込みます。stringnumberboolean、および date の列タイプをサポートしています。

データテーブルは次の場合に役立ちます。

  • 重複排除 — ワークフローが既に処理したユーザーやトピックを記録
  • 状態 — トピックがプロセスの特定の段階にあるかどうかを追跡
  • ルックアップ — ワークフローがクエリできるマッピング(トピック ID → 担当スタッフなど)を格納

実行

Executions タブから、すべてのワークフローの実行をすべて表示できます。フォーマットと機能はワークフロー固有の実行と非常に似ていますが、すべてのワークフローにわたって表示されるため、モニタリングが容易になります。

テンプレート

新しいワークフローを作成する際、空白のキャンバスではなく テンプレート から開始できます。テンプレートは一般的なユースケース用に事前に構築されたワークフローであり、動作を説明するスティッキーノートで注釈が付けられており、システムを学ぶのに適しています。

:megaphone: さらに多くのテンプレートを見てみたいですか? 利用可能なテンプレートのライブラリを時間とともに拡張する取り組みを行いますが、Workflows の使用を容易にするためにここで見たいテンプレートがある場合は、お知らせください。

また、任意のワークフローを JSON ファイルとしてエクスポートして、他の人と共有したり、独自の開始点として使用したりすることもできます。

「いいね!」 21

こんにちは、このプラグインを有効化しようとしたところ、次のようなエラーメッセージが表示されました:「非表示の設定 discourse_workflows_enabled を変更する権限がありません」

「いいね!」 2

現在、/admin/config/upcoming-changes から有効化する必要があり、admin/plugins からはできません

「いいね!」 3

こんにちは。これらのワークフローの目的を正しく理解しているなら、トピックに管理者ボタンを追加し、すぐにトピックを最上部に移動させることを希望しています。可能ですか? :grinning_face:

「いいね!」 1

やあ!

「AIで構築」機能が特定のLLMを使用するようにするには、どのように確認すればよいでしょうか?
システムでデフォルトのLLMとしてGoogle Geminiを使用すると、次のエラーが発生します:
Invalid JSON payload received. Unknown name “additionalProperties” at ‘tools[0].function_declarations[5].parameters’: Cannot find field

ありがとうございます!

「いいね!」 1

どの Gemini モデルを使用していますか?変更するには、ワークフローエージェントを選択し、デフォルトの LLM を交換してください。

「いいね!」 1

サム、こんにちは! Gemini 3 Flash です。

ワークフローの設定を見つけましたが、確かに Gemini Flash 3 になっていました。GPT Nano 5 に変更しましたが、同じエラーが発生します。

さらに、全ユーザーのデフォルトを GPT Nano 5 に変更し、個々のワークフロー設定も確認しました。そちらも GPT Nano 5 で上書きするように設定しました。

しかし、一向に改善しません。:frowning:

「いいね!」 1

Luna、Terra、3.5 Flash、または Sonnet にアクセスできる可能性はありますか?

ワークフロー AI エージェントにはかなり多くのツールが備わっているため、比較的新しい LLM が必要になる傾向があります。

「いいね!」 1

Flash Lite が動作していたと確信していましたが、実際にはそうではありませんでした。GPT Nano 5 は確実に動作しました。これは WordPress でも既知の問題のようです。参考リンクを以下に示します。Gemini プロバイダーを使用する際は、JSON レスポンススキーマから additionalProperties アイテムを削除する必要があります: Remove `additionalProperties` from the JSON response schema - Pull Request #18 - WordPress/ai-provider-for-google - GitHub

うわ、インタラクションAPIへの移行を急ピッチで進めてるから、これでGeminiモデルへの接続がずっと安定するはず。来週には完了できると思う。

「いいね!」 2

すばらしいです!迅速な対応に感謝します! さらにいくつかのコンテンツを見つけましたが、大概のことはご理解いただけていると思います。 :wink:

これはGoogle自身のGeminiによる説明です。意味が通じるでしょうか? 私はすべてを理解しているわけではありませんが、そのプロパティでエラーが発生していることはわかっています。LOL。

要約: エラーが継続しているのは、Googleがスキーマ処理のために2つの全く異なるエンジンを使用しているためです。Geminiは構造化出力response_json_schema)に対して標準的なJSONスキーマをサポートしていますが、その関数呼び出し/ツール実行エンジンはまだGoogleの厳格なOpenAPI 3.0 Protobufパーサーを使用しており、additionalPropertiesを拒否またはエラーの原因としています。

1. ツール呼び出し vs 構造化出力(エンジンの分岐)

GoogleのGemini APIは、2つの異なる場所でスキーマを検証します:

  • 構造化出力(response_json_schema): モデルの最終レスポンスをフォーマットするために設計されています。標準的なJSONスキーマ解析を使用し、additionalPropertiesを問題なく処理します。

  • ツール/関数呼び出し(tools[0].function_declarations): サイトのツール(Discourse AI検索、ペルソナアクション、またはウェブブラウジングなど)をモデルに渡すために設計されています。このエンドポイントは、スキーマをGoogleの内部Protobufオブジェクト google.ai.generativelanguage.v1beta.Schema に解析します。

ツールエンドポイントがパラメータをレガシーなOpenAPI 3.0サブセットにマッピングするため、関数宣言でadditionalPropertiesを送信すると、APIパーサーは400 Bad RequestまたはMALFORMED_FUNCTION_CALLを返します。

GitHub

2. Discourseなどのフレームワークがこれを注入する理由

オーケストレーションフレームワーク(Discourse AI、Model Context Protocol/MCP、LangChain、Pydantic、Zod)は、カスタムツールのために自動的にJSONスキーマを生成します:

  1. 厳格な強制のデフォルト: ジェネレーターは、厳格なパラメータ型を強制するために自動的に"additionalProperties": falseを追加します。

  2. 動的なマップ/辞書: ツールパラメータがキー値のハッシュ/辞書(例:dict[str, Any]またはRubyのHash)を使用する場合、スキーマジェネレーターは"additionalProperties": { "type": "string" }を出力します。

  3. 未サニタイズされたペイロード: Discourseがこれらの自動生成されたツールスキーマをGoogleの関数宣言エンドポイントに送信すると、GeminiのProtobufパーサーはadditionalPropertiesを無効または未知のフィールドとしてフラグ立てます。

3. Discourseでの解決方法

Discourse AIのツール呼び出しでこのエラーが発生している場合:

  • 動的なハッシュ/辞書パラメータを避ける: カスタムツールのパラメータが、オープンエンドなオブジェクトを使用するのではなく、propertiesの下に期待されるすべてのキーを明示的に定義していることを確認します。

  • 動的データを文字列としてシリアライズする: ツールが任意のキー値ペアを受け入れる必要がある場合は、パラメータをSTRINGとして定義し、ツールにシリアライズされたJSON文字列を受け入れるように指示します。

  • カスタムツールでadditionalPropertiesをフィルタリングする: /admin/plugins/discourse-ai/ai-toolsの下にカスタムAIツールが定義されている場合は、パラメータのJSONスキーマを編集して、"additionalProperties"ブロックをすべて削除します。

インタラクション API のサポートを追加する PR を作成しました。テスト環境があれば、さらにテストしていただけると幸いです。

ワークフローを通じて外部ユーザーIDを取得できるようにする予定はありますか?私は、現在のユーザーに関する情報をアイデンティティプロバイダシステムで確認してから処理を続行するフォームを作成したいのですが、Get Userノードはexternal_idフィールドを出力していないようです。

フィードバックありがとうございます。これで問題が解決するはずです:FIX: supports optional data for workflow user node (#42400) · discourse/discourse@4d0c688 · GitHub

「いいね!」 3

user_id を username に変換する方法はありますか?トピックの作成者に個人メッセージを送信するユースケースを調べていました。しかし、topic オブジェクトからは user_id しか取得できず、個人メッセージを送信するアクションでは代わりに username が必要です。

あるいは、topic_id を使って最初の投稿を取得する方法があれば、それも機能するでしょう。投稿には username フィールドがあるようです。

「いいね!」 1

@thgl はい、データエクスプローラーノードがあるため、あらゆる種類の情報を取得するクエリは可能です(この場合はuser_idをハードコードしていますが、ご理解いただけたかと思います):

workflow-nodes-2026-08-18.json|添付ファイル (2.1 KB)

「いいね!」 2

@patrickemin すでに確認済みかどうかはわかりませんが、このユースケースに必要なすべてのビルディングブロックを追加しました。サポートが必要な場合はお知らせください。

「いいね!」 1

へえ、それは便利ですね、ありがとうございます!

さて、そのユースケースのために管理者トピックに割り当てるアクションが見つかりませんでした: