Инструкция по созданию вебхука для 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
"""
:ТОКЕН_БОТА: замените на свой
Возвращает подробную информацию о состоянии вебхука. Отобразит возможные ошибки, при их наличии.
"""