Telegram Bot功能正常但持续显示加载图标及未响应提示如何解决?
解决Telegram Bot inline键盘点击后持续加载的问题
你的问题出在收到callback_query后没有告知Telegram服务器已处理该回调,Telegram会一直等待确认,所以客户端会持续显示加载图标直到超时。
解决方法很简单:在处理callback_query的代码块中,添加调用answerCallbackQuery API的逻辑,修改后的完整代码如下:
<?php $update = json_decode(file_get_contents('php://input'), TRUE); $botToken = "*****"; $botAPI = "https://api.telegram.org/bot" . $botToken; // Check if callback is set if (isset($update['callback_query'])) { // 关键:先回复callback_query,消除加载图标 $callbackId = $update['callback_query']['id']; $answerData = http_build_query([ 'callback_query_id' => $callbackId, // 可选:设置临时提示文本,用户会看到短暂弹窗 'text' => 'Language selected!' ]); $answerUrl = $botAPI . "/answerCallbackQuery?{$answerData}"; $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $answerUrl); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_exec($curl); curl_close($curl); // 原有的发送消息逻辑保留 $data = http_build_query([ 'text' => 'Selected language: ' . $update['callback_query']['data'], 'chat_id' => $update['callback_query']['from']['id'] ]); $url = $botAPI . "/sendMessage?{$data}"; $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($curl); curl_close($curl); } // Check for normal command if (isset($update['message']['text']) && $update['message']['text'] === "/start") { // 原有的发送键盘逻辑保留 $data = http_build_query([ 'text' => 'Please select language:', 'chat_id' => $update['message']['from']['id'] ]); $keyboard = json_encode([ "inline_keyboard" => [ [ [ "text" => "english", "callback_data" => "english" ], [ "text" => "russian", "callback_data" => "russian" ] ] ] ]); $url = $botAPI . "/sendMessage?{$data}&reply_markup={$keyboard}"; $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($curl); curl_close($curl); } ?>
核心说明:
answerCallbackQuery是Telegram要求必须调用的接口,核心参数是callback_query_id,对应收到的update['callback_query']['id']- 可选的
text参数可以给用户显示临时确认弹窗,不需要的话可以只传callback_query_id - 建议把调用
answerCallbackQuery放在发送消息之前,这样加载图标会立即消失
内容的提问来源于stack exchange,提问作者Saint Robson
相关产品推荐
相关产品推荐

