Slack
状态:通过 Slack 应用集成,私信和频道功能已可用于生产环境。默认模式为 Socket 模式;也支持 HTTP Events API 模式。
快速设置
{
channels: {
slack: {
enabled: true,
mode: "socket",
appToken: "xapp-...",
botToken: "xoxb-...",
},
},
}令牌模型
botToken+appToken是 Socket 模式所必需的。- HTTP 模式需要
botToken+signingSecret。 - 配置令牌会覆盖环境变量回退。
SLACK_BOT_TOKEN/SLACK_APP_TOKEN环境变量回退仅适用于默认账户。userToken(xoxp-...) 仅支持配置(无环境变量回退),并默认为只读行为 (userTokenReadOnly: true)。- 可选:添加
chat:write.customize权限,如果你希望外发消息使用活跃代理身份(自定义username和图标)。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(可选的多方即时消息允许列表)
多账户优先级:
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)
- 为状态命令注册
- 如果未启用原生命令,你可以通过
channels.slack.slashCommand运行单个配置的斜杠命令。 - 原生参数菜单现在会适配其渲染策略:
- 最多 5 个选项:按钮块
- 6-100 个选项:静态选择菜单
- 超过 100 个选项:外部选择菜单,当交互性选项处理器可用时进行异步选项过滤
- 如果编码的选项值超过 Slack 限制,流程将回退到按钮
- 对于长选项负载,斜杠命令参数菜单在分派选定值之前使用确认对话框。
默认斜杠命令设置:
enabled: falsename: "openclaw"sessionPrefix: "slack:slash"ephemeral: true
斜杠会话使用隔离的键:
agent:<agentId>:slack:slash:<userId>
并且仍然针对目标会话路由命令执行 (CommandTargetSessionKey)。
线程、会话与回复标签
- 私信路由为
direct;频道为channel;多方即时消息为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。 channel_id_changed可以在启用configWrites时迁移频道配置键。- 频道主题/目的元数据被视为不受信任的上下文,可以注入到路由上下文中。
- 块操作和模态交互会发出结构化的
Slack interaction: ...系统事件,包含丰富的负载字段:- 块操作:选定的值、标签、选择器值和
workflow_*元数据 - 模态
view_submission和view_closed事件,包含路由的频道元数据和表单输入
- 块操作:选定的值、标签、选择器值和
确认反应
ackReaction 在 OpenClaw 处理入站消息时发送一个确认表情符号。解析顺序:
channels.slack.accounts.<accountId>.ackReactionchannels.slack.ackReactionmessages.ackReaction- 代理身份表情符号回退(
agents.list[].identity.emoji,否则为 "👀")
注意:
- Slack 期望短代码(例如
"eyes")。 - 使用
""可为 Slack 账户或全局禁用该反应。
输入反应回退
typingReaction 在 OpenClaw 处理回复时,向入站 Slack 消息添加一个临时反应,然后在运行完成时移除它。当 Slack 原生助手输入状态不可用时(尤其是在私信中),这是一个有用的回退。解析顺序:
channels.slack.accounts.<accountId>.typingReactionchannels.slack.typingReaction
注意:
- Slack 期望短代码(例如
"hourglass_flowing_sand")。 - 该反应是尽力而为的,并在回复或失败路径完成后尝试自动清理。
清单与权限范围清单
故障排除
文本流式传输
OpenClaw 通过 Agents and AI Apps API 支持 Slack 原生文本流式传输。channels.slack.streaming 控制实时预览行为:
off:禁用实时预览流式传输。partial(默认):用最新的部分输出替换预览文本。block:追加分块的预览更新。progress:在生成时显示进度状态文本,然后发送最终文本。
channels.slack.nativeStreaming 在 streaming 为 partial 时控制 Slack 的原生流式传输 API (chat.startStream / chat.appendStream / chat.stopStream)(默认: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 高信号 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
- 模式/认证: