Дублирую вопрос, потому что никто так и не ответил, а мне очень нужно.
Есть inline клавиатура, которая должна вернуть callback_data, по котором мы будем совершать следующее действие. Сейчас моя клавиатура виснет и никак не реагирует, потому что я не могу никак получить callback_data. Так выглядит файл-обработчик бота.
<?php
require 'vendor/autoload.php';
use Kafkiansky\Engine\Progbot\Helper;
use Kafkiansky\Engine\Database\Database;
use Telegram\Bot\Keyboard\Keyboard;
$settings = require 'settings.php';
$token = require 'token.php';
try {
$bot = new Helper($token["token"]);
} catch (\Telegram\Bot\Exceptions\TelegramSDKException $e) {
$e->getMessage();
}
$db = new Database($settings);
$message = $db->getOne()->content;
$keyboard_default = Keyboard::make()
->inline()
->row(
Keyboard::inlineButton(['text' => 'Создать пост', 'callback_data' => '/get'])
)
->row(
Keyboard::inlineButton(['text' => 'Отложенные', 'callback_data' => 'Данные сохранены']),
Keyboard::inlineButton(['text' => 'Редактировать', 'callback_data' => 'Данные не сохранены'])
)
->row(
Keyboard::inlineButton(['text' => 'Опубликовать', 'callback_data' => 'Данные сохранены']),
Keyboard::inlineButton(['text' => 'Назад', 'callback_data' => 'Данные не сохранены'])
);
$keyboard_get_new = Keyboard::make()
->inline()
->row(
Keyboard::inlineButton(['text' => 'Библиотеку программиста', 'callback_data' => ''])
)
->row(
Keyboard::inlineButton(['text' => 'Назад', 'callback_data' => ''])
);
switch ($bot->getText()) {
case "/start":
$bot->sendMessage([
'chat_id' => $bot->getChatId(),
'text' => $bot->getUsername()
]);
$db->store($bot->getFirstName(), $bot->getUsername(), $bot->getChatId());
break;
case "/help":
$bot->sendMessage([
'chat_id' => $bot->getChatId(),
'text' => $message,
'reply_markup' => $keyboard_default,
'one_time_keyboard' => true
]);
break;
default:
$bot->sendMessage([
'chat_id' => $bot->getChatId(),
'text' => 'Я не понимаю, о чём вы'
]);
break;
}
$result = $bot->getWebhookupdate();
if ($result->isType('callback_query')) {
$query = $result->getCallbackQuery();
$data = $query->getData();
$chid = $query->getFrom()->getId();
switch ($data) {
case "get.show":
$bot->sendMessage([
'chat_id' => $chid,
'text' => 'Here is the callback: ' . $data,
'reply_markup' => $keyboard_get_new
]);
break;
}
}
Я пытался получать callback_data по-разному, но ничего из этого не помогло:
1. $this->getWebhookUpdate()->getCallbackQuery()->getData();
2. $this->getWebhookUpdate()["callback_query"]["data"]
Второй способ я проверял потому, что, например, имя, username, chat_id и текст я могу получить точно таким же способом -- сначала вызвав getWebhookUpdate(), а потом обращаться к данным, как к ключам массива. Способ не помог.
3. Использовал php://input, доставал оттуда данные и проч. Не помог способ.
Подскажите, наконец, пожалуйста, как мне получить callback_data.