maximw
@maximw

Почему Telegram bot API метод answerCallbackQuery не показывает алерт?

Пытаюсь показать в телеграме алерт типа такого 0lSAk.png

Мой тестовый код примерно такой:
$url = "https://api.telegram.org/botTOKEN/answerCallbackQuery";
$response = file_get_contents($url."?callback_query_id=". $callback_query_id ."&text=SUCCESS&show_alert=true");

В ответ $response приходит { "ok": true, "result": true }, поэтому я думаю, что параметр $callback_query_id верный.

Но алерт не пояляется! В этом проблема.

Я пробовал другие боты (не мои) и другие устройства, и они нормально показывают алерты. Поэтому я практически уверен, что проблем не в моем устройстве или приложении телеграма.

Кроме этого, я пробовал делать запрос с помощью CURL или с помощью php-библиотек для телеграмных ботов. Ни в каком из вариантов не получилось вызвать алерт.
"Курение" официальной документации тоже не прояснило ничего.
  • Вопрос задан
  • 1435 просмотров
Решения вопроса 1
maximw
@maximw Автор вопроса
Проблема была в библиотеке, которую я использовал https://github.com/php-telegram-bot/core
Если получать апдейты из телеграма при помощи метода этой библиоткеи handleGetUpdates(), то библиотека сама отправляет пустые ответы на CallbackQuery.
Получается, что я пытался ответить на тот же CallbackQuery еще раз, ответ от Телеграма приходит - ОК, а реально Телеграм обрабатывал только первый ответ, который автоматически слала библиотека.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
nastya97core
@nastya97core
Начинающий программист
попробуй вот это:
$tg = json_decode(file_get_contents('php://input'), true);
function tlgrm($method, $data, $client) {
  $data["chat_id"] = $client;
  $data["parse_mode"] = "html";
  $ch = curl_init("https://api.telegram.org/---токен---/$method");
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
  curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
  $r = json_decode(curl_exec($ch), true);
  curl_close($ch);
  return $r;
}
 
$client = $tg['callback_query']['from']['id'];
$cb_id = $tg['callback_query']['id'];
tlgrm('answerCallbackQuery', ['callback_query_id'=> $cb_id, 'text' => 'СООБЩЕНИЕ', 'show_alert' => true],$client);

создай php файл, засунь туда этот код и установи на него webhook.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы