Задать вопрос
@easycode
не боюсь задавать глупые вопросы ))

Как обработать нажатие на кнопку клавиатуры бота, созданном на Telegram Bot API — PHP SDK?

Как обработать нажатие на кнопку моей клавиатуры в TelegramBot, созданном при помощи Telegram Bot API - PHP SDK?

Имеется такой код:

$telegram = new Telegram\Bot\Api('MY_KEY'); 
        
$message = $telegram->getWebhookUpdates();

$chatId = $message['message']['chat']['id'];

$keyboard = array(
    array(array('callback_data'=>'/butt1','text'=>'Кнопка 1')),
    array(array('callback_data'=>'/buut2','text'=>'Кнопка 2')),
);

$reply_markup = $telegram->replyKeyboardMarkup([ 
    'keyboard' => $keyboard, 
    'resize_keyboard' => true, 
    'one_time_keyboard' => false 
]);


$telegram->sendMessage(array(
	'chat_id' => $chatId,
    'text' => 'Нажмите на одну из кнопок:',
    'reply_markup' => $reply_markup,
));


Как мне отловить, например, нажатие кнопки: "Кнопка 1", с командой: /butt1 ???
  • Вопрос задан
  • 8133 просмотра
Подписаться 4 Средний Комментировать
Решения вопроса 1
@easycode Автор вопроса
не боюсь задавать глупые вопросы ))
Как я понял в версии 2.2 этой библиотеки можно использовать только обычные текстовые кнопки без callback_data - для передачи которого нужно использовать inline кнопки.

1) Нужно обновится до dev-версии, если через composer то вот так:
composer require irazasyed/telegram-bot-sdk:dev-master

2) Далее код несколько меняется:
<?php

use Telegram\Bot\Commands\Command;
use Telegram\Bot\Keyboard\Keyboard;

$telegram = new Telegram\Bot\Api('MY_KEY'); 
        
$update = $telegram->getWebhookUpdates();

// данные сообщения в зависимости от callback_query
if ( isset($this->update['callback_query'])) {
    $message = $update['callback_query'];
} else {
    $message = $update;
}

$chatId = $message['message']['chat']['id'];

// правильно формируем клавиатуру:
$keyboard = [
    [
        Keyboard::inlineButton(['callback_data'=>'/butt1','text'=>'Кнопка 1']),
        Keyboard::inlineButton(['callback_data'=>'/buut2','text'=>'Кнопка 2'])
    ]
];

$reply_markup = $telegram->replyKeyboardMarkup([ 
    // 'keyboard' => $keyboard, // вместо этого используем:
    'inline_keyboard' => $keyboard,
    'resize_keyboard' => true, 
    'one_time_keyboard' => false 
]);


// если нажали кнопку:
if ( isset($this->update['callback_query'])) {
	$telegram->sendMessage(array(
	  'chat_id' => $chatId,
	    'text' => "Вы нажали на кнопку с кодом: " . $message['data'], // именно в $message['data'] - будет то что прописано у нажатой кнопки в качестве callback_data
	    'reply_markup' => $reply_markup,
	));
} else {
	$telegram->sendMessage(array(
	  'chat_id' => $chatId,
	    'text' => 'Нажмите на одну из кнопок:',
	    'reply_markup' => $reply_markup,
	));
}


Может кому-нибудь еще пригодится )
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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