Бот для телеграм на 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('здесь_вставляем_токен');
2) Далее получаем информацию о полученном от пользователя сообщении методом getWebhookUpdates() :
$message = $telegram->getWebhookUpdates()->getMessage();

В объекте $message будет содержаться вся информация о присланном сообщении и пользователе, который его прислал. Ниже описаны основные методы данного объекта. Подробную информацию можно найти в документации.

getMessageId() 				// уникальное id сообщения
getFrom()                   // Информация о пользователе
getDate()                   // Дата сообщения
getChat()                   // Информация о чате, из которого отправлено сообщение
getText()                   // Если прислан текстовый файл, текст сообщения
getAudio()                  // Если прислан аудиофайл, информация о нем
getDocument()               // Если прислан документ, информация о нем
getPhoto()                  // Если прислано фото, информация о нем
getSticker()                // Если прислан стикер, информация о нем
getVideo()                  // Если прислано видео, информация о нем
Основные методы

Возвращает объект User, содержащий следующие методы:

getId()         // id пользователя
getFirstName()  // Имя пользователя
getLastName()   // Фамилия пользователя
getUsername()   // Username пользователя
методы getFrom()

Возвращает объект Chat:

getId()        // id чата, из которого пришло сообщение
getType()      // Тип чата - 'private', 'group', 'supergroup' или 'channel'
getTitle()     // Заголовок чата (если групповой или канал)
getUsername()  // Username (если приватный чат)
методы getChat()

Теперь мы можем проанализировать, что прислал нам пользователь

$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;
Чтение RSS ленты

Обратите внимание, в строке 6 символы \xE2\x9C\x85 обозначают смайлик с галочкой в байтовом представлении. Полный список таких смайликов.

В строке 8, в методе sendMessage мы используем дополнительные опции: 'parse_mode' => 'HTML' позволяет передавать внутри сообщения html теги (в данном случае ), а disable_web_page_preview указывает, что не надо загружать картинку-превью.

Результат работы после выполнения данных операций

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


Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *