From 7093d368d3356c692bff3eddda68996579bfd036 Mon Sep 17 00:00:00 2001 From: "Dmitry V. Lunin" <49199230+BlackRaincoat@users.noreply.github.com> Date: Tue, 21 Apr 2026 08:02:53 +0300 Subject: [PATCH] feat: add WEBHOOK_IP to allow Telegram bypass DNS lookup for webhook (#2894) * feat: add WEBHOOK_IP to allow Telegram bypass DNS lookup for webhook * style: ruff format main.py --------- Co-authored-by: Dmitry Lunin --- .env.example | 3 +++ app/config.py | 1 + main.py | 1 + 3 files changed, 5 insertions(+) diff --git a/.env.example b/.env.example index cc8cf82f..7e6b8325 100644 --- a/.env.example +++ b/.env.example @@ -974,6 +974,9 @@ DEBUG=false WEBHOOK_URL= WEBHOOK_PATH=/webhook WEBHOOK_SECRET_TOKEN= +# IP адрес сервера для setWebhook — Telegram будет использовать его напрямую без DNS резолва домена +# Необходимо в регионах где Telegram не может резолвить домены (РФ и др.) +# WEBHOOK_IP= WEBHOOK_DROP_PENDING_UPDATES=true WEBHOOK_MAX_QUEUE_SIZE=1024 WEBHOOK_WORKERS=4 diff --git a/app/config.py b/app/config.py index 7055069f..61eae72a 100644 --- a/app/config.py +++ b/app/config.py @@ -768,6 +768,7 @@ class Settings(BaseSettings): WEBHOOK_URL: str | None = None WEBHOOK_PATH: str = '/webhook' WEBHOOK_SECRET_TOKEN: str | None = None + WEBHOOK_IP: str | None = None # IP адрес для setWebhook, чтобы Telegram не резолвил домен WEBHOOK_DROP_PENDING_UPDATES: bool = True WEBHOOK_MAX_QUEUE_SIZE: int = 1024 WEBHOOK_WORKERS: int = 4 diff --git a/main.py b/main.py index cc489bd9..b662f334 100644 --- a/main.py +++ b/main.py @@ -607,6 +607,7 @@ async def main(): secret_token=settings.WEBHOOK_SECRET_TOKEN, drop_pending_updates=False, # Обрабатываем накопившиеся обновления allowed_updates=allowed_updates, + **({'ip_address': settings.WEBHOOK_IP} if settings.WEBHOOK_IP else {}), ) stage.log(f'Webhook установлен: {webhook_url}') stage.log(f'Allowed updates: {", ".join(sorted(allowed_updates)) if allowed_updates else "all"}')