一句话结论
用户点 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 方法矩阵 / 核心消息方法
