Сначала я разобрался с ошибкой в вебхуке - причину ее возникновения я не нашел, так как в файле поле description отсутствовало, следовательно из-за чего конкретно вылезала ошибка было трудно понять. Я заменил функцию отправки сообщений на другую:
function sendRequest($method, $post = '') {
$ch = curl_init('https://api.telegram.org/bot' . BOT_TOKEN . '/' . $method);
if ($post) {
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
}
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
Она работает так же и ошибок не вызывает.
Затем я разобрался с обработкой кнопок, точнее их обратных запросах (callback_query/callback_data). Я создал два файла - data, где я получаю chat_id, message, message_id, это мне нужно для отправки первичных сообщений (по типу приветствия, команд). Затем создал файл callback_query, куда поместил следующие строки -
<?php
$data = json_decode(file_get_contents('php://input'));
$callback_query = $data->callback_query;
$callback_query_id = $callback_query->id;
$callback_data = $callback_query->data;
$from = $callback_query->from;
$user_id = $from->id;
$username = $from->username;
$message = $callback_query->message;
$message_id = $message->message_id;
$callback_message_text = $message->text;
$chat = $message->chat;
$chat_id = $chat->id;
$inline_message_id = $callback_query->inline_message_id;
С помощью них можно получать обратный запрос от нажатия на кнопки. Мой основной код стал выглядеть следующим образом:
<?php
include 'config.php'; // Токен бота
include 'functions.php'; // Основные функции
include 'data.php'; // Получение данных
// Делается запрос
$method = 'setWebhook';
$url = 'https://api.telegram.org/bot' . BOT_TOKEN . '/' . $method;
$options = [
'url' => 'https://example.ru/bot.php'
];
// То, что возвращается из запроса
$response = file_get_contents($url . '?' . http_build_query($options));
var_dump($response);
if (strpos($message, "/help") === 0) { // Команда /help
$post = [
'chat_id' => $chat_id,
'text' => 'Эта памятка создана для объяснения различных барменских
терминов, посуды',
$help_buttons = [
[['text' => 'Термины ', 'callback_data' => 'terms']],
[['text' => 'Посуда / Штучки ', 'callback_data' => 'dishes']]
],
'reply_markup' => inline_keyboard($help_buttons)
];
sendRequest('sendMessage', $post);
} else {
// Начальное сообщение
$post = [
'chat_id' => $chat_id,
'text' => 'Давай определимся с категорией коктейлей:',
$main_menu = [
[['text' => 'Незабываемые ♾', 'callback_data' => 'the_unforgettables']],
[['text' => 'Современная Классика ', 'callback_data' => 'contemporary_classic']],
[['text' => 'Напитки Новой Эры ', 'callback_data' => 'new_era_drinks']]
],
'reply_markup' => inline_keyboard($main_menu)
];
sendRequest('sendMessage', $post);
}
include 'callback_query.php'; // Получение обратных запросов
switch ($callback_data) {
case 'the_unforgettables':
$post = [
'chat_id' => $chat_id,
'message_id' => $message_id,
'text' => 'Отлично, теперь выбери любой коктейль из списка:',
$InlineTheUnforgettables = [
[['text' => 'Negroni', 'callback_data' => 'negroni']],
[['text' => 'Manhattan', 'callback_data' => 'manhattan']],
[['text' => 'Americano', 'callback_data' => 'americano']],
[['text' => 'Daikiri', 'callback_data' => 'daiqiri']],
[['text' => 'Old Fashioned', 'callback_data' => 'old_fashioned']],
[['text' => 'Ramos Fizz', 'callback_data' => 'ramos_fizz']],
[['text' => 'Clover Club', 'callback_data' => 'clover_club']],
[['text' => 'Gin Fizz', 'callback_data' => 'gin_fizz']],
[['text' => 'Vieux Carre', 'callback_data' => 'vieux_carre']],
[['text' => 'Sazerac', 'callback_data' => 'sazerac']]
],
'reply_markup' => inline_keyboard($InlineTheUnforgettables),
];
sendRequest('editMessageText', $post);
break;
}