[ZILANT] настройка запуска респондер-бота через релей
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/push/woodpecker Pipeline was successful
This commit is contained in:
@@ -16,17 +16,15 @@ WORKMODE = "ZILANT"
|
||||
RELAY_URL = "http://192.168.0.109:5100"
|
||||
|
||||
# Webhook Responder-bot
|
||||
# WEBHOOK_URL — адрес, по которому internal_relay доставляет апдейты боту
|
||||
# (должен быть доступен с машины internal_relay). Не публичный URL для Telegram:
|
||||
# Telegram ходит на external_relay; setWebhook перехватывается relay.
|
||||
# WEBHOOK_URL = "http://127.0.0.1:5010/volk_bot"
|
||||
# WEBHOOK_URL — адрес локальной доставки апдейтов от internal_relay к gunicorn-боту
|
||||
# (должен быть доступен с машины internal_relay). Не URL для Telegram.
|
||||
# gunicorn слушает 192.168.0.109:5005 — указываем его напрямую.
|
||||
# WEBHOOK_URL = "http://192.168.0.109:5010/volk_bot"
|
||||
# WEBHOOK_PORT = 5010
|
||||
# WEBHOOK_SECRET = "cc0dbc1841660da0b14d7df86ab5e0ed973c"
|
||||
|
||||
# Webhook Responder-bot
|
||||
# Пример: бот и relay на одной машине — http://127.0.0.1:5005/testbot
|
||||
# Или URL через nginx, если internal_relay достучится до него
|
||||
WEBHOOK_URL = "https://bot.aabpro.ru/testbot"
|
||||
WEBHOOK_URL = "http://192.168.0.109:5005/testbot"
|
||||
WEBHOOK_PORT = 5005
|
||||
WEBHOOK_SECRET = "cc0dbc1841660da0b14d7df86ab5e0ed973c"
|
||||
|
||||
|
||||
+8
-3
@@ -1433,13 +1433,15 @@ def handle_callback(call):
|
||||
bot.answer_callback_query(call.id, "Произошла ошибка. Пожалуйста, попробуйте позже.")
|
||||
|
||||
def setup_webhook():
|
||||
"""Настройка вебхука"""
|
||||
"""Настройка вебхука через ретранслятор (доставка на WEBHOOK_URL)."""
|
||||
logger.info(f"starting setup_webhook")
|
||||
try:
|
||||
# Удаляем предыдущий вебхук
|
||||
bot.remove_webhook()
|
||||
|
||||
# Устанавливаем новый вебхук
|
||||
# Устанавливаем новый вебхук:
|
||||
# relay сохранит WEBHOOK_URL как адрес локальной доставки и зарегистрирует
|
||||
# внешний URL на Telegram (external_relay).
|
||||
bot.set_webhook(
|
||||
url=WEBHOOK_URL,
|
||||
secret_token=WEBHOOK_SECRET,
|
||||
@@ -1457,7 +1459,7 @@ def setup_webhook():
|
||||
error_msg = f"Ошибка настройка вебхука: {e}"
|
||||
logger.error(error_msg)
|
||||
log_event("error", "system", message=error_msg)
|
||||
exit(1)
|
||||
raise RuntimeError(error_msg) from e
|
||||
|
||||
# Используем путь из WEBHOOK_URL
|
||||
@app.route(WEBHOOK_PATH, methods=['POST'])
|
||||
@@ -1532,7 +1534,10 @@ if __name__ == '__main__':
|
||||
log_event("system", "system", message="Бот запущен")
|
||||
|
||||
# Настраиваем вебхук
|
||||
try:
|
||||
setup_webhook()
|
||||
except Exception:
|
||||
exit(1)
|
||||
|
||||
# Логируем запуск Flask
|
||||
logger.info(f"starting Flask")
|
||||
|
||||
+23
-1
@@ -1,4 +1,26 @@
|
||||
from tg_mainbot import app # Импортируйте ваше приложение
|
||||
import fcntl
|
||||
import os
|
||||
|
||||
from tg_mainbot import app, setup_webhook
|
||||
|
||||
|
||||
def _setup_webhook_once():
|
||||
"""
|
||||
Регистрируем webhook один раз при старте gunicorn.
|
||||
Без этого (__main__ не вызывается) Telegram не шлёт апдейты через relay —
|
||||
ссылка «Подписка» (/start) молчит.
|
||||
"""
|
||||
lock_path = os.path.join(os.getenv("TMPDIR", "/tmp"), "zilant_webhook_setup.lock")
|
||||
with open(lock_path, "w") as lock_file:
|
||||
try:
|
||||
fcntl.flock(lock_file.fileno(), fcntl.LOCK_EX | fcntl.LOCK_NB)
|
||||
except BlockingIOError:
|
||||
# Другой воркер уже ставит webhook
|
||||
return
|
||||
setup_webhook()
|
||||
|
||||
|
||||
_setup_webhook_once()
|
||||
|
||||
if __name__ == "__main__":
|
||||
app.run()
|
||||
|
||||
Reference in New Issue
Block a user