Slack
状态:通过 Slack 应用集成支持私信和渠道的生产环境。默认模式为 Socket Mode;同时也支持 HTTP Events API 模式。Pairing
Slack 私信默认为配对模式。
Slash commands
原生命令行为和命令目录。
Channel 故障排除
跨渠道诊断和修复手册。
快速设置
- Socket 模式(默认)
- HTTP Events API 模式
创建 Slack 应用和令牌
在 Slack 应用设置中:
- 启用 Socket Mode
- 创建具有
connections:write的 App Token (xapp-...) - 安装应用并复制 Bot Token (
xoxb-...)
订阅应用事件
为以下内容订阅机器人事件:
app_mentionmessage.channels,message.groups,message.im,message.mpimreaction_added,reaction_removedmember_joined_channel,member_left_channelchannel_renamepin_added,pin_removed
Token 模型
- Socket Mode 需要
botToken+appToken。 - HTTP 模式需要
botToken+signingSecret。 - 配置 token 会覆盖环境变量回退。
SLACK_BOT_TOKEN/SLACK_APP_TOKEN环境变量回退仅适用于默认账户。userToken(xoxp-...) 仅通过配置(无环境变量回退),默认为只读行为 (userTokenReadOnly: true)。- 可选:如果希望发出的消息使用当前代理身份(自定义
username和图标),请添加chat:write.customize。icon_emoji使用:emoji_name:语法。
访问控制和路由
- 私信 policy
- Channel policy
- 提及和渠道用户
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)
- 为状态命令注册
- 如果未启用本机命令,您可以通过
channels.slack.slashCommand运行单个配置的斜杠命令。 - 本机参数菜单现在会调整其渲染策略:
- 最多 5 个选项:按钮块
- 6-100 个选项:静态选择菜单
- 超过 100 个选项:外部选择菜单,当交互选项处理程序可用时进行异步选项过滤
- 如果编码的选项值超过 Slack 限制,流程将回退到按钮
- 对于较长的选项载荷,斜杠命令参数菜单在分发选定的值之前会使用确认对话框。
交互式回复
Slack 可以呈现代理创作的交互式回复控件,但默认情况下禁用此功能。 全局启用:[[slack_buttons: Approve:approve, Reject:reject]][[slack_select: Choose a target | Canary:canary, Production:production]]
- 这是 Slack 特定的 UI。其他通道不会将 Slack Block Kit 指令转换为其自己的按钮系统。
- 交互式回调值是由 OpenClaw 生成的不透明令牌,而不是原始代理编写的值。
- 如果生成的交互式块超过 Slack Block Kit 限制,OpenClaw 将回退到原始文本回复,而不是发送无效的块负载。
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 不同,在 Slack 中,显式标签在 "off" 模式下仍然有效。这种差异反映了平台的串连模型:Telegram 串连会从渠道中隐藏消息,而 Telegram 回复在主聊天流程中仍然可见。
媒体、分块和投递
Inbound attachments
Inbound attachments
Slack 文件附件从 Slack 托管的私有 URL(令牌认证请求流程)下载,并在获取成功且大小限制允许时写入媒体存储。运行时入站大小上限默认为
20MB,除非被 channels.slack.mediaMaxMb 覆盖。Outbound text and files
Outbound text and files
- 文本块使用
channels.slack.textChunkLimit(默认 4000)-channels.slack.chunkMode="newline"启用段落优先分割 - 文件发送使用 Slack 上传 API 并可包含串连回复(thread_ts) - 出站媒体上限在配置时遵循channels.slack.mediaMaxMb;否则渠道发送使用媒体管道中的 MIME 类型默认值
Delivery targets
Delivery targets
首选显式目标:
user:<id>用于私信channel:<id>用于渠道
操作和门控
Slack 操作由channels.slack.actions.* 控制。
当前 Slack 工具中可用的操作组:
| 组 | 默认 |
|---|---|
| 消息 | 已启用 |
| 表情回应 | 已启用 |
| 固定 | 已启用 |
| 成员信息 | 已启用 |
| 表情列表 | 已启用 |
事件和操作行为
- 消息编辑/删除/线程广播被映射到系统事件。
- 表情回应添加/移除事件被映射到系统事件。
- 成员加入/离开、渠道创建/重命名和固定添加/移除事件被映射到系统事件。
- 助手线程状态更新(用于线程中的“正在输入…”指示器)使用
assistant.threads.setStatus并且需要 bot 范围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")。 - 使用
""来为 Slack 账户或全局禁用该表情回应。
正在输入表情回应回退
typingReaction 在 Slack 处理回复时向入站 OpenClaw 消息添加一个临时的表情回应,然后在运行完成时将其移除。当 Slack 原生助手正在输入功能不可用时,这是一个有用的回退方案,尤其是在私信中。
解析顺序:
channels.slack.accounts.<accountId>.typingReactionchannels.slack.typingReaction
- Slack 期望使用短代码(例如
"hourglass_flowing_sand")。 - 反应采用尽力而为的方式,并在回复或失败路径完成后尝试自动清理。
清单和范围检查清单
Slack app manifest example
Slack app manifest example
可选的用户令牌范围(读取操作)
可选的用户令牌范围(读取操作)
如果您配置了
channels.slack.userToken,典型的读取范围包括:channels:history,groups:history,im:history,mpim:historychannels:read,groups:read,im:read,mpim:readusers:readreactions:readpins:reademoji:readsearch:read(如果您依赖 Slack 搜索读取)
故障排除
渠道内无回复
渠道内无回复
请按顺序检查:
groupPolicy- 渠道允许列表(
channels.slack.channels) requireMention- 每个渠道的
users允许列表
私信消息被忽略
私信消息被忽略
请检查:
channels.slack.dm.enabledchannels.slack.dmPolicy(或旧版的channels.slack.dm.policy)- 配对批准/允许列表条目
Socket 模式无法连接
Socket 模式无法连接
在 Slack 应用设置中验证 bot + app 令牌以及 Socket 模式是否已启用。
HTTP mode not receiving events
HTTP mode not receiving events
验证:
- signing secret
- webhook path
- Slack Request URLs (Events + Interactivity + Slash Commands)
- 每个 HTTP 账户的唯一
webhookPath
Native/slash commands not firing
Native/slash commands not firing
验证您的意图是:
- 原生命令模式 (
channels.slack.commands.native: true),并在 Slack 中注册了匹配的斜杠命令 - 还是单斜杠命令模式 (
channels.slack.slashCommand.enabled: true)
commands.useAccessGroups 和 渠道/user allowlists。文本流式传输
OpenClaw 通过 Agents and AI Apps Slack 支持 API 原生文本流式传输。channels.slack.streaming 控制实时预览行为:
off:禁用实时预览流式传输。partial(默认):用最新的部分输出替换预览文本。block:追加分块预览更新。progress:在生成时显示进度状态文本,然后发送最终文本。
streaming 为 partial 时,channels.slack.nativeStreaming 控制 Slack 的原生流式传输 API (chat.startStream / chat.appendStream / chat.stopStream)(默认值:true)。
禁用原生 Slack 流式传输(保持草稿预览行为):
channels.slack.streamMode(replace | status_final | append) 会自动迁移到channels.slack.streaming。- 布尔值
channels.slack.streaming会自动迁移到channels.slack.nativeStreaming。
要求
- 在您的 Slack 应用设置中启用 Agents and AI Apps。
- 确保应用具有
assistant:writescope。 - 该消息必须有一个可用的回复线程。线程选择仍然遵循
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
- 模式/认证:
相关
本页面源自 openclaw/openclaw,由 BeaversLab 翻译,遵循 MIT 协议 发布。