一句話結論
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)
內嵌鍵盤 / 回呼指南(本欄目後續篇)
