Inline keyboard Telegram php пример

Очень полезная возможность, которая упрощает взаимодействие пользователя с ботом. Рассмотрим этот объект пользовательской клавиатуры с опциями ответа, какие типы нам доступны на текущую версию API.

id — уникальный идентификатор пользователя в Telegram
last_name — значение поля фамилия, может быть пустым
first_name — значение поля имя, может быть пустым
username — уникальное значение текстовый идентификатор, может быть пустым
language_code — кодовое обозначение выбранного языка интерфейса приложения (en, ru . )

is_bot — флаг, определяющий пользователя как бота, в случае с ботом равен 1, в случае с пользователем пустое значение

Полезный инструмент

У каждого бота есть ссылка, которая открывает диалог с ним в Telegram — https://telegram.me/ИМЯ_БОТА . К этой ссылке можно добавить параметры start или startgroup со значениями. Значение может быть длиной от 1 до 64 символов и состоять из букв латинского алфавита (больших — A-Z и маленьких — a-z), цифр — 0-9, нижнего подчеркивания _ и тире -.

Inline Keyboard ⌨ Еще одна клавиатура для telegram bot


https://telegram.me/ИМЯ_БОТА?start=ВАШЕ_ЗНАЧЕНИЕ

Telegram Bot API рекомендует использовать base64url для кодирования параметров с двоичным и другими типами контента.

По ссылке с параметром start будет открыт диалог с ботом, с кнопкой Старт в месте поля ввода. Если используется параметр startgroup, пользователю будет предложено выбрать группу для добавления бота.

Как только пользователь подтвердит действие (нажмет кнопку Пуск в своем приложении или выберет группу для добавления бота), ваш бот получит сообщение от этого пользователя в таком формате:

/start ВАШЕ_ЗНАЧЕНИЕ
/invoice Выписать счет

Клавиатуры и их возможности

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

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

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

С каждым сообщением бот может отправлять разный набор кнопок как по количеству, так и по назначению. Кнопки можно расположить непосредственно под сообщением (InlineKeyboardButton), или зафиксировать под тестовым полем для ввода сообщения (KeyboardButton). Различия в них очень существенные на мой взгляд. Давайте рассмотрим некоторые их возможности.

KeyboardButton

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

TELEGRAM BOT НА PHP | Создание телеграм бота #08 | Inline Клавиатура

text — текст который будет на отображен на кнопке, обязательный параметр, поддерживает текст и смайлики (эмодзи)

request_contact — если параметр установлен в true, пользователь отправит в бот свой номер телефона на который зарегистрирован аккаунт

request_location — если параметр установлен в true, пользователь отправит в бот свое текущее местоположение

Помимо набора кнопок в объект ReplyKeyboardMarkup можно передать еще ряд параметров:

keyboard — массив кнопок (объекты KeyboardButton)
resize_keyboard — если предать true, то клавиатура подгонится по высоте до возможного минимума.
one_time_keyboard — возможность скрывать клавиатуру после ее использования
selective — если надо показать клавиатуру только определенным пользователям

При необходимости удалить клавиатуру используйте объект ReplyKeyboardRemove.

InlineKeyboardButton

Это объект одной кнопки встроенной клавиатуры. Располагается набор таких кнопок сразу под сообщением. С помощью этого объекта можно передать кнопке url , или использовать его для голосования как одним из вариантов. В любом случае можно сделать много интересного и полезного. Рассмотрим его возможности на практике чуть ниже.

Передается в наборе с другими аналогичными кнопками через объект InlineKeyboardMarkup. Принимает параметры:

text — текст который будет на отображен на кнопке, обязательный параметр, поддерживает текст и смайлики (эмодзи)

url — адрес на который будет направлен пользователь
callback_data — строка 1-64 символа будет передан боту через объект CallbackQuery

switch_inline_query_current_chat — после нажатия вставит команду для использования бота во встроенном режиме в текущем чате

callback_game — описание игры, которая будет запущена при нажатии пользователем кнопки.
pay — кнопка будет использована как кнопка оплаты

Теперь немного практики

Предлагаю рассмотреть поближе возможности клавиатур. Для примера я сделаю 4 кнопки: 2 KeyboardButton и 2 InlineKeyboardButton. Для этого будем работать с теми же инструментами, которые были в предыдущей статье. Добавим только несколько новых методов.

