chore(i18n): refresh zh-CN translations
This commit is contained in:
parent
a04ffd34f5
commit
0f532557fc
@ -4,17 +4,17 @@ read_when:
|
||||
summary: Discord 机器人支持状态、功能和配置
|
||||
title: Discord
|
||||
x-i18n:
|
||||
generated_at: "2026-04-23T07:03:23Z"
|
||||
generated_at: "2026-04-23T08:25:07Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: 0bee2c419651701f7ab57e46a4c0c473c83596eb9bd2156bac3c6117513236ab
|
||||
source_hash: 1160a0b221bc3251722a81c00c65ee7c2001efce345248727f1f3c8580a0e953
|
||||
source_path: channels/discord.md
|
||||
workflow: 15
|
||||
---
|
||||
|
||||
# Discord(Bot API)
|
||||
|
||||
状态:已就绪,可通过官方 Discord Gateway 网关用于私信和服务器频道。
|
||||
状态:已就绪,可通过官方 Discord gateway 用于私信和服务器频道。
|
||||
|
||||
<CardGroup cols={3}>
|
||||
<Card title="配对" icon="link" href="/zh-CN/channels/pairing">
|
||||
@ -30,7 +30,7 @@ x-i18n:
|
||||
|
||||
## 快速开始
|
||||
|
||||
你需要创建一个带机器人的新应用,将机器人添加到你的服务器,并将其与 OpenClaw 配对。我们建议把你的机器人添加到你自己的私有服务器。如果你还没有服务器,请先[创建一个](https://support.discord.com/hc/en-us/articles/204849977-How-do-I-create-a-server)(选择 **Create My Own > For me and my friends**)。
|
||||
你需要创建一个带有机器人的新应用,将机器人添加到你的服务器中,并将其与 OpenClaw 配对。我们建议将你的机器人添加到你自己的私有服务器。如果你还没有服务器,请先[创建一个](https://support.discord.com/hc/en-us/articles/204849977-How-do-I-create-a-server)(选择 **Create My Own > For me and my friends**)。
|
||||
|
||||
<Steps>
|
||||
<Step title="创建 Discord 应用和机器人">
|
||||
@ -41,34 +41,34 @@ x-i18n:
|
||||
</Step>
|
||||
|
||||
<Step title="启用特权 intents">
|
||||
仍在 **Bot** 页面时,向下滚动到 **Privileged Gateway Intents**,并启用:
|
||||
仍然停留在 **Bot** 页面,向下滚动到 **Privileged Gateway Intents** 并启用:
|
||||
|
||||
- **Message Content Intent**(必需)
|
||||
- **Server Members Intent**(推荐;角色 allowlist 和名称到 ID 匹配时必需)
|
||||
- **Presence Intent**(可选;仅在需要在线状态更新时使用)
|
||||
- **Server Members Intent**(推荐;角色允许列表和名称到 ID 匹配需要它)
|
||||
- **Presence Intent**(可选;仅在需要在线状态更新时启用)
|
||||
|
||||
</Step>
|
||||
|
||||
<Step title="复制你的机器人令牌">
|
||||
向上滚动回 **Bot** 页面顶部,点击 **Reset Token**。
|
||||
向上滚动回 **Bot** 页面并点击 **Reset Token**。
|
||||
|
||||
<Note>
|
||||
尽管名字叫这样,但这里会生成你的第一个令牌 —— 并没有任何内容被“重置”。
|
||||
尽管名字叫这样,这会生成你的第一个令牌——并没有任何内容被“重置”。
|
||||
</Note>
|
||||
|
||||
复制该令牌并保存到某处。这就是你的 **Bot Token**,你很快就会用到它。
|
||||
复制该令牌并将其保存到某处。这就是你的 **Bot Token**,你很快就会用到它。
|
||||
|
||||
</Step>
|
||||
|
||||
<Step title="生成邀请 URL 并将机器人添加到你的服务器">
|
||||
点击侧边栏中的 **OAuth2**。你将生成一个带有正确权限的邀请 URL,用于把机器人添加到你的服务器。
|
||||
<Step title="生成邀请 URL,并将机器人添加到你的服务器">
|
||||
点击侧边栏中的 **OAuth2**。你将生成一个带有正确权限的邀请 URL,用于将机器人添加到你的服务器。
|
||||
|
||||
向下滚动到 **OAuth2 URL Generator**,并启用:
|
||||
向下滚动到 **OAuth2 URL Generator** 并启用:
|
||||
|
||||
- `bot`
|
||||
- `applications.commands`
|
||||
|
||||
下方会出现 **Bot Permissions** 区域。至少启用:
|
||||
下方会出现一个 **Bot Permissions** 部分。至少启用:
|
||||
|
||||
**General Permissions**
|
||||
- View Channels
|
||||
@ -79,31 +79,31 @@ x-i18n:
|
||||
- Attach Files
|
||||
- Add Reactions(可选)
|
||||
|
||||
这是普通文本频道的基础权限集。如果你计划在 Discord 帖子串中发帖,包括会创建或继续帖子串的 forum 或 media 渠道工作流,还需要启用 **Send Messages in Threads**。
|
||||
复制底部生成的 URL,粘贴到浏览器中,选择你的服务器,然后点击 **Continue** 进行连接。现在你应该能在 Discord 服务器中看到你的机器人。
|
||||
这是普通文本频道的基础权限集。如果你计划在 Discord 线程中发帖,包括会创建或继续线程的论坛或媒体频道工作流,还需要启用 **Send Messages in Threads**。
|
||||
复制底部生成的 URL,将其粘贴到浏览器中,选择你的服务器,然后点击 **Continue** 进行连接。现在你应该能在 Discord 服务器中看到你的机器人。
|
||||
|
||||
</Step>
|
||||
|
||||
<Step title="启用开发者模式并收集你的 ID">
|
||||
回到 Discord 应用中,你需要启用开发者模式,这样才能复制内部 ID。
|
||||
<Step title="启用 Developer Mode 并收集你的 ID">
|
||||
回到 Discord 应用中,你需要启用 Developer Mode,这样你才能复制内部 ID。
|
||||
|
||||
1. 点击 **User Settings**(头像旁边的齿轮图标)→ **Advanced** → 打开 **Developer Mode**
|
||||
2. 在侧边栏中右键点击你的 **server icon** → **Copy Server ID**
|
||||
3. 右键点击你自己的 **avatar** → **Copy User ID**
|
||||
2. 在侧边栏中右键点击你的**服务器图标** → **Copy Server ID**
|
||||
3. 右键点击你自己的**头像** → **Copy User ID**
|
||||
|
||||
将你的 **Server ID** 和 **User ID** 与 Bot Token 一起保存 —— 下一步你会把这三项都提供给 OpenClaw。
|
||||
将你的 **Server ID** 和 **User ID** 与 Bot Token 一起保存——下一步你需要把这三个值都提供给 OpenClaw。
|
||||
|
||||
</Step>
|
||||
|
||||
<Step title="允许来自服务器成员的私信">
|
||||
要让配对正常工作,Discord 需要允许你的机器人向你发送私信。右键点击你的 **server icon** → **Privacy Settings** → 打开 **Direct Messages**。
|
||||
为了让配对正常工作,Discord 需要允许你的机器人向你发送私信。右键点击你的**服务器图标** → **Privacy Settings** → 打开 **Direct Messages**。
|
||||
|
||||
这样服务器成员(包括机器人)就可以向你发送私信。如果你想在 OpenClaw 中使用 Discord 私信,请保持该选项启用。如果你只打算使用服务器频道,那么在完成配对后可以关闭私信。
|
||||
这样服务器成员(包括机器人)就可以向你发送私信。如果你想通过 OpenClaw 使用 Discord 私信,请保持此设置开启。如果你只打算使用服务器频道,那么配对完成后可以关闭私信。
|
||||
|
||||
</Step>
|
||||
|
||||
<Step title="安全设置你的机器人令牌(不要在聊天中发送它)">
|
||||
你的 Discord 机器人令牌是机密信息(类似密码)。在给你的智能体发消息之前,请先在运行 OpenClaw 的机器上设置它。
|
||||
<Step title="安全地设置你的机器人令牌(不要在聊天中发送它)">
|
||||
你的 Discord 机器人令牌是机密信息(就像密码一样)。在给你的智能体发送消息之前,先在运行 OpenClaw 的机器上设置它。
|
||||
|
||||
```bash
|
||||
export DISCORD_BOT_TOKEN="YOUR_BOT_TOKEN"
|
||||
@ -113,7 +113,7 @@ openclaw config set channels.discord.enabled true --strict-json
|
||||
openclaw gateway
|
||||
```
|
||||
|
||||
如果 OpenClaw 已经作为后台服务运行,请通过 OpenClaw Mac 应用重启它,或者停止并重新启动 `openclaw gateway run` 进程。
|
||||
如果 OpenClaw 已经作为后台服务在运行,请通过 OpenClaw Mac 应用重启它,或者停止并重新启动 `openclaw gateway run` 进程。
|
||||
|
||||
</Step>
|
||||
|
||||
@ -121,9 +121,9 @@ openclaw gateway
|
||||
|
||||
<Tabs>
|
||||
<Tab title="询问你的智能体">
|
||||
在任何现有渠道(例如 Telegram)上与你的 OpenClaw 智能体聊天,并告诉它。如果 Discord 是你的第一个渠道,请改用 CLI / config 标签页。
|
||||
在任何现有渠道(例如 Telegram)上与你的 OpenClaw 智能体聊天,并告诉它。如果 Discord 是你的第一个渠道,请改用 CLI / 配置标签页。
|
||||
|
||||
> “我已经在配置中设置好了 Discord 机器人令牌。请使用 User ID `<user_id>` 和 Server ID `<server_id>` 完成 Discord 设置。”
|
||||
> “我已经在配置中设置了 Discord 机器人令牌。请使用 User ID `<user_id>` 和 Server ID `<server_id>` 完成 Discord 设置。”
|
||||
</Tab>
|
||||
<Tab title="CLI / 配置">
|
||||
如果你更喜欢基于文件的配置,请设置:
|
||||
@ -149,7 +149,7 @@ openclaw gateway
|
||||
DISCORD_BOT_TOKEN=...
|
||||
```
|
||||
|
||||
支持纯文本 `token` 值。`channels.discord.token` 也支持跨 env/file/exec 提供商的 SecretRef 值。请参阅 [Secrets Management](/zh-CN/gateway/secrets)。
|
||||
支持明文 `token` 值。`channels.discord.token` 也支持跨 env/file/exec 提供商的 SecretRef 值。参见 [Secrets Management](/zh-CN/gateway/secrets)。
|
||||
|
||||
</Tab>
|
||||
</Tabs>
|
||||
@ -157,11 +157,11 @@ DISCORD_BOT_TOKEN=...
|
||||
</Step>
|
||||
|
||||
<Step title="批准首次私信配对">
|
||||
等待 Gateway 网关运行后,在 Discord 中向你的机器人发送私信。它会回复一个配对码。
|
||||
等待 Gateway 网关运行起来,然后在 Discord 中向你的机器人发送私信。它会回复一个配对码。
|
||||
|
||||
<Tabs>
|
||||
<Tab title="询问你的智能体">
|
||||
在你现有的渠道中,把配对码发送给你的智能体:
|
||||
在你现有的渠道中,将该配对码发送给你的智能体:
|
||||
|
||||
> “批准这个 Discord 配对码:`<CODE>`”
|
||||
</Tab>
|
||||
@ -177,27 +177,27 @@ openclaw pairing approve discord <CODE>
|
||||
|
||||
配对码会在 1 小时后过期。
|
||||
|
||||
现在你应该已经可以通过私信在 Discord 中与你的智能体聊天了。
|
||||
现在你应该已经可以通过 Discord 私信与你的智能体聊天了。
|
||||
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
<Note>
|
||||
令牌解析是账户感知的。配置中的令牌值优先于环境变量回退。`DISCORD_BOT_TOKEN` 仅用于默认账户。
|
||||
对于高级出站调用(消息工具/渠道操作),会为该次调用使用显式的逐调用 `token`。这适用于发送以及读取/探测类操作(例如 read/search/fetch/thread/pins/permissions)。账户策略和重试设置仍然来自活动运行时快照中所选的账户。
|
||||
令牌解析具有账户感知能力。配置中的令牌值优先于环境变量回退。`DISCORD_BOT_TOKEN` 仅用于默认账户。
|
||||
对于高级出站调用(消息工具/渠道操作),显式的每次调用 `token` 会用于该次调用。这适用于发送以及读取/探测类操作(例如 read/search/fetch/thread/pins/permissions)。账户策略/重试设置仍来自活动运行时快照中所选账户。
|
||||
</Note>
|
||||
|
||||
## 推荐:设置服务器工作区
|
||||
|
||||
私信可用后,你可以把 Discord 服务器设置为一个完整工作区,其中每个频道都会获得自己的智能体会话和独立上下文。对于只有你和机器人使用的私有服务器,我们推荐这样做。
|
||||
一旦私信工作正常,你就可以将 Discord 服务器设置为一个完整工作区,其中每个频道都会获得自己的智能体会话及其各自的上下文。对于只有你和机器人使用的私有服务器,我们推荐这样配置。
|
||||
|
||||
<Steps>
|
||||
<Step title="将你的服务器添加到服务器 allowlist">
|
||||
这样你的智能体就可以在服务器中的任意频道内响应,而不仅仅是私信。
|
||||
<Step title="将你的服务器添加到服务器允许列表">
|
||||
这样你的智能体就可以在服务器中的任何频道响应,而不仅仅是在私信中。
|
||||
|
||||
<Tabs>
|
||||
<Tab title="询问你的智能体">
|
||||
> “把我的 Discord Server ID `<server_id>` 添加到服务器 allowlist”
|
||||
> “将我的 Discord Server ID `<server_id>` 添加到服务器允许列表”
|
||||
</Tab>
|
||||
<Tab title="配置">
|
||||
|
||||
@ -223,14 +223,14 @@ openclaw pairing approve discord <CODE>
|
||||
</Step>
|
||||
|
||||
<Step title="允许在不使用 @mention 的情况下回复">
|
||||
默认情况下,你的智能体只有在服务器频道中被 @ 提及时才会回复。对于私有服务器,你可能更希望它对每条消息都进行回复。
|
||||
默认情况下,你的智能体只会在被 @mention 时才在服务器频道中响应。对于私有服务器,你很可能希望它对每条消息都做出响应。
|
||||
|
||||
<Tabs>
|
||||
<Tab title="询问你的智能体">
|
||||
> “允许我的智能体在这个服务器中回复,而不需要被 @ 提及”
|
||||
> “允许我的智能体在这个服务器中无需被 @mention 也能回复”
|
||||
</Tab>
|
||||
<Tab title="配置">
|
||||
在你的服务器配置中将 `requireMention: false` 设置为:
|
||||
在你的服务器配置中设置 `requireMention: false`:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -251,7 +251,7 @@ openclaw pairing approve discord <CODE>
|
||||
|
||||
</Step>
|
||||
|
||||
<Step title="规划服务器频道中的记忆使用">
|
||||
<Step title="为服务器频道中的记忆做好规划">
|
||||
默认情况下,长期记忆(MEMORY.md)只会在私信会话中加载。服务器频道不会自动加载 MEMORY.md。
|
||||
|
||||
<Tabs>
|
||||
@ -259,68 +259,68 @@ openclaw pairing approve discord <CODE>
|
||||
> “当我在 Discord 频道中提问时,如果你需要来自 MEMORY.md 的长期上下文,请使用 memory_search 或 memory_get。”
|
||||
</Tab>
|
||||
<Tab title="手动">
|
||||
如果你需要在每个频道中共享上下文,请把稳定的指令放在 `AGENTS.md` 或 `USER.md` 中(它们会注入到每个会话)。把长期笔记保存在 `MEMORY.md` 中,并在需要时通过 memory 工具访问它们。
|
||||
如果你需要在每个频道中共享上下文,请将稳定的说明放入 `AGENTS.md` 或 `USER.md`(它们会注入到每个会话中)。将长期笔记保存在 `MEMORY.md` 中,并在需要时通过 memory 工具访问它们。
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
现在,在你的 Discord 服务器中创建一些频道并开始聊天吧。你的智能体可以看到频道名称,并且每个频道都会获得自己隔离的会话 —— 因此你可以设置 `#coding`、`#home`、`#research`,或者任何适合你工作流的频道。
|
||||
现在,在你的 Discord 服务器上创建一些频道并开始聊天吧。你的智能体可以看到频道名称,并且每个频道都会获得自己隔离的会话——因此你可以设置 `#coding`、`#home`、`#research`,或者任何适合你工作流的频道。
|
||||
|
||||
## 运行时模型
|
||||
|
||||
- Gateway 网关负责 Discord 连接。
|
||||
- 回复路由是确定性的:来自 Discord 的入站消息会回复到 Discord。
|
||||
- 回复路由是确定性的:来自 Discord 的入站回复会返回到 Discord。
|
||||
- 默认情况下(`session.dmScope=main`),私聊共享智能体主会话(`agent:main:main`)。
|
||||
- 服务器频道使用隔离的会话键(`agent:<agentId>:discord:channel:<channelId>`)。
|
||||
- 默认忽略群组私信(`channels.discord.dm.groupEnabled=false`)。
|
||||
- 原生斜杠命令在隔离的命令会话中运行(`agent:<agentId>:discord:slash:<userId>`),同时仍会将 `CommandTargetSessionKey` 传递到路由后的对话会话。
|
||||
- 原生斜杠命令在隔离的命令会话中运行(`agent:<agentId>:discord:slash:<userId>`),同时仍携带 `CommandTargetSessionKey` 指向路由后的对话会话。
|
||||
|
||||
## forum 渠道
|
||||
## 论坛频道
|
||||
|
||||
Discord forum 和 media 渠道只接受帖子串。OpenClaw 支持两种创建方式:
|
||||
Discord 论坛和媒体频道只接受线程帖子。OpenClaw 支持两种创建方式:
|
||||
|
||||
- 向 forum 父频道(`channel:<forumId>`)发送消息以自动创建帖子串。帖子串标题使用你消息中的第一行非空内容。
|
||||
- 使用 `openclaw message thread create` 直接创建帖子串。对于 forum 渠道,不要传递 `--message-id`。
|
||||
- 向论坛父频道(`channel:<forumId>`)发送消息,以自动创建线程。线程标题使用你消息中的第一条非空行。
|
||||
- 使用 `openclaw message thread create` 直接创建线程。不要为论坛频道传递 `--message-id`。
|
||||
|
||||
示例:发送到 forum 父频道以创建帖子串
|
||||
示例:发送到论坛父频道以创建线程
|
||||
|
||||
```bash
|
||||
openclaw message send --channel discord --target channel:<forumId> \
|
||||
--message "Topic title\nBody of the post"
|
||||
```
|
||||
|
||||
示例:显式创建 forum 帖子串
|
||||
示例:显式创建论坛线程
|
||||
|
||||
```bash
|
||||
openclaw message thread create --channel discord --target channel:<forumId> \
|
||||
--thread-name "Topic title" --message "Body of the post"
|
||||
```
|
||||
|
||||
forum 父频道不接受 Discord components。如果你需要 components,请发送到帖子串本身(`channel:<threadId>`)。
|
||||
论坛父频道不接受 Discord 组件。如果你需要组件,请发送到线程本身(`channel:<threadId>`)。
|
||||
|
||||
## 交互式 components
|
||||
## 交互式组件
|
||||
|
||||
OpenClaw 为智能体消息支持 Discord components v2 容器。请使用带有 `components` 负载的消息工具。交互结果会像普通入站消息一样路由回智能体,并遵循现有的 Discord `replyToMode` 设置。
|
||||
OpenClaw 为智能体消息支持 Discord components v2 容器。使用带有 `components` 负载的消息工具。交互结果会像普通入站消息一样路由回智能体,并遵循现有的 Discord `replyToMode` 设置。
|
||||
|
||||
支持的块:
|
||||
支持的区块:
|
||||
|
||||
- `text`、`section`、`separator`、`actions`、`media-gallery`、`file`
|
||||
- 操作行最多允许 5 个按钮或单个选择菜单
|
||||
- 操作行最多允许 5 个按钮,或单个选择菜单
|
||||
- 选择类型:`string`、`user`、`role`、`mentionable`、`channel`
|
||||
|
||||
默认情况下,components 为一次性使用。设置 `components.reusable=true` 可允许按钮、选择器和表单在过期前被多次使用。
|
||||
默认情况下,组件只能使用一次。设置 `components.reusable=true` 可让按钮、选择器和表单在过期前被多次使用。
|
||||
|
||||
如果要限制谁可以点击按钮,请在该按钮上设置 `allowedUsers`(Discord 用户 ID、标签,或 `*`)。配置后,不匹配的用户会收到一条仅自己可见的拒绝消息。
|
||||
要限制谁可以点击按钮,请在该按钮上设置 `allowedUsers`(Discord 用户 ID、标签,或 `*`)。配置后,不匹配的用户会收到一条仅自己可见的拒绝提示。
|
||||
|
||||
`/model` 和 `/models` 斜杠命令会打开一个交互式模型选择器,其中包含提供商和模型下拉菜单,以及一个 Submit 步骤。除非设置了 `commands.modelsWrite=false`,否则 `/models add` 也支持通过聊天添加新的提供商/模型条目,新增模型无需重启 Gateway 网关即可显示。选择器回复为仅自己可见,并且只有调用它的用户可以使用。
|
||||
`/model` 和 `/models` 斜杠命令会打开一个交互式模型选择器,其中包含提供商和模型下拉菜单,以及一个提交步骤。除非设置了 `commands.modelsWrite=false`,否则 `/models add` 也支持在聊天中添加新的提供商/模型条目,而且新添加的模型无需重启 Gateway 网关就会显示出来。选择器的回复仅自己可见,且只有调用该命令的用户可以使用它。
|
||||
|
||||
文件附件:
|
||||
|
||||
- `file` 块必须指向一个附件引用(`attachment://<filename>`)
|
||||
- 通过 `media`/`path`/`filePath` 提供附件(单文件);多个文件请使用 `media-gallery`
|
||||
- 当上传名称需要与附件引用匹配时,请使用 `filename` 覆盖上传名称
|
||||
- `file` 区块必须指向一个附件引用(`attachment://<filename>`)
|
||||
- 通过 `media`/`path`/`filePath` 提供附件(单个文件);多个文件请使用 `media-gallery`
|
||||
- 当上传名称应与附件引用匹配时,使用 `filename` 覆盖上传名称
|
||||
|
||||
模态表单:
|
||||
|
||||
@ -393,20 +393,20 @@ OpenClaw 为智能体消息支持 Discord components v2 容器。请使用带有
|
||||
- `open`(要求 `channels.discord.allowFrom` 包含 `"*"`;旧版:`channels.discord.dm.allowFrom`)
|
||||
- `disabled`
|
||||
|
||||
如果私信策略不是 open,未知用户会被阻止(或在 `pairing` 模式下被提示进行配对)。
|
||||
如果私信策略不是 open,未知用户会被阻止(或在 `pairing` 模式下提示进行配对)。
|
||||
|
||||
多账户优先级:
|
||||
|
||||
- `channels.discord.accounts.default.allowFrom` 仅适用于 `default` 账户。
|
||||
- 当具名账户自己的 `allowFrom` 未设置时,会继承 `channels.discord.allowFrom`。
|
||||
- 具名账户不会继承 `channels.discord.accounts.default.allowFrom`。
|
||||
- 当命名账户自身的 `allowFrom` 未设置时,会继承 `channels.discord.allowFrom`。
|
||||
- 命名账户不会继承 `channels.discord.accounts.default.allowFrom`。
|
||||
|
||||
用于投递的私信目标格式:
|
||||
|
||||
- `user:<id>`
|
||||
- `<@id>` 提及
|
||||
|
||||
裸数字 ID 存在歧义,除非提供了明确的用户/频道目标类型,否则会被拒绝。
|
||||
纯数字 ID 存在歧义,除非显式提供 user/channel 目标类型,否则会被拒绝。
|
||||
|
||||
</Tab>
|
||||
|
||||
@ -417,16 +417,16 @@ OpenClaw 为智能体消息支持 Discord components v2 容器。请使用带有
|
||||
- `allowlist`
|
||||
- `disabled`
|
||||
|
||||
当存在 `channels.discord` 时,安全的基线是 `allowlist`。
|
||||
当存在 `channels.discord` 时,安全基线是 `allowlist`。
|
||||
|
||||
`allowlist` 行为:
|
||||
|
||||
- 服务器必须匹配 `channels.discord.guilds`(优先使用 `id`,也接受 slug)
|
||||
- 可选的发送者 allowlist:`users`(推荐使用稳定 ID)和 `roles`(仅角色 ID);如果配置了任一项,则当发送者匹配 `users` 或 `roles` 时即被允许
|
||||
- 默认禁用直接名称/标签匹配;只有在紧急兼容模式下才启用 `channels.discord.dangerouslyAllowNameMatching: true`
|
||||
- 可选的发送者允许列表:`users`(推荐使用稳定 ID)和 `roles`(仅角色 ID);如果配置了其中任意一项,当发送者匹配 `users` 或 `roles` 时即被允许
|
||||
- 默认禁用直接名称/标签匹配;仅在作为紧急兼容模式时启用 `channels.discord.dangerouslyAllowNameMatching: true`
|
||||
- `users` 支持名称/标签,但 ID 更安全;使用名称/标签条目时,`openclaw security audit` 会发出警告
|
||||
- 如果某个服务器配置了 `channels`,则未列出的频道会被拒绝
|
||||
- 如果某个服务器没有 `channels` 块,则该 allowlist 服务器中的所有频道都被允许
|
||||
- 如果某个服务器没有 `channels` 块,则该允许列表服务器中的所有频道都被允许
|
||||
|
||||
示例:
|
||||
|
||||
@ -452,26 +452,26 @@ OpenClaw 为智能体消息支持 Discord components v2 容器。请使用带有
|
||||
}
|
||||
```
|
||||
|
||||
如果你只设置了 `DISCORD_BOT_TOKEN`,但没有创建 `channels.discord` 块,则运行时回退为 `groupPolicy="allowlist"`(日志中会有警告),即使 `channels.defaults.groupPolicy` 是 `open` 也是如此。
|
||||
如果你只设置了 `DISCORD_BOT_TOKEN`,而没有创建 `channels.discord` 块,则运行时回退为 `groupPolicy="allowlist"`(日志中会有警告),即使 `channels.defaults.groupPolicy` 是 `open` 也是如此。
|
||||
|
||||
</Tab>
|
||||
|
||||
<Tab title="提及和群组私信">
|
||||
默认情况下,服务器消息受提及门控。
|
||||
默认情况下,服务器消息需要提及才会触发。
|
||||
|
||||
提及检测包括:
|
||||
|
||||
- 显式提及机器人
|
||||
- 已配置的提及模式(`agents.list[].groupChat.mentionPatterns`,回退为 `messages.groupChat.mentionPatterns`)
|
||||
- 在受支持场景中的隐式回复机器人行为
|
||||
- 在支持的情况下,隐式回复机器人行为
|
||||
|
||||
`requireMention` 按服务器/频道配置(`channels.discord.guilds...`)。
|
||||
`ignoreOtherMentions` 可选择丢弃那些提及了其他用户/角色但没有提及机器人的消息(不包括 @everyone/@here)。
|
||||
`ignoreOtherMentions` 可选地丢弃提及了其他用户/角色但未提及机器人的消息(不包括 @everyone/@here)。
|
||||
|
||||
群组私信:
|
||||
|
||||
- 默认:忽略(`dm.groupEnabled=false`)
|
||||
- 可选:通过 `dm.groupChannels` allowlist 允许(频道 ID 或 slug)
|
||||
- 可选允许列表通过 `dm.groupChannels` 配置(频道 ID 或 slug)
|
||||
|
||||
</Tab>
|
||||
</Tabs>
|
||||
@ -519,7 +519,7 @@ OpenClaw 为智能体消息支持 Discord components v2 容器。请使用带有
|
||||
- Message Content Intent
|
||||
- Server Members Intent(推荐)
|
||||
|
||||
Presence intent 是可选的,只有在你希望接收在线状态更新时才需要。设置机器人在线状态(`setPresence`)并不要求为成员启用在线状态更新。
|
||||
Presence intent 是可选的,只有当你希望接收在线状态更新时才需要。设置机器人在线状态(`setPresence`)并不要求为成员启用在线状态更新。
|
||||
|
||||
</Accordion>
|
||||
|
||||
@ -539,7 +539,7 @@ OpenClaw 为智能体消息支持 Discord components v2 容器。请使用带有
|
||||
- Attach Files
|
||||
- Add Reactions(可选)
|
||||
|
||||
这是普通文本频道的基础权限集。如果你计划在 Discord 帖子串中发帖,包括会创建或继续帖子串的 forum 或 media 渠道工作流,还需要启用 **Send Messages in Threads**。
|
||||
这是普通文本频道的基础权限集。如果你计划在 Discord 线程中发帖,包括会创建或继续线程的论坛或媒体频道工作流,还需要启用 **Send Messages in Threads**。
|
||||
除非明确需要,否则避免使用 `Administrator`。
|
||||
|
||||
</Accordion>
|
||||
@ -551,20 +551,20 @@ OpenClaw 为智能体消息支持 Discord components v2 容器。请使用带有
|
||||
- channel ID
|
||||
- user ID
|
||||
|
||||
在 OpenClaw 配置中优先使用数字 ID,以获得更可靠的审计和探测结果。
|
||||
在 OpenClaw 配置中,优先使用数字 ID,以获得可靠的审计和探测能力。
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
## 原生命令和命令鉴权
|
||||
|
||||
- `commands.native` 默认为 `"auto"`,并且已为 Discord 启用。
|
||||
- `commands.native` 默认为 `"auto"`,并且对 Discord 已启用。
|
||||
- 按渠道覆盖:`channels.discord.commands.native`。
|
||||
- `commands.native=false` 会显式清除之前已注册的 Discord 原生命令。
|
||||
- 原生命令鉴权使用与普通消息处理相同的 Discord allowlist/策略。
|
||||
- 对于未获授权的用户,这些命令在 Discord UI 中可能仍然可见;但执行时仍会强制执行 OpenClaw 鉴权,并返回 “not authorized”。
|
||||
- `commands.native=false` 会显式清除先前已注册的 Discord 原生命令。
|
||||
- 原生命令鉴权使用与普通消息处理相同的 Discord 允许列表/策略。
|
||||
- 即使未授权用户仍可能在 Discord UI 中看到命令,执行时仍会强制应用 OpenClaw 鉴权,并返回 “not authorized”。
|
||||
|
||||
命令目录和行为请参阅[斜杠命令](/zh-CN/tools/slash-commands)。
|
||||
参见 [Slash commands](/zh-CN/tools/slash-commands) 了解命令目录和行为。
|
||||
|
||||
默认斜杠命令设置:
|
||||
|
||||
@ -587,38 +587,17 @@ OpenClaw 为智能体消息支持 Discord components v2 容器。请使用带有
|
||||
- `batched`
|
||||
|
||||
注意:`off` 会禁用隐式回复线程。显式的 `[[reply_to_*]]` 标签仍会被遵循。
|
||||
`first` 始终会把隐式原生回复引用附加到该轮的第一条 Discord 出站消息上。
|
||||
`batched` 仅当入站轮次是由多条消息组成的去抖动批次时,才会附加 Discord 的隐式原生回复引用。当你主要想在含糊不清的突发聊天中使用原生回复,而不是对每一个单消息轮次都使用时,这会很有用。
|
||||
`first` 总是会将隐式原生回复引用附加到该轮的第一条 Discord 出站消息上。
|
||||
`batched` 仅在入站轮次是由多条消息组成的去抖批次时,才附加 Discord 的隐式原生回复引用。这在你希望原生回复主要用于存在歧义的突发聊天,而不是每一个单条消息轮次时非常有用。
|
||||
|
||||
消息 ID 会在上下文/历史记录中呈现,因此智能体可以定位特定消息。
|
||||
消息 ID 会在上下文/历史记录中显示,因此智能体可以定位到特定消息。
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="实时流式预览">
|
||||
OpenClaw 可以通过发送一条临时消息并在文本到达时编辑它,来流式显示草稿回复。
|
||||
OpenClaw 可以通过发送一条临时消息并在文本到达时编辑它来流式显示草稿回复。`channels.discord.streaming` 接受 `off`(默认)| `partial` | `block` | `progress`。在 Discord 上,`progress` 会映射为 `partial`;`streamMode` 是旧版别名,会被自动迁移。
|
||||
|
||||
- `channels.discord.streaming` 控制预览流式传输(`off` | `partial` | `block` | `progress`,默认:`off`)。
|
||||
- 默认保持 `off`,因为 Discord 预览编辑很容易触发速率限制,尤其是在多个机器人或 Gateway 网关共享同一账户或服务器流量时。
|
||||
- 为了跨渠道一致性,接受 `progress`,并在 Discord 上映射为 `partial`。
|
||||
- `channels.discord.streamMode` 是旧版别名,会被自动迁移。
|
||||
- `partial` 会在 token 到达时编辑单条预览消息。
|
||||
- `block` 会输出草稿大小的分块(使用 `draftChunk` 调整大小和断点)。
|
||||
- 媒体、错误和显式回复的最终消息会取消待处理的预览编辑,而不会在正常投递前刷新临时草稿。
|
||||
- `streaming.preview.toolProgress` 控制工具/进度更新是否复用同一条草稿预览消息(默认:`true`)。设置为 `false` 可保留单独的工具/进度消息。
|
||||
|
||||
示例:
|
||||
|
||||
```json5
|
||||
{
|
||||
channels: {
|
||||
discord: {
|
||||
streaming: "partial",
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
`block` 模式的默认分块设置(会被限制在 `channels.discord.textChunkLimit` 范围内):
|
||||
默认保持为 `off`,因为当多个机器人或 Gateway 网关共享同一个账户时,Discord 预览编辑很快会触及速率限制。
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -635,13 +614,16 @@ OpenClaw 为智能体消息支持 Discord components v2 容器。请使用带有
|
||||
}
|
||||
```
|
||||
|
||||
预览流式传输仅支持文本;媒体回复会回退为普通投递。
|
||||
- `partial` 会在 token 到达时编辑单条预览消息。
|
||||
- `block` 会发出草稿大小的分块(使用 `draftChunk` 调整大小和断点,并受 `textChunkLimit` 限制)。
|
||||
- 媒体、错误和显式回复的最终消息会取消待处理的预览编辑。
|
||||
- `streaming.preview.toolProgress`(默认 `true`)控制工具/进度更新是否复用预览消息。
|
||||
|
||||
注意:预览流式传输与分块流式传输是分开的。当为 Discord 显式启用分块流式传输时,OpenClaw 会跳过预览流,以避免重复流式传输。
|
||||
预览流式传输仅支持文本;媒体回复会回退为普通投递。当显式启用分块流式传输时,OpenClaw 会跳过预览流,以避免双重流式传输。
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="历史记录、上下文和帖子串行为">
|
||||
<Accordion title="历史记录、上下文和线程行为">
|
||||
服务器历史上下文:
|
||||
|
||||
- `channels.discord.historyLimit` 默认值为 `20`
|
||||
@ -653,32 +635,27 @@ OpenClaw 为智能体消息支持 Discord components v2 容器。请使用带有
|
||||
- `channels.discord.dmHistoryLimit`
|
||||
- `channels.discord.dms["<user_id>"].historyLimit`
|
||||
|
||||
帖子串行为:
|
||||
线程行为:
|
||||
|
||||
- Discord 帖子串作为频道会话进行路由
|
||||
- 父帖子串元数据可用于父会话关联
|
||||
- 除非存在特定于帖子串的条目,否则帖子串配置会继承父频道配置
|
||||
- 新创建的自动帖子串是否继承父转录内容,由 `channels.discord.thread.inheritParent` 选择启用(默认 `false`)。当为 `false` 时,新创建的 Discord 帖子串会话会与父频道转录内容隔离;当为 `true` 时,父频道历史会为新帖子串会话提供初始上下文
|
||||
- 按账户覆盖位于 `channels.discord.accounts.<id>.thread.inheritParent`
|
||||
- 消息工具的 reaction 除了频道目标外,也可以解析 `user:<id>` 私信目标
|
||||
- `channels.discord.guilds.<guild>.channels.<channel>.requireMention: false` 会在回复阶段激活回退期间被保留,因此即使运行回复阶段回退,已配置为始终开启的频道仍会保持始终开启
|
||||
- Discord 线程按频道会话路由,并继承父频道配置,除非被覆盖。
|
||||
- `channels.discord.thread.inheritParent`(默认 `false`)可选择让新自动线程从父级对话记录中播种。按账户覆盖位于 `channels.discord.accounts.<id>.thread.inheritParent` 下。
|
||||
- 消息工具的 reactions 可以解析 `user:<id>` 私信目标。
|
||||
- `guilds.<guild>.channels.<channel>.requireMention: false` 会在回复阶段激活回退期间保留。
|
||||
|
||||
频道主题会作为**不受信任**的上下文注入(而不是作为系统提示词)。
|
||||
回复和引用消息上下文目前会按接收时的样子保留。
|
||||
Discord allowlist 主要用于限制谁可以触发智能体,而不是完整的补充上下文脱敏边界。
|
||||
频道主题会作为**不受信任**的上下文注入。允许列表控制的是谁可以触发智能体,而不是完整的补充上下文脱敏边界。
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="用于子智能体的线程绑定会话">
|
||||
Discord 可以将一个帖子串绑定到某个会话目标,这样该帖子串中的后续消息会持续路由到同一个会话(包括子智能体会话)。
|
||||
Discord 可以将线程绑定到一个会话目标,以便该线程中的后续消息持续路由到同一个会话(包括子智能体会话)。
|
||||
|
||||
命令:
|
||||
|
||||
- `/focus <target>` 将当前/新帖子串绑定到一个子智能体/会话目标
|
||||
- `/unfocus` 移除当前帖子串绑定
|
||||
- `/focus <target>` 将当前/新线程绑定到子智能体/会话目标
|
||||
- `/unfocus` 移除当前线程绑定
|
||||
- `/agents` 显示活动运行和绑定状态
|
||||
- `/session idle <duration|off>` 查看/更新聚焦绑定的空闲自动取消聚焦时间
|
||||
- `/session max-age <duration|off>` 查看/更新聚焦绑定的硬性最大存活时间
|
||||
- `/session idle <duration|off>` 检查/更新聚焦绑定的空闲自动取消聚焦
|
||||
- `/session max-age <duration|off>` 检查/更新聚焦绑定的硬性最长存活时间
|
||||
|
||||
配置:
|
||||
|
||||
@ -707,21 +684,21 @@ OpenClaw 为智能体消息支持 Discord components v2 容器。请使用带有
|
||||
说明:
|
||||
|
||||
- `session.threadBindings.*` 设置全局默认值。
|
||||
- `channels.discord.threadBindings.*` 会覆盖 Discord 行为。
|
||||
- `spawnSubagentSessions` 必须为 true,才能为 `sessions_spawn({ thread: true })` 自动创建/绑定帖子串。
|
||||
- `spawnAcpSessions` 必须为 true,才能为 ACP 自动创建/绑定帖子串(`/acp spawn ... --thread ...` 或 `sessions_spawn({ runtime: "acp", thread: true })`)。
|
||||
- 如果某个账户禁用了帖子串绑定,则 `/focus` 及相关帖子串绑定操作不可用。
|
||||
- `channels.discord.threadBindings.*` 覆盖 Discord 行为。
|
||||
- 要为 `sessions_spawn({ thread: true })` 自动创建/绑定线程,必须将 `spawnSubagentSessions` 设为 true。
|
||||
- 要为 ACP(`/acp spawn ... --thread ...` 或 `sessions_spawn({ runtime: "acp", thread: true })`)自动创建/绑定线程,必须将 `spawnAcpSessions` 设为 true。
|
||||
- 如果某个账户禁用了线程绑定,则 `/focus` 和相关线程绑定操作不可用。
|
||||
|
||||
请参阅[子智能体](/zh-CN/tools/subagents)、[ACP Agents](/zh-CN/tools/acp-agents) 和[配置参考](/zh-CN/gateway/configuration-reference)。
|
||||
参见 [Sub-agents](/zh-CN/tools/subagents)、[ACP Agents](/zh-CN/tools/acp-agents) 和 [Configuration Reference](/zh-CN/gateway/configuration-reference)。
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="持久化 ACP 渠道绑定">
|
||||
对于稳定的“始终在线” ACP 工作区,可配置顶层的类型化 ACP 绑定,并将其目标指向 Discord 对话。
|
||||
对于稳定的“始终在线” ACP 工作区,可配置顶层的类型化 ACP 绑定,将目标指向 Discord 对话。
|
||||
|
||||
配置路径:
|
||||
|
||||
- `bindings[]`,其中 `type: "acp"` 且 `match.channel: "discord"`
|
||||
- 带有 `type: "acp"` 和 `match.channel: "discord"` 的 `bindings[]`
|
||||
|
||||
示例:
|
||||
|
||||
@ -773,31 +750,27 @@ OpenClaw 为智能体消息支持 Discord components v2 容器。请使用带有
|
||||
|
||||
说明:
|
||||
|
||||
- `/acp spawn codex --bind here` 会就地绑定当前 Discord 频道或帖子串,并使未来的消息持续路由到同一个 ACP 会话。
|
||||
- 这仍然可能意味着“启动一个全新的 Codex ACP 会话”,但它本身不会创建新的 Discord 帖子串。现有频道会继续作为聊天界面。
|
||||
- Codex 仍然可能在它自己的 `cwd` 或磁盘上的后端工作区中运行。该工作区是运行时状态,而不是 Discord 帖子串。
|
||||
- 帖子串消息可以继承父频道的 ACP 绑定。
|
||||
- 在已绑定的频道或帖子串中,`/new` 和 `/reset` 会就地重置同一个 ACP 会话。
|
||||
- 临时帖子串绑定仍然可用,并且在生效期间可以覆盖目标解析。
|
||||
- 只有当 OpenClaw 需要通过 `--thread auto|here` 创建/绑定子帖子串时,才需要 `spawnAcpSessions`。对于当前频道中的 `/acp spawn ... --bind here`,则不需要。
|
||||
- `/acp spawn codex --bind here` 会就地绑定当前频道或线程,并让后续消息持续保留在同一个 ACP 会话中。线程消息会继承父频道绑定。
|
||||
- 在已绑定的频道或线程中,`/new` 和 `/reset` 会就地重置同一个 ACP 会话。临时线程绑定在激活期间可以覆盖目标解析。
|
||||
- 仅当 OpenClaw 需要通过 `--thread auto|here` 创建/绑定子线程时,才需要 `spawnAcpSessions`。
|
||||
|
||||
有关绑定行为的详细信息,请参阅 [ACP Agents](/zh-CN/tools/acp-agents)。
|
||||
有关绑定行为的详细信息,参见 [ACP Agents](/zh-CN/tools/acp-agents)。
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Reaction 通知">
|
||||
按服务器配置的 reaction 通知模式:
|
||||
<Accordion title="反应通知">
|
||||
按服务器配置的反应通知模式:
|
||||
|
||||
- `off`
|
||||
- `own`(默认)
|
||||
- `all`
|
||||
- `allowlist`(使用 `guilds.<id>.users`)
|
||||
|
||||
Reaction 事件会被转换为系统事件,并附加到路由后的 Discord 会话。
|
||||
反应事件会转换为系统事件,并附加到已路由的 Discord 会话中。
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="确认 Reaction">
|
||||
<Accordion title="确认反应">
|
||||
`ackReaction` 会在 OpenClaw 处理入站消息时发送一个确认 emoji。
|
||||
|
||||
解析顺序:
|
||||
@ -805,21 +778,21 @@ OpenClaw 为智能体消息支持 Discord components v2 容器。请使用带有
|
||||
- `channels.discord.accounts.<accountId>.ackReaction`
|
||||
- `channels.discord.ackReaction`
|
||||
- `messages.ackReaction`
|
||||
- 智能体身份 emoji 回退(`agents.list[].identity.emoji`,否则为 “👀”)
|
||||
- 智能体身份 emoji 回退(`agents.list[].identity.emoji`,否则为 `"👀"`)
|
||||
|
||||
说明:
|
||||
|
||||
- Discord 接受 unicode emoji 或自定义 emoji 名称。
|
||||
- 使用 `""` 可为某个渠道或账户禁用该 reaction。
|
||||
- 使用 `""` 可为某个渠道或账户禁用该反应。
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="配置写入">
|
||||
默认启用由渠道发起的配置写入。
|
||||
|
||||
这会影响 `/config set|unset` 流程(当命令功能启用时)。
|
||||
这会影响 `/config set|unset` 流程(启用命令功能时)。
|
||||
|
||||
禁用:
|
||||
禁用方式:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -834,7 +807,7 @@ OpenClaw 为智能体消息支持 Discord components v2 容器。请使用带有
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Gateway 网关代理">
|
||||
使用 `channels.discord.proxy`,通过 HTTP(S) 代理路由 Discord gateway WebSocket 流量和启动时的 REST 查询(application ID + allowlist 解析)。
|
||||
使用 `channels.discord.proxy` 通过 HTTP(S) 代理转发 Discord gateway WebSocket 流量和启动时的 REST 查询(应用 ID + allowlist 解析)。
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -865,7 +838,7 @@ OpenClaw 为智能体消息支持 Discord components v2 容器。请使用带有
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="PluralKit 支持">
|
||||
启用 PluralKit 解析,将代理消息映射到 system member 身份:
|
||||
启用 PluralKit 解析,将代理消息映射到系统成员身份:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -883,14 +856,14 @@ OpenClaw 为智能体消息支持 Discord components v2 容器。请使用带有
|
||||
说明:
|
||||
|
||||
- allowlist 可以使用 `pk:<memberId>`
|
||||
- 只有当 `channels.discord.dangerouslyAllowNameMatching: true` 时,才会按名称/slug 匹配成员显示名
|
||||
- 仅当 `channels.discord.dangerouslyAllowNameMatching: true` 时,才会按名称/slug 匹配成员显示名称
|
||||
- 查询使用原始消息 ID,并受时间窗口限制
|
||||
- 如果查询失败,代理消息会被视为机器人消息并丢弃,除非设置了 `allowBots=true`
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="在线状态配置">
|
||||
当你设置状态或活动字段,或启用自动在线状态时,会应用在线状态更新。
|
||||
当你设置状态或活动字段,或启用自动在线状态时,将应用在线状态更新。
|
||||
|
||||
仅状态示例:
|
||||
|
||||
@ -917,7 +890,7 @@ OpenClaw 为智能体消息支持 Discord components v2 容器。请使用带有
|
||||
}
|
||||
```
|
||||
|
||||
Streaming 示例:
|
||||
直播示例:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -957,7 +930,7 @@ OpenClaw 为智能体消息支持 Discord components v2 容器。请使用带有
|
||||
}
|
||||
```
|
||||
|
||||
自动在线状态会将运行时可用性映射为 Discord 状态:healthy => online,degraded 或 unknown => idle,exhausted 或 unavailable => dnd。可选的文本覆盖项:
|
||||
自动在线状态会将运行时可用性映射到 Discord 状态:healthy => online,degraded 或 unknown => idle,exhausted 或 unavailable => dnd。可选文本覆盖:
|
||||
|
||||
- `autoPresence.healthyText`
|
||||
- `autoPresence.degradedText`
|
||||
@ -966,69 +939,56 @@ OpenClaw 为智能体消息支持 Discord components v2 容器。请使用带有
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Discord 中的审批">
|
||||
Discord 支持在私信中使用基于按钮的审批处理,并且还可以选择在发起审批的原始频道中发布审批提示。
|
||||
Discord 支持在私信中基于按钮处理审批,并且可选择在发起请求的频道中发布审批提示。
|
||||
|
||||
配置路径:
|
||||
|
||||
- `channels.discord.execApprovals.enabled`
|
||||
- `channels.discord.execApprovals.approvers`(可选;在可能时回退到 `commands.ownerAllowFrom`)
|
||||
- `channels.discord.execApprovals.approvers`(可选;如果可能,会回退到 `commands.ownerAllowFrom`)
|
||||
- `channels.discord.execApprovals.target`(`dm` | `channel` | `both`,默认:`dm`)
|
||||
- `agentFilter`、`sessionFilter`、`cleanupAfterResolve`
|
||||
|
||||
当 `enabled` 未设置或为 `"auto"`,并且至少可以解析出一个 approver(来自 `execApprovals.approvers` 或 `commands.ownerAllowFrom`)时,Discord 会自动启用原生 exec 审批。Discord 不会从渠道 `allowFrom`、旧版 `dm.allowFrom` 或私信 `defaultTo` 推断 exec approver。将 `enabled: false` 设为显式禁用 Discord 作为原生审批客户端。
|
||||
当 `enabled` 未设置或为 `"auto"`,并且至少可以解析出一个审批人时,Discord 会自动启用原生 exec 审批;审批人可来自 `execApprovals.approvers` 或 `commands.ownerAllowFrom`。Discord 不会从渠道 `allowFrom`、旧版 `dm.allowFrom` 或直接消息的 `defaultTo` 推断 exec 审批人。若要显式禁用 Discord 作为原生审批客户端,请设置 `enabled: false`。
|
||||
|
||||
当 `target` 为 `channel` 或 `both` 时,审批提示会显示在频道中。只有已解析的 approver 可以使用这些按钮;其他用户会收到仅自己可见的拒绝提示。审批提示包含命令文本,因此仅应在受信任的频道中启用频道投递。如果无法从会话键推导出频道 ID,OpenClaw 会回退为私信投递。
|
||||
当 `target` 为 `channel` 或 `both` 时,审批提示会显示在频道中。只有已解析的审批人可以使用按钮;其他用户会收到一条仅自己可见的拒绝提示。审批提示包含命令文本,因此仅应在受信任频道中启用频道投递。如果无法从会话键推导出频道 ID,OpenClaw 会回退到私信投递。
|
||||
|
||||
Discord 也会渲染其他聊天渠道使用的共享审批按钮。原生 Discord 适配器主要增加了 approver 私信路由和频道扇出。
|
||||
Discord 还会渲染其他聊天渠道共用的审批按钮。原生 Discord 适配器主要增加了审批人私信路由和频道扇出。
|
||||
当这些按钮存在时,它们就是主要的审批 UX;只有当工具结果表明聊天审批不可用,或手动审批是唯一途径时,OpenClaw 才应包含手动 `/approve` 命令。
|
||||
|
||||
此处理器的 Gateway 网关鉴权使用与其他 Gateway 网关客户端相同的共享凭证解析契约:
|
||||
Gateway 网关鉴权和审批解析遵循共享的 Gateway 网关客户端契约(`plugin:` ID 通过 `plugin.approval.resolve` 解析;其他 ID 通过 `exec.approval.resolve` 解析)。审批默认会在 30 分钟后过期。
|
||||
|
||||
- 环境变量优先的本地鉴权(`OPENCLAW_GATEWAY_TOKEN` / `OPENCLAW_GATEWAY_PASSWORD`,然后是 `gateway.auth.*`)
|
||||
- 在本地模式下,仅当 `gateway.auth.*` 未设置时,才可将 `gateway.remote.*` 作为回退;已配置但无法解析的本地 SecretRef 会失败关闭
|
||||
- 在适用情况下,通过 `gateway.remote.*` 支持远程模式
|
||||
- URL 覆盖是安全的覆盖:CLI 覆盖不会复用隐式凭证,而环境变量覆盖仅使用环境变量凭证
|
||||
|
||||
审批解析行为:
|
||||
|
||||
- 以 `plugin:` 为前缀的 ID 通过 `plugin.approval.resolve` 解析。
|
||||
- 其他 ID 通过 `exec.approval.resolve` 解析。
|
||||
- Discord 不会在这里再执行额外的 exec 到 plugin 回退跳转;ID 前缀决定它调用哪个 Gateway 网关方法。
|
||||
|
||||
默认情况下,Exec 审批会在 30 分钟后过期。如果审批因未知审批 ID 而失败,请检查 approver 解析、功能是否已启用,以及已投递的审批 ID 类型是否与待处理请求匹配。
|
||||
|
||||
相关文档:[Exec approvals](/zh-CN/tools/exec-approvals)
|
||||
参见 [Exec approvals](/zh-CN/tools/exec-approvals)。
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
## 工具和操作门控
|
||||
|
||||
Discord 消息操作包括消息传递、频道管理、审核、在线状态和元数据操作。
|
||||
Discord 消息操作包括消息发送、频道管理、审核、在线状态和元数据操作。
|
||||
|
||||
核心示例:
|
||||
|
||||
- 消息传递:`sendMessage`、`readMessages`、`editMessage`、`deleteMessage`、`threadReply`
|
||||
- reactions:`react`、`reactions`、`emojiList`
|
||||
- 消息:`sendMessage`、`readMessages`、`editMessage`、`deleteMessage`、`threadReply`
|
||||
- 反应:`react`、`reactions`、`emojiList`
|
||||
- 审核:`timeout`、`kick`、`ban`
|
||||
- 在线状态:`setPresence`
|
||||
|
||||
`event-create` 操作接受一个可选的 `image` 参数(URL 或本地文件路径),用于设置计划事件封面图片。
|
||||
`event-create` 操作接受一个可选的 `image` 参数(URL 或本地文件路径),用于设置计划事件封面图像。
|
||||
|
||||
操作门控位于 `channels.discord.actions.*` 下。
|
||||
|
||||
默认门控行为:
|
||||
|
||||
| 操作组 | 默认值 |
|
||||
| --- | --- |
|
||||
| reactions、messages、threads、pins、polls、search、memberInfo、roleInfo、channelInfo、channels、voiceStatus、events、stickers、emojiUploads、stickerUploads、permissions | enabled |
|
||||
| roles | disabled |
|
||||
| moderation | disabled |
|
||||
| presence | disabled |
|
||||
| 操作组 | 默认值 |
|
||||
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------- |
|
||||
| reactions、messages、threads、pins、polls、search、memberInfo、roleInfo、channelInfo、channels、voiceStatus、events、stickers、emojiUploads、stickerUploads、permissions | 已启用 |
|
||||
| roles | 已禁用 |
|
||||
| moderation | 已禁用 |
|
||||
| presence | 已禁用 |
|
||||
|
||||
## Components v2 UI
|
||||
|
||||
OpenClaw 使用 Discord components v2 作为 exec 审批和跨上下文标记的 UI。Discord 消息操作也可以接受 `components` 用于自定义 UI(高级用法;需要通过 discord 工具构造组件负载),而旧版 `embeds` 仍然可用,但不推荐。
|
||||
OpenClaw 对 exec 审批和跨上下文标记使用 Discord components v2。Discord 消息操作也可以接受 `components` 用于自定义 UI(高级用法;需要通过 discord 工具构造组件负载);旧版 `embeds` 仍可用,但不推荐。
|
||||
|
||||
- `channels.discord.ui.components.accentColor` 设置 Discord 组件容器使用的强调色(hex)。
|
||||
- 可通过 `channels.discord.accounts.<id>.ui.components.accentColor` 按账户设置。
|
||||
@ -1050,17 +1010,19 @@ OpenClaw 使用 Discord components v2 作为 exec 审批和跨上下文标记的
|
||||
}
|
||||
```
|
||||
|
||||
## 语音频道
|
||||
## 语音
|
||||
|
||||
OpenClaw 可以加入 Discord 语音频道,以实现实时、连续的对话。这与语音消息附件是分开的。
|
||||
Discord 有两种不同的语音表面:实时**语音频道**(连续对话)和**语音消息附件**(波形预览格式)。Gateway 网关同时支持这两者。
|
||||
|
||||
### 语音频道
|
||||
|
||||
要求:
|
||||
|
||||
- 启用原生命令(`commands.native` 或 `channels.discord.commands.native`)。
|
||||
- 配置 `channels.discord.voice`。
|
||||
- 机器人需要在目标语音频道中拥有 Connect 和 Speak 权限。
|
||||
- 机器人在目标语音频道中需要 Connect 和 Speak 权限。
|
||||
|
||||
使用仅限 Discord 的原生命令 `/vc join|leave|status` 来控制会话。该命令使用账户默认智能体,并遵循与其他 Discord 命令相同的 allowlist 和 group policy 规则。
|
||||
使用 `/vc join|leave|status` 控制会话。该命令使用账户默认智能体,并遵循与其他 Discord 命令相同的 allowlist 和服务器策略规则。
|
||||
|
||||
自动加入示例:
|
||||
|
||||
@ -1091,25 +1053,21 @@ OpenClaw 可以加入 Discord 语音频道,以实现实时、连续的对话
|
||||
说明:
|
||||
|
||||
- `voice.tts` 仅对语音播放覆盖 `messages.tts`。
|
||||
- 语音转录轮次会根据 Discord `allowFrom`(或 `dm.allowFrom`)派生 owner 状态;非 owner 的说话者无法访问仅限 owner 的工具(例如 `gateway` 和 `cron`)。
|
||||
- 语音默认启用;设置 `channels.discord.voice.enabled=false` 可禁用它。
|
||||
- 语音转写轮次会从 Discord `allowFrom`(或 `dm.allowFrom`)派生所有者状态;非所有者说话者无法访问仅所有者可用的工具(例如 `gateway` 和 `cron`)。
|
||||
- 默认启用语音;设置 `channels.discord.voice.enabled=false` 可禁用。
|
||||
- `voice.daveEncryption` 和 `voice.decryptionFailureTolerance` 会透传给 `@discordjs/voice` 的加入选项。
|
||||
- 如果未设置,`@discordjs/voice` 的默认值为 `daveEncryption=true` 和 `decryptionFailureTolerance=24`。
|
||||
- OpenClaw 还会监控接收解密失败,并在短时间内重复失败后,通过离开/重新加入语音频道自动恢复。
|
||||
- 如果接收日志反复显示 `DecryptionFailed(UnencryptedWhenPassthroughDisabled)`,这可能是上游 `@discordjs/voice` 的接收 bug,记录在 [discord.js #11419](https://github.com/discordjs/discord.js/issues/11419) 中。
|
||||
- 如果未设置,`@discordjs/voice` 的默认值是 `daveEncryption=true` 和 `decryptionFailureTolerance=24`。
|
||||
- OpenClaw 还会监视接收解密失败,并在短时间内重复失败后通过离开/重新加入语音频道自动恢复。
|
||||
- 如果接收日志反复显示 `DecryptionFailed(UnencryptedWhenPassthroughDisabled)`,这可能是上游 `@discordjs/voice` 接收 bug,见 [discord.js #11419](https://github.com/discordjs/discord.js/issues/11419)。
|
||||
|
||||
## 语音消息
|
||||
### 语音消息
|
||||
|
||||
Discord 语音消息会显示波形预览,并且需要 OGG/Opus 音频和元数据。OpenClaw 会自动生成波形,但它需要在 Gateway 网关主机上可用的 `ffmpeg` 和 `ffprobe` 来检查和转换音频文件。
|
||||
Discord 语音消息会显示波形预览,并要求使用 OGG/Opus 音频。OpenClaw 会自动生成波形,但需要在 Gateway 网关主机上安装 `ffmpeg` 和 `ffprobe` 来进行检测和转换。
|
||||
|
||||
要求和限制:
|
||||
|
||||
- 提供**本地文件路径**(URL 会被拒绝)。
|
||||
- 省略文本内容(Discord 不允许在同一负载中同时发送文本和语音消息)。
|
||||
- 提供**本地文件路径**(不接受 URL)。
|
||||
- 不要附带文本内容(Discord 会拒绝在同一负载中同时包含文本和语音消息)。
|
||||
- 接受任意音频格式;OpenClaw 会在需要时将其转换为 OGG/Opus。
|
||||
|
||||
示例:
|
||||
|
||||
```bash
|
||||
message(action="send", channel="discord", target="channel:123", path="/path/to/audio.mp3", asVoice=true)
|
||||
```
|
||||
@ -1129,7 +1087,7 @@ message(action="send", channel="discord", target="channel:123", path="/path/to/a
|
||||
|
||||
- 验证 `groupPolicy`
|
||||
- 验证 `channels.discord.guilds` 下的服务器 allowlist
|
||||
- 如果存在服务器 `channels` 映射,则只允许列出的频道
|
||||
- 如果存在服务器 `channels` 映射,则只允许其中列出的频道
|
||||
- 验证 `requireMention` 行为和提及模式
|
||||
|
||||
有用的检查:
|
||||
@ -1142,16 +1100,16 @@ openclaw logs --follow
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="requireMention 为 false,但仍然被阻止">
|
||||
<Accordion title="已设置 require mention false,但仍然被阻止">
|
||||
常见原因:
|
||||
|
||||
- `groupPolicy="allowlist"`,但没有匹配的服务器/频道 allowlist
|
||||
- `requireMention` 配置在错误的位置(必须位于 `channels.discord.guilds` 或频道条目下)
|
||||
- `requireMention` 配置在错误位置(必须位于 `channels.discord.guilds` 或频道条目下)
|
||||
- 发送者被服务器/频道 `users` allowlist 阻止
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="长时间运行的处理器超时或出现重复回复">
|
||||
<Accordion title="长时间运行的处理程序超时或出现重复回复">
|
||||
|
||||
典型日志:
|
||||
|
||||
@ -1159,16 +1117,16 @@ openclaw logs --follow
|
||||
- `Slow listener detected ...`
|
||||
- `discord inbound worker timed out after ...`
|
||||
|
||||
监听器预算旋钮:
|
||||
监听器预算控制项:
|
||||
|
||||
- 单账户:`channels.discord.eventQueue.listenerTimeout`
|
||||
- 多账户:`channels.discord.accounts.<accountId>.eventQueue.listenerTimeout`
|
||||
|
||||
Worker 运行超时旋钮:
|
||||
Worker 运行超时控制项:
|
||||
|
||||
- 单账户:`channels.discord.inboundWorker.runTimeoutMs`
|
||||
- 多账户:`channels.discord.accounts.<accountId>.inboundWorker.runTimeoutMs`
|
||||
- 默认值:`1800000`(30 分钟);设置为 `0` 可禁用
|
||||
- 默认值:`1800000`(30 分钟);设为 `0` 可禁用
|
||||
|
||||
推荐基线:
|
||||
|
||||
@ -1191,14 +1149,14 @@ openclaw logs --follow
|
||||
}
|
||||
```
|
||||
|
||||
对于缓慢的监听器初始化,请使用 `eventQueue.listenerTimeout`;只有在你希望为排队的智能体轮次设置单独的安全阀时,才使用 `inboundWorker.runTimeoutMs`。
|
||||
对于缓慢的监听器初始化,请使用 `eventQueue.listenerTimeout`;只有在你希望为排队的智能体轮次设置单独安全阀时,才使用 `inboundWorker.runTimeoutMs`。
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="权限审计不匹配">
|
||||
`channels status --probe` 权限检查仅适用于数字频道 ID。
|
||||
|
||||
如果你使用 slug 键,运行时匹配仍然可以工作,但探测无法完整验证权限。
|
||||
如果你使用 slug 键,运行时匹配仍然可能正常工作,但探测无法完整验证权限。
|
||||
|
||||
</Accordion>
|
||||
|
||||
@ -1211,22 +1169,22 @@ openclaw logs --follow
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="机器人到机器人的循环">
|
||||
默认情况下,由机器人发送的消息会被忽略。
|
||||
默认情况下,会忽略由机器人发送的消息。
|
||||
|
||||
如果你设置了 `channels.discord.allowBots=true`,请使用严格的提及和 allowlist 规则,以避免循环行为。
|
||||
建议使用 `channels.discord.allowBots="mentions"`,仅接受提及该机器人的机器人消息。
|
||||
如果你设置了 `channels.discord.allowBots=true`,请使用严格的提及和 allowlist 规则以避免循环行为。
|
||||
优先使用 `channels.discord.allowBots="mentions"`,这样只接受提及该机器人的机器人消息。
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="语音 STT 因 DecryptionFailed(...) 丢失">
|
||||
|
||||
- 保持 OpenClaw 为最新版本(`openclaw update`),以确保存在 Discord 语音接收恢复逻辑
|
||||
- 确认 `channels.discord.voice.daveEncryption=true`(默认)
|
||||
- 从 `channels.discord.voice.decryptionFailureTolerance=24`(上游默认值)开始,仅在必要时调整
|
||||
- 关注日志中的以下内容:
|
||||
- 保持 OpenClaw 为最新版本(`openclaw update`),以确保包含 Discord 语音接收恢复逻辑
|
||||
- 确认 `channels.discord.voice.daveEncryption=true`(默认值)
|
||||
- 从 `channels.discord.voice.decryptionFailureTolerance=24`(上游默认值)开始,仅在需要时调整
|
||||
- 观察日志中的以下内容:
|
||||
- `discord voice: DAVE decrypt failures detected`
|
||||
- `discord voice: repeated decrypt failures; attempting rejoin`
|
||||
- 如果自动重新加入后故障仍然持续,请收集日志并与 [discord.js #11419](https://github.com/discordjs/discord.js/issues/11419) 进行对比
|
||||
- 如果自动重新加入后问题仍持续,请收集日志并与 [discord.js #11419](https://github.com/discordjs/discord.js/issues/11419) 对照
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
@ -1235,7 +1193,7 @@ openclaw logs --follow
|
||||
|
||||
主要参考:
|
||||
|
||||
- [配置参考 - Discord](/zh-CN/gateway/configuration-reference#discord)
|
||||
- [Configuration reference - Discord](/zh-CN/gateway/configuration-reference#discord)
|
||||
|
||||
高信号 Discord 字段:
|
||||
|
||||
|
||||
@ -2,14 +2,14 @@
|
||||
read_when:
|
||||
- 首次设置 OpenClaw
|
||||
- 查找常见配置模式
|
||||
- 跳转到特定配置章节
|
||||
summary: 配置概览:常见任务、快速设置,以及完整参考的链接
|
||||
- 导航到特定配置部分
|
||||
summary: 配置概览:常见任务、快速设置,以及指向完整参考的链接
|
||||
title: 配置
|
||||
x-i18n:
|
||||
generated_at: "2026-04-23T08:14:07Z"
|
||||
generated_at: "2026-04-23T08:25:19Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: a674bbc73f3a501ffd47ef9396d55d6087806921cfb24ef576398022dd0248c3
|
||||
source_hash: d76b40c25f98de791e0d8012b2bc5b80e3e38dde99bb9105539e800ddac3f362
|
||||
source_path: gateway/configuration.md
|
||||
workflow: 15
|
||||
---
|
||||
@ -17,20 +17,21 @@ x-i18n:
|
||||
# 配置
|
||||
|
||||
OpenClaw 会从 `~/.openclaw/openclaw.json` 读取一个可选的 <Tooltip tip="JSON5 支持注释和尾随逗号">**JSON5**</Tooltip> 配置。
|
||||
当前使用的配置路径必须是一个常规文件。对于由 OpenClaw 管理的写入操作,不支持将 `openclaw.json`
|
||||
布局为符号链接;原子写入可能会替换该路径,
|
||||
而不是保留符号链接。如果你将配置保存在默认状态目录之外,请将 `OPENCLAW_CONFIG_PATH` 直接指向真实文件。
|
||||
当前使用的配置路径必须是一个常规文件。对于 OpenClaw 自身发起的写入操作,
|
||||
不支持使用符号链接形式的 `openclaw.json` 布局;原子写入可能会替换该路径,
|
||||
而不是保留符号链接。如果你将配置保存在默认状态目录之外,请将
|
||||
`OPENCLAW_CONFIG_PATH` 直接指向真实文件。
|
||||
|
||||
如果该文件不存在,OpenClaw 会使用安全默认值。添加配置的常见原因包括:
|
||||
如果文件缺失,OpenClaw 会使用安全的默认值。添加配置的常见原因包括:
|
||||
|
||||
- 连接渠道并控制谁可以向机器人发消息
|
||||
- 设置模型、工具、沙箱隔离或自动化(cron、hooks)
|
||||
- 连接渠道并控制谁可以向机器人发送消息
|
||||
- 设置模型、工具、沙箱隔离或自动化功能(cron、hooks)
|
||||
- 调整会话、媒体、网络或 UI
|
||||
|
||||
请参阅[完整参考](/zh-CN/gateway/configuration-reference)了解所有可用字段。
|
||||
有关所有可用字段,请参阅[完整参考](/zh-CN/gateway/configuration-reference)。
|
||||
|
||||
<Tip>
|
||||
**刚接触配置?** 可先运行 `openclaw onboard` 进行交互式设置,或查看[配置示例](/zh-CN/gateway/configuration-examples)指南,获取可直接复制粘贴的完整配置。
|
||||
**刚接触配置?** 可以从 `openclaw onboard` 开始进行交互式设置,或者查看 [Configuration Examples](/zh-CN/gateway/configuration-examples) 指南,获取可直接复制粘贴的完整配置。
|
||||
</Tip>
|
||||
|
||||
## 最小配置
|
||||
@ -48,7 +49,7 @@ OpenClaw 会从 `~/.openclaw/openclaw.json` 读取一个可选的 <Tooltip tip="
|
||||
<Tabs>
|
||||
<Tab title="交互式向导">
|
||||
```bash
|
||||
openclaw onboard # 完整新手引导流程
|
||||
openclaw onboard # 完整的新手引导流程
|
||||
openclaw configure # 配置向导
|
||||
```
|
||||
</Tab>
|
||||
@ -60,51 +61,50 @@ OpenClaw 会从 `~/.openclaw/openclaw.json` 读取一个可选的 <Tooltip tip="
|
||||
```
|
||||
</Tab>
|
||||
<Tab title="控制 UI">
|
||||
打开 [http://127.0.0.1:18789](http://127.0.0.1:18789) 并使用 **配置** 标签页。
|
||||
控制 UI 会根据实时配置 schema 渲染表单,其中包括字段
|
||||
`title` / `description` 文档元数据,以及可用时的插件和渠道 schema,
|
||||
同时提供 **原始 JSON** 编辑器作为兜底方式。对于逐层下钻
|
||||
UI 和其他工具,Gateway 网关 还暴露了 `config.schema.lookup`,
|
||||
用于获取单个按路径限定的 schema 节点及其直接子项摘要。
|
||||
打开 [http://127.0.0.1:18789](http://127.0.0.1:18789),然后使用 **配置** 选项卡。
|
||||
控制 UI 会根据当前配置 schema 渲染表单,其中包括字段
|
||||
`title` / `description` 文档元数据,以及在可用情况下的插件和渠道 schema,
|
||||
同时还提供一个 **Raw JSON** 编辑器作为兜底入口。对于下钻式
|
||||
UI 和其他工具,Gateway 网关 还提供了 `config.schema.lookup`,用于
|
||||
获取单个路径范围内的 schema 节点及其直接子节点摘要。
|
||||
</Tab>
|
||||
<Tab title="直接编辑">
|
||||
直接编辑 `~/.openclaw/openclaw.json`。Gateway 网关 会监视该文件并自动应用更改(请参阅[热重载](#config-hot-reload))。
|
||||
直接编辑 `~/.openclaw/openclaw.json`。Gateway 网关 会监视该文件并自动应用更改(参见[热重载](#config-hot-reload))。
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
## 严格校验
|
||||
|
||||
<Warning>
|
||||
OpenClaw 只接受完全符合 schema 的配置。未知键名、类型格式错误或无效值都会导致 Gateway 网关 **拒绝启动**。唯一的根级例外是 `$schema`(字符串),这样编辑器就可以附加 JSON Schema 元数据。
|
||||
OpenClaw 只接受与 schema 完全匹配的配置。未知键名、格式错误的类型或无效值都会导致 Gateway 网关 **拒绝启动**。唯一的根级例外是 `$schema`(字符串),这样编辑器就可以附加 JSON Schema 元数据。
|
||||
</Warning>
|
||||
|
||||
`openclaw config schema` 会输出控制 UI
|
||||
和校验所使用的规范 JSON Schema。`config.schema.lookup` 会获取单个按路径限定的节点以及
|
||||
子项摘要,用于逐层下钻工具。字段 `title`/`description` 文档元数据
|
||||
`openclaw config schema` 会打印供控制 UI
|
||||
和校验使用的规范 JSON Schema。`config.schema.lookup` 会获取单个路径范围内的节点及其
|
||||
子节点摘要,用于下钻式工具。字段 `title`/`description` 文档元数据
|
||||
会传递到嵌套对象、通配符(`*`)、数组项(`[]`)以及 `anyOf`/
|
||||
`oneOf`/`allOf` 分支。加载 manifest 注册表后,
|
||||
运行时插件和渠道 schema 也会合并进来。
|
||||
`oneOf`/`allOf` 分支中。当清单注册表加载后,运行时插件和渠道 schema 也会合并进来。
|
||||
|
||||
当校验失败时:
|
||||
|
||||
- Gateway 网关 不会启动
|
||||
- 只有诊断命令可用(`openclaw doctor`、`openclaw logs`、`openclaw health`、`openclaw status`)
|
||||
- 运行 `openclaw doctor` 查看具体问题
|
||||
- 运行 `openclaw doctor --fix`(或 `--yes`)应用修复
|
||||
- 运行 `openclaw doctor --fix`(或 `--yes`)以应用修复
|
||||
|
||||
每次成功启动后,Gateway 网关 都会保留一份可信的“最后已知正常”副本。
|
||||
如果之后 `openclaw.json` 未通过校验(或丢失 `gateway.mode`、体积
|
||||
明显缩小,或前面误加了一行日志),OpenClaw 会将损坏的文件
|
||||
保存为 `.clobbered.*`,恢复最后已知正常的副本,并记录恢复
|
||||
原因。下一次智能体回合也会收到系统事件警告,这样主
|
||||
智能体就不会盲目重写已恢复的配置。当候选配置包含已脱敏的密钥占位符(例如 `***`)时,
|
||||
将其提升为最后已知正常副本的操作会被跳过。
|
||||
Gateway 网关 在每次成功启动后都会保留一份受信任的“上次已知正常”副本。
|
||||
如果之后 `openclaw.json` 未通过校验(或缺少 `gateway.mode`、体积明显缩小,
|
||||
或前面意外插入了一行日志),OpenClaw 会将损坏的文件保留为
|
||||
`.clobbered.*`,恢复“上次已知正常”副本,并记录恢复原因。
|
||||
下一次智能体回合也会收到一条系统事件警告,这样主智能体就不会盲目重写已恢复的配置。
|
||||
当候选配置中包含诸如 `***` 之类已脱敏的密钥占位符时,
|
||||
将其提升为“上次已知正常”副本的操作会被跳过。
|
||||
|
||||
## 常见任务
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="设置一个渠道(WhatsApp、Telegram、Discord 等)">
|
||||
每个渠道在 `channels.<provider>` 下都有自己的配置段。请查看对应渠道页面了解设置步骤:
|
||||
每个渠道在 `channels.<provider>` 下都有自己的配置部分。设置步骤请参见对应的专用渠道页面:
|
||||
|
||||
- [WhatsApp](/zh-CN/channels/whatsapp) — `channels.whatsapp`
|
||||
- [Telegram](/zh-CN/channels/telegram) — `channels.telegram`
|
||||
@ -117,7 +117,7 @@ OpenClaw 只接受完全符合 schema 的配置。未知键名、类型格式错
|
||||
- [iMessage](/zh-CN/channels/imessage) — `channels.imessage`
|
||||
- [Mattermost](/zh-CN/channels/mattermost) — `channels.mattermost`
|
||||
|
||||
所有渠道都遵循相同的私信策略模式:
|
||||
所有渠道都共享相同的私信策略模式:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -126,7 +126,7 @@ OpenClaw 只接受完全符合 schema 的配置。未知键名、类型格式错
|
||||
enabled: true,
|
||||
botToken: "123:abc",
|
||||
dmPolicy: "pairing", // pairing | allowlist | open | disabled
|
||||
allowFrom: ["tg:123"], // 仅用于 allowlist/open
|
||||
allowFrom: ["tg:123"], // only for allowlist/open
|
||||
},
|
||||
},
|
||||
}
|
||||
@ -135,7 +135,7 @@ OpenClaw 只接受完全符合 schema 的配置。未知键名、类型格式错
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="选择并配置模型">
|
||||
设置主模型以及可选的回退模型:
|
||||
设置主模型和可选的后备模型:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -154,26 +154,26 @@ OpenClaw 只接受完全符合 schema 的配置。未知键名、类型格式错
|
||||
}
|
||||
```
|
||||
|
||||
- `agents.defaults.models` 用于定义模型目录,同时也是 `/model` 的允许列表。
|
||||
- 使用 `openclaw config set agents.defaults.models '<json>' --strict-json --merge` 可在不移除现有模型的情况下添加允许列表条目。如果普通替换会移除条目,则会被拒绝,除非你传入 `--replace`。
|
||||
- `agents.defaults.models` 定义模型目录,并充当 `/model` 的允许列表。
|
||||
- 使用 `openclaw config set agents.defaults.models '<json>' --strict-json --merge` 添加允许列表条目,而不会移除现有模型。会删除条目的普通替换操作将被拒绝,除非你传入 `--replace`。
|
||||
- 模型引用使用 `provider/model` 格式(例如 `anthropic/claude-opus-4-6`)。
|
||||
- `agents.defaults.imageMaxDimensionPx` 控制转录/工具图像的缩放上限(默认 `1200`);在大量使用截图的运行中,较低的值通常会减少视觉 token 的使用量。
|
||||
- 请参阅[模型 CLI](/zh-CN/concepts/models)了解如何在聊天中切换模型,并参阅[模型故障切换](/zh-CN/concepts/model-failover)了解凭证轮换和回退行为。
|
||||
- 对于自定义/自托管提供商,请参阅参考中的[自定义提供商](/zh-CN/gateway/configuration-reference#custom-providers-and-base-urls)。
|
||||
- `agents.defaults.imageMaxDimensionPx` 控制对话记录/工具图像的缩放上限(默认 `1200`);在截图较多的运行中,较低的值通常能减少视觉 token 的使用量。
|
||||
- 在聊天中切换模型,请参见 [Models CLI](/zh-CN/concepts/models);关于凭证轮换和后备行为,请参见 [Model Failover](/zh-CN/concepts/model-failover)。
|
||||
- 对于自定义/自托管提供商,请参见参考文档中的 [Custom providers](/zh-CN/gateway/configuration-reference#custom-providers-and-base-urls)。
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="控制谁可以向机器人发消息">
|
||||
私信访问按渠道通过 `dmPolicy` 控制:
|
||||
<Accordion title="控制谁可以向机器人发送消息">
|
||||
私信访问通过每个渠道的 `dmPolicy` 进行控制:
|
||||
|
||||
- `"pairing"`(默认):未知发送者会收到一次性配对码以供批准
|
||||
- `"allowlist"`:仅允许 `allowFrom` 中的发送者(或已配对允许存储中的发送者)
|
||||
- `"allowlist"`:仅允许 `allowFrom` 中的发送者(或已配对的允许存储)
|
||||
- `"open"`:允许所有入站私信(需要 `allowFrom: ["*"]`)
|
||||
- `"disabled"`:忽略所有私信
|
||||
|
||||
对于群组,请使用 `groupPolicy` + `groupAllowFrom` 或渠道专用允许列表。
|
||||
对于群组,请使用 `groupPolicy` + `groupAllowFrom` 或渠道专用的允许列表。
|
||||
|
||||
请参阅[完整参考](/zh-CN/gateway/configuration-reference#dm-and-group-access)了解各渠道的详细信息。
|
||||
有关每个渠道的详细信息,请参见[完整参考](/zh-CN/gateway/configuration-reference#dm-and-group-access)。
|
||||
|
||||
</Accordion>
|
||||
|
||||
@ -201,14 +201,14 @@ OpenClaw 只接受完全符合 schema 的配置。未知键名、类型格式错
|
||||
```
|
||||
|
||||
- **元数据提及**:原生 @ 提及(WhatsApp 点按提及、Telegram @bot 等)
|
||||
- **文本模式**:`mentionPatterns` 中的安全正则模式
|
||||
- 请参阅[完整参考](/zh-CN/gateway/configuration-reference#group-chat-mention-gating)了解各渠道覆盖项和 self-chat 模式。
|
||||
- **文本模式**:`mentionPatterns` 中的安全正则表达式模式
|
||||
- 有关每个渠道的覆盖规则和自聊模式,请参见[完整参考](/zh-CN/gateway/configuration-reference#group-chat-mention-gating)。
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="按智能体限制 Skills">
|
||||
使用 `agents.defaults.skills` 作为共享基线,然后通过 `agents.list[].skills` 覆盖特定
|
||||
智能体:
|
||||
使用 `agents.defaults.skills` 作为共享基线,然后通过
|
||||
`agents.list[].skills` 覆盖特定智能体:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -219,22 +219,22 @@ OpenClaw 只接受完全符合 schema 的配置。未知键名、类型格式错
|
||||
list: [
|
||||
{ id: "writer" }, // 继承 github、weather
|
||||
{ id: "docs", skills: ["docs-search"] }, // 替换默认值
|
||||
{ id: "locked-down", skills: [] }, // 不启用任何 Skills
|
||||
{ id: "locked-down", skills: [] }, // 无 Skills
|
||||
],
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
- 省略 `agents.defaults.skills` 表示默认不限制 Skills。
|
||||
- 省略 `agents.list[].skills` 表示继承默认值。
|
||||
- 设置 `agents.list[].skills: []` 表示不启用任何 Skills。
|
||||
- 请参阅 [Skills](/zh-CN/tools/skills)、[Skills 配置](/zh-CN/tools/skills-config) 以及
|
||||
- 省略 `agents.defaults.skills` 可使默认 Skills 不受限制。
|
||||
- 省略 `agents.list[].skills` 将继承默认值。
|
||||
- 设置 `agents.list[].skills: []` 表示不启用 Skills。
|
||||
- 请参见 [Skills](/zh-CN/tools/skills)、[Skills 配置](/zh-CN/tools/skills-config) 和
|
||||
[配置参考](/zh-CN/gateway/configuration-reference#agents-defaults-skills)。
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="调整 Gateway 网关 渠道健康监控">
|
||||
控制 Gateway 网关 对看起来已卡住的渠道进行重启的激进程度:
|
||||
控制 Gateway 网关 对看起来已停滞的渠道执行重启的激进程度:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -256,20 +256,20 @@ OpenClaw 只接受完全符合 schema 的配置。未知键名、类型格式错
|
||||
}
|
||||
```
|
||||
|
||||
- 将 `gateway.channelHealthCheckMinutes: 0` 设为 0 可在全局禁用健康监控重启。
|
||||
- 设置 `gateway.channelHealthCheckMinutes: 0` 可全局禁用健康监控重启。
|
||||
- `channelStaleEventThresholdMinutes` 应大于或等于检查间隔。
|
||||
- 使用 `channels.<provider>.healthMonitor.enabled` 或 `channels.<provider>.accounts.<id>.healthMonitor.enabled`,可只为某个渠道或账号禁用自动重启,而无需禁用全局监控。
|
||||
- 请参阅[健康检查](/zh-CN/gateway/health)了解运维调试方法,并参阅[完整参考](/zh-CN/gateway/configuration-reference#gateway)了解所有字段。
|
||||
- 使用 `channels.<provider>.healthMonitor.enabled` 或 `channels.<provider>.accounts.<id>.healthMonitor.enabled`,可对单个渠道或账户禁用自动重启,而无需禁用全局监控。
|
||||
- 关于运维调试,请参见[健康检查](/zh-CN/gateway/health);有关所有字段,请参见[完整参考](/zh-CN/gateway/configuration-reference#gateway)。
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="配置会话和重置">
|
||||
会话控制对话连续性和隔离性:
|
||||
会话控制对话的连续性和隔离性:
|
||||
|
||||
```json5
|
||||
{
|
||||
session: {
|
||||
dmScope: "per-channel-peer", // 推荐用于多用户
|
||||
dmScope: "per-channel-peer", // recommended for multi-user
|
||||
threadBindings: {
|
||||
enabled: true,
|
||||
idleHours: 24,
|
||||
@ -285,9 +285,9 @@ OpenClaw 只接受完全符合 schema 的配置。未知键名、类型格式错
|
||||
```
|
||||
|
||||
- `dmScope`:`main`(共享)| `per-peer` | `per-channel-peer` | `per-account-channel-peer`
|
||||
- `threadBindings`:用于线程绑定会话路由的全局默认值(Discord 支持 `/focus`、`/unfocus`、`/agents`、`/session idle` 和 `/session max-age`)。
|
||||
- 请参阅[会话管理](/zh-CN/concepts/session)了解作用域、身份关联和发送策略。
|
||||
- 请参阅[完整参考](/zh-CN/gateway/configuration-reference#session)了解所有字段。
|
||||
- `threadBindings`:线程绑定会话路由的全局默认值(Discord 支持 `/focus`、`/unfocus`、`/agents`、`/session idle` 和 `/session max-age`)。
|
||||
- 关于作用域、身份关联和发送策略,请参见[会话管理](/zh-CN/concepts/session)。
|
||||
- 有关所有字段,请参见[完整参考](/zh-CN/gateway/configuration-reference#session)。
|
||||
|
||||
</Accordion>
|
||||
|
||||
@ -307,16 +307,16 @@ OpenClaw 只接受完全符合 schema 的配置。未知键名、类型格式错
|
||||
}
|
||||
```
|
||||
|
||||
请先构建镜像:`scripts/sandbox-setup.sh`
|
||||
先构建镜像:`scripts/sandbox-setup.sh`
|
||||
|
||||
请参阅[沙箱隔离](/zh-CN/gateway/sandboxing)了解完整指南,并参阅[完整参考](/zh-CN/gateway/configuration-reference#agentsdefaultssandbox)了解所有选项。
|
||||
完整指南请参见[沙箱隔离](/zh-CN/gateway/sandboxing),所有选项请参见[完整参考](/zh-CN/gateway/configuration-reference#agentsdefaultssandbox)。
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="为官方 iOS 构建启用基于 relay 的推送">
|
||||
基于 relay 的推送在 `openclaw.json` 中进行配置。
|
||||
基于 relay 的推送在 `openclaw.json` 中配置。
|
||||
|
||||
在 Gateway 网关 配置中设置以下内容:
|
||||
在 Gateway 网关 配置中设置:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -334,43 +334,43 @@ OpenClaw 只接受完全符合 schema 的配置。未知键名、类型格式错
|
||||
}
|
||||
```
|
||||
|
||||
CLI 等效命令:
|
||||
对应的 CLI 命令:
|
||||
|
||||
```bash
|
||||
openclaw config set gateway.push.apns.relay.baseUrl https://relay.example.com
|
||||
```
|
||||
|
||||
作用如下:
|
||||
这会执行以下操作:
|
||||
|
||||
- 让 Gateway 网关 可以通过外部 relay 发送 `push.test`、唤醒提示和重连唤醒。
|
||||
- 使用由已配对 iOS 应用转发的、以注册为作用域的发送授权。Gateway 网关 不需要部署范围的 relay token。
|
||||
- 将每个基于 relay 的注册绑定到 iOS 应用所配对的 Gateway 网关 身份,因此其他 Gateway 网关 无法复用已存储的注册信息。
|
||||
- 本地/手动 iOS 构建仍使用直接 APNs。基于 relay 的发送仅适用于通过 relay 完成注册的官方分发构建。
|
||||
- 必须与官方/TestFlight iOS 构建中内置的 relay 基础 URL 保持一致,这样注册流量和发送流量才能到达同一个 relay 部署。
|
||||
- 允许 Gateway 网关 通过外部 relay 发送 `push.test`、唤醒提示和重连唤醒。
|
||||
- 使用由已配对 iOS 应用转发的、限定注册范围的发送授权。Gateway 网关 不需要部署范围的 relay token。
|
||||
- 将每个基于 relay 的注册绑定到 iOS 应用配对时所连接的 Gateway 网关 身份,因此其他 Gateway 网关 无法复用已存储的注册信息。
|
||||
- 本地/手动构建的 iOS 版本仍使用直接 APNs。基于 relay 的发送仅适用于通过 relay 注册的官方分发构建版本。
|
||||
- 必须与官方/TestFlight iOS 构建中内置的 relay base URL 匹配,这样注册和发送流量才会到达同一个 relay 部署。
|
||||
|
||||
端到端流程:
|
||||
|
||||
1. 安装一个使用相同 relay 基础 URL 编译的官方/TestFlight iOS 构建。
|
||||
1. 安装一个使用相同 relay base URL 编译的官方/TestFlight iOS 构建版本。
|
||||
2. 在 Gateway 网关 上配置 `gateway.push.apns.relay.baseUrl`。
|
||||
3. 将 iOS 应用与 Gateway 网关 配对,并让节点会话和操作员会话都连接上。
|
||||
3. 将 iOS 应用与 Gateway 网关 配对,并让节点会话和操作员会话都建立连接。
|
||||
4. iOS 应用获取 Gateway 网关 身份,使用 App Attest 和应用收据向 relay 注册,然后将基于 relay 的 `push.apns.register` 负载发布到已配对的 Gateway 网关。
|
||||
5. Gateway 网关 存储 relay 句柄和发送授权,然后将其用于 `push.test`、唤醒提示和重连唤醒。
|
||||
5. Gateway 网关 存储 relay 句柄和发送授权,然后将它们用于 `push.test`、唤醒提示和重连唤醒。
|
||||
|
||||
运行说明:
|
||||
|
||||
- 如果你将 iOS 应用切换到另一个 Gateway 网关,请重新连接该应用,以便它发布一个绑定到该 Gateway 网关 的新 relay 注册。
|
||||
- 如果你发布了一个指向不同 relay 部署的新 iOS 构建,应用会刷新其缓存的 relay 注册,而不是复用旧的 relay 来源。
|
||||
- 如果你将 iOS 应用切换到另一个 Gateway 网关,请重新连接应用,以便它发布绑定到该 Gateway 网关 的新 relay 注册信息。
|
||||
- 如果你发布了一个指向不同 relay 部署的新 iOS 构建版本,应用会刷新其缓存的 relay 注册信息,而不是复用旧的 relay 来源。
|
||||
|
||||
兼容性说明:
|
||||
|
||||
- `OPENCLAW_APNS_RELAY_BASE_URL` 和 `OPENCLAW_APNS_RELAY_TIMEOUT_MS` 仍可作为临时环境变量覆盖项使用。
|
||||
- `OPENCLAW_APNS_RELAY_ALLOW_HTTP=true` 仍然是仅限 local loopback 的开发逃生阀;不要在配置中持久化 HTTP relay URL。
|
||||
- `OPENCLAW_APNS_RELAY_ALLOW_HTTP=true` 仍然只是一个仅限 local loopback 的开发逃生口;不要在配置中持久保存 HTTP relay URL。
|
||||
|
||||
请参阅 [iOS App](/zh-CN/platforms/ios#relay-backed-push-for-official-builds) 了解端到端流程,并参阅 [Authentication and trust flow](/zh-CN/platforms/ios#authentication-and-trust-flow) 了解 relay 安全模型。
|
||||
有关端到端流程,请参见 [iOS App](/zh-CN/platforms/ios#relay-backed-push-for-official-builds);有关 relay 安全模型,请参见 [Authentication and trust flow](/zh-CN/platforms/ios#authentication-and-trust-flow)。
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="设置 heartbeat(周期性签入)">
|
||||
<Accordion title="设置心跳(定期检查)">
|
||||
```json5
|
||||
{
|
||||
agents: {
|
||||
@ -384,10 +384,10 @@ OpenClaw 只接受完全符合 schema 的配置。未知键名、类型格式错
|
||||
}
|
||||
```
|
||||
|
||||
- `every`:时长字符串(`30m`、`2h`)。设为 `0m` 可禁用。
|
||||
- `every`:时长字符串(`30m`、`2h`)。设置为 `0m` 可禁用。
|
||||
- `target`:`last` | `none` | `<channel-id>`(例如 `discord`、`matrix`、`telegram` 或 `whatsapp`)
|
||||
- `directPolicy`:用于私信式 heartbeat 目标的 `allow`(默认)或 `block`
|
||||
- 请参阅 [Heartbeat](/zh-CN/gateway/heartbeat) 了解完整指南。
|
||||
- `directPolicy`:对于私信式心跳目标,可设为 `allow`(默认)或 `block`
|
||||
- 完整指南请参见 [Heartbeat](/zh-CN/gateway/heartbeat)。
|
||||
|
||||
</Accordion>
|
||||
|
||||
@ -406,13 +406,13 @@ OpenClaw 只接受完全符合 schema 的配置。未知键名、类型格式错
|
||||
}
|
||||
```
|
||||
|
||||
- `sessionRetention`:从 `sessions.json` 中清理已完成的隔离运行会话(默认 `24h`;设为 `false` 可禁用)。
|
||||
- `sessionRetention`:从 `sessions.json` 中清理已完成的隔离运行会话(默认 `24h`;设置为 `false` 可禁用)。
|
||||
- `runLog`:按大小和保留行数清理 `cron/runs/<jobId>.jsonl`。
|
||||
- 请参阅 [Cron jobs](/zh-CN/automation/cron-jobs) 了解功能概览和 CLI 示例。
|
||||
- 功能概览和 CLI 示例请参见 [Cron jobs](/zh-CN/automation/cron-jobs)。
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="设置 webhook(hooks)">
|
||||
<Accordion title="设置 webhooks(hooks)">
|
||||
在 Gateway 网关 上启用 HTTP webhook 端点:
|
||||
|
||||
```json5
|
||||
@ -442,15 +442,15 @@ OpenClaw 只接受完全符合 schema 的配置。未知键名、类型格式错
|
||||
- Hook 身份验证仅支持请求头(`Authorization: Bearer ...` 或 `x-openclaw-token`);查询字符串 token 会被拒绝。
|
||||
- `hooks.path` 不能为 `/`;请将 webhook 入口保留在专用子路径下,例如 `/hooks`。
|
||||
- 保持不安全内容绕过标志为禁用状态(`hooks.gmail.allowUnsafeExternalContent`、`hooks.mappings[].allowUnsafeExternalContent`),除非你是在进行严格限定范围的调试。
|
||||
- 如果你启用了 `hooks.allowRequestSessionKey`,也要设置 `hooks.allowedSessionKeyPrefixes` 以限制调用方可选择的会话键。
|
||||
- 对于由 hook 驱动的智能体,优先使用更强的现代模型层级和严格的工具策略(例如仅限消息传递,并尽可能配合沙箱隔离)。
|
||||
- 如果你启用了 `hooks.allowRequestSessionKey`,也要同时设置 `hooks.allowedSessionKeyPrefixes`,以限制调用方可选的会话键。
|
||||
- 对于由 hook 驱动的智能体,优先使用强大的现代模型层级和严格的工具策略(例如仅消息传递,并在可能时启用沙箱隔离)。
|
||||
|
||||
请参阅[完整参考](/zh-CN/gateway/configuration-reference#hooks)了解所有映射选项和 Gmail 集成。
|
||||
有关所有映射选项和 Gmail 集成,请参见[完整参考](/zh-CN/gateway/configuration-reference#hooks)。
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="配置多智能体路由">
|
||||
运行多个彼此隔离的智能体,并分别使用独立工作区和会话:
|
||||
运行多个相互隔离的智能体,并为其分配独立的工作区和会话:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -467,7 +467,7 @@ OpenClaw 只接受完全符合 schema 的配置。未知键名、类型格式错
|
||||
}
|
||||
```
|
||||
|
||||
请参阅 [Multi-Agent](/zh-CN/concepts/multi-agent) 和[完整参考](/zh-CN/gateway/configuration-reference#multi-agent-routing)了解绑定规则和每个智能体的访问配置文件。
|
||||
绑定规则和每个智能体的访问配置文件,请参见 [Multi-Agent](/zh-CN/concepts/multi-agent) 和[完整参考](/zh-CN/gateway/configuration-reference#multi-agent-routing)。
|
||||
|
||||
</Accordion>
|
||||
|
||||
@ -485,47 +485,46 @@ OpenClaw 只接受完全符合 schema 的配置。未知键名、类型格式错
|
||||
}
|
||||
```
|
||||
|
||||
- **单个文件**:替换其所在对象
|
||||
- **文件数组**:按顺序深度合并(后者覆盖前者)
|
||||
- **同级键**:在 include 之后合并(覆盖被包含值)
|
||||
- **单个文件**:替换所在对象
|
||||
- **文件数组**:按顺序深度合并(后者优先)
|
||||
- **同级键**:在 include 之后再合并(覆盖引入的值)
|
||||
- **嵌套 include**:支持,最多 10 层
|
||||
- **相对路径**:相对于包含它的文件进行解析
|
||||
- **由 OpenClaw 管理的写入**:当一次写入只更改一个顶级分区,
|
||||
且该分区由单文件 include 支撑时,例如 `plugins: { $include: "./plugins.json5" }`,
|
||||
OpenClaw 会更新该被包含文件,并保持 `openclaw.json` 不变
|
||||
- **不支持的透传写入**:根级 include、include 数组以及带有
|
||||
同级覆盖项的 include,在 OpenClaw 管理的写入场景下会以安全关闭方式失败,
|
||||
而不会将配置拍平
|
||||
- **错误处理**:对于缺失文件、解析错误和循环 include 提供清晰错误信息
|
||||
- **相对路径**:相对于包含它的文件解析
|
||||
- **由 OpenClaw 发起的写入**:当一次写入只更改一个由单文件 include
|
||||
支撑的顶层部分时,例如 `plugins: { $include: "./plugins.json5" }`,
|
||||
OpenClaw 会更新该被引入文件,并保持 `openclaw.json` 不变
|
||||
- **不支持透传写入**:对于根级 include、include 数组以及带有
|
||||
同级覆盖的 include,OpenClaw 发起的写入会以封闭失败方式终止,而不是
|
||||
将配置拍平
|
||||
- **错误处理**:对缺失文件、解析错误和循环 include 提供清晰错误信息
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
## 配置热重载
|
||||
|
||||
Gateway 网关 会监视 `~/.openclaw/openclaw.json` 并自动应用更改——大多数设置都不需要手动重启。
|
||||
Gateway 网关 会监视 `~/.openclaw/openclaw.json` 并自动应用更改 —— 对于大多数设置,无需手动重启。
|
||||
|
||||
直接编辑文件在通过校验前会被视为不可信。监视器会等待
|
||||
编辑器的临时写入/重命名抖动稳定下来,读取最终文件,并通过恢复最后已知正常配置来拒绝
|
||||
无效的外部编辑。由 OpenClaw 管理的
|
||||
配置写入在写入前也会通过同样的 schema 门控;像删除 `gateway.mode`
|
||||
或将文件缩小到不足原来一半这类破坏性覆盖,会被拒绝,
|
||||
直接编辑文件会在通过校验前被视为不可信。监视器会等待
|
||||
编辑器的临时写入/重命名抖动稳定下来,读取最终文件,并通过恢复
|
||||
“上次已知正常”配置来拒绝无效的外部编辑。由 OpenClaw 发起的
|
||||
配置写入在落盘前也会经过相同的 schema 校验;具有破坏性的覆盖行为,例如
|
||||
删除 `gateway.mode` 或将文件缩小到原来的一半以下,会被拒绝,
|
||||
并保存为 `.rejected.*` 以供检查。
|
||||
|
||||
如果你在日志中看到 `Config auto-restored from last-known-good` 或
|
||||
`config reload restored last-known-good config`,请检查
|
||||
`openclaw.json` 旁边对应的 `.clobbered.*` 文件,修复被拒绝的负载,然后运行
|
||||
`openclaw config validate`。请参阅[Gateway 网关 故障排除](/zh-CN/gateway/troubleshooting#gateway-restored-last-known-good-config)
|
||||
了解恢复检查清单。
|
||||
`config reload restored last-known-good config`,请检查 `openclaw.json` 旁边对应的
|
||||
`.clobbered.*` 文件,修复被拒绝的负载,然后运行
|
||||
`openclaw config validate`。恢复检查清单请参见[Gateway 网关 故障排除](/zh-CN/gateway/troubleshooting#gateway-restored-last-known-good-config)。
|
||||
|
||||
### 重载模式
|
||||
|
||||
| 模式 | 行为 |
|
||||
| ---------------------- | --------------------------------------------------------------------------------------- |
|
||||
| **`hybrid`**(默认) | 立即热应用安全更改。对于关键更改会自动重启。 |
|
||||
| **`hot`** | 仅热应用安全更改。当需要重启时会记录警告——由你来处理。 |
|
||||
| **`restart`** | 任何配置更改都会重启 Gateway 网关,不论是否安全。 |
|
||||
| **`off`** | 禁用文件监视。更改将在下次手动重启时生效。 |
|
||||
| **`hybrid`**(默认) | 立即热应用安全更改。对关键更改自动重启。 |
|
||||
| **`hot`** | 仅热应用安全更改。当需要重启时记录警告 —— 由你手动处理。 |
|
||||
| **`restart`** | 对任何配置更改都重启 Gateway 网关,无论是否安全。 |
|
||||
| **`off`** | 禁用文件监视。更改会在下一次手动重启时生效。 |
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -535,56 +534,55 @@ Gateway 网关 会监视 `~/.openclaw/openclaw.json` 并自动应用更改——
|
||||
}
|
||||
```
|
||||
|
||||
### 哪些会热应用,哪些需要重启
|
||||
### 哪些可以热应用,哪些需要重启
|
||||
|
||||
大多数字段都可以在不停机的情况下热应用。在 `hybrid` 模式下,需要重启的更改会自动处理。
|
||||
大多数字段都可以无停机热应用。在 `hybrid` 模式下,需要重启的更改会自动处理。
|
||||
|
||||
| 类别 | 字段 | 需要重启? |
|
||||
| ------------------- | ----------------------------------------------------------------- | --------------- |
|
||||
| 渠道 | `channels.*`、`web`(WhatsApp)——所有内置和插件渠道 | 否 |
|
||||
| 智能体与模型 | `agent`、`agents`、`models`、`routing` | 否 |
|
||||
| 渠道 | `channels.*`、`web`(WhatsApp)—— 所有内置和插件渠道 | 否 |
|
||||
| 智能体和模型 | `agent`、`agents`、`models`、`routing` | 否 |
|
||||
| 自动化 | `hooks`、`cron`、`agent.heartbeat` | 否 |
|
||||
| 会话与消息 | `session`、`messages` | 否 |
|
||||
| 工具与媒体 | `tools`、`browser`、`skills`、`audio`、`talk` | 否 |
|
||||
| UI 与其他 | `ui`、`logging`、`identity`、`bindings` | 否 |
|
||||
| 会话和消息 | `session`、`messages` | 否 |
|
||||
| 工具和媒体 | `tools`、`browser`、`skills`、`audio`、`talk` | 否 |
|
||||
| UI 和其他 | `ui`、`logging`、`identity`、`bindings` | 否 |
|
||||
| Gateway 网关 服务器 | `gateway.*`(port、bind、auth、tailscale、TLS、HTTP) | **是** |
|
||||
| 基础设施 | `discovery`、`canvasHost`、`plugins` | **是** |
|
||||
|
||||
<Note>
|
||||
`gateway.reload` 和 `gateway.remote` 是例外——更改它们**不会**触发重启。
|
||||
`gateway.reload` 和 `gateway.remote` 是例外 —— 更改它们**不会**触发重启。
|
||||
</Note>
|
||||
|
||||
### 重载规划
|
||||
|
||||
当你编辑通过 `$include` 引用的源文件时,OpenClaw 会根据源文件作者定义的布局来规划
|
||||
重载,而不是基于拍平后的内存视图。
|
||||
这样即使
|
||||
某个顶级分区位于单独的被包含文件中,例如
|
||||
`plugins: { $include: "./plugins.json5" }`,热重载决策(热应用还是重启)也会保持可预测。
|
||||
如果源布局存在歧义,重载规划会以安全关闭方式失败。
|
||||
当你编辑一个通过 `$include` 引用的源文件时,OpenClaw 会基于
|
||||
源文件编写时的布局来规划重载,而不是基于拍平后的内存视图。
|
||||
这样即使某个单独的顶层部分位于其自己的被引入文件中,例如
|
||||
`plugins: { $include: "./plugins.json5" }`,热重载决策(热应用还是重启)也能保持可预测。
|
||||
如果源布局存在歧义,重载规划会以封闭失败方式终止。
|
||||
|
||||
## 配置 RPC(程序化更新)
|
||||
|
||||
对于通过 Gateway 网关 API 写入配置的工具,推荐使用以下流程:
|
||||
|
||||
- `config.schema.lookup`:检查一个子树(浅层 schema 节点 + 子项
|
||||
- 使用 `config.schema.lookup` 检查一个子树(浅层 schema 节点 + 子节点
|
||||
摘要)
|
||||
- `config.get`:获取当前快照以及 `hash`
|
||||
- `config.patch`:进行部分更新(JSON merge patch:对象合并,`null`
|
||||
删除,数组替换)
|
||||
- `config.apply`:仅在你打算替换整个配置时使用
|
||||
- `update.run`:执行显式自更新并重启
|
||||
- 使用 `config.get` 获取当前快照及其 `hash`
|
||||
- 使用 `config.patch` 进行部分更新(JSON merge patch:对象合并,`null`
|
||||
表示删除,数组整体替换)
|
||||
- 仅当你确实打算替换整个配置时,才使用 `config.apply`
|
||||
- 使用 `update.run` 显式执行自更新并重启
|
||||
|
||||
<Note>
|
||||
控制平面写入(`config.apply`、`config.patch`、`update.run`)会按
|
||||
每个 `deviceId+clientIp` 在每 60 秒内限制为 3 次请求。
|
||||
控制平面写入(`config.apply`、`config.patch`、`update.run`)
|
||||
按每个 `deviceId+clientIp` 限流为每 60 秒 3 次请求。
|
||||
重启请求会被合并,然后在两次重启周期之间强制执行 30 秒冷却时间。
|
||||
</Note>
|
||||
|
||||
部分 patch 示例:
|
||||
|
||||
```bash
|
||||
openclaw gateway call config.get --params '{}' # 获取 payload.hash
|
||||
openclaw gateway call config.get --params '{}' # capture payload.hash
|
||||
openclaw gateway call config.patch --params '{
|
||||
"raw": "{ channels: { telegram: { groups: { \"*\": { requireMention: false } } } } }",
|
||||
"baseHash": "<hash>"
|
||||
@ -592,15 +590,15 @@ openclaw gateway call config.patch --params '{
|
||||
```
|
||||
|
||||
`config.apply` 和 `config.patch` 都接受 `raw`、`baseHash`、`sessionKey`、
|
||||
`note` 和 `restartDelayMs`。`baseHash` 对 `config.patch` 是必需的,
|
||||
而当配置已存在时,也建议为 `config.apply` 提供它。
|
||||
`note` 和 `restartDelayMs`。当配置已存在时,这两种方法都要求提供
|
||||
`baseHash`。
|
||||
|
||||
## 环境变量
|
||||
|
||||
OpenClaw 会从父进程读取环境变量,另外还会读取:
|
||||
OpenClaw 会从父进程读取环境变量,此外还包括:
|
||||
|
||||
- 当前工作目录中的 `.env`(如果存在)
|
||||
- `~/.openclaw/.env`(全局后备)
|
||||
- `~/.openclaw/.env`(全局回退)
|
||||
|
||||
这两个文件都不会覆盖现有环境变量。你也可以在配置中设置内联环境变量:
|
||||
|
||||
@ -613,8 +611,8 @@ OpenClaw 会从父进程读取环境变量,另外还会读取:
|
||||
}
|
||||
```
|
||||
|
||||
<Accordion title="Shell 环境变量导入(可选)">
|
||||
如果已启用且预期键名尚未设置,OpenClaw 会运行你的登录 shell,并且只导入缺失的键:
|
||||
<Accordion title="导入 Shell 环境变量(可选)">
|
||||
如果启用,并且预期键名尚未设置,OpenClaw 会运行你的登录 shell,并且只导入缺失的键名:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -624,10 +622,10 @@ OpenClaw 会从父进程读取环境变量,另外还会读取:
|
||||
}
|
||||
```
|
||||
|
||||
等效环境变量:`OPENCLAW_LOAD_SHELL_ENV=1`
|
||||
对应的环境变量:`OPENCLAW_LOAD_SHELL_ENV=1`
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="配置值中的环境变量替换">
|
||||
<Accordion title="在配置值中替换环境变量">
|
||||
可在任意配置字符串值中使用 `${VAR_NAME}` 引用环境变量:
|
||||
|
||||
```json5
|
||||
@ -640,14 +638,14 @@ OpenClaw 会从父进程读取环境变量,另外还会读取:
|
||||
规则:
|
||||
|
||||
- 仅匹配大写名称:`[A-Z_][A-Z0-9_]*`
|
||||
- 缺失/为空的环境变量会在加载时抛出错误
|
||||
- 缺失或为空的变量会在加载时报错
|
||||
- 使用 `$${VAR}` 转义以输出字面量
|
||||
- 在 `$include` 文件中也可用
|
||||
- 在 `$include` 文件中同样有效
|
||||
- 内联替换:`"${BASE}/v1"` → `"https://api.example.com/v1"`
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="密钥引用(env、file、exec)">
|
||||
<Accordion title="SecretRef(env、file、exec)">
|
||||
对于支持 SecretRef 对象的字段,你可以使用:
|
||||
|
||||
```json5
|
||||
@ -680,16 +678,16 @@ OpenClaw 会从父进程读取环境变量,另外还会读取:
|
||||
}
|
||||
```
|
||||
|
||||
有关 SecretRef 的详细信息(包括用于 `env`/`file`/`exec` 的 `secrets.providers`),请参阅[密钥管理](/zh-CN/gateway/secrets)。
|
||||
支持的凭证路径列在[SecretRef 凭证范围](/zh-CN/reference/secretref-credential-surface)中。
|
||||
有关 SecretRef 的详细信息(包括用于 `env`/`file`/`exec` 的 `secrets.providers`),请参见[Secrets Management](/zh-CN/gateway/secrets)。
|
||||
支持的凭证路径列在 [SecretRef Credential Surface](/zh-CN/reference/secretref-credential-surface) 中。
|
||||
</Accordion>
|
||||
|
||||
请参阅[环境](/zh-CN/help/environment)了解完整的优先级和来源。
|
||||
有关完整的优先级和来源,请参见[环境](/zh-CN/help/environment)。
|
||||
|
||||
## 完整参考
|
||||
|
||||
如需完整的逐字段参考,请参阅 **[配置参考](/zh-CN/gateway/configuration-reference)**。
|
||||
有关完整的逐字段参考,请参见 **[配置参考](/zh-CN/gateway/configuration-reference)**。
|
||||
|
||||
---
|
||||
|
||||
_相关内容:[配置示例](/zh-CN/gateway/configuration-examples) · [配置参考](/zh-CN/gateway/configuration-reference) · [Doctor](/zh-CN/gateway/doctor)_
|
||||
_相关内容:[Configuration Examples](/zh-CN/gateway/configuration-examples) · [配置参考](/zh-CN/gateway/configuration-reference) · [Doctor](/zh-CN/gateway/doctor)_
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user