Павел Зверев

Fullstack developer
Программирование Проекты 1208

Telegram: делаем вебхуки и сертификаты для IP-адреса

Инструкция по созданию вебхука для Telegram с самоподписанным сертификатом на случай, если у вас нет домена (а для условного Let's Encrypt он нужен), но очень нужно всё быстро запустить.

Моя конфигурация: Async Telebot (Python) -> Starlette -> Uvicorn -> Nginx. Сервер на Ubuntu.

1. Установите OpenSSL на ваш сервер.

apt install openssl

2. Перейдите в рабочую директорию или в директорию где вы будете хранить свои сертификаты и введите следующую команду. Замените IP_СЕРВЕРА на соответствующий вашему.

openssl req -newkey rsa:2048 -sha256 -nodes -x509 -days 365 \
-keyout private.key \
-out public.crt \
-subj "/C=RU/ST=Moscow/L=Moscow/O=User Inc./CN=IP_СЕРВЕРА"
openssl x509 -in public.crt -out public.pem -outform PEM

После выполнения команд выше в вашей рабочей директории появятся три файла: public.crt, public.pem, private.key.

Файл public.pem мы будем передавать Telegram при установлении вебхука.

3. Пропишите пути к сертификатам public.pem и private.key в вашей конфигурации Nginx.

server {
  ...
  listen ПОРТ ssl;

  ssl_certificate /certificates/public.pem;
  ssl_certificate_key /certificates/private.key;

  ...
}

Учтите, что телеграм отправляет запросы только на следующие порты: 443, 80, 88, 8443.

4. У Telebot вебхук задаётся методом set_webhook. Где PUBLIC.PEM, укажите путь к этому файлу.

bot.set_webhook(
  url = WEBHOOK_URL,
  secret_token = WEBHOOK_SECRET_TOKEN,
  certificate = open('PUBLIC.PEM', 'r')
)

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

Если всё-таки у вас возникли проблемы, то перейдите по ссылке ниже и посмотрите наличие возможных ошибок.

https://api.telegram.org/botТОКЕН_БОТА/getWebhookInfo
"""
:ТОКЕН_БОТА: замените на свой

Возвращает подробную информацию о состоянии вебхука. Отобразит возможные ошибки, при их наличии.
"""
Поделиться
Отправить
Линкануть

Фриланс

Создаю сайты, пишу скрипты на Python, fullstack, шарю за блокчейны
Связаться со мной от 5000₽/мин. чек
На фрилансе с 2014 года. Программирую, пишу свой софт и люблю блокчейны. Если есть интересный проект или предложение — пишите. Cправа указаны не все навыки, а только языки.
HTML
9/10
CSS
9/10
Javascript
7/10
Python
8/10
Linux
5/10
Communication
9/10