跳至主要內容

底部自訂鍵盤:下發、切換、一次隱藏與移除

經 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 為準。

是否回答了您的問題?