Не приходит callback_query от telegram bot PHP
Уже что только не перепробовал - но никак не могу решить. Использую эту бибилиотеку - https://github.com/TelegramBot/Api . Так все работает, на команды отвечает и даже если нажать на кнопку та которая с ссылкой то все открывается - но вот callback_query почему-то уловить не могу. Вот код:
PackageLoader::Get()->loadPackage('Telegram');
$token = Development_Service::Get()->getTelegramKey();
$bot = new \TelegramBot\Api\Client($token);
$update = json_decode(file_get_contents('php://input'), TRUE);
$chat_id = $update["message"]["chat"]["id"];
if (isset($update['callback_query'])) {
$bot->sendMessage($chat_id, "Daaa!");
}
$bot->command('start', function ($message) use ($bot) {
$answer = "Добро пожаловать!\nВведите свой пин-код c помощью команды /pincode\n\nПример: /pincode 1234";
$keyboard = new \TelegramBot\Api\Types\Inline\InlineKeyboardMarkup(
[
[
['text' => 'link', 'url' => 'https://core.telegram.org'],
['text' => 'Test', 'callback_data' => 'test123']
]
]
);
$bot->sendMessage($message->getChat()->getId(), $answer, null, false, null, $keyboard);
});
Когда нажимаю на кнопку которая должна высылать данные - просто возле неё появляются часики и все.. Буду благодарен за помощь!
Ответы (3 шт):
Все таки решил. Запрос на самом деле приходит, но id чата находится в другом месте, по этому он и не отправлял - вот:
if(isset($update['callback_query'])){//Если была нажата кнопка
$chatId = $update['callback_query']['message']['chat']['id'];
$data = $update['callback_query']['data'];
$bot->sendMessage($chatId, "Daaa!");
}
Надеюсь кому-то помог. Так же чтобы проверить какие вебхуки вам приходят можете воспользоваться сайтом https://webhook.site - он лично помог мне
Попробуйте использовать библиотеку westacks/telebot:
// index.php
<?php
require 'vendor/autoload.php';
use WeStacks\TeleBot\Objects\Update;
use WeStacks\TeleBot\TeleBot;
$bot = new TeleBot('123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11');
// Start command
$bot->addHandler(function (Update $update) use ($bot) {
if (!$message = $update->message()) return;
if ($message->text != '/start') return;
return $bot->sendMessage([
'chat_id' => $update->chat()->id,
'text' => 'Добро пожаловать!\nВведите свой пин-код c помощью команды /pincode\n\nПример: /pincode 1234',
'reply_markup' => [
'inline_keyboard' => [[
['text' => 'link', 'url' => 'https://core.telegram.org'],
['text' => 'Test', 'callback_data' => 'test123']
]]
]
]);
});
// Callback
$bot->addHandler(function (Update $update) use ($bot) {
if (!$query = $update->callback_query ?? false) return;
if ($query->data != 'test123') return;
return $bot->answerCallbackQuery([
'callback_query_id' => $query->id,
'text' => 'Success!',
'show_alert' => true
]);
});
// Handling bot updates
echo 'Bot is working...'.PHP_EOL;
$last_offset = 0;
while (true) {
$updates = $bot->getUpdates([
'offset' => $last_offset + 1
]);
foreach ($updates as $update) {
echo "Update recieved: $update->update_id" . PHP_EOL;
$bot->handleUpdate($update);
$last_offset = $update->update_id;
}
}
Запустить бота с помощью команды:
php index.php
Лично у меня проблема не решилась пока я бота не пересоздал.
Не приходил массив callback_query и все тут, то ли символы не те использовал, то ли у них глюк был, пересоздал и данные сразу стали приходить при клике на инлайн кнопку.