feat: уведомления в MAX (VK Teams)
This commit is contained in:
+34
-1
@@ -26,6 +26,11 @@ TELEGRAM_BOT_TOKEN = os.environ["TELEGRAM_BOT_TOKEN"]
|
|||||||
TELEGRAM_CHAT_ID = os.environ["TELEGRAM_CHAT_ID"]
|
TELEGRAM_CHAT_ID = os.environ["TELEGRAM_CHAT_ID"]
|
||||||
TELEGRAM_API_URL = os.getenv("TELEGRAM_API_URL", "https://api.telegram.org")
|
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 в MikroTik (/ip firewall address-list)
|
||||||
ADDRESS_LIST_NAME = os.environ["ADDRESS_LIST_NAME"]
|
ADDRESS_LIST_NAME = os.environ["ADDRESS_LIST_NAME"]
|
||||||
|
|
||||||
@@ -63,8 +68,36 @@ async def send_telegram(message: str) -> None:
|
|||||||
log.error("Telegram: ошибка отправки — %s", exc)
|
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:
|
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())
|
||||||
|
|
||||||
|
|
||||||
# ──────────────────────────────────────────────
|
# ──────────────────────────────────────────────
|
||||||
|
|||||||
@@ -35,6 +35,11 @@ services:
|
|||||||
# URL API (замените на прокси если api.telegram.org заблокирован)
|
# URL API (замените на прокси если api.telegram.org заблокирован)
|
||||||
- TELEGRAM_API_URL=https://api.telegram.org
|
- TELEGRAM_API_URL=https://api.telegram.org
|
||||||
|
|
||||||
|
# MAX (VK Teams) — опционально, удалите если не используете
|
||||||
|
- MAX_BOT_TOKEN=your_max_bot_token # ← токен бота MAX
|
||||||
|
- MAX_CHAT_ID=123456789 # ← ID чата в MAX
|
||||||
|
- MAX_API_URL=https://platform-api.max.ru
|
||||||
|
|
||||||
# Имя address-list из /ip firewall address-list на MikroTik
|
# Имя address-list из /ip firewall address-list на MikroTik
|
||||||
- ADDRESS_LIST_NAME=monitor
|
- ADDRESS_LIST_NAME=monitor
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user