一句话结论
setChatMenuButton 只配置聊天输入框左侧菜单按钮(commands / web_app / default),不会创建或移除右侧 Reply Keyboard。省略 chat_id 为全局默认;带 chat_id 时覆盖已与 Bot 互动过的私聊。
总览
输入框左右是两套独立控件:左侧 Menu Button(本文)与右侧 Reply Keyboard 切换(见底部自定义键盘指南)。参数级权威以 core.mp.net/bots 为准。
左侧菜单 vs 右侧 Reply Keyboard
左侧 — Menu Button:用
setChatMenuButton/getChatMenuButton。类型:commands、web_app、default。右侧 — Reply Keyboard:只能通过消息
reply_markup(ReplyKeyboardMarkup/ Remove)下发。菜单 API 不会展开或隐藏它。改一侧不会影响另一侧。
类型:commands / web_app / default
type | 效果 |
| 左侧展示 Bot 指令列表。 |
| 左侧展示带文案的按钮,点击打开 HTTPS URL(text + |
| 清除该作用域的显式覆盖(省略 |
同一作用域下 commands 与 web_app 互斥。
作用域:省略 chat_id vs 私聊 chat_id
省略
chat_id:设置该 Bot 的全局菜单。带
chat_id:必须是已与本 Bot 互动过的私聊,对该会话覆盖。用
getChatMenuButton回读(作用域规则相同)。返回值不会描述右侧 Reply Keyboard 是否可见。
web_app:任意 HTTPS ≤ 2048
以官方为准(覆盖 PRD 表述)
Menu Button 的 web_app 接受 text 加上任意合法 HTTPS URL(最长 2048)。不要求本 Bot 已登记 MiniApp、不要求 MiniApp ID。(内联键盘 / Reply Keyboard 的 web_app 归属规则另论,勿照搬到这里。)
按钮文案
text最长 64。URL 必须是 HTTPS。
BotFather 路径(简述)
也可在 BotFather 的 Bot「菜单按钮 / Menu Button」设置里配置左侧菜单。与 setChatMenuButton 控制的是同一侧控件;需要按会话覆盖或自动化时优先用 API。
最小请求示例
POST https://call.mp.net/bot/bot<token>/setChatMenuButton
{
"menu_button": {
"type": "web_app",
"text": "Open App",
"web_app": { "url": "https://example.com/app" }
}
}
相关
底部自定义键盘:下发、切换、一次隐藏与移除(本栏目)
核心消息方法详解:getMe、getUpdates、sendMessage(reply_markup)
