Dokumentation

Echtzeit-Telefonie

Ein- und ausgehende Sprache über LiveKit + SIP — Streaming-Transkription und -Synthese, Barge-in, Weiterleitung, ausgehende Anrufe aus einer Pipeline.

Der Kanal Telefonie ermöglicht es einer betool-Pipeline, Anrufe entgegenzunehmen und zu tätigen. Echtzeit-Audio, Streaming-Transkription, Streaming-Sprachsynthese und Barge-in-Unterbrechung werden unterstützt.

Architektur

Im Hintergrund:

  • LiveKit übernimmt den Echtzeit-Audiotransport.
  • LiveKit-SIP verbindet LiveKit mit dem SIP-Trunk Ihres Anbieters.
  • Ein dedizierter Worker orchestriert den Anruf: Transkription (STT), LLM, Sprachsynthese (TTS).

Dieser Stack läuft als separater Prozess vom Haupt-Backend. Sie konfigurieren ihn nicht direkt — der Betreiber Ihrer Instanz richtet die SIP-Brücke ein.

Sprachanbieter

RolleAnbieterStandard
Transkription (STT)Deepgram, faster-whisper (lokal ausgeführt)Deepgram
Synthese (TTS)ElevenLabs, Cartesia, OpenAI, Deepgram AuraElevenLabs

Der Stimmenkatalog jedes TTS-Anbieters ist im Adminbereich einsehbar, mit Anhören einer Hörprobe vor der Auswahl. Das LLM ist frei wählbar (managed Modell, BYOK oder privates Modell — siehe Einen LLM-Schlüssel anbinden).

Voraussetzungen

  • Ein SIP-Trunk eines Anbieters.
  • Eine eingehende Nummer und/oder die Möglichkeit, ausgehende Anrufe zu tätigen.
  • Zugang zu den gewählten STT-/TTS-Anbietern.

Im managed Angebot kann betool den SIP-Trunk und die Sprachanbieter für Sie bereitstellen.

Eine Sprach-Pipeline entwerfen (eingehender Anruf)

Eine Sprach-Pipeline beginnt mit einem Start-Knoten mit dem Empfänger phone_gateway. Bei jedem transkribierten Sprechschritt erhält die Pipeline insbesondere:

  • user_message und phone.transcript — den transkribierten Sprechschritt
  • phone.call — den Anruf: Kennung, Nummern von Anrufer / Angerufenem, Richtung (inbound / outbound), Leitung
  • phone.from — die Nummer des Anrufers
  • phone.caller_timezone — die aus der Vorwahl abgeleitete Zeitzone (leer, wenn die Vorwahl mehrere Zeitzonen umfasst)

Der von der Pipeline erzeugte Text wird vom TTS vorgelesen.

Einstellungen des Empfängers

Der Empfänger phone_gateway steuert das Verhalten des Anrufs, ohne Code:

  • Begrüßung — mehrere Varianten der Begrüßungsnachricht (eine wird zufällig gewählt), eine eigene Begrüßung für ausgehende Anrufe, eine Verzögerung vor der Begrüßung.
  • Stille — Nachfrage nach längerer Stille, dann Verabschiedung und Auflegen, wenn die Stille anhält; maximale Anrufdauer.
  • Unterbrechung (Barge-in) — standardmäßig aktiviert: Der Anrufer kann den Agent unterbrechen. Mindestdauer und Mindestanzahl an Wörtern, damit eine Unterbrechung zählt.
  • Erkennung des Sprecherwechsels — Erkennungsmodus und Wartezeiten für das Ende der Äußerung.
  • Filler — Wartesätze, die gesprochen werden, wenn die Antwort auf sich warten lässt, eigene Sätze während der Ausführung eines Tools oder ein Warte-Hintergrundgeräusch (Tastatur, Büro, Wartemusik). Standardmäßig deaktiviert.
  • Stimme — Anbieter, Modell, Sprache und Stimme für STT / TTS, mit den Feineinstellungen der Stimme (Stabilität, Geschwindigkeit…).
  • Anrufqualifizierungen — eine geschlossene Liste von Ergebniscodes, die der Agent für den Anruf setzen kann.

Was der Agent während des Anrufs tun kann

