Статья также доступна на украинском (перейти к просмотру).

Содержание:
- Структура сообщения (ответ от Bot API)
- Работа с сообщениями. Кнопки
- Работа с файлами и изображениями
В предыдущий статьи нами были рассмотрены основные компоненты рабочей среды чат-бота и их взаимодействие. Теперь сосредоточимся на методах управления интерфейсом и работе чат бота с помощью инструментария SDK для платформы PHP. Их использование позволяет создавать гибкие и многофункциональные приложения, не усложняя при этом структуру. Теоретические выкладки будут сопровождаться практическими примерами.
Структура сообщения (ответ от Bot API)
При формировании ответа по каналу HTTP на любой API запрос сервер Телеграм (Bot API) использует формат JSON для описания типов данных и их передаваемых значений. Это позволяет универсализировать ответ и получить широкие возможности для его обработки на стороне клиента.
Состав JSON-объектов, присутствующих в ответе на сервер, определяется набором методов запроса, которые могут быть разными. Методы и их параметры подробно описаны в документации к Bot API. Приведем некоторые из наиболее используемых методов:
GetWebhookInfo() – запрос на получение значений параметров объекта WebhookInfo – p_address, url, max_connections и другие.
GetUpdates() – запрос на получение входных обновлений путем выполнения опросов типа Long Polling, при этом возвращается массив объектов Update и их значение – сообщение, update_id, message_reaction и другие.
GetMe() – запрос на получение основной информации о боте в виде значений параметров User-об’єкту – is_bot, id, first_name, username, language_code и другие.
GetMessageId() – запрос на получение уникального идентификатора сообщения для определенного чата.
Приведем пример структуры сообщения, поступающего от сервера Телеграм к модулю разработки при обращении к боту со стороны стороннего пользователя. Составляющие этой структуры соответствуют параметрам объекта Message, описанного в документации Bot API.
Код будет следующим:
"ok": true, // Показатель успешности выполнения запроса
"result": { // Возврат массива объектов и их значений
"message_id": 30, // Номер сообщения
"from": { // Данные об отправителе сообщения
"id": 7350793xxx,
"is_bot": false,
"first_name": "Programmer75",
"username": "programmer75",
"language_code": "en-UK"
},
"chat": { // Сведения о чате, к которому попало сообщение
"id": 7350793xxx,
"first_name": "Programmer75",
"username": "programmer75",
"type": "private"
},
"date": 1637907910, // Дата создания сообщения
"text": "Greetings from America!" // Содержимое сообщения
}
В случае получения приведенного ответа от сервера, необходимо «извлечь» из него значения нужных объектов, основными из которых в данном случае являются First Name, Chat id та Text message. Это позволит сформировать ответ пользователю, обратившемуся к нашему боту.
Перед использованием полученных параметров в сценариях PHP, предварительно необходимо декодировать соответствующие JSON-объекты с помощью стандартных средств PHP. Позже продемонстрируем, как это можно сделать.
Работа с сообщениями. Кнопки
Выполнение подготовительных операций на хостинге разработки
Перед началом создания PHP-сценарию по управлению работой чат бота необходимо выполнить следующие шаги:
- Подключиться по SSH к виртуальному, VPS- или другого сервера с поддержкой PHP и доступ в Интернет;
- Обновить версию PHP к8.0 или выше;
- Перейти к каталогу своего веб-сайта для разработки чат-ботов ($ компакт-диск ~/bot-development.com/www);
- Установить библиотеку Telegram бот SDK ($ composer require telegram-bot-sdk/telegram-bot-sdk) – для версий SDK 4.х;
- Настройка автоматического обновления версий библиотеки. Для этого в файл composer.json необходимо добавить следующую строчку:
"require": { "telegram-bot-sdk/telegram-bot-sdk": "^4.0",При необходимости использование расширения для Фреймворка Laravel, к указанной конструкции следует дополнительно добавить следующую строчку: "telegram-bot-sdk/laravel": "^4.0".
- Создать файл сценария и сохранить его в текущем каталоге. Следует отметить, что сценарий, вызываемый через веб-хук, должен быть доступен по HTTP. Все остальные файлы – необязательно.
Структура файла PHP-сценария
Структура файла сценария напрямую зависит от версии SDK-библиотеки и режим работы с ней. Для версий SDK 3.х или 4.х при использовании локального режима разработки приложения phpStandalone, структура файла сценария будет выглядеть следующим образом:
<?php
include('vendor/autoload.php'); // Подключение библиотеки
use Telegram\Bot\Api; // Подключение к Bot API
$telegram = new Api('BOT TOKEN'); // Необходимо указать свой токен,
полученный при регистрации бота
$response = $telegram->getUpdates(); // Запоминаем в переменной все данные о новом входящем сообщении от пользователя
{....................} // Список команд и функций для обработки данных полученного сообщения и формирование ответа
?>
При использовании Фреймвора Laravel возможны два режима работы:
-
С использованием класса Facade;
-
С использованием Службы контейнеров.
Использование класса Facade. В этом случае структура файла изменяется следующим образом:
<?php
use Telegram\Bot\Laravel\Facades\Telegram; // Подключение к Bot API
$response = Telegram::getUpdates(); // Запоминаем в переменной полученные данные
{....................} // Список команд и функций для обработки полученных данных
?>
Службы контейнеров. В этом случае сценарий для получения последнего сообщения будет выглядеть следующим образом:
<?php
namespace App\Http\Controllers; // Указываем пространство имен приложения
use App\Http\Controllers\Controller;
use Telegram\Bot\Api; // Подключение к Bot API
class BotController extends Controller //
{
public function __construct(Api $telegram)
{
$this->telegram = $telegram;
}
public function show() // Функция для предоставления полученных данных сообщения по запросу к ней {
$response = $this->telegram->getUpdates();
return $response;
}
} {....................} // Список команд для обработки данных сообщения ?>
"Формирование и отправка текстовых сообщений
Приведем пример формирования и отправки сообщения от чат бота, при этом будем считать, что переменная $telegram уже активирована одним из приведенных ранее способов. В таком случае код будет выглядеть следующим образом:
$response_1 = $telegram->sendMessage([ 'chat_id' => 'CHAT_ID', 'text' => 'Greetings from Ukrainian developers!' ]); // Передаваемое сообщение $messageId = $response_1->getMessageId(); // Сохранение уникального в пределах чата идентификатора сообщения
Работа с кнопками
API Telegram-бота дает возможность разработчикам ботов вместе с сообщениями формировать и отправлять набор кнопок или клавиатур, которые будут отображаться в пользовательском интерфейсе, который общается с ботом. При нажатии на определенную кнопку отправляется определенная команда, что значительно упрощает общение пользователя с ботом.
В настоящее время API-боты поддерживает три варианта клавиатур:
-
«Обычная» или настраиваемая – к каждой из ее кнопок «привязаны» заранее определенные ответы или команды. Реализуется с помощью объекта ReplyKeyboardMarkup;
-
«Привязано к сообщению» – отображается вместе с сообщением, к которому оно принадлежит. Реализуется с помощью объекта InlineKeyboardMarkup;
-
Для удаления клавиатуры текущего чата Реализуется с помощью объекта ReplyKeyboardRemove.
Ниже представлены указанные выше варианты клавиатур.