Логика скрипта будет простая, при старте бот будет выводить сообщение о готовности и 2 кнопки Голосовать и Помощь. При нажатии на кнопку Помощь — выведется сообщение с небольшой инструкцией, а при нажатии на кнопку Голосовать на экране появиться сообщение и под ним 2 кнопки, при нажатии на которые произойдет увеличения счетчика.

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

Чтобы обрабатывать команды от всех типов кнопок нам надо составить условия проверки. В моем примере от кнопки KeyboardButton команда приходит в виде обычного текстового сообщения вместе с объектом Message под ключом text, а от кнопки InlineKeyboardButton в объекте CallbackQuery под ключом data.

elseif (array_key_exists(‘callback_query’, $arrData)) < $chat_id = $arrData[‘callback_query’][‘message’][‘chat’][‘id’]; $message = $arrData[‘callback_query’][‘data’]; >?>

Кнопки будем отправлять в параметре reply_markup в методе sendMessage. Набор кнопок идет в таком формате:

Массив данных ( ‘Тип клавиатуры’ => Массив строк кнопок ( Массив кнопок строки ( Массив параметров кнопки ( ) ) ), // если предусмотрено ‘Дополнительный параметр’, )

Создадим два метода для разных клавиатур, на входе принимают массив строк кнопок, на выходе строку в формате JSON.

$data, ); return json_encode($inlineKeyboard); > private function getKeyBoard($data) < $keyboard = array( «keyboard» =>$data, «one_time_keyboard» => false, «resize_keyboard» => true ); return json_encode($keyboard); > ?>

Сам набор кнопок будет выглядеть вот так.

getKeyBoard([[[«text» => «Голосовать»], [«text» => «Помощь»]]]); $inlineKeyboard = $this->getInlineKeyBoard([[ [‘text’ => hex2bin(‘F09F918D’) . ‘ 0’, ‘callback_data’ => ‘vote_1_0_0’], [‘text’ => hex2bin(‘F09F918E’) . ‘ 0’, ‘callback_data’ => ‘vote_0_0_0’] ]]); ?>

Во встроенных кнопках (inlineKeyboardButton) в качестве значения параметра callback_data будем передавать служебную информацию в виде action_type_count1_count2 , где

action — действие, в нашем случае это vote
type — тип кнопки: 1 — левая, 0 — правая
count1 — текущее значение левой кнопки
count2 — текущее состояние правой кнопки

В значении параметра text передаем бинарный код эмодзи в кодировке UTF-8 (список эмодзи), которые преобразуются из шестнадцатеричных данных в двоичные данные функцией hex2bin, и еще выведем текущее числовое значение счетчика кнопки.

Теперь нам остается только описать механизм определения команды и механизм ее обработки. Поэтому в методе init() создадим конструкцию оператора switch

«Приветствую, давайте начнем нашу практику. Нажмите на кнопку Голосовать.», ‘chat_id’ => $chat_id, // отправляем клавиатуру ‘reply_markup’ => $justKeyboard, ); $this->requestToTelegram($dataSend, «sendMessage»); break; // если пришла команда Голосовать case ‘Голосовать’: $dataSend = array( ‘text’ => «Выберите один из вариантов», ‘chat_id’ => $chat_id, // отправляем встроенную клавиатуру ‘reply_markup’ => $inlineKeyboard, ); $this->requestToTelegram($dataSend, «sendMessage»); break; // если запросили Помощь case ‘Помощь’: $dataSend = array( ‘text’ => «Просто нажмите на кнопку Голосовать.», ‘chat_id’ => $chat_id, ); $this->requestToTelegram($dataSend, «sendMessage»); break; // если вызвана встроенная кнопка case (preg_match(‘/^vote/’, $message) ? true : false): // получаем новую клавиатуру $params = $this->setParams($message); $dataSend = array( ‘reply_markup’ => $params[0], ‘message_id’ => $arrData[‘callback_query’][‘message’][‘message_id’], ‘chat_id’ => $chat_id, ); // изменяем клавиатуру под выбранным сообщением $this->changeVote($dataSend, $params[1], $arrData[‘callback_query’][‘id’]); break; // незапланированное действие обрабатываем как поумолчанию default: $dataSend = array( ‘text’ => «Не запланированная реакция, может просто нажмете на кнопку Голосовать.», ‘chat_id’ => $chat_id, ); $this->requestToTelegram($dataSend, «sendMessage»); break; > ?>

