Slack
Slack
状态:通过 Slack 应用集成为私聊 + 频道做好生产准备。默认模式是 Socket Mode;也支持 HTTP Events API 模式。
快速设置
创建 Slack 应用和令牌
在 Slack 应用设置中:
- 启用Socket Mode
- 创建应用令牌(
xapp-...)带有connections:write - 安装应用并复制机器人令牌(
xoxb-...)
配置 OpenClaw
{
channels: {
slack: {
enabled: true,
mode: "socket",
appToken: "xapp-...",
botToken: "xoxb-...",
},
},
}
环境变量回退(仅默认账户):
SLACK_APP_TOKEN=xapp-...
SLACK_BOT_TOKEN=xoxb-...
订阅应用事件
订阅机器人事件:
app_mentionmessage.channels、message.groups、message.im、message.mpimreaction_added、reaction_removedmember_joined_channel、member_left_channelchannel_renamepin_added、pin_removed
同时为私聊启用 App Home消息选项卡。
启动网关
openclaw gateway
令牌模型
- Socket Mode 需要
botToken+appToken。 - HTTP 模式需要
botToken+signingSecret。 - 配置令牌覆盖环境变量回退。
SLACK_BOT_TOKEN/SLACK_APP_TOKEN环境变量回退仅适用于默认账户。userToken(xoxp-...)仅限配置(无环境变量回退)并默认为只读行为(userTokenReadOnly: true)。- 可选:如果你想让传出消息使用活动代理身份(自定义
username和图标),添加chat:write.customize。icon_emoji使用:emoji_name:语法。
对于动作/目录读取,配置时可以优先使用用户令牌。对于写入,机器人令牌仍然是首选;仅当 userTokenReadOnly: false 且机器人令牌不可用时才允许用户令牌写入。
访问控制和路由
channels.slack.dmPolicy 控制私聊访问(旧版:channels.slack.dm.policy):
pairing(默认)allowlistopen(需要channels.slack.allowFrom包含"*";旧版:channels.slack.dm.allowFrom)disabled
私聊标志:
dm.enabled(默认 true)channels.slack.allowFrom(首选)dm.allowFrom(旧版)dm.groupEnabled(群组私聊默认 false)dm.groupChannels(可选 MPIM 白名单)
多账户优先级:
channels.slack.accounts.default.allowFrom仅适用于default账户。- 命名账户在其自身的
allowFrom未设置时继承channels.slack.allowFrom。 - 命名账户不继承
channels.slack.accounts.default.allowFrom。
私聊中的配对使用 openclaw pairing approve slack <code>。
命令和斜杠行为
- 原生命令自动模式对 Slack 关闭(
commands.native: "auto"不启用 Slack 原生命令)。 - 使用
channels.slack.commands.native: true(或全局commands.native: true)启用原生 Slack 命令处理程序。 - 启用原生命令时,在 Slack 中注册匹配的斜杠命令(
/<command>名称),但有一个例外:- 为状态命令注册
/agentstatus(Slack 保留/status)
- 为状态命令注册
- 原生参数菜单现在适应其渲染策略:
- 最多 5 个选项:按钮块
- 6-100 个选项:静态选择菜单
- 超过 100 个选项:外部选择,当交互选项处理程序可用时进行异步选项过滤
- 如果编码的选项值超过 Slack 限制,流程回退到按钮
- 对于长选项负载,斜杠命令参数菜单在分发选定值之前使用确认对话框。
默认斜杠命令设置:
enabled: falsename: "openclaw"sessionPrefix: "slack:slash"ephemeral: true
斜杠会话使用隔离键:
agent:<agentId>:slack:slash:<userId>
并将命令执行路由到目标对话会话(CommandTargetSessionKey)。
主题、会话和回复标签
- 私聊路由为
direct;频道为channel;MPIM 为group。 - 使用默认
session.dmScope=main,Slack 私聊折叠到代理主会话。 - 频道会话:
agent:<agentId>:slack:channel:<channelId>。 - 主题回复在适用时可以创建主题会话后缀(
:thread:<threadTs>)。 channels.slack.thread.historyScope默认是thread;thread.inheritParent默认是false。channels.slack.thread.initialHistoryLimit控制新主题会话启动时获取多少现有主题消息(默认20;设置0禁用)。
回复主题控制:
channels.slack.replyToMode:off|first|all(默认off)channels.slack.replyToModeByChatType:按direct|group|channel- 私聊的旧版回退:
channels.slack.dm.replyToMode
支持手动回复标签:
[[reply_to_current]][[reply_to:<id>]]
注意:replyToMode="off" 禁用 Slack 中所有回复主题,包括显式 [[reply_to_*]] 标签。这与 Telegram 不同,Telegram 在 "off" 模式下仍尊重显式标签。差异反映了平台主题模型:Slack 主题将消息隐藏在频道之外,而 Telegram 回复在主聊天流中保持可见。
媒体、分块和传递
动作和门
Slack 动作由 channels.slack.actions.* 控制。
当前 Slack 工具中可用的动作组:
| 组 | 默认 |
|---|---|
| messages | 启用 |
| reactions | 启用 |
| pins | 启用 |
| memberInfo | 启用 |
| emojiList | 启用 |
事件和操作行为
- 消息编辑/删除/主题广播映射到系统事件。
- 反应添加/删除事件映射到系统事件。
- 成员加入/离开、频道创建/重命名和固定添加/删除事件映射到系统事件。
- 助手主题状态更新(用于主题中的"正在输入..."指示器)使用
assistant.threads.setStatus并需要机器人范围assistant:write。 - 当
configWrites启用时,channel_id_changed可以迁移频道配置键。 - 频道主题/目的元数据被视为不受信任的上下文,可以注入到路由上下文中。
- 块动作和模态交互发出结构化的
Slack interaction: ...系统事件,带有丰富的负载字段:- 块动作:选定的值、标签、选择器值和
workflow_*元数据 - 模态
view_submission和view_closed事件,带有路由频道元数据和表单输入
- 块动作:选定的值、标签、选择器值和
确认反应
ackReaction 在 OpenClaw 处理入站消息时发送确认表情符号。
解析顺序:
channels.slack.accounts.<accountId>.ackReactionchannels.slack.ackReactionmessages.ackReaction- 代理身份表情符号回退(
agents.list[].identity.emoji,否则 "👀")
注意:
- Slack 需要短代码(例如
"eyes")。 - 使用
""为频道或账户禁用反应。
Manifest 和范围检查清单
故障排除
文本流式传输
OpenClaw 通过 Agents and AI Apps API 支持 Slack 原生文本流式传输。
channels.slack.streaming 控制实时预览行为:
off:禁用实时预览流式传输。partial(默认):用最新的部分输出替换预览文本。block:追加块状预览更新。progress:生成时显示进度状态文本,然后发送最终文本。
channels.slack.nativeStreaming 控制 Slack 的原生流式 API(chat.startStream / chat.appendStream / chat.stopStream),当 streaming 为 partial 时(默认:true)。
禁用原生 Slack 流式传输(保留草稿预览行为):
channels:
slack:
streaming: partial
nativeStreaming: false
旧版键:
channels.slack.streamMode(replace | status_final | append)自动迁移到channels.slack.streaming。- 布尔
channels.slack.streaming自动迁移到channels.slack.nativeStreaming。
要求
- 在 Slack 应用设置中启用Agents and AI Apps。
- 确保应用具有
assistant:write范围。 - 该消息必须有可用的回复主题。主题选择仍遵循
replyToMode。
行为
- 第一个文本块启动流(
chat.startStream)。 - 后续文本块追加到同一流(
chat.appendStream)。 - 回复结束完成流(
chat.stopStream)。 - 媒体和非文本负载回退到正常传递。
- 如果流式传输在回复中途失败,OpenClaw 对其余负载回退到正常传递。
配置参考指针
主要参考:
-
高信号 Slack 字段:
- 模式/认证:
mode、botToken、appToken、signingSecret、webhookPath、accounts.* - 私聊访问:
dm.enabled、dmPolicy、allowFrom(旧版:dm.policy、dm.allowFrom)、dm.groupEnabled、dm.groupChannels - 兼容性切换:
dangerouslyAllowNameMatching(紧急;除非需要否则保持关闭) - 频道访问:
groupPolicy、channels.*、channels.*.users、channels.*.requireMention - 主题/历史:
replyToMode、replyToModeByChatType、thread.*、historyLimit、dmHistoryLimit、dms.*.historyLimit - 传递:
textChunkLimit、chunkMode、mediaMaxMb、streaming、nativeStreaming - 操作/功能:
configWrites、commands.native、slashCommand.*、actions.*、userToken、userTokenReadOnly
- 模式/认证: