diff --git a/register_tg_webhook.py b/register_tg_webhook.py index 7f9306a..29fafe4 100644 --- a/register_tg_webhook.py +++ b/register_tg_webhook.py @@ -42,6 +42,12 @@ def main() -> int: "url": WEBHOOK_URL, "secret_token": WEBHOOK_SECRET, "max_connections": "40", + # Иначе Telegram может сохранить старый список без callback_query + "allowed_updates": json.dumps([ + "message", + "edited_message", + "callback_query", + ]), } print(f"RELAY_URL = {get_relay_url()}") print(f"WEBHOOK_URL = {WEBHOOK_URL}") diff --git a/tg_mainbot.py b/tg_mainbot.py index a0f2e10..d5c7d6e 100644 --- a/tg_mainbot.py +++ b/tg_mainbot.py @@ -2,6 +2,7 @@ import os import logging import time import errno +import json from dotenv import load_dotenv import telebot from telebot import apihelper @@ -1454,11 +1455,18 @@ def setup_webhook(): raise RuntimeError("WEBHOOK_URL не задан") api_url = bot_api_method_url(RESPONDER_BOT_TOKEN, "setWebhook") - # Все значения — строки (form-urlencoded), как ожидает parse_qs на relay + # Все значения — строки (form-urlencoded), как ожидает parse_qs на relay. + # allowed_updates обязательно: если не указать, Telegram сохраняет прежнюю + # настройку — часто без callback_query, и тогда кнопки «Подписаться»/«Справка» молчат. form = { "url": WEBHOOK_URL, "secret_token": WEBHOOK_SECRET, "max_connections": "40", + "allowed_updates": json.dumps([ + "message", + "edited_message", + "callback_query", + ]), } logger.info( f"setWebhook через relay: delivery_url={WEBHOOK_URL}, " diff --git a/wsgi_bot.py b/wsgi_bot.py index 62eb749..3db0274 100644 --- a/wsgi_bot.py +++ b/wsgi_bot.py @@ -11,7 +11,7 @@ def _ensure_webhook(): Блокирующий flock — без гонки 4 воркеров и без 429. """ digest = hashlib.sha256( - f"{WEBHOOK_URL}|{WEBHOOK_SECRET or ''}".encode("utf-8") + f"{WEBHOOK_URL}|{WEBHOOK_SECRET or ''}|allowed_v2".encode("utf-8") ).hexdigest()[:16] marker_path = f"/tmp/zilant_webhook_ok_{digest}" lock_path = "/tmp/zilant_webhook_setup.lock"