Боты
Как запустить Telegram-бота на вебхуке
Большинство ботов написаны так: программа в бесконечном цикле спрашивает Telegram «есть что-нибудь новое?». Это простой способ, но он требует, чтобы процесс работал постоянно. Вебхук устроен наоборот: вы один раз говорите Telegram адрес, и он сам стучится к вам, когда пользователь что-то написал. Тут появляется требование, о которое обычно всё и упирается — адрес должен быть публичным и с защищённым соединением, то есть нужен домен и сертификат.
Это и есть та часть, которую Netrun закрывает целиком: вы загружаете код, мы поднимаем приложение и выдаём публичный адрес с HTTPS. Дальше остаётся сообщить этот адрес Telegram. Бонусом бот на вебхуке ведёт себя как обычный сайт — а сайты на бесплатном тарифе живут без ограничения по времени.
Перепишите бота с опроса на приём запросов#
Вместо бесконечного цикла опроса бот должен подниматься как маленькое веб-приложение и обрабатывать входящие запросы от Telegram. На Python это обычно Flask, FastAPI или встроенный веб-режим aiogram, на Node.js — Express рядом с Telegraf или grammY. Логика ответов при этом не меняется, меняется только способ получения сообщений.
Слушайте порт из переменной окружения#
Приложение должно слушать тот порт, который задаёт платформа через переменную окружения PORT, а не жёстко прописанный в коде. Иначе запросы просто не дойдут. Слушать нужно на всех адресах, а не только на локальном — иначе снаружи приложение тоже будет недоступно.
Загрузите код и получите адрес#
Загрузите проект ZIP-архивом или импортируйте репозиторий из GitHub, в том числе приватный. Токен от BotFather впишите при настройке проекта — он ляжет в переменные окружения в зашифрованном виде. Netrun соберёт приложение, запустит его и выдаст публичную ссылку с HTTPS: именно она и станет адресом вебхука.
Сообщите адрес Telegram#
Осталось сказать Telegram, куда слать сообщения. Это делается один раз — методом setWebhook, вручную по ссылке в браузере или из кода при старте бота. Второй вариант удобнее: тогда после каждой публикации вебхук выставляется сам, и вы не забудете это сделать. В путь вебхука полезно добавить секретную часть, чтобы посторонние запросы не выдавали себя за Telegram.
Проверьте на бесплатном тарифе#
Бот на вебхуке — это обычное веб-приложение, поэтому на бесплатном тарифе он живёт без ограничения по времени, в отличие от бота на опросе. Нюанс один: когда боту долго никто не пишет, проект засыпает и просыпается по первому входящему запросу. Первое сообщение после долгой паузы может ответить с задержкой в несколько секунд, дальше бот отвечает как обычно. Если задержка недопустима — на тарифе Pro проект не засыпает.
Вебхук снимает необходимость держать процесс в вечном цикле опроса, а вместе с ним и главный аргумент за аренду сервера. Публичный адрес с HTTPS выдаётся сам, сертификат настраивать не нужно, а на бесплатном тарифе такой бот живёт без ограничения по сроку. Попробовать Netrun.
Частые вопросы
Чем вебхук лучше постоянного опроса?
При опросе бот сам всё время спрашивает Telegram о новых сообщениях, поэтому процесс обязан работать непрерывно. При вебхуке Telegram приходит к вам сам, только когда есть что доставить. Для бота это меньше лишней работы, а для вас — возможность держать бота как обычный сайт.
Нужен ли для вебхука свой домен и сертификат?
Telegram требует адрес с защищённым соединением, но покупать домен и настраивать сертификат не нужно: Netrun выдаёт публичную ссылку с HTTPS сразу после публикации. Свой домен можно привязать позже на тарифе Pro, если он вам нужен.
Будет ли бот на вебхуке работать на бесплатном тарифе?
Да, и без ограничения по времени — в отличие от бота на опросе, который на бесплатном тарифе выключается через 30 минут. Разница в том, что бот на вебхуке ведёт себя как сайт: он засыпает, когда сообщений долго нет, и просыпается по входящему запросу. Первое сообщение после долгой паузы может прийти с небольшой задержкой.
Как понять, что вебхук выставлен правильно?
Спросите у Telegram методом getWebhookInfo: он покажет текущий адрес и последнюю ошибку доставки, если она была. Плюс в кабинете видны логи в реальном времени — по ним видно, доходят ли запросы до приложения.
Можно ли вернуться обратно на опрос?
Да, для этого достаточно снять вебхук методом deleteWebhook и вернуть прежний код. Учтите, что бот на опросе на бесплатном тарифе работает 30 минут, а затем выключается — для постоянной работы такому боту нужен тариф Pro.
Можно ли разместить Telegram-бота?
Да. Загрузите код бота и укажите токен от BotFather (его выдаёт сам Telegram при создании бота) — Netrun запустит бота, VPS и ручная настройка не нужны. На бесплатном тарифе бот работает 30 минут, чтобы вы всё проверили; чтобы он работал круглосуточно, подключите тариф Pro.
Почему мой сайт иногда засыпает?
На бесплатном тарифе сайты засыпают после простоя и просыпаются за пару секунд при первом запросе. На тарифе Pro проект работает без сна.
Где указать токены и другие секретные значения?
В проекте есть вкладка «Секреты» — там задаются значения из кода, например токен от BotFather. Мы храним их в зашифрованном виде: названия переменных вы видите, сами значения не показываем никому, включая вас.