Клавиатура для бота телеграм


Я уже писал о том, как сделать бота для телеграм на PHP и Java. При этом наш бот может как сам отправлять сообщения, так и реагировать на команды. В последнем случае команды – это просто текстовые сообщения, что не всегда удобно. Гораздо чаще удобнее просто ткнуть кнопку с командой (или для перехода в меню). Сделать эти кнопки несложно.



Итак, подразумевается, что вы уже ознакомились с данной заметкой и создали своего первого (ну или не первого) бота для телеграм на PHP. Теперь требуется сделать этого бота более комфортным для работы/общения – с помощью клавиатуры.

Если посмотреть официальную документацию, то можно увидеть, что есть 4 типа reply_markup
  • InlineKeyboardMarkup
  • ReplyKeyboardMarkup
  • ReplyKeyboardRemove
  • ForceReply
Это дополнительные возможности интерфейса. Сериализованный в формате JSON объект для встроенной клавиатуры, настраиваемой клавиатуры ответа, инструкций по удалению клавиатуры ответа или принудительного ответа от пользователя.

Начнем с инлайновой клавиатуры. А вообще нет, лучше начнем с создания метода, который будет отправлять сообщения. Причем как обычные, так и содержащие эту самую инлайновую клавиатуру. Вот она

function sendMessage($tg_chat_id, $message, $keyboard = "") {
	global $token;
	$response = array(
		'chat_id' => $tg_chat_id,
		'text' => $message,
		'parse_mode' => "HTML"		
	);
	
	if ($keyboard){
		$arr = array('reply_markup' => json_encode($keyboard, TRUE));
		$response = array_merge($response, $arr);
	}	
	
	$ch = curl_init('https://api.telegram.org/bot' . $token . '/sendMessage');  
	curl_setopt($ch, CURLOPT_POST, 1);  
	curl_setopt($ch, CURLOPT_POSTFIELDS, $response);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	curl_setopt($ch, CURLOPT_HEADER, false);
	curl_exec($ch);
	curl_close($ch);
}
На вход принимаем чат ид, сообщение и клавиатуру (последний параметр необязателен). В самом методе создаем массив из значений, если есть, то суем туда и клавиатуру, предварительно переведенную в формат json.

А теперь само создание клавиатуры с кнопками «да» и «нет»:

$button_yes = array('text' => 'Да', 'callback_data' => '/yes');
$button_no = array('text' => 'Нет', 'callback_data' => '/no');
$keyboard = array('inline_keyboard' => array(array($button_yes, $button_no)));
sendMessage($chat_id, "Вы любите пиццу?", $keyboard);
Тут все просто: создаем кнопки, создаем из них клавиатуру и отправляем вместе с вопросом. Вы спросите, а что за ссылки «/yes» «/no»? А это так называемые колбэки – в данном случае под этим термином подразумеваются те данные, которые отправляются обратно при нажатии соответствующей кнопки. Их надо отлавливать и обрабатывать. Например, так

$postData = file_get_contents('php://input');
$data = json_decode($postData, true);

$inline_id = $data["callback_query"]["message"]["chat"]["id"];
$callback = $data["callback_query"]["data"];
Ну и дальше уже идет ветвление в зависимости от того, какой колбэк вы получили. Вот так просто можно создать кнопки прямо в боте телеграм.
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

тегизаметки, php, telegram




Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.




Урок 23. Минимальная оценка JavaScript
Нейронная сеть, распознающая рукописные символы, или помощь в компиляции проекта Java/C++
Урок 11. Перегрузка реляционного оператора C#