diff --git a/docs/zh-CN/channels/slack.md b/docs/zh-CN/channels/slack.md index 3d8f4eeac..87787e559 100644 --- a/docs/zh-CN/channels/slack.md +++ b/docs/zh-CN/channels/slack.md @@ -1,20 +1,20 @@ --- read_when: - 设置 Slack 或调试 Slack socket/HTTP 模式 -summary: Slack 设置和运行时行为(Socket Mode + HTTP 请求 URL) +summary: Slack 设置和运行时行为(Socket Mode + HTTP Request URLs) title: Slack x-i18n: - generated_at: "2026-04-12T06:23:28Z" + generated_at: "2026-04-12T06:50:10Z" model: gpt-5.4 provider: openai - source_hash: bb9443859b5b1479e25dcf0972940a611b233de55b11c5a6bbfe1f7c5c135cb4 + source_hash: 4b80c1a612b8815c46c675b688639c207a481f367075996dde3858a83637313b source_path: channels/slack.md workflow: 15 --- # Slack -状态:已可用于生产环境,支持通过 Slack 应用集成进行私信和渠道消息。默认模式为 Socket Mode;也支持 HTTP 请求 URL。 +状态:已可用于生产环境,支持通过 Slack 应用集成进行私信和渠道。默认模式为 Socket Mode;也支持 HTTP Request URLs。 @@ -34,12 +34,12 @@ x-i18n: - 在 Slack 应用设置中点击 **[Create New App](https://api.slack.com/apps/new)** 按钮: + 在 Slack 应用设置中,点击 **[Create New App](https://api.slack.com/apps/new)** 按钮: - 选择 **from a manifest**,并为你的应用选择一个工作区 - - 粘贴下方的[示例清单](#manifest-and-scope-checklist),然后继续创建 + - 粘贴下面的[示例清单](#manifest-and-scope-checklist),然后继续创建 - 生成一个具有 `connections:write` 权限的 **App-Level Token**(`xapp-...`) - - 安装应用并复制显示的 **Bot Token**(`xoxb-...`) + - 安装应用,并复制显示的 **Bot Token**(`xoxb-...`) @@ -77,15 +77,15 @@ openclaw gateway - + - 在 Slack 应用设置中点击 **[Create New App](https://api.slack.com/apps/new)** 按钮: + 在 Slack 应用设置中,点击 **[Create New App](https://api.slack.com/apps/new)** 按钮: - 选择 **from a manifest**,并为你的应用选择一个工作区 - - 粘贴[示例清单](#manifest-and-scope-checklist)并在创建前更新 URL - - 保存用于请求验证的 **Signing Secret** - - 安装应用并复制显示的 **Bot Token**(`xoxb-...`) + - 粘贴[示例清单](#manifest-and-scope-checklist),并在创建前更新 URL + - 保存用于请求校验的 **Signing Secret** + - 安装应用,并复制显示的 **Bot Token**(`xoxb-...`) @@ -106,9 +106,9 @@ openclaw gateway ``` - 为多账户 HTTP 使用唯一的 webhook 路径 + 对多账户 HTTP 使用唯一的 webhook 路径 - 为每个账户指定不同的 `webhookPath`(默认是 `/slack/events`),以避免注册发生冲突。 + 为每个账户指定不同的 `webhookPath`(默认为 `/slack/events`),以避免注册冲突。 @@ -148,7 +148,7 @@ openclaw gateway "slash_commands": [ { "command": "/openclaw", - "description": "向 OpenClaw 发送一条消息", + "description": "向 OpenClaw 发送消息", "should_escape": false } ] @@ -205,7 +205,7 @@ openclaw gateway - + ```json { @@ -225,7 +225,7 @@ openclaw gateway "slash_commands": [ { "command": "/openclaw", - "description": "向 OpenClaw 发送一条消息", + "description": "向 OpenClaw 发送消息", "should_escape": false, "url": "https://gateway-host.example.com/slack/events" } @@ -289,15 +289,19 @@ openclaw gateway +### 其他清单设置 + +展示扩展上述默认配置的不同功能。 + - + - 可以使用多个[原生斜杠命令](#commands-and-slash-behavior)来替代单个已配置命令,但有一些细节需要注意: + 可以使用多个[原生斜杠命令](#commands-and-slash-behavior)来替代单个已配置命令,但需要注意一些细节: - - 使用 `/agentstatus` 而不是 `/status`,因为 `/status` 命令是保留的。 - - 同时可用的斜杠命令不能超过 25 个。 + - 使用 `/agentstatus` 而不是 `/status`,因为 `/status` 命令已被保留。 + - 同时最多只能提供 25 个斜杠命令。 - 将你现有的 `features.slash_commands` 部分替换为[可用命令](/zh-CN/tools/slash-commands#command-list)的一个子集: + 将你现有的 `features.slash_commands` 部分替换为[可用命令](/zh-CN/tools/slash-commands#command-list)中的一个子集: @@ -306,7 +310,7 @@ openclaw gateway "slash_commands": [ { "command": "/new", - "description": "开始一个新的会话", + "description": "开始一个新会话", "usage_hint": "[model]" }, { @@ -324,7 +328,7 @@ openclaw gateway }, { "command": "/session", - "description": "管理线程绑定到期时间", + "description": "管理线程绑定过期时间", "usage_hint": "idle 或 max-age " }, { @@ -377,7 +381,7 @@ openclaw gateway }, { "command": "/tools", - "description": "显示当前智能体此刻可以使用什么", + "description": "显示当前智能体此刻可以使用的内容", "usage_hint": "[compact|verbose]" }, { @@ -386,7 +390,7 @@ openclaw gateway }, { "command": "/tasks", - "description": "列出当前会话的活跃/最近后台任务" + "description": "列出当前会话中活跃/最近的后台任务" }, { "command": "/context", @@ -409,20 +413,20 @@ openclaw gateway }, { "command": "/usage", - "description": "控制使用情况页脚或显示成本摘要", + "description": "控制 usage 页脚或显示成本摘要", "usage_hint": "off|tokens|full|cost" } ] ``` - + ```json "slash_commands": [ { "command": "/new", - "description": "开始一个新的会话", + "description": "开始一个新会话", "usage_hint": "[model]", "url": "https://gateway-host.example.com/slack/events" }, @@ -444,7 +448,7 @@ openclaw gateway }, { "command": "/session", - "description": "管理线程绑定到期时间", + "description": "管理线程绑定过期时间", "usage_hint": "idle 或 max-age ", "url": "https://gateway-host.example.com/slack/events" }, @@ -508,7 +512,7 @@ openclaw gateway }, { "command": "/tools", - "description": "显示当前智能体此刻可以使用什么", + "description": "显示当前智能体此刻可以使用的内容", "usage_hint": "[compact|verbose]", "url": "https://gateway-host.example.com/slack/events" }, @@ -519,7 +523,7 @@ openclaw gateway }, { "command": "/tasks", - "description": "列出当前会话的活跃/最近后台任务", + "description": "列出当前会话中活跃/最近的后台任务", "url": "https://gateway-host.example.com/slack/events" }, { @@ -547,7 +551,7 @@ openclaw gateway }, { "command": "/usage", - "description": "控制使用情况页脚或显示成本摘要", + "description": "控制 usage 页脚或显示成本摘要", "usage_hint": "off|tokens|full|cost", "url": "https://gateway-host.example.com/slack/events" } @@ -558,14 +562,14 @@ openclaw gateway - + 如果你希望发出的消息使用当前智能体身份(自定义用户名和图标),而不是默认的 Slack 应用身份,请添加 `chat:write.customize` bot scope。 - 如果你使用 emoji 图标,Slack 期望使用 `:emoji_name:` 语法。 + 如果你使用 emoji 图标,Slack 需要 `:emoji_name:` 语法。 - - 如果你配置了 `channels.slack.userToken`,常见的读取作用域包括: + + 如果你配置了 `channels.slack.userToken`,典型的读取作用域包括: - `channels:history`, `groups:history`, `im:history`, `mpim:history` - `channels:read`, `groups:read`, `im:read`, `mpim:read` @@ -585,32 +589,32 @@ openclaw gateway - `botToken`、`appToken`、`signingSecret` 和 `userToken` 接受明文字符串或 SecretRef 对象。 - 配置中的令牌会覆盖环境变量回退。 - `SLACK_BOT_TOKEN` / `SLACK_APP_TOKEN` 环境变量回退仅适用于默认账户。 -- `userToken`(`xoxp-...`)仅可通过配置提供(没有环境变量回退),并且默认是只读行为(`userTokenReadOnly: true`)。 +- `userToken`(`xoxp-...`)仅支持通过配置设置(无环境变量回退),并且默认是只读行为(`userTokenReadOnly: true`)。 状态快照行为: - Slack 账户检查会跟踪每个凭证对应的 `*Source` 和 `*Status` 字段(`botToken`、`appToken`、`signingSecret`、`userToken`)。 -- 状态值为 `available`、`configured_unavailable` 或 `missing`。 -- `configured_unavailable` 表示该账户通过 SecretRef 或其他非内联密钥源完成了配置,但当前命令/运行时路径无法解析实际值。 +- 状态值可以是 `available`、`configured_unavailable` 或 `missing`。 +- `configured_unavailable` 表示该账户通过 SecretRef 或其他非内联密钥源完成了配置,但当前命令/运行时路径无法解析出实际值。 - 在 HTTP 模式下,会包含 `signingSecretStatus`;在 Socket Mode 下,所需配对是 `botTokenStatus` + `appTokenStatus`。 -对于 actions/目录读取,如果配置了用户令牌,则可以优先使用它。对于写入,仍优先使用 bot 令牌;只有在 `userTokenReadOnly: false` 且 bot 令牌不可用时,才允许使用用户令牌进行写入。 +对于 actions/目录读取,如果已配置,可以优先使用用户令牌。对于写入,仍优先使用 bot 令牌;只有在 `userTokenReadOnly: false` 且 bot 令牌不可用时,才允许使用用户令牌写入。 ## Actions 和门控 Slack actions 由 `channels.slack.actions.*` 控制。 -当前 Slack 工具中可用的 action 分组: +当前 Slack 工具中的可用 action 分组: -| Group | Default | -| ---------- | ------- | -| messages | enabled | -| reactions | enabled | -| pins | enabled | +| 分组 | 默认值 | +| --------- | ------ | +| messages | enabled | +| reactions | enabled | +| pins | enabled | | memberInfo | enabled | -| emojiList | enabled | +| emojiList | enabled | 当前 Slack 消息 actions 包括 `send`、`upload-file`、`download-file`、`read`、`edit`、`delete`、`pin`、`unpin`、`list-pins`、`member-info` 和 `emoji-list`。 @@ -630,13 +634,13 @@ Slack actions 由 `channels.slack.actions.*` 控制。 - `dm.enabled`(默认 true) - `channels.slack.allowFrom`(推荐) - `dm.allowFrom`(旧版) - - `dm.groupEnabled`(群组私信默认 false) + - `dm.groupEnabled`(群组私信默认为 false) - `dm.groupChannels`(可选的 MPIM allowlist) 多账户优先级: - `channels.slack.accounts.default.allowFrom` 仅适用于 `default` 账户。 - - 当命名账户自身未设置 `allowFrom` 时,它们会继承 `channels.slack.allowFrom`。 + - 如果命名账户自身未设置 `allowFrom`,则会继承 `channels.slack.allowFrom`。 - 命名账户不会继承 `channels.slack.accounts.default.allowFrom`。 在私信中进行配对时,使用 `openclaw pairing approve slack `。 @@ -650,28 +654,28 @@ Slack actions 由 `channels.slack.actions.*` 控制。 - `allowlist` - `disabled` - 渠道 allowlist 位于 `channels.slack.channels` 下,应使用稳定的渠道 ID。 + 渠道 allowlist 位于 `channels.slack.channels` 下,并且应使用稳定的渠道 ID。 - 运行时说明:如果 `channels.slack` 完全缺失(仅使用环境变量进行设置),运行时会回退到 `groupPolicy="allowlist"` 并记录一条警告(即使设置了 `channels.defaults.groupPolicy` 也是如此)。 + 运行时说明:如果 `channels.slack` 完全缺失(仅使用环境变量设置),运行时会回退到 `groupPolicy="allowlist"` 并记录警告(即使设置了 `channels.defaults.groupPolicy` 也是如此)。 名称/ID 解析: - - 当令牌访问允许时,渠道 allowlist 条目和私信 allowlist 条目会在启动时解析 - - 无法解析的渠道名称条目会按配置原样保留,但默认不会用于路由 - - 入站授权和渠道路由默认优先基于 ID;直接按用户名/slug 匹配需要 `channels.slack.dangerouslyAllowNameMatching: true` + - 渠道 allowlist 条目和私信 allowlist 条目会在启动时、令牌访问允许的情况下进行解析 + - 无法解析的渠道名称条目会按配置保留,但默认不会用于路由 + - 入站授权和渠道路由默认优先使用 ID;直接按用户名/slug 匹配需要 `channels.slack.dangerouslyAllowNameMatching: true` - 渠道消息默认受提及门控限制。 + 默认情况下,渠道消息会受到提及门控。 提及来源: - 显式应用提及(`<@botId>`) - - 提及正则模式(`agents.list[].groupChat.mentionPatterns`,回退为 `messages.groupChat.mentionPatterns`) - - 隐式回复给 bot 的线程行为(当 `thread.requireExplicitMention` 为 `true` 时禁用) + - 提及正则模式(`agents.list[].groupChat.mentionPatterns`,回退到 `messages.groupChat.mentionPatterns`) + - 隐式回复到 bot 的线程行为(当 `thread.requireExplicitMention` 为 `true` 时禁用) - 每渠道控制(`channels.slack.channels.`;名称仅通过启动时解析或 `dangerouslyAllowNameMatching`): + 每个渠道的控制项(`channels.slack.channels.`;仅能通过启动时解析或 `dangerouslyAllowNameMatching` 使用名称): - `requireMention` - `users`(allowlist) @@ -679,26 +683,26 @@ Slack actions 由 `channels.slack.actions.*` 控制。 - `skills` - `systemPrompt` - `tools`, `toolsBySender` - - `toolsBySender` 键格式:`id:`、`e164:`、`username:`、`name:` 或 `"*"` 通配符 - (旧版无前缀键仍然只映射到 `id:`) + - `toolsBySender` 键格式:`id:`、`e164:`、`username:`、`name:`,或 `"*"` 通配符 + (旧版未加前缀的键仍然只映射到 `id:`) ## 线程、会话和回复标签 -- 私信路由为 `direct`;渠道为 `channel`;MPIM 为 `group`。 -- 使用默认 `session.dmScope=main` 时,Slack 私信会折叠到智能体主会话。 +- 私信路由为 `direct`;渠道路由为 `channel`;MPIM 路由为 `group`。 +- 使用默认的 `session.dmScope=main` 时,Slack 私信会折叠到智能体主会话。 - 渠道会话:`agent::slack:channel:`。 -- 在线程回复适用时,可以创建带线程会话后缀(`:thread:`)的会话。 +- 在线程回复适用时,可以创建线程会话后缀(`:thread:`)。 - `channels.slack.thread.historyScope` 默认为 `thread`;`thread.inheritParent` 默认为 `false`。 -- `channels.slack.thread.initialHistoryLimit` 控制新线程会话启动时抓取多少现有线程消息(默认 `20`;设为 `0` 可禁用)。 -- `channels.slack.thread.requireExplicitMention`(默认 `false`):当设为 `true` 时,会抑制隐式线程提及,因此 bot 仅会在它已参与线程的情况下,响应线程内显式的 `@bot` 提及。否则,在 bot 已参与的线程中回复会绕过 `requireMention` 门控。 +- `channels.slack.thread.initialHistoryLimit` 控制新线程会话开始时会抓取多少条已有线程消息(默认 `20`;设为 `0` 可禁用)。 +- `channels.slack.thread.requireExplicitMention`(默认 `false`):设为 `true` 时,会抑制隐式线程提及,因此 bot 即使已经参与了某个线程,也只会响应该线程内显式的 `@bot` 提及。否则,在 bot 已参与的线程中回复会绕过 `requireMention` 门控。 回复线程控制: -- `channels.slack.replyToMode`:`off|first|all|batched`(默认 `off`) -- `channels.slack.replyToModeByChatType`:按 `direct|group|channel` 分别设置 +- `channels.slack.replyToMode`: `off|first|all|batched`(默认 `off`) +- `channels.slack.replyToModeByChatType`: 按 `direct|group|channel` 分别设置 - 私聊的旧版回退:`channels.slack.dm.replyToMode` 支持手动回复标签: @@ -706,7 +710,7 @@ Slack actions 由 `channels.slack.actions.*` 控制。 - `[[reply_to_current]]` - `[[reply_to:]]` -注意:`replyToMode="off"` 会禁用 Slack 中**所有**回复线程功能,包括显式的 `[[reply_to_*]]` 标签。这与 Telegram 不同,在 Telegram 中,即使在 `"off"` 模式下也仍会遵循显式标签。这种差异反映了平台线程模型的不同:Slack 线程会将消息隐藏在渠道之外,而 Telegram 回复仍会显示在主聊天流中。 +注意:`replyToMode="off"` 会禁用 Slack 中**所有**回复线程功能,包括显式的 `[[reply_to_*]]` 标签。这一点不同于 Telegram,在 Telegram 中显式标签在 `"off"` 模式下仍会生效。这个差异反映了平台的线程模型:Slack 线程会将消息隐藏在渠道之外,而 Telegram 回复仍会保留在主聊天流中可见。 ## 确认反应 @@ -721,8 +725,8 @@ Slack actions 由 `channels.slack.actions.*` 控制。 说明: -- Slack 需要 shortcode(例如 `"eyes"`)。 -- 使用 `""` 可为 Slack 账户或全局禁用该反应。 +- Slack 需要使用 shortcode(例如 `"eyes"`)。 +- 使用 `""` 可以为某个 Slack 账户或全局禁用该反应。 ## 文本流式传输 @@ -735,11 +739,11 @@ Slack actions 由 `channels.slack.actions.*` 控制。 当 `channels.slack.streaming.mode` 为 `partial` 时,`channels.slack.streaming.nativeTransport` 控制 Slack 原生文本流式传输(默认:`true`)。 -- 必须有可用的回复线程,原生文本流式传输和 Slack 助手线程状态才会显示。线程选择仍遵循 `replyToMode`。 -- 当原生流式传输不可用时,渠道和群聊根消息仍可以使用普通草稿预览。 -- 顶层 Slack 私信默认保持非线程形式,因此不会显示线程样式预览;如果你希望在那里看到可见进度,请使用线程回复或 `typingReaction`。 +- 必须有可用的回复线程,原生文本流式传输和 Slack 助手线程状态才会显示。线程选择仍然遵循 `replyToMode`。 +- 当原生流式传输不可用时,渠道和群聊根消息仍可使用普通草稿预览。 +- 顶层 Slack 私信默认保持非线程状态,因此不会显示线程样式的预览;如果你希望在那里看到可见进度,请使用线程回复或 `typingReaction`。 - 媒体和非文本负载会回退为普通投递。 -- 如果流式传输在回复过程中失败,OpenClaw 会对剩余负载回退为普通投递。 +- 如果流式传输在回复中途失败,OpenClaw 会对剩余负载回退为普通投递。 使用草稿预览而不是 Slack 原生文本流式传输: @@ -764,7 +768,7 @@ Slack actions 由 `channels.slack.actions.*` 控制。 ## 输入中反应回退 -`typingReaction` 会在 OpenClaw 处理回复时,向入站 Slack 消息添加一个临时反应,并在运行完成后将其移除。这在非线程回复场景中特别有用,因为线程回复会使用默认的“正在输入...”状态指示器。 +`typingReaction` 会在 OpenClaw 处理回复期间,向入站 Slack 消息临时添加一个反应,并在运行结束时将其移除。这在非线程回复场景中特别有用,因为线程回复会使用默认的“正在输入...”状态指示器。 解析顺序: @@ -773,8 +777,8 @@ Slack actions 由 `channels.slack.actions.*` 控制。 说明: -- Slack 需要 shortcode(例如 `"hourglass_flowing_sand"`)。 -- 该反应是尽力而为的,系统会在回复完成或失败路径结束后自动尝试清理。 +- Slack 需要使用 shortcode(例如 `"hourglass_flowing_sand"`)。 +- 该反应采用尽力而为方式,回复完成或失败路径结束后会自动尝试清理。 ## 媒体、分块和投递 @@ -782,7 +786,7 @@ Slack actions 由 `channels.slack.actions.*` 控制。 Slack 文件附件会从 Slack 托管的私有 URL 下载(基于令牌认证的请求流程),并在抓取成功且大小限制允许时写入媒体存储。 - 运行时入站大小上限默认是 `20MB`,除非通过 `channels.slack.mediaMaxMb` 覆盖。 + 运行时入站大小上限默认为 `20MB`,除非通过 `channels.slack.mediaMaxMb` 覆盖。 @@ -790,14 +794,14 @@ Slack actions 由 `channels.slack.actions.*` 控制。 - 文本分块使用 `channels.slack.textChunkLimit`(默认 4000) - `channels.slack.chunkMode="newline"` 启用优先按段落拆分 - 文件发送使用 Slack 上传 API,并且可以包含线程回复(`thread_ts`) - - 如果配置了 `channels.slack.mediaMaxMb`,出站媒体上限会遵循它;否则渠道发送会使用媒体流水线中的 MIME 类型默认值 + - 如果已配置,出站媒体上限遵循 `channels.slack.mediaMaxMb`;否则渠道发送使用媒体管道中的 MIME 类型默认值 推荐的显式目标: - - `user:` 用于私信 - - `channel:` 用于渠道 + - 私信使用 `user:` + - 渠道使用 `channel:` 向用户目标发送时,Slack 私信会通过 Slack 会话 API 打开。 @@ -806,7 +810,7 @@ Slack actions 由 `channels.slack.actions.*` 控制。 ## 命令和斜杠行为 -斜杠命令在 Slack 中可以显示为单个已配置命令,或多个原生命令。配置 `channels.slack.slashCommand` 以更改命令默认值: +斜杠命令在 Slack 中可以显示为单个已配置命令,或多个原生命令。配置 `channels.slack.slashCommand` 可更改命令默认值: - `enabled: false` - `name: "openclaw"` @@ -817,30 +821,30 @@ Slack actions 由 `channels.slack.actions.*` 控制。 /openclaw /help ``` -原生命令需要对你的 Slack 应用进行[清单更改](#optional-native-slash-commands),并通过 `channels.slack.commands.native: true` 启用;或者在全局配置中改用 `commands.native: true`。 +原生命令需要你在 Slack 应用中配置[其他清单设置](#additional-manifest-settings),并通过 `channels.slack.commands.native: true` 或全局配置中的 `commands.native: true` 启用。 -- 对于 Slack,原生命令自动模式默认**关闭**,因此 `commands.native: "auto"` 不会启用 Slack 原生命令。 +- 对于 Slack,原生命令自动模式默认是 **关闭**,因此 `commands.native: "auto"` 不会启用 Slack 原生命令。 ```txt /help ``` -原生参数菜单使用一种自适应渲染策略,在分发所选选项值之前会显示确认模态框: +原生参数菜单使用一种自适应渲染策略,在分发所选选项值之前会先显示一个确认模态框: - 最多 5 个选项:按钮块 - 6-100 个选项:静态选择菜单 -- 超过 100 个选项:当交互选项处理器可用时,使用带异步选项过滤的外部选择 -- 超出 Slack 限制:已编码的选项值会回退为按钮 +- 超过 100 个选项:当交互式选项处理器可用时,使用带异步选项过滤的外部选择 +- 超出 Slack 限制时:经过编码的选项值会回退为按钮 ```txt /think ``` -斜杠会话使用类似 `agent::slack:slash:` 的隔离键,但仍会通过 `CommandTargetSessionKey` 将命令执行路由到目标会话。 +斜杠会话使用隔离键,例如 `agent::slack:slash:`,并仍会通过 `CommandTargetSessionKey` 将命令执行路由到目标会话。 ## 交互式回复 -Slack 可以渲染由智能体编写的交互式回复控件,但此功能默认关闭。 +Slack 可以渲染由智能体生成的交互式回复控件,但该功能默认禁用。 全局启用: @@ -856,7 +860,7 @@ Slack 可以渲染由智能体编写的交互式回复控件,但此功能默 } ``` -或者仅为某一个 Slack 账户启用: +或者仅为一个 Slack 账户启用: ```json5 { @@ -874,7 +878,7 @@ Slack 可以渲染由智能体编写的交互式回复控件,但此功能默 } ``` -启用后,智能体可以发出仅限 Slack 的回复指令: +启用后,智能体可以发出仅适用于 Slack 的回复指令: - `[[slack_buttons: Approve:approve, Reject:reject]]` - `[[slack_select: Choose a target | Canary:canary, Production:production]]` @@ -883,32 +887,32 @@ Slack 可以渲染由智能体编写的交互式回复控件,但此功能默 说明: -- 这是 Slack 专用 UI。其他渠道不会将 Slack Block Kit 指令翻译为自己的按钮系统。 -- 交互回调值是 OpenClaw 生成的不透明令牌,而不是智能体编写的原始值。 +- 这是 Slack 专用 UI。其他渠道不会将 Slack Block Kit 指令翻译成它们自己的按钮系统。 +- 交互回调值是 OpenClaw 生成的不透明令牌,而不是智能体原始编写的值。 - 如果生成的交互块会超出 Slack Block Kit 限制,OpenClaw 会回退为原始文本回复,而不是发送无效的 blocks 负载。 ## Slack 中的 Exec 审批 -Slack 可以作为原生审批客户端,使用交互式按钮和交互,而不是回退到 Web UI 或终端。 +Slack 可以充当原生审批客户端,使用交互按钮和交互流程,而不是回退到 Web UI 或终端。 -- Exec 审批使用 `channels.slack.execApprovals.*` 来进行原生私信/渠道路由。 -- 当请求已经到达 Slack,且审批 ID 类型为 `plugin:` 时,插件审批也可以通过同样的 Slack 原生按钮界面完成。 +- Exec 审批使用 `channels.slack.execApprovals.*` 进行原生私信/渠道路由。 +- 当请求已经落在 Slack 中,且审批 ID 类型为 `plugin:` 时,插件审批仍可通过同一个 Slack 原生按钮界面进行处理。 - 审批人授权仍会被强制执行:只有被识别为审批人的用户才能通过 Slack 批准或拒绝请求。 这使用与其他渠道相同的共享审批按钮界面。当你的 Slack 应用设置中启用了 `interactivity` 时,审批提示会直接在会话中渲染为 Block Kit 按钮。 -当这些按钮存在时,它们就是主要的审批 UX;只有当工具结果表明聊天审批不可用,或手动审批是唯一途径时,OpenClaw +当这些按钮存在时,它们就是主要的审批 UX;只有当工具结果表明聊天审批不可用,或手动审批是唯一可行路径时,OpenClaw 才应包含手动 `/approve` 命令。 配置路径: - `channels.slack.execApprovals.enabled` -- `channels.slack.execApprovals.approvers`(可选;如有可能会回退到 `commands.ownerAllowFrom`) +- `channels.slack.execApprovals.approvers`(可选;尽可能回退到 `commands.ownerAllowFrom`) - `channels.slack.execApprovals.target`(`dm` | `channel` | `both`,默认:`dm`) - `agentFilter`、`sessionFilter` -当 `enabled` 未设置或为 `"auto"` 且至少能解析出一个 -审批人时,Slack 会自动启用原生 exec 审批。设置 `enabled: false` 可显式禁用 Slack 作为原生审批客户端。 -设置 `enabled: true` 则会在审批人可解析时强制启用原生审批。 +当 `enabled` 未设置或为 `"auto"`,且至少解析出一个 +审批人时,Slack 会自动启用原生 exec 审批。将 `enabled: false` 设为显式禁用 Slack 作为原生审批客户端。 +将 `enabled: true` 设为在审批人可解析时强制启用原生审批。 在没有显式 Slack exec 审批配置时的默认行为: @@ -920,8 +924,8 @@ Slack 可以作为原生审批客户端,使用交互式按钮和交互,而 } ``` -只有当你希望覆盖审批人、添加过滤器,或 -选择将其投递到源聊天时,才需要显式 Slack 原生配置: +只有当你想覆盖审批人、添加过滤器,或 +启用投递到来源聊天时,才需要显式的 Slack 原生配置: ```json5 { @@ -938,33 +942,34 @@ Slack 可以作为原生审批客户端,使用交互式按钮和交互,而 ``` 共享的 `approvals.exec` 转发是独立的。仅当 exec 审批提示还必须 -路由到其他聊天或显式的带外目标时才使用它。共享的 `approvals.plugin` 转发也 -是独立的;当这些请求已经到达 Slack 时,Slack 原生按钮仍然可以处理插件审批。 +路由到其他聊天或显式带外目标时才使用它。共享的 `approvals.plugin` 转发也 +是独立的;当这些请求已经落在 +Slack 中时,Slack 原生按钮仍然可以处理插件审批。 -同聊天中的 `/approve` 在已经支持命令的 Slack 渠道和私信中也可用。有关完整的审批转发模型,请参见[Exec 审批](/zh-CN/tools/exec-approvals)。 +同聊天中的 `/approve` 在已经支持命令的 Slack 渠道和私信中也可使用。完整的审批转发模型请参见[Exec approvals](/zh-CN/tools/exec-approvals)。 -## 事件和运行时行为 +## 事件和运行行为 - 消息编辑/删除/线程广播会映射为系统事件。 - 反应添加/移除事件会映射为系统事件。 -- 成员加入/离开、渠道创建/重命名以及 pin 添加/移除事件会映射为系统事件。 -- 当启用 `configWrites` 时,`channel_id_changed` 可以迁移渠道配置键。 -- 渠道 topic/purpose 元数据被视为不受信任的上下文,并且可以注入到路由上下文中。 -- 在线程起始消息和初始线程历史上下文注入时,会在适用情况下按已配置的发送者 allowlist 进行过滤。 +- 成员加入/离开、渠道创建/重命名,以及 pin 添加/移除事件会映射为系统事件。 +- 当 `configWrites` 启用时,`channel_id_changed` 可以迁移渠道配置键。 +- 渠道 topic/purpose 元数据被视为不受信任的上下文,并且可注入到路由上下文中。 +- 在线程发起者和初始线程历史上下文植入过程中,会在适用时按已配置的发送者 allowlist 进行过滤。 - Block actions 和模态交互会发出结构化的 `Slack interaction: ...` 系统事件,并带有丰富的负载字段: - - block actions:选中值、标签、选择器值以及 `workflow_*` 元数据 - - 模态 `view_submission` 和 `view_closed` 事件,包含路由后的渠道元数据和表单输入 + - block actions:所选值、标签、选择器值和 `workflow_*` 元数据 + - 模态 `view_submission` 和 `view_closed` 事件,带有已路由的渠道元数据和表单输入 -## 配置参考指引 +## 配置参考指针 主要参考: - [配置参考 - Slack](/zh-CN/gateway/configuration-reference#slack) 高信号 Slack 字段: - - mode/auth:`mode`、`botToken`、`appToken`、`signingSecret`、`webhookPath`、`accounts.*` + - 模式/认证:`mode`、`botToken`、`appToken`、`signingSecret`、`webhookPath`、`accounts.*` - 私信访问:`dm.enabled`、`dmPolicy`、`allowFrom`(旧版:`dm.policy`、`dm.allowFrom`)、`dm.groupEnabled`、`dm.groupChannels` - - 兼容性开关:`dangerouslyAllowNameMatching`(紧急兜底;除非确有需要,否则保持关闭) + - 兼容性开关:`dangerouslyAllowNameMatching`(紧急兜底开关;除非确有需要,否则保持关闭) - 渠道访问:`groupPolicy`、`channels.*`、`channels.*.users`、`channels.*.requireMention` - 线程/历史:`replyToMode`、`replyToModeByChatType`、`thread.*`、`historyLimit`、`dmHistoryLimit`、`dms.*.historyLimit` - 投递:`textChunkLimit`、`chunkMode`、`mediaMaxMb`、`streaming`、`streaming.nativeTransport` @@ -979,7 +984,7 @@ Slack 可以作为原生审批客户端,使用交互式按钮和交互,而 - `groupPolicy` - 渠道 allowlist(`channels.slack.channels`) - `requireMention` - - 每渠道 `users` allowlist + - 每个渠道的 `users` allowlist 有用的命令: @@ -1004,37 +1009,37 @@ openclaw pairing list slack - - 验证 bot 和 app 令牌,以及 Slack 应用设置中是否启用了 Socket Mode。 + + 验证 bot 和 app 令牌,以及 Slack 应用设置中的 Socket Mode 是否已启用。 如果 `openclaw channels status --probe --json` 显示 `botTokenStatus` 或 - `appTokenStatus: "configured_unavailable"`,则表示 Slack 账户 + `appTokenStatus: "configured_unavailable"`,说明 Slack 账户 已完成配置,但当前运行时无法解析由 SecretRef 支持的 实际值。 - + 验证: - signing secret - webhook 路径 - - Slack 请求 URL(Events + Interactivity + Slash Commands) + - Slack Request URLs(Events + Interactivity + Slash Commands) - 每个 HTTP 账户使用唯一的 `webhookPath` 如果账户快照中出现 `signingSecretStatus: "configured_unavailable"`, - 则表示该 HTTP 账户已完成配置,但当前运行时无法 + 说明 HTTP 账户已完成配置,但当前运行时无法 解析由 SecretRef 支持的 signing secret。 - - 确认你期望的是: + + 请确认你的预期是: - - 原生命令模式(`channels.slack.commands.native: true`),并且已在 Slack 中注册匹配的斜杠命令 - - 或单一斜杠命令模式(`channels.slack.slashCommand.enabled: true`) + - 原生命令模式(`channels.slack.commands.native: true`),并且已在 Slack 中注册了匹配的斜杠命令 + - 或单个斜杠命令模式(`channels.slack.slashCommand.enabled: true`) - 另外还要检查 `commands.useAccessGroups` 以及渠道/用户 allowlist。 + 还要检查 `commands.useAccessGroups` 以及渠道/用户 allowlist。