Telegram bot menu php

Создание Telegram бота на PHP: Кнопки в телеграм боте. Урок 6

Изучая тему «Создание Telegram бота на PHP», мы уже научились делать так, чтобы в ответ на определённое сообщение, или команду, бот отправлял в чат текстовые сообщения, файлы, картинки и видео.

Но для более лучшего взаимодействия с пользователем, иногда лучше разработать меню, или кнопки. Так человеку не придётся запоминать и набирать команды для бота вручную. Ему будет достаточно выбрать тот вариант, который его интересует и кликнуть по кнопке, или по нужному пункту меню.

В этом уроке мы рассмотрим пример создания кнопок в Telegram боте на PHP и объединим весь тот код, который изучили ранее. То есть, мы научим нашего бота отправлять пользователю текстовое сообщение, файл, картинку, или видео, если он нажмет на ту или иную кнопку.

Создание меню из кнопок в Telegram

Для создания кнопочного меню в Телеграм боте можно написать следующий код:

 // кнопки меню (2 ряди по 2 кнопки) $keyboard = [ [ ['text' => 'Кнопка 1'], ['text' => 'Кнопка 2'], ], [ ['text' => 'Кнопка 3'], ['text' => 'Кнопка 4'], ] ]; $reply_markup = json_encode(["keyboard"=>$keyboard,"resize_keyboard"=>true]); // Відповідь на текстове повідомлення // Отримуємо текст, який відправив користувач Телеграм боту в месенджері if (!empty($data['message']['text'])) < $text = $data['message']['text']; // Виводимо кнопки в Telegram, якщо користувач ввів команду /menu if (mb_stripos( $text, '/start') !== false) < sendTelegram( 'sendMessage', ['chat_id'=>$data['message']['chat']['id'], 'text'=>'Це кнопкове Меню бота', 'reply_markup'=>$reply_markup ] ); exit(); > > ?>

Здесь, мы создаём кнопки, которые нужно показать пользователю в Телеграм, этим фрагментом кода:

// кнопки меню (2 ряди по 2 кнопки) $keyboard = [ [ ['text' => 'Кнопка 1'], ['text' => 'Кнопка 2'], ], [ ['text' => 'Кнопка 3'], ['text' => 'Кнопка 4'], ] ]; $reply_markup = json_encode(["keyboard"=>$keyboard,"resize_keyboard"=>true]);

А отправляем эти кнопки Телеграм боту, вот этой строкой кода:

Читайте также:  Php store object in file

Реакция на нажатие кнопок Телеграм бота

Теперь давайте сделаем так, чтобы если человек нажмёт на кнопку, то в ответ ему приходило какое-нибудь сообщение. Например, «Вы нажали на кнопку 1», «Вы нажали на кнопку 2» и т.д.

Когда человек нажимает на кнопку №1, то боту отправляется сообщение «Кнопка 1». Соответственно, мы можем отследить текст этого сообщения и в ответ прислать свой текст (это мы уже проходили в уроке №2 «Отправка и получение сообщений»).

Пример кода

if (!empty($data['message']['text'])) < $text = $data['message']['text']; // Виводимо кнопки в Telegram, якщо користувач ввів команду /menu if (mb_stripos( $text, '/start') !== false) < sendTelegram( 'sendMessage', ['chat_id'=>$data['message']['chat']['id'], 'text'=>'Це кнопкове Меню бота', 'reply_markup'=>$reply_markup ] ); exit(); > else if (mb_stripos( $text, 'Кнопка 1') !== false) < sendTelegram( 'sendMessage', array( 'chat_id' =>$data['message']['chat']['id'], 'text' => 'Ви натиснули кнопку №1' ) ); exit(); > >

То есть мы взяли код из нашего урока по отправке и получению сообщений Телеграм боту (см. Урок №2) и подставили его в конструкцию If…Then…Else If.

Таким же образом давайте сделаем с получением картинок, файлов и видео. Но предварительно давайте поменяем название наших кнопок на «Send text», «Send picture», «Send file» и «Send video». Так будет намного понятнее для чего предназначена каждая из этих кнопок.

