mikrotik-bot/instructions/fastapi_receiver.md

57 lines
2.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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