На нашем сайте мы используем cookie для сбора информации технического характера и обрабатываем IP-адрес вашего местоположения. Продолжая использовать этот сайт, вы даете согласие на использование файлов cookies. Здесь вы можете узнать, как мы пользуемся файлами cookies.
Я согласен
логотип upread.ru

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



Я уже писал о том, как сделать бота для телеграм на 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

Читайте также:




Файлы или база данных – сравним?
Округление десятичных значений в C#


© upread.ru 2013-2022
При перепечатке активная ссылка на сайт обязательна.
Задать вопрос
письмо
Здравствуйте! Вы можете задать мне любой вопрос. Если не получается отправить сообщение через эту форму, то пишите на почу up777up@yandex.ru
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.