指南
Inline Keyboard 指南
消息上挂按钮;用户点击后你收到 callback_query,应调用 answerCallbackQuery 结束加载态。
适用场景
在机器人发出的消息下方展示可点按钮(确认、选项、跳转等)。点击后平台投递 callback_query Update;也可用 url / action 做外链或 App 内跳转(不产生 callback)。
步骤
- 发消息时带上
reply_markup.inline_keyboard(sendMessage/editMessage等)。 - 确保 Webhook 或长轮询能收到
callback_query(默认订阅通常已包含)。 - 收到后调用
POST /api/v1/bots/answerCallbackQuery(可带 toast / alert / 外链)。同一callback_query_id重复调用按幂等成功返回。
示例
curl -X POST "$API/bots/sendMessage" \
-H "Authorization: Bearer $SOCHAT_BOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"chat_id": "<chat_id>",
"text": "选择一项",
"reply_markup": {
"inline_keyboard": [[
{ "text": "确认", "callback_data": "ok" },
{ "text": "文档", "url": "https://example.com/docs" }
]]
}
}'
curl -X POST "$API/bots/answerCallbackQuery" \
-H "Authorization: Bearer $SOCHAT_BOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"callback_query_id": "<id>",
"text": "已处理",
"show_alert": false
}'
约束与错误
- 键盘最多 8×8;按钮
text1–64;callback_dataUTF-8 ≤64 字节。 - 每个按钮三选一:
callback_data(产生回调)、url(http(s) 外链)、action(App 内路由,如user_profile/public_group,不投递 callback)。 - 未调用
answerCallbackQuery:客户端按钮可能一直转圈;服务端没有「必须 5 秒内应答」的硬超时。重复应答同一 id → 幂等成功(无效 id →400)。 - 只能改本机器人发出的消息键盘;改他人消息 →
403。