Рассмотрим первый из приведенных вариантов и попытаемся реализовать его на практике с помощью соответствующего сценария.
Объект ReplyKeyboardMarkup имеет следующие параметры:
Resize_keyboard – изменение размера клавиатуры по высоте. По умолчанию параметр отключен и соответственно высота пользовательской клавиатуры совпадает со стандартным размером клавиатуры для текущего приложения.
One_time_keyboard – позволяет пользователю временно скрыть клавиатуру.
Селективный – позволяет отображать клавиатуру только для определенных пользователей.
Keyboard – Обязателен. Представляет набор кнопок, каждая из которых определяется параметрами объекта KeyboardButton.
Для режима разработки phpStandalone код сценария будет выглядеть следующим образом:
Работа с файлами и изображениями
Сформируем сообщение для отправки нашим ботом файла изображения с именем my_image.jpg:
$response_3 = $telegram->sendPhoto([ 'chat_id' => 'CHAT_ID', 'photo' => 'path/to/my_image.jpg', // Указываем локальный путь к файлу изображения и его имени 'caption' => 'Happy New Year greetings' // Формирование подписи к изображению ]); $messageId = $response_3->getMessageId(); // Сохранение идентификатора сообщения
В случае, если нам нужно передать файл, находящийся по любому URL-адресу, строчка с параметром photo Приведенный код изменится следующим образом:
'photo' => 'http://photo-gallery.com/photos/my_image.jpg' // URL файла
Все остальные конструкции остаются без изменений.
Надеюсь, наша статья по созданию телеграм-бота была полезна для Вас. В зависимости от ожидаемого количества запросов на сервер для размещения бота можно воспользоваться виртуальным хостингом, VPS или выделенным сервером. При эксплуатации бота по мере увеличения нагрузки тип услуги можно изменить.
Подписывайтесь на наш телеграм-канал https://t.me/freehostua, чтобы быть в курсе новых полезных материалов
Смотрите наш канал Youtube на https://www.youtube.com/freehostua.
Мы в чем ошиблись, или что-то пропустили?
Напишите об этом в комментариях, мы с удовольствием ответим и обсуждаем Ваши замечания и предложения.
|
Дата: 15.01.2025 Автор: Александр Ровник
|
|

Авторам статьи важно Ваше мнение. Будем рады его обсудить с Вами:
comments powered by Disqus