Praxis-Telefon-Agent: Anrufannahme, Transkription, Triage — vollständig on-prem

Nimmt Anrufe einer Hausarztpraxis entgegen, transkribiert sie lokal,
kategorisiert das Anliegen und legt es strukturiert ab. Keine Patientendaten
verlassen den Rechner: Spracherkennung, Sprachmodell und Sprachsynthese laufen
lokal, im Datenpfad steht kein Cloud-Dienst.

Aufbau:
- FreeSWITCH nimmt über einen SIP-Trunk an, spielt die Ansage und nimmt auf.
- pipe.watch erkennt fertige Aufnahmen und schiebt sie durch die Pipe.
- whisper.cpp transkribiert, ein lokales Sprachmodell (Ollama) ordnet in
  Kategorie und Dringlichkeit ein — mit erzwungenem JSON-Schema.
- Ablage lokal, optional Nextcloud (WebDAV) und ein Deck-Board.
- Leitstand (pipe.server): Board mit Eingang/In Bearbeitung/Rückfragen/Erledigt,
  Aufnahmen zum Anhören, Verlauf und Ampeln für alle beteiligten Dienste.

Zugangsdaten und Anrufdaten liegen außerhalb des Repositorys (.env, ablage/,
telefon/). Konfiguration siehe .env.example, Einrichtung siehe README.
This commit is contained in:
Jeuner 2026-08-22 22:37:17 +02:00
commit 1a1280e79d
24 changed files with 2253 additions and 0 deletions

38
.env.example Normal file
View file

@ -0,0 +1,38 @@
# --- Spracherkennung (faster-whisper, lokal) ---
WHISPER_MODELL=medium
WHISPER_COMPUTE=int8
# Feste Sprache erzwingen (de) oder leer lassen für Auto-Erkennung:
WHISPER_SPRACHE=de
# --- Kategorisierung (Ollama, lokal) ---
OLLAMA_URL=http://127.0.0.1:11434
OLLAMA_MODELL=qwen3.5:latest
# --- Nextcloud (leer lassen = nur lokale Ablage) ---
NEXTCLOUD_URL=
NEXTCLOUD_USER=
NEXTCLOUD_PASS=
NEXTCLOUD_ORDNER=Anrufe
# --- Telefonie (SIP-Zugang der Praxis, leer lassen = keine Telefonannahme) ---
SIP_USER=
SIP_DOMAIN=sip.plusnet.de
SIP_PASS=
SIP_PROXY=voice01.sip.plusnet.de
# --- Ansage (lokal; piper braucht Modelle unter ~/piper-voices) ---
ANSAGE_TTS=piper
ANSAGE_STIMME=de_DE-thorsten_emotional-medium
ANSAGE_EMOTION=0
# Nutzer, die das Deck-Board sehen sollen (kommagetrennt)
DECK_TEILEN=
# Stapel des Deck-Boards (Arbeitsablauf, kommagetrennt)
DECK_STAPEL=Eingang,In Bearbeitung,Rückfragen,Erledigt
# --- Leitstand (Weboberfläche) ---
# 127.0.0.1 = nur dieser Rechner. 0.0.0.0 = im Netz erreichbar, dann ist
# LEITSTAND_PASS Pflicht (die Seiten zeigen Patiententranskripte).
LEITSTAND_HOST=127.0.0.1
LEITSTAND_PORT=8088
LEITSTAND_USER=praxis
LEITSTAND_PASS=