跳转到主要内容

底部自定义键盘:下发、切换、一次隐藏与移除

经 reply_markup 下发 ReplyKeyboardMarkup;普通按钮产生 message.text;is_persistent / 一次隐藏 / 移除;selective、Privacy Mode 与仅私聊 web_app。

一句话结论

Reply Keyboard 是输入框下方的右侧自定义键盘。通过 sendMessagereply_markup = ReplyKeyboardMarkup 下发。普通按钮会发出一条用户消息,message.text 为按钮文案——不是 callback_query。与左侧 Menu Button 互不影响。


总览

适合常驻或一次性快捷操作。若要在气泡上留按钮并用 callback_data 回传后台,请用内联键盘。权威参考:core.mp.net/bots

经 reply_markup 下发

sendMessage(及其它支持 ReplyMarkup 联合类型的发消息方法)上传入 ReplyKeyboardMarkup。对象必须恰好匹配一种 markup 判别字段。

{
"chat_id": 12345,
"text": "请选择操作",
"reply_markup": {
"keyboard": [[{ "text": "状态" }, { "text": "帮助" }]],
"resize_keyboard": true,
"is_persistent": true
}
}

普通按钮 → message.text(不是 callback_query)

  • 用户点普通文本按钮时,客户端发送一条普通消息。

  • Update 里是 message.text = 按钮文案。

  • 不要等待 callback_query——那是内联 callback_data 的路径。

is_persistent / one_time_keyboard / 移除

字段 / 对象

行为

is_persistent

请求键盘持续可用(客户端继续提供右侧切换入口)。

one_time_keyboard

使用一次后收起,但通常仍可从切换入口再次唤起。

ReplyKeyboardRemoveremove_keyboard

删除该会话上有效的 Reply Keyboard 状态(真正移除)。

不要和 Menu Button 搞混

setChatMenuButton 不会创建、移除或展开 Reply Keyboard。要去掉底部自定义键盘,请发送 ReplyKeyboardRemove,不要调菜单 API。

群聊中的 selective

群聊里可设 selective: true,使键盘只对消息中被提及的用户/被回复消息的发送者展示(对标 Telegram selective 语义)。不设时,该会话内可能对更多成员生效。

Privacy Mode 注意点

隐私模式

若 Bot 在群里开启 Privacy Mode,通常只能看到指令、@提及、以及回复 Bot 的消息。Reply Keyboard 按下后若只发送普通文本,且不是指令、也不是对 Bot 的回复,可能到不了你的后端。需要每一下都能收到时:按钮文案用斜杠指令、要求回复上下文,或关闭 Privacy Mode。

web_app 按钮:仅私聊

web_app 的 Reply Keyboard 按钮面向私聊,不要依赖群聊场景。键盘侧 web_app 的归属 / URL 规则跟消息按钮路径走,见 core.mp.net/bots(比 Menu Button 的「任意 HTTPS ≤2048」更严)。

与 Menu Button 独立

  • 左侧 Menu Button ↔ setChatMenuButton

  • 右侧 Reply Keyboard ↔ 仅消息 reply_markup

  • 两侧可同时存在;任一侧 API 都不驱动另一侧。

相关

权威来源

与 PRD 冲突时以 core.mp.net/bots 为准。

这是否解答了您的问题?