# FastAPI: приём fetch-запросов от MikroTik и уведомления в Telegram (локальная сеть) **Внимание!** Все примеры рассчитаны на работу внутри одной локальной сети. Внешний доступ, HTTPS и туннели не требуются. ## 1. Установка FastAPI и Uvicorn В папке с ботом: ``` pip install fastapi uvicorn ``` ## 2. Пример кода (receiver.py) ```python 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 (несколько сервисов)