ws://<server>:8090/ws/stt
Beispiel:
ws://191.100.130.61:8090/ws/stt
- Transport: WebSocket
- Nachrichtenformat: JSON
- Audioformat: PCM signed 16-bit little endian
- Sample Rate: 16000 Hz
- Channels: 1 / Mono
- Audioübertragung: Base64-kodiert im JSON-Feld
pcmBase64
Das Protokoll ist ein leichtgewichtiges JSON-over-WebSocket-Protokoll für Speech-to-Text.
Der Client:
- öffnet eine WebSocket-Verbindung,
- startet eine STT-Session,
- sendet fortlaufend Audio-Chunks,
- markiert optional das Ende einer Äußerung,
- empfängt erkannte Texte,
- beendet die Session mit
stop.
WebSocket verbinden
→ start senden
→ ready empfangen
→ audio chunks senden
→ bei Sprachende endOfUtterance=true senden
→ final empfangen
→ optional flush senden
→ stop senden
→ stopped empfangen
→ WebSocket schließen
Empfohlen ist eine eindeutige Session-ID pro Sprecher/Audioquelle.
Beispiel pro Call:
call-<callId>-agent
call-<callId>-customer
Konkretes Beispiel:
call-67987-agent
call-67987-customer
{
"type": "start",
"sessionId": "call-123-agent",
"language": "de",
"sampleRate": 16000,
"channels": 1,
"format": "pcm_s16le"
}{
"type": "ready",
"sessionId": "call-123-agent"
}type: Nachrichtentyp, hierstartsessionId: eindeutige Session-IDlanguage: Sprache, z. B.desampleRate: aktuell16000channels: aktuell1format: aktuellpcm_s16le
{
"type": "audio",
"sessionId": "call-123-agent",
"sequence": 1,
"pcmBase64": "<base64-pcm-data>",
"endOfUtterance": false
}Wenn eine Äußerung endet:
{
"type": "audio",
"sessionId": "call-123-agent",
"sequence": 42,
"pcmBase64": "<base64-pcm-data>",
"endOfUtterance": true
}sequence: fortlaufende Chunk-NummerpcmBase64: Base64-kodierte PCM16-Mono-16k-AudiodatenendOfUtterance:true, wenn das Ende einer Äußerung erkannt wurde
{
"type": "final",
"sessionId": "call-123-agent",
"sequence": 42,
"text": "Guten Tag, womit kann ich helfen?",
"fullText": "Guten Tag, womit kann ich helfen?"
}type: Ergebnis ist final für das verarbeitete Segmenttext: erkannter Text des aktuellen SegmentsfullText: vollständiger Text für den aktuellen Kontext bzw. das Segment
Partial-Ergebnisse sind im Protokoll vorgesehen.
{
"type": "partial",
"sessionId": "call-123-agent",
"sequence": 41,
"text": "Guten Tag",
"fullText": "Guten Tag"
}In der aktuellen Server-Implementierung werden primär final-Nachrichten verwendet. partial ist protokollseitig vorgesehen und kann für späteres Live-Partial-Streaming genutzt werden.
{
"type": "flush",
"sessionId": "call-123-agent"
}Der Server soll den aktuell gepufferten Audioinhalt verarbeiten und, sofern Text erkannt wurde, ein Ergebnis zurückgeben.
{
"type": "stop",
"sessionId": "call-123-agent"
}{
"type": "stopped",
"sessionId": "call-123-agent"
}Die Session wird serverseitig beendet und aus den aktiven Sessions entfernt.
{
"type": "error",
"sessionId": "call-123-agent",
"message": "Session nicht bekannt. Erst start senden."
}Eine Session wird geschlossen durch:
- explizites
stopvom Client, - Trennung der WebSocket-Verbindung,
- serverseitigen Idle-Cleanup nach konfigurierter Inaktivitätszeit.
Das Protokoll überträgt Audio kontinuierlich als Stream von Audio-Chunks.
Die aktuelle Server-Implementierung transkribiert segmentweise, typischerweise bei:
endOfUtterance = true,flush,stop.
Damit ist es aktuell:
Live-Audio-Streaming mit segmentweiser STT-Auswertung
Nicht gemeint ist aktuell:
permanentes tokenweises STT-Streaming
Das DP-SwyxAgent STT WebSocket Protocol ist ein JSON-over-WebSocket-Protokoll.
Der Client startet eine Session, sendet PCM16-Mono-16k-Audiochunks als Base64 und erhält erkannte Texte als final- oder optional partial-Nachrichten zurück.
Die Session wird mit stop beendet oder serverseitig bei Verbindungsabbruch/Idle-Timeout aufgeräumt.