Telegram-бот — пример руководства по запуску проекта

Пример запуска проекта Telegram-бота в cPanel с использованием Flask и вебхуков

Проект, взятый для примера

Подготовленный нами проект Telegram-бота — это одно из самых простых приложений на python. После его запуска, если вы напишете «salom», «hi» или «привет», он вернет вам приветствие. На любое другое сообщение, кроме этих трех слов, он ответит, что вам нужно написать одно из трех ключевых слов.

Хотя проект очень прост, его подготовка к production и размещение на сервере могут показаться немного сложными. Причина в том, что размещение и запуск такого проекта именно в cPanel требует соблюдения определенных правил и настроек.

В локальной среде — на вашем компьютере — вы можете легко тестировать Telegram-бот с помощью обычного polling (постоянный цикл, запрашивающий у Telegram «нет ли новых сообщений»). Однако на VDS/VPS серверах и в готовых панелях, например, в среде cPanel, существуют свои правила и порядок действий.

Зачем использовать Flask и webhook

Наиболее правильный путь — использовать вебхуки и один из минимальных фреймворков, например Flask, который мы и используем. То есть с вебхуками мы не проверяем постоянно сервер Telegram вопросом «есть ли новое сообщение?». Telegram сам доставляет новые сообщения на подтвержденный нами URL. Flask же выполняет роль удобной среды для приема и обработки таких сообщений от вебхука.

Скачивание проекта

Скачать пример проекта в формате .zip

telegram_bot-sample.zip

Запуск проекта в cPanel

Создание субдомена для проекта

cPanel → Domains → Create A New Domain

Создаем отдельный субдомен для проекта. Поскольку Telegram работает только по протоколу https, мы создаем субдомен tg-bot.scroll.uz и убеждаемся, что для него выпущен SSL-сертификат.

Создание субдомена также автоматически создает папку с точно таким же названием

Создание Python App (приложения среды выполнения) для проекта

cPanel → Setup Python App → Create Application

  1. Python version — выбираем версию Python, соответствующую версиям Flask и других библиотек;
  2. Application root — папка проекта, в которой будет запускаться приложение. В нашем случае это папка, созданная для нашего субдомена — tg-bot.scroll.uz. Если вы настраиваете для основного домена, то public_html;
  3. Application URL — имя домена, выбираемое для этого приложения. В нашем случае выбирается субдомен tg-bot.scroll.uz;
  4. В поля «Application startup file» и «Application Entry point» ничего вводить не нужно. При создании приложения им автоматически присваиваются значения passenger_wsgi.py и application;
  5. На всякий случай настроим .log файл, сохраняющий логи. В дальнейшем, если в проекте возникнет какая-либо проблема, ее причину можно будет посмотреть и определить в этом лог-файле.

После создания приложения в верхней части будет предоставлена готовая терминальная команда для открытия его папки и активации среды. Сохраните её временно куда-нибудь. Чуть позже эта команда понадобится для установки библиотек через Терминал.

Загрузка архива проекта на сервер

cPanel → File Manager → /home/scroll/tg-bot.scroll.uz

Чтобы загрузить архив проекта в нужное место на сервере, открываем папку субдомена через интерфейс «File Manager» и нажимаем кнопку «Upload» (загрузить):

Выбираем архив проекта и загружаем его:

После завершения загрузки нажимаем «назад»:

Распаковываем загруженный архив:

Таким образом, мы загружаем файлы проекта в нужную папку на сервере.

Настройка проекта для Production / создание Telegram-бота

Первое действие — внутри проекта вам будет предоставлен файл sample.passenger_wsgi.py. Скопируйте его код в файл passenger_wsgi.py и сохраните.

Второе действие — создайте Telegram-бот через @BotFather, скопируйте значение токена бота в соответствующую часть файла config.py в проекте и сохраните.

Установка библиотек

cPanel → Terminal

Через Терминал сначала активируем env, используя команду, указанную в «Python App».

Затем, используя файл requirements.txt, устанавливаем все необходимые библиотеки:

pip install -r requirements.txt
Перезапускаем приложение

cPanel → Setup Python App

Открываем интерфейс приложения и перезапускаем его:

Отправляем в Telegram одноразовый URL-адрес вебхука

cPanel → Terminal

Этим действием Telegram настраивает у себя адрес, на который он должен отправлять запросы вебхука (ответные сообщения).

Для этого возвращаемся в Терминал и запускаем команду следующего вида:

curl -F "url=https://<YOUR_DOMAIN>/webhook" \
   https://api.telegram.org/bot<YOUR_BOT_TOKEN>/setWebhook

Это, конечно, пример команды. Вместо <YOUR_DOMAIN> и <YOUR_BOT_TOKEN> должны быть подставлены соответствующие значения.

Например, с нашим временно созданным доменом и токеном она примет следующий вид:

curl -F "url=https://tg-bot.scroll.uz/webhook" \
   https://api.telegram.org/bot8667036217:AAFrlLgJK-7jmFrYzpe6uYHMUQ8s55BzHSs/setWebhook

Результат, как на картинке, показывает, что настройка URL прошла успешно.

Проверяем бота

Как видите, бот выполняет свою задачу. Теперь самостоятельно изучите наш минимальный проект, посмотрите, как в нем реализован процесс, и примените это к своему проекту.

Удаление примера проекта из cPanel

Существуют ситуации, на которые мы можем не обращать пристального внимания, но если они выполнены неправильно, это может привести к неожиданным проблемам и трудностям. Одна из таких ситуаций — правильное удаление проекта, созданного через «Setup Python App». Если порядок удаления проекта нарушен, могут возникнуть непредвиденные проблемы.

Удаление приложения

cPanel → Setup Python App

В самую первую очередь приложение необходимо остановить (stop), а затем отправить на удаление (delete):

Удаление субдомена

cPanel → Domains → Manage

Затем мы можем удалить субдомен, созданный в качестве примера:

Удаление папки проекта

cPanel → File Manager

Удаление субдомена не удаляет его папку. Папку проекта мы удаляем сами через интерфейс «File Manager»:

Таким образом, проект будет полностью и без проблем удален.