Unified Messaging Gateway für Telegram, WhatsApp und SMS auf dem Raspberry Pi
--- ## Überblick MCM ist ein selbst gehostetes Messaging-Gateway, das eingehende und ausgehende Nachrichten über mehrere Kanäle zentral verwaltet. Die Bedienung erfolgt über eine REST-API oder eine interaktive Terminal-Oberfläche (TUI), die auch im Browser läuft. **Unterstützte Kanäle** | Kanal | Backend | |---|---| | Telegram | python-telegram-bot (Bot, Long-Polling) | | WhatsApp | Green API (green-api.com) | | SMS | python-gsmmodem-new (USB-Modem) | --- ## Features - REST-API (FastAPI) mit OpenAPI-Dokumentation (`/docs`) - Terminal-UI (Textual) – im Browser via `textual serve` - Multi-User-Authentifizierung mit JWT-Tokens - Benutzerverwaltung (Admin-Rollen, Passwort ändern) - Konversations- und Kontaktverwaltung in der Datenbank - MariaDB als Produktions-Backend, SQLite für lokale Entwicklung - SMS optional – läuft auch ohne angeschlossenes USB-Modem - systemd-Dienst für den Dauerbetrieb --- ## Voraussetzungen - Python 3.11+ - MariaDB (optional, SQLite ist Standard) - USB-GSM-Modem (optional, für SMS) - Green API Account (optional, für WhatsApp) - Telegram Bot Token (optional) --- ## Installation ```bash # 1. Repository klonen git clone https://gitea.it-drui.de/viewit/MCM.git cd MCM # 2. Virtuelle Umgebung anlegen und Pakete installieren python3 -m venv .venv .venv/bin/pip install -r requirements.txt # 3. Konfiguration anlegen cp .env.example .env # .env mit den eigenen Werten befüllen (Tokens, DB-URL, Secret Key) ``` --- ## Konfiguration (`.env`) ```env # API API_KEY=mein-sicherer-api-key HOST=0.0.0.0 PORT=8000 # Datenbank DATABASE_URL=sqlite:///./mcm.db # Für MariaDB: # DATABASE_URL=mysql+pymysql://user:pass@localhost:3306/mcm # Telegram TELEGRAM_TOKEN=123456:ABC-... # WhatsApp (Green API) WHATSAPP_ID_INSTANCE=1234567890 WHATSAPP_API_TOKEN=abcdef... # SMS (USB-Modem) SMS_ENABLED=false SMS_PORT=/dev/ttyUSB0 # Authentifizierung SECRET_KEY=change-this-secret-key-min-32-chars!! TOKEN_EXPIRE_HOURS=24 # Standard-Admin (wird beim ersten Start angelegt) DEFAULT_ADMIN_USER=admin DEFAULT_ADMIN_PASSWORD=admin ``` > **Wichtig:** `SECRET_KEY` sollte ein langer zufälliger String sein: > ```bash > openssl rand -hex 32 > ``` --- ## Starten ### Mit Terminal-UI (lokal) ```bash .venv/bin/python main.py ``` ### Nur API (kein Terminal) ```bash .venv/bin/python main.py --no-tui # oder .venv/bin/python main_api_only.py ``` ### TUI im Browser ```bash # API separat starten (Terminal 1) .venv/bin/python main_api_only.py # TUI als Browser-App (Terminal 2) python serve_tui.py ``` Dann im Browser öffnen: `http://