2.3 KiB
2.3 KiB
FastAPI: приём fetch-запросов от MikroTik и уведомления в Telegram (локальная сеть)
Внимание! Все примеры рассчитаны на работу внутри одной локальной сети. Внешний доступ, HTTPS и туннели не требуются.
1. Установка FastAPI и Uvicorn
В папке с ботом:
pip install fastapi uvicorn
2. Пример кода (receiver.py)
import os
import asyncio
from fastapi import FastAPI, Request
from aiogram import Bot
bot = Bot(token=os.getenv("TG_BOT_TOKEN"))
app = FastAPI()
@app.get("/event")
async def event(request: Request):
mac = request.query_params.get('mac')
ip = request.query_params.get('ip')
event_type = request.query_params.get('type')
# Можно добавить секрет для безопасности:
# if request.query_params.get('secret') != os.getenv('MT_SECRET'): return 'forbidden'
text = f"MikroTik: событие {event_type}\nMAC: {mac}\nIP: {ip}"
asyncio.create_task(bot.send_message(<ВАШ_USER_ID>, text))
return {"status": "ok"}
- Замените <ВАШ_USER_ID> на свой Telegram user_id (или список).
- Можно вынести user_id в .env и подгружать через os.getenv.
3. Запуск FastAPI
uvicorn receiver:app --host 0.0.0.0 --port 8000
- Если бот и FastAPI в одном контейнере — добавьте запуск FastAPI в Dockerfile/compose.
4. Безопасность
- Если сеть полностью изолирована — дополнительных мер не требуется.
- Для production можно добавить секрет в URL и проверку в коде.
5. Проверка
- Вручную вызовите fetch-скрипт на MikroTik или curl:
curl "http://10.10.10.2:8000/event?type=test&mac=11:22:33:44:55:66&ip=192.168.88.100" - Проверьте, что Telegram-бот прислал уведомление.
TODO
- Пример для запуска FastAPI и aiogram в одном процессе (через asyncio.gather)
- Пример для Docker Compose (несколько сервисов)