Давайте разберемся, что в этом коде происходит. Оператор switch принимает значение $message , которое может быть, как просто текст сообщения (в том числе команды), так и значение объекта callbackQuery .

При получении команды /start — мы выводим приветственное слово и набор кнопок: Голосовать, Помощь.
При получении команды Помощь, выводим простое текстовое сообщение.

При получении команды Голосовать, выводим текстовое сообщение и набор встроенных кнопок с параметром callback_data .

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

И самое интересное это когда принимаем значение в начале которого стоит action , в нашем случае это vote . Мы формируем новую клавиатуру изменяем в ней текстовое значение, увеличиваем счетчик у нажатой кнопки и подставляем новую служебную информацию в параметрах callback_data .

Для создания новой клавиатуры мы используем метод setParams() , а для отправки изменений мы используем метод changeVote(). Здесь остановим внимание на методах Bot API

editMessageReplyMarkup — меняем клавиатуру у заданного сообщения

answerCallbackQuery — позволяет выводить уведомление о проделанной работе CallbackQuery, мы его используем, уведомляя пользователя что он удачно проголосовал.

requestToTelegram($data, «editMessageReplyMarkup») ? «Вы проголосовали » . hex2bin($emoji) : «Непредвиденная ошибка, попробуйте позже.»; // отправляем уведомление при любом результате $this->requestToTelegram([ ‘callback_query_id’ => $callback_query_id, ‘text’ => $text, ‘cache_time’ => 3, ], «answerCallbackQuery»); > private function setParams($data) < // разбиваем в массив по знаку _ $params = explode(«_», $data); // увеличиваем значение или левой или правой кнопки $params[1] ? $params[2]++ : $params[3]++; // готови клавиатуру с новыми значениями callback_data $arr[] = $this->getInlineKeyBoard([[ [ ‘text’ => hex2bin(‘F09F918D’) . ‘ ‘ . $params[2], ‘callback_data’ => ‘vote_1_’ . $params[2] . ‘_’ . $params[3] ], [ ‘text’ => hex2bin(‘F09F918E’) . ‘ ‘ . $params[3], ‘callback_data’ => ‘vote_0_’ . $params[2] . ‘_’ . $params[3] ] ]]); // готовим эмодзи для уведомления $arr[] = $params[1] ? ‘F09F918D’ : ‘F09F918E’; return $arr; > ?>

Подводим итоги

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

Источник: imakebots.ru

Инструкция по созданию Telegram ботов. Часть 6. Делаем пользовательскую клавиатуру для бота

Сегодняшняя статья будет посвящена тому, каким образом можно создать для бота пользовательскую клавиатуру, что это даёт и как со всем этим работать. Все приводимые в статье примеры кода будут на php.

Пользовательские клавиатуры в Telegram бывают двух видов: Inline и Reply.

Inline (встроенные)-клавиатуры просто добавляют кнопки внизу сообщения, вот так:

inline-клавиатура

Эти клавиатуры привязаны к конкретному сообщению (как бы встроены в чат) и не подменяют собой традиционную клавиатуру, которая всё так же всплывает при нажатии на поле ввода текста. Главная особенность inline-клавиатур заключается в том, что нажатие на их кнопки не вызывает отправку в чат каких-либо сообщений, вместо этого генерируется некоторое «закулисное» событие: обратный вызов (callback), открытие URL или другого чата во встроенном режиме.

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

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

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

reply-клавиатура

Для того, чтобы сгенерировать какую-либо пользовательскую клавиатуру — нужно при обращении к одному из предназначенных для отправки данных API-методов (например, при к SendMessage) задать параметр reply_markup, описывающий объект типа InlineKeyboardMarkup — для создания inline-клавиатуры, или объект типа ReplyKeyboardMarkup — для создания reply-клавиатуры. Подробнее о том, к каким методам можно прицепить reply_markup, а к каким — нет, можно прочитать в документации.

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

