Как сделать кнопки в телеграм?
В телеграм боте сейчас 3 кнопки, по клику пишут в чат простой текст. Как сделать 4 кнопки, но расположить их по 2 в ряд? И по клику по первой кнопке /help вывести еще 4 кнопки, типа многоуровнего меню.
$data = file_get_contents('php://input');
$data = json_decode($data, true);
if (empty($data['message']['chat']['id'])) {
exit();
}
define('TOKEN', '7444555:AAHomfgjN0mM');
// Функция вызова методов API.
function sendTelegram($method, $response)
{
$ch = curl_init('https://api.telegram.org/bot' . TOKEN . '/' . $method);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $response);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, false);
$res = curl_exec($ch);
curl_close($ch);
return $res;
}
// Ответ на текстовые сообщения.
if (!empty($data['message']['text'])) {
$text = $data['message']['text'];
$keyboard = [
[ "/start" ],
[ "/help" ],
[ "Кнопка 3" ]
];
$reply_markup = json_encode([
"keyboard"=>$keyboard,
"resize_keyboard"=>true
]);
// Команда /start.
if (mb_stripos($text, '/start') !== false) {
sendTelegram(
'sendMessage',
array(
'chat_id' => $data['message']['chat']['id'],
'text'=>'Добро пожаловать в бота! /help /photo',
'reply_markup'=>$reply_markup
)
);
exit();
}
if (mb_stripos($text, '/help') !== false) {
sendTelegram(
'sendMessage',
array(
'chat_id' => $data['message']['chat']['id'],
'text' => 'Помощь!'
)
);
exit();
}
// Отправка фото.
if (mb_stripos($text, '/photo') !== false) {
sendTelegram(
'sendPhoto',
array(
'chat_id' => $data['message']['chat']['id'],
'photo' => curl_file_create(__DIR__ . '/img/edem.jpg'),
'caption' => "Подпись к изображению",
'parse_mode' => 'HTML',
)
);
exit();
}
}
Ответы (1 шт):
Автор решения: Арсен
→ Ссылка
Вам нужно использовать inline_keyboard:
$keyboard = [];
$keyboard[] = [['text' =>'Название кнопки', 'callback_data' => 'button_1']];
text - Название кнопки
callback_data - ключ, который будет отправлен вам при нажатии (или /command - которая будет выполнена)
Для размещения кнопок по горизонтали можете сделать так:
$keyboard[] = [['text' =>'Название кнопки', 'callback_data' => 'button_1'],['text' =>'Название кнопки 2', 'callback_data' => 'button_2']];
$replyMarkup = [
'inline_keyboard' => $keyboard
];
При нажатии на /help вам нужно обработать это действие и возвратить пользователю второй подготовленный набор inline_keyboard
Сам запрос, это как пример
sendTelegram('sendMessage', [
'chat_id' => 'your_chat_id',
'text' => 'Сообщение',
'reply_markup' => json_encode($replyMarkup),
'parse_mode' => 'HTML'
]);
UPD
Для добавления кнопок в 'футере' можно сделать так:
$keyboard = [
'keyboard' => [
[['text' => 'Кнопка 1'], ['text' => 'Кнопка 2']],
[['text' => 'Кнопка 3'], ['text' => 'Кнопка 4']]
],
'resize_keyboard' => true, // Изменяем размер под количество кнопок
'one_time_keyboard' => false // Оставляем клавиатуру после нажатия
];
$data = [
'chat_id' => $chat_id,
'text' => 'Выберите действие:',
'reply_markup' => json_encode($keyboard)
];
