Father bot Telegram кнопка под постом

Изучая тему «Создание 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(); > > ?>

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

what is botfather in Telegram #shorts


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

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

‘reply_markup’=>$reply_markup

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

Теперь давайте сделаем так, чтобы если человек нажмёт на кнопку, то в ответ ему приходило какое-нибудь сообщение. Например, «Вы нажали на кнопку 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». Так будет намного понятнее для чего предназначена каждая из этих кнопок.

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

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

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

Примечание.

Создание простого Telegram-бота с клавиатурой и inline-кнопками [Часть 2]

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

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

Архив с обновлённой библиотекой (работает на версии php >= 8.0):

Первым делом добавляем библиотеку в свой проект и создаём php-файл, в котором, собственно, и будем писать бота. После этого необходимо подключить библиотеку:

Теперь создаём экземпляр класса Bot и инициализируем переменные $data, $chat_id и $message:

$tg = telekotBot::create( ‘токен’ ) ->initData( $data ) ->initChatId( $chat_id ) ->initMessage( $message );

Создаём массив с нужными нам кнопками:

$kbd = [ ‘inline_keyboard’ => [ [ [ ‘text’ => ‘Кнопка #1’, ‘callback_data’ => ‘one’ ], [ ‘text’ => ‘Кнопка #2’, ‘callback_data’ => ‘two’ ] ], [ [ ‘text’ => ‘ Картинка’, ‘callback_data’ => ‘img’ ] ] ] ];

Далее напишем проверку на клик по inline-кнопке. Также я добавлю блок else, в него добавим пару команд для демонстрации обновлений библиотеки:

if ( isset( $data[‘callback_query’] ) ) < // Тут будем обрабатывать нажатие на кнопки >else < // Тут будем обрабатывать обычные команды >

Стоит заметить, что всё содержимое массива $data при наличии callback_query нужно искать уже внутри callback_query ( $data[‘callback_query’][‘*а дальше уже как обычно..*’] ).

Ну, а теперь с помощью конструкции switch-case проверим, на какую из кнопок нажал юзер:

switch ( $data[‘callback_query’][‘data’] ) < case ‘one’: < $tg->sendMessage( $chat_id, ‘Вы нажали на первую кнопку’ ); break; > case ‘two’: < $tg->sendMessage( $chat_id, ‘Вы нажали на вторую кнопку’ ); break; > case ‘img’: < $tg->sendImage( ‘Держи картинку’, ‘https://proprikol.ru/wp-content/uploads/2020/10/kartinki-ozero-45.jpeg’ ); break; > >

При нажатии любую из первых двух кнопок бот просто уведомит пользователя об этом, при нажатии на третью — отправит картинку с помощью метода sendImage().

Да, как и обещал — в блок else добавляем ещё две команды:

if ( $message == ‘/привет’ ) < $tg->reply( ‘Здарова’ ); > else if ( $message == ‘/кнопки’ ) < $tg->sendMessage( $chat_id, ‘Вот твои кнопки:’, $kbd ); >

При вводе команды /кнопки — бот будет отправлять клавиатуру пользователю. При вводе команды /привет — здороваться с ним. Однако для первой команды я использовал метод reply(), а для второй — метод sendMessage(). Почему? Разница, на самом-то деле, небольшая: в метод sendMessage() необходимо передавать ID чата, а в метод reply() айди передавать не нужно (ответ придёт тому, кто написал боту). Поэтому в нашем случае, конечно же, удобнее и проще юзать reply().

Еще по теме:  Телеграмм канал подписаться с телефона Андроид как установить приложение для скачивания

initData( $data ) ->initChatId( $chat_id ) ->initMessage( $message ); $kbd = [ ‘inline_keyboard’ => [ [ [ ‘text’ => ‘Кнопка #1’, ‘callback_data’ => ‘one’ ], [ ‘text’ => ‘Кнопка #2’, ‘callback_data’ => ‘two’ ] ], [ [ ‘text’ => ‘ Картинка’, ‘callback_data’ => ‘img’ ] ] ] ]; if ( isset( $data[‘callback_query’] ) ) < switch ( $data[‘callback_query’][‘data’] ) < case ‘one’: < $tg->sendMessage( $chat_id, ‘Вы нажали на первую кнопку’ ); break; > case ‘two’: < $tg->sendMessage( $chat_id, ‘Вы нажали на вторую кнопку’ ); break; > case ‘img’: < $tg->sendImage( ‘Держи картинку’, ‘https://proprikol.ru/wp-content/uploads/2020/10/kartinki-ozero-45.jpeg’ ); break; > > > else < if ( $message == ‘/привет’ ) < $tg->reply( ‘Здарова’ ); > else if ( $message == ‘/кнопки’ ) < $tg->sendMessage( $chat_id, ‘Вот твои кнопки:’, $kbd ); > >

А вот, собственно, как работает бот:

  • 5id15
  • 10.08.2022
  • 7 583
  • 14
  • 9

Источник: kotoff.net

Создание Telegram бота на PHP #3: примеры отправки сообщений с кнопками в Telegram

В новом уроке мы с вами рассмотрим отправку базовых запросов в Telegram. Я покажу вам как отправлять простые текстовые сообщения в Telegram, как отправлять кнопки и дополнительные клавиатуры.

Всю информацию по параметрам запросов мы будем брать из официальной документации Telegram
https://core.telegram.org/bots/api/

Все ответы от Telegram приходят в виде JSON строки. Для удобного отображения массива ответа в браузере, советую вам установить специальное расширение для браузера, которое называется JSON Viewer

  • С помощью параметра text вы можете передать текст кнопки
  • параметр url указывает ссылку, если вам нужно сделать кнопку для перехода на внешний ресурс
  • параметр callback_data указывает строку которая будет возвращена после нажатия на кнопку. Данную строку используют как команду.

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

Таким образом, для создания 2 кнопок в одном ряду, мы будем использовать следующий код

. ‘reply_markup’ => json_encode(array( ‘inline_keyboard’ => array( array( array( ‘text’ => ‘Button 1’, ‘callback_data’ => ‘test_2’, ), array( ‘text’ => ‘Button 2’, ‘callback_data’ => ‘test_2’, ), ) ), )), .

Для создания 2 рядов по 2 кнопки используйте код

. ‘reply_markup’ => json_encode(array( ‘inline_keyboard’ => array( array( array( ‘text’ => ‘Button 1’, ‘callback_data’ => ‘test_2’, ), array( ‘text’ => ‘Button 2’, ‘callback_data’ => ‘test_2’, ), ), array( array( ‘text’ => ‘Button 3’, ‘callback_data’ => ‘test_3’, ), array( ‘text’ => ‘Button 4’, ‘callback_data’ => ‘test_4’, ), ) ), )), .

И для создания одной кнопки в первом ряду и 2 — во втором, используйте следующий код.

. ‘reply_markup’ => json_encode(array( ‘inline_keyboard’ => array( array( array( ‘text’ => ‘Button 2’, ‘callback_data’ => ‘test_2’, ), ), array( array( ‘text’ => ‘Button 3’, ‘callback_data’ => ‘test_3’, ), array( ‘text’ => ‘Button 4’, ‘callback_data’ => ‘test_4’, ), ) ), )), .

Еще по теме:  Как из поисковой строки удалить Телеграм

Надеюсь, я смог объяснить данную тему доступно, если у вас будут вопросы, пишите их в нашем Telegram канале.

Отправка клавиатуры в чат

Аналогичные параметры имеет и массив для отправки клавиатуры в чат. Для создания клавиатуры пропишем следующий код.

. ‘reply_markup’ => json_encode(array( ‘keyboard’ => array( array( array( ‘text’ => ‘Тестовая кнопка 1’, ‘url’ => ‘YOUR BUTTON URL’, ), array( ‘text’ => ‘Тестовая кнопка 2’, ‘url’ => ‘YOUR BUTTON URL’, ), )), ‘one_time_keyboard’ => TRUE, ‘resize_keyboard’ => TRUE, )), .

Структура массивом для кнопок та же, но только есть отличие в названиях и количестве параметров.

Ключ inline_keyboard заменяется на keyboard.

А так же для клавиатуры добавляются 2 дополнительных параметра:

  • one_time_keyboard — скрыть клавиатуру, как только она была использована. Клавиатура по-прежнему будет доступна, но клиенты будут автоматически отображать обычную, буквенную клавиатуру в чате — пользователь может нажать специальную кнопку в поле ввода, чтобы снова увидеть пользовательскую клавиатуру. Значение по умолчанию равно false.
  • resize_keyboard — изменяет размер клавиатуры по вертикали для оптимальной подгонки (например, уменьшить клавиатуру, если есть только два ряда кнопок). По умолчанию установлено значение false, и в этом случае пользовательская клавиатура всегда имеет ту же высоту, что и стандартная клавиатура приложения.
  • В новом уроке мы с вами разобрали самый популярный метод для работы с Телеграм ботами — sendMessage. Данный метод позволяет отправлять текстовые сообщения с привязанными кнопками и клавиатурами.
  • Научились удалять сообщения
  • Разобрали какие бывают типы кнопок и научились создавать массивы для гибкой структуры вывода дополнительных клавиатур и кнопок.

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

Дополнения к записи от 04.11.2022

Дополнение от доброго комментатора с сайта Habr, с ником FanatPHP — https://habr.com/ru/users/FanatPHP/

Пользователь предложил добавить вспомогательную функцию для работы с Curl.

function curl($url, $data = [], $method = ‘GET’, $options = []) < $default_options = [ CURLOPT_RETURNTRANSFER =>true, CURLOPT_HEADER => false, CURLOPT_SSL_VERIFYPEER => false, ]; if ($method === ‘GET’) < $url .= (strpos($url, ‘?’) === false) ? ‘?’ : ‘ $url .= http_build_query($data); >if ($method === ‘POST’) < $options[CURLOPT_POSTFIELDS] = http_build_query($data); >if ($method === ‘JSON’) < $options[CURLOPT_POSTFIELDS] = json_encode($data); $options[CURLOPT_HTTPHEADER][] = ‘Content-Type:application/json’; >$ch = curl_init($url); curl_setopt_array($ch, array_replace($default_options, $options)); $result = curl_exec($ch); if ($result === false) < throw new ErrorException(«Curl error: «.curl_error($ch), curl_errno($ch)); >curl_close($ch); return $result; >
$token = «5340791844:AAEXXDduvInvQrlykV91USOQSevrPVU»; $url = «https://api.telegram.org/bot$token/sendMessage»; $getQuery = array( «chat_id» => 1424625511, «text» => «Новое сообщение из формы», «parse_mode» => «html» ); echo curl($url, $getQuery);

На этом всё!
Больше интересных статей в нашей группе — https://vk.com/progtime
Вы так же можете разместить свой вопрос на нашем форуме, где другие программисты смогут вам помочь в решение вашей задачи — https://vk.com/prog_time
Так же прокачивайте свои навыки на нашем канале — https://www.youtube.com/c/ProgTime

Наши планы

  • Написание материала для курса по разработке ботов на Telegram
  • Разработка универсального парсера на PHP

Поддержите мой сайт!

Каждый переведённый донат, мотивирует на создание новых записей и уроков на YouTube

Источник: prog-time.ru

Рейтинг
( Пока оценок нет )
Загрузка ...