встроенная кнопка php telegram-бота продолжает загружаться после ответа на обратный запрос

#php #telegram-bot

#php #telegram-бот

Вопрос:

у меня этот код работает нормально, я получаю данные обратного вызова и отвечаю пользователю сообщением. дело в том, что встроенная кнопка продолжает показывать круг загрузки в течение нескольких секунд даже после того, как ответ был отправлен пользователю. может ли это быть ошибкой? или я делаю что-то не так?

         elseif ($update amp;amp; isset($update["callback_query"]))
    {

      //file_put_contents('php://stderr', print_r($output , TRUE));
      $callback_query = isset($update['callback_query']) ? $update['callback_query'] : "";
      $chat_id = $update["callback_query"]['message']['chat']['id'];
      $data = $update["callback_query"]["data"];
      $callbackQueryID = $update["callback_query"]['id'];
      $this->answerCallbackQuery($callbackQueryID);

      switch($data){
        case 'someString':
        $this->sendMessage([
            'chat_id' => $chat_id,
            'text' => 'string one was called'
        ]);
        break;
        case 'someString2':
        $this->sendMessage([
            'chat_id' => $chat_id,
            'text' => 'stiring 2 was called '
        ]);
        break;
      }

    } // ======= END ELSEIF CALLBACKQUERY
 

Ответ №1:

У меня была та же проблема. После поиска на некоторых форумах, а также в документации Telegram я нашел решение. Вы должны использовать эту функцию, называемую answerCallbackQuery. Вы должны вызвать этот метод после выполнения кода, связанного с вашей кнопкой.

Вот как я использовал эту функцию

 $webSite = 'https://api.telegram.org/bot'.$botToken;
function answerCallbackQuery($callbackId){
    $url = $GLOBALS['webSite']."/answerCallbackQuery?callback_query_id=$callbackId";

    file_get_contents($url);
}
 

В этом случае я только передал like params callbackQueryId, потому что я не хочу отвечать на кнопку, а только удалить значок загрузки.

Я надеюсь, что это поможет вам и решит ваши проблемы