Как создать Bot Telegram на PHP
Бот – это учетная запись, для которой не требуется указания номера телефона. Принцип его действия очень прост: посылайте запросы в Телеграмм, созданные по определенным правилам. Самое главное – знать Bot API. Создание Bot Telegram на PHP основано на отправке GET или POST запросов на сервер API. Сделать это не сложно.
Требования к хостингу
Телеграмм принимает только защищенные сертификатами безопасности команды. То есть, все они передаются по протоколу https. Поэтому вы должны иметь хост, который имеет купленный или установленный самоподписанный сертификат безопасности. Мы расскажем, как создать телеграмм бот php на примере хостинга beget.ru, так как он предоставляет ssl сертификат.
Если у вас нет собственного домена, то его надо приобрести или создать. Процесс установки сервера, открытия его для сети и установка ssl-соединения – это тема отдельной статьи. Если вы не специалист в этих вопросах – проще купить готовый вариант. В среднем стоимость самого простого хостинга составляет 1000-1500 р. в год. Проследите, чтобы он поддерживал работу с PHP и имел SSL.
Также можете воспользоваться облачными сервисами. Например, cloudflare.
Создание бота
Зайдите в мессенджер. Сделать это можно с любого устройства, указав свой телефон. На этот номер придет код доступа. Стоит заметить удобство регистрации – нет необходимости помнить учетные данные и пароль. Регистрируя одно устройство и заходя затем с другого, Телеграмм «запоминает» эту связку. Эта технология называется Cloud Password Telegram.
После входа необходимо создать новый бот. Для этого зайдите в Телеграмм и найдите @BotFather.
Пройдите всю процедуру пошагово:
- Укажите имя для посетителей.
- Укажите имя для бота.
По желанию определите описание (description) и другие параметры. В итоге вы получите токен – уникальный идентификатор вашего робота. Его надо сохранить.
Настройка домена
Прежде чем писать Telegram бот на PHP, необходимо настроить среду для ее работы. Используя файловый менеджер своего хостинга создайте директорию для программы. Далее следует настроить WebHook.
Телеграмм дает два способа получать информацию о действиях пользователей:
- Update
- WebHook
Первый неудобен тем, что приходится запрашивать мессенджер о событиях и затем обрабатывать их. Второй присылает данные автоматически, по мере поступления событий из чата.
Чтобы подключить WebHook необходимо послать в мессенджер команду:
https://api.telegram.org/bot507226896:AAGT_fsEO1mi...
Если делать это из адресной строки браузера, вы получите ответ:
{«ok»:true,»result»:true,»description»:»Webhook was set»}
Если вы используете самоподписанный сертификат, то в качестве второго параметра следует передать ссылку на файл сертификата.
Далее мы будем делать это программным путем. Если необходимо удалить WebHook, передайте в качестве url пустой параметр.
Команды PHP для обработки сообщений
Программируя бот для Телеграмм на PHP, мы используем команды библиотеки Curl, которые позволяют отправить запрос на сервер и получить результат. Также будем использовать команду file_get_contents(), которая позволит получить JSON-строку – ответ из Телеграм. Для парсинга строки JSON используется функция json_encode().
Команды библиотеки Curl:
- curl_init() — открыть сеанс
- curl_close() — закрыть сеанс
- curl_exec() — выполнить запрос
- curl_setopt() – установка опций
Параметры:
- CURLOPT_RETURNTRANSFER — указание на возврат ответа в виде строки, а не вывода на экран.
- CURLOPT_CONNECTTIMEOUT — время ожидания ответа
- CURLOPT_TIMEOUT — время в секундах выполнения
- CURLOPT_USERAGENT — установка заголовков
- CURLOPT_URL — адрес, куда отправляется запрос. У нас это api.telegram.org
- CURLOPT_POST — сообщение о том, что отправляется POST методом
- CURLOPT_POSTFIELDS — указание данных для POST запроса в виде массива
Ниже приведена программа установки WebHook с комментариями.
<?php
//Запись в переменную первой части адреса бота с указанием токена
$url="https://api.telegram.org/bot507226896:AAGT_fsEO1mi...
//Инициализация запроса
$con = curl_init();
//Запоминаем в переменную дескриптор команды установки WebHook
$wh=$url."setWebhook?url=https://tuolalbn.beget.tech/anna_bot/";
//Устанавливаем опции запроса
curl_setopt($con, CURLOPT_URL, $wh);
curl_setopt($con, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($con, CURLOPT_HEADER, 0);
//Выполняем запрос, устанавливающий WebHook
$output = curl_exec($con);
//закрываем запрос
curl_close($con);
?>
Сохраните эту программу как wh.php в созданной директории на хостинге и запустите ее из адресной строки: ВАШ_ДОМЕН/НАЗВАНИЕ_ДИРЕКТОРИИ/wh.php
Приведем пример простой программы отправки сообщений пользователю.
<?php
$url="https://api.telegram.org/bot507226896:AAGT_fsEO1mi...
//читаем результат из стандартного потока, в который PHP записывает полученные данные
$a=file_get_contents('php://input');
$content = json_decode($a);
//получаем значение chat_id – идентификатор чата с пользователем, отправившим сообщение
$chatID=$update['result'][0]['message']['chat']['id'];
//Инициализируем новый запрос
$ch = curl_init();
//Формируем строку запроса – отправка пользователю сообщения «hello»
$msg=$url."sendMessage?chat_id=".$chatID."&text=Hello";
//Настраиваем запрос
curl_setopt($con, CURLOPT_URL, $msg);
curl_setopt($con, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($con, CURLOPT_HEADER, 0);
//Выполняем запрос
$output = curl_exec($con);
//Закрываем запрос
curl_close($con);
?>
Вышеприведенный код PHP на любое сообщение пользователя выдает ему «Hello». Если добавить в код проверку введенной строки, можно обработать любое сообщение: приветствие, команды и т.д.
Главное понимать, что все запросы в бот строятся с помощью команд Telegram Bot API. Мы привели пример использования sendMessage. Перечень доступных команд можно взять в документации к Telegram Bot API — https://core.telegram.org
Например, команда для отправки контакта будет иметь следующий вид:
https://api.telegram.org/bot507226896:AAGT_fsEO1mi...
Для получения последнего сообщения пользователя можно воспользоваться следующим алгоритмом:
//в массиве хранится история сообщений бота
$update = json_decode($content, true);
//выясняем размер массива – количество сообщений
$n=count($update['result']);
//получаем текст последнего
$text=$update['result'][$n-1]['message']['text'];
Вы можете настроить вывод команд в боте, используя различные объекты. Самый простой вариант – стандартный ввод в виде «/команда». С помощью строковых функций PHP не сложно организовать проверку переданного пользователем текста и используя условный переход запустить то или иное действие.
Второй вариант – создание кнопок-команд. Пользователь получает своеобразное меню. Такое вы можете увидеть, например, в боте @Strawberry Logic.
Для размещения кнопок используются следующие объекты:
- ReplyKeyboardMarkup
- KeyboardButton
- ReplyKeyboardHide
- InlineKeyboardMarkup
- InlineKeyboardButton
В адресной строке пример команды встроенной клавиатуры будет иметь вид:
https://api.telegram.org/bot507226896:AAGT_fsEO1mi... согласен’,’callback_data’:’/no_call’}]]}
У вас в боте должны быть созданы команды /yes_call и /no_call. В качестве обратного вызова (callback) вы можете задавать любые свои команды.
Код реализации в PHP:
$button_yes = array('text' => 'Согласен', 'callback_data' => '/yes_call');
$button_no = array('text' => 'не согласен', 'callback_data' => '/no_call');
$keyboard = array('inline_keyboard' => array(array($button_yes, $button_no)));
$params['reply_markup'] = json_encode($keyboard, TRUE);
$con = curl_init();
$msg=$url."sendMessage?chat_id=".$chatID."&text=Hello&reply_markup=".$params['reply_markup'];
curl_setopt($con, CURLOPT_URL, $msg);
curl_setopt($con, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($con, CURLOPT_HEADER, 0);
$output = curl_exec($con);
Мы рассказали, как создать простейший бот на PHP. Попробуйте выполнить эти несложные примеры и запустить свою первую программу.