Итоговый код Телеграм бота

 // кнопки меню (2 ряди по 2 кнопки) $keyboard = [ [ ['text' => 'Send text'], ['text' => 'Send picture'], ], [ ['text' => 'Send file'], ['text' => 'Send video'], ] ]; $reply_markup = json_encode(["keyboard"=>$keyboard,"resize_keyboard"=>true]); // Відповідь на текстове повідомлення // Отримуємо текст, який відправив користувач Телеграм боту в месенджері if (!empty($data['message']['text'])) < $text = $data['message']['text']; // Виводимо кнопки в Telegram, якщо користувач ввів команду /menu if (mb_stripos($text, '/start') !== false) < sendTelegram( 'sendMessage', ['chat_id'=>$data['message']['chat']['id'], 'text'=>'Це кнопкове Меню бота', 'reply_markup'=>$reply_markup ] ); exit(); > else if (mb_stripos($text, 'Send text') !== false) < sendTelegram( 'sendMessage', array( 'chat_id' =>$data['message']['chat']['id'], 'text' => 'Це текст який ви просили.' ) ); exit(); > else if (mb_stripos($text, 'Send picture') !== false) < sendTelegram( 'sendPhoto', array( 'chat_id' =>$data['message']['chat']['id'], 'photo' => curl_file_create(__DIR__ . '/foto-ua.jpg') ) ); exit(); > else if (mb_stripos($text, 'Send file') !== false) < sendTelegram( 'sendDocument', array( 'chat_id' =>$data['message']['chat']['id'], 'document' => curl_file_create(__DIR__ . '/myFile.xlsm') ) ); exit(); > else if (mb_stripos($text, 'Send video') !== false) < sendTelegram( 'sendVideo', array( 'chat_id' =>$data['message']['chat']['id'], 'video' => curl_file_create(__DIR__ . '/video.mp4') ) ); exit(); > > ?>

Теперь, если пользователь нажмёт на соответствующую кнопку, то от Telegram бота он получит текстовое сообщение, файл, картинку, или видео.

То же самое будет происходить, если человек отправит текстовые сообщения боту в чате: «Send text», «Send picture», «Send file», «Send video».

Данный код получился достаточно громоздким. И намного проще было бы использовать конструкцию Switch Case для проверки условий. Но я выбрал именно такой вариант (конструкцию If Then Else If), поскольку я считаю, что такой способ записи кода намного понятнее новичкам, которые начали программировать с нуля.

Те же, кто разбираются в программировании, легко смогут преобразовать тот пример, который я вам предоставил, в PHP код с конструкцией Switch Case.

Вас может заинтересовать

Источник

Добавляем пункты меню в Телеграм бота на PHP

В продолжении предыдущей статьи «Как создать простого бота для Телеграм на PHP», представляем вам продолжение данной темы: «Как добавить меню в простого Телеграм бота на PHP».

Добавляем пункты меню в Телеграм бота на PHP

Итак, бота вы уже сделали, благодаря предудущей статье. Будем использовать код из этой статьи, который вы можете скачать тут: verysimple_bot.zip (2 Kb).

Для этого перепишем функцию отправки сообщения от бота message_to_telegram

  1. Для вывода меню снизу сообщения бота, нужно при каждой передачи сообщения от бота в диалог, передавать массив $reply_markup в формате json.
  2. Мы будем использовать тип меню, который привязан к сообщению, поэтому и нужно передавать каждый раз, а бывает меню привязанное ко всему диалогу.
  3. При этом будем выводить меню по-умолчанию, если мы не передали массив.
  4. Это нужно для организации меню второго уровня.
  5. Сделаем это на примере входа в раздел Услуги и там выведем подменю в виде нескольких услуг.
  6. Общее меню будет: О нас, Услуги, Контакты, Заявка
  7. Меню раздела Услуги будет содержать: Услуга 1, Услуга 2
  8. При этом при нажатии на меню будет происходить передача команды в диалог бота, например при нажатии на «О нас» будет передана команда /about — это наиболее простой способ организации диалогового меню.
 function message_to_telegram($bot_token, $chat_id, $text, $reply_markup = '') < $ch = curl_init(); if ($reply_markup == '') < $btn[] = ["text"=>"О нас", "callback_data"=>'/about']; $btn[] = ["text"=>"Услуги", "callback_data"=>'/srv']; $btn[] = ["text"=>"Контакты", "callback_data"=>'/contact']; $btn[] = ["text"=>"Заявка", "callback_data"=>'/order']; $reply_markup = json_encode(["keyboard" => [$btn], "resize_keyboard" => true]); > $ch_post = [ CURLOPT_URL => 'https://api.telegram.org/bot' . $bot_token . '/sendMessage', CURLOPT_POST => TRUE, CURLOPT_RETURNTRANSFER => TRUE, CURLOPT_TIMEOUT => 10, CURLOPT_POSTFIELDS => [ 'chat_id' => $chat_id, 'parse_mode' => 'HTML', 'text' => $text, 'reply_markup' => $reply_markup, ] ]; curl_setopt_array($ch, $ch_post); curl_exec($ch); > 

