Для розробки 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 ботами.
Взаємодія з 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', '5741786015:AAGTuEwCBGHmcJP9kO-OzV_xKIduBkbAK6Y');
// Функція виклику методів 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 та надсилає повідомлення боту.
