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

Создание 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 ботами.

Взаимодействие c 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

Если вы всё сделали правильно, то увидите в браузере следующую информацию:

Это говорит о том, что Вебхук был установлен.

Получение сообщений от 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', '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 и отправляет сообщения боту.

Main Menu