Теперь перепишем бота, добавив обработку меню бота

  1. В частности выведем раздел Услуги и подменю в нем.
  2. И дополним обработку вывода текста по Услуга 1 и Услуга 2.
/** * Very simple chat bot @verysimple_bot_menu by Novelsite.ru * + menu * 22.06.2022 */ header('Content-Type: text/html; charset=utf-8'); // на всякий случай досообщим PHP, что все в кодировке UTF-8 $site_dir = dirname(dirname(__FILE__)).'/'; // корень сайта $bot_token = '1234567899:AAKJhkkjhkjhKhKhjkhkhk_kJhgkjhJhgjghjhG'; // токен вашего бота $data = file_get_contents('php://input'); // весь ввод перенаправляем в $data $data = json_decode($data, true); // декодируем json-закодированные-текстовые данные в PHP-массив $order_chat_id = '123456789'; //chat_id менеджера компании для заявок $bot_state = ''; // состояние бота, по-умолчанию пустое // Для отладки, добавим запись полученных декодированных данных в файл message.txt, // который можно смотреть и понимать, что происходит при запросе к боту // Позже, когда все будет работать закомментируйте эту строку: file_put_contents(__DIR__ . '/message.txt', print_r($data, true)); // Основной код: получаем сообщение, что юзер отправил боту и // заполняем переменные для дальнейшего использования if (!empty($data['message']['text'])) < $chat_id = $data['message']['from']['id']; $user_name = $data['message']['from']['username']; $first_name = $data['message']['from']['first_name']; $last_name = $data['message']['from']['last_name']; $text = trim($data['message']['text']); $text_array = explode(" ", $text); // получим текущее состояние бота, если оно есть $bot_state = get_bot_state ($chat_id); // если текущее состояние бота отправка заявки, то отправим заявку менеджеру компании на $order_chat_id if (substr($bot_state, 0, 6) == '/order') < $text_return = " Заявка от @$user_name: Имя: $first_name $last_name $text "; message_to_telegram($bot_token, $order_chat_id, $text_return); set_bot_state ($chat_id, ''); // не забудем почистить состояние на пустоту, после отправки заявки >// если состояние бота пустое -- то обычные запросы else < // вывод информации Помощь if ($text == '/help') < $text_return = "Привет, $first_name $last_name, вот команды, что я понимаю: /help - список команд /about - о нас /order - оставить заявку "; message_to_telegram($bot_token, $chat_id, $text_return); set_bot_state ($chat_id, '/help'); >// вывод информации о нас elseif ($text == '/about') < $text_return = "verysimple_bot: Я пример самого простого бота для телеграм, написанного на PHP. Мой код можно скачивать, дополнять, исправлять. Код доступен в этой статье: https://www.novelsite.ru/kak-sozdat-prostogo-bota-dlya-telegram-na-php.html также есть дополнение статиь про добавление пунктов меню в бота: https://www.novelsite.ru/dobavlyaem-punkty-menyu-telegram-bota-na-php.html "; message_to_telegram($bot_token, $chat_id, $text_return); set_bot_state ($chat_id, '/about'); >// вывод информации об услугах и подменю elseif ($text == '/srv') < $num = (int)$text_array[array_key_last($text_array)]; if ($num == 1) < $ret = ["text"=>"⬅️ Вернуться", "callback_data"=>'/srv'],; $text_return = "Услуга 1: --------------------- Текст об услуга 1 услуга 1 услуга 1 услуга 1 услуга 1 услуга 1 услуга 1. "; > elseif ($num == 2) < $ret = ["text"=>"⬅️ Вернуться", "callback_data"=>'/srv'],; $text_return = "Услуга 2: --------------------- Текст об услуга 2 услуга 2 услуга 2 услуга 2 услуга 2 услуга 2 услуга 2. "; > else < $ret = []; $text_return = "Услуги: --------------------- 1. Услуга 1 2. Услуга 2 "; > $reply_markup = json_encode([ "inline_keyboard" => [ [ ["text"=>"Услуга 1", "callback_data"=>'/srv 1'], ["text"=>"Услуга 2", "callback_data"=>'/srv 2'], ], $ret, ] ]); message_to_telegram($bot_token, $chat_id, $text_return, $reply_markup); set_bot_state ($chat_id, '/srv'); > // переход в режим Заявки elseif ($text == '/order') < $text_return = "$first_name $last_name, для подтверждения Заявки введите текст вашей заявки и нажмите отправить. Наши специалисты свяжутся с вами в ближайшее время! "; message_to_telegram($bot_token, $chat_id, $text_return); set_bot_state ($chat_id, '/order'); >> > // функция отправки сообщения от бота в диалог с юзером function message_to_telegram($bot_token, $chat_id, $text, $reply_markup = '') < $ch = curl_init(); if ($reply_markup == '') < $btn[] = ["text"=>"О нас", "callback_data"=>'/about']; $btn[] = ["text"=>"Услуги", "callback_data"=>'/srv']; $btn[] = ["text"=>"Контакты", "callback_data"=>'/contact']; $btn[] = ["text"=>"Заявка", "callback_data"=>'/order']; $reply_markup = json_encode(["keyboard" => [$btn], "resize_keyboard" => true]); > $ch_post = [ CURLOPT_URL => 'https://api.telegram.org/bot' . $bot_token . '/sendMessage', CURLOPT_POST => TRUE, CURLOPT_RETURNTRANSFER => TRUE, CURLOPT_TIMEOUT => 10, CURLOPT_POSTFIELDS => [ 'chat_id' => $chat_id, 'parse_mode' => 'HTML', 'text' => $text, 'reply_markup' => $reply_markup, ] ]; curl_setopt_array($ch, $ch_post); curl_exec($ch); > // сохранить состояние бота для пользователя function set_bot_state ($chat_id, $data) < file_put_contents(__DIR__ . '/users/'.$chat_id.'.txt', $data); >// получить текущее состояние бота для пользователя function get_bot_state ($chat_id) < if (file_exists(__DIR__ . '/users/'.$chat_id.'.txt')) < $data = file_get_contents(__DIR__ . '/users/'.$chat_id.'.txt'); return $data; >else < return ''; >> 

