Бот для телеграм на php.
На данный момент telegram развивается очень активно и является одним из популярных мессенджеров, охватывающих огромную аудиторию. Одной из особенностей данного приложения является наличие ботов, выполняющих различные функции. К таким функциям относятся онлайн-чаты, информирование пользователя (например, о новой записи в блоге), различные игры или помощь пользователю в различных аспектах.
В этой статье будет рассказано о том, как создать самого простого бота на языке php.
А теперь перейдем подробнее к пошаговой инструкции, рассказывающей как создать бот для телеграм на php.
0. Подготовка
Самым первым делом необходимо отметить, что Телеграм позволяет размещать ботов только на доменах, защищенных сертификатом SSL. Если у вас еще нет такого сертификата, вам необходимо его приобрести. Возможно, вам также понадобится хостинг для размещения файлов бота. Для этих целей прекрасно подойдет хостинг от компании Бегет, предоставляющий бесплатные сертификаты. О его преимуществах подробно я расписал в этой статье.
1. Регистрация бота
Первым пунктом, с которого начинается разработка бота — это регистрация его у специального корневого бота — @BotFather. Находим его в списке, жмем кнопку старт, бот приветствует нас, выводя список всех доступных команд.
/newbot
, далее вписываем имя для своего бота и его username — адрес бота для доступа других пользователей. После этого вашему боту будет присвоен уникальный токен, запишите и сохраните его, он еще пригодится.Все! Ваш бот создан и зарегистрирован в системе. Теперь можно настроить его описание, задать картинку профиля и другое в разделе Edit Bots.
2. Установка библиотеки
telegram-bot-sdk
. Установим ее с помощью composer
:
composer require irazasyed/telegram-bot-sdk ^2.0Здесь же можно настроить соединение по ftp с вашим сервером, где находится сайт из пункта 0. Я разместил своего бота в папке /bot/ своего сайта, имейте это ввиду при дальнейшем изучении статьи. Теперь настраиваем webhook для того, чтобы дать понять телеграму, где брать информацию о теле бота. Самый простой способ — веб запрос:
https://api.telegram.org/botздесь_вставляем_токен/setWebhook?url=https://anton-mironov.ru/bot/index.phpСоответственно вписываем свои данные на месте сайта и токена и отправляем данный запрос через любой браузер. В ответ должен прийти JSON файл:
{"ok":true,"result":true,"description":"Webhook was set"}Это означает, что webhook установлен, и все запросы приходящие к боту будут обрабатываться файлом — обработчиком, указанным в параметре url.
3. Написание кода
index.php
в папке /bot/
является главным обработчиком запросов бота. Рассмотрим его возможный вид:
1) Прежде всего подключаем библиотеку и инициализируем бота при помощи токенаinclude('vendor/autoload.php');
use Telegram\Bot\Api;
$telegram = new Api('здесь_вставляем_токен');
getWebhookUpdates()
:$message = $telegram->getWebhookUpdates()->getMessage();
В объекте $message будет содержаться вся информация о присланном сообщении и пользователе, который его прислал. Ниже описаны основные методы данного объекта. Подробную информацию можно найти в документации.
getMessageId() // уникальное id сообщения
getFrom() // Информация о пользователе
getDate() // Дата сообщения
getChat() // Информация о чате, из которого отправлено сообщение
getText() // Если прислан текстовый файл, текст сообщения
getAudio() // Если прислан аудиофайл, информация о нем
getDocument() // Если прислан документ, информация о нем
getPhoto() // Если прислано фото, информация о нем
getSticker() // Если прислан стикер, информация о нем
getVideo() // Если прислано видео, информация о нем
Возвращает объект User, содержащий следующие методы:
getId() // id пользователя
getFirstName() // Имя пользователя
getLastName() // Фамилия пользователя
getUsername() // Username пользователя
Возвращает объект Chat:
getId() // id чата, из которого пришло сообщение
getType() // Тип чата - 'private', 'group', 'supergroup' или 'channel'
getTitle() // Заголовок чата (если групповой или канал)
getUsername() // Username (если приватный чат)
Теперь мы можем проанализировать, что прислал нам пользователь
$text = $message->getText(); // Текст присланный пользователем
$chat = $message->getChat()->getId(); // id чата с пользователем
3) Теперь мы можем определить какой тип сообщения прислал пользователь. Для простоты, ограничим возможность присылать нам только текстовые сообщения:
if(!empty($text)){
}
else{
$telegram->sendMessage([ 'chat_id' => $chat, 'text' => 'Для работы с ботом пришлите текстовое сообщение!' ]);
}
Все дальнейшие команды будем записывать внутри блока if()
.
4) Каждый бот должен обязательно отвечать на две команды — /start
и /help.
Это — обязательное условие. Все остальные команды необязательны и могут иметь произвольное название. Опишем эти команды:
switch($text){
case '/start':
$message = 'Вас приветствует бот anton-mironov.ru! Для вывода списка доступных команд введите /help';
$telegram->sendMessage([ 'chat_id' => $chat, 'text' => $message ]);
break;
case '/help':
$message = 'Список доступных команд:
/start - начало работы с ботом
/help - выводит данный список';
$telegram->sendMessage([ 'chat_id' => $chat, 'text' => $message ]);
break;
default:
$telegram->sendMessage([ 'chat_id' => $chat, 'text' => 'Команда не распознана. Для помощи введите /help' ]);
break;
}
5) Добавим команду, позволяющую получать последние записи из RSS ленты сайта (не забываем добавлять команду в /help !). Обычно RSS лента представляет собой простой xml файл. На моем сайте вы можете увидеть его, открыв ссылку https://anton-mironov.ru/feed/.
Для чтения данного файла на PHP воспользуемся функцией simplexml_load_file, которая превращает xml файл в объект:
case '/rss':
$url = 'https://anton-mironov.ru/feed/';
$rss = simplexml_load_file($url);
$message = '';
foreach ($rss->channel->item as $item) {
$message .= "\xE2\x9C\x85 " . date('d.m.Y', strtotime($item->pubDate)) . " " . $item->title . " <a href='".$item->link."'>читать</a>\n";
}
$telegram->sendMessage([ 'chat_id' => $chat, 'text' => $message,'parse_mode' => 'HTML', 'disable_web_page_preview' => true ]);
break;
Обратите внимание, в строке 6 символы \xE2\x9C\x85
обозначают смайлик с галочкой в байтовом представлении. Полный список таких смайликов.
В строке 8, в методе sendMessage мы используем дополнительные опции: 'parse_mode' => 'HTML'
позволяет передавать внутри сообщения html теги (в данном случае ), а disable_web_page_preview
указывает, что не надо загружать картинку-превью.
Результат работы после выполнения данных операций
В данной статье мы рассмотрели как создается самый простой бот для телеграм на php. В следующей статье я расскажу как использовать отдельные сложные команды и как работать с отличным от текста содержимым.