命令菜单不仅是一份帮助列表。它决定用户输入 / 时先看到什么,也会影响他们是否把管理员功能、群组功能和私聊功能混在一起。设计机器人需求时,应分别写清命令的显示范围、语言版本和真实授权规则。
先列任务,再命名命令
先写用户想完成的动作,再把每个高频动作映射成一个具体命令。例如社群活动机器人可以有:
/join:报名当前活动;/my_status:查看自己的报名状态;/rules:查看规则;/close_signup:管理员关闭报名;/export:管理员导出结果。
命令应尽量具体。与其使用 /new 再要求用户补充“要新建什么”,不如使用 /new_event 或 /new_rule。说明文字也应描述结果,而不是重复命令名。
用范围控制菜单噪声
Telegram 支持按 scope 设置命令列表。常见设计可以分成四层:
| 使用位置 | 适合显示的命令 | 仍需后端检查 |
| --- | --- | --- |
| 默认 | /start、/help | 输入是否合法 |
| 所有私聊 | /my_status、/settings | 当前用户的数据归属 |
| 所有群组 | /rules、/join | 群组状态与成员资格 |
| 群管理员 | /close_signup、/export | 发起者此刻是否仍是管理员 |
Telegram 的命令文档说明,机器人所有者可以通过官方 BotFather 设置命令,机器人也能调用接口修改自己的列表。不同 scope 和语言可以拥有不同菜单。
范围解决的是“给谁显示”,不是“谁有权限执行”。Telegram 的更新不会附带“这个命令来自哪个菜单范围”的证明,用户甚至可以手动输入一个菜单里不存在的命令。因此,收到 /export 时仍要重新检查聊天类型、用户身份和管理员状态。
多语言菜单要保持同一行为
命令本身通常保持稳定,把说明翻译成用户语言更容易维护。例如中文显示“/join 报名活动”,英文显示“/join Join the event”。Telegram 的 setBotCommands 接口接受 scope 和 language_code;未匹配专用语言时,应准备一个默认列表。
不要只翻译菜单而遗漏机器人正文。至少检查:
/help的语言是否与命令说明一致;- 错误、空状态和成功提示是否有对应语言;
- 用户切换 Telegram 语言后,旧数据和命令行为是否保持不变;
- 没有专用翻译时,是否能回退到可理解的默认语言。
把菜单需求写成可生成的规格
下面是一份可以修改的需求片段:
这是群组活动报名机器人。默认菜单只显示
/start和/help;私聊显示/my_status和/settings;群组显示/join、/leave和/rules;群管理员额外看到/close_signup和/export。提供中文和英文命令说明,命令名称保持英文且两种语言一致。任何人都可能手动输入管理员命令,所以执行前必须重新检查当前聊天中的管理员身份。无权限时只返回简短说明,不泄露报名数据。未知命令显示当前聊天可用的帮助。第一版不需要自然语言意图识别或运行时 AI。
这段需求把菜单显示、命令行为、权限和语言分开,生成后更容易逐项验收。
用四个账号场景验收
发布后至少检查:
- 普通用户在私聊输入
/,只看到私聊与默认命令。 - 普通群成员看不到管理员菜单;手动输入
/export也被拒绝。 - 群管理员能看到并执行管理员命令;取消管理员身份后立即失去权限。
- 中文和英文客户端看到相同命令集合及对应说明,未知语言回退到默认菜单。
再检查带参数、大小写、机器人用户名后缀以及旧消息里的命令链接。菜单配置正确,不代表命令解析和授权一定正确。
与 BotFatherV2 的关系
BotFatherV2支持通过 AI 对话创建和修改 Telegram Serverless 机器人;它与 Telegram 官方 BotFather 没有隶属关系。公开内测文档把菜单列为首版适用场景,但固定 SDK 范围并不等于支持 Telegram 的每个最新接口。生成前应把 scope、语言和授权写进需求,生成后再查看校验报告并在 Telegram 实测。
AI 辅助开发不会自动赋予机器人运行时 AI Agent 能力。命令菜单和权限检查是确定性工作流,即使完全不调用模型,也能为用户提供清晰、安全的操作入口。
来源与核验日期
- Telegram,《Bot commands》,英文官方技术文档,页面未标注发布日期;2026 年 10 月 10 日核验。
- Telegram,
bots.setBotCommands,英文官方接口文档,页面未标注发布日期;2026 年 10 月 10 日核验。