跳至主要內容

回調按鈕與訊息原地更新(answerCallbackQuery)

說明如何用 answerCallbackQuery 回應 callback_query(固定 300 秒;text≤200、show_alert;不支持 url/cache_time),再可選 editMessageReplyMarkup 或 editMessageText 原地更新氣泡。

一句話結論

用戶點 callback_data 後,必須在 300 秒內調用 answerCallbackQuery,否則按鈕一直轉圈。支持欄位:callback_query_idtext(≤200)、show_alert不支持 url / cache_time。然後可選用 editMessageReplyMarkup / editMessageText


總覽

訊息 callback 已開放。MiniApp 客戶端回流(web_app_data / sendData / answerWebAppQuery)仍關閉——不要混成一條鏈路。詳見 core.mp.net/bots

為什麼必須回應

客戶端會在按鈕上轉圈,直到 answerCallbackQuery 成功(或 300 秒窗口過期)。省略或空 text 只結束轉圈。重複回應冪等成功。

事件流

  1. 用戶點帶 callback_data 的內嵌按鈕。

  2. Webhook / getUpdates 收到 callback_queryallowed_updates 需包含它)。

  3. 處理業務後調用 answerCallbackQuery

  4. 可選對同一氣泡調用 editMessageReplyMarkup 和/或 editMessageText

answerCallbackQuery 參數

欄位

必填

說明

callback_query_id

callback_query.id;應答窗口固定 300 秒。

text

Toast/Alert 文案,最長 200;空/省略 = 只停轉圈。

show_alert

為 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 方法矩陣 / 核心訊息方法

權威來源

與過時 QUESTIONS 衝突時以 core.mp.net/bots 為準。

是否回答了您的問題?