feat: уведомления в MAX (VK Teams)

This commit is contained in:
2026-05-17 19:58:21 +07:00
parent cfcbb51885
commit 695a6a3608
2 changed files with 39 additions and 1 deletions
+34 -1
View File
@@ -26,6 +26,11 @@ TELEGRAM_BOT_TOKEN = os.environ["TELEGRAM_BOT_TOKEN"]
TELEGRAM_CHAT_ID = os.environ["TELEGRAM_CHAT_ID"]
TELEGRAM_API_URL = os.getenv("TELEGRAM_API_URL", "https://api.telegram.org")
# MAX (VK Teams) — опционально, если не заданы — уведомления не отправляются
MAX_BOT_TOKEN = os.getenv("MAX_BOT_TOKEN", "")
MAX_CHAT_ID = os.getenv("MAX_CHAT_ID", "")
MAX_API_URL = os.getenv("MAX_API_URL", "https://platform-api.max.ru")
# Имя address-list в MikroTik (/ip firewall address-list)
ADDRESS_LIST_NAME = os.environ["ADDRESS_LIST_NAME"]
@@ -63,8 +68,36 @@ async def send_telegram(message: str) -> None:
log.error("Telegram: ошибка отправки — %s", exc)
async def send_max(message: str) -> None:
"""Отправляет уведомление в MAX (VK Teams)."""
if not MAX_BOT_TOKEN or not MAX_CHAT_ID:
return
url = f"{MAX_API_URL}/messages"
headers = {
"Authorization": MAX_BOT_TOKEN,
"Content-Type": "application/json",
}
# MAX не поддерживает HTML-теги — убираем их
import re
clean = re.sub(r"<[^>]+>", "", message)
payload = {"chat_id": int(MAX_CHAT_ID), "text": clean}
async with httpx.AsyncClient(timeout=10) as client:
try:
resp = await client.post(url, headers=headers, json=payload)
log.info("MAX response %s: %s", resp.status_code, resp.text)
resp.raise_for_status()
log.info("MAX: сообщение отправлено")
except Exception as exc:
log.error("MAX: ошибка отправки — %s", exc)
def notify(message: str) -> None:
asyncio.run(send_telegram(message))
async def _send_all():
await asyncio.gather(
send_telegram(message),
send_max(message),
)
asyncio.run(_send_all())
# ──────────────────────────────────────────────