Telegram bot на локале

При разработке любых приложений их приходится тестировать, а значит, инструмент должен быть рабочим. В современных реалиях просто необходимо, чтобы в продакшене находился только рабочий код, соответственно вся разработка должна вестись на локале. Сегодня поговорим о том, как запустить телеграм бота на локальной машине без наличия белого IP, HTTPS сертификата и т.п.

Шаг 1

Первое, что нам понадобится сделать, это зарегистрировать тестового бота в Telegram.
Для этого пишем боту BotFather сообщение

/newbot

Далее следуем инструкциям и получаем токен для тестового бота, например:

1637791451:AAGRg52LucasXcd-6oXT-W13QpHoJRGp_J4

Шаг 2

Для того, чтобы Telegram бот работал, ему надо обращаться к URL по протоколу https и у домена должен быть сертификат. Для решения этой проблемы существует сервис ngrok.

Он позволяет создать туннель с локальной машины к серверу, у которого есть все необходимые сертификаты.

https://ngrok.com/

Регистрируемся и авторизуемся на сайте. Прямо на главной странице будет инструкция, что нужно сделать:

  • Скачать файл
  • Распаковать
  • Присоединиться к своему аккаунту
  • Запустить туннель на 8000 порту ./ngrok http 8000

Шаг 3

Теперь нужно зарегистрировать бот на сервер ngrok. Надо понимать, что сервер поднимается только тогда, когда запущен туннель и каждый раз это новый сервер, поэтому после перезагрузки туннеля, шаг 3 нужно будет делать заново для продолжения работы с ботом.

Для регистрации бота, нужно пройти по адресу

https://api.telegram.org/bot1637791451:AAGRg52LucasXcd-6oXT-W13QpHoJRGp_J4/setWebhook?url=https://a2f86c865986.ngrok.io/telegram/OmoTestBot/

где OmoTestBot — название тестового бота

Подробнее о установке Webhook можно почитать здесь

Шаг 4

Осталось добавить a2f86c865986.ngrok.io в ALLOWED_HOSTS и запустить dev вебсервер на локальной машине на порту 8000. В случае с Django — ./manage.py runserver_plus