一句話結論
用戶點 callback_data 後,必須在 300 秒內調用 answerCallbackQuery,否則按鈕一直轉圈。支持欄位:callback_query_id、text(≤200)、show_alert。不支持 url / cache_time。然後可選用 editMessageReplyMarkup / editMessageText。
總覽
訊息 callback 已開放。MiniApp 客戶端回流(web_app_data / sendData / answerWebAppQuery)仍關閉——不要混成一條鏈路。詳見 core.mp.net/bots。
為什麼必須回應
客戶端會在按鈕上轉圈,直到 answerCallbackQuery 成功(或 300 秒窗口過期)。省略或空 text 只結束轉圈。重複回應冪等成功。
事件流
用戶點帶
callback_data的內嵌按鈕。Webhook /
getUpdates收到callback_query(allowed_updates需包含它)。處理業務後調用
answerCallbackQuery。可選對同一氣泡調用
editMessageReplyMarkup和/或editMessageText。
answerCallbackQuery 參數
欄位 | 必填 | 說明 |
| 是 |
|
| 否 | Toast/Alert 文案,最長 200;空/省略 = 只停轉圈。 |
| 否 | 為 true 時優先彈 Alert,而不是 Toast。 |
官方限制
Telegram 的 url / cache_time 不支持,不要傳入。
POST https://call.mp.net/bot/bot<token>/answerCallbackQuery
{
"callback_query_id": "callback-message-uid",
"text": "已完成",
"show_alert": false
}
editMessageReplyMarkup 與 editMessageText
editMessageReplyMarkup:只改或清空按鈕(chat_id+message_id);省略 / null / 空inline_keyboard即移除按鈕。不支持inline_message_id;非文本 / 非 Inline 媒體訊息不能走此路徑。editMessageText:改 Bot 自己可編輯訊息的正文(並可順帶改鍵盤)。兩者都是原地更新,不會為同一氣泡另發一條新訊息。
copy_text 不走這條鏈路
copy_text 在客戶端本地完成。你收不到 callback_query,也不要調 answerCallbackQuery。
allowed_updates
Webhook 請讓 allowed_updates 包含 callback_query(例如 ["message", "callback_query"]),或省略該欄位以接收全部已支持類型。長輪詢的 Update 形狀相同。
失敗場景
300 秒內未回應 → 客戶端轉圈 / query 過期。
重複點擊:回應一次即可;再次回應冪等。
過期的
callback_query_id→ API 報錯;必要時用editMessageReplyMarkup刷新鍵盤。
相關
內嵌鍵盤按鈕:url、web_app、callback_data 與 copy_text
長輪詢與 Webhook(allowed_updates)
API 方法矩陣 / 核心訊息方法
