mikrotik-bot/instructions/fastapi_receiver.md

2.3 KiB
Raw Blame History

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 (несколько сервисов)