斯拉克
套接字模式(默认)
快速设置(初学者)
- 创建一个 Slack 应用并启用套接字模式。
- 创建一个应用令牌 (
xapp-...) 和机器人令牌 (xoxb-...)。 - 为 OpenClaw 设置令牌并启动网关。
设置
- 在 https://api.slack.com/apps. 中从头开始创建一个 Slack 应用。
- 启用套接字模式,然后转到基本信息 → 应用级令牌 → 使用范围
connections:write生成令牌和范围。复制应用令牌 (xapp-...)。 - 转到OAuth 和权限 → 添加机器人令牌范围(使用下方清单)。单击安装到工作区。复制机器人用户 OAuth 令牌 (
xoxb-...)。 - 可选:转到OAuth 和权限 → 添加用户令牌范围(参见下方只读列表)。重新安装应用并复制用户 OAuth 令牌 (
xoxp-...)。 - 转到事件订阅 → 启用事件并订阅:
message.*(包括编辑/删除/线程广播)app_mentionreaction_added,reaction_removedmember_joined_channel,member_left_channelchannel_renamepin_added,pin_removed
- 邀请机器人进入您希望它读取的频道。
- 转到斜杠命令→ 如果您使用
channels.slack.slashCommand,则创建/openclaw。如果您启用原生命令,则为每个内置命令添加一个斜杠命令(名称与/help相同)。Slack的原生命令默认关闭,除非您设置channels.slack.commands.native: true(全局commands.native设为"auto",这会使Slack保持关闭状态)。 - 转到应用主页→ 启用消息选项卡,以便用户可以向机器人发送私信。
channels.slack.accounts,并配合每账户令牌以及可选的 name。共享模式请参见 gateway/configuration。
__HEADING_0__OpenClaw 配置(最小)
通过环境变量设置令牌(推荐):
SLACK_APP_TOKEN=xapp-...SLACK_BOT_TOKEN=xoxb-...
用户令牌(可选)
OpenClaw 可以使用 Slack 用户令牌 (xoxp-...) 执行读操作(获取历史记录、置顶消息、添加反应、使用表情符号、获取成员信息)。默认情况下,此模式仅用于读取:如果存在用户令牌,读操作会优先使用用户令牌;写操作仍使用机器人令牌,除非您明确选择启用。即使启用了 userTokenReadOnly: false,只要机器人令牌可用,写操作仍会优先使用机器人令牌。
用户令牌在配置文件中进行配置(不支持环境变量)。对于多账户,设置 channels.slack.accounts.<id>.userToken。
包含机器人、应用和用户令牌的示例:
令牌使用
- 读操作(历史记录、反应列表、置顶列表、表情符号列表、成员信息、搜索)在已配置时优先使用用户令牌,否则使用机器人令牌。
- 写操作(发送/编辑/删除消息、添加/移除反应、置顶/取消置顶、文件上传)默认使用机器人令牌。如果
userTokenReadOnly: false已启用且没有可用的机器人令牌,OpenClaw 将回退到用户令牌。
历史背景
channels.slack.historyLimit(或channels.slack.accounts.*.historyLimit)控制最近多少条频道/群组消息会被纳入提示中。- 默认回退到
messages.groupChat.historyLimit。设置0可禁用此功能(默认值为 50)。
设置
- 创建一个 Slack 应用并禁用套接字模式(如果您只使用 HTTP,则可选)。
- 转到基本信息,然后复制签名密钥。
- 转到OAuth 和权限,安装应用,并复制机器人用户 OAuth 令牌 (
xoxb-...)。 - 转到事件订阅,启用事件并将请求 URL 设置为您网关的 Webhook 路径(默认
/slack/events)。 - 转到交互性和快捷方式,启用并设置相同的请求 URL。
- 转到斜杠命令,为您的命令设置相同的请求 URL。
https://gateway-host/slack/events
__HEADING_0__OpenClaw 配置(最小)
channels.slack.accounts.<id>.mode = "http" 并为每个账户提供唯一的 webhookPath,以便每个 Slack 应用都能指向自己的 URL。
清单(可选)
使用此 Slack 应用清单可快速创建应用(如需可调整名称或命令)。如果您计划配置用户令牌,请务必包含用户范围。slash_commands 条目(与 /help 列表匹配)。使用 channels.slack.commands.native 进行覆盖。
范围(当前 vs 可选)
Slack 的 Conversations API 按类型划分范围:您只需为实际接触的对话类型获取范围,例如频道、群组、私信和多用户私信。有关概述,请参见 https://docs.slack.dev/apis/web-api/using-the-conversations-api/。。机器人令牌范围(必需)
-
chat:write(通过chat.postMessage发送/更新/删除消息) https://docs.slack.dev/reference/methods/chat.postMessage -
im:write(通过conversations.open打开用户私信) https://docs.slack.dev/reference/methods/conversations.open -
channels:history,groups:history,im:history,mpim:historyhttps://docs.slack.dev/reference/methods/conversations.history -
channels:read,groups:read,im:read,mpim:readhttps://docs.slack.dev/reference/methods/conversations.info -
users:read(用户查找) https://docs.slack.dev/reference/methods/users.info -
reactions:read,reactions:write(reactions.get/reactions.add) https://docs.slack.dev/reference/methods/reactions.get https://docs.slack.dev/reference/methods/reactions.add -
pins:read,pins:write(pins.list/pins.add/pins.remove) https://docs.slack.dev/reference/scopes/pins.read https://docs.slack.dev/reference/scopes/pins.write -
emoji:read(emoji.list) https://docs.slack.dev/reference/scopes/emoji.read -
files:write(通过files.uploadV2上传) https://docs.slack.dev/messaging/working-with-files/#upload
用户令牌范围(可选,默认只读)
如果您配置channels.slack.userToken,请在“用户令牌范围”下添加这些范围。
channels:history,groups:history,im:history,mpim:historychannels:read,groups:read,im:read,mpim:readusers:readreactions:readpins:reademoji:readsearch:read
当前不需要(但未来可能需要)
-
mpim:write(仅当我们通过conversations.open添加群组 DM 打开/DM 开始功能时) -
groups:write(仅当我们添加私有频道管理功能:创建/重命名/邀请/归档时) -
chat:write.public(仅当我们希望在机器人不在的频道中发布内容时) https://docs.slack.dev/reference/scopes/chat.write.public -
users:read.email(仅在我们需要来自users.info的电子邮件字段时) https://docs.slack.dev/changelog/2017-04-narrowing-email-access -
files:read(仅在我们开始列出/读取文件元数据时)
配置
Slack 仅使用套接字模式(无 HTTP Webhook 服务器)。提供两种令牌:SLACK_BOT_TOKENSLACK_APP_TOKEN
messages.ackReaction + messages.ackReactionScope 全局控制。使用 messages.removeAckAfterReply 可在机器人回复后清除确认反应。
限制
- 出站文本被分块为
channels.slack.textChunkLimit(默认 4000)。 - 可选换行分块:设置
channels.slack.chunkMode="newline"可在长度分块之前按空行(段落边界)进行分割。 - 媒体上传受
channels.slack.mediaMaxMb限制(默认 20)。
回复线程化
默认情况下,OpenClaw会在主频道中回复。使用channels.slack.replyToMode 控制自动线程化:
| 模式 | 行为 |
|---|---|
off | 默认。 在主频道中回复。仅当触发消息已在线程中时才进行线程化。 |
first | 第一次回复进入线程(在触发消息下方),后续回复回到主频道。有助于在避免线程混乱的同时保持上下文可见。 |
all | 所有回复都进入线程。使对话保持集中,但可能会降低可见性。 |
slack sendMessage)。
按聊天类型线程化
您可以通过将 channels.slack.replyToModeByChatType 设置为每种聊天类型来配置不同的线程化行为:
direct: 1:1 私信(Slackim)group: 群组私信 / MPIM(Slackmpim)channel: 标准频道(公共/私人)
replyToModeByChatType.<chatType>replyToMode- 提供方默认(
off)
channels.slack.dm.replyToMode 仍作为 direct 的后备方案,当未设置聊天类型覆盖时适用。
示例:
仅对私信进行线程化:
手动线程化标签
为了更精细地控制,可在代理回复中使用以下标签:[[reply_to_current]]— 回复触发消息(开始/继续线程)。[[reply_to:<id>]]— 回复特定消息 ID。
会话 + 路由
- 私信共享
main会话(类似于 WhatsApp/Telegram)。 - 频道映射到
agent:<agentId>:slack:channel:<channelId>会话。 - 斜杠命令使用
agent:<agentId>:slack:slash:<userId>会话(前缀可通过channels.slack.slashCommand.sessionPrefix配置)。 - 如果 Slack 不提供
channel_type,OpenClaw 会根据频道 ID 前缀推断(D,C,G),并默认使用channel,以保持会话密钥稳定。 - 原生命令注册使用
commands.native(全球默认"auto"→ Slack 关闭),并可使用channels.slack.commands.native按工作区覆盖。文本命令需要独立的/...消息,并可使用commands.text: false禁用。Slack 斜杠命令在 Slack 应用中管理,不会自动删除。使用commands.useAccessGroups: false可绕过命令的访问组检查。 - 完整命令列表 + 配置:斜杠命令
私信安全(配对)
- 默认:
channels.slack.dm.policy="pairing"— 未知私信发件人会收到一个配对代码(1 小时后失效)。 - 通过:
openclaw pairing approve slack <code>批准。 - 若要允许任何人:设置
channels.slack.dm.policy="open"和channels.slack.dm.allowFrom=["*"]。 channels.slack.dm.allowFrom接受用户 ID、@句柄或电子邮件(在启动时解析,前提是令牌允许)。向导接受用户名并在设置期间解析为 ID,前提是令牌允许。
组策略
channels.slack.groupPolicy控制频道处理(open|disabled|allowlist)。allowlist要求频道必须列在channels.slack.channels中。- 如果您只设置
SLACK_BOT_TOKEN/SLACK_APP_TOKEN,从未创建channels.slack部分,
groupPolicy 为 open。添加 channels.slack.groupPolicy、
channels.defaults.groupPolicy 或频道白名单以锁定设置。
- 配置向导接受
#channel名称,并在可行的情况下将其解析为 ID
- 在启动时,OpenClaw会将白名单中的频道或用户名称在令牌允许的情况下解析为ID。
- 若要允许不使用任何频道,请设置
channels.slack.groupPolicy: "disabled"(或保持白名单为空)。
channels.slack.channels.<id> 或 channels.slack.channels.<name>):
allow:在groupPolicy="allowlist"时允许或拒绝该频道。requireMention:对该频道实施提及限制。tools:可选的每频道工具政策覆盖(allow/deny/alsoAllow)。toolsBySender:可选的每发件人工具政策覆盖(密钥为发件人 ID/@句柄/电子邮件;支持"*"通配符)。allowBots:允许在此频道中发布由机器人撰写的消息(默认:否)。users:可选的每频道用户白名单。skills:技能过滤器(omit = 所有技能,empty = 无技能)。systemPrompt:为该频道设置额外的系统提示(与主题/目的结合)。enabled:设置false可禁用该频道。
交付目标
与 Cron/CLI 发送一起使用:user:<id>用于私信channel:<id>用于频道
工具操作
可通过channels.slack.actions.*限制 Slack 工具的操作:
| 操作组 | 默认 | 备注 |
|---|---|---|
| 反应 | 已启用 | 反应 + 反应列表 |
| 消息 | 已启用 | 读取/发送/编辑/删除 |
| 置顶 | 已启用 | 置顶/取消置顶/列表 |
| 成员信息 | 已启用 | 成员信息 |
| 表情符号列表 | 已启用 | 自定义表情符号列表 |
安全注意事项
- 写操作默认使用机器人令牌,因此改变状态的操作始终限定于应用程序的机器人权限和身份。
- 设置
userTokenReadOnly: false可允许在无法使用机器人令牌时使用用户令牌进行写操作,这意味着操作将以安装用户的访问权限执行。请将用户令牌视为高度特权,并严格控制操作门控和白名单。 - 如果您启用用户令牌写操作,请确保用户令牌包含您预期的写范围(
chat:write,reactions:write,pins:write,files:write),否则这些操作将失败。
备注
- 提及限制由
channels.slack.channels控制(将requireMention设置为true);agents.list[].groupChat.mentionPatterns(或messages.groupChat.mentionPatterns)也被视为提及。 - 多代理覆盖:在
agents.list[].groupChat.mentionPatterns上设置每代理模式。 - 反应通知遵循
channels.slack.reactionNotifications(使用reactionAllowlist时搭配allowlist模式)。 - 默认情况下会忽略机器人撰写的消息;可通过
channels.slack.allowBots或channels.slack.channels.<id>.allowBots进行启用。 - 警告:如果您允许回复其他机器人(
channels.slack.allowBots=true或channels.slack.channels.<id>.allowBots=true),请通过requireMention,channels.slack.channels.<id>.users白名单和/或清除AGENTS.md和SOUL.md中的护栏,以防止机器人之间的回复循环。 - 对于 Slack 工具,反应删除语义请参见 /tools/reactions。
- 在允许且不超过尺寸限制的情况下,附件将下载到媒体存储中。