富文本消息和审批
丰富的 Telegram 界面:格式化消息、内联键盘、代理消息操作和审批提示。
富文本消息与审批¶
富文本消息格式
出站文本默认使用标准 Telegram HTML 消息,可在当前客户端中正常阅读:粗体、斜体、链接、代码、剧透、引用——而不是 Bot API 10.3 专属的富文本块(原生表格、details、富媒体、公式)。
围栏代码保留其字面内容和间距,包括块内的围栏示例。
选择启用 Bot API 10.3 富文本消息:
启用后:每个通过此机器人/账户送达的 OpenClaw 代理回合(回复、心跳、cron 公告和子代理公告)都会被告知富文本消息可用,并附带受支持的 Markdown + HTML-island 编写约定;Markdown 文本通过 OpenClaw 的 Markdown IR 渲染为类型化的 Bot API 10.3 富文本块(标题、表格、details、检查清单、富媒体、公式、地图、拼贴);媒体说明仍使用 Telegram HTML 说明(富文本消息不会替换说明,且说明上限为 1024 个字符)。
普通富文本正文,包括列表项、引用和 details 正文,会保留解析后的 Markdown 空格和换行。实体仅解码一次:`&` 显示为 `&`,而 `\&` 和 `&amp;` 显示为字面 `&`。转义标签(如 `<b>`)保持为可见文本,图片替代文本保持为纯文本;二者都不会成为 HTML-island。不支持的 HTML 会保持可见,同时不会抑制其中的 Markdown 格式。HTML 属性和已识别的内联注释在 Markdown 解析期间保留其字面源;受支持的属性随后由 HTML 映射器解码。HTML-island 摘要和图片说明保留其独立的 HTML 规范化。
这使模型文本远离 Telegram 的富 Markdown 符号,因此像 `$400-600K` 这样的货币不会被解析为数学表达式。较长的富文本会根据 Telegram 的限制自动拆分。超过 20 列限制的表格会回退为代码块。
默认:关闭,出于客户端兼容性考虑——一些当前的 Desktop、Web、Android 和第三方客户端会将已接受的富文本消息渲染为不支持。除非与机器人配合使用的每个客户端都能渲染它们,否则请保持关闭。`/status` 会显示当前会话是否开启或关闭富文本消息。
链接预览默认开启。`channels.telegram.linkPreview: false` 会禁用富文本的自动实体检测。
内联按钮
配置内联键盘范围:
按账户覆盖:
{
channels: {
telegram: {
accounts: {
main: {
capabilities: {
inlineButtons: "allowlist",
},
},
},
},
},
}
范围:`off`、`dm`、`group`、`all`、`allowlist`(默认)。旧版 `capabilities: ["inlineButtons"]` 映射到 `"all"`。
具有 `capabilities: []` 的账户会继承渠道能力。使用 `capabilities: { inlineButtons: "off" }` 可显式禁用内联按钮。
`ask_user` 使用这些原生控件提出一个单选问题。
每个选项占一行,**其他…** 会打开 Telegram 的回复输入。
共享 `message` 工具示例(`action: "send"`、`channel: "telegram"`):
可用性遵循分层[工具策略](../../gateway/config-tools/tool-policy.md)。必须配置并启用 Telegram 账户,`message` 工具必须允许用于该运行,并且 `channels.telegram.actions.sendMessage` 不得被禁用。对于携带按钮的发送,`inlineButtons: "off"` 会阻止控件,而 `"dm"` 和 `"group"` 会限制目标聊天类型。回调点击由 Telegram 访问策略单独授权;`"allowlist"` 应用已配置的发送者授权。
{
action: "send",
channel: "telegram",
to: "123456789",
message: "Choose an option:",
presentation: {
blocks: [
{
type: "buttons",
buttons: [
{ label: "Yes", action: { type: "callback", value: "yes" }, style: "success" },
{ label: "No", action: { type: "callback", value: "no" }, style: "danger" },
{ label: "Cancel", action: { type: "callback", value: "cancel" } },
],
},
],
},
}
Mini App 按钮示例:
{
action: "send",
channel: "telegram",
to: "123456789",
message: "Open app:",
presentation: {
blocks: [
{
type: "buttons",
buttons: [
{
label: "Launch",
action: { type: "web-app", url: "https://example.com/app" },
},
],
},
],
},
}
Mini App 按钮仅在用户与机器人之间的私聊中有效。
未被已注册的插件交互处理器声明的回调操作值会作为文本传递给代理:`callback_data: <value>`。
在持久化入口中,OpenClaw 会在存储更新后发送回调确认,而不会等待该聊天通道中更早的处理器。当确认成功时,Telegram 会清除其加载指示器;按钮的操作仍遵循正常授权和有序处理。
用于代理和自动化的 Telegram 消息操作
操作:
- `sendMessage`(`to`、`content`、可选 `mediaUrl`、`replyToMessageId`、`messageThreadId`)
- `react`(`chatId`、`messageId`、`emoji`)
- `emoji-list`(可选 `chatId`、`limit`)
- `deleteMessage`(`chatId`、`messageId`)
- `editMessage`(`chatId`、`messageId`、`content` 或 `caption`、可选 `presentation` 内联按钮;仅按钮编辑会更新回复标记)
- `createForumTopic`(`chatId`、`name`、可选 `iconColor`、`iconCustomEmojiId`)
便捷别名:send、react、delete、edit、sticker、sticker-search、topic-create。
门控:`channels.telegram.actions.sendMessage`、`poll`、`deleteMessage`、`reactions`、`editMessage`、`createForumTopic` 和 `editForumTopic` 默认启用;将其中一项设置为 `false` 即可禁用。创建投票需要同时启用 `sendMessage` 和 `poll`。`sticker` 默认禁用,必须显式启用。`reactions` 同时控制 `react` 和 `emoji-list`。
运行时发送使用启动/重载时的活动配置/密钥快照,因此操作路径不会在每次发送时重新解析 `SecretRef` 值。
使用 `emoji-list` 检查当前受信任聊天和账户中的反应。代理无法检查其他聊天;直接操作者可以提供不同的 `chatId`。`limit` 默认为 100,且不能超过 100:
```json
{
"ok": true,
"emojis": [
{ "name": "👍", "identifier": "👍" },
{ "identifier": "5368324170671202286", "type": "custom_emoji" }
]
}
```
将 Unicode 标识符或数字自定义表情标识符直接传递给 `react`。没有反应限制的聊天会返回已知的标准 Telegram 反应,并附带一条 `note`,说明允许所有标准反应。当 Telegram 拒绝某个反应时,错误信息会包含允许的标准反应和数字自定义表情标识符的简短示例。如果允许反应查询失败,错误信息将省略该示例。
反应移除语义:[/tools/reactions](../../tools/reactions.md)。
Telegram 中的执行审批
Telegram 支持在审批人 DM 中进行执行审批,并可选择在源聊天或主题中发布提示。审批人必须是数字 Telegram 用户 ID。
channels.telegram.execApprovals.enabled("auto"在至少一个审批人可解析时启用)channels.telegram.execApprovals.approvers(回退到来自commands.ownerAllowFrom的数字所有者 ID)channels.telegram.execApprovals.target:dm(默认)|channel|bothagentFilter、sessionFilter
channels.telegram.allowFrom、groupAllowFrom 和 defaultTo 控制谁可以与机器人对话以及它在哪里发送普通回复——它们不会使某人成为执行审批人。当尚不存在命令所有者时,第一个已批准的 DM 配对会引导 commands.ownerAllowFrom,因此单所有者配置无需在 execApprovals.approvers 下重复 ID 即可工作。
频道投递会在聊天中显示命令文本;仅在受信任的群组/主题中启用 channel 或 both。当提示落在论坛主题中时,OpenClaw 会保留该主题用于审批提示和后续操作。执行审批默认在 30 分钟后过期。
内联审批按钮还要求 channels.telegram.capabilities.inlineButtons 允许目标界面(dm、group 或 all)。以 plugin: 为前缀的审批 ID 通过插件审批解析;其他 ID 首先通过执行审批解析。
参见 执行审批。
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 cl/openclaw