Для разработки Telegram ботов, я создал поддомен info.d-nik.site. Его я буду использовать для создания новостного сайта, а также для программирования ботов на PHP. То есть, именно здесь я буду хранить php скрипты для взаимодействия с Телеграм ботами.
Если вы не знаете, как создать поддомен, то я пошагово опишу как это делается на хостинге ukraine.com.ua (это хостинг на котором размещён мой сайт). Но помните, что у каждого хостинг-провайдера свои особенности, и потому у вас этот процесс может быть несколько другим.
Создаём поддомен на хостинге Ukraine
Для того чтобы создать поддомен, нужно:
1. Авторизоваться на сайте ukraine.com.ua и перейти в раздел «Мои сайты».

2. Нажать «Добавить поддомен» в блоке нужного сайта.

3. В появившемся окне нужно ввести желаемое название поддомена (я ввёл info), выбрать нужный сайт (у меня и так выбран d-nik.info) и нажать на кнопку «Добавить».

4. Теперь нужно немного подождать, пока будет созданы виртуальный хост и корневой каталог поддомена.
Через несколько минут, если мы перейдём в корневой каталог сайта d-nik.site, то в нём уже будет папка info. Это и есть корневой каталог нашего нового сайта и, как я уже говорил ранее, здесь мы будем хранить PHP скрипты для взаимодействия с Telegram ботами.
Взаимодействие c Telegram ботом
Давайте теперь перейдём в этот каталог info и создадим в нём файл bot.php.

Вот в этом файле мы и будем писать PHP код для взаимодействия с ботом. Доступен он будет по адресу https://info.d-nik.site/bot.php.
На этом подготовительный этап закончен и можно переходить непосредственно к программированию.
Устанавливаем Webhook
Для того чтобы все сообщения из Telegram бота приходили на наш PHP скрипт, нужно установить «Webhook». Для этого в адресной строке браузера вводим ссылку со следующей конструкцией:
https://api.telegram.org/bot<token>/setWebhook?url= <file_path>
где,
- <token> – это токен, который мы получили при регистрации своего бота в Телеграм.
- <file_path> – путь к файлу PHP скрипта.
Для примера, моя ссылка выглядит следующим образом:
https://api.telegram.org/bot5741786015:AAGTuEwCBGHmcJP9kO-OzV_xKIduBkbAK6Y/setwebhook?url=https://info.d-nik.site/bot.php
Если вы всё сделали правильно, то увидите в браузере следующую информацию:
{"ok":true,"result":true,"description":"Webhook was set"}
Это говорит о том, что Вебхук был установлен.
Webhook – это удобный и быстрый способ оповестить клиента об изменении на сайте, основанный на методе расширения или изменения поведения веб-страницы или веб-приложения с помощью обратных вызовов.
Если говорить о том, как работает Webhook в Телеграм, то здесь всё очень просто. Когда приходит новое сообщение, сервер Telegram отправляет их вашему боту.
Получение сообщений от Telegram
Теперь мы можем написать свой первый код на PHP в файле bot.php, который позволит получить сообщение от Telegram с информацией о том, кто написал чат-боту, когда он это сделал, какой текст был написан и т.д.
<?php
// Принимаем запрос
$data = file_get_contents('php://input');
$data = json_decode($data, true);
file_put_contents(__DIR__ . '/message.txt', print_r($data, true)); //сохраняем входящие данные в файл
?>
Если сейчас мы отправим боту сообщение «Привет бот!», то на хостинге создастся файл message.txt и в нём будет храниться запрос от Telegram со следующим содержанием:
$data: Array
(
[update_id] => 699174043
[message] => Array
(
[message_id] => 22
[from] => Array
(
[id] => 1526361849
[is_bot] =>
[first_name] => UserFirstName
[last_name] => UserLastName
[username] => UserName
[language_code] => uk
)
[chat] => Array
(
[id] => 1526361849
[first_name] => UserFirstName
[last_name] => UserLastName
[username] => UserName
[type] => private
)
[date] => 1670785452
[text] => Привет бот!
)
)
Здесь,
- «message_id» — id созданного сообщения;
- «from» — кто отправил сообщение;
- «chat» — данные о чате в который попало сообщение;
- «date» — дата создания сообщения;
- «text» — текст сообщения.

Рисунок. Отправляем сообщение «привет бот!»

Рисунок. Файл message.txt на сайте
Отправка сообщений боту в Telegram
Давайте теперь рассмотрим простой пример, как можно взаимодействовать с пользователем. Например, проанализируем, какое сообщение было отправлено боту. Если было отправлено «/start», то бот ответит «Здравствуйте. Я ваш бот!». В любом другом случае пользователь увидит «Напишите пожалуйста /start!».
<?php
// Принимаем запрос
$data = file_get_contents('php://input');
$data = json_decode($data, true);
file_put_contents(__DIR__ . '/message.txt', print_r($data, true)); // Сохраняем входящие данные в файл
// Константа токен
define('TOKEN', '5582115707:AAHn-4lvH_JNzFNf0JZSAPfyzJXIAX5x9og');
// Функция вызова методов API
function sendTelegram($method, $response)
{
$ch = curl_init('https://api.telegram.org/bot' . TOKEN . '/' . $method);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $response);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, false);
$res = curl_exec($ch);
curl_close($ch);
return $res;
}
// Ответ на текстовые сообщения
// Получаем текст, который отправил пользователь Телеграмм боту в мессенджере
if (!empty($data['message']['text'])) {
$text = $data['message']['text'];
// Если пользователь отправил сообщение "/start"
if (mb_stripos($text, '/start') !== false) {
sendTelegram(
'sendMessage',
array(
'chat_id' => $data['message']['chat']['id'],
'text' => 'Здравствуйте. Я ваш бот!'
)
);
exit();
} else {
sendTelegram(
'sendMessage',
array(
'chat_id' => $data['message']['chat']['id'],
'text' => 'Напишите пожалуйста /start!'
)
);
exit();
}
}
?>
Обратите внимание на то, что при написании кода мы используем клиентскую библиотеку работы с URL – Curl. Она является намного более продвинутой альтернативой функции file_get_contents поскольку позволяет работать с куками, с заголовками, позволяет отправлять формы и переходить по редиректам.
Эта библиотека не требует дополнительных файлов, и ее не нужно подключать.
На этом урок можно заканчивать. В нём мы научились создавать поддомен на хостинге для нового сайта, создали PHP скрипт, и разработали программу взаимодействия с Telegram ботом, которая получает сообщения от Telegram и отправляет сообщения боту.
