Часто разработчики ботов сталкиваются с вопросом: бот или его прототип готов, всё отлично работает в локальном окружении, и пора бы запустить бота в проде - но где его захостить?
Конечно, это зависит от языка программирования, на котором написан ваш Telegram-бот.
И конечно, быстрый гугл-поиск подскажет, что если ваш бот написан на Python или Node JS, то для его хостинга потребуется аренда сервера.
Но может попробуем обойтись обычным shared-хостингом? Ведь у многих есть бесплатный тестовый период вплоть до 30 дней - вполне можно настроить бота, обкатать MVP и понять, стоит ли двигаться дальше и платить деньги.

С каждым днем появляется всё больше хостинг-провайдеров, которые предоставляют тарифные планы с поддержкой не только PHP, как было раньше, но и таких языков как Python, Ruby, Node JS.
Я создал двух простых ботов, и оба разметил на том же хостинге, на котором работает и этот сайт.
Вот этот @hosting_telegram_php_bot - на PHP,
и второй бот @hosting_telegram_bot - на Python.
Это хостинг Beget. Он поддерживает Python.
И удобен тем, что дает 30 дней для бесплатного теста.
А также удобным интерфейсом, так что часть операций можно будет сделать через визуальные настройки,
если вы не очень любите работу с консолью (хотя совсем без неё, для бота на Python, обойтись не удастся).
Правда инструкций по настройке Python на обычном хостинге не так много, или они не юзер-френдли, или в них что-то упущено, и настройка окружения превращается в танцы с бубном.
Попробую изложить всё по шагам.
Во-первых, если вы решили разместить телеграм бота на хостинге, вам потребуется доменное имя.


Домен можно купить прямо у Beget. Или у другого регистратора.
Итак, домен куплен и добавлен в панели управления хостингом.
Теперь нужно настроить окружение.
Для работы бота я установлю Flask.
С хостингом telegram-бота, написанного на Python, придется повозиться подольше - оформил пошаговое руководство в отдельной статье.
И коротко о боте на PHP.


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

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


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


Вместо файла 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 для для бота, т.е. открыть в барузере ссылку вида:
https://api.telegram.org/bot<токен бота>/setWebhook?url=https://hosting-telegram-bota.ru/php-bot/bot.php

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

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