Slack
Slack:Socket モードまたは HTTP(Events API)モードの設定方法。
Socket Mode(デフォルト)
#
初心者向けクイックセットアップ
1. Slack Appを作成し、<strong>Socket Mode</strong>を有効にします。
2. <strong>App Token</strong>(<code>xapp-...</code>)と<strong>Bot Token</strong>(<code>xoxb-...</code>)を作成します。
3. OpenClawにtokenを設定し、gatewayを起動します。
Minimal configuration:
{
channels: {
slack: {
enabled: true,
appToken: "xapp-...",
botToken: "xoxb-...",
},
},
}#
Detailed Setup
1. https://api.slack.com/appsでSlack Appを作成します(From scratch)。
2. <strong>Socket Mode</strong> → 有効にします。次に<strong>Basic Information</strong> → <strong>App-Level Tokens</strong> → <strong>Generate Token and Scopes</strong>に移動し、scope <code>connections:write</code>を追加します。<strong>App Token</strong>(<code>xapp-...</code>)をコピーします。
3. <strong>OAuth & Permissions</strong> → bot token scopesを追加します(イベントサブスクリプションと一致させるために、以下のmanifestを使用することをお勧めします)。<strong>Install to Workspace</strong>をクリックし、<strong>Bot User OAuth Token</strong>(<code>xoxb-...</code>)をコピーします。
4. オプション:<strong>OAuth & Permissions</strong> → <strong>User Token Scopes</strong>を追加します(以下のread-onlyリスト)。appを再インストールし、<strong>User OAuth Token</strong>(<code>xoxp-...</code>)をコピーします。
5. <strong>Event Subscriptions</strong> → eventsを有効にし、以下をサブスクライブします:
- <code>message.*</code>(編集/削除/スレッドブロードキャストを含む)
- <code>app_mention</code>
- <code>reaction_added</code>、<code>reaction_removed</code>
- <code>member_joined_channel</code>、<code>member_left_channel</code>
- <code>channel_rename</code>
- <code>pin_added</code>、<code>pin_removed</code>
6. botを読み取りたいチャンネルに招待します。
7. Slash Commands:<code>channels.slack.slashCommand</code>を使用する場合、<code>/openclaw</code>を作成します。native commandsを有効にする場合、各組み込みコマンドに対してslash commandを作成する必要があります(<code>/help</code>内のコマンドと同じ名前)。Slackは<code>channels.slack.commands.native: true</code>を明示的に設定しない限り、デフォルトでnative commandsを有効にしません(グローバル<code>commands.native</code>はデフォルトで<code>"auto"</code>で、Slackを無効にします)。
8. App Home:<strong>Messages Tab</strong>を有効にし、ユーザーがbotにDMできるようにします。
scopes/eventsの設定漏れを避けるために、以下のmanifestを使用することをお勧めします。
マルチアカウント:'<code>'channels.slack.accounts'</code>'を使用して、各workspaceのtokenを設定します(オプションの'<code>'name'</code>')。共有構造については'<a href="/gateway/configuration#telegramaccounts--discordaccounts--slackaccounts--signalaccounts--imessageaccounts">'/gateway/configuration'</a>'を参照してください。
#
OpenClaw Configuration (Minimal)
環境変数の使用をお勧めします(サーバーに適しています):
- <code>SLACK_APP_TOKEN=xapp-...</code>
- <code>SLACK_BOT_TOKEN=xoxb-...</code>
または設定ファイル:
{
channels: {
slack: {
enabled: true,
appToken: "xapp-...",
botToken: "xoxb-...",
},
},
}#
User token(オプション)
OpenClawはSlack user token(<code>xoxp-...</code>)を使用して、読み取り操作(履歴、pins、reactions、emoji、メンバー情報など)を行うことができます。デフォルトでは読み取り専用のまま:読み取りはuser tokenを優先(存在する場合)、書き込みは明示的にuser tokenの書き込みを許可しない限り、bot tokenを優先します。<code>userTokenReadOnly: false</code>を設定しても、bot tokenが利用可能な限り、書き込み操作はbot tokenを優先します。
user tokenは設定ファイルでのみ設定可能です(envはサポートされていません)。マルチアカウントの場合、'<code>'channels.slack.accounts.'<id>'.userToken'</code>'を設定します。
Example (bot + app + user tokens):
{
channels: {
slack: {
enabled: true,
appToken: "xapp-...",
botToken: "xoxb-...",
userToken: "xoxp-...",
},
},
}user tokenの書き込みを許可(慎重に使用):
{
channels: {
slack: {
enabled: true,
appToken: "xapp-...",
botToken: "xoxb-...",
userToken: "xoxp-...",
userTokenReadOnly: false,
},
},
}##
Token使用ルール
- 読み取り操作(履歴、reactionsリスト、pinsリスト、emojiリスト、メンバー情報、検索)はuser tokenを優先(設定されている場合)、それ以外はbot tokenを使用します。
- 書き込み操作(送信/編集/削除メッセージ、追加/削除reactions、pin/unpin、ファイルアップロード)はデフォルトでbot tokenを使用します。<code>userTokenReadOnly: false</code>でbot tokenが利用できない場合のみ、user tokenにフォールバックします。
#
履歴コンテキスト
- <code>channels.slack.historyLimit</code>(または<code>channels.slack.accounts.*.historyLimit</code>)は、コンテキストとして注入する最近のチャンネル/グループメッセージの数を制御します。
- <code>messages.groupChat.historyLimit</code>にフォールバックします。<code>0</code>に設定して無効化(デフォルト50)。
HTTP Mode(Events API)
GatewayがHTTPS経由でSlackからアクセス可能な場合(典型的なサーバーデプロイ)、HTTP webhookモードがより適しています。HTTPモードはEvents API + Interactivity + Slash Commandsを使用し、同じRequest URLを共有します。
#
Setup
1. Slack Appを作成し、(オプションで)Socket Modeを無効にします(HTTPのみを使用する場合)。
2. <strong>Basic Information</strong> → <strong>Signing Secret</strong>をコピーします。
3. <strong>OAuth & Permissions</strong> → appをインストールし、<strong>Bot User OAuth Token</strong>(<code>xoxb-...</code>)をコピーします。
4. <strong>Event Subscriptions</strong> → eventsを有効にし、<strong>Request URL</strong>をgatewayのwebhook path(デフォルト<code>/slack/events</code>)に向けます。
5. <strong>Interactivity & Shortcuts</strong> → 有効にし、同じ<strong>Request URL</strong>を設定します。
6. <strong>Slash Commands</strong> → コマンドに同じ<strong>Request URL</strong>を設定します。
公開URLの例:
<code>https://gateway-host/slack/events</code>
#
OpenClaw Configuration (Minimal)
{
channels: {
slack: {
enabled: true,
mode: "http",
botToken: "xoxb-...",
signingSecret: "your-signing-secret",
webhookPath: "/slack/events",
},
},
}マルチアカウントHTTPモード:各アカウントに'<code>'channels.slack.accounts.'<id>'.mode = "http"'</code>'を設定し、各アカウントに一意の'<code>'webhookPath'</code>'を提供して、各Slack Appが異なるURLを指すようにします。
#
Manifest(オプション)
manifestを使用してappを迅速に作成できます(必要に応じて名前/コマンドを変更)。user tokenを設定する予定がある場合は、user scopesも追加してください。
{
"display_information": {
"name": "OpenClaw",
"description": "Slack connector for OpenClaw"
},
"features": {
"bot_user": {
"display_name": "OpenClaw",
"always_online": false
},
"app_home": {
"messages_tab_enabled": true,
"messages_tab_read_only_enabled": false
},
"slash_commands": [
{
"command": "/openclaw",
"description": "Send a message to OpenClaw",
"should_escape": false
}
]
},
"oauth_config": {
"scopes": {
"bot": [
"chat:write",
"channels:history",
"channels:read",
"groups:history",
"groups:read",
"groups:write",
"im:history",
"im:read",
"im:write",
"mpim:history",
"mpim:read",
"mpim:write",
"users:read",
"app_mentions:read",
"reactions:read",
"reactions:write",
"pins:read",
"pins:write",
"emoji:read",
"commands",
"files:read",
"files:write"
],
"user": [
"channels:history",
"channels:read",
"groups:history",
"groups:read",
"im:history",
"im:read",
"mpim:history",
"mpim:read",
"users:read",
"reactions:read",
"pins:read",
"emoji:read",
"search:read"
]
}
},
"settings": {
"socket_mode_enabled": true,
"event_subscriptions": {
"bot_events": [
"app_mention",
"message.channels",
"message.groups",
"message.im",
"message.mpim",
"reaction_added",
"reaction_removed",
"member_joined_channel",
"member_left_channel",
"channel_rename",
"pin_added",
"pin_removed"
]
}
}
}native commandsを有効にする場合、公開したい各コマンドに対して<code>slash_commands</code>エントリを追加する必要があります(<code>/help</code>リストと一貫性)、<code>channels.slack.commands.native</code>を使用してデフォルトの動作を上書きします。
Scopes(現在必要 vs オプション)
Slack Conversations APIは会話タイプごとにscopeを分割しています:使用する会話タイプのscopes(channels、groups、im、mpim)のみが必要です。概要:https://docs.slack.dev/apis/web-api/using-the-conversations-api/
#
Bot Token Scopes (Required)
- <code>chat:write</code>(送信/更新/削除メッセージ)
https://docs.slack.dev/reference/methods/chat.postMessage
- <code>im:write</code>(DM会話を開く、user DMs用)
https://docs.slack.dev/reference/methods/conversations.open
- <code>channels:history</code>、<code>groups:history</code>、<code>im:history</code>、<code>mpim:history</code>
https://docs.slack.dev/reference/methods/conversations.history
- <code>channels:read</code>、<code>groups:read</code>、<code>im:read</code>、<code>mpim:read</code>
https://docs.slack.dev/reference/methods/conversations.info
- <code>users:read</code>(ユーザー情報クエリ)
https://docs.slack.dev/reference/methods/users.info
- <code>reactions:read</code>、<code>reactions:write</code>
https://docs.slack.dev/reference/methods/reactions.get
https://docs.slack.dev/reference/methods/reactions.add
- <code>pins:read</code>、<code>pins:write</code>
https://docs.slack.dev/reference/scopes/pins.read
https://docs.slack.dev/reference/scopes/pins.write
- <code>emoji:read</code>
https://docs.slack.dev/reference/scopes/emoji.read
- <code>files:write</code>(アップロード)
https://docs.slack.dev/messaging/working-with-files/#upload
#
User token scopes(オプション、デフォルトで読み取り専用)
<code>channels.slack.userToken</code>を設定した場合のみ、<strong>User Token Scopes</strong>に追加します:
- <code>channels:history</code>、<code>groups:history</code>、<code>im:history</code>、<code>mpim:history</code>
- <code>channels:read</code>、<code>groups:read</code>、<code>im:read</code>、<code>mpim:read</code>
- <code>users:read</code>
- <code>reactions:read</code>
- <code>pins:read</code>
- <code>emoji:read</code>
- <code>search:read</code>
Configuration Example
{
"slack": {
"enabled": true,
"botToken": "xoxb-...",
"appToken": "xapp-...",
"groupPolicy": "allowlist",
"dm": {
"enabled": true,
"policy": "pairing",
"allowFrom": ["U123", "U456", "*"],
"groupEnabled": false,
"groupChannels": ["G123"],
"replyToMode": "all"
},
"channels": {
"C123": { "allow": true, "requireMention": true },
"#general": {
"allow": true,
"requireMention": true,
"users": ["U123"],
"skills": ["search", "docs"],
"systemPrompt": "Keep answers short."
}
},
"reactionNotifications": "own",
"reactionAllowlist": ["U123"],
"replyToMode": "off",
"actions": {
"reactions": true,
"reactionLevel": "minimal"
},
"commands": {
"native": false
}
}
}Ack reactionsはグローバルの'<code className="bg-white/10 px-1.5 py-0.5 rounded text-emerald-300 text-sm">'messages.ackReaction'</code>' + '<code className="bg-white/10 px-1.5 py-0.5 rounded text-emerald-300 text-sm">'messages.ackReactionScope'</code>'で制御されます;'<code className="bg-white/10 px-1.5 py-0.5 rounded text-emerald-300 text-sm">'messages.removeAckAfterReply'</code>'は返信後にack reactionを削除できます。
Threading
Slackはスレッド返信をサポートしています。OpenClawはスレッドまたはトップレベルで返信できます。
- <code>channels.slack.replyToMode</code>: <code>off | all | first | last</code>
- <code>off</code>:トップレベルで返信(スレッドなし)。
- <code>all</code>:すべてのメッセージをスレッドで返信。
- <code>first</code>:最初のメッセージのみをスレッドで返信。
- <code>last</code>:最後のメッセージのみをスレッドで返信。
- デフォルト:<code>off</code>。
- チャンネルごとの上書き:'<code>'channels.slack.channels.'<id>'.replyToMode'</code>'。
- チャンネルごとのユーザー:'<code>'channels.slack.channels.'<id>'.users'</code>'。
- チャンネルごとのスキル:'<code>'channels.slack.channels.'<id>'.skills'</code>'。
- チャンネルごとのシステムプロンプト:'<code>'channels.slack.channels.'<id>'.systemPrompt'</code>'。
DMのThreading
DMもスレッドを使用できます。<code>channels.slack.dm.replyToMode</code>で設定します。
- <code>off</code>:トップレベルで返信。
- <code>all</code>:すべてのメッセージをスレッドで返信。
- <code>first</code>:最初のメッセージのみをスレッドで返信。
- <code>last</code>:最後のメッセージのみをスレッドで返信。
- デフォルト:<code>off</code>。
チャットタイプごとのThreading設定
<code>channels.slack.replyToModeByChatType</code>を使用します:
{
channels: {
slack: {
replyToMode: "off",
replyToModeByChatType: {
direct: "all",
group: "first",
},
},
},
}サポートされるチャットタイプ:
- <code>direct</code>: One-on-one DMs (Slack <code>im</code>)
- <code>group</code>:グループDM/MPIM(Slack <code>mpim</code>)
- <code>channel</code>:通常のチャンネル(公開/プライベート)
Priority:
1. 1. '<code>'replyToModeByChatType.'<chatType>''</code>'
2. 2. <code>replyToMode</code>
3. 3. デフォルト値(<code>off</code>)
レガシー設定<code>channels.slack.dm.replyToMode</code>は<code>direct</code>のフォールバックとして受け入れられます。
#
手動Threadingタグ
より細かい制御が必要な場合、エージェント返信で使用します:
- <code>[[reply_to_current]]</code>
- '<code>'[[reply_to:'<id>']]'</code>'
セッションとルーティング
- DMは<code>main</code>セッションを使用します(WhatsApp/Telegramと同様)。
- チャンネルセッションキー:'<code>'agent:'<agentId>':slack:channel:'<channelId>''</code>'。
- Slash commandセッションキー:'<code>'agent:'<agentId>':slack:slash:'<userId>''</code>'(プレフィックスは'<code>'channels.slack.slashCommand.sessionPrefix'</code>'で設定可能)。
- Slackが<code>channel_type</code>を提供しない場合、OpenClawはチャンネルIDプレフィックス(<code>D</code>/<code>C</code>/<code>G</code>)で推論し、デフォルトで<code>channel</code>を使用して、セッションキーの安定性を確保します。
- ネイティブコマンド登録:グローバル<code>commands.native</code>はデフォルトで<code>"auto"</code>(Slackはデフォルトで無効)、<code>channels.slack.commands.native</code>で上書き可能。テキストコマンドは別の<code>/...</code>メッセージを必要とし、<code>commands.text: false</code>で無効化可能。Slack slash commandsはSlack Appによって管理され、自動的に削除されません。<code>commands.useAccessGroups: false</code>でaccess-groupチェックをバイパスできます。
- コマンドリストと設定:'<a href="/tools/slash-commands">'/tools/slash-commands'</a>'
DMセキュリティ(Pairing)
- デフォルト:<code>channels.slack.dm.policy="pairing"</code>(不明な送信者はペアリングコードを受け取り、1時間で期限切れ)。
- Approve: '<code>'openclaw pairing approve slack '<code>''</code>'.
- 誰でもDMを許可する場合:<code>channels.slack.dm.policy="open"</code>かつ<code>channels.slack.dm.allowFrom=["*"]</code>。
- <code>channels.slack.dm.allowFrom</code>はuser id、@handle、またはemailをサポートします(tokensが許可する場合、起動時に解決)。ウィザードは可能な場合、usernameをidに解決します。
グループポリシー(Group policy)
- <code>channels.slack.groupPolicy</code>はチャンネル処理を制御します:<code>open|disabled|allowlist</code>。
- <code>allowlist</code>は<code>channels.slack.channels</code>で許可されたチャンネルを一覧表示することを要求します。
- <code>SLACK_BOT_TOKEN</code>/<code>SLACK_APP_TOKEN</code>のみを設定し、<code>channels.slack</code>設定セクションを作成しない場合、実行時のデフォルト<code>groupPolicy</code>は<code>open</code>です。<code>channels.slack.groupPolicy</code>/<code>channels.defaults.groupPolicy</code>またはチャンネルallowlistを明示的に設定すると、制限されます。