itdrui.de 23fb37cb1a fix: textual-serve als Web-Frontend statt python -m textual serve
textual serve (python -m textual) startete immer die eingebaute Demo.
Lösung: textual-serve Paket (v1.1.3) mit eigenem serve_tui.py Einstiegspunkt.
Pro Browser-Verbindung wird tui_standalone.py als eigener Subprocess gestartet.

Starten: python serve_tui.py --host 0.0.0.0 --port 8001
2026-03-13 14:12:25 +01:00
2026-03-13 12:43:51 +01:00

MCM Logo

MCM MultiCustomerMessenger

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

# 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)

# 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:

openssl rand -hex 32

Starten

Mit Terminal-UI (lokal)

.venv/bin/python main.py

Nur API (kein Terminal)

.venv/bin/python main.py --no-tui
# oder
.venv/bin/python main_api_only.py

TUI im Browser

# 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://<raspberry-ip>:8001


Benutzerverwaltung

Beim ersten Start wird automatisch ein Admin-Benutzer angelegt (admin / admin).
Das Passwort sollte direkt danach geändert werden.

API-Endpoints

Methode Pfad Beschreibung
POST /api/v1/auth/login Anmeldung → JWT-Token
GET /api/v1/auth/me Aktueller Benutzer
GET /api/v1/users/ Benutzerliste (Admin)
POST /api/v1/users/ Benutzer anlegen (Admin)
PUT /api/v1/users/{id} Benutzer bearbeiten
DELETE /api/v1/users/{id} Benutzer löschen (Admin)

Beispiel Login per curl

curl -X POST http://localhost:8000/api/v1/auth/login \
  -H "Content-Type: application/json" \
  -d '{"username": "admin", "password": "admin"}'

API-Übersicht

Vollständige Dokumentation unter http://localhost:8000/docs

Methode Pfad Beschreibung
POST /api/v1/messages Nachricht senden
GET /api/v1/conversations/ Konversationen auflisten
GET /api/v1/conversations/{id}/messages Nachrichten einer Konversation
GET /api/v1/contacts/ Kontakte auflisten
POST /api/v1/contacts/ Kontakt anlegen
GET /api/v1/channels/status Kanal-Status
GET /health Health-Check

systemd-Dienst

# Dienst installieren
sudo cp install/mcm.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable mcm
sudo systemctl start mcm

# Status prüfen
sudo systemctl status mcm
journalctl -u mcm -f

Weitere Details: install/README_install.md


Projektstruktur

MCM/
├── main.py                  # Einstiegspunkt (TUI + API)
├── main_api_only.py         # Nur API (für systemd)
├── tui_standalone.py        # Einstiegspunkt für textual serve
├── config.py                # Einstellungen (pydantic-settings)
├── schemas.py               # Pydantic-Modelle
├── api/
│   ├── app.py               # FastAPI-Anwendung
│   ├── auth.py              # JWT + API-Key Authentifizierung
│   └── routes/              # REST-Routen
├── channels/                # Kanal-Implementierungen
├── services/                # Business-Logik
├── tasks/                   # APScheduler (WhatsApp-Polling)
├── tui/
│   ├── api_client.py        # HTTP-Client für TUI → API
│   ├── app.py               # Textual App
│   ├── screens/             # Login- und Hauptbildschirm
│   └── styles.tcss          # TUI-Stylesheet
├── db/
│   ├── models.py            # SQLAlchemy-Modelle
│   └── database.py          # Engine + Session
└── install/                 # systemd-Dienst + Installationsanleitung

Lizenz

Privates Projekt alle Rechte vorbehalten.

Description
MultiCustomerMessenger – Telegram, WhatsApp, SMS unified gateway
Readme 1.1 MiB
Languages
Python 97.7%
Shell 2.3%