розробка телеграм бота

Створення Telegram бота на PHP: Надсилання та отримання повідомлень. Урок 2

Для розробки Telegram ботів я створив піддомен info.d-nik.site. Його я використовуватиму для створення сайту новин, а також для програмування ботів на PHP. Тобто, саме тут я зберігатиму php скрипти для взаємодії з телеграмами ботами.

Якщо ви не знаєте, як створити піддомен, то я крок за кроком опишу як це робиться на хостингу ukraine.com.ua (це хостинг на якому розміщено мій сайт). Але пам'ятайте, що у кожного хостинг-провайдера свої особливості, і тому у вас цей процес може бути дещо іншим.

Створюємо піддомен на хостингу Ukraine

Для того, щоб створити піддомен, потрібно:

1. Авторизуватися на сайті ukraine.com.ua і перейти до розділу «Мої сайти».

Хостинг Ukraine

2. Натиснути «Додати піддомен» у блоці потрібного сайту.

Додати піддомен

3. У вікні, що з'явилося, потрібно ввести бажану назву піддомена (я ввів info), вибрати потрібний сайт (у мене і так обраний d-nik.info) і натиснути на кнопку «Додати».

назва піддомена

4. Тепер потрібно трохи почекати, поки буде створено віртуальний хост та кореневий каталог піддомену.

Через декілька хвилин, якщо ми перейдемо до кореневого каталогу сайту d-nik.site, то в ньому вже буде папка info. Це і є кореневий каталог нашого нового сайту і, як я вже говорив раніше, тут ми зберігатимемо PHP скрипти для взаємодії з Telegram ботами.

Взаємодія з Telegram ботом

Давайте тепер перейдемо в цей каталог info і створимо файл bot.php.

telegram 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

Якщо ви все зробили правильно, то побачите в браузері наступну інформацію:

Це говорить про те, що Вебхук було встановлено.

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 з наступним змістом:

Тут,

  • «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 та надсилає повідомлення боту.

Main Menu