Slack
Socket 模式(默认)
快速设置(新手)
- 创建一个 Slack 应用并启用 Socket Mode。
- 创建一个 App Token(
xapp-...)和 Bot Token(xoxb-...)。 - 为 OpenClaw 设置令牌并启动 Gateway 网关。
最小配置:
{
channels: {
slack: {
enabled: true,
appToken: "xapp-...",
botToken: "xoxb-...",
},
},
}
设置
- 在 https://api.slack.com/apps 创建一个 Slack 应用(从头开始)。
- Socket Mode → 开启。然后前往 Basic Information → App-Level Tokens → Generate Token and Scopes,添加
connections:write权限范围。复制 App Token(xapp-...)。 - OAuth & Permissions → 添加 bot token 权限范围(使用下面的 manifest)。点击 Install to Workspace。复制 Bot User OAuth Token(
xoxb-...)。 - 可选:OAuth & Permissions → 添加 User Token Scopes(参见下面的只读列表)。重新安装应用并复制 User OAuth Token(
xoxp-...)。 - Event Subscriptions → 启用事件并订阅:
message.*(包括 编辑/删除/线程广播)app_mentionreaction_added、reaction_removedmember_joined_channel、member_left_channelchannel_renamepin_added、pin_removed
- 邀请机器人加入你希望它读取的频道。
- Slash Commands → 如果你使用
channels.slack.slashCommand,创建/openclaw。如果启用原生命令,为每个内置命令添加一个斜杠命令(名称与/help相同)。除非你设置channels.slack.commands.native: true,否则 Slack 默认关闭原生命令(全局commands.native是"auto",对 Slack 保持关闭)。 - App Home → 启用 Messages Tab 以便用户可以私信机器人。
使用下面的 manifest 以保持权限范围和事件同步。
多账户支持:使用 channels.slack.accounts 配置每个账户的令牌和可选的 name。参见 gateway/configuration 了解共享模式。
OpenClaw 配置(最小)
通过环境变量设置令牌(推荐):
SLACK_APP_TOKEN=xapp-...SLACK_BOT_TOKEN=xoxb-...
或通过配置:
{
channels: {
slack: {
enabled: true,
appToken: "xapp-...",
botToken: "xoxb-...",
},
},
}
用户令牌(可选)
OpenClaw 可以使用 Slack 用户令牌(xoxp-...)进行读取操作(历史记录、置顶、表情回应、表情符号、成员信息)。默认情况下保持只读:当存在用户令牌时,读取优先使用用户令牌,而写入仍然使用 bot 令牌,除非你明确选择加入。即使设置了 userTokenReadOnly: false,当 bot 令牌可用时,写入仍然优先使用 bot 令牌。
用户令牌在配置文件中配置(不支持环境变量)。对于多账户,设置 channels.slack.accounts.<id>.userToken。
包含 bot + app + 用户令牌的示例:
{
channels: {
slack: {
enabled: true,
appToken: "xapp-...",
botToken: "xoxb-...",
userToken: "xoxp-...",
},
},
}
明确设置 userTokenReadOnly 的示例(允许用户令牌写入):
{
channels: {
slack: {
enabled: true,
appToken: "xapp-...",
botToken: "xoxb-...",
userToken: "xoxp-...",
userTokenReadOnly: false,
},
},
}
令牌使用
- 读取操作(历史记录、表情回应列表、置顶列表、表情符号列表、成员信息、搜索)在配置了用户令牌时优先使用用户令牌,否则使用 bot 令牌。
- 写入操作(发送/编辑/删除消息、添加/移除表情回应、置顶/取消置顶、文件上传)默认使用 bot 令牌。如果
userTokenReadOnly: false且没有可用的 bot 令牌,OpenClaw 会回退到用户令牌。
历史上下文
channels.slack.historyLimit(或channels.slack.accounts.*.historyLimit)控制将多少条最近的频道/群组消息包含到提示中。- 回退到
messages.groupChat.historyLimit。设置为0以禁用(默认 50)。
HTTP 模式(Events API)
当你的 Gateway 网关可以通过 HTTPS 被 Slack 访问时(服务器部署的典型情况),使用 HTTP webhook 模式。 HTTP 模式使用 Events API + Interactivity + Slash Commands,共享一个请求 URL。
设置
- 创建一个 Slack 应用并禁用 Socket Mode(如果你只使用 HTTP 则可选)。
- Basic Information → 复制 Signing Secret。
- OAuth & Permissions → 安装应用并复制 Bot User OAuth Token(
xoxb-...)。 - Event Subscriptions → 启用事件并将 Request URL 设置为你的 Gateway 网关 webhook 路径(默认
/slack/events)。 - Interactivity & Shortcuts → 启用并设置相同的 Request URL。
- Slash Commands → 为你的命令设置相同的 Request URL。
示例请求 URL:
https://gateway-host/slack/events
OpenClaw 配置(最小)
{
channels: {
slack: {
enabled: true,
mode: "http",
botToken: "xoxb-...",
signingSecret: "your-signing-secret",
webhookPath: "/slack/events",
},
},
}
多账户 HTTP 模式:设置 channels.slack.accounts.<id>.mode = "http" 并为每个账户提供唯一的 webhookPath,以便每个 Slack 应用可以指向自己的 URL。
Manifest(可选)
使用此 Slack 应用 manifest 快速创建应用(如果需要可以调整名称/命令)。如果你计划配置用户令牌,请包含用户权限范围。
{
"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"
]
}
}
}
如果启用原生命令,为每个要公开的命令添加一个 slash_commands 条目(与 /help 列表匹配)。使用 channels.slack.commands.native 覆盖。
权限范围(当前 vs 可选)
Slack 的 Conversations API 是按类型区分的:你只需要你实际接触的会话类型(channels、groups、im、mpim)的权限范围。概述参见 https://docs.slack.dev/apis/web-api/using-the-conversations-api/。