Eine CodeB-Virtuelle-Nummer ist ein KI-Agent. Das Modell selbst läuft in der Cloud des KI-Anbieters, aber jedes andere Stück — der System-Prompt, das Transkript, die Tool-Whitelist, der Audio-Pfad, die SIP-Zugangsdaten — lebt auf Ihrem eigenen Windows-Host unter Ihrer eigenen Admin-Kontrolle.
Ein Besucher auf room.html?dial=2000 und ein PSTN-Anrufer, der die konfigurierte DID wählt, landen im selben KI-Agenten. Die Bridge wählt einen der drei Antwort-Pfade (Trunk, Webphone-Loopback oder Public Listener) und erzeugt für die Sitzung einen Per-Call-Player.
Bridge
02 / Live-Audio-Schleife
Per-Call-WebSocket zum KI-Modell
Die Bridge öffnet einen frischen WebSocket zum KI-Modell-Endpunkt, streamt die Audio-Frames des Anrufers nach oben (PCM 16 kHz), empfängt synthetisierte Sprache nach unten (PCM 24 kHz) und resamplet jede Richtung von und zu der nativen Rate des Anrufs (Opus 48 kHz auf der WebRTC-Seite, µ-law 8 kHz auf der SIP-Seite).
Prompt
03 / Frisch bei jedem Anruf
Prompts/<vnum>.txt, live nachgeladen
Die Persönlichkeit und die Regeln des Agenten leben in App_Data/<tenant>/prompts/<vnum>.txt. Die Bridge cachet die Datei nie — sie liest sie bei jedem einzelnen Anruf von der Platte; eine Änderung wirkt beim nächsten Klingeln. Bearbeiten, speichern, anrufen — das ist die Test-Schleife.
Tool-Calls: Wie der Agent Dinge tut
Das KI-Modell kann „Tools" aufrufen — benannte Funktionen, die das Modell mitten im Anruf durch eine JSON-Hülle auf dem WebSocket auslöst. CodeB stellt einen kleinen, bewusst konservativen Satz bereit:
transfer_to_user(target) — ein registriertes CodeB Webphone klingeln lassen oder eine Nummer aus der Whitelist über PSTN wählen. Das Ziel wird gegen die Per-vnum-Allow-Liste geprüft, bevor irgendein Signaling läuft; aus einer KI-Agent-Sitzung ist nichts anderes wählbar.
hangup(reason) — den Anruf sauber beenden. Der Grund wird ins CDR geschrieben.
Tool-Calls fließen über denselben WebSocket wie die Audio-Frames; die Bridge fängt sie ab, prüft sie gegen die Per-vnum-Konfiguration und führt sie entweder aus (und meldet das Ergebnis zurück ans Modell) oder lehnt sie ab und teilt dem Modell den Grund mit.
Transkripte
Ist SaveTranscripts in der vnum-Regel gesetzt, sammelt die Bridge jeden Gesprächs-Turn (Anrufer-Transkript + Assistent-Transkript) während des Anrufs im Speicher. Beim Hangup schreibt sie eine .txt- und eine .json-Datei nach App_Data/<tenant>/transcripts/ und legt — falls E-Mail-Empfänger konfiguriert sind — eine SMTP-Pickup-Datei mit dem formatierten Transkript samt echter Anrufer-IP und Reverse-DNS (sofern verfügbar) ab.
Rohes Audio wird nie persistiert — ausschließlich die Text-Sicht des Modells auf das Gespräch.
Was auf dem Host bleibt
System-Prompt — auf der Platte unter App_Data/<tenant>/prompts/. Über die Admin-UI oder per Hand bearbeitet; beim ersten Lesen einer vnum-Zeile automatisch aus dem Inline-JSON migriert.
Transkripte — App_Data/<tenant>/transcripts/, geschützt durch ein explizites Per-vnum-Opt-in.
CDR-Einträge — eine Zeile pro Anruf, mit KI-Agent-Mode-Flag, ausgelösten Tool-Calls und Hangup-Grund.
API-Key — der API-Key des KI-Anbieters liegt in der mandanten-eigenen appsettings.json, nie in Client-sichtbarer Konfiguration.
Was den Host verlässt
Audio-Frames in beide Richtungen, über TLS, an den KI-Modell-WebSocket-Endpunkt — mit dem mandanten-eigenen API-Key.
Tool-Call-Ergebnisse (z. B. „Weiterleitung erfolgreich") zurück an denselben WebSocket, damit das Modell das Gespräch korrekt fortsetzen kann.
Nichts sonst. Keine Analytik, keine Telemetrie, keine Account-Anmeldung beim KI-Anbieter, keine Drittanbieter-Session-Cookies.