Я использую это расширение для 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. Как я могу это исправить?






Проблема чаще всего возникает, если вы слишком поздно отвечаете на запрос.
Например. вы нажимаете встроенную кнопку в 12:00:00 в приложении Telegram, и ваш бот вызывает answerCallbackQuery в 12:00:16, тогда callback_query_id к этому времени станет недействительным. У вас есть около 15 секунд, пока вы не получите ошибку «QUERYID_INVALID».
Также обратите внимание на время, когда запрос «путешествует» с серверов Telegram на ваш сервер и назад. Эти 15 секунд считаются, когда сообщение покидает серверы Telegram и перестает считаться, когда оно возвращается туда.
Тогда, вероятно, неисправен $id. Вы пробовали его распечатать? Может быть, на запрос обратного вызова ответит другой экземпляр бота Telegram?
$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Вы пробовали использовать отладчик в своем коде? Вы можете получить подробную информацию о том, где и когда происходит «сбой» кода. Я почти уверен, что это либо вы: 1) слишком поздно, 2) запрос уже ответил или, может быть, 3) $id - это не строка, но int? Я не уверен, присваивается ли тип автоматически при переходе на answerCallbackQuery.
Строка возврата gettype($id). сообщение о недопустимом идентификаторе приходит менее чем через секунду после нажатия кнопки (не слишком поздно). если на запрос уже был дан ответ, анимация на кнопке и сообщении bot is not responding отсутствует.
blocl
catchвозвращаетBad Request: QUERYIDINVALIDчерез 1-2 секунды после нажатия кнопки