IVR, Voice Bot & Dolmetscher¶
Uebersicht¶
Das IVR-System (Interactive Voice Response) bildet die erste Anlaufstelle für eingehende Anrufe. Es kombiniert klassische DTMF-Navigation mit KI-gestützter Spracherkennung und bietet Zugang zum Voice Bot sowie zum Echtzeit-Dolmetscher.
IVR-System¶
Anruf-Flow¶
Eingehender Anruf
│
▼
DID-Lookup (Platform API)
│
▼
IVR-Menue zugeordnet?
├── Ja → Personalisierte Begruessung (TTS)
│ │
│ ▼
│ Warte auf Eingabe (DTMF + Sprache parallel)
│ │
│ ▼
│ Aktion ausfuehren
│
└── Nein → Fallback (Extension / Ring Group)
DTMF-Menue¶
| Taste | Aktion |
|---|---|
| 0 | Zentrale (Ring Group) |
| 1 | Voice Bot (LiveKit Agent) |
| 2 | Weiterleitung an Mitarbeiter |
| 3 | Nachricht aufnehmen |
| 4 | Dolmetscher starten |
| 9 | Menü wiederholen |
Sprach-Navigation¶
Parallel zu DTMF wird die Spracheingabe des Anrufers analysiert:
Anrufer spricht
│
▼
audio_fork → WebSocket /ivr
│
▼
STT (Spracherkennung)
│
▼
Intent-Erkennung → Aktion
Die Spracherkennung läuft über audio_fork, das den Audiostream in Echtzeit an einen WebSocket-Endpoint weiterleitet. Die Intent-Erkennung mappt gesprochene Schlüsselwörter auf DTMF-Aktionen.
IVR-Menue Verwaltung¶
# IVR-Menues verwalten
GET /api/v1/sip/ivr-menus
POST /api/v1/sip/ivr-menus
{
"name": "Hauptmenue",
"greeting_tts": "Willkommen bei xynap. Druecken Sie 1 fuer...",
"timeout": 10,
"max_retries": 3,
"actions": [
{"digit": "0", "type": "ring_group", "target_id": 1},
{"digit": "1", "type": "livekit_agent", "target_id": null},
{"digit": "2", "type": "extension", "target_id": 1000},
{"digit": "4", "type": "interpreter", "target_id": null}
]
}
TTS (Text-to-Speech)¶
ElevenLabs — IVR-Ansagen¶
Für IVR-Begrüßungen und Menüansagen wird ElevenLabs verwendet (hochwertige, natürlich klingende Stimmen).
- Einsatz: Personalisierte Begrüßungen, Menüansagen
- Cache:
/var/lib/xynap/voicebot/tts-audio/ivr_greetings/ - Format: WAV, 8kHz/16bit (SIP-kompatibel)
TTS-Caching
Generierte Audiodateien werden gecacht, damit identische Ansagen nicht erneut generiert werden müssen. Bei Änderung des Begrüßungstexts wird der Cache automatisch invalidiert.
Piper — Interpreter-TTS¶
Für den Dolmetscher-Service wird Piper (lokales TTS) verwendet:
- Einsatz: Echtzeit-Übersetzungsausgabe
- Vorteil: Keine API-Latenz, läuft lokal
- Modelle: Deutsche und englische Stimmen vorinstalliert
LiveKit Voice Bot¶
Architektur¶
FreeSwitch
│ SIP INVITE an *99 oder IVR-Taste 1
▼
sofia/external-ipv4/test@127.0.0.1:5070
│
▼
LiveKit SIP Bridge (livekit-sip)
│ Erstellt LiveKit Room
▼
LiveKit Server (livekit)
│ Dispatcht Agent
▼
LiveKit Agent Worker (livekit-agent)
│ Python, livekit-agents 1.4
▼
KI-Interaktion (STT → LLM → TTS)
Konfiguration¶
| Komponente | Config-Datei | Container |
|---|---|---|
| LiveKit Server | /etc/xynap/livekit/livekit.yaml |
livekit |
| SIP Bridge | /etc/xynap/livekit-sip/sip.yaml |
livekit-sip |
| Agent | Quellcode in Container | livekit-agent |
SIP Trunk & Dispatch¶
| Parameter | Wert |
|---|---|
| SIP Trunk ID | ST_kwNbrEg4YHSv |
| Dispatch Rule ID | SDR_k4XfgYznebZA |
| SIP-Ziel | 127.0.0.1:5070 |
| Test-Extension | *99 |
Agent Worker¶
Der Agent Worker ist ein Python-Prozess, der auf Basis von livekit-agents 1.4 arbeitet:
- STT (Speech-to-Text) — Transkription der Anrufer-Sprache
- LLM — Verarbeitung und Antwort-Generierung
- TTS — Sprachausgabe der Antwort
Der Agent wird automatisch gestartet, wenn ein neuer Teilnehmer den LiveKit-Room betritt (Dispatch Rule).
Dolmetscher (Echtzeit-Uebersetzung)¶
Uebersicht¶
Der Dolmetscher ermöglicht bidirektionale Echtzeit-Übersetzung während eines Telefonats. Er wird über IVR-Taste 4 aktiviert.
Pipeline¶
Anrufer spricht (Deutsch)
│
▼
Whisper STT (Transkription)
│ Text (DE)
▼
LibreTranslate (Uebersetzung DE → EN)
│ Text (EN)
▼
Ollama (optionale Nachbearbeitung/Kontextverstaendnis)
│ Text (EN, optimiert)
▼
Piper TTS (Sprachausgabe)
│ Audio (EN)
▼
Ausgabe an Gegenpartei
Die gleiche Pipeline läuft in umgekehrter Richtung für die Gegenpartei.
Technische Details¶
| Komponente | Beschreibung |
|---|---|
| Container | interpreter-bridge (host network) |
| Quellcode | /usr/local/xynap/interpreter/ |
| WebSocket | ws://127.0.0.1:9001/interpret |
| STT | Whisper (OpenAI) |
| Übersetzung | LibreTranslate (lokal) |
| LLM | Ollama (lokal, optionale Nachbearbeitung) |
| TTS | Piper (lokal) |
Audio-Flow¶
Teilnehmer A Teilnehmer B
│ │
│ Audio (DE) │
├──────► audio_fork ────────────►│
│ │ │
│ ▼ │
│ Whisper STT │
│ │ │
│ ▼ │
│ LibreTranslate │
│ │ │
│ ▼ │
│ Piper TTS (EN) │
│ │ │
│ └──────────► Audio (EN) │
│ │
│ Audio (EN) │
│◄──── gleiche Pipeline ────────┤
│ (umgekehrt) │
Latenz
Die End-to-End-Latenz der Übersetzungspipeline liegt typischerweise bei 2–4 Sekunden, abhängig von der Satzlänge und GPU-Auslastung. Whisper und Piper laufen auf der lokalen RTX 4000 Ada (20 GB VRAM).
GPU-Ressourcen
Whisper, Ollama und Piper teilen sich die GPU. Bei gleichzeitiger Nutzung aller Dienste kann es zu Engpässen kommen. Der Dolmetscher hat aktuell Priorität auf die GPU-Ressourcen.
Zusammenspiel der Komponenten¶
┌─────────────────┐
│ Platform API │
│ (SIP-Modul) │
└────────┬────────┘
│ xml-curl
▼
┌─────────┐ ┌────────────────────────┐ ┌─────────────┐
│ SIP │────►│ FreeSwitch │────►│ LiveKit │
│Provider │ │ │ │ SIP Bridge │
└─────────┘ │ IVR ──► DTMF/Sprache │ └──────┬──────┘
│ │ │ │
│ ┌────┴────┐ │ ┌──────┴──────┐
│ │ Taste 1 │─────────┼────►│ Voice Bot │
│ │ Taste 4 │─────┐ │ │ (Agent) │
│ └─────────┘ │ │ └─────────────┘
└────────────────────┼───┘
│
┌──────┴──────┐
│ Interpreter │
│ Bridge │
└──────┬──────┘
│
┌───────┬───────┼───────┐
▼ ▼ ▼ ▼
Whisper Libre Ollama Piper
STT Translate LLM TTS