一句话结论
Reply Keyboard 是输入框下方的右侧自定义键盘。通过 sendMessage 的 reply_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 / 移除
字段 / 对象 | 行为 |
| 请求键盘持续可用(客户端继续提供右侧切换入口)。 |
| 使用一次后收起,但通常仍可从切换入口再次唤起。 |
| 删除该会话上有效的 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 都不驱动另一侧。
相关
聊天菜单按钮:setChatMenuButton(commands、web_app、default)
内联键盘 / 回调指南(本栏目后续篇)
