Задать вопрос
@AlexSer

Как создать клавиатуру в телеграм бот с call_back?

Установил пакет "telegram-bot-php/core".
Столкнулся с проблемай вызова call_back.
Предпологаю что проблема с генерации кнопки, но у меня что-то не получается.
Вот код:
$update = \TelegramBot\Telegram::getUpdate();
$message = $update->getMessage();
$chatId = $message->getChat()->getId();
$clientName=$message->getFrom()->getFirstName();
$clientId=$message->getFrom()->getId();
$messageId = $message->getMessageId();


$document = $message->getDocument();

$callback=$update->getCallbackQuery();
$callbackData=$callback->getData();

$inlineKeyboard = Keyboard::make();
$inlineKeyboard->addRow([
    \TelegramBot\Entities\InlineKeyboardButton::make('test')->setCallbackData('test_callback')
]);
    TelegramBot\Request::sendMessage([
        'chat_id' => $chatId,
        'text' => "Вы нажали:{$callbackData}",
        'reply_markup' => $inlineKeyboard, 
    ]);

Кнопка появляется, но нажатие отрабатывается как сообщение. Спрашивал GPT, так он приводит примеры из других пакетов, которые не подходят.
Кто знает может, я что-то делаю не так. Но мне кажется проблема в генерации клавиатуры.
  • Вопрос задан
  • 102 просмотра
Подписаться 1 Простой 11 комментариев
Помогут разобраться в теме Все курсы
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
  • Skillbox
    Профессия PHP-разработчик с нуля до PRO
    7 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 1
W1DO_DIGITAL
@W1DO_DIGITAL
Senior Tech Lead | AI Solution Architect | Founder
Проблема заключается в том, что вы пытаетесь обработать callback_query в том же блоке кода, где получаете обычное сообщение через getMessage, из-за чего переменные для ответа инициализируются некорректно при нажатии кнопки. Вам необходимо добавить проверку типа входящего обновления через метод update->isType('callback_query') и извлекать chatId и messageId непосредственно из объекта callback_query, так как при его получении метод getMessage может возвращать null или старые данные. Также убедитесь, что вы отправляете ответ на callback через метод answerCallbackQuery, чтобы Telegram перестал отображать индикатор загрузки на кнопке у пользователя.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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