API телеграммы answerCallbackQuery

Я использую это расширение для api телеграмм бота irazasyed. Когда я нажимаю на inlineKeyboard, появляется знак ожидания пример. Я добавляю метод answerCallbackQuery для исправления этого

$id = $request['callback_query']['id'];
$keyboard = new KeyboardController();
$keyboard->selectLanguage($chatid, $bot_name);
try{

            $message = new SendMessageController();
            $message->sendMessage($chatid,$id,$bot_name);
            $telegram = new Api();
            $telegram->answerCallbackQuery([
                'callback_query_id' => $id,
            ]);
        }
        catch (\Exception $e)
        {
            $message = new SendMessageController();
            $message->sendMessage($chatid,$e->getMessage(),$bot_name);
        }

Я получаю сообщение $id (от try), но из блока catch получаю ошибку Bad Request: QUERYIDINVALID. Как я могу это исправить?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
1
0
1 584
1

Ответы 1

Проблема чаще всего возникает, если вы слишком поздно отвечаете на запрос.

Например. вы нажимаете встроенную кнопку в 12:00:00 в приложении Telegram, и ваш бот вызывает answerCallbackQuery в 12:00:16, тогда callback_query_id к этому времени станет недействительным. У вас есть около 15 секунд, пока вы не получите ошибку «QUERYID_INVALID».

Также обратите внимание на время, когда запрос «путешествует» с серверов Telegram на ваш сервер и назад. Эти 15 секунд считаются, когда сообщение покидает серверы Telegram и перестает считаться, когда оно возвращается туда.

blocl catch возвращает Bad Request: QUERYIDINVALID через 1-2 секунды после нажатия кнопки

stan 16.03.2018 12:33

Тогда, вероятно, неисправен $id. Вы пробовали его распечатать? Может быть, на запрос обратного вызова ответит другой экземпляр бота Telegram?

Rickyy 16.03.2018 14:25
$id = $request['callback_query']['id']; elseif ($text == 'Select language') { try{ $telegram = new Api(); $telegram->answerCallbackQuery([ 'callback_query_id' => $id ]); } catch (\Exception $e) { $message = new SendMessageController(); $message->sendMessage($chatid,$id . '/ ' .$text . '/'.$e->getMessage(),$bot_name); } Получил вот этот 1495377079129429867/ Select language/Bad Request: QUERYIDINVALID
stan 16.03.2018 19:49

Вы пробовали использовать отладчик в своем коде? Вы можете получить подробную информацию о том, где и когда происходит «сбой» кода. Я почти уверен, что это либо вы: 1) слишком поздно, 2) запрос уже ответил или, может быть, 3) $id - это не строка, но int? Я не уверен, присваивается ли тип автоматически при переходе на answerCallbackQuery.

Rickyy 18.03.2018 19:27

Строка возврата gettype($id). сообщение о недопустимом идентификаторе приходит менее чем через секунду после нажатия кнопки (не слишком поздно). если на запрос уже был дан ответ, анимация на кнопке и сообщении bot is not responding отсутствует.

stan 20.03.2018 18:12

Другие вопросы по теме