Die Telefonie-Tools stehen den Agents einer Pipeline zur Verfügung, der phone_gateway vorgelagert ist:

  • phone_gateway.transfer_call — den Anruf an eine andere Nummer weiterleiten (SIP REFER). Die Nummer wird im E.164-Format validiert; die Weiterleitung erfolgt, nachdem die laufende Antwort gesprochen wurde.
  • phone_gateway.hangup_call — auflegen, nach der Verabschiedung.
  • phone_gateway.set_call_disposition — den Anruf mit einem der konfigurierten Codes qualifizieren.

Ein Agent kann außerdem während des Anrufs eine SMS senden (Tool allmysms.send_sms, siehe SMS): Auf diesem Kanal ist der Empfänger auf den Gesprächspartner des Anrufs festgelegt. Ist die Nummer unterdrückt, wird der Versand abgelehnt.

Termine vorschlagen

Die Verfügbarkeitsberechnung (Operation free_slots des Knotens compute) liefert Zeitfenster, die zum Vorlesen bereit sind, in der Zeitzone des Anrufers. In Kombination mit dem Lesen eines Kalenders (Google oder Microsoft) kann ein Sprachagent einige freie Zeitfenster nennen und dann den Termin eintragen.

Ausgehende Anrufe

Eine Pipeline kann mit dem Knoten phone_call einen Anruf tätigen: zum Beispiel einen Lead zurückrufen, sobald er eingeht, oder eine Liste nachfassen.

FeldRolle
trunk_idFür den Anruf verwendete Leitung
voice_modelDas Modell, das das Gespräch führt (sein Start muss den Empfänger phone_gateway tragen)
to_numberAnzurufende Nummer (mit Vorlagen nutzbar), normalisiert im E.164-Format
call_varsAn das Gespräch übergebene Variablen (phone.outbound.vars) — zum Beispiel der Vorname, nutzbar in der Begrüßung für ausgehende Anrufe
allowed_days / allowed_hours / timezoneZulässiges Zeitfenster: außerhalb des Fensters wird der Anruf nicht getätigt
max_in_flight / max_per_dayObergrenzen für gleichzeitige (standardmäßig 3) und tägliche Anrufe (standardmäßig 100)
output_keyAusgabeschlüssel (Standard phone.call_result)

Schutzmechanismen:

  • Exactly-once — eine Wiederholung wählt niemals erneut eine bereits angerufene Nummer.
  • Ablehnung vor dem Wählen, wenn die Organisation keine Credits mehr hat.
  • Kein Anruf in der Simulation — der Knoten wird bei einem Testlauf (Dry-Run) übersprungen.

Der Knoten gibt die Kontrolle zurück, sobald der Anruf klingelt: ok bedeutet „Anruf gestartet“, nicht „angenommen“. Um das Ergebnis zu erfahren, fügen Sie dem Start des Modells den Empfänger phone_call_outcome hinzu: Er löst die Pipeline nach Ende des Anrufs aus, mit phone.outcome — angenommen oder nicht (answered, no_answer, rejected, unknown), Dauer, Anzahl der Sprechschritte, vom Agent gesetzte Qualifizierung.

Bewährte Praktiken

  • Halten Sie Missionen knapp. Die Bedenkzeit zählt: Ein Agent, der 4 Sekunden zögert, wirkt im Anruf wie eingefroren. Bevorzugen Sie schnelle Modelle, außer bei entscheidungskritischen Schritten.
  • Lassen Sie Barge-in aktiv. Anrufer müssen den Agent unterbrechen können. Das ist die Standardeinstellung.
  • Konfigurieren Sie Filler für Sprechschritte, die Tools aufrufen: Eine lange Stille beunruhigt den Anrufer.

Kosten

Siehe Preise. Ein Anruf hat an sich keinen Minutenpreis: Er wird nach seinen Bestandteilen abgerechnet — Transkription (nach Audiodauer), Sprachsynthese (nach Anzahl der Zeichen) und LLM (nach Tokens, außer bei BYOK).

Bekannte Einschränkungen

  • Der Telefoniekanal ist reines Audio. Video läuft über andere Bausteine (Videoerzeugung und -synchronisation mit HeyGen), nicht über den Anruf.
  • Die Weiterleitung an einen Menschen erfordert einen SIP-Trunk, der REFER unterstützt.
  • Der Agent kann den Anrufer ohne eine CRM-Integration nicht identifizieren: Er kennt nur die übermittelte Nummer.