P.S. Для текста в кнопках меню бота можно использовать Эмодзи. Не все корректно работают, но многие общеупотребительные работают правильно. Вставлять обычным образом копи-паст, а искать в интренете поиском например так: «Эмодзи для сайта».

Николай Комарков

Источник

Создание Telegram бота на PHP: Создание меню для Телеграм бота. Урок 7

Наверняка вы уже видели в каком-нибудь чат-боте кнопку «Меню», нажав которую можно посмотреть список доступных команд для этого бота.

меню для телеграм бота

Такое меню называется командным и создаётся оно очень просто.

Как создать меню для Телеграм бота пошагово

1. Первое что нужно сделать – перейти к BotFather (сервис Телеграма с помощью которого мы создавали своего чат-бота) и послать ему в чате команду /setcommands, которая используется для показа списка всех наших ботов.

Telegram bot создание меню

2. Теперь нужно выбрать бота, для которого мы будем создавать меню.

телеграм бот с меню

3. Следующий шаг – отправка списка команд, которые нужно добавить в Меню нашего бота. Список составляется в таком формате:

создать телеграм бот с меню

Если вы всё сделали правильно, то после отправки списка команд, получите сообщение «Success! Command list updated. /help», в котором говорится, что список команд успешно обновлён.

Чтобы изменения вступили в силу и Меню отобразилось, нужно перезапустить приложение Telegram.

Теперь, если перейти в чат с нашим ботом, рядом с текстовым полем в которое мы вводим сообщения, должна появиться кнопка «Меню».

создать меню бота

Команды должны быть написаны только строчными буквами (символами нижнего регистра) без косой черты.

Между командой и её описанием должен быть указан дефис «-». Если вы введёте пробел, или какой-нибудь другой символ, то это будет ошибкой и BotFather ничего не создаст.

Слева и справа знака «-» (дефис) должны быть пробелы.

Вас может заинтересовать

Источник

Оцените статью