#!/usr/bin/env python3 """ Ручная регистрация Telegram webhook через internal_relay (с secret_token). Запуск на сервере бота: cd /opt/testbot-git ./venv/bin/python register_tg_webhook.py Печатает полный ответ setWebhook — по нему видно, принял ли Telegram секрет. """ import json import sys from dotenv import load_dotenv import os import requests load_dotenv(os.path.join(os.path.dirname(os.path.abspath(__file__)), ".env")) load_dotenv() from telegram_relay import bot_api_method_url, get_relay_url TOKEN = os.getenv("RESPONDER_BOT_TOKEN") WEBHOOK_URL = os.getenv("WEBHOOK_URL") WEBHOOK_SECRET = (os.getenv("WEBHOOK_SECRET") or "").strip().strip('"').strip("'") def main() -> int: if not TOKEN: print("ERROR: RESPONDER_BOT_TOKEN не задан") return 1 if not WEBHOOK_URL: print("ERROR: WEBHOOK_URL не задан") return 1 if not WEBHOOK_SECRET: print("ERROR: WEBHOOK_SECRET не задан") return 1 api_url = bot_api_method_url(TOKEN, "setWebhook") form = { "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}") print(f"secret_len = {len(WEBHOOK_SECRET)}") print(f"POST = {api_url.replace(TOKEN, '')}") print(f"form keys = {list(form.keys())}") resp = requests.post(api_url, data=form, timeout=60) print(f"HTTP status = {resp.status_code}") try: data = resp.json() print("JSON response:") print(json.dumps(data, ensure_ascii=False, indent=2)) except Exception: print("Raw response:") print(resp.text[:1000]) return 1 if not data.get("ok"): print("FAILED: Telegram/relay вернул ok=false") return 1 print("OK: setWebhook принят. Нажмите «Подписка» / отправьте /start боту.") print("В логе бота не должно быть «Секретный токен отсутствует».") return 0 if __name__ == "__main__": sys.exit(main())