@Kafkiansky

Как получить значение callback_data в библиотеке telegram bot sdk?

Дублирую вопрос, потому что никто так и не ответил, а мне очень нужно.

Есть 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.
  • Вопрос задан
  • 1464 просмотра
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы