軽量で安定したSlack-Difyブリッジアプリケーション。Socket Modeを使用してPrivate channelでも確実に動作し、画像処理にも対応しています。
- ✅ Socket Mode対応 - Webhookの設定不要で安定した接続
- ✅ Private channel完全対応 - 認証問題を回避
- ✅ 画像処理対応 - 画像ファイルをDifyに送信可能
- ✅ シンプルな設定 - 環境変数のみで動作
- ✅ DM・メンション両対応 - 柔軟な対話方法
- ✅ 会話の継続性 - conversation_idによる文脈維持
- ✅ 高度なエラーハンドリング - タイムアウト処理とリトライ対応
- ✅ 動的メッセージ更新 - 処理中メッセージを結果で更新
- ✅ ローカル実行 - サーバー不要、各自のPCで動作
このアプリケーションはローカル実行専用として設計されており、勉強会参加者が各自のPCで起動して利用できます。
- 個人環境での実行: 各参加者が自分のPCでNode.jsアプリとして起動
- 独立した動作: 各自のSlack Workspace + Dify ChatFlowで完全に独立
- 成果発表デモ: ローカル起動したままSlackでリアルタイムデモが可能
- カスタマイズ自由: Dify側のプロンプト、ナレッジベース、AIモデルは各自で設定
- 🚀 即座に試せる - git cloneして数分で動作開始
- 💰 費用不要 - サーバー費用やデプロイ費用は一切不要
- 🔧 デバッグ簡単 - ローカル実行なのでログ確認やデバッグが容易
- 🎨 実験しやすい - コード変更して即座に再起動して試せる
npmエコシステムで大規模なサプライチェーン攻撃が発生中のため、以下の対応が必須です。
| コマンド | 状態 | 説明 |
|---|---|---|
npm ci |
✅ 使用必須 | package-lock.jsonの内容のみインストール(安全) |
npm install |
❌ 使用禁止 | 新しいパッケージを取得する可能性があり危険 |
npm update |
❌ 使用禁止 | パッケージ更新は攻撃リスクあり |
npm install <pkg> |
❌ 使用禁止 | 新規パッケージ追加は事態収束まで禁止 |
✅ 2025年9月17日確認済み: 攻撃対象パッケージは含まれていません
✅ package-lock.json: クリーンな状態を維持
✅ 即座に利用可能: 上記ルールを守れば安全に使用できます
詳細: BleepingComputer - NPMサプライチェーン攻撃記事
- Node.js 18.0.0以上
- npm(
npm ciコマンドのみ使用) - Slack Workspace管理者権限(App作成用)
- Dify APIアクセス
- インターネット接続(Slack/Dify API通信用)
git clone https://github.com/ijuinryukichi/slack-dify-bridge.git
cd slack-dify-bridgenpm ci # package-lock.jsonに従った安全なインストールcp .env.example .env.envファイルを編集して必要な情報を入力:
# Slack設定
SLACK_BOT_TOKEN=xoxb-your-bot-token
SLACK_APP_TOKEN=xapp-your-app-token
# Dify設定
DIFY_API_KEY=app-your-dify-api-key
DIFY_API_BASE_URL=https://api.dify.ai/v1
# オプション
DEBUG=false
PORT=3000# 開発モード(自動リロード付き)
npm run dev
# 本番モード
npm run build
npm start- Slack APIにアクセス
- 「Create New App」→「From scratch」を選択
- App名を入力(例:Dify Bridge Bot)
- Workspaceを選択
- 左メニューの「Socket Mode」を選択
- 「Enable Socket Mode」をON
- App-Level Tokenを作成
- Token Name:
socket-token(任意) - Scopes:
connections:writeを選択
- Token Name:
- 生成されたトークン(
xapp-で始まる)をコピー →.envのSLACK_APP_TOKENに設定
- 左メニューの「OAuth & Permissions」を選択
- 「Scopes」→「Bot Token Scopes」に以下を追加:
app_mentions:read- メンション読み取りchannels:history- チャンネル履歴読み取りchannels:read- チャンネル情報読み取りchat:write- メッセージ送信groups:history- プライベートチャンネル履歴groups:read- プライベートチャンネル情報im:history- DM履歴読み取りim:read- DM情報読み取りim:write- DM送信users:read- ユーザー情報読み取り
- 左メニューの「Event Subscriptions」を選択
- 「Enable Events」をON
- 「Subscribe to bot events」に以下を追加:
app_mention- メンション検知message.channels- チャンネルメッセージmessage.groups- プライベートチャンネルmessage.im- ダイレクトメッセージ
- 左メニューの「Install App」を選択
- 「Install to Workspace」をクリック
- 権限を確認して「Allow」
- Bot User OAuth Token(
xoxb-で始まる)をコピー →.envのSLACK_BOT_TOKENに設定
- Slackでチャンネルを開く
- チャンネル名をクリック → 「Integrations」タブ
- 「Add an App」でBotを追加
- Difyにログイン
- アプリケーションを選択または作成
- 「API Access」を開く
- 「API Key」をコピー →
.envのDIFY_API_KEYに設定
- Difyでアプリケーションを作成(Chat型)
- プロンプトやナレッジベースを設定
- 「Publish」で公開
@BotName こんにちは
Botとの1対1チャットで直接メッセージを送信
通常のチャンネルと同様に、Botを追加してメンション
メッセージと一緒に画像ファイルを添付すると、Difyが画像を認識して回答します。
- 対応形式: JPG, PNG, GIF等の一般的な画像フォーマット
- 用途例: 画像の内容質問、OCR、画像分析など
.envの設定を確認npm run devでログを確認(事前にnpm ci実行済みか確認)- Slack AppのSocket Modeが有効か確認
必要な環境変数が設定されていません。.envファイルを確認してください。
- Botがチャンネルに追加されているか確認
groups:historyとgroups:read権限があるか確認
- API Keyが正しいか確認
- Dify側でアプリケーションが公開されているか確認
DEBUG=trueでより詳細なログを確認
# 開発サーバー起動(自動リロード)
npm run dev
# TypeScriptコンパイル
npm run build
# 本番実行
npm start
# コード検証
npm run lint
# 型チェック
npm run typecheck
# クリーンビルド
npm run clean && npm run build
# ⚠️ 注意: 新しいパッケージ追加は禁止
# npm install <package> # 使用しないでください- 🖼️ 画像ファイルアップロード機能を追加
- ⏱️ 高度なタイムアウト処理(60秒)
- 💬 動的メッセージ更新(処理中→結果)
- 🔍 ログレベル動的切り替え
- 🛡️ エラーハンドリング強化
- 🚨 NPMセキュリティ警告と対策追加
- 🚀 初回リリース
- Socket Mode対応
- 基本的なメッセージング機能
slack-dify-bridge/
├── src/
│ ├── index.ts # エントリーポイント
│ ├── slack-handler.ts # Slack イベントハンドラー(ファイル処理含む)
│ ├── dify-client.ts # Dify API クライアント(アップロード対応)
│ └── config.ts # 設定管理
├── dist/ # ビルド出力
├── .env.example # 環境変数テンプレート
├── package.json # プロジェクト設定
├── tsconfig.json # TypeScript設定
└── README.md # このファイル
-
カスタマーサポートBot
- FAQナレッジベースを構築
- 画像での問い合わせ対応(スクリーンショット分析)
-
技術ドキュメント検索Bot
- 社内ドキュメントをRAG化
- コード質問への回答
-
画像分析Bot
- 画像内容の説明
- OCR機能での文字抽出
- ダイアグラムの解析
-
多言語対応Bot
- 自動翻訳機能
- 多言語ナレッジベース
- ターミナルでログを表示しながらデモ(DEBUG=true)
- 画像送信で視覚的なインパクト
- Private channelでの動作を実演
- レスポンス時間を計測して性能アピール
Issue報告やPull Requestは歓迎します!
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature) - Commit your Changes (
git commit -m 'Add some AmazingFeature') - Push to the Branch (
git push origin feature/AmazingFeature) - Open a Pull Request
MIT License - 詳細はLICENSEファイルを参照
- Slack Bolt Framework
- Dify
- 勉強会メンバーの皆様
問題が発生した場合は、Issuesでお知らせください。
Made with ❤️ for Dify Study Group