Таким образом, для генерирования клавиатуры нам нужно сформировать в коде соответствующего типа объект, описывающий создаваемую клавиатуру (назовём этот объект, например, $keyboard), закодировать этот объект в виде json-строки и добавить эту json-строку в качестве параметра reply_markup при отправке запроса (GET или POST) telegram-боту.

Пример создания inline-клавиатуры (php)

// создаём $keyboard — объект, описывающий клавиатуру
$keyboard = [
«inline_keyboard» =>
[ /* первый ряд кнопок — массив из наборов */
[ /* первые две кнопки вызывают колбэк, а третья — открытие url-а */
[ «text» => «button 1»,
«callback_data» => «data 1»
],
[ «text» => «button 2»,
«callback_data» => «data 2»
],
[ «text» => «button 3»,
«url» => $any_url
]
]
/* здесь мог бы быть второй массив для второго ряда кнопок и так далее */
]
];
.
.
// далее нужно просто добавить этот параметр в запрос (GET или POST) в качестве параметра reply_markup
// например, при использовании в GET-запросе:
$keyboard_json = json_encode($keyboard); // перекодируем в json
// формируем url для get-запроса и добавляем к этому url-у параметр reply_markup с описанием нашей клавиатуры
$url=$telegram_api_url.$bot_token.’/sendMessage?chat_id=’.$chat_id.’parse_mode=HTML’.’
// осталось только выполнить GET-запрос, например с помощью file_get_contents (ну или curl :))
file_get_contents($url); // отправляем get-запрос на сформированный url

Пример создания reply-клавиатуры (php)

// создаём $keyboard — объект, описывающий клавиатуру
$keyboard = [
«keyboard» =>
[ /* первый ряд кнопок — массив из наборов */
[ /* перва кнопка отправляет команду /any_command в виде текстового сообщения, вторая — данные геолокации */
[ «text» => «/any_command»
],
[ «text» => «my location»,
«request_location» => true
]
]
/* здесь мог бы быть второй массив для второго ряда кнопок и так далее */
]
];
.
.
// далее нужно просто добавить этот параметр в запрос (GET или POST) в качестве параметра reply_markup
// например, при использовании в GET-запросе:
$keyboard_json = json_encode($keyboard); // перекодируем в json
// формируем url для get-запроса и добавляем к этому url-у параметр reply_markup с описанием нашей клавиатуры
$url=$telegram_api_url.$bot_token.’/sendMessage?chat_id=’.$chat_id.’parse_mode=HTML’.’
// осталось только выполнить GET-запрос, например с помощью file_get_contents (ну или curl :))
file_get_contents($url); // отправляем get-запрос на сформированный url

Поскольку inline-клавиатуры привязаны к конкретным сообщениям, то с каждым новым сообщением нужно генерировать новую inline-клавиатуру. С reply-клавиатурами ничего подобного делать не нужно. Будучи однажды сгенерированной, такая клавиатура будет заменять дефолтную до тех пор, пока её не удалят или не заменят другой reply-клавиатурой.

Для удаления reply-клавиатуры нужно в параметре reply_markup послать объект, типа ReplyKeyboardRemove.

Пример удаления reply-клавиатуры (php)

// создаём $remove_keyboard — объект, описывающий удаление reply-клавиатуры
$remove_keyboard = [
«remove_keyboard» => true
];
.
.
// далее нужно просто добавить этот объект в запрос (GET или POST) в качестве параметра reply_markup
// например, при использовании в GET-запросе:
$remove_keyboard_json = json_encode($remove_keyboard); // перекодируем в json
// формируем url для get-запроса и добавляем к этому url-у параметр reply_markup с описывающим удаление клавиатуры объектом
$url=$telegram_api_url.$bot_token.’/sendMessage?chat_id=’.$chat_id.’parse_mode=HTML’.’
// осталось только выполнить GET-запрос, например с помощью file_get_contents (ну или curl :))
file_get_contents($url); // отправляем get-запрос на сформированный url

Одна из прикольных фишек inline-клавиатур — возможность «на лету» править сообщения, к которым эти клавиатуры привязаны. Как я уже писал выше, нажатие на кнопки inline-клавиатур не вызывает отправку сообщений в чат, но то же время, получив callback мы всегда можем понять, к какому сообщению была привязана нажатая кнопка. Остаётся только исправить это сообщение при помощи одного из методов Updating messages.

