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