You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 20:20:10