Как получить callback? Для этого просто нужно запросить, получить и обработать очередной update, если бот работает через longpolling, или выполнить только два последних пункта, если бот работает через webhook (в этом случае, как вы помните, ничего запрашивать не нужно, так как телега сама знает по какому адресу отправлять апдейты). Данные колбэка будут содержаться в поле «callback_query» полученного апдейта.

Пример апдейта, полученного после нажатия на одну из кнопок inline-клавиатуры

» [
«update_id»:xxxxxxxxxx,
«callback_query»:
«id»:»xxxxxxxxxxx»,
«from»:
«id»:xxxxxxxxx,
«first_name»:»xxxxxxx»,
«last_name»:»xxxxxxx»,
«username»:»xxxxxxxxx»,
«language_code»:»ru»
>,
«message»:
«message_id»:xxxx,
«from»:
«id»:xxxxxxxxx,
«first_name»:»xxxxxxxx»,
«username»:»xxxxxxx»
>,
«chat»:
«id»:xxxxxxxx,
«first_name»:»xxxxxxx»,
«last_name»:»xxxxxxxx»,
«username»:»xxxxxxx»,
«type»:»private»
>,
«date»:1499854111,
«text»:»test»
>,
«chat_instance»:»xxxxxxxxxxxx»,
«data»:»1″
>
>
]

Остаётся только выделить из апдейта данные, однозначно указывающие на само это сообщение (идентификатор чата и идентификатор сообщения), а также на нажатую кнопку и, собственно, отредактировать исходное сообщение. Понять какую именно кнопку нажали можно по содержимому поля «data» в полученном «callback_query». В этом поле будет содержаться информация, которую мы вписали
в поле «callback_data» для соответствующей кнопки при создании inline-клавиатуры.

Еще по теме:  Владелец чата в Телеграм удалился

Пример редактирования сообщения налету

// если мы определили, что нам прилетел именно колбэк (по наличию поля «callback_query»), то:
// выделяем из этого колбэка необходимые для редактирования сообщения данные
$chat_id = $input_array[‘callback_query’][‘message’][‘chat’][‘id’]; // идентификатор чата
$message_id = $input_array[‘callback_query’][‘message’][‘message_id’]; //идентификатор сообщения
$data = $input_array[‘callback_query’][‘data’]; // данные, которые были отправлены при нажатии на кнопку
.
.
// далее нужно просто выполнить запрос (GET или POST), обратившись, например, к методу editMessageText
$url=$telegram_api_url.$bot_token.’/editMessageText?chat_id=’.$chat_id.’text=’.urlencode($edited_message).’
// $edited_message — отредактированный текст сообщения
// $keyboard_json — клавиатура, которая будет содержаться в отредактированном сообщении
file_get_contents($url); // отправляем get-запрос на сформированный url

Вот и всё. Как видите, всё достаточно просто и понятно. В telegram вообще всегда всё просто, понятно и подробно описано. Вообще не понимаю, зачем нужны всякие библиотеки и фреймворки. Все они выглядят гораздо страшнее и монструознее, чем исходные описания из API.

Это при том, что все эти фреймворки добавляют коду веса, ошибок и нестабильности. Уф, надо вступить в какое-нибудь движение за чистоту кода. Ну ладно, это я уже отвлёкся. Пока!

  1. Часть 1. Что такое Telegram боты и как они работают
  2. Часть 2. Регистрация аккаунтов Telegram ботов в картинках
  3. Часть 3. Пишем простого чат-бота для Telegram на чистом php (webhook)
  4. Часть 4. Прикручиваем MySQL к чат-боту для Telegram на php (webhook)
  5. Часть 5. Пишем Telegram бота на php для работы через longpolling
  6. Часть 6. Делаем пользовательскую клавиатуру для бота
  7. Дополнение. Как отправлять правильные https-запросы через curl и при чём здесь SSL-cертификаты

Понравилась статья? Поделись с друзьями!

Источник: radiohlam.ru

Создание простого 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
  • 4 176
  • 9
  • 8

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

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