DifyチャットフローとSlackを連携!最新プラグイン活用ガイド(後編)

はじめに

対象とする読者

本記事は、ノーコードAIアプリ開発ツールで人気のある Dify を構築・運用している方で、特に以下のような方を対象としています。

  • 以前のDifyのWebhookトリガーの記事を読み、チャットフローへの連携方法も知りたい方
  • Slackをインターフェースにして、Difyの対話型AIを業務に組み込みたいと考えている方
  • DifyのWebhookトリガーがワークフローでしか使えず、解決策を探している方

また本記事の前提知識として、何かしらのワークフローツールとSlackアプリの基礎知識があることを想定しています。

記事のゴール

本記事は前後編で構成されますが、全体を通じて以下の点を達成することを目指します。

  • チャットフローをトリガーできるDifyプラグインの種類と違いを理解する。
  • プラグインごとの特性(リアクション反応、会話履歴の保持など)を把握し、用途に合わせた選定ができるようになる。
  • 使い勝手の良い2つのプラグインについて、Slackアプリ作成からDify連携までの具体的な設定手順をマスターする。


前編のおさらい

前編の記事では、DifyのチャットフローをSlackから起動する方法として「slack-bot2」プラグインの設定手順を解説しました。
メンションだけでなくリアクションでも起動できる手軽さが魅力でしたが、一方で「会話履歴(コンテキスト)を引き継げない」という課題も見えてきました。
後編となる今回は、その課題を解決できる「Slack Thread Bot」プラグインについて詳しく見ていきたいと思います。


Slack Thread Botプラグインでチャットフローをトリガー

処理の流れ

Slack Thread Botプラグインでも処理の流れはslack-bot2と同様で、以下のようになります。
一部異なる点として、(3)でイベント内容ではなくスレッドの会話履歴が連携される点があります。

(1) Slackアプリ(ボット)がSlackワークスペースのイベントを検知
  ↓
(2) プラグインのエンドポイントにイベント内容を送信
  ↓
(3) プラグインがチャットフローをトリガー(スレッドの会話履歴を連携)
  ↓
(4) Difyでチャットフロー実行
  ↓
(5) プラグインがチャットフローの出力結果をSlackアプリ(ボット)に連携
  ↓
(6) Slackアプリ(ボット)が出力結果を投稿

設定作業

公式ページを見た感じでは、少し設定方法が分かりにくい感じがしますが、連携のために必要な作業は以下の通りslack-bot2と同様です。

  • 【事前準備】動作検証用のチャットフローを作成
  • Slackアプリ(ボット)の作成、権限設定
  • プラグインのインストール、エンドポイントの設定
  • 作成したエンドポイントをSlackアプリ(ボット)側に設定

【事前準備】動作検証用のチャットフローを作成

slack-bot2とはちょっとだけ違うチャットフローになりますので、今回もまず最初にプラグインからトリガーされる動作検証用のチャットフローを作っておきます。

DifyのWebコンソールから、スタジオ > アプリを作成する > 最初から作成 をクリックします。

アプリタイプで「チャットフロー」を選択し、アプリの名前を入力して、「作成する」をクリックします。

前回と同様、最初から以下のような3つのノードが作成された状態になります。

今回はさらにいくつか入力変数が必要になるため、ユーザー入力ノードに以下のように5つの入力フィールドを追加します。

フィールドタイプ変数名 / ラベル名最大長サポートされたファイルタイプ必須
段落thread_history65535チェックなし
段落thread_users65535チェックなし
ファイルリストfilesドキュメント、画像チェックなし
短文thread_ts48チェックなし
短文channel_id48チェックなし

※特に記載のない項目はデフォルトのままでOKです。

Slack Thread Botプラグインも、ここで追加した入力変数とチャットフロー標準の出力仕様に合わせて構成済みのため、最初のユーザー入力ノードと最後の回答ノードは、これ以外は特に設定をいじる必要はありません。
Slack側でのスレッドの会話履歴や、返信内容の投稿の受け渡しはすべてプラグイン側でやってくれますので、その間の処理部分がカスタマイズする部分となります。

