chore(i18n): refresh zh-CN translations

This commit is contained in:
openclaw-docs-i18n[bot] 2026-04-20 22:07:46 +00:00
parent 651a02cecc
commit 5f72de4d59
2 changed files with 252 additions and 251 deletions

View File

@ -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
---
# TelegramBot 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 拒绝解析后的 HTMLOpenClaw 会以纯文本重试
- 如果 Telegram 拒绝已解析的 HTMLOpenClaw 会重试为纯文本
链接预览默认启用,可通过 `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`:私信 allowlistTelegram 数字用户 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`:群组发送者 allowlistTelegram 数字用户 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 的 autoSelectFamilytrue = 启用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 调用的代理 URLSOCKS/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`

View File

@ -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)