Dify とクラウド BPM サービス Questetra BPM Suite を REST API で連携する方法

# はじめに

AI を使って業務を効率化させることがそこそこ浸透してきたように感じます。
それとともに、よりうまく活用したいとのニーズが広がっていますが、[Dify](https://dify.ai/jp) はその解決策としてこれから大きく普及しそうだと感じています。

一方、[Questetra BPM Suite](https://questetra.com/ja/) は、業務フローをスムーズに進めるために、AIを含め様々な処理との連携を取り入れることができます。
ChatGPT・Gemini・Claude等との連携部品はすでに準備されていますが、AIをより高度に活用する場合に Dify との連携が必要になってくると想定されます。

ということで、本記事では Dify と Questetra BPM Suite との連携設定について説明します。


# Dify とは

AI活用したアプリを作るノーコードプラットフォームとしてあちこちで耳にします。
![Dify.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224441/e0b52dc9-00f8-aeb5-28fc-34575aedd781.png)

以下の説明がわかりやすかったので、詳しくは以下を参考にしてください。
https://udemy.benesse.co.jp/development/app/dify.html

クラウド版であれば、すぐに無料で試せるのもいいですね。


# Questetra（Questetra BPM Suite）とは

「Questetra BPM Suite」は REST API 連携が得意なクラウド BPM サービス（ノーコード／ローコードサービス）です。
生成AIとの連携事例はすでにいくつもありますが、Dify との連携によりさらに幅が広がると考えています。

[Questetra BPM Suite 製品サイト](https://questetra.com/ja/)

![Questetra_top.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224441/c75b319f-f64b-f0c1-af25-bf178f926eaf.png)

無料トライアルがあるので、すぐに試せます。
[Questetra 無料トライアル申込フォーム](https://questetra.com/ja/free-trial/)


# Dify と Questetra の連携

Dify、Questetra どちらもワークフローを組んで処理を定義します。思想が近く、親和性が高いと考えています。
また、どちらもHTTPリクエストによる送受信連携が組みやすく、様々なクラウドサービスと連携しやすくなっています。

Dify はAIを使った処理を組むのが得意で、Questetra はヒューマンタスク（人による処理）を組み合わせるのが得意です。

この2つを連携させることで、例えば以下のような活用が想定されます。

* （Dify から Questetra）
Difyで定期的にシステムのログを解析させて、対処が必要なケースがあれば Questetra の保守対応フローを開始させる
* （Questetra から Dify）
問合せ管理フローを Questetra で準備して、問合せ回答案を Dify に作成させる
（Questetra と ChatGPT との連携でも実現できますが、Dify であれば知識取得をはさんでより精度の高い回答案が作成できます）

他にもいろいろ想定されますが、本記事の主題ではないので、ここまでにしておきます。


連携には Dify から Questetra、Questetra から Dify の2方向がありますので、それぞれの設定詳細について説明します。


## Dify から Questetra を呼び出す

![Dify2Questetra.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224441/0c3967fd-c9f6-0923-9391-aa4ad3c8d2bd.png)

Questetra の[「メッセージ開始イベント（HTTP）」](https://support.questetra.com/ja/bpmn-icons/message-start-event-http/)を Dify の[「HTTPリクエスト」](https://docs.dify.ai/ja-jp/guides/workflow/node/http-request)で呼び出すことができます

Questetra の「メッセージ開始イベント（HTTP）」で準備されたHTTPリクエストURL・パラメータに合わせて、Dify の「HTTPリクエスト」を設定します。

※Questetra 側
![Questetra_http開始.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224441/f98d33de-f226-b054-67d7-5aa8dca7dac5.png)

※Dify 側
![Dify_http.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224441/fee1779d-cc11-70d7-8901-e6563a2ec982.png)

※補足：Questetra 側には、プロセス開始のための「メッセージ開始イベント（HTTP）」だけでなく、プロセス途中で HTTP リクエストを受けるための[「受信タスク（HTTP）」](https://support.questetra.com/ja/bpmn-icons/receive-task-http/)もあります。


## Questetra から Dify を呼び出す

![Questetra2Dify.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224441/1adf9713-4f1d-cbe6-521c-26e54bad8710.png)

Questetra の[「メッセージ送信中間イベント（HTTP）」](https://support.questetra.com/ja/bpmn-icons/throwing-message-intermediate-event-http/)で、Dify API を通じて、Dify の「開始」を呼び出すよう設定します。

※Dify側
![Dify_開始.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224441/fa5abd7c-0c86-68a2-0ad1-e24faf43c1d9.png)

※Questetra 側
![Questetra_http中間1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224441/7509e498-8c95-7ef5-c37b-2874fc05c21e.png)
![Questetra_http中間2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224441/7305b249-e7a5-c74e-c072-d08b7d5565b3.png)

Dify のAPIキーは、Questetra の「HTTP認証設定」の「トークン直接指定」で設定します。
![Questetra_http設定1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224441/bc952d53-9b91-6536-0e92-c45c93ec2982.png)
![Questetra_http設定2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224441/dbb10eba-1dba-83bf-8359-6a3d9918a613.png)

Dify の「開始」で準備した「入力フィールド」を考慮して、Questetra で JSON データを準備します。
図の例では、「inputText」が渡るよう以下のような JSON を文字型データ「json_send」を準備し、リクエストで送付されるように設定しました。
```
{
    "inputs": {
        "inputText": "Hello Dify"
    },
    "response_mode": "streaming",
    "user": "abc-123"
}
```

Dify API を呼び出すようアクセス URL に以下を指定します。
```
https://api.dify.ai/v1/workflows/run
```

:::note info
現在 Questetra のHTTPリクエスト送付について、30秒でタイムアウトする制限があります。Dify の処理が時間がかかるケースではタイムアウトにならないような考慮が必要です。
:::

# まとめ

実現したい内容によっては、
* Dify だけで処理を組む
* Questetra だけで処理を組む

といった形で実現できるケースはありますが、それぞれの特長を活かして使い分けることで、メンテナンス性に優れた業務実行の環境が作れると考えています。