今回も動作検証用のチャットフローなので、LLMの部分は公式ページにあるシンプルなプロンプトにしておきます。

SYSTEMプロンプト
あなたはSlack上でユーザーの質問に答えるアシスタントです。
直近の会話内容を考慮して、適切な回答をお願いします。

なお、特定のユーザーに向けてメンションする場合は、
ユーザーリストを参照して、`<@ID>` 形式でメンションしてください。
USERプロンプト
# 直近の会話履歴
{{<ユーザー入力ブロックのID>.thread_history#}}

# ユーザーリスト
{{<ユーザー入力ブロックのID>.thread_users#}}

チャットフローが思った通りに動作するかを確認するため、画面上部の「プレビュー」をクリックします。

入力変数 thread_history がスレッドの会話履歴となるので、まずここにコンテキストとなる内容を入れておき、その上でそれに関連する質問をしてみたところ無事動作しました。

動作が確認できたので、最後に右上の 公開する > 更新を公開 をクリックします。

Slackアプリの作成

前回と同様、Slackからプラグインへの繋ぎとなるSlackアプリを作成していきます。

SlackAPIダッシュボード にアクセスし、右上の「Create New App」をクリックします。

作成方法を聞かれるので「From scratch」を選択します。

アプリ名を設定し、接続するSlackワークスペースを選択し、「Create App」をクリックします。

Slackアプリの設定

OAuth & Permissions > Scopes > Bot Token Scopes でスコープを設定していきますが、slack-bot2とは動作仕様が異なるため、前回に比べてもう少し追加のスコープが必要になります。

前回設定したスコープ
  • app_mentions:read - Slackアプリがメンションされた際のメッセージ内容を読み取る
  • channels:history - Slackアプリが参加しているパブリックチャンネルのメッセージを読み取る
  • chat:write - Slackアプリがメッセージを投稿する
  • reactions:read - Slackアプリがリアクション内容を読み取る
追加で必要なスコープ
  • channels:read - ワークスペース内のパブリックチャンネルの基本情報の読み取り
  • files:read - Slackアプリが追加されたチャンネルで共有されたファイルを読み取る
  • groups:history - Slackアプリが参加しているプライベートチャンネルのメッセージを読み取る
  • groups:write - Slackアプリが参加しているプライベートチャンネルの管理
  • users:read - ワークスペース内のユーザーを読み取る

スコープの設定が完了したら、OAuth & Permissions > OAuth Tokens で、「Install to <ワークスペース名>」をクリックします。

Slackワークスペースへのアクセス許可が求められるため、「許可する」をクリックします。
※自身のSlackユーザーの権限によっては、ここで管理者へのリクエストが求められる場合もあります。

Slackワークスペースへアプリを追加すると、OAuth & Permissions > OAuth Tokens に Bot User OAuth Token が生成されます。このトークンも後ほど利用するため、コピーして控えておいてください。

プラグインのインストール

DifyのWebコンソール画面から、プラグイン > プラグインをインストールする > マーケットプレイス をクリックします。

「Slack Thread Bot」を探して、「インストール」をクリックします。

無事インストールが成功したら「閉じる」をクリックしてインストール完了です。

プラグインのエンドポイントの設定

DifyのWebコンソール画面から、プラグイン > 先ほどインストールした Slack Thread Bot をクリックすると、画面右側に以下のようなプラグイン設定画面が表示されますので、エンドポイントの右側にある[+]ボタンをクリックして、エンドポイントを追加します。

エンドポイントの設定画面になるので、以下の要領で設定し、「保存」をクリックします。

  • エンドポイント名: 任意のエンドポイント名
  • Bot Token: Slackアプリの設定時にコピーしておいた、Bot User OAuth Tokenをそのまま貼り付け (このTokenに基づいた権限でプラグインがSlackボットとして動作します)
  • 初回のレスポンスをチャンネルにも送信する: False
  • 再試行を許可: False
  • アプリのタイムアウトエラー通知をスキップ: False
  • 利用を許可するチャンネル: 未入力
  • アプリ: 先ほど作成したチャットフローを指定

※アプリを指定すると、アプリパラメータの設定画面が表示されますが特に何も設定しないでOKです。ポップアップ表示されている設定画面のどこかをクリックすると表示されなくなり「保存」ボタンが押せるようになります。(逆に設定画面以外をクリックすると、設定画面自体が閉じられて変更が破棄されてしまうので注意してください)

先ほど作成したチャットフロー用のエンドポイントが追加されましたので、今度はここで生成されたエンドポイントのURLをコピーして控えておいてください。

Slackアプリにエンドポイントを設定

Slackアプリ側の設定に戻り、Slackで発生したイベントを先ほど生成したURLにPOSTする設定が必要になります。

Slackアプリ設定の Event Subscriptions > Enable Events を Off → On に切り替えます。

Onにすると設定項目がいくつか表示されるため、まず Request URL に先ほどチャットフローのエンドポイントを追加した際に生成されたURLをそのまま貼り付けます。
※この際SlackAPIは、エンドポイントのURLへチャレンジ認証のリクエストを送り、正しいレスポンスが無い場合はエラーになります。エラーになる場合はDifyが稼働するホストへのHTTPSアクセスに問題が生じている可能性があるため、ネットワーク周りの設定を再確認してみてください。

さらに、Event Subscriptions > Subscribe to bot events に以下のイベントを追加します。

  • app_mention - Slackアプリがメンションされた

設定が完了したら、右下の「Save Changes」をクリックします。

動作検証

設定が終わったので、動作を見ていきましょう。

まずSlackボットを任意のチャンネルに招待します。

メンションしたため早速スレッドで返信がありましたが、slack-bot2と違いエラーが返ってきました。
エラーメッセージから察するに、何も質問文を渡していなかったからだと思われます。私の招待方法が悪かっただけだと思いますので、いったんスルーして動作検証を続けましょう。

メンションに続けて質問を投稿してみると、今度はきちんと答えてくれました。

Slackボットをメンションしないと当然スルーされますし、仕様通りslack-bot2と違ってリアクションにも何も反応しません。

Slack Thread Botの特徴である会話履歴の引き継ぎを試してみたところ、きちんと引き継がれていました。
※メンション返しがうまくいっていないようなので、この辺はプロンプトなどでの調整が必要そうですね。

Slack Thread Botプラグインまとめ

リアクションには反応できませんが、スレッド返信が可能で会話履歴も引き継げるため、slack-bot2プラグインとは異なり、何度か会話を往復して回答の精度を上げたり、追加で必要な情報を引き出すなどができると思います。

ただしそういったツールは、すでにWeb版のChatGPTやGeminiなどで溢れていますので、このプラグインが活用できるシーンとしては、例えばDifyのナレッジにあらかじめ社内情報のようなものを持たせて社内RAG化し、Slack上からユーザーが社内情報に関する質問をできるようにするといった使い方が合うのではないかと思います。


まとめ

今回の後編では、DifyのチャットフローをSlack運用に最適化させるための強力なツール「Slack Thread Bot」プラグインの設定方法と活用術について解説しました。
前編で紹介した「slack-bot2」の手軽さと、今回の「Slack Thread Bot」のコンテキスト保持能力。これら2つのプラグインの特性を理解することで、用途に応じた最適なAIインターフェースをSlack上に構築できるようになると思います。

学んだことの整理

  • コンテキスト保持の重要性: 「Slack Thread Bot」を活用することで、スレッド内の会話履歴をDifyへ受け渡せるようになり、一問一答形式ではない「対話型」の業務支援が可能になる。
  • 詳細なスコープ設定の必要性: スレッド履歴やユーザー情報の取得には、groups:historyusers:read といった、単なるメンション受け取り以上の権限設定が必要。
  • ユースケースに応じた使い分け: リアクションで即座にタスクを実行したい場合は「slack-bot2」、社内RAGのように深掘りした対話が必要な場合は「Slack Thread Bot」という選定基準が明確になった。

DifyとSlackの連携は、単なる自動化を超えて「チームの知恵をAIで拡張する」ための第一歩です。
社内のナレッジをDifyにインポートし、Slackからいつでも呼び出せる「社内専用コンシェルジュ」を構築してみるのも楽しそうですので、今後もトライしていきたいと思います。

新規CTA