Хостинг для телеграмм ботов
Python, PHP, Node JS


Размещаем бота на Пайтон на обычном хостинге

Хостинг или сервер?

Часто разработчики ботов сталкиваются с вопросом: бот или его прототип готов, всё отлично работает в локальном окружении, и пора бы запустить бота в проде - но где его захостить?

Конечно, это зависит от языка программирования, на котором написан ваш Telegram-бот.

И конечно, быстрый гугл-поиск подскажет, что если ваш бот написан на Python или Node JS, то для его хостинга потребуется аренда сервера.

Но может попробуем обойтись обычным shared-хостингом? Ведь у многих есть бесплатный тестовый период вплоть до 30 дней - вполне можно настроить бота, обкатать MVP и понять, стоит ли двигаться дальше и платить деньги.

Хост телеграм бота


Хостинг для телеграмм ботов на Python с бесплатным пробным периодом в 30 дней

С каждым днем появляется всё больше хостинг-провайдеров, которые предоставляют тарифные планы с поддержкой не только PHP, как было раньше, но и таких языков как Python, Ruby, Node JS.


Я создал двух простых ботов, и оба разметил на том же хостинге, на котором работает и этот сайт. Вот этот @hosting_telegram_php_bot - на PHP, и второй бот @hosting_telegram_bot - на Python.


Это хостинг Beget. Он поддерживает Python. И удобен тем, что дает 30 дней для бесплатного теста. А также удобным интерфейсом, так что часть операций можно будет сделать через визуальные настройки, если вы не очень любите работу с консолью (хотя совсем без неё, для бота на Python, обойтись не удастся).

Beget тарифы

Правда инструкций по настройке Python на обычном хостинге не так много, или они не юзер-френдли, или в них что-то упущено, и настройка окружения превращается в танцы с бубном.

Попробую изложить всё по шагам.

Во-первых, если вы решили разместить телеграм бота на хостинге, вам потребуется доменное имя.

Недорогие домены и хостинг в Beget

Домен можно купить прямо в Beget

Домен можно купить прямо у Beget. Или у другого регистратора.

Хостинг бота на Python

Итак, домен куплен и добавлен в панели управления хостингом.

Теперь нужно настроить окружение.

Для работы бота я установлю Flask.

С хостингом telegram-бота, написанного на Python, придется повозиться подольше - оформил пошаговое руководство в отдельной статье.

Хостинг PHP-телеграмм-бота

И коротко о боте на PHP.

Домен добавлен в панель Beget

Для работы телеграмм бота на хостинге нам понадобится привзять домен и выпустить сертификат SSL

Мои боты работают через вебхуки. Telegram требует безопасного протокола HTTPS, поэтому к домену (после того, как обновятся записи DNS и ваш домен станет доступен) я привязал SSL-сертификат Let's Encrypt. Он тоже бесплатный.

После того, как обновились DNS, выпускаем бесплатный SSL-сертификат

Теперь, если мы перейдем в панели по кнопке "Файловый менеджер", у нас будет такая картина:

Хостинг готов к добавлению бота Telegram

Структура папок на хостинге перед началом работы

Внутри папки "hosting-telegram-bota.ru" находится папка public_html, а в ней - должны быть файлы вашего сайта (если он вам нужен).

Структура папок на хостинге Beget перед началом работы

Замена стандартного приветсвенного хостинга Бегет.

Вместо файла index.php я создам файл index.html, который будет главной страницей этого сайта.

С ботом на PHP все вообще просто. Вот его код, который я сохранил в виде файла bot.php

		<?php
		if ( $_SERVER['REQUEST_METHOD'] == 'GET' && realpath(__FILE__) == realpath( $_SERVER['SCRIPT_FILENAME'] ) ) {
			/* 
			   Запрещаем простой доступ через браузер
			*/
			header( 'HTTP/1.0 403 Forbidden', TRUE, 403 );	
			die( 'Not allowed!' );
		}
				 
		$data = file_get_contents('php://input');
		$data = json_decode( $data, true );

		/* 
		   дебаг, входящее сообщение
		*/

		//file_put_contents(__DIR__ . '/message.txt', print_r( $data, true ) );
		 
		if ( empty($data['message']['chat']['id']) && empty($data['callback_query']['message']['chat']['id'])) {	
			exit();
		}
		 
		define('TOKEN', 'token бота');
		 
		// Функция вызова методов 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 ( $text === '/start' ) {		
				$res = sendTelegram(
					'sendMessage',
						[
						'chat_id'      => $data[ 'message' ][ 'chat' ][ 'id' ],
						'text'         => "Добро пожаловать в бота!\nРаботает на PHP.\nВашему боту нужен хостинг с поддержкой:",
						'reply_markup' => json_encode(array(
						'inline_keyboard' => array(							
							array(
								array(
									'text' => 'Python',
									'url' => 'https://hosting-telegram-bota.ru/python/',
								),

								array(
									'text' => 'Node JS',
									'url' => 'https://hosting-telegram-bota.ru/',
								),
							),
							array(
								array(
									'text' => 'PHP',
									'url' => 'https://hosting-telegram-bota.ru/',
								),

								array(
									'text' => 'PHP - сила!!!',
									'callback_data' => '/php_power',
								),
							)
						),
					))
					
					]
				);
				
				$response = json_decode( $res, true );
				
				/* 
				   дебаг, ответ API telegram
				*/
				
				//file_put_contents(__DIR__ . '/res_message.txt', print_r( $response, true ) );	
				
				exit();
			}
			
		}

		// ответ на нажатие кнопки с callback 
		if ( !empty($data['callback_query']['data']) ) {
				
			$photo_res = sendTelegram(
				'sendPhoto', 
				array(
					'chat_id' => $data['callback_query']['message']['chat']['id'],
					'photo' => 'https://hosting-telegram-bota.ru/php-bot/PHP_power.jpg',
					'caption' => 'PHP-сила!!!'. PHP_EOL .'@hosting_telegram_php_bot',
				)
			);
					
					
			$photo_res = json_decode( $photo_res, true );
				
			/* 
			   дебаг, ответ API telegram
			*/
			
			//file_put_contents(__DIR__ . '/photo_res_message.txt', print_r( $photo_res, true ) );
			exit();
				
		}
		

а сам файлик я положил в папку /php-bot

Замена стандартного приветсвенного хостинга Бегет.

Когда сертификат SSL выпущен и адрес уже открывается по защищенному протоколу:

Можно добавлять webhook для бота

Остается только активировать webhook для для бота, т.е. открыть в барузере ссылку вида:

https://api.telegram.org/bot<токен бота>/setWebhook?url=https://hosting-telegram-bota.ru/php-bot/bot.php

Вебхук для бота успешно установлен

После того, как увидим сообщение "Webhook was set", запускаем бота в телеграмм и проверяем, что в ответ на /start он присылает небольшое приветствие с кнопками:

Телеграм-бот на PHP


Полезные ссылки: код для PHP-бота я подсмотрел здесь.