chore(i18n): refresh zh-CN translations
This commit is contained in:
parent
3e5b9f3396
commit
d12e580ddd
File diff suppressed because it is too large
Load Diff
@ -1,20 +1,20 @@
|
||||
---
|
||||
read_when:
|
||||
- 设置 Slack 或调试 Slack socket/HTTP 模式
|
||||
summary: Slack 设置和运行时行为(Socket Mode + HTTP Request URLs)
|
||||
- 设置 Slack 或调试 Slack Socket/HTTP 模式
|
||||
summary: Slack 设置与运行时行为(Socket Mode + HTTP 请求 URL)
|
||||
title: Slack
|
||||
x-i18n:
|
||||
generated_at: "2026-04-22T01:34:40Z"
|
||||
generated_at: "2026-04-22T17:02:14Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: e80b1ff7dfe3124916f9a4334badc9a742a0d0843b37c77838ede9f830920ff7
|
||||
source_hash: a1609ab5570daac455005cb00cee578c8954e05b25c25bf5759ae032d2a12c2c
|
||||
source_path: channels/slack.md
|
||||
workflow: 15
|
||||
---
|
||||
|
||||
# Slack
|
||||
|
||||
状态:已可用于生产环境,支持通过 Slack 应用集成实现私信和渠道。默认模式为 Socket Mode;也支持 HTTP Request URLs。
|
||||
状态:已可用于通过 Slack 应用集成实现私信 + 渠道,达到生产就绪。默认模式为 Socket Mode;也支持 HTTP 请求 URL。
|
||||
|
||||
<CardGroup cols={3}>
|
||||
<Card title="配对" icon="link" href="/zh-CN/channels/pairing">
|
||||
@ -28,7 +28,7 @@ x-i18n:
|
||||
</Card>
|
||||
</CardGroup>
|
||||
|
||||
## 快速设置
|
||||
## 快速开始
|
||||
|
||||
<Tabs>
|
||||
<Tab title="Socket Mode(默认)">
|
||||
@ -37,9 +37,9 @@ x-i18n:
|
||||
在 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-...`)
|
||||
</Step>
|
||||
|
||||
<Step title="配置 OpenClaw">
|
||||
@ -57,7 +57,7 @@ x-i18n:
|
||||
}
|
||||
```
|
||||
|
||||
环境变量回退方案(仅默认账户):
|
||||
环境变量回退(仅默认账户):
|
||||
|
||||
```bash
|
||||
SLACK_APP_TOKEN=xapp-...
|
||||
@ -77,15 +77,15 @@ openclaw gateway
|
||||
|
||||
</Tab>
|
||||
|
||||
<Tab title="HTTP Request URLs">
|
||||
<Tab title="HTTP 请求 URL">
|
||||
<Steps>
|
||||
<Step title="创建新的 Slack 应用">
|
||||
在 Slack 应用设置中,点击 **[Create New App](https://api.slack.com/apps/new)** 按钮:
|
||||
|
||||
- 选择 **from a manifest**,并为你的应用选择一个工作区
|
||||
- 粘贴[示例清单](#manifest-and-scope-checklist),并在创建前更新这些 URL
|
||||
- 粘贴[示例清单](#manifest-and-scope-checklist),并在创建前更新 URL
|
||||
- 保存用于请求校验的 **Signing Secret**
|
||||
- 安装应用并复制显示的 **Bot Token**(`xoxb-...`)
|
||||
- 安装应用,并复制显示的 **Bot Token**(`xoxb-...`)
|
||||
|
||||
</Step>
|
||||
|
||||
@ -106,9 +106,9 @@ openclaw gateway
|
||||
```
|
||||
|
||||
<Note>
|
||||
为多账户 HTTP 使用唯一的 webhook 路径
|
||||
对多账户 HTTP 使用唯一的 webhook 路径
|
||||
|
||||
为每个账户设置不同的 `webhookPath`(默认是 `/slack/events`),以避免注册冲突。
|
||||
为每个账户提供不同的 `webhookPath`(默认为 `/slack/events`),以避免注册冲突。
|
||||
</Note>
|
||||
|
||||
</Step>
|
||||
@ -125,7 +125,7 @@ openclaw gateway
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
## 清单和作用域检查清单
|
||||
## 清单与 scope 检查清单
|
||||
|
||||
<Tabs>
|
||||
<Tab title="Socket Mode(默认)">
|
||||
@ -134,7 +134,7 @@ openclaw gateway
|
||||
{
|
||||
"display_information": {
|
||||
"name": "OpenClaw",
|
||||
"description": "OpenClaw 的 Slack 连接器"
|
||||
"description": "用于 OpenClaw 的 Slack 连接器"
|
||||
},
|
||||
"features": {
|
||||
"bot_user": {
|
||||
@ -205,13 +205,13 @@ openclaw gateway
|
||||
|
||||
</Tab>
|
||||
|
||||
<Tab title="HTTP Request URLs">
|
||||
<Tab title="HTTP 请求 URL">
|
||||
|
||||
```json
|
||||
{
|
||||
"display_information": {
|
||||
"name": "OpenClaw",
|
||||
"description": "OpenClaw 的 Slack 连接器"
|
||||
"description": "用于 OpenClaw 的 Slack 连接器"
|
||||
},
|
||||
"features": {
|
||||
"bot_user": {
|
||||
@ -291,17 +291,17 @@ openclaw gateway
|
||||
|
||||
### 其他清单设置
|
||||
|
||||
展示扩展上述默认设置的不同功能。
|
||||
显示可扩展上述默认值的不同功能。
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="可选原生斜杠命令">
|
||||
<Accordion title="可选的原生斜杠命令">
|
||||
|
||||
可以使用多个[原生斜杠命令](#commands-and-slash-behavior)来替代单个已配置命令,但有一些细节需要注意:
|
||||
|
||||
- 使用 `/agentstatus` 而不是 `/status`,因为 `/status` 命令已被保留。
|
||||
- 同时可用的斜杠命令不能超过 25 个。
|
||||
|
||||
用[可用命令](/zh-CN/tools/slash-commands#command-list)中的一个子集替换你现有的 `features.slash_commands` 部分:
|
||||
将你现有的 `features.slash_commands` 部分替换为[可用命令](/zh-CN/tools/slash-commands#command-list)中的一个子集:
|
||||
|
||||
<Tabs>
|
||||
<Tab title="Socket Mode(默认)">
|
||||
@ -310,7 +310,7 @@ openclaw gateway
|
||||
"slash_commands": [
|
||||
{
|
||||
"command": "/new",
|
||||
"description": "开始新会话",
|
||||
"description": "开始一个新会话",
|
||||
"usage_hint": "[model]"
|
||||
},
|
||||
{
|
||||
@ -329,7 +329,7 @@ openclaw gateway
|
||||
{
|
||||
"command": "/session",
|
||||
"description": "管理线程绑定过期时间",
|
||||
"usage_hint": "idle <duration|off> or max-age <duration|off>"
|
||||
"usage_hint": "idle <duration|off> 或 max-age <duration|off>"
|
||||
},
|
||||
{
|
||||
"command": "/think",
|
||||
@ -353,7 +353,7 @@ openclaw gateway
|
||||
},
|
||||
{
|
||||
"command": "/elevated",
|
||||
"description": "切换提升模式",
|
||||
"description": "切换 elevated 模式",
|
||||
"usage_hint": "[on|off|ask|full]"
|
||||
},
|
||||
{
|
||||
@ -368,8 +368,8 @@ openclaw gateway
|
||||
},
|
||||
{
|
||||
"command": "/models",
|
||||
"description": "列出提供商,或列出某个提供商的模型",
|
||||
"usage_hint": "[provider] [page] [limit=<n>|size=<n>|all]"
|
||||
"description": "列出提供商/模型或添加模型",
|
||||
"usage_hint": "[provider] [page] [limit=<n>|size=<n>|all] | add <provider> <modelId>"
|
||||
},
|
||||
{
|
||||
"command": "/help",
|
||||
@ -381,16 +381,16 @@ openclaw gateway
|
||||
},
|
||||
{
|
||||
"command": "/tools",
|
||||
"description": "显示当前智能体此刻可用的内容",
|
||||
"description": "显示当前智能体此刻可以使用什么",
|
||||
"usage_hint": "[compact|verbose]"
|
||||
},
|
||||
{
|
||||
"command": "/agentstatus",
|
||||
"description": "显示运行时状态,包括可用时的提供商使用情况/配额"
|
||||
"description": "显示运行时状态,包括可用时的提供商使用量/配额"
|
||||
},
|
||||
{
|
||||
"command": "/tasks",
|
||||
"description": "列出当前会话的活跃/最近后台任务"
|
||||
"description": "列出当前会话的活动/近期后台任务"
|
||||
},
|
||||
{
|
||||
"command": "/context",
|
||||
@ -403,30 +403,30 @@ openclaw gateway
|
||||
},
|
||||
{
|
||||
"command": "/skill",
|
||||
"description": "按名称运行一个技能",
|
||||
"description": "按名称运行一个 skill",
|
||||
"usage_hint": "<name> [input]"
|
||||
},
|
||||
{
|
||||
"command": "/btw",
|
||||
"description": "提出一个不改变会话上下文的旁支问题",
|
||||
"description": "在不更改会话上下文的情况下提出一个旁支问题",
|
||||
"usage_hint": "<question>"
|
||||
},
|
||||
{
|
||||
"command": "/usage",
|
||||
"description": "控制用量页脚或显示成本摘要",
|
||||
"description": "控制 usage 页脚或显示成本摘要",
|
||||
"usage_hint": "off|tokens|full|cost"
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
</Tab>
|
||||
<Tab title="HTTP Request URLs">
|
||||
<Tab title="HTTP 请求 URL">
|
||||
|
||||
```json
|
||||
"slash_commands": [
|
||||
{
|
||||
"command": "/new",
|
||||
"description": "开始新会话",
|
||||
"description": "开始一个新会话",
|
||||
"usage_hint": "[model]",
|
||||
"url": "https://gateway-host.example.com/slack/events"
|
||||
},
|
||||
@ -449,7 +449,7 @@ openclaw gateway
|
||||
{
|
||||
"command": "/session",
|
||||
"description": "管理线程绑定过期时间",
|
||||
"usage_hint": "idle <duration|off> or max-age <duration|off>",
|
||||
"usage_hint": "idle <duration|off> 或 max-age <duration|off>",
|
||||
"url": "https://gateway-host.example.com/slack/events"
|
||||
},
|
||||
{
|
||||
@ -478,7 +478,7 @@ openclaw gateway
|
||||
},
|
||||
{
|
||||
"command": "/elevated",
|
||||
"description": "切换提升模式",
|
||||
"description": "切换 elevated 模式",
|
||||
"usage_hint": "[on|off|ask|full]",
|
||||
"url": "https://gateway-host.example.com/slack/events"
|
||||
},
|
||||
@ -512,18 +512,18 @@ openclaw gateway
|
||||
},
|
||||
{
|
||||
"command": "/tools",
|
||||
"description": "显示当前智能体此刻可用的内容",
|
||||
"description": "显示当前智能体此刻可以使用什么",
|
||||
"usage_hint": "[compact|verbose]",
|
||||
"url": "https://gateway-host.example.com/slack/events"
|
||||
},
|
||||
{
|
||||
"command": "/agentstatus",
|
||||
"description": "显示运行时状态,包括可用时的提供商使用情况/配额",
|
||||
"description": "显示运行时状态,包括可用时的提供商使用量/配额",
|
||||
"url": "https://gateway-host.example.com/slack/events"
|
||||
},
|
||||
{
|
||||
"command": "/tasks",
|
||||
"description": "列出当前会话的活跃/最近后台任务",
|
||||
"description": "列出当前会话的活动/近期后台任务",
|
||||
"url": "https://gateway-host.example.com/slack/events"
|
||||
},
|
||||
{
|
||||
@ -539,19 +539,19 @@ openclaw gateway
|
||||
},
|
||||
{
|
||||
"command": "/skill",
|
||||
"description": "按名称运行一个技能",
|
||||
"description": "按名称运行一个 skill",
|
||||
"usage_hint": "<name> [input]",
|
||||
"url": "https://gateway-host.example.com/slack/events"
|
||||
},
|
||||
{
|
||||
"command": "/btw",
|
||||
"description": "提出一个不改变会话上下文的旁支问题",
|
||||
"description": "在不更改会话上下文的情况下提出一个旁支问题",
|
||||
"usage_hint": "<question>",
|
||||
"url": "https://gateway-host.example.com/slack/events"
|
||||
},
|
||||
{
|
||||
"command": "/usage",
|
||||
"description": "控制用量页脚或显示成本摘要",
|
||||
"description": "控制 usage 页脚或显示成本摘要",
|
||||
"usage_hint": "off|tokens|full|cost",
|
||||
"url": "https://gateway-host.example.com/slack/events"
|
||||
}
|
||||
@ -562,17 +562,17 @@ openclaw gateway
|
||||
</Tabs>
|
||||
|
||||
</Accordion>
|
||||
<Accordion title="可选作者身份作用域(写入操作)">
|
||||
如果你希望发出的消息使用当前智能体身份(自定义用户名和图标),而不是默认的 Slack 应用身份,请添加 `chat:write.customize` bot scope。
|
||||
<Accordion title="可选作者身份 scope(写入操作)">
|
||||
如果你希望发送消息时使用当前智能体身份(自定义用户名和图标),而不是默认的 Slack 应用身份,请添加 `chat:write.customize` bot scope。
|
||||
|
||||
如果你使用 emoji 图标,Slack 期望采用 `:emoji_name:` 语法。
|
||||
如果你使用 emoji 图标,Slack 要求采用 `:emoji_name:` 语法。
|
||||
|
||||
</Accordion>
|
||||
<Accordion title="可选用户令牌作用域(读取操作)">
|
||||
如果你配置了 `channels.slack.userToken`,典型的读取作用域包括:
|
||||
<Accordion title="可选用户令牌 scope(读取操作)">
|
||||
如果你配置了 `channels.slack.userToken`,典型的读取 scope 包括:
|
||||
|
||||
- `channels:history`、`groups:history`、`im:history`、`mpim:history`
|
||||
- `channels:read`、`groups:read`、`im:read`、`mpim:read`
|
||||
- `channels:history`, `groups:history`, `im:history`, `mpim:history`
|
||||
- `channels:read`, `groups:read`, `im:read`, `mpim:read`
|
||||
- `users:read`
|
||||
- `reactions:read`
|
||||
- `pins:read`
|
||||
@ -586,11 +586,11 @@ openclaw gateway
|
||||
|
||||
- Socket Mode 需要 `botToken` + `appToken`。
|
||||
- HTTP 模式需要 `botToken` + `signingSecret`。
|
||||
- `botToken`、`appToken`、`signingSecret` 和 `userToken` 接受明文
|
||||
- `botToken`、`appToken`、`signingSecret` 和 `userToken` 支持明文
|
||||
字符串或 SecretRef 对象。
|
||||
- 配置中的令牌会覆盖环境变量回退值。
|
||||
- 配置中的令牌会覆盖环境变量回退。
|
||||
- `SLACK_BOT_TOKEN` / `SLACK_APP_TOKEN` 环境变量回退仅适用于默认账户。
|
||||
- `userToken`(`xoxp-...`)仅支持通过配置提供(无环境变量回退),并默认采用只读行为(`userTokenReadOnly: true`)。
|
||||
- `userToken`(`xoxp-...`)仅支持配置方式(无环境变量回退),且默认是只读行为(`userTokenReadOnly: true`)。
|
||||
|
||||
状态快照行为:
|
||||
|
||||
@ -598,20 +598,20 @@ openclaw gateway
|
||||
字段(`botToken`、`appToken`、`signingSecret`、`userToken`)。
|
||||
- 状态可以是 `available`、`configured_unavailable` 或 `missing`。
|
||||
- `configured_unavailable` 表示该账户通过 SecretRef
|
||||
或其他非内联密钥来源进行了配置,但当前命令/运行时路径
|
||||
或其他非内联 secret 来源进行了配置,但当前命令/运行时路径
|
||||
无法解析出实际值。
|
||||
- 在 HTTP 模式下,会包含 `signingSecretStatus`;在 Socket Mode 下,
|
||||
所需的字段组合是 `botTokenStatus` + `appTokenStatus`。
|
||||
必需的状态对是 `botTokenStatus` + `appTokenStatus`。
|
||||
|
||||
<Tip>
|
||||
对于 actions / 目录读取,配置了用户令牌时可以优先使用它。对于写入操作,仍然优先使用 bot 令牌;只有在 `userTokenReadOnly: false` 且 bot 令牌不可用时,才允许使用用户令牌写入。
|
||||
对于操作/目录读取,如果已配置,可以优先使用用户令牌。对于写入操作,仍然优先使用 bot 令牌;只有当 `userTokenReadOnly: false` 且 bot 令牌不可用时,才允许使用用户令牌写入。
|
||||
</Tip>
|
||||
|
||||
## Actions 和门控
|
||||
## 操作与门控
|
||||
|
||||
Slack actions 由 `channels.slack.actions.*` 控制。
|
||||
Slack 操作由 `channels.slack.actions.*` 控制。
|
||||
|
||||
当前 Slack 工具中可用的 action 分组:
|
||||
当前 Slack 工具中的可用操作组:
|
||||
|
||||
| Group | Default |
|
||||
| ---------- | ------- |
|
||||
@ -621,9 +621,9 @@ Slack actions 由 `channels.slack.actions.*` 控制。
|
||||
| memberInfo | enabled |
|
||||
| emojiList | enabled |
|
||||
|
||||
当前 Slack 消息 actions 包括 `send`、`upload-file`、`download-file`、`read`、`edit`、`delete`、`pin`、`unpin`、`list-pins`、`member-info` 和 `emoji-list`。
|
||||
当前 Slack 消息操作包括 `send`、`upload-file`、`download-file`、`read`、`edit`、`delete`、`pin`、`unpin`、`list-pins`、`member-info` 和 `emoji-list`。
|
||||
|
||||
## 访问控制和路由
|
||||
## 访问控制与路由
|
||||
|
||||
<Tabs>
|
||||
<Tab title="私信策略">
|
||||
@ -636,17 +636,17 @@ Slack actions 由 `channels.slack.actions.*` 控制。
|
||||
|
||||
私信标志:
|
||||
|
||||
- `dm.enabled`(默认 true)
|
||||
- `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`。
|
||||
- 命名账户不会继承 `channels.slack.accounts.default.allowFrom`。
|
||||
- 已命名账户在自身 `allowFrom` 未设置时,会继承 `channels.slack.allowFrom`。
|
||||
- 已命名账户不会继承 `channels.slack.accounts.default.allowFrom`。
|
||||
|
||||
在私信中进行配对时,使用 `openclaw pairing approve slack <code>`。
|
||||
|
||||
@ -659,56 +659,56 @@ 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`
|
||||
|
||||
</Tab>
|
||||
|
||||
<Tab title="提及和渠道用户">
|
||||
渠道消息默认受提及门控保护。
|
||||
<Tab title="提及与渠道用户">
|
||||
默认情况下,渠道消息受提及门控限制。
|
||||
|
||||
提及来源:
|
||||
|
||||
- 显式应用提及(`<@botId>`)
|
||||
- 提及正则模式(`agents.list[].groupChat.mentionPatterns`,回退到 `messages.groupChat.mentionPatterns`)
|
||||
- 隐式机器人线程回复行为(当 `thread.requireExplicitMention` 为 `true` 时禁用)
|
||||
- 隐式回复给 bot 的线程行为(当 `thread.requireExplicitMention` 为 `true` 时禁用)
|
||||
|
||||
每个渠道的控制项(`channels.slack.channels.<id>`;名称仅通过启动时解析或 `dangerouslyAllowNameMatching` 支持):
|
||||
每个渠道的控制项(`channels.slack.channels.<id>`;仅能通过启动时解析或 `dangerouslyAllowNameMatching` 使用名称):
|
||||
|
||||
- `requireMention`
|
||||
- `users`(allowlist)
|
||||
- `allowBots`
|
||||
- `skills`
|
||||
- `systemPrompt`
|
||||
- `tools`、`toolsBySender`
|
||||
- `tools`, `toolsBySender`
|
||||
- `toolsBySender` 键格式:`id:`、`e164:`、`username:`、`name:` 或 `"*"` 通配符
|
||||
(旧版无前缀键仍然只会映射到 `id:`)
|
||||
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
## 线程、会话和回复标签
|
||||
## 线程、会话与回复标签
|
||||
|
||||
- 私信路由为 `direct`;渠道路由为 `channel`;MPIM 路由为 `group`。
|
||||
- 在默认 `session.dmScope=main` 下,Slack 私信会折叠到智能体主会话。
|
||||
- 使用默认 `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.thread.requireExplicitMention`(默认 `false`):当设为 `true` 时,会抑制隐式线程提及,因此 bot 只会在已参与的线程中对显式 `@bot` 提及做出响应。否则,在 bot 已参与的线程中回复会绕过 `requireMention` 门控。
|
||||
- 在线程适用时,线程回复可以创建线程会话后缀(`:thread:<threadTs>`)。
|
||||
- `channels.slack.thread.historyScope` 默认为 `thread`;`thread.inheritParent` 默认为 `false`。
|
||||
- `channels.slack.thread.initialHistoryLimit` 控制新线程会话启动时要抓取多少条现有线程消息(默认 `20`;设置为 `0` 可禁用)。
|
||||
- `channels.slack.thread.requireExplicitMention`(默认 `false`):当设为 `true` 时,会抑制隐式线程提及,因此 bot 仅会响应线程内显式的 `@bot` 提及,即使 bot 已经参与该线程也是如此。如果不这样设置,在 bot 已参与的线程中回复会绕过 `requireMention` 门控。
|
||||
|
||||
回复线程控制:
|
||||
|
||||
- `channels.slack.replyToMode`:`off|first|all|batched`(默认 `off`)
|
||||
- `channels.slack.replyToModeByChatType`:按 `direct|group|channel` 分别设置
|
||||
- 私信的旧版回退:`channels.slack.dm.replyToMode`
|
||||
- 直聊的旧版回退:`channels.slack.dm.replyToMode`
|
||||
|
||||
支持手动回复标签:
|
||||
|
||||
@ -717,7 +717,7 @@ Slack actions 由 `channels.slack.actions.*` 控制。
|
||||
|
||||
注意:`replyToMode="off"` 会禁用 Slack 中**所有**回复线程功能,包括显式的 `[[reply_to_*]]` 标签。这与 Telegram 不同,在 Telegram 中,显式标签在 `"off"` 模式下仍会生效。这种差异反映了平台的线程模型:Slack 线程会将消息隐藏在渠道之外,而 Telegram 回复仍会显示在主聊天流中。
|
||||
|
||||
## 确认 reaction
|
||||
## 确认反应
|
||||
|
||||
`ackReaction` 会在 OpenClaw 处理入站消息期间发送一个确认 emoji。
|
||||
|
||||
@ -730,8 +730,8 @@ Slack actions 由 `channels.slack.actions.*` 控制。
|
||||
|
||||
说明:
|
||||
|
||||
- Slack 期望使用短代码(例如 `"eyes"`)。
|
||||
- 使用 `""` 可为 Slack 账户或全局禁用该 reaction。
|
||||
- Slack 要求使用短代码(例如 `"eyes"`)。
|
||||
- 使用 `""` 可为 Slack 账户或全局禁用该反应。
|
||||
|
||||
## 文本流式传输
|
||||
|
||||
@ -740,19 +740,19 @@ Slack actions 由 `channels.slack.actions.*` 控制。
|
||||
- `off`:禁用实时预览流式传输。
|
||||
- `partial`(默认):用最新的部分输出替换预览文本。
|
||||
- `block`:追加分块的预览更新。
|
||||
- `progress`:生成期间显示进度状态文本,然后发送最终文本。
|
||||
- `streaming.preview.toolProgress`:当草稿预览处于启用状态时,将工具/进度更新路由到同一个被编辑的预览消息中(默认:`true`)。设为 `false` 可保留独立的工具/进度消息。
|
||||
- `progress`:在生成期间显示进度状态文本,然后发送最终文本。
|
||||
- `streaming.preview.toolProgress`:当草稿预览处于激活状态时,将工具/进度更新路由到同一条被编辑的预览消息中(默认:`true`)。设为 `false` 可保留单独的工具/进度消息。
|
||||
|
||||
当 `channels.slack.streaming.mode` 为 `partial` 时,`channels.slack.streaming.nativeTransport` 控制 Slack 原生文本流式传输(默认:`true`)。
|
||||
|
||||
- 必须有一个回复线程可用,Slack 原生文本流式传输和 Slack assistant 线程状态才会显示。线程选择仍然遵循 `replyToMode`。
|
||||
- 原生文本流式传输和 Slack assistant 线程状态显示都必须有可用的回复线程。线程选择仍然遵循 `replyToMode`。
|
||||
- 当原生流式传输不可用时,渠道和群聊根消息仍可使用普通草稿预览。
|
||||
- 顶层 Slack 私信默认保持无线程,因此不会显示线程式预览;如果你希望在那里看到可见进度,请使用线程回复或 `typingReaction`。
|
||||
- 媒体和非文本负载会回退到普通投递。
|
||||
- 顶层 Slack 私信默认保持在线程外,因此不会显示线程样式预览;如果你希望那里有可见进度,请使用线程回复或 `typingReaction`。
|
||||
- 媒体和非文本载荷会回退为常规投递。
|
||||
- 媒体/错误最终消息会取消待处理的预览编辑,而不会刷新临时草稿;符合条件的文本/块最终消息仅会在能够原地编辑预览时刷新。
|
||||
- 如果流式传输在回复中途失败,OpenClaw 会对剩余负载回退到普通投递。
|
||||
- 如果流式传输在回复中途失败,OpenClaw 会对剩余载荷回退为常规投递。
|
||||
|
||||
使用草稿预览而不是 Slack 原生文本流式传输:
|
||||
使用草稿预览代替 Slack 原生文本流式传输:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -773,9 +773,9 @@ Slack actions 由 `channels.slack.actions.*` 控制。
|
||||
- 布尔值 `channels.slack.streaming` 会自动迁移到 `channels.slack.streaming.mode` 和 `channels.slack.streaming.nativeTransport`。
|
||||
- 旧版 `channels.slack.nativeStreaming` 会自动迁移到 `channels.slack.streaming.nativeTransport`。
|
||||
|
||||
## 输入中 reaction 回退
|
||||
## 输入中反应回退
|
||||
|
||||
`typingReaction` 会在 OpenClaw 处理回复期间,为入站 Slack 消息添加一个临时 reaction,并在运行结束后将其移除。这在非线程回复场景中最有用,因为线程回复会使用默认的 “is typing...” 状态指示器。
|
||||
`typingReaction` 会在 OpenClaw 处理回复期间,给入站 Slack 消息添加一个临时反应,并在运行结束后移除。它在线程回复之外最有用,因为线程回复默认使用 “is typing...” 状态指示器。
|
||||
|
||||
解析顺序:
|
||||
|
||||
@ -784,40 +784,40 @@ Slack actions 由 `channels.slack.actions.*` 控制。
|
||||
|
||||
说明:
|
||||
|
||||
- Slack 期望使用短代码(例如 `"hourglass_flowing_sand"`)。
|
||||
- 该 reaction 为尽力而为机制,并会在回复完成或失败路径结束后自动尝试清理。
|
||||
- Slack 要求使用短代码(例如 `"hourglass_flowing_sand"`)。
|
||||
- 该反应采用尽力而为的方式,回复完成或失败路径结束后会自动尝试清理。
|
||||
|
||||
## 媒体、分块和投递
|
||||
## 媒体、分块与投递
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="入站附件">
|
||||
Slack 文件附件会从 Slack 托管的私有 URL 下载(基于令牌认证的请求流程),并在拉取成功且大小限制允许时写入媒体存储。
|
||||
Slack 文件附件会从 Slack 托管的私有 URL 下载(基于令牌认证的请求流程),并在获取成功且大小限制允许时写入媒体存储。
|
||||
|
||||
运行时入站大小上限默认是 `20MB`,除非通过 `channels.slack.mediaMaxMb` 覆盖。
|
||||
运行时入站大小上限默认为 `20MB`,除非通过 `channels.slack.mediaMaxMb` 覆盖。
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="出站文本和文件">
|
||||
<Accordion title="出站文本与文件">
|
||||
- 文本分块使用 `channels.slack.textChunkLimit`(默认 4000)
|
||||
- `channels.slack.chunkMode="newline"` 启用优先按段落拆分
|
||||
- 文件发送使用 Slack 上传 API,并可包含线程回复(`thread_ts`)
|
||||
- 如果配置了 `channels.slack.mediaMaxMb`,出站媒体上限遵循该设置;否则渠道发送使用媒体管道中的 MIME 类型默认值
|
||||
- 如果配置了 `channels.slack.mediaMaxMb`,出站媒体上限将遵循该值;否则渠道发送会使用媒体管道中的 MIME 类型默认值
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="投递目标">
|
||||
推荐使用的显式目标:
|
||||
推荐的显式目标:
|
||||
|
||||
- 私信使用 `user:<id>`
|
||||
- 渠道使用 `channel:<id>`
|
||||
|
||||
向用户目标发送时,Slack 私信会通过 Slack 会话 API 打开。
|
||||
发送到用户目标时,Slack 私信会通过 Slack 会话 API 打开。
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
## 命令和斜杠行为
|
||||
## 命令与斜杠行为
|
||||
|
||||
斜杠命令在 Slack 中可表现为单个已配置命令或多个原生命令。配置 `channels.slack.slashCommand` 可更改命令默认值:
|
||||
Slack 中的斜杠命令可以显示为单个已配置命令,或多个原生命令。配置 `channels.slack.slashCommand` 可更改命令默认值:
|
||||
|
||||
- `enabled: false`
|
||||
- `name: "openclaw"`
|
||||
@ -828,30 +828,30 @@ Slack actions 由 `channels.slack.actions.*` 控制。
|
||||
/openclaw /help
|
||||
```
|
||||
|
||||
原生命令需要你在 Slack 应用中配置[额外清单设置](#additional-manifest-settings),并通过 `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,原生命令自动模式默认是 **off**,因此 `commands.native: "auto"` 不会启用 Slack 原生命令。
|
||||
|
||||
```txt
|
||||
/help
|
||||
```
|
||||
|
||||
原生参数菜单使用自适应渲染策略,在派发所选选项值前会先显示一个确认模态框:
|
||||
原生参数菜单使用自适应渲染策略,在分发所选选项值之前先显示确认模态框:
|
||||
|
||||
- 最多 5 个选项:按钮块
|
||||
- 6-100 个选项:静态选择菜单
|
||||
- 超过 100 个选项:当可用 interactivity 选项处理器时,使用带异步选项过滤的外部选择
|
||||
- 超出 Slack 限制:编码后的选项值会回退为按钮
|
||||
- 6 - 100 个选项:静态选择菜单
|
||||
- 超过 100 个选项:当交互式选项处理器可用时,使用带异步选项过滤的外部选择
|
||||
- 超出 Slack 限制时:编码后的选项值会回退为按钮
|
||||
|
||||
```txt
|
||||
/think
|
||||
```
|
||||
|
||||
斜杠会话使用类似 `agent:<agentId>:slack:slash:<userId>` 的隔离键,并仍通过 `CommandTargetSessionKey` 将命令执行路由到目标会话。
|
||||
斜杠会话使用类似 `agent:<agentId>:slack:slash:<userId>` 的隔离键,但仍会通过 `CommandTargetSessionKey` 将命令执行路由到目标会话。
|
||||
|
||||
## 交互式回复
|
||||
|
||||
Slack 可以渲染由智能体编写的交互式回复控件,但此功能默认禁用。
|
||||
Slack 可以渲染由智能体创作的交互式回复控件,但此功能默认禁用。
|
||||
|
||||
全局启用:
|
||||
|
||||
@ -867,7 +867,7 @@ Slack 可以渲染由智能体编写的交互式回复控件,但此功能默
|
||||
}
|
||||
```
|
||||
|
||||
或者仅为某个 Slack 账户启用:
|
||||
或者仅为一个 Slack 账户启用:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -885,41 +885,40 @@ Slack 可以渲染由智能体编写的交互式回复控件,但此功能默
|
||||
}
|
||||
```
|
||||
|
||||
启用后,智能体可以输出仅限 Slack 的回复指令:
|
||||
启用后,智能体可以发出仅适用于 Slack 的回复指令:
|
||||
|
||||
- `[[slack_buttons: Approve:approve, Reject:reject]]`
|
||||
- `[[slack_select: Choose a target | Canary:canary, Production:production]]`
|
||||
|
||||
这些指令会编译为 Slack Block Kit,并通过现有 Slack 交互事件路径回传点击或选择。
|
||||
这些指令会编译为 Slack Block Kit,并通过现有的 Slack 交互事件路径回传点击或选择。
|
||||
|
||||
说明:
|
||||
|
||||
- 这是 Slack 专用 UI。其他渠道不会将 Slack Block Kit 指令翻译成各自的按钮系统。
|
||||
- 交互回调值是 OpenClaw 生成的不透明令牌,而不是智能体原始编写的值。
|
||||
- 如果生成的交互块会超出 Slack Block Kit 限制,OpenClaw 会回退到原始文本回复,而不是发送无效的 blocks 负载。
|
||||
- 这是 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 原生按钮界面处理。
|
||||
- 审批人授权仍会被强制执行:只有被识别为审批人的用户,才能通过 Slack 批准或拒绝请求。
|
||||
- 当请求已经落在 Slack 中且审批 ID 类型为 `plugin:` 时,插件审批也仍可通过同一套 Slack 原生按钮界面处理。
|
||||
- 审批人授权仍会被强制执行:只有被识别为审批人的用户才能通过 Slack 批准或拒绝请求。
|
||||
|
||||
这使用与其他渠道相同的共享审批按钮界面。当你的 Slack 应用设置中启用了 `interactivity` 时,审批提示会直接在会话中渲染为 Block Kit 按钮。
|
||||
当这些按钮存在时,它们就是主要审批 UX;OpenClaw
|
||||
只应在工具结果表明聊天审批不可用,或手动审批是唯一途径时,包含手动 `/approve` 命令。
|
||||
这使用与其他渠道相同的共享审批按钮界面。当你在 Slack 应用设置中启用 `interactivity` 时,审批提示会直接在会话中渲染为 Block Kit 按钮。
|
||||
当这些按钮存在时,它们就是主要审批 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 审批配置时的默认行为:
|
||||
|
||||
@ -931,7 +930,7 @@ Slack 可以充当原生审批客户端,使用交互式按钮和交互,而
|
||||
}
|
||||
```
|
||||
|
||||
只有在你想覆盖审批人、添加过滤器或选择加入来源聊天投递时,才需要显式 Slack 原生配置:
|
||||
只有当你想覆盖审批人、添加过滤器,或选择加入原始聊天投递时,才需要显式的 Slack 原生配置:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -947,23 +946,21 @@ Slack 可以充当原生审批客户端,使用交互式按钮和交互,而
|
||||
}
|
||||
```
|
||||
|
||||
共享 `approvals.exec` 转发是独立的。只有当 exec 审批提示也必须
|
||||
路由到其他聊天或显式带外目标时才使用它。共享 `approvals.plugin` 转发也
|
||||
是独立的;当这些请求已经到达 Slack 时,Slack 原生按钮仍可处理插件审批。
|
||||
共享的 `approvals.exec` 转发是独立的。只有当 exec 审批提示还必须路由到其他聊天或显式的带外目标时才使用它。共享的 `approvals.plugin` 转发也是独立的;当这些请求已经落在 Slack 中时,Slack 原生按钮仍可处理插件审批。
|
||||
|
||||
同一聊天中的 `/approve` 在已经支持命令的 Slack 渠道和私信中也可使用。完整审批转发模型请参见[Exec 审批](/zh-CN/tools/exec-approvals)。
|
||||
同一聊天中的 `/approve` 在已经支持命令的 Slack 渠道和私信中也可使用。完整的审批转发模型见[Exec 审批](/zh-CN/tools/exec-approvals)。
|
||||
|
||||
## 事件和运行行为
|
||||
## 事件与运行行为
|
||||
|
||||
- 消息编辑/删除/线程广播会映射为系统事件。
|
||||
- reaction 添加/移除事件会映射为系统事件。
|
||||
- 成员加入/离开、渠道创建/重命名以及 pin 添加/移除事件会映射为系统事件。
|
||||
- 添加/移除反应事件会映射为系统事件。
|
||||
- 成员加入/离开、渠道创建/重命名以及添加/移除 pin 事件会映射为系统事件。
|
||||
- 当启用 `configWrites` 时,`channel_id_changed` 可迁移渠道配置键。
|
||||
- 渠道 topic/purpose 元数据被视为不可信上下文,并可注入到路由上下文中。
|
||||
- 在线程起始消息和初始线程历史上下文植入时,如适用,会根据已配置的发送者 allowlist 进行过滤。
|
||||
- Block actions 和模态交互会发出结构化的 `Slack interaction: ...` 系统事件,并附带丰富的负载字段:
|
||||
- block actions:所选值、标签、选择器值和 `workflow_*` 元数据
|
||||
- 模态 `view_submission` 和 `view_closed` 事件,包含路由后的渠道元数据和表单输入
|
||||
- 线程发起者和初始线程历史上下文播种在适用时会按已配置的发送者 allowlist 进行过滤。
|
||||
- 块操作和模态交互会发出结构化的 `Slack interaction: ...` 系统事件,并包含丰富的载荷字段:
|
||||
- 块操作:所选值、标签、选择器值以及 `workflow_*` 元数据
|
||||
- 模态 `view_submission` 和 `view_closed` 事件,包含已路由的渠道元数据和表单输入
|
||||
|
||||
## 配置参考指针
|
||||
|
||||
@ -974,7 +971,7 @@ Slack 可以充当原生审批客户端,使用交互式按钮和交互,而
|
||||
高信号 Slack 字段:
|
||||
- 模式/认证:`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`、`streaming.preview.toolProgress`
|
||||
@ -989,7 +986,7 @@ Slack 可以充当原生审批客户端,使用交互式按钮和交互,而
|
||||
- `groupPolicy`
|
||||
- 渠道 allowlist(`channels.slack.channels`)
|
||||
- `requireMention`
|
||||
- 每渠道 `users` allowlist
|
||||
- 每个渠道的 `users` allowlist
|
||||
|
||||
有用的命令:
|
||||
|
||||
@ -1014,37 +1011,37 @@ openclaw pairing list slack
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Socket mode 未连接">
|
||||
<Accordion title="Socket 模式未连接">
|
||||
验证 bot + app 令牌,以及 Slack 应用设置中是否启用了 Socket Mode。
|
||||
|
||||
如果 `openclaw channels status --probe --json` 显示 `botTokenStatus` 或
|
||||
`appTokenStatus: "configured_unavailable"`,则说明该 Slack 账户已
|
||||
配置,但当前运行时无法解析由 SecretRef 支持的
|
||||
`appTokenStatus: "configured_unavailable"`,说明该 Slack 账户
|
||||
已配置,但当前运行时无法解析由 SecretRef 支持的
|
||||
实际值。
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="HTTP mode 未接收到事件">
|
||||
<Accordion title="HTTP 模式未接收到事件">
|
||||
验证:
|
||||
|
||||
- signing secret
|
||||
- webhook 路径
|
||||
- Slack Request URLs(Events + Interactivity + Slash Commands)
|
||||
- Slack 请求 URL(事件 + 交互 + 斜杠命令)
|
||||
- 每个 HTTP 账户使用唯一的 `webhookPath`
|
||||
|
||||
如果账户快照中出现 `signingSecretStatus: "configured_unavailable"`,
|
||||
则说明该 HTTP 账户已配置,但当前运行时无法
|
||||
说明该 HTTP 账户已配置,但当前运行时无法
|
||||
解析由 SecretRef 支持的 signing secret。
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="原生命令 / 斜杠命令未触发">
|
||||
请确认你是否本来想要:
|
||||
<Accordion title="原生/斜杠命令未触发">
|
||||
验证你原本打算使用的是:
|
||||
|
||||
- 原生命令模式(`channels.slack.commands.native: true`),并且已在 Slack 中注册匹配的斜杠命令
|
||||
- 原生命令模式(`channels.slack.commands.native: true`),并在 Slack 中注册了匹配的斜杠命令
|
||||
- 或单一斜杠命令模式(`channels.slack.slashCommand.enabled: true`)
|
||||
|
||||
还要检查 `commands.useAccessGroups` 以及渠道/用户 allowlist。
|
||||
另请检查 `commands.useAccessGroups` 以及渠道/用户 allowlist。
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
@ -1053,7 +1050,7 @@ openclaw pairing list slack
|
||||
|
||||
- [配对](/zh-CN/channels/pairing)
|
||||
- [群组](/zh-CN/channels/groups)
|
||||
- [安全性](/zh-CN/gateway/security)
|
||||
- [安全](/zh-CN/gateway/security)
|
||||
- [渠道路由](/zh-CN/channels/channel-routing)
|
||||
- [故障排除](/zh-CN/channels/troubleshooting)
|
||||
- [配置](/zh-CN/gateway/configuration)
|
||||
|
||||
@ -1,47 +1,47 @@
|
||||
---
|
||||
read_when:
|
||||
- 添加或修改模型 CLI(`models list`/`set`/`scan`/`aliases`/`fallbacks`)
|
||||
- 更改模型回退行为或选择 UX
|
||||
- 更改模型回退行为或选择体验
|
||||
- 更新模型扫描探测(工具/图像)
|
||||
summary: 模型 CLI:列表、设置、别名、回退、扫描、状态
|
||||
summary: 模型 CLI:列出、设置、别名、回退、扫描、状态
|
||||
title: 模型 CLI
|
||||
x-i18n:
|
||||
generated_at: "2026-04-22T03:53:27Z"
|
||||
generated_at: "2026-04-22T17:02:15Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: 0cf7a17a20bea66e5e8dce134ed08b483417bc70ed875e796609d850aa79280e
|
||||
source_hash: 94fe5b6012f12ab469305bcae95b2b7e9482f2d6868fc8a71a8c9ac2bd0e8604
|
||||
source_path: concepts/models.md
|
||||
workflow: 15
|
||||
---
|
||||
|
||||
# 模型 CLI
|
||||
|
||||
关于凭证配置文件轮换、冷却时间,以及它们如何与回退机制交互,请参见 [/concepts/model-failover](/zh-CN/concepts/model-failover)。
|
||||
有关凭证配置文件轮换、冷却时间以及它们如何与回退机制交互,请参见 [/concepts/model-failover](/zh-CN/concepts/model-failover)。
|
||||
提供商快速概览与示例:[/concepts/model-providers](/zh-CN/concepts/model-providers)。
|
||||
|
||||
## 模型选择如何工作
|
||||
## 模型选择的工作方式
|
||||
|
||||
OpenClaw 按以下顺序选择模型:
|
||||
|
||||
1. **主模型**(`agents.defaults.model.primary` 或 `agents.defaults.model`)。
|
||||
1. **主** 模型(`agents.defaults.model.primary` 或 `agents.defaults.model`)。
|
||||
2. `agents.defaults.model.fallbacks` 中的**回退模型**(按顺序)。
|
||||
3. **提供商凭证回退**会在提供商内部发生,然后才会切换到下一个模型。
|
||||
3. **提供商凭证回退**会先在提供商内部发生,然后才会切换到下一个模型。
|
||||
|
||||
相关项:
|
||||
|
||||
- `agents.defaults.models` 是 OpenClaw 可使用模型的允许列表/目录(以及别名)。
|
||||
- `agents.defaults.imageModel` **仅在**主模型不能接受图像时使用。
|
||||
- `agents.defaults.pdfModel` 由 `pdf` 工具使用。如果省略,该工具会回退到 `agents.defaults.imageModel`,然后回退到已解析的会话/默认模型。
|
||||
- `agents.defaults.imageGenerationModel` 用于共享的图像生成功能。如果省略,`image_generate` 仍可推断出一个由凭证支持的提供商默认值。它会先尝试当前默认提供商,然后按提供商 ID 顺序尝试其余已注册的图像生成提供商。如果你设置了特定的提供商/模型,也请配置该提供商的凭证/API 密钥。
|
||||
- `agents.defaults.musicGenerationModel` 用于共享的音乐生成功能。如果省略,`music_generate` 仍可推断出一个由凭证支持的提供商默认值。它会先尝试当前默认提供商,然后按提供商 ID 顺序尝试其余已注册的音乐生成提供商。如果你设置了特定的提供商/模型,也请配置该提供商的凭证/API 密钥。
|
||||
- `agents.defaults.videoGenerationModel` 用于共享的视频生成功能。如果省略,`video_generate` 仍可推断出一个由凭证支持的提供商默认值。它会先尝试当前默认提供商,然后按提供商 ID 顺序尝试其余已注册的视频生成提供商。如果你设置了特定的提供商/模型,也请配置该提供商的凭证/API 密钥。
|
||||
- 每个智能体的默认值可以通过 `agents.list[].model` 加上绑定来覆盖 `agents.defaults.model`(参见 [/concepts/multi-agent](/zh-CN/concepts/multi-agent))。
|
||||
- `agents.defaults.imageModel` **仅在**主模型无法接受图像时使用。
|
||||
- `agents.defaults.pdfModel` 由 `pdf` 工具使用。如果省略,该工具会依次回退到 `agents.defaults.imageModel`,然后是已解析的会话/默认模型。
|
||||
- `agents.defaults.imageGenerationModel` 由共享的图像生成功能使用。如果省略,`image_generate` 仍可推断出一个由凭证支持的提供商默认值。它会先尝试当前默认提供商,然后按提供商 ID 顺序尝试其余已注册的图像生成提供商。如果你设置了特定的提供商/模型,也请配置该提供商的凭证/API 密钥。
|
||||
- `agents.defaults.musicGenerationModel` 由共享的音乐生成功能使用。如果省略,`music_generate` 仍可推断出一个由凭证支持的提供商默认值。它会先尝试当前默认提供商,然后按提供商 ID 顺序尝试其余已注册的音乐生成提供商。如果你设置了特定的提供商/模型,也请配置该提供商的凭证/API 密钥。
|
||||
- `agents.defaults.videoGenerationModel` 由共享的视频生成功能使用。如果省略,`video_generate` 仍可推断出一个由凭证支持的提供商默认值。它会先尝试当前默认提供商,然后按提供商 ID 顺序尝试其余已注册的视频生成提供商。如果你设置了特定的提供商/模型,也请配置该提供商的凭证/API 密钥。
|
||||
- 每个智能体的默认值可通过 `agents.list[].model` 及绑定覆盖 `agents.defaults.model`(参见 [/concepts/multi-agent](/zh-CN/concepts/multi-agent))。
|
||||
|
||||
## 快速模型策略
|
||||
|
||||
- 将你的主模型设为你可用的、最新一代中能力最强的模型。
|
||||
- 对成本/延迟敏感的任务和风险较低的聊天,使用回退模型。
|
||||
- 对于启用工具的智能体或不可信输入,避免使用较旧/较弱的模型层级。
|
||||
- 将你的主模型设置为你可用的最强、最新一代模型。
|
||||
- 对成本/延迟敏感的任务和低风险聊天,使用回退模型。
|
||||
- 对启用了工具的智能体或不可信输入,避免使用较旧/较弱的模型层级。
|
||||
|
||||
## 新手引导(推荐)
|
||||
|
||||
@ -51,9 +51,10 @@ OpenClaw 按以下顺序选择模型:
|
||||
openclaw onboard
|
||||
```
|
||||
|
||||
它可以为常见提供商设置模型 + 凭证,包括 **OpenAI Code(Codex)订阅**(OAuth)和 **Anthropic**(API 密钥或 Claude CLI)。
|
||||
它可以为常见提供商设置模型和凭证,包括 **OpenAI Code (Codex)**
|
||||
订阅(OAuth)和 **Anthropic**(API 密钥或 Claude CLI)。
|
||||
|
||||
## 配置键名(概览)
|
||||
## 配置键(概览)
|
||||
|
||||
- `agents.defaults.model.primary` 和 `agents.defaults.model.fallbacks`
|
||||
- `agents.defaults.imageModel.primary` 和 `agents.defaults.imageModel.fallbacks`
|
||||
@ -63,23 +64,24 @@ openclaw onboard
|
||||
- `agents.defaults.models`(允许列表 + 别名 + 提供商参数)
|
||||
- `models.providers`(写入 `models.json` 的自定义提供商)
|
||||
|
||||
模型引用会被规范化为小写。像 `z.ai/*` 这样的提供商别名会规范化为 `zai/*`。
|
||||
模型引用会规范化为小写。像 `z.ai/*` 这样的提供商别名会规范化为
|
||||
`zai/*`。
|
||||
|
||||
提供商配置示例(包括 OpenCode)位于
|
||||
提供商配置示例(包括 OpenCode)见
|
||||
[/providers/opencode](/zh-CN/providers/opencode)。
|
||||
|
||||
## “Model is not allowed”(以及为什么回复会停止)
|
||||
|
||||
如果设置了 `agents.defaults.models`,它就会成为 `/model` 和会话覆盖的**允许列表**。当用户选择了不在该允许列表中的模型时,OpenClaw 会返回:
|
||||
如果设置了 `agents.defaults.models`,它就会成为 `/model` 和会话覆盖的**允许列表**。当用户选择的模型不在该允许列表中时,OpenClaw 会返回:
|
||||
|
||||
```
|
||||
Model "provider/model" is not allowed. Use /model to list available models.
|
||||
```
|
||||
|
||||
这会发生在生成正常回复**之前**,所以消息看起来可能像是“没有响应”。解决方法是:
|
||||
这会在生成正常回复**之前**发生,因此消息可能会让人感觉它“没有响应”。修复方法是:
|
||||
|
||||
- 将该模型添加到 `agents.defaults.models`,或
|
||||
- 清除允许列表(移除 `agents.defaults.models`),或
|
||||
- 清空允许列表(移除 `agents.defaults.models`),或
|
||||
- 从 `/model list` 中选择一个模型。
|
||||
|
||||
允许列表示例配置:
|
||||
@ -98,7 +100,7 @@ Model "provider/model" is not allowed. Use /model to list available models.
|
||||
|
||||
## 在聊天中切换模型(`/model`)
|
||||
|
||||
你可以在不重启的情况下为当前会话切换模型:
|
||||
你可以为当前会话切换模型,而无需重启:
|
||||
|
||||
```
|
||||
/model
|
||||
@ -112,21 +114,32 @@ Model "provider/model" is not allowed. Use /model to list available models.
|
||||
|
||||
- `/model`(以及 `/model list`)是一个紧凑的编号选择器(模型家族 + 可用提供商)。
|
||||
- 在 Discord 上,`/model` 和 `/models` 会打开一个交互式选择器,其中包含提供商和模型下拉菜单,以及一个提交步骤。
|
||||
- `/models add` 让你可以直接在聊天中添加一个提供商/模型条目,而无需手动编辑配置。
|
||||
- `/models add <provider> <modelId>` 是最快路径;仅输入 `/models add` 会在支持的情况下启动一个先选提供商的引导流程。
|
||||
- 执行 `/models add` 后,新模型会立即在 `/models` 和 `/model` 中可用,无需重启 Gateway 网关。
|
||||
- `/model <#>` 会从该选择器中选择。
|
||||
- `/model` 会立即持久化新的会话选择。
|
||||
- 如果智能体处于空闲状态,下一次运行会立即使用新模型。
|
||||
- 如果某次运行已处于活动状态,OpenClaw 会将实时切换标记为待处理,并且只会在一个干净的重试点重启到新模型。
|
||||
- 如果工具活动或回复输出已经开始,待处理切换可能会一直排队,直到后续重试机会或下一个用户轮次。
|
||||
- `/model status` 是详细视图(凭证候选项,以及在已配置时显示提供商端点 `baseUrl` + `api` 模式)。
|
||||
- 模型引用通过按**第一个** `/` 分割来解析。输入 `/model <ref>` 时,请使用 `provider/model`。
|
||||
- 如果模型 ID 本身包含 `/`(OpenRouter 风格),你必须包含提供商前缀(例如:`/model openrouter/moonshotai/kimi-k2`)。
|
||||
- 如果智能体当前空闲,下一次运行会立刻使用新模型。
|
||||
- 如果已有运行处于活动状态,OpenClaw 会将实时切换标记为待处理,并且只会在一个干净的重试点重启到新模型。
|
||||
- 如果工具活动或回复输出已经开始,待处理切换可能会继续排队,直到后续某个重试机会或下一次用户轮次。
|
||||
- `/model status` 是详细视图(凭证候选项,以及在已配置时显示提供商端点 `baseUrl` 和 `api` 模式)。
|
||||
- 模型引用通过按**第一个** `/` 分割来解析。输入 `/model <ref>` 时请使用 `provider/model`。
|
||||
- 如果模型 ID 本身包含 `/`(OpenRouter 风格),则必须包含提供商前缀(例如:`/model openrouter/moonshotai/kimi-k2`)。
|
||||
- 如果你省略提供商,OpenClaw 会按以下顺序解析输入:
|
||||
1. 别名匹配
|
||||
2. 该确切无前缀模型 ID 的唯一已配置提供商匹配
|
||||
2. 对该精确无前缀模型 ID 的唯一已配置提供商匹配
|
||||
3. 已弃用的回退:使用已配置的默认提供商
|
||||
如果该提供商不再公开已配置的默认模型,OpenClaw 会改为回退到第一个已配置的提供商/模型,以避免暴露过时的、已移除提供商默认值。
|
||||
如果该提供商不再公开已配置的默认模型,OpenClaw 会改为回退到第一个已配置的提供商/模型,以避免暴露陈旧、已移除提供商的默认值。
|
||||
|
||||
完整命令行为/配置: [Slash commands](/zh-CN/tools/slash-commands)。
|
||||
完整命令行为/配置:[/tools/slash-commands](/zh-CN/tools/slash-commands)。
|
||||
|
||||
示例:
|
||||
|
||||
```text
|
||||
/models add
|
||||
/models add ollama glm-5.1:cloud
|
||||
/models add lmstudio qwen/qwen3.5-9b
|
||||
```
|
||||
|
||||
## CLI 命令
|
||||
|
||||
@ -155,7 +168,7 @@ openclaw models image-fallbacks clear
|
||||
|
||||
### `models list`
|
||||
|
||||
默认显示已配置的模型。常用标志:
|
||||
默认显示已配置模型。常用标志:
|
||||
|
||||
- `--all`:完整目录
|
||||
- `--local`:仅本地提供商
|
||||
@ -163,18 +176,21 @@ openclaw models image-fallbacks clear
|
||||
- `--plain`:每行一个模型
|
||||
- `--json`:机器可读输出
|
||||
|
||||
`--all` 会在配置凭证之前包含内置的、由提供商拥有的静态目录条目,因此仅发现用途的视图也可以显示那些在你添加匹配提供商凭证之前不可用的模型。
|
||||
`--all` 会在配置凭证之前包含内置的、由提供商拥有的静态目录行,因此仅用于发现的视图也可以显示那些在你添加匹配提供商凭证之前不可用的模型。
|
||||
|
||||
### `models status`
|
||||
|
||||
显示已解析的主模型、回退模型、图像模型,以及已配置提供商的凭证概览。它还会显示在凭证存储中找到的配置文件的 OAuth 过期状态(默认会在 24 小时内到期时发出警告)。`--plain` 仅打印已解析的主模型。
|
||||
OAuth 状态始终会显示(并包含在 `--json` 输出中)。如果某个已配置的提供商没有凭证,`models status` 会打印一个 **Missing auth** 部分。
|
||||
JSON 包含 `auth.oauth`(警告窗口 + 配置文件)和 `auth.providers`(每个提供商的生效凭证,包括基于环境变量的凭证)。`auth.oauth` 仅表示凭证存储中配置文件的健康状态;仅使用环境变量的提供商不会出现在其中。
|
||||
将 `--check` 用于自动化(缺失/已过期时退出码为 `1`,即将过期时为 `2`)。
|
||||
将 `--probe` 用于实时凭证检查;探测行可能来自凭证配置文件、环境变量凭证或 `models.json`。
|
||||
如果显式的 `auth.order.<provider>` 省略了某个已存储配置文件,探测会报告 `excluded_by_auth_order`,而不是尝试它。如果凭证存在,但该提供商无法解析出可探测的模型,探测会报告 `status: no_model`。
|
||||
显示已解析的主模型、回退模型、图像模型,以及已配置提供商的凭证概览。它还会显示凭证存储中找到的配置文件的 OAuth 过期状态(默认在 24 小时内到期时警告)。`--plain` 仅打印已解析的主模型。
|
||||
OAuth 状态始终会显示(也包含在 `--json` 输出中)。如果某个已配置提供商没有凭证,`models status` 会打印一个**缺少凭证**部分。
|
||||
JSON 包含 `auth.oauth`(警告窗口 + 配置文件)和 `auth.providers`
|
||||
(每个提供商的生效凭证,包括由环境变量支持的凭证)。`auth.oauth`
|
||||
仅表示凭证存储配置文件的健康状态;仅使用环境变量的提供商不会出现在其中。
|
||||
自动化场景请使用 `--check`(缺少/已过期时退出码为 `1`,即将过期时为 `2`)。
|
||||
实时凭证检查请使用 `--probe`;探测行可以来自凭证配置文件、环境变量凭证或 `models.json`。
|
||||
如果显式的 `auth.order.<provider>` 省略了某个已存储配置文件,探测会报告
|
||||
`excluded_by_auth_order`,而不是尝试它。如果凭证存在但无法为该提供商解析出可探测模型,探测会报告 `status: no_model`。
|
||||
|
||||
凭证选择取决于提供商/账户。对于始终在线的 Gateway 网关主机,API 密钥通常是最可预测的;也支持复用 Claude CLI 和现有 Anthropic OAuth/令牌配置文件。
|
||||
凭证选择取决于提供商/账户。对于持续运行的 Gateway 网关主机,API 密钥通常最可预测;也支持重用 Claude CLI,以及现有的 Anthropic OAuth/token 配置文件。
|
||||
|
||||
示例(Claude CLI):
|
||||
|
||||
@ -185,7 +201,7 @@ openclaw models status
|
||||
|
||||
## 扫描(OpenRouter 免费模型)
|
||||
|
||||
`openclaw models scan` 会检查 OpenRouter 的**免费模型目录**,并可选择探测模型是否支持工具和图像。
|
||||
`openclaw models scan` 会检查 OpenRouter 的**免费模型目录**,并可选择探测模型的工具和图像支持。
|
||||
|
||||
关键标志:
|
||||
|
||||
@ -194,49 +210,50 @@ openclaw models status
|
||||
- `--max-age-days <days>`:跳过较旧模型
|
||||
- `--provider <name>`:提供商前缀筛选
|
||||
- `--max-candidates <n>`:回退列表大小
|
||||
- `--set-default`:将 `agents.defaults.model.primary` 设为第一个选中项
|
||||
- `--set-image`:将 `agents.defaults.imageModel.primary` 设为第一个图像选中项
|
||||
- `--set-default`:将 `agents.defaults.model.primary` 设置为第一个选中项
|
||||
- `--set-image`:将 `agents.defaults.imageModel.primary` 设置为第一个图像选中项
|
||||
|
||||
探测需要 OpenRouter API 密钥(来自凭证配置文件或 `OPENROUTER_API_KEY`)。
|
||||
如果没有密钥,请使用 `--no-probe` 仅列出候选项。
|
||||
探测需要 OpenRouter API 密钥(来自凭证配置文件或
|
||||
`OPENROUTER_API_KEY`)。如果没有密钥,请使用 `--no-probe` 仅列出候选项。
|
||||
|
||||
扫描结果按以下顺序排序:
|
||||
|
||||
1. 图像支持
|
||||
2. 工具延迟
|
||||
3. 上下文大小
|
||||
4. 参数数量
|
||||
4. 参数量
|
||||
|
||||
输入
|
||||
|
||||
- OpenRouter `/models` 列表(筛选 `:free`)
|
||||
- 需要来自凭证配置文件或 `OPENROUTER_API_KEY` 的 OpenRouter API 密钥(参见 [/environment](/zh-CN/help/environment))
|
||||
- 可选筛选项:`--max-age-days`、`--min-params`、`--provider`、`--max-candidates`
|
||||
- 可选筛选:`--max-age-days`、`--min-params`、`--provider`、`--max-candidates`
|
||||
- 探测控制:`--timeout`、`--concurrency`
|
||||
|
||||
在 TTY 中运行时,你可以交互式选择回退模型。在非交互模式下,传入 `--yes` 以接受默认值。
|
||||
|
||||
## 模型注册表(`models.json`)
|
||||
|
||||
`models.providers` 中的自定义提供商会写入智能体目录下的 `models.json`(默认是 `~/.openclaw/agents/<agentId>/agent/models.json`)。默认情况下,该文件会被合并,除非 `models.mode` 被设置为 `replace`。
|
||||
`models.providers` 中的自定义提供商会被写入智能体目录下的 `models.json`
|
||||
(默认是 `~/.openclaw/agents/<agentId>/agent/models.json`)。默认情况下会合并该文件,除非 `models.mode` 被设置为 `replace`。
|
||||
|
||||
对于匹配的提供商 ID,合并模式优先级如下:
|
||||
|
||||
- 智能体 `models.json` 中已存在的非空 `baseUrl` 优先。
|
||||
- 智能体 `models.json` 中非空的 `apiKey` 仅在该提供商在当前配置/凭证配置文件上下文中不是 SecretRef 管理时优先。
|
||||
- SecretRef 管理的提供商 `apiKey` 值会从源标记刷新(环境变量引用使用 `ENV_VAR_NAME`,文件/exec 引用使用 `secretref-managed`),而不是持久化已解析的密钥。
|
||||
- SecretRef 管理的提供商请求头值会从源标记刷新(环境变量引用使用 `secretref-env:ENV_VAR_NAME`,文件/exec 引用使用 `secretref-managed`)。
|
||||
- 智能体 `models.json` 中非空的 `apiKey` 仅在该提供商在当前配置/凭证配置文件上下文中不是由 SecretRef 管理时优先。
|
||||
- 由 SecretRef 管理的提供商 `apiKey` 值会从源标记刷新(环境变量引用为 `ENV_VAR_NAME`,文件/exec 引用为 `secretref-managed`),而不是持久化已解析的密钥。
|
||||
- 由 SecretRef 管理的提供商请求头值会从源标记刷新(环境变量引用为 `secretref-env:ENV_VAR_NAME`,文件/exec 引用为 `secretref-managed`)。
|
||||
- 智能体中为空或缺失的 `apiKey`/`baseUrl` 会回退到配置中的 `models.providers`。
|
||||
- 其他提供商字段会从配置和规范化目录数据中刷新。
|
||||
- 其他提供商字段会从配置和规范化后的目录数据刷新。
|
||||
|
||||
标记持久化以源为准:OpenClaw 会根据活动源配置快照(解析前)写入标记,而不是根据运行时已解析的密钥值写入。
|
||||
这适用于 OpenClaw 重新生成 `models.json` 的任何场景,包括像 `openclaw agent` 这样的命令驱动路径。
|
||||
标记持久化以源为准:OpenClaw 会从活动源配置快照(解析前)写入标记,而不是从已解析的运行时密钥值写入。
|
||||
只要 OpenClaw 重新生成 `models.json`,这条规则就适用,包括像 `openclaw agent` 这样的命令驱动路径。
|
||||
|
||||
## 相关内容
|
||||
## 相关
|
||||
|
||||
- [Model Providers](/zh-CN/concepts/model-providers) — 提供商路由与凭证
|
||||
- [Model Failover](/zh-CN/concepts/model-failover) — 回退链
|
||||
- [Image Generation](/zh-CN/tools/image-generation) — 图像模型配置
|
||||
- [Music Generation](/zh-CN/tools/music-generation) — 音乐模型配置
|
||||
- [Video Generation](/zh-CN/tools/video-generation) — 视频模型配置
|
||||
- [Configuration Reference](/zh-CN/gateway/configuration-reference#agent-defaults) — 模型配置键名
|
||||
- [模型提供商](/zh-CN/concepts/model-providers) — 提供商路由与凭证
|
||||
- [模型回退](/zh-CN/concepts/model-failover) — 回退链
|
||||
- [图像生成](/zh-CN/tools/image-generation) — 图像模型配置
|
||||
- [音乐生成](/zh-CN/tools/music-generation) — 音乐模型配置
|
||||
- [视频生成](/zh-CN/tools/video-generation) — 视频模型配置
|
||||
- [配置参考](/zh-CN/gateway/configuration-reference#agent-defaults) — 模型配置键
|
||||
|
||||
Loading…
Reference in New Issue
Block a user