Бот на бесплатном хостинге: расчёт на облачных функциях
Бесплатный хостинг для бота обычно ищут как сервер, который не просит денег. Такие есть, но они засыпают, режут ресурсы или закрываются. Есть другой путь: не держать бота запущенным вовсе, а запускать код на каждое сообщение и платить за вызовы — с бесплатным объёмом, которого небольшому боту хватает с запасом. Считаю, насколько.
Бот, который работает на обычном сервере, запущен всегда: процесс крутится круглые сутки и ждёт сообщений, даже если за день их пришло три. За это время и платят.
Облачная функция устроена наоборот. Кода не существует, пока не пришло сообщение: платформа запускает его на каждый вызов, он отрабатывает за доли секунды и исчезает. Платите за число вызовов и за то, сколько памяти и времени они заняли. Тишина ночью не стоит ничего.
Для бота это почти идеальная модель: он и так ничего не делает, пока ему не написали.
Сколько бесплатно
Считаю на Yandex Cloud Functions: для бота, работающего с российской аудиторией, это самый прямой вариант — рубли, российская карта, дата-центры в России. По тарифам на сентябрь 2026 года каждый месяц не тарифицируются:
- 1 000 000 вызовов функций;
- 10 ГБ×час выполнения — объём памяти функции, умноженный на время работы.
Сверх этого — 6,48 ₽ за ГБ×час и 18,97 ₽ за миллион вызовов. Остаток бесплатного объёма на следующий месяц не переносится. Тарифы меняются, поэтому перед запуском стоит открыть страницу цен, а не верить статье.
Миллион вызовов небольшой бот не израсходует никогда. Упираются в другое — в гигабайт-часы, и здесь всё решает, сколько времени занимает ответ.
Расчёт на реальной архитектуре
Возьмём устройство бота-квалификатора заявок, который так и работает. У него две функции:
- приёмная — получает сообщение от телеграма, проверяет, что оно действительно от телеграма, кладёт его в очередь и сразу отвечает «принято»;
- рабочая — забирает сообщение из очереди, ведёт диалог, при необходимости спрашивает языковую модель и отвечает пользователю.
Допустим, боту пишут тысячу сообщений в день — это около 30 000 в месяц, для бота малого бизнеса много. Память и время ниже — типичные для такой схемы значения, а не замер конкретного бота: подставьте свои из консоли, формула та же. Округление времени идёт вверх до 100 мс, это уже заложено.
| Что | Память | Время | На одно сообщение | За месяц |
|---|---|---|---|---|
| Приёмная функция | 128 МБ | 0,2 с | 0,025 ГБ×с | 750 ГБ×с |
| Рабочая, обычный шаг диалога | 256 МБ | 0,5 с | 0,125 ГБ×с | 3 750 ГБ×с |
| Итого | 4 500 ГБ×с = 1,25 ГБ×час |
Это восьмая часть бесплатного объёма. Вызовов — 60 000 из миллиона. Бот с тысячей сообщений в день стоит ноль рублей за вычисления.
Теперь худший случай: каждое сообщение уходит в языковую модель, и функция ждёт её ответа 10 секунд. Рабочая функция тогда тратит 0,25 ГБ × 10 с = 2,5 ГБ×с на сообщение, за месяц — 75 000 ГБ×с, или 20,8 ГБ×час. Это на 11 ГБ×час больше бесплатного, то есть около 70 рублей в месяц.
Вывод из расчёта неожиданный: выход за бесплатный объём здесь стоит десятки рублей, а не тысячи. Дорогой строкой станет не хостинг, а сама модель — её счёт приходит отдельно, от её провайдера, и считается по объёму текста.
Что съедает бесплатность на самом деле
Ожидание внутри функции. Функция тарифицируется, пока она запущена, — в том числе пока она просто ждёт ответа модели или внешнего сервиса. Десять секунд ожидания стоят столько же, сколько десять секунд вычислений. Поэтому долгие операции выносят из приёмной функции: она должна отвечать телеграму мгновенно.
Очередь. У неё свой бесплатный объём — 100 000 запросов в месяц, в десять раз меньше, чем вызовов у функций, — и на одно сообщение приходится больше одного запроса к очереди: положить, забрать, подтвердить. На нашем примере в 30 000 сообщений это может оказаться близко к границе — сколько запросов уходит на сообщение в вашей схеме, видно в консоли после первой недели работы. Считать бесплатность надо по самому узкому месту, а оно не там, где ищут.
Подготовленные экземпляры. Функцию можно держать «прогретой», чтобы первый вызов после паузы не был медленнее остальных. Простой таких экземпляров тарифицируется отдельно и в бесплатный объём не входит — для бота малого бизнеса эта опция почти никогда не нужна.
Лишняя память. Время умножается на память. Функция, которой выставили 1 ГБ «на всякий случай», при той же работе тратит бесплатный объём в восемь раз быстрее, чем на 128 МБ.
Что придётся сделать иначе, чем в учебниках
Вебхук, а не опрос. Большинство примеров бота на Python запускают его в режиме постоянного опроса: программа сама раз в секунду спрашивает телеграм, нет ли новых сообщений. Для этого процесс должен жить всегда — на облачных функциях так нельзя. Бот переводится на вебхук: телеграм сам присылает каждое сообщение на адрес функции. Библиотеки это умеют, но код запуска меняется. Облачные функции поддерживают и Python, и Node.js, язык здесь не ограничение.
Отвечать телеграму быстро и не бояться повторов. Если адрес вебхука не ответил, телеграм пришлёт то же сообщение ещё раз. Медленная функция без защиты превращает одно сообщение в два ответа. В боте-квалификаторе на это две меры: приёмная функция отвечает сразу, а рабочая помнит номера уже обработанных сообщений и повторы пропускает.
Проверять, что пишет телеграм. Адрес функции публичный, и отправить на него поддельное «сообщение» может кто угодно. При установке вебхука телеграму передаётся секретная строка, и он кладёт её в заголовок каждого запроса. Функция без этой проверки — открытая дверь.
Хранить состояние снаружи. Между вызовами функция ничего не помнит: где пользователь находится в диалоге, приходится хранить в базе. У той же платформы есть бессерверная база с помесячным бесплатным пакетом запросов, так что это не отдельный счёт, а часть той же схемы.
И последнее, неочевидное: даже для бесплатного объёма в Yandex Cloud нужен привязанный платёжный аккаунт. Деньги с него не списываются, пока объём не превышен, но без него ресурсы не создать.
Когда облачные функции не подходят
Долгое открытое соединение. Функция отвечает один раз и завершается. Если ответ должен печататься на глазах по кусочкам, как у чата с моделью на сайте, нужен процесс, который держит соединение. Ассистент на этом сайте поэтому живёт на обычном сервере — ровно из-за потоковой передачи. Внутри телеграма это обходится: бот отправляет сообщение и потом дописывает его правками, с паузами между ними, чтобы не упереться в ограничения телеграма на частоту.
Бот, который читает телеграм как пользователь. Клиентские библиотеки держат постоянную сессию — это задача для сервера.
Тяжёлая обработка. Распознавание голоса своей моделью, обработка видео, большие файлы — у функций есть лимиты на память и размер, и считать гигабайт-часы на таких задачах уже невыгодно.
Бот уже написан на опросе, и переписывать его не хочется. Тогда проще недорогой виртуальный сервер: несколько сотен рублей в месяц, и код остаётся как есть.
Что выбрать
| Ситуация | Где размещать |
|---|---|
| Бот для заявок, записи, уведомлений, до тысяч сообщений в день | Облачные функции — бесплатно или за десятки рублей |
| Бот с языковой моделью в каждом ответе | Облачные функции с очередью; главная статья расходов — модель |
| Готовый бот на опросе, переписывать не хочется | Недорогой сервер |
| Потоковые ответы, клиентская сессия, тяжёлые файлы | Сервер |
То же самое работает не только для ботов. Репетитор английского — с входом, базой учеников и хранилищем — размещён на тех же облачных функциях и на небольшом числе учеников укладывается в бесплатные лимиты. А если вопрос не про бота, а про сайт, — бесплатный хостинг для него устроен иначе, разобрано отдельно.
Запустить бота без платы за сервер
Напишите в Telegram пару предложений о задаче: что за бизнес, что должно получиться и что уже пробовали. В ответ — понятный план и цена. Без брифов на десять страниц.