chore(i18n): refresh zh-CN translations
This commit is contained in:
parent
651a02cecc
commit
5f72de4d59
@ -1,20 +1,20 @@
|
||||
---
|
||||
read_when:
|
||||
- 处理 Telegram 功能或 Webhook 时
|
||||
- 开发 Telegram 功能或 Webhooks
|
||||
summary: Telegram 机器人支持状态、功能和配置
|
||||
title: Telegram
|
||||
x-i18n:
|
||||
generated_at: "2026-04-20T04:35:04Z"
|
||||
generated_at: "2026-04-20T22:05:34Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: b9903fae98bca0c345aa86d5c29015539c375442524a34d26bd28181470b8477
|
||||
source_hash: a877769c51713222e2f301cfefe499ef28a5f0d68cdaa12f079974acb279144d
|
||||
source_path: channels/telegram.md
|
||||
workflow: 15
|
||||
---
|
||||
|
||||
# Telegram(Bot API)
|
||||
|
||||
状态:基于 grammY,适用于机器人私信 + 群组,已达到生产可用。长轮询是默认模式;Webhook 模式为可选。
|
||||
状态:已可用于生产环境,支持通过 grammY 在机器人私信和群组中使用。长轮询是默认模式;Webhook 模式为可选项。
|
||||
|
||||
<CardGroup cols={3}>
|
||||
<Card title="配对" icon="link" href="/zh-CN/channels/pairing">
|
||||
@ -28,13 +28,13 @@ x-i18n:
|
||||
</Card>
|
||||
</CardGroup>
|
||||
|
||||
## 快速开始
|
||||
## 快速设置
|
||||
|
||||
<Steps>
|
||||
<Step title="在 BotFather 中创建机器人令牌">
|
||||
打开 Telegram,并与 **@BotFather** 聊天(确认用户名严格为 `@BotFather`)。
|
||||
打开 Telegram 并与 **@BotFather** 聊天(确认用户名严格为 `@BotFather`)。
|
||||
|
||||
运行 `/newbot`,按照提示操作,并保存令牌。
|
||||
运行 `/newbot`,按提示操作,并保存令牌。
|
||||
|
||||
</Step>
|
||||
|
||||
@ -53,8 +53,8 @@ x-i18n:
|
||||
}
|
||||
```
|
||||
|
||||
环境变量回退:`TELEGRAM_BOT_TOKEN=...`(仅默认账号)。
|
||||
Telegram **不**使用 `openclaw channels login telegram`;请在配置/环境变量中配置令牌,然后启动 Gateway 网关。
|
||||
环境变量后备:`TELEGRAM_BOT_TOKEN=...`(仅默认账户)。
|
||||
Telegram **不**使用 `openclaw channels login telegram`;请在配置/环境变量中设置令牌,然后启动 Gateway 网关。
|
||||
|
||||
</Step>
|
||||
|
||||
@ -71,40 +71,40 @@ openclaw pairing approve telegram <CODE>
|
||||
</Step>
|
||||
|
||||
<Step title="将机器人添加到群组">
|
||||
将机器人添加到你的群组,然后设置 `channels.telegram.groups` 和 `groupPolicy`,使其与你的访问模型一致。
|
||||
将机器人添加到你的群组,然后设置 `channels.telegram.groups` 和 `groupPolicy` 以匹配你的访问模型。
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
<Note>
|
||||
令牌解析顺序是账号感知的。实际行为中,配置值优先于环境变量回退,而 `TELEGRAM_BOT_TOKEN` 仅适用于默认账号。
|
||||
令牌解析顺序与账户相关。实际情况下,配置值优先于环境变量后备,并且 `TELEGRAM_BOT_TOKEN` 只适用于默认账户。
|
||||
</Note>
|
||||
|
||||
## Telegram 侧设置
|
||||
## Telegram 端设置
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="隐私模式和群组可见性">
|
||||
Telegram 机器人默认启用 **隐私模式**,这会限制它们能接收到的群组消息。
|
||||
<Accordion title="隐私模式与群组可见性">
|
||||
Telegram 机器人默认启用**隐私模式**,这会限制它们能接收到的群组消息。
|
||||
|
||||
如果机器人必须看到所有群组消息,可以采用以下任一方式:
|
||||
如果机器人必须看到所有群组消息,可以采取以下任一方式:
|
||||
|
||||
- 通过 `/setprivacy` 关闭隐私模式,或
|
||||
- 通过 `/setprivacy` 禁用隐私模式,或
|
||||
- 将机器人设为群组管理员。
|
||||
|
||||
切换隐私模式后,请在每个群组中移除并重新添加该机器人,以便 Telegram 应用此更改。
|
||||
切换隐私模式时,请在每个群组中移除后重新添加机器人,这样 Telegram 才会应用更改。
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="群组权限">
|
||||
管理员状态由 Telegram 群组设置控制。
|
||||
|
||||
管理员机器人会接收所有群组消息,这对始终在线的群组行为很有帮助。
|
||||
管理员机器人会接收所有群组消息,这对于始终在线的群组行为很有用。
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="有用的 BotFather 开关">
|
||||
<Accordion title="实用的 BotFather 开关">
|
||||
|
||||
- `/setjoingroups` 允许/禁止加入群组
|
||||
- `/setprivacy` 控制群组可见性行为
|
||||
- `/setjoingroups`:允许/拒绝加入群组
|
||||
- `/setprivacy`:控制群组可见性行为
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
@ -120,17 +120,17 @@ openclaw pairing approve telegram <CODE>
|
||||
- `open`(要求 `allowFrom` 包含 `"*"`)
|
||||
- `disabled`
|
||||
|
||||
`channels.telegram.allowFrom` 接受 Telegram 数字用户 ID。支持并会规范化 `telegram:` / `tg:` 前缀。
|
||||
`channels.telegram.allowFrom` 接受数字类型的 Telegram 用户 ID。支持 `telegram:` / `tg:` 前缀,并会进行标准化。
|
||||
`dmPolicy: "allowlist"` 且 `allowFrom` 为空时会阻止所有私信,并且会被配置校验拒绝。
|
||||
设置流程只要求输入数字用户 ID。
|
||||
如果你已升级且配置中包含 `@username` 形式的 allowlist 条目,请运行 `openclaw doctor --fix` 进行解析(尽力而为;需要 Telegram 机器人令牌)。
|
||||
如果你之前依赖配对存储的 allowlist 文件,`openclaw doctor --fix` 可以在 allowlist 流程中将其中的条目恢复到 `channels.telegram.allowFrom`(例如当 `dmPolicy: "allowlist"` 还没有显式 ID 时)。
|
||||
设置时只会要求填写数字用户 ID。
|
||||
如果你已升级且配置中包含 `@username` 格式的 allowlist 条目,请运行 `openclaw doctor --fix` 来解析它们(尽力而为;需要 Telegram 机器人令牌)。
|
||||
如果你之前依赖配对存储 allowlist 文件,`openclaw doctor --fix` 可以在 allowlist 流程中将这些条目恢复到 `channels.telegram.allowFrom`(例如当 `dmPolicy: "allowlist"` 还没有显式 ID 时)。
|
||||
|
||||
对于单一所有者的机器人,推荐使用 `dmPolicy: "allowlist"` 并显式设置数字 `allowFrom` ID,以便让访问策略稳定地保存在配置中(而不是依赖之前的配对批准)。
|
||||
对于单一所有者机器人,建议使用带有显式数字 `allowFrom` ID 的 `dmPolicy: "allowlist"`,以便让访问策略稳定保存在配置中(而不是依赖之前的配对批准)。
|
||||
|
||||
常见困惑:批准私信配对并不意味着“此发送者在所有地方都被授权”。
|
||||
配对只授予私信访问权限。群组发送者授权仍然来自显式配置的 allowlist。
|
||||
如果你希望“我只授权一次,私信和群组命令都能工作”,请将你的 Telegram 数字用户 ID 放入 `channels.telegram.allowFrom`。
|
||||
常见困惑:私信配对获批并不意味着“这个发送者在所有地方都已获授权”。
|
||||
配对只授予私信访问权限。群组发送者授权仍然来自显式配置 allowlist。
|
||||
如果你想要“我只授权一次,私信和群组命令都能用”,请将你的数字 Telegram 用户 ID 放入 `channels.telegram.allowFrom`。
|
||||
|
||||
### 查找你的 Telegram 用户 ID
|
||||
|
||||
@ -151,28 +151,28 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
|
||||
</Tab>
|
||||
|
||||
<Tab title="群组策略和 allowlist">
|
||||
两个控制项会共同生效:
|
||||
两项控制会同时生效:
|
||||
|
||||
1. **允许哪些群组**(`channels.telegram.groups`)
|
||||
- 没有 `groups` 配置:
|
||||
- 如果 `groupPolicy: "open"`:任意群组都可以通过群组 ID 检查
|
||||
- 如果 `groupPolicy: "allowlist"`(默认):在你添加 `groups` 条目(或 `"*"`)之前,群组会被阻止
|
||||
- 已配置 `groups`:其行为是 allowlist(显式 ID 或 `"*"`)
|
||||
- 当 `groupPolicy: "open"` 时:任意群组都可以通过群组 ID 检查
|
||||
- 当 `groupPolicy: "allowlist"`(默认)时:在你添加 `groups` 条目(或 `"*"`)之前,群组会被阻止
|
||||
- 已配置 `groups`:作为 allowlist 使用(显式 ID 或 `"*"`)
|
||||
|
||||
2. **群组中允许哪些发送者**(`channels.telegram.groupPolicy`)
|
||||
2. **允许群组中的哪些发送者**(`channels.telegram.groupPolicy`)
|
||||
- `open`
|
||||
- `allowlist`(默认)
|
||||
- `disabled`
|
||||
|
||||
`groupAllowFrom` 用于群组发送者过滤。如果未设置,Telegram 会回退到 `allowFrom`。
|
||||
`groupAllowFrom` 条目应为 Telegram 数字用户 ID(`telegram:` / `tg:` 前缀会被规范化)。
|
||||
不要把 Telegram 群组或超级群组聊天 ID 放在 `groupAllowFrom` 中。负数聊天 ID 应放在 `channels.telegram.groups` 下。
|
||||
非数字条目会在发送者授权时被忽略。
|
||||
安全边界(`2026.2.25+`):群组发送者授权 **不会**继承私信配对存储中的批准结果。
|
||||
配对仍然只适用于私信。对于群组,请设置 `groupAllowFrom` 或每个群组/每个话题的 `allowFrom`。
|
||||
如果未设置 `groupAllowFrom`,Telegram 会回退到配置中的 `allowFrom`,而不是配对存储。
|
||||
对于单一所有者机器人,实用模式是:将你的用户 ID 放入 `channels.telegram.allowFrom`,保持 `groupAllowFrom` 未设置,并在 `channels.telegram.groups` 下允许目标群组。
|
||||
运行时说明:如果 `channels.telegram` 完全缺失,运行时默认采用失败即关闭的 `groupPolicy="allowlist"`,除非显式设置了 `channels.defaults.groupPolicy`。
|
||||
`groupAllowFrom` 条目应为数字类型的 Telegram 用户 ID(`telegram:` / `tg:` 前缀会被标准化)。
|
||||
不要把 Telegram 群组或超级群组聊天 ID 放到 `groupAllowFrom` 中。负数聊天 ID 应放在 `channels.telegram.groups` 下。
|
||||
非数字条目会在发送者授权中被忽略。
|
||||
安全边界(`2026.2.25+`):群组发送者授权**不会**继承私信配对存储批准记录。
|
||||
配对仍然只适用于私信。对于群组,请设置 `groupAllowFrom` 或按群组/话题设置 `allowFrom`。
|
||||
如果 `groupAllowFrom` 未设置,Telegram 会回退到配置中的 `allowFrom`,而不是配对存储。
|
||||
单一所有者机器人的实用模式:在 `channels.telegram.allowFrom` 中设置你的用户 ID,保持 `groupAllowFrom` 未设置,并在 `channels.telegram.groups` 下允许目标群组。
|
||||
运行时说明:如果 `channels.telegram` 完全缺失,运行时默认会采用失败即关闭的 `groupPolicy="allowlist"`,除非显式设置了 `channels.defaults.groupPolicy`。
|
||||
|
||||
示例:允许某个特定群组中的任意成员:
|
||||
|
||||
@ -211,15 +211,15 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
|
||||
<Warning>
|
||||
常见错误:`groupAllowFrom` 不是 Telegram 群组 allowlist。
|
||||
|
||||
- 将 `-1001234567890` 这类负数 Telegram 群组或超级群组聊天 ID 放在 `channels.telegram.groups` 下。
|
||||
- 当你想限制允许群组中哪些人可以触发机器人时,将像 `8734062810` 这样的 Telegram 用户 ID 放在 `groupAllowFrom` 下。
|
||||
- 像 `-1001234567890` 这样的负数 Telegram 群组或超级群组聊天 ID,应放在 `channels.telegram.groups` 下。
|
||||
- 像 `8734062810` 这样的 Telegram 用户 ID,应放在 `groupAllowFrom` 下,当你想限制允许群组中哪些人可以触发机器人时使用。
|
||||
- 仅当你希望允许群组中的任意成员都能与机器人对话时,才使用 `groupAllowFrom: ["*"]`。
|
||||
</Warning>
|
||||
|
||||
</Tab>
|
||||
|
||||
<Tab title="提及行为">
|
||||
群组回复默认要求被提及。
|
||||
群组回复默认要求提及。
|
||||
|
||||
提及可以来自:
|
||||
|
||||
@ -233,7 +233,7 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
|
||||
- `/activation always`
|
||||
- `/activation mention`
|
||||
|
||||
这些只会更新会话状态。要持久化,请使用配置。
|
||||
这些只更新会话状态。若要持久化,请使用配置。
|
||||
|
||||
持久化配置示例:
|
||||
|
||||
@ -253,19 +253,19 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
|
||||
|
||||
- 将群组消息转发给 `@userinfobot` / `@getidsbot`
|
||||
- 或从 `openclaw logs --follow` 中读取 `chat.id`
|
||||
- 或查看 Bot API `getUpdates`
|
||||
- 或检查 Bot API `getUpdates`
|
||||
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
## 运行时行为
|
||||
|
||||
- Telegram 由 Gateway 网关进程负责管理。
|
||||
- 路由是确定性的:Telegram 入站回复会回到 Telegram(模型不会选择渠道)。
|
||||
- 入站消息会规范化为共享渠道信封,并带有回复元数据和媒体占位符。
|
||||
- 群组会话按群组 ID 隔离。论坛话题会追加 `:topic:<threadId>` 以保持话题隔离。
|
||||
- 私信消息可以携带 `message_thread_id`;OpenClaw 会使用线程感知的会话键进行路由,并为回复保留线程 ID。
|
||||
- 长轮询使用带有每聊天/每线程顺序控制的 grammY runner。整体 runner sink 并发度使用 `agents.defaults.maxConcurrent`。
|
||||
- Telegram 由 Gateway 网关进程管理。
|
||||
- 路由是确定性的:Telegram 入站回复会返回到 Telegram(不是由模型选择渠道)。
|
||||
- 入站消息会标准化为共享的渠道信封格式,包含回复元数据和媒体占位符。
|
||||
- 群组会话按群组 ID 隔离。论坛话题会追加 `:topic:<threadId>`,以保持话题隔离。
|
||||
- 私信消息可以携带 `message_thread_id`;OpenClaw 会使用具备线程感知能力的会话键进行路由,并为回复保留线程 ID。
|
||||
- 长轮询使用 grammY runner,并按每个聊天/每个线程进行顺序处理。整体 runner sink 并发使用 `agents.defaults.maxConcurrent`。
|
||||
- Telegram Bot API 不支持已读回执(`sendReadReceipts` 不适用)。
|
||||
|
||||
## 功能参考
|
||||
@ -280,23 +280,23 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
|
||||
要求:
|
||||
|
||||
- `channels.telegram.streaming` 为 `off | partial | block | progress`(默认:`partial`)
|
||||
- `progress` 在 Telegram 上会映射为 `partial`(与跨渠道命名兼容)
|
||||
- 旧版 `channels.telegram.streamMode` 和布尔型 `streaming` 值会自动映射
|
||||
- `progress` 在 Telegram 上映射为 `partial`(与跨渠道命名兼容)
|
||||
- 旧版 `channels.telegram.streamMode` 和布尔值 `streaming` 会自动映射
|
||||
|
||||
对于纯文本回复:
|
||||
|
||||
- 私信:OpenClaw 会保留同一条预览消息,并在原位置执行最终编辑(不会发送第二条消息)
|
||||
- 群组/话题:OpenClaw 会保留同一条预览消息,并在原位置执行最终编辑(不会发送第二条消息)
|
||||
- 私信:OpenClaw 会保留同一条预览消息,并在原位执行最终编辑(不会发送第二条消息)
|
||||
- 群组/话题:OpenClaw 会保留同一条预览消息,并在原位执行最终编辑(不会发送第二条消息)
|
||||
|
||||
对于复杂回复(例如媒体负载),OpenClaw 会回退为普通最终投递,然后清理预览消息。
|
||||
对于复杂回复(例如媒体负载),OpenClaw 会回退为正常的最终投递,然后清理预览消息。
|
||||
|
||||
预览流式传输与分块流式传输是分开的。当为 Telegram 显式启用分块流式传输时,OpenClaw 会跳过预览流,以避免双重流式传输。
|
||||
|
||||
如果原生草稿传输不可用/被拒绝,OpenClaw 会自动回退到 `sendMessage` + `editMessageText`。
|
||||
如果原生草稿传输不可用/被拒绝,OpenClaw 会自动回退为 `sendMessage` + `editMessageText`。
|
||||
|
||||
Telegram 专用推理流:
|
||||
Telegram 专属推理流:
|
||||
|
||||
- `/reasoning stream` 会在生成时将推理发送到实时预览
|
||||
- `/reasoning stream` 会在生成期间把推理发送到实时预览中
|
||||
- 最终答案发送时不包含推理文本
|
||||
|
||||
</Accordion>
|
||||
@ -306,14 +306,14 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
|
||||
|
||||
- 类 Markdown 文本会被渲染为 Telegram 安全的 HTML。
|
||||
- 原始模型 HTML 会被转义,以减少 Telegram 解析失败。
|
||||
- 如果 Telegram 拒绝解析后的 HTML,OpenClaw 会以纯文本重试。
|
||||
- 如果 Telegram 拒绝已解析的 HTML,OpenClaw 会重试为纯文本。
|
||||
|
||||
链接预览默认启用,可通过 `channels.telegram.linkPreview: false` 禁用。
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="原生命令和自定义命令">
|
||||
Telegram 命令菜单注册会在启动时通过 `setMyCommands` 处理。
|
||||
Telegram 命令菜单注册在启动时通过 `setMyCommands` 处理。
|
||||
|
||||
原生命令默认值:
|
||||
|
||||
@ -327,7 +327,7 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
|
||||
telegram: {
|
||||
customCommands: [
|
||||
{ command: "backup", description: "Git 备份" },
|
||||
{ command: "generate", description: "创建图片" },
|
||||
{ command: "generate", description: "创建图像" },
|
||||
],
|
||||
},
|
||||
},
|
||||
@ -336,45 +336,45 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
|
||||
|
||||
规则:
|
||||
|
||||
- 名称会被规范化(去掉前导 `/`,转换为小写)
|
||||
- 名称会被标准化(去除前导 `/`,转为小写)
|
||||
- 有效模式:`a-z`、`0-9`、`_`,长度 `1..32`
|
||||
- 自定义命令不能覆盖原生命令
|
||||
- 冲突/重复项会被跳过并记录日志
|
||||
|
||||
说明:
|
||||
|
||||
- 自定义命令只是菜单项;它们不会自动实现行为
|
||||
- 自定义命令仅是菜单项;它们不会自动实现行为
|
||||
- 即使未显示在 Telegram 菜单中,插件/Skills 命令在手动输入时仍然可以工作
|
||||
|
||||
如果禁用了原生命令,内置命令会被移除。若已配置,自定义/插件命令仍可能注册。
|
||||
如果禁用了原生命令,内置命令会被移除。如果已配置,自定义/插件命令仍可能注册。
|
||||
|
||||
常见设置失败:
|
||||
|
||||
- `setMyCommands failed` 且出现 `BOT_COMMANDS_TOO_MUCH`,表示即使裁剪后 Telegram 菜单仍然超出限制;请减少插件/Skills/自定义命令,或禁用 `channels.telegram.commands.native`。
|
||||
- `setMyCommands failed` 且出现网络/fetch 错误,通常表示到 `api.telegram.org` 的出站 DNS/HTTPS 被阻止。
|
||||
- 带有 `BOT_COMMANDS_TOO_MUCH` 的 `setMyCommands failed` 表示即使裁剪后 Telegram 菜单仍然超出限制;请减少插件/Skills/自定义命令,或禁用 `channels.telegram.commands.native`。
|
||||
- 带有网络/fetch 错误的 `setMyCommands failed` 通常表示到 `api.telegram.org` 的出站 DNS/HTTPS 被阻止。
|
||||
|
||||
### 设备配对命令(`device-pair` 插件)
|
||||
|
||||
安装 `device-pair` 插件后:
|
||||
当安装了 `device-pair` 插件时:
|
||||
|
||||
1. `/pair` 生成设置代码
|
||||
2. 在 iOS 应用中粘贴代码
|
||||
3. `/pair pending` 列出待处理请求(包括角色/作用域)
|
||||
4. 批准请求:
|
||||
- `/pair approve <requestId>` 用于显式批准
|
||||
- 当只有一个待处理请求时使用 `/pair approve`
|
||||
- `/pair approve latest` 用于最近的请求
|
||||
- 当只有一个待处理请求时,使用 `/pair approve`
|
||||
- `/pair approve latest` 用于最近一次请求
|
||||
|
||||
设置代码携带一个短期有效的 bootstrap 令牌。内置的 bootstrap 交接会将主节点令牌保持为 `scopes: []`;任何交接出去的操作员令牌都会限制在 `operator.approvals`、`operator.read`、`operator.talk.secrets` 和 `operator.write`。Bootstrap 作用域检查带有角色前缀,因此该操作员 allowlist 只满足操作员请求;非操作员角色仍然需要其自身角色前缀下的作用域。
|
||||
设置代码携带一个短期有效的 bootstrap 令牌。内置的 bootstrap 交接会将主节点令牌保持为 `scopes: []`;任何被交接的 operator 令牌都会被限制在 `operator.approvals`、`operator.read`、`operator.talk.secrets` 和 `operator.write` 范围内。Bootstrap 作用域检查使用角色前缀,因此 operator allowlist 只满足 operator 请求;非 operator 角色仍然需要其自身角色前缀下的作用域。
|
||||
|
||||
如果设备在重试时更改了认证详情(例如角色/作用域/公钥),之前的待处理请求会被新请求取代,而新请求会使用不同的 `requestId`。批准前请重新运行 `/pair pending`。
|
||||
如果设备使用变更后的认证详情重试(例如角色/作用域/公钥),之前的待处理请求会被新请求取代,新请求会使用不同的 `requestId`。批准前请重新运行 `/pair pending`。
|
||||
|
||||
更多细节:[配对](/zh-CN/channels/pairing#pair-via-telegram-recommended-for-ios)。
|
||||
更多详情: [配对](/zh-CN/channels/pairing#pair-via-telegram-recommended-for-ios)。
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="内联按钮">
|
||||
配置内联键盘范围:
|
||||
配置内联键盘作用范围:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -388,7 +388,7 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
|
||||
}
|
||||
```
|
||||
|
||||
每账号覆盖:
|
||||
按账户覆盖:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -423,18 +423,18 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
|
||||
action: "send",
|
||||
channel: "telegram",
|
||||
to: "123456789",
|
||||
message: "请选择一个选项:",
|
||||
message: "Choose an option:",
|
||||
buttons: [
|
||||
[
|
||||
{ text: "是", callback_data: "yes" },
|
||||
{ text: "否", callback_data: "no" },
|
||||
{ text: "Yes", callback_data: "yes" },
|
||||
{ text: "No", callback_data: "no" },
|
||||
],
|
||||
[{ text: "取消", callback_data: "cancel" }],
|
||||
[{ text: "Cancel", callback_data: "cancel" }],
|
||||
],
|
||||
}
|
||||
```
|
||||
|
||||
回调点击会作为文本传递给智能体:
|
||||
回调点击会以文本形式传递给智能体:
|
||||
`callback_data: <value>`
|
||||
|
||||
</Accordion>
|
||||
@ -448,17 +448,17 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
|
||||
- `editMessage`(`chatId`、`messageId`、`content`)
|
||||
- `createForumTopic`(`chatId`、`name`、可选的 `iconColor`、`iconCustomEmojiId`)
|
||||
|
||||
渠道消息动作提供了更易用的别名(`send`、`react`、`delete`、`edit`、`sticker`、`sticker-search`、`topic-create`)。
|
||||
渠道消息动作公开了更易用的别名(ergonomic aliases):`send`、`react`、`delete`、`edit`、`sticker`、`sticker-search`、`topic-create`。
|
||||
|
||||
门控控制项:
|
||||
控制开关:
|
||||
|
||||
- `channels.telegram.actions.sendMessage`
|
||||
- `channels.telegram.actions.deleteMessage`
|
||||
- `channels.telegram.actions.reactions`
|
||||
- `channels.telegram.actions.sticker`(默认:禁用)
|
||||
|
||||
注意:`edit` 和 `topic-create` 当前默认启用,且没有单独的 `channels.telegram.actions.*` 开关。
|
||||
运行时发送使用当前激活的配置/密钥快照(启动/重载时),因此动作路径不会在每次发送时临时重新解析 SecretRef。
|
||||
注意:`edit` 和 `topic-create` 当前默认启用,没有单独的 `channels.telegram.actions.*` 开关。
|
||||
运行时发送使用当前生效的配置/密钥快照(启动/重载时),因此动作路径不会在每次发送时临时重新解析 SecretRef。
|
||||
|
||||
移除反应的语义:[/tools/reactions](/zh-CN/tools/reactions)
|
||||
|
||||
@ -468,7 +468,7 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
|
||||
Telegram 支持在生成输出中使用显式回复线程标签:
|
||||
|
||||
- `[[reply_to_current]]` 回复触发消息
|
||||
- `[[reply_to:<id>]]` 回复某个特定的 Telegram 消息 ID
|
||||
- `[[reply_to:<id>]]` 回复某个指定的 Telegram 消息 ID
|
||||
|
||||
`channels.telegram.replyToMode` 控制处理方式:
|
||||
|
||||
@ -480,23 +480,23 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="论坛话题和线程行为">
|
||||
<Accordion title="论坛话题与线程行为">
|
||||
论坛超级群组:
|
||||
|
||||
- 话题会话键会追加 `:topic:<threadId>`
|
||||
- 回复和输入状态会定向到该话题线程
|
||||
- 回复和输入状态会指向该话题线程
|
||||
- 话题配置路径:
|
||||
`channels.telegram.groups.<chatId>.topics.<threadId>`
|
||||
|
||||
常规话题(`threadId=1`)特殊情况:
|
||||
通用话题(`threadId=1`)特殊情况:
|
||||
|
||||
- 发送消息时会省略 `message_thread_id`(Telegram 会拒绝 `sendMessage(...thread_id=1)`)
|
||||
- 输入状态动作仍然包含 `message_thread_id`
|
||||
- 发送消息时省略 `message_thread_id`(Telegram 会拒绝 `sendMessage(...thread_id=1)`)
|
||||
- 输入动作仍会包含 `message_thread_id`
|
||||
|
||||
话题继承:除非被覆盖,话题条目会继承群组设置(`requireMention`、`allowFrom`、`skills`、`systemPrompt`、`enabled`、`groupPolicy`)。
|
||||
话题继承:话题条目会继承群组设置,除非被覆盖(`requireMention`、`allowFrom`、`skills`、`systemPrompt`、`enabled`、`groupPolicy`)。
|
||||
`agentId` 仅适用于话题,不会从群组默认值继承。
|
||||
|
||||
**按话题分配智能体路由**:每个话题都可以通过在话题配置中设置 `agentId` 路由到不同的智能体。这样每个话题都有自己隔离的工作区、记忆和会话。示例:
|
||||
**按话题分配智能体路由**:每个话题都可以通过在话题配置中设置 `agentId` 路由到不同的智能体。这样每个话题都有自己独立的工作区、Memory Wiki 和会话。示例:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -505,7 +505,7 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
|
||||
groups: {
|
||||
"-1001234567890": {
|
||||
topics: {
|
||||
"1": { agentId: "main" }, // 常规话题 → main 智能体
|
||||
"1": { agentId: "main" }, // 通用话题 → main 智能体
|
||||
"3": { agentId: "zu" }, // 开发话题 → zu 智能体
|
||||
"5": { agentId: "coder" } // 代码审查 → coder 智能体
|
||||
}
|
||||
@ -516,9 +516,9 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
|
||||
}
|
||||
```
|
||||
|
||||
此后每个话题都有自己的会话键:`agent:zu:telegram:group:-1001234567890:topic:3`
|
||||
然后每个话题都有自己的会话键:`agent:zu:telegram:group:-1001234567890:topic:3`
|
||||
|
||||
**持久化 ACP 话题绑定**:论坛话题可以通过顶层类型化 ACP 绑定固定 ACP harness 会话:
|
||||
**持久化 ACP 话题绑定**:论坛话题可以通过顶层类型化 ACP 绑定固定到 ACP harness 会话:
|
||||
|
||||
- `bindings[]`,其中 `type: "acp"` 且 `match.channel: "telegram"`
|
||||
|
||||
@ -569,13 +569,13 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
|
||||
}
|
||||
```
|
||||
|
||||
当前这仅适用于群组和超级群组中的论坛话题。
|
||||
目前这仅适用于群组和超级群组中的论坛话题。
|
||||
|
||||
**从聊天中生成线程绑定的 ACP**:
|
||||
|
||||
- `/acp spawn <agent> --thread here|auto` 可以将当前 Telegram 话题绑定到一个新的 ACP 会话。
|
||||
- 后续该话题中的消息会直接路由到已绑定的 ACP 会话(无需 `/acp steer`)。
|
||||
- 成功绑定后,OpenClaw 会在话题中固定显示生成确认消息。
|
||||
- 该话题中的后续消息会直接路由到已绑定的 ACP 会话(不需要 `/acp steer`)。
|
||||
- 成功绑定后,OpenClaw 会在该话题中固定显示生成确认消息。
|
||||
- 需要 `channels.telegram.threadBindings.spawnAcpSessions=true`。
|
||||
|
||||
模板上下文包括:
|
||||
@ -585,17 +585,17 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
|
||||
|
||||
私信线程行为:
|
||||
|
||||
- 带有 `message_thread_id` 的私聊会保留私信路由,但使用线程感知的会话键/回复目标。
|
||||
- 带有 `message_thread_id` 的私聊会保留私信路由,但使用具备线程感知能力的会话键/回复目标。
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="音频、视频和贴纸">
|
||||
### 音频消息
|
||||
|
||||
Telegram 会区分语音消息和音频文件。
|
||||
Telegram 区分语音便笺和音频文件。
|
||||
|
||||
- 默认:音频文件行为
|
||||
- 在智能体回复中添加标签 `[[audio_as_voice]]` 可强制按语音消息发送
|
||||
- 在智能体回复中添加标签 `[[audio_as_voice]]` 可强制作为语音便笺发送
|
||||
|
||||
消息动作示例:
|
||||
|
||||
@ -611,7 +611,7 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
|
||||
|
||||
### 视频消息
|
||||
|
||||
Telegram 会区分视频文件和视频便笺。
|
||||
Telegram 区分视频文件和视频便笺。
|
||||
|
||||
消息动作示例:
|
||||
|
||||
@ -647,7 +647,7 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
|
||||
|
||||
- `~/.openclaw/telegram/sticker-cache.json`
|
||||
|
||||
贴纸会在可能时描述一次并缓存,以减少重复的视觉调用。
|
||||
贴纸会在可能时只描述一次并缓存,以减少重复的视觉调用。
|
||||
|
||||
启用贴纸动作:
|
||||
|
||||
@ -674,13 +674,13 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
|
||||
}
|
||||
```
|
||||
|
||||
搜索缓存的贴纸:
|
||||
搜索已缓存贴纸:
|
||||
|
||||
```json5
|
||||
{
|
||||
action: "sticker-search",
|
||||
channel: "telegram",
|
||||
query: "挥手的猫",
|
||||
query: "cat waving",
|
||||
limit: 5,
|
||||
}
|
||||
```
|
||||
@ -688,7 +688,7 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="反应通知">
|
||||
Telegram 反应以 `message_reaction` 更新的形式到达(与消息负载分开)。
|
||||
Telegram 反应会以 `message_reaction` 更新到达(与消息负载分开)。
|
||||
|
||||
启用后,OpenClaw 会将如下系统事件加入队列:
|
||||
|
||||
@ -696,22 +696,22 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
|
||||
|
||||
配置:
|
||||
|
||||
- `channels.telegram.reactionNotifications`:`off | own | all`(默认:`own`)
|
||||
- `channels.telegram.reactionLevel`:`off | ack | minimal | extensive`(默认:`minimal`)
|
||||
- `channels.telegram.reactionNotifications`: `off | own | all`(默认:`own`)
|
||||
- `channels.telegram.reactionLevel`: `off | ack | minimal | extensive`(默认:`minimal`)
|
||||
|
||||
说明:
|
||||
|
||||
- `own` 表示仅用户对机器人发送消息的反应(尽力通过已发送消息缓存实现)。
|
||||
- `own` 表示仅处理用户对机器人发送消息的反应(通过已发送消息缓存尽力实现)。
|
||||
- 反应事件仍遵守 Telegram 访问控制(`dmPolicy`、`allowFrom`、`groupPolicy`、`groupAllowFrom`);未授权发送者会被丢弃。
|
||||
- Telegram 不会在反应更新中提供线程 ID。
|
||||
- 非论坛群组会路由到群组聊天会话
|
||||
- 论坛群组会路由到群组常规话题会话(`:topic:1`),而不是精确的来源话题
|
||||
- 论坛群组会路由到群组通用话题会话(`:topic:1`),而不是精确的原始话题
|
||||
|
||||
轮询/Webhook 的 `allowed_updates` 会自动包含 `message_reaction`。
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="确认反应">
|
||||
<Accordion title="Ack 反应">
|
||||
`ackReaction` 会在 OpenClaw 处理入站消息时发送一个确认 emoji。
|
||||
|
||||
解析顺序:
|
||||
@ -719,24 +719,24 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
|
||||
- `channels.telegram.accounts.<accountId>.ackReaction`
|
||||
- `channels.telegram.ackReaction`
|
||||
- `messages.ackReaction`
|
||||
- 智能体身份 emoji 回退(`agents.list[].identity.emoji`,否则为 "👀")
|
||||
- 智能体身份 emoji 后备(`agents.list[].identity.emoji`,否则为 "👀")
|
||||
|
||||
说明:
|
||||
|
||||
- Telegram 需要 unicode emoji(例如 "👀")。
|
||||
- 使用 `""` 可为某个渠道或账号禁用该反应。
|
||||
- 使用 `""` 可为某个渠道或账户禁用该反应。
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="来自 Telegram 事件和命令的配置写入">
|
||||
渠道配置写入默认启用(`configWrites !== false`)。
|
||||
|
||||
Telegram 触发的写入包括:
|
||||
由 Telegram 触发的写入包括:
|
||||
|
||||
- 群组迁移事件(`migrate_to_chat_id`),用于更新 `channels.telegram.groups`
|
||||
- `/config set` 和 `/config unset`(需要启用命令)
|
||||
|
||||
禁用方式:
|
||||
禁用:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -756,30 +756,30 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
|
||||
Webhook 模式:
|
||||
|
||||
- 设置 `channels.telegram.webhookUrl`
|
||||
- 设置 `channels.telegram.webhookSecret`(设置了 webhook URL 时必填)
|
||||
- 设置 `channels.telegram.webhookSecret`(设置了 webhook URL 时必需)
|
||||
- 可选 `channels.telegram.webhookPath`(默认 `/telegram-webhook`)
|
||||
- 可选 `channels.telegram.webhookHost`(默认 `127.0.0.1`)
|
||||
- 可选 `channels.telegram.webhookPort`(默认 `8787`)
|
||||
|
||||
Webhook 模式的默认本地监听器绑定到 `127.0.0.1:8787`。
|
||||
Webhook 模式的默认本地监听地址绑定为 `127.0.0.1:8787`。
|
||||
|
||||
如果你的公共端点不同,请在前面放置一个反向代理,并将 `webhookUrl` 指向公共 URL。
|
||||
如果你确实需要外部入口,请设置 `webhookHost`(例如 `0.0.0.0`)。
|
||||
如果你的公共端点不同,请在前面放置反向代理,并将 `webhookUrl` 指向该公共 URL。
|
||||
当你明确需要外部入口时,请设置 `webhookHost`(例如 `0.0.0.0`)。
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="限制、重试和 CLI 目标">
|
||||
- `channels.telegram.textChunkLimit` 默认值为 4000。
|
||||
- `channels.telegram.chunkMode="newline"` 会在按长度切分前优先按段落边界(空行)切分。
|
||||
- `channels.telegram.chunkMode="newline"` 会在按长度拆分前优先按段落边界(空行)拆分。
|
||||
- `channels.telegram.mediaMaxMb`(默认 100)限制 Telegram 入站和出站媒体大小。
|
||||
- `channels.telegram.timeoutSeconds` 会覆盖 Telegram API 客户端超时时间(如果未设置,则使用 grammY 默认值)。
|
||||
- `channels.telegram.timeoutSeconds` 会覆盖 Telegram API 客户端超时设置(如果未设置,则使用 grammY 默认值)。
|
||||
- 群组上下文历史使用 `channels.telegram.historyLimit` 或 `messages.groupChat.historyLimit`(默认 50);`0` 表示禁用。
|
||||
- 回复/引用/转发的补充上下文当前会按接收时的内容直接传递。
|
||||
- Telegram allowlist 主要限制的是谁可以触发智能体,而不是一个完整的补充上下文脱敏边界。
|
||||
- 回复/引用/转发的补充上下文当前会按接收时原样传递。
|
||||
- Telegram allowlist 主要用于限制谁可以触发智能体,而不是完整的补充上下文脱敏边界。
|
||||
- 私信历史控制:
|
||||
- `channels.telegram.dmHistoryLimit`
|
||||
- `channels.telegram.dms["<user_id>"].historyLimit`
|
||||
- `channels.telegram.retry` 配置适用于 Telegram 发送辅助功能(CLI/工具/动作)中的可恢复出站 API 错误。
|
||||
- `channels.telegram.retry` 配置适用于 Telegram 发送辅助功能(CLI/工具/动作),用于处理可恢复的出站 API 错误。
|
||||
|
||||
CLI 发送目标可以是数字聊天 ID 或用户名:
|
||||
|
||||
@ -798,79 +798,78 @@ openclaw message poll --channel telegram --target -1001234567890:topic:42 \
|
||||
--poll-duration-seconds 300 --poll-public
|
||||
```
|
||||
|
||||
Telegram 专用投票标志:
|
||||
Telegram 专属投票标志:
|
||||
|
||||
- `--poll-duration-seconds`(5-600)
|
||||
- `--poll-anonymous`
|
||||
- `--poll-public`
|
||||
- 论坛话题使用 `--thread-id`(或使用 `:topic:` 目标)
|
||||
- 用于论坛话题的 `--thread-id`(或使用 `:topic:` 目标)
|
||||
|
||||
Telegram 发送还支持:
|
||||
|
||||
- `--buttons`,用于在 `channels.telegram.capabilities.inlineButtons` 允许时使用内联键盘
|
||||
- `--force-document`,将出站图片和 GIF 作为文档发送,而不是作为压缩照片或动画媒体上传
|
||||
- `--buttons`,用于内联键盘,前提是 `channels.telegram.capabilities.inlineButtons` 允许
|
||||
- `--force-document`,将出站图片和 GIF 作为文档发送,而不是压缩照片或动画媒体上传
|
||||
|
||||
动作门控:
|
||||
动作控制开关:
|
||||
|
||||
- `channels.telegram.actions.sendMessage=false` 会禁用出站 Telegram 消息,包括投票
|
||||
- `channels.telegram.actions.sendMessage=false` 会禁用 Telegram 出站消息,包括投票
|
||||
- `channels.telegram.actions.poll=false` 会禁用 Telegram 投票创建,同时保留常规发送功能
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Telegram 中的 exec 批准">
|
||||
Telegram 支持在批准者私信中进行 exec 批准,也可以选择在原始聊天或话题中发布批准提示。
|
||||
<Accordion title="Telegram 中的 Exec approvals">
|
||||
Telegram 支持在 approver 私信中进行 exec approvals,也可以选择在原始聊天或话题中发布批准提示。
|
||||
|
||||
配置路径:
|
||||
|
||||
- `channels.telegram.execApprovals.enabled`
|
||||
- `channels.telegram.execApprovals.approvers`(可选;在可能的情况下,会回退到从 `allowFrom` 和直接 `defaultTo` 推断出的数字所有者 ID)
|
||||
- `channels.telegram.execApprovals.approvers`(可选;在可能的情况下会回退到从 `allowFrom` 和直接 `defaultTo` 推断出的数字所有者 ID)
|
||||
- `channels.telegram.execApprovals.target`(`dm` | `channel` | `both`,默认:`dm`)
|
||||
- `agentFilter`、`sessionFilter`
|
||||
|
||||
批准者必须是数字 Telegram 用户 ID。当 `enabled` 未设置或为 `"auto"`,且至少能解析出一个批准者时,Telegram 会自动启用原生 exec 批准;这些批准者可以来自 `execApprovals.approvers`,也可以来自账号的数字所有者配置(`allowFrom` 和私信 `defaultTo`)。设置 `enabled: false` 可显式禁用 Telegram 作为原生批准客户端。否则,批准请求会回退到其他已配置的批准路径或 exec 批准回退策略。
|
||||
Approver 必须是数字 Telegram 用户 ID。当 `enabled` 未设置或为 `"auto"` 且至少能解析出一个 approver 时,Telegram 会自动启用原生 exec approvals;这些 approver 可以来自 `execApprovals.approvers`,也可以来自账户的数字所有者配置(`allowFrom` 和私信 `defaultTo`)。将 `enabled: false` 设置为显式禁用 Telegram 作为原生批准客户端。否则,批准请求会回退到其他已配置的批准路径或 exec approval 后备策略。
|
||||
|
||||
Telegram 还会渲染其他聊天渠道使用的共享批准按钮。原生 Telegram 适配器主要增加了批准者私信路由、渠道/话题扇出,以及投递前的输入提示。
|
||||
当这些按钮存在时,它们是主要的批准 UX;只有当工具结果表明
|
||||
聊天批准不可用,或者手动批准是唯一途径时,OpenClaw
|
||||
才应包含手动 `/approve` 命令。
|
||||
Telegram 还会渲染其他聊天渠道使用的共享批准按钮。原生 Telegram 适配器主要增加了 approver 私信路由、渠道/话题扇出,以及投递前的输入提示。
|
||||
当这些按钮存在时,它们就是主要的批准交互方式;OpenClaw
|
||||
仅应在工具结果表明聊天批准不可用或手动批准是唯一途径时,才包含手动 `/approve` 命令。
|
||||
|
||||
投递规则:
|
||||
|
||||
- `target: "dm"` 只会将批准提示发送到已解析的批准者私信
|
||||
- `target: "channel"` 会将提示发送回原始 Telegram 聊天/话题
|
||||
- `target: "both"` 会同时发送到批准者私信和原始聊天/话题
|
||||
- `target: "dm"` 仅向已解析的 approver 私信发送批准提示
|
||||
- `target: "channel"` 将提示发回原始 Telegram 聊天/话题
|
||||
- `target: "both"` 同时发送到 approver 私信和原始聊天/话题
|
||||
|
||||
只有已解析的批准者可以批准或拒绝。非批准者不能使用 `/approve`,也不能使用 Telegram 批准按钮。
|
||||
只有已解析的 approver 才能批准或拒绝。非 approver 不能使用 `/approve`,也不能使用 Telegram 批准按钮。
|
||||
|
||||
批准解析行为:
|
||||
|
||||
- 以 `plugin:` 为前缀的 ID 总是通过插件批准进行解析。
|
||||
- 带有 `plugin:` 前缀的 ID 总是通过插件批准解析。
|
||||
- 其他批准 ID 会先尝试 `exec.approval.resolve`。
|
||||
- 如果 Telegram 也被授权用于插件批准,并且 Gateway 网关返回
|
||||
exec 批准未知/已过期,Telegram 会再通过
|
||||
- 如果 Telegram 也被授权用于插件批准,并且 Gateway 网关表示
|
||||
exec approval 未知/已过期,Telegram 会通过
|
||||
`plugin.approval.resolve` 重试一次。
|
||||
- 真正的 exec 批准拒绝/错误不会静默回退到插件
|
||||
- 真正的 exec approval 拒绝/错误不会静默回退到插件
|
||||
批准解析。
|
||||
|
||||
渠道投递会在聊天中显示命令文本,因此仅应在受信任的群组/话题中启用 `channel` 或 `both`。当提示落在论坛话题中时,OpenClaw 会为批准提示和批准后的后续消息都保留该话题。exec 批准默认会在 30 分钟后过期。
|
||||
渠道投递会在聊天中显示命令文本,因此只有在受信任的群组/话题中才应启用 `channel` 或 `both`。当提示落在论坛话题中时,OpenClaw 会同时为批准提示和批准后的后续消息保留该话题。Exec approvals 默认会在 30 分钟后过期。
|
||||
|
||||
内联批准按钮还依赖 `channels.telegram.capabilities.inlineButtons` 允许目标范围(`dm`、`group` 或 `all`)。
|
||||
内联批准按钮还依赖于 `channels.telegram.capabilities.inlineButtons` 允许目标界面(`dm`、`group` 或 `all`)。
|
||||
|
||||
相关文档:[Exec 批准](/zh-CN/tools/exec-approvals)
|
||||
相关文档:[Exec approvals](/zh-CN/tools/exec-approvals)
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
## 错误回复控制
|
||||
|
||||
当智能体遇到投递或提供商错误时,Telegram 可以选择回复错误文本,或将其抑制。两个配置键控制此行为:
|
||||
当智能体遇到投递错误或提供商错误时,Telegram 可以回复错误文本,也可以抑制该回复。两个配置键控制此行为:
|
||||
|
||||
| Key | Values | Default | Description |
|
||||
| ----------------------------------- | ----------------- | ------- | ----------------------------------------------------------------------------------------------- |
|
||||
| `channels.telegram.errorPolicy` | `reply`, `silent` | `reply` | `reply` 会向聊天发送一条友好的错误消息。`silent` 会完全抑制错误回复。 |
|
||||
| `channels.telegram.errorCooldownMs` | number (ms) | `60000` | 同一聊天两次错误回复之间的最短时间。可防止在故障期间出现错误刷屏。 |
|
||||
| `channels.telegram.errorCooldownMs` | number (ms) | `60000` | 向同一聊天发送错误回复的最小时间间隔。可防止服务中断期间出现错误刷屏。 |
|
||||
|
||||
支持按账号、按群组和按话题覆盖(继承方式与其他 Telegram 配置键相同)。
|
||||
支持按账户、按群组和按话题覆盖(继承方式与其他 Telegram 配置键相同)。
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -880,7 +879,7 @@ openclaw message poll --channel telegram --target -1001234567890:topic:42 \
|
||||
errorCooldownMs: 120000,
|
||||
groups: {
|
||||
"-1001234567890": {
|
||||
errorPolicy: "silent", // 在该群组中抑制错误
|
||||
errorPolicy: "silent", // 在此群组中抑制错误
|
||||
},
|
||||
},
|
||||
},
|
||||
@ -891,40 +890,41 @@ openclaw message poll --channel telegram --target -1001234567890:topic:42 \
|
||||
## 故障排除
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="机器人不响应群组中未提及它的消息">
|
||||
<Accordion title="机器人不响应未提及的群组消息">
|
||||
|
||||
- 如果 `requireMention=false`,Telegram 隐私模式必须允许完整可见性。
|
||||
- 如果 `requireMention=false`,Telegram 隐私模式必须允许完全可见性。
|
||||
- BotFather:`/setprivacy` -> Disable
|
||||
- 然后将机器人从群组中移除并重新添加
|
||||
- 当配置预期接收未提及的群组消息时,`openclaw channels status` 会发出警告。
|
||||
- `openclaw channels status --probe` 可以检查显式数字群组 ID;无法对通配符 `"*"` 执行成员资格探测。
|
||||
- 然后将机器人从群组移除并重新添加
|
||||
- 当配置期望接收未提及的群组消息时,`openclaw channels status` 会给出警告。
|
||||
- `openclaw channels status --probe` 可以检查显式数字群组 ID;无法对通配符 `"*"` 进行成员资格探测。
|
||||
- 快速会话测试:`/activation always`。
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="机器人完全看不到群组消息">
|
||||
|
||||
- 当 `channels.telegram.groups` 存在时,必须列出该群组(或包含 `"*"`)
|
||||
- 验证机器人是否已加入该群组
|
||||
- 查看日志:`openclaw logs --follow` 以获取跳过原因
|
||||
- 当 `channels.telegram.groups` 存在时,群组必须已列出(或包含 `"*"`)
|
||||
- 验证机器人是否在群组中
|
||||
- 查看日志:使用 `openclaw logs --follow` 检查跳过原因
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="命令只能部分工作或完全无效">
|
||||
<Accordion title="命令部分生效或完全无效">
|
||||
|
||||
- 授权你的发送者身份(配对和/或数字 `allowFrom`)
|
||||
- 即使群组策略是 `open`,命令授权仍然适用
|
||||
- `setMyCommands failed` 且出现 `BOT_COMMANDS_TOO_MUCH` 表示原生命令菜单项过多;请减少插件/Skills/自定义命令,或禁用原生菜单
|
||||
- `setMyCommands failed` 且出现网络/fetch 错误,通常表示到 `api.telegram.org` 的 DNS/HTTPS 连通性有问题
|
||||
- 即使群组策略为 `open`,命令授权仍然适用
|
||||
- 带有 `BOT_COMMANDS_TOO_MUCH` 的 `setMyCommands failed` 表示原生命令菜单条目过多;请减少插件/Skills/自定义命令,或禁用原生菜单
|
||||
- 带有网络/fetch 错误的 `setMyCommands failed` 通常表示到 `api.telegram.org` 的 DNS/HTTPS 可达性存在问题
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="轮询或网络不稳定">
|
||||
|
||||
- Node 22+ + 自定义 fetch/proxy 在 AbortSignal 类型不匹配时可能触发立即中止行为。
|
||||
- 某些主机会优先将 `api.telegram.org` 解析为 IPv6;损坏的 IPv6 出站连接可能导致 Telegram API 间歇性失败。
|
||||
- 如果日志包含 `TypeError: fetch failed` 或 `Network request for 'getUpdates' failed!`,OpenClaw 现在会将这些作为可恢复网络错误进行重试。
|
||||
- 在出站连接/TLS 不稳定的 VPS 主机上,请通过 `channels.telegram.proxy` 转发 Telegram API 调用:
|
||||
- Node 22+ + 自定义 fetch/proxy 可能会在 AbortSignal 类型不匹配时触发立即中止行为。
|
||||
- 某些主机会优先将 `api.telegram.org` 解析为 IPv6;损坏的 IPv6 出站连接会导致 Telegram API 间歇性失败。
|
||||
- 如果日志中包含 `TypeError: fetch failed` 或 `Network request for 'getUpdates' failed!`,OpenClaw 现在会将其作为可恢复网络错误进行重试。
|
||||
- 如果日志中包含 `Polling stall detected`,OpenClaw 会重启轮询并重建 Telegram 传输。持续性卡顿通常指向主机与 `api.telegram.org` 之间的代理、DNS、IPv6 或 TLS 出站问题。
|
||||
- 在出站直连/TLS 不稳定的 VPS 主机上,请通过 `channels.telegram.proxy` 路由 Telegram API 调用:
|
||||
|
||||
```yaml
|
||||
channels:
|
||||
@ -933,7 +933,7 @@ channels:
|
||||
```
|
||||
|
||||
- Node 22+ 默认使用 `autoSelectFamily=true`(WSL2 除外)和 `dnsResultOrder=ipv4first`。
|
||||
- 如果你的主机是 WSL2,或者明确在仅 IPv4 行为下运行更好,请强制设置地址族选择:
|
||||
- 如果你的主机是 WSL2,或者明确在仅 IPv4 行为下效果更好,请强制设置地址族选择:
|
||||
|
||||
```yaml
|
||||
channels:
|
||||
@ -946,7 +946,7 @@ channels:
|
||||
用于 Telegram 媒体下载。如果受信任的 fake-IP 或
|
||||
透明代理在媒体下载期间将 `api.telegram.org` 重写为其他
|
||||
私有/内部/特殊用途地址,你可以选择启用
|
||||
Telegram 专用绕过:
|
||||
仅适用于 Telegram 的绕过选项:
|
||||
|
||||
```yaml
|
||||
channels:
|
||||
@ -955,18 +955,18 @@ channels:
|
||||
dangerouslyAllowPrivateNetwork: true
|
||||
```
|
||||
|
||||
- 同样的可选启用项也可按账号设置在
|
||||
- 相同的选择启用项也可按账户设置:
|
||||
`channels.telegram.accounts.<accountId>.network.dangerouslyAllowPrivateNetwork`。
|
||||
- 如果你的代理将 Telegram 媒体主机解析到 `198.18.x.x`,请先保持
|
||||
该危险标志关闭。Telegram 媒体默认已经允许 RFC 2544
|
||||
dangerous 标志关闭。Telegram 媒体默认已经允许 RFC 2544
|
||||
基准测试地址范围。
|
||||
|
||||
<Warning>
|
||||
`channels.telegram.network.dangerouslyAllowPrivateNetwork` 会削弱 Telegram
|
||||
媒体 SSRF 防护。仅应在受信任的、由操作员控制的代理
|
||||
媒体 SSRF 防护。仅应在受信任、由操作方控制的代理
|
||||
环境中使用,例如 Clash、Mihomo 或 Surge 的 fake-IP 路由,
|
||||
且它们会在 RFC 2544 基准测试地址范围之外合成私有或特殊用途地址时。
|
||||
对于正常的公共互联网 Telegram 访问,请保持关闭。
|
||||
且这些环境会在 RFC 2544 基准测试范围之外生成私有或特殊用途地址响应。
|
||||
对于普通公共互联网下的 Telegram 访问,请保持其关闭。
|
||||
</Warning>
|
||||
|
||||
- 环境变量覆盖(临时):
|
||||
@ -991,73 +991,73 @@ dig +short api.telegram.org AAAA
|
||||
|
||||
- `channels.telegram.enabled`:启用/禁用渠道启动。
|
||||
- `channels.telegram.botToken`:机器人令牌(BotFather)。
|
||||
- `channels.telegram.tokenFile`:从常规文件路径读取令牌。不接受符号链接。
|
||||
- `channels.telegram.tokenFile`:从常规文件路径读取令牌。符号链接会被拒绝。
|
||||
- `channels.telegram.dmPolicy`:`pairing | allowlist | open | disabled`(默认:pairing)。
|
||||
- `channels.telegram.allowFrom`:私信 allowlist(Telegram 数字用户 ID)。`allowlist` 需要至少一个发送者 ID。`open` 需要 `"*"`。`openclaw doctor --fix` 可以将旧版 `@username` 条目解析为 ID,也可以在 allowlist 迁移流程中从配对存储文件恢复 allowlist 条目。
|
||||
- `channels.telegram.actions.poll`:启用或禁用 Telegram 投票创建(默认:启用;仍然需要 `sendMessage`)。
|
||||
- `channels.telegram.allowFrom`:私信 allowlist(数字 Telegram 用户 ID)。`allowlist` 要求至少有一个发送者 ID。`open` 要求 `"*"`。`openclaw doctor --fix` 可以将旧版 `@username` 条目解析为 ID,并可在 allowlist 迁移流程中从 pairing-store 文件恢复 allowlist 条目。
|
||||
- `channels.telegram.actions.poll`:启用或禁用 Telegram 投票创建(默认:启用;仍要求 `sendMessage`)。
|
||||
- `channels.telegram.defaultTo`:当未提供显式 `--reply-to` 时,CLI `--deliver` 使用的默认 Telegram 目标。
|
||||
- `channels.telegram.groupPolicy`:`open | allowlist | disabled`(默认:allowlist)。
|
||||
- `channels.telegram.groupAllowFrom`:群组发送者 allowlist(Telegram 数字用户 ID)。`openclaw doctor --fix` 可以将旧版 `@username` 条目解析为 ID。非数字条目在认证时会被忽略。群组认证不会使用私信配对存储回退(`2026.2.25+`)。
|
||||
- 多账号优先级:
|
||||
- 当配置了两个或更多账号 ID 时,设置 `channels.telegram.defaultAccount`(或包含 `channels.telegram.accounts.default`)以显式指定默认路由。
|
||||
- 如果两者都未设置,OpenClaw 会回退到第一个规范化账号 ID,并由 `openclaw doctor` 发出警告。
|
||||
- `channels.telegram.accounts.default.allowFrom` 和 `channels.telegram.accounts.default.groupAllowFrom` 仅适用于 `default` 账号。
|
||||
- 当账号级值未设置时,命名账号会继承 `channels.telegram.allowFrom` 和 `channels.telegram.groupAllowFrom`。
|
||||
- 命名账号不会继承 `channels.telegram.accounts.default.allowFrom` / `groupAllowFrom`。
|
||||
- `channels.telegram.groups`:每群组默认值 + allowlist(使用 `"*"` 作为全局默认值)。
|
||||
- `channels.telegram.groups.<id>.groupPolicy`:`groupPolicy` 的每群组覆盖(`open | allowlist | disabled`)。
|
||||
- `channels.telegram.groups.<id>.requireMention`:提及门控默认值。
|
||||
- `channels.telegram.groupAllowFrom`:群组发送者 allowlist(数字 Telegram 用户 ID)。`openclaw doctor --fix` 可以将旧版 `@username` 条目解析为 ID。非数字条目在授权时会被忽略。群组授权不会使用私信 pairing-store 后备(`2026.2.25+`)。
|
||||
- 多账户优先级:
|
||||
- 当配置了两个或更多账户 ID 时,设置 `channels.telegram.defaultAccount`(或包含 `channels.telegram.accounts.default`)以显式指定默认路由。
|
||||
- 如果两者都未设置,OpenClaw 会回退到第一个标准化账户 ID,并且 `openclaw doctor` 会发出警告。
|
||||
- `channels.telegram.accounts.default.allowFrom` 和 `channels.telegram.accounts.default.groupAllowFrom` 仅适用于 `default` 账户。
|
||||
- 当账户级值未设置时,命名账户会继承 `channels.telegram.allowFrom` 和 `channels.telegram.groupAllowFrom`。
|
||||
- 命名账户不会继承 `channels.telegram.accounts.default.allowFrom` / `groupAllowFrom`。
|
||||
- `channels.telegram.groups`:每个群组的默认值 + allowlist(使用 `"*"` 作为全局默认值)。
|
||||
- `channels.telegram.groups.<id>.groupPolicy`:按群组覆盖 `groupPolicy`(`open | allowlist | disabled`)。
|
||||
- `channels.telegram.groups.<id>.requireMention`:提及限制默认值。
|
||||
- `channels.telegram.groups.<id>.skills`:Skills 过滤器(省略 = 所有 Skills,空值 = 无)。
|
||||
- `channels.telegram.groups.<id>.allowFrom`:每群组发送者 allowlist 覆盖。
|
||||
- `channels.telegram.groups.<id>.systemPrompt`:群组的额外系统提示词。
|
||||
- `channels.telegram.groups.<id>.enabled`:为 `false` 时禁用该群组。
|
||||
- `channels.telegram.groups.<id>.topics.<threadId>.*`:每话题覆盖(群组字段 + 仅话题字段 `agentId`)。
|
||||
- `channels.telegram.groups.<id>.topics.<threadId>.agentId`:将该话题路由到特定智能体(覆盖群组级和绑定路由)。
|
||||
- `channels.telegram.groups.<id>.topics.<threadId>.groupPolicy`:`groupPolicy` 的每话题覆盖(`open | allowlist | disabled`)。
|
||||
- `channels.telegram.groups.<id>.topics.<threadId>.requireMention`:每话题提及门控覆盖。
|
||||
- 顶层 `bindings[]` 中 `type: "acp"` 且在 `match.peer.id` 中使用规范话题 ID `chatId:topic:topicId`:持久化 ACP 话题绑定字段(见 [ACP Agents](/zh-CN/tools/acp-agents#channel-specific-settings))。
|
||||
- `channels.telegram.groups.<id>.allowFrom`:按群组覆盖发送者 allowlist。
|
||||
- `channels.telegram.groups.<id>.systemPrompt`:该群组的附加系统提示词。
|
||||
- `channels.telegram.groups.<id>.enabled`:当为 `false` 时禁用该群组。
|
||||
- `channels.telegram.groups.<id>.topics.<threadId>.*`:按话题覆盖(群组字段 + 仅话题字段 `agentId`)。
|
||||
- `channels.telegram.groups.<id>.topics.<threadId>.agentId`:将此话题路由到特定智能体(覆盖群组级和绑定路由)。
|
||||
- `channels.telegram.groups.<id>.topics.<threadId>.groupPolicy`:按话题覆盖 `groupPolicy`(`open | allowlist | disabled`)。
|
||||
- `channels.telegram.groups.<id>.topics.<threadId>.requireMention`:按话题覆盖提及限制。
|
||||
- 顶层 `bindings[]` 中带有 `type: "acp"` 且 `match.peer.id` 使用规范话题 ID `chatId:topic:topicId`:持久化 ACP 话题绑定字段(参见 [ACP Agents](/zh-CN/tools/acp-agents#channel-specific-settings))。
|
||||
- `channels.telegram.direct.<id>.topics.<threadId>.agentId`:将私信话题路由到特定智能体(行为与论坛话题相同)。
|
||||
- `channels.telegram.execApprovals.enabled`:为此账号启用 Telegram 作为基于聊天的 exec 批准客户端。
|
||||
- `channels.telegram.execApprovals.approvers`:允许批准或拒绝 exec 请求的 Telegram 用户 ID。当 `channels.telegram.allowFrom` 或直接的 `channels.telegram.defaultTo` 已经标识出所有者时,此项可选。
|
||||
- `channels.telegram.execApprovals.target`:`dm | channel | both`(默认:`dm`)。`channel` 和 `both` 在存在时会保留原始 Telegram 话题。
|
||||
- `channels.telegram.execApprovals.agentFilter`:转发批准提示的可选智能体 ID 过滤器。
|
||||
- `channels.telegram.execApprovals.sessionFilter`:转发批准提示的可选会话键过滤器(子串或正则)。
|
||||
- `channels.telegram.accounts.<account>.execApprovals`:Telegram exec 批准路由和批准者授权的每账号覆盖。
|
||||
- `channels.telegram.execApprovals.enabled`:为此账户启用 Telegram 作为基于聊天的 exec approval 客户端。
|
||||
- `channels.telegram.execApprovals.approvers`:允许批准或拒绝 exec 请求的 Telegram 用户 ID。当 `channels.telegram.allowFrom` 或直接的 `channels.telegram.defaultTo` 已能标识所有者时,此项为可选。
|
||||
- `channels.telegram.execApprovals.target`:`dm | channel | both`(默认:`dm`)。当存在原始 Telegram 话题时,`channel` 和 `both` 会保留该话题。
|
||||
- `channels.telegram.execApprovals.agentFilter`:用于转发批准提示的可选智能体 ID 过滤器。
|
||||
- `channels.telegram.execApprovals.sessionFilter`:用于转发批准提示的可选会话键过滤器(子串或正则表达式)。
|
||||
- `channels.telegram.accounts.<account>.execApprovals`:按账户覆盖 Telegram exec approval 路由和 approver 授权。
|
||||
- `channels.telegram.capabilities.inlineButtons`:`off | dm | group | all | allowlist`(默认:allowlist)。
|
||||
- `channels.telegram.accounts.<account>.capabilities.inlineButtons`:每账号覆盖。
|
||||
- `channels.telegram.accounts.<account>.capabilities.inlineButtons`:按账户覆盖。
|
||||
- `channels.telegram.commands.nativeSkills`:启用/禁用 Telegram 原生 Skills 命令。
|
||||
- `channels.telegram.replyToMode`:`off | first | all`(默认:`off`)。
|
||||
- `channels.telegram.textChunkLimit`:出站分块大小(字符)。
|
||||
- `channels.telegram.chunkMode`:`length`(默认)或 `newline`,表示在按长度分块前先按空行(段落边界)切分。
|
||||
- `channels.telegram.textChunkLimit`:出站分块大小(字符数)。
|
||||
- `channels.telegram.chunkMode`:`length`(默认)或 `newline`,会在按长度分块前先按空行(段落边界)拆分。
|
||||
- `channels.telegram.linkPreview`:切换出站消息的链接预览(默认:true)。
|
||||
- `channels.telegram.streaming`:`off | partial | block | progress`(实时流式预览;默认:`partial`;`progress` 映射为 `partial`;`block` 是旧版预览模式兼容值)。Telegram 预览流式传输使用一条会原地编辑的预览消息。
|
||||
- `channels.telegram.mediaMaxMb`:Telegram 入站/出站媒体上限(MB,默认:100)。
|
||||
- `channels.telegram.retry`:Telegram 发送辅助功能(CLI/工具/动作)在可恢复的出站 API 错误时的重试策略(attempts、minDelayMs、maxDelayMs、jitter)。
|
||||
- `channels.telegram.network.autoSelectFamily`:覆盖 Node 的 autoSelectFamily(true = 启用,false = 禁用)。在 Node 22+ 上默认启用,WSL2 默认禁用。
|
||||
- `channels.telegram.network.dnsResultOrder`:覆盖 DNS 结果顺序(`ipv4first` 或 `verbatim`)。在 Node 22+ 上默认是 `ipv4first`。
|
||||
- `channels.telegram.network.dangerouslyAllowPrivateNetwork`:用于受信任 fake-IP 或透明代理环境的危险可选启用项;在这些环境中,Telegram 媒体下载会将 `api.telegram.org` 解析到默认 RFC 2544 基准范围允许之外的私有/内部/特殊用途地址。
|
||||
- `channels.telegram.streaming`:`off | partial | block | progress`(实时流式预览;默认:`partial`;`progress` 映射为 `partial`;`block` 用于兼容旧版预览模式)。Telegram 预览流式传输使用一条会原位编辑的预览消息。
|
||||
- `channels.telegram.mediaMaxMb`:Telegram 入站/出站媒体大小上限(MB,默认:100)。
|
||||
- `channels.telegram.retry`:Telegram 发送辅助功能(CLI/工具/动作)在可恢复的出站 API 错误上的重试策略(attempts、minDelayMs、maxDelayMs、jitter)。
|
||||
- `channels.telegram.network.autoSelectFamily`:覆盖 Node `autoSelectFamily`(true=启用,false=禁用)。在 Node 22+ 上默认启用,WSL2 默认禁用。
|
||||
- `channels.telegram.network.dnsResultOrder`:覆盖 DNS 结果顺序(`ipv4first` 或 `verbatim`)。在 Node 22+ 上默认使用 `ipv4first`。
|
||||
- `channels.telegram.network.dangerouslyAllowPrivateNetwork`:危险的选择启用项,适用于受信任的 fake-IP 或透明代理环境;在这些环境中,Telegram 媒体下载会将 `api.telegram.org` 解析为默认 RFC 2544 基准测试范围允许之外的私有/内部/特殊用途地址。
|
||||
- `channels.telegram.proxy`:Bot API 调用的代理 URL(SOCKS/HTTP)。
|
||||
- `channels.telegram.webhookUrl`:启用 Webhook 模式(需要 `channels.telegram.webhookSecret`)。
|
||||
- `channels.telegram.webhookSecret`:Webhook 密钥(设置了 webhookUrl 时必填)。
|
||||
- `channels.telegram.webhookUrl`:启用 Webhook 模式(要求 `channels.telegram.webhookSecret`)。
|
||||
- `channels.telegram.webhookSecret`:Webhook 密钥(设置了 webhookUrl 时必需)。
|
||||
- `channels.telegram.webhookPath`:本地 Webhook 路径(默认 `/telegram-webhook`)。
|
||||
- `channels.telegram.webhookHost`:本地 Webhook 绑定主机(默认 `127.0.0.1`)。
|
||||
- `channels.telegram.webhookPort`:本地 Webhook 绑定端口(默认 `8787`)。
|
||||
- `channels.telegram.actions.reactions`:控制 Telegram 工具反应。
|
||||
- `channels.telegram.actions.reactions`:控制 Telegram 工具反应功能。
|
||||
- `channels.telegram.actions.sendMessage`:控制 Telegram 工具消息发送。
|
||||
- `channels.telegram.actions.deleteMessage`:控制 Telegram 工具消息删除。
|
||||
- `channels.telegram.actions.sticker`:控制 Telegram 贴纸动作——发送和搜索(默认:false)。
|
||||
- `channels.telegram.reactionNotifications`:`off | own | all` —— 控制哪些反应会触发系统事件(未设置时默认:`own`)。
|
||||
- `channels.telegram.reactionLevel`:`off | ack | minimal | extensive` —— 控制智能体的反应能力(未设置时默认:`minimal`)。
|
||||
- `channels.telegram.errorPolicy`:`reply | silent` —— 控制错误回复行为(默认:`reply`)。支持按账号/群组/话题覆盖。
|
||||
- `channels.telegram.errorCooldownMs`:对同一聊天发送错误回复的最小间隔毫秒数(默认:`60000`)。可防止在故障期间出现错误刷屏。
|
||||
- `channels.telegram.errorPolicy`:`reply | silent` —— 控制错误回复行为(默认:`reply`)。支持按账户/群组/话题覆盖。
|
||||
- `channels.telegram.errorCooldownMs`:向同一聊天发送错误回复的最小毫秒间隔(默认:`60000`)。可防止服务中断期间出现错误刷屏。
|
||||
|
||||
- [配置参考 - Telegram](/zh-CN/gateway/configuration-reference#telegram)
|
||||
|
||||
Telegram 特有的高信号字段:
|
||||
|
||||
- 启动/认证:`enabled`、`botToken`、`tokenFile`、`accounts.*`(`tokenFile` 必须指向常规文件;不接受符号链接)
|
||||
- 启动/认证:`enabled`、`botToken`、`tokenFile`、`accounts.*`(`tokenFile` 必须指向常规文件;符号链接会被拒绝)
|
||||
- 访问控制:`dmPolicy`、`allowFrom`、`groupPolicy`、`groupAllowFrom`、`groups`、`groups.*.topics.*`、顶层 `bindings[]`(`type: "acp"`)
|
||||
- exec 批准:`execApprovals`、`accounts.*.execApprovals`
|
||||
- exec approvals:`execApprovals`、`accounts.*.execApprovals`
|
||||
- 命令/菜单:`commands.native`、`commands.nativeSkills`、`customCommands`
|
||||
- 线程/回复:`replyToMode`
|
||||
- 流式传输:`streaming`(预览)、`blockStreaming`
|
||||
|
||||
@ -1,25 +1,25 @@
|
||||
---
|
||||
read_when:
|
||||
- 渠道传输显示已连接,但回复失败
|
||||
- 在深入查看提供商文档之前,你需要先进行渠道专项检查
|
||||
summary: 按渠道划分的快速故障排除,包含各渠道的失败特征和修复方法
|
||||
- 在深入查看提供商文档之前,你需要先做渠道专属检查
|
||||
summary: 按渠道划分的快速故障排除,包含每个渠道的失败特征和修复方法
|
||||
title: 渠道故障排除
|
||||
x-i18n:
|
||||
generated_at: "2026-04-20T06:31:00Z"
|
||||
generated_at: "2026-04-20T22:05:32Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: 0aef31742cd5cc4af3fa3d3ea1acba51875ad4a1423c0e8c87372c3df31b0528
|
||||
source_hash: 9dd6a0a863b97c984d44d7fd75b3b3cb3b9c4290e2da26e5677e8c4f9700a73c
|
||||
source_path: channels/troubleshooting.md
|
||||
workflow: 15
|
||||
---
|
||||
|
||||
# 渠道故障排除
|
||||
|
||||
当渠道已连接但行为异常时,请使用本页。
|
||||
当渠道已连接但行为异常时,请使用此页面。
|
||||
|
||||
## 命令检查阶梯
|
||||
## 命令阶梯
|
||||
|
||||
请先按顺序运行以下命令:
|
||||
请先按顺序运行这些命令:
|
||||
|
||||
```bash
|
||||
openclaw status
|
||||
@ -34,7 +34,7 @@ openclaw channels status --probe
|
||||
- `Runtime: running`
|
||||
- `Connectivity probe: ok`
|
||||
- `Capability: read-only`、`write-capable` 或 `admin-capable`
|
||||
- 渠道探测显示传输已连接,并且在支持的情况下显示 `works` 或 `audit ok`
|
||||
- 渠道探测会显示传输已连接,并且在支持的情况下显示 `works` 或 `audit ok`
|
||||
|
||||
## WhatsApp
|
||||
|
||||
@ -42,9 +42,9 @@ openclaw channels status --probe
|
||||
|
||||
| 症状 | 最快检查 | 修复方法 |
|
||||
| ------------------------------- | --------------------------------------------------- | ------------------------------------------------------- |
|
||||
| 已连接但没有 私信 回复 | `openclaw pairing list whatsapp` | 批准发送者,或切换 私信 策略 / 允许列表。 |
|
||||
| 已连接但没有私信回复 | `openclaw pairing list whatsapp` | 批准发送者,或切换私信策略 / 允许列表。 |
|
||||
| 群组消息被忽略 | 检查配置中的 `requireMention` 和提及模式 | 提及机器人,或放宽该群组的提及策略。 |
|
||||
| 随机断开 / 反复重新登录 | `openclaw channels status --probe` + 日志 | 重新登录,并确认凭证目录状态正常。 |
|
||||
| 随机断连 / 重新登录循环 | `openclaw channels status --probe` + 日志 | 重新登录,并确认凭证目录状态正常。 |
|
||||
|
||||
完整故障排除:[/channels/whatsapp#troubleshooting](/zh-CN/channels/whatsapp#troubleshooting)
|
||||
|
||||
@ -53,12 +53,13 @@ openclaw channels status --probe
|
||||
### Telegram 失败特征
|
||||
|
||||
| 症状 | 最快检查 | 修复方法 |
|
||||
| ----------------------------------- | ----------------------------------------------- | --------------------------------------------------------------------------- |
|
||||
| `/start` 之后没有可用的回复流程 | `openclaw pairing list telegram` | 批准配对,或更改 私信 策略。 |
|
||||
| 机器人在线,但群组始终无响应 | 验证提及要求和机器人的隐私模式 | 为群组可见性禁用隐私模式,或提及机器人。 |
|
||||
| ----------------------------------- | ------------------------------------------------ | --------------------------------------------------------------------------- |
|
||||
| `/start` 后没有可用的回复流程 | `openclaw pairing list telegram` | 批准配对,或更改私信策略。 |
|
||||
| 机器人在线,但群组始终无响应 | 验证提及要求和机器人的隐私模式 | 关闭隐私模式以获得群组可见性,或提及机器人。 |
|
||||
| 发送失败并出现网络错误 | 检查日志中的 Telegram API 调用失败 | 修复到 `api.telegram.org` 的 DNS / IPv6 / 代理路由。 |
|
||||
| 轮询卡住或重连很慢 | 使用 `openclaw logs --follow` 查看轮询诊断信息 | 先升级,然后如果 `getUpdates` 仍持续超时,再检查代理 / DNS / IPv6。 |
|
||||
| 启动时 `setMyCommands` 被拒绝 | 检查日志中的 `BOT_COMMANDS_TOO_MUCH` | 减少插件 / Skills / 自定义 Telegram 命令,或禁用原生菜单。 |
|
||||
| 升级后允许列表把你拦住了 | `openclaw security audit` 和配置允许列表 | 运行 `openclaw doctor --fix`,或将 `@username` 替换为数字发送者 ID。 |
|
||||
| 升级后允许列表把你拦住了 | `openclaw security audit` 和配置中的允许列表 | 运行 `openclaw doctor --fix`,或将 `@username` 替换为数字发送者 ID。 |
|
||||
|
||||
完整故障排除:[/channels/telegram#troubleshooting](/zh-CN/channels/telegram#troubleshooting)
|
||||
|
||||
@ -68,9 +69,9 @@ openclaw channels status --probe
|
||||
|
||||
| 症状 | 最快检查 | 修复方法 |
|
||||
| ------------------------------- | ----------------------------------- | --------------------------------------------------------- |
|
||||
| 机器人在线,但没有服务器回复 | `openclaw channels status --probe` | 允许对应服务器 / 渠道,并验证消息内容 intent。 |
|
||||
| 群组消息被忽略 | 检查日志中因提及门控而丢弃的记录 | 提及机器人,或将服务器 / 渠道的 `requireMention: false`。 |
|
||||
| 私信 回复缺失 | `openclaw pairing list discord` | 批准 私信 配对,或调整 私信 策略。 |
|
||||
| 机器人在线,但没有服务器回复 | `openclaw channels status --probe` | 允许该服务器 / 频道,并验证消息内容 intent。 |
|
||||
| 群组消息被忽略 | 检查日志中是否有提及门控丢弃 | 提及机器人,或将服务器 / 频道的 `requireMention: false`。 |
|
||||
| 私信回复缺失 | `openclaw pairing list discord` | 批准私信配对,或调整私信策略。 |
|
||||
|
||||
完整故障排除:[/channels/discord#troubleshooting](/zh-CN/channels/discord#troubleshooting)
|
||||
|
||||
@ -80,9 +81,9 @@ openclaw channels status --probe
|
||||
|
||||
| 症状 | 最快检查 | 修复方法 |
|
||||
| -------------------------------------- | ----------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| Socket 模式已连接但没有响应 | `openclaw channels status --probe` | 验证 app token + bot token 以及所需作用域;在使用 SecretRef 的配置中,注意查看 `botTokenStatus` / `appTokenStatus = configured_unavailable`。 |
|
||||
| 私信 被拦截 | `openclaw pairing list slack` | 批准配对,或放宽 私信 策略。 |
|
||||
| 渠道消息被忽略 | 检查 `groupPolicy` 和渠道允许列表 | 允许该渠道,或将策略切换为 `open`。 |
|
||||
| Socket mode 已连接但没有响应 | `openclaw channels status --probe` | 验证 app token、bot token 和所需作用域;在基于 SecretRef 的设置中注意 `botTokenStatus` / `appTokenStatus = configured_unavailable`。 |
|
||||
| 私信被拦截 | `openclaw pairing list slack` | 批准配对,或放宽私信策略。 |
|
||||
| 频道消息被忽略 | 检查 `groupPolicy` 和频道允许列表 | 允许该频道,或将策略切换为 `open`。 |
|
||||
|
||||
完整故障排除:[/channels/slack#troubleshooting](/zh-CN/channels/slack#troubleshooting)
|
||||
|
||||
@ -93,8 +94,8 @@ openclaw channels status --probe
|
||||
| 症状 | 最快检查 | 修复方法 |
|
||||
| -------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------- |
|
||||
| 没有入站事件 | 验证 webhook / 服务器可达性和应用权限 | 修复 webhook URL 或 BlueBubbles 服务器状态。 |
|
||||
| 在 macOS 上能发送但不能接收 | 检查 macOS 中 Messages 自动化的隐私权限 | 重新授予 TCC 权限并重启渠道进程。 |
|
||||
| 私信 发送者被拦截 | `openclaw pairing list imessage` 或 `openclaw pairing list bluebubbles` | 批准配对,或更新允许列表。 |
|
||||
| 能发送但在 macOS 上无法接收 | 检查 macOS 对“信息”自动化的隐私权限 | 重新授予 TCC 权限并重启渠道进程。 |
|
||||
| 私信发送者被拦截 | `openclaw pairing list imessage` 或 `openclaw pairing list bluebubbles` | 批准配对,或更新允许列表。 |
|
||||
|
||||
完整故障排除:
|
||||
|
||||
@ -107,9 +108,9 @@ openclaw channels status --probe
|
||||
|
||||
| 症状 | 最快检查 | 修复方法 |
|
||||
| ------------------------------- | ------------------------------------------ | -------------------------------------------------------- |
|
||||
| 守护进程可达,但机器人无响应 | `openclaw channels status --probe` | 验证 `signal-cli` 守护进程 URL / 账户以及接收模式。 |
|
||||
| 私信 被拦截 | `openclaw pairing list signal` | 批准发送者,或调整 私信 策略。 |
|
||||
| 群组回复未触发 | 检查群组允许列表和提及模式 | 添加发送者 / 群组,或放宽门控条件。 |
|
||||
| 守护进程可达,但机器人无响应 | `openclaw channels status --probe` | 验证 `signal-cli` 守护进程 URL / 账户和接收模式。 |
|
||||
| 私信被拦截 | `openclaw pairing list signal` | 批准发送者,或调整私信策略。 |
|
||||
| 群组回复未触发 | 检查群组允许列表和提及模式 | 添加发送者 / 群组,或放宽门控。 |
|
||||
|
||||
完整故障排除:[/channels/signal#troubleshooting](/zh-CN/channels/signal#troubleshooting)
|
||||
|
||||
@ -119,10 +120,10 @@ openclaw channels status --probe
|
||||
|
||||
| 症状 | 最快检查 | 修复方法 |
|
||||
| ------------------------------- | ------------------------------------------- | --------------------------------------------------------------- |
|
||||
| 机器人回复“去了火星” | 验证配置中的 `appId` 和 `clientSecret` | 设置凭证,或重启 Gateway 网关。 |
|
||||
| 机器人回复“gone to Mars” | 验证配置中的 `appId` 和 `clientSecret` | 设置凭证,或重启 Gateway 网关。 |
|
||||
| 没有入站消息 | `openclaw channels status --probe` | 在 QQ 开放平台上验证凭证。 |
|
||||
| 语音未转写 | 检查 STT 提供商配置 | 配置 `channels.qqbot.stt` 或 `tools.media.audio`。 |
|
||||
| 主动消息未送达 | 检查 QQ 平台的交互要求 | 如果近期没有交互,QQ 可能会阻止机器人主动发消息。 |
|
||||
| 主动消息未送达 | 检查 QQ 平台的交互要求 | QQ 可能会阻止机器人在近期无交互时主动发送消息。 |
|
||||
|
||||
完整故障排除:[/channels/qqbot#troubleshooting](/zh-CN/channels/qqbot#troubleshooting)
|
||||
|
||||
@ -133,9 +134,9 @@ openclaw channels status --probe
|
||||
| 症状 | 最快检查 | 修复方法 |
|
||||
| ----------------------------------- | -------------------------------------- | ------------------------------------------------------------------------- |
|
||||
| 已登录但忽略房间消息 | `openclaw channels status --probe` | 检查 `groupPolicy`、房间允许列表和提及门控。 |
|
||||
| 私信 不处理 | `openclaw pairing list matrix` | 批准发送者,或调整 私信 策略。 |
|
||||
| 私信未处理 | `openclaw pairing list matrix` | 批准发送者,或调整私信策略。 |
|
||||
| 加密房间失败 | `openclaw matrix verify status` | 重新验证设备,然后检查 `openclaw matrix verify backup status`。 |
|
||||
| 备份恢复处于待处理 / 已损坏 | `openclaw matrix verify backup status` | 运行 `openclaw matrix verify backup restore`,或使用恢复密钥重新运行。 |
|
||||
| 交叉签名 / 引导看起来异常 | `openclaw matrix verify bootstrap` | 一次性修复密钥存储、交叉签名和备份状态。 |
|
||||
| 备份恢复处于待处理 / 已损坏状态 | `openclaw matrix verify backup status` | 运行 `openclaw matrix verify backup restore`,或使用恢复密钥重新运行。 |
|
||||
| 交叉签名 / 引导看起来异常 | `openclaw matrix verify bootstrap` | 一次性修复秘密存储、交叉签名和备份状态。 |
|
||||
|
||||
完整设置和配置:[Matrix](/zh-CN/channels/matrix)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user