跳转到主要内容

聊天菜单按钮:setChatMenuButton(commands、web_app、default)

用 setChatMenuButton 配置左侧菜单:commands / web_app / default;全局与私聊作用域;HTTPS≤2048 且不要求本 Bot 已登记 MiniApp。

一句话结论

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。类型:commandsweb_appdefault

  • 右侧 — Reply Keyboard:只能通过消息 reply_markupReplyKeyboardMarkup / Remove)下发。菜单 API 不会展开或隐藏它。

  • 改一侧不会影响另一侧。

类型:commands / web_app / default

type

效果

commands

左侧展示 Bot 指令列表。

web_app

左侧展示带文案的按钮,点击打开 HTTPS URL(text + web_app.url)。

default

清除该作用域的显式覆盖(省略 menu_button 效果相同)。

同一作用域下 commandsweb_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)

权威来源

与产品 PDF 冲突时,以 core.mp.net/bots 为准。

这是否解答了您的问题?