跳转到主要内容

回调按钮与消息原地更新(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 为准。

这是否解答了您的问题?