概要
Slackコネクタは、Slackワークスペースのチャンネルメッセージを取得して Fess のインデックスに登録する機能を提供します。
この機能には fess-ds-slack プラグインが必要です。
対応コンテンツ
パブリックチャンネルのメッセージ
プライベートチャンネルのメッセージ
ファイル添付(オプション)
前提条件
プラグインのインストールが必要です
Slack Appの作成と権限設定が必要です
OAuth Access Tokenの取得が必要です
プラグインのインストール
管理画面の「システム」→「プラグイン」からインストールします:
Maven Centralから
fess-ds-slack-X.X.X.jarをダウンロードプラグイン管理画面からアップロードしてインストール
Fess を再起動
または、詳細は プラグイン を参照してください。
設定方法
管理画面から「クローラー」→「データストア」→「新規作成」で設定します。
基本設定
| 項目 | 設定例 |
|---|---|
| 名前 | Company Slack |
| ハンドラ名 | SlackDataStore |
| 有効 | オン |
パラメーター設定
token=xoxp-your-token-here
channels=general,random
file_crawl=false
include_private=false
パラメーター一覧
| パラメーター | 必須 | 説明 |
|---|---|---|
token | はい | SlackアプリのOAuth Access Token |
channels | はい | クロール対象チャンネル(カンマ区切り、または *all) |
file_crawl | いいえ | ファイルもクロールする(デフォルト: false) |
include_private | いいえ | プライベートチャンネルも含める(デフォルト: false) |
スクリプト設定
title=message.user + " #" + message.channel
digest=message.text + "\n" + message.attachments
content=message.text
created=message.timestamp
timestamp=message.timestamp
url=message.permalink
利用可能なフィールド
| フィールド | 説明 |
|---|---|
message.text | メッセージのテキストコンテンツ |
message.user | メッセージ送信者のディスプレイネーム |
message.channel | メッセージが送信されたチャンネル名 |
message.timestamp | メッセージ送信日時 |
message.permalink | メッセージのパーマリンク |
message.attachments | 添付ファイルのフォールバック情報 |
Slack App設定
1. Slack Appの作成
https://api.slack.com/apps にアクセス:
「Create New App」をクリック
「From scratch」を選択
アプリ名を入力(例: Fess Crawler)
ワークスペースを選択
「Create App」をクリック
2. OAuth & Permissionsの設定
「OAuth & Permissions」メニューで:
**Bot Token Scopes**に以下を追加:
パブリックチャンネルのみの場合:
channels:history- パブリックチャンネルメッセージの読み取りchannels:read- パブリックチャンネル情報の読み取り
プライベートチャンネルも含める場合(include_private=true):
channels:historychannels:readgroups:history- プライベートチャンネルメッセージの読み取りgroups:read- プライベートチャンネル情報の読み取り
ファイルもクロールする場合(file_crawl=true):
files:read- ファイルコンテンツの読み取り
3. アプリのインストール
「Install App」メニューで:
「Install to Workspace」をクリック
権限を確認して「許可する」をクリック
「Bot User OAuth Token」をコピー(
xoxb-で始まる)
注釈
通常は xoxb- で始まるBot User OAuth Tokenを使用しますが、 パラメーターでは xoxp- で始まるUser OAuth Tokenも使用可能です。
4. チャンネルへの追加
クロール対象のチャンネルにAppを追加:
Slackでチャンネルを開く
チャンネル名をクリック
「インテグレーション」タブを選択
「アプリを追加する」をクリック
作成したアプリを追加
使用例
特定のチャンネルをクロール
パラメーター:
token=xoxb-your-slack-bot-token-here
channels=general,random,tech-discussion
file_crawl=false
include_private=false
スクリプト:
title=message.user + " #" + message.channel
digest=message.text + "\n" + message.attachments
content=message.text
created=message.timestamp
timestamp=message.timestamp
url=message.permalink
すべてのチャンネルをクロール
パラメーター:
token=xoxb-your-slack-bot-token-here
channels=*all
file_crawl=false
include_private=false
スクリプト:
title=message.user + " #" + message.channel
content=message.text
created=message.timestamp
url=message.permalink
プライベートチャンネルを含めてクロール
パラメーター:
token=xoxb-your-slack-bot-token-here
channels=*all
file_crawl=false
include_private=true
スクリプト:
title=message.user + " #" + message.channel
digest=message.text
content=message.text + "\n添付: " + message.attachments
created=message.timestamp
url=message.permalink
ファイルも含めてクロール
パラメーター:
token=xoxb-your-slack-bot-token-here
channels=general,random
file_crawl=true
include_private=false
スクリプト:
title=message.user + " #" + message.channel
content=message.text
created=message.timestamp
url=message.permalink
詳細なメッセージ情報を含める
スクリプト:
title="[" + message.channel + "] " + message.user
content=message.text
digest=message.text.substring(0, Math.min(200, message.text.length()))
created=message.timestamp
timestamp=message.timestamp
url=message.permalink
トラブルシューティング
認証エラー
症状: invalid_auth または not_authed
確認事項:
トークンが正しくコピーされているか確認
トークンの形式を確認:
Bot User OAuth Token:
xoxb-で始まるUser OAuth Token:
xoxp-で始まる
アプリがワークスペースにインストールされているか確認
必要な権限が付与されているか確認
チャンネルが見つからない
症状: channel_not_found
確認事項:
チャンネル名が正しいか確認(# は不要)
アプリがチャンネルに追加されているか確認
プライベートチャンネルの場合、
include_private=trueを設定チャンネルが存在し、アーカイブされていないか確認
メッセージが取得できない
症状: クロールは成功するがメッセージが0件
確認事項:
必要なスコープが付与されているか確認:
channels:historychannels:readプライベートチャンネルの場合:
groups:history、groups:read
チャンネルにメッセージが存在するか確認
アプリがチャンネルに追加されているか確認
Slackアプリが有効になっているか確認
権限不足エラー
症状: missing_scope
解決方法:
Slack App設定で必要なスコープを追加:
パブリックチャンネル:
channels:historychannels:read
プライベートチャンネル:
groups:historygroups:read
ファイル:
files:read
アプリを再インストール
Fess を再起動
ファイルがクロールできない
症状: file_crawl=true でもファイルが取得されない
確認事項:
files:readスコープが付与されているか確認チャンネルに実際にファイルが投稿されているか確認
ファイルのアクセス権限を確認
APIレート制限
症状: rate_limited
解決方法:
クロール間隔を長くする
チャンネル数を減らす
データストアを複数に分割してスケジュール分散
Slack APIの制限:
Tier 3メソッド: 50+ リクエスト/分
Tier 4メソッド: 100+ リクエスト/分
大量のメッセージがある場合
症状: クロールに時間がかかる、またはタイムアウトする
解決方法:
チャンネルを分割して複数のデータストアを設定
クロールスケジュールを分散
古いメッセージを除外する設定を検討
スクリプトの高度な使用例
メッセージのフィルタリング
特定のユーザーのメッセージのみインデックス:
if (message.user == "田中太郎") {
title=message.user + " #" + message.channel
content=message.text
created=message.timestamp
url=message.permalink
}
キーワードを含むメッセージのみ:
if (message.text.contains("重要") || message.text.contains("障害")) {
title="[重要] " + message.user + " #" + message.channel
content=message.text
created=message.timestamp
url=message.permalink
}
メッセージの加工
長いメッセージの要約:
title=message.user + " #" + message.channel
content=message.text
digest=message.text.length() > 100 ? message.text.substring(0, 100) + "..." : message.text
created=message.timestamp
url=message.permalink
チャンネル名の整形:
title="[Slack: " + message.channel + "] " + message.user
content=message.text
created=message.timestamp
url=message.permalink
参考情報
データストアコネクタの概要 - データストアコネクタ概要
Atlassianコネクタ - Atlassianコネクタ
データストアクロール - データストア設定ガイド