Понимаю, что уже не актуально, но вот совсем недавно нужно было писать еще одного бота на этой же библиотеке. Я воспользовался своим старым "скелетом":
require_once( dirname(__FILE__) . '/vendor/autoload.php');
use Telegram\Bot\Commands\Command;
use Telegram\Bot\Keyboard\Keyboard;
class TelegaBot {
public $chat = array();
public $chat_id;
public $message;
public $telegram;
public $lastCommand = '';
public $text;
public $reply;
public $keyboard = array();
function __construct()
{
$this->telegram = new Telegram\Bot\Api('XXXXXXXXXXXXXXXXXXXXX');
$this->update = $this->telegram->getWebhookUpdates();
if ( isset($this->update['callback_query'])) {
$this->message = $this->update['callback_query'];
} else {
$this->message = $this->update;
}
$this->chat_id = $this->message['message']['chat']['id'];
$this->text = $this->message["message"]["text"];
if ($this->chat_id) {
$this->chat['username'] = $this->message['message']['from']['username'];
$this->chat['name'] = $this->message['message']['from']['first_name'];
// если передается команда, то запоминаем её
if ( preg_match('|/([a-z0-9_]{3,})|is', $this->text, $buff) and trim($buff[1]) != '') {
$this->lastCommand = $buff[1];
}
// ловин нажатие по кнопке:
if (isset($this->update['callback_query'])) {
if ($this->message['data']) {
$this->lastCommand = $this->message['data'];
}
}
}
if ($this->lastCommand) {
$method = 'cmd_' . $this->lastCommand;
if (method_exists('TGBot', $method)) {
call_user_func(array($this, $method));
} else {
$this->reply = "Что-то не припомню такой команды :=)\n\nПожалуйста, пользуйтесь кнопками в моих сообщениях или если вдруг чувствуете, что я начал подглюкивать сообщите об этом моему разработчику...";
}
}
private function cmd_start()
{
$this->keyboard = [
[
Keyboard::inlineButton(['text' => 'Кнопка 1', 'callback_data' => 'button1']),
Keyboard::inlineButton(['text' => 'Кнопка 2', 'callback_data' => 'button2'])
]
];
return $this->sendMessage();
}
public function cmd_button1()
{
// функционал реакции бота на нажатия кнопки 1
}
public function sendMessage()
{
$data = array(
'chat_id' => chat_id,
'text' => $this->reply,
);
if (count($this->keyboard) and is_array($this->keyboard)) {
$data['reply_markup'] = $this->telegram->replyKeyboardMarkup([
'inline_keyboard' => $this->keyboard,
'resize_keyboard' => true,
'one_time_keyboard' => true,
]);
}
$this->telegram->sendMessage($data);
}
весь код класса не привожу, но самое главное что в callback_query я не пишу слэши перед командами если заметили:
Keyboard::inlineButton(['text' => 'Кнопка 1', 'callback_data' => 'button1']),
мне так удобнее отличать команду от нажатия на кнопку ) хотя по сути это тоже команда )