Slack
状态:适用于 Slack 应用集成中的私信和频道,已具备生产就绪能力。默认模式为 Socket 模式;同时支持 HTTP 事件 API 模式。快速设置
- Socket 模式(默认)
- HTTP 事件 API 模式
创建 Slack 应用和令牌
在 Slack 应用设置中:
- 启用 Socket 模式
- 创建带有
connections:write权限的 应用令牌 (xapp-...) - 安装应用并复制 机器人令牌 (
xoxb-...)
订阅应用事件
订阅机器人事件:
app_mentionmessage.channels,message.groups,message.im,message.mpimreaction_added,reaction_removedmember_joined_channel,member_left_channelchannel_renamepin_added,pin_removed
令牌模型
- Socket 模式需要
botToken+appToken。 - HTTP 模式需要
botToken+signingSecret。 - 配置中的令牌优先于环境变量回退。
SLACK_BOT_TOKEN/SLACK_APP_TOKEN环境变量仅对默认账户生效。userToken(xoxp-...) 仅支持配置,且没有环境变量回退,默认只读行为 (userTokenReadOnly: true)。- 可选:如需让外发消息使用当前代理身份(自定义
username和头像),可额外添加chat:write.customize权限。icon_emoji采用:emoji_name:格式。
访问控制与路由
- 私信策略
- 频道策略
- 提及及频道用户
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只对默认账户生效。- 命名账户若未设置
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;多方私信(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 中即使禁用,显式标签仍会生效。差异因平台的线程模型不同:Slack 线程会隐藏对应消息;而 Telegram 回复依然显示在主聊天流。
媒体、分块及发送
入站附件
入站附件
Slack 文件附件从 Slack 托管的私有 URL 下载(需要令牌认证请求流程),如下载成功且大小许可,则写入媒体存储。默认入站大小上限为
20MB,可通过 channels.slack.mediaMaxMb 覆盖。出站文本和文件
出站文本和文件
- 文本分块依据
channels.slack.textChunkLimit(默认 4000 字符) channels.slack.chunkMode="newline"启用优先按段落分割- 文件发送调用 Slack 上传 API,可包含线程回复参数(
thread_ts) - 出站媒体大小上限遵循
channels.slack.mediaMaxMb(若配置);否则使用媒体管道默认 MIME 类型限制
发送目标
发送目标
优选显式目标:
- 私信用
user:<id> - 频道用
channel:<id>
操作与门控
Slack 操作由channels.slack.actions.* 控制。
当前 Slack 工具中可用的操作组:
| 组名 | 默认状态 |
|---|---|
| messages | 启用 |
| reactions | 启用 |
| pins | 启用 |
| memberInfo | 启用 |
| emojiList | 启用 |
事件与运行行为
- 消息编辑/删除/线程广播映射为系统事件。
- 表情添加/删除事件映射为系统事件。
- 成员加入/离开、频道创建/重命名、固定消息添加/删除事件映射为系统事件。
- 助理线程状态更新(线程中“正在输入…”指示),使用
assistant.threads.setStatus,需机器人权限assistant:write。 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 在 OpenClaw 处理中,为入站 Slack 消息添加临时表情,处理完成后移除。该功能是 Slack 本地助理输入态不可用时的有效替代,尤其适用于私信。
解析优先级:
channels.slack.accounts.<accountId>.typingReactionchannels.slack.typingReaction
- Slack 期望使用表情简码(如
"hourglass_flowing_sand")。 - 该表情为尽力添加且自动清理,发送回复或异常路径完成后尝试移除。
清单与权限范围核对清单
Slack 应用清单示例
Slack 应用清单示例
可选的用户令牌权限范围(读取操作)
可选的用户令牌权限范围(读取操作)
若配置了
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 应用设置中的 Socket 模式启用情况。
HTTP 模式未收到事件
HTTP 模式未收到事件
验证:
- 签名密钥
- webhook 路径
- Slack 请求 URL(事件订阅 + 交互 + 斜线命令)
- HTTP 模式下每个账户的唯一
webhookPath
原生/斜线命令未触发
原生/斜线命令未触发
核实是否:
- 开启了原生命令模式(
channels.slack.commands.native: true)并在 Slack 注册了相应斜线命令 - 或启用了单一斜线命令模式(
channels.slack.slashCommand.enabled: true)
commands.useAccessGroups 及频道/用户白名单设置。文本流式传输
OpenClaw 支持通过 Slack 代理和 AI 应用 API 的原生文本流式传输。channels.slack.streaming 控制实时预览行为:
off:禁用实时预览流式传输。partial(默认):用最新部分输出替换预览文本。block:追加分块预览更新。progress:生成过程中显示进度状态文本,结束后发送最终文本。
channels.slack.nativeStreaming 控制 Slack 的原生流式 API(chat.startStream / chat.appendStream / chat.stopStream),仅当 streaming 为 partial 时生效(默认 true)。
禁用 Slack 原生流式(保留草稿预览行为)示例:
channels.slack.streamMode(replace | status_final | append)会自动迁移到channels.slack.streaming。- 布尔类型的
channels.slack.streaming会自动迁移到channels.slack.nativeStreaming。
要求
- 在 Slack 应用设置中启用 代理和 AI 应用 功能。
- 确保应用具备
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
- 模式/身份认证: