Как запустить 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, если он вам нужен.
Будет ли бот на вебхуке работать на бесплатном тарифе?
Да, и без ограничения по времени — в отличие от бота на опросе, который на бесплатном тарифе выключается через три дня. Разница в том, что бот на вебхуке ведёт себя как сайт: он засыпает, когда сообщений долго нет, и просыпается по входящему запросу. Первое сообщение после долгой паузы может прийти с небольшой задержкой.
Как понять, что вебхук выставлен правильно?
Спросите у Telegram методом getWebhookInfo: он покажет текущий адрес и последнюю ошибку доставки, если она была. Плюс в кабинете видны логи в реальном времени — по ним видно, доходят ли запросы до приложения.
Можно ли вернуться обратно на опрос?
Да, для этого достаточно снять вебхук методом deleteWebhook и вернуть прежний код. Учтите, что бот на опросе на бесплатном тарифе работает три дня, а затем выключается — для постоянной работы такому боту нужен тариф Pro.
Можно ли разместить Telegram-бота?
Да. Загрузите код бота и укажите токен от BotFather (его выдаёт сам Telegram при создании бота) — Netrun запустит бота, VPS и ручная настройка не нужны. На бесплатном тарифе бот работает 3 дня, чтобы вы всё проверили; чтобы он работал круглосуточно, подключите тариф Pro.
Почему мой сайт иногда засыпает?
На бесплатном тарифе сайты засыпают после простоя и просыпаются за пару секунд при первом запросе. На тарифе Pro проект работает без сна.
Где указать токены и другие секретные значения?
В настройках проекта есть раздел для значений из кода — например, токена от BotFather. Мы храним их в зашифрованном виде.