Echtzeit-Sprache ist in der Beta, und der Zugriff wird pro Workspace freigeschaltet. Die Echtzeit-Clients stehen im Quellcode der SDKs, aber nicht in den veröffentlichten Paketen (
3.0.0, Rust 0.2.0); sie erscheinen mit dem nächsten Release jedes SDK außer C++.POST /v1/audio/realtime/sessions), den Relay-WebSocket zu öffnen und auf relay.connected zu warten. Streame dann PCM16-Audio hinein, lies Anbieter-Events aus und beende den Anruf, um seine endgültige Abrechnung zu erhalten. Das Relay-Protokoll, die Warnungen und die Reason-Codes sind unter Echtzeit-Sprachsitzungen beschrieben.
Installieren, was deine Sprache braucht
- TypeScript
- Python
- Go
- C#
- PHP
- Ruby
- Java
- Rust
client.realtime.connect() sendet deinen API-Schlüssel, rufe es also nur auf deinem Server auf. Node.js 22 oder neuer hat einen globalen WebSocket; auf älteren Laufzeiten installierst du das Paket ws oder übergibst deinen eigenen Konstruktor als webSocket.Für einen Anruf, der im Browser läuft, erstellst du die Sitzung auf deinem Server und öffnest den Socket im Browser mit connectRealtimeSession(). Es nimmt die Sitzung entgegen, die dein Server erstellt hat, einschließlich ihres client_secret, das nur für diese eine Sitzung gilt, und braucht nie den API-Schlüssel. Anrufe im Browser zeigt beide Hälften.Anruf führen
Jedes Event lesen
Iteriere über die Sitzung, statt jeden Eventtyp einzeln zu abonnieren. Die Iteration endet, wenn sich der Socket schließt. In Python erhält der erste Iterator auch die Events, die seit der Rückkehr vonconnect() eingegangen sind, beginnend mit relay.connected.
async with session: beendet den Anruf mit end(), wenn der Block verlassen wird, sofern er nicht schon beendet ist.
Anrufe im Browser
Nur TypeScript. Lege nie einen Phaseo-API-Schlüssel in Browsercode ab. Erstelle die Sitzung auf deinem Server mitclient.realtime.createSession(), das dieselben Optionen model, voice, instructions, provider und metadata wie connect() annimmt, und gib die Antwort an deine Seite zurück:
TypeScript
connectRealtimeSession() bei. Es öffnet das Relay mit dem client_secret der Sitzung und gibt dasselbe Sitzungsobjekt wie connect() zurück:
TypeScript
connectRealtimeSession(info, options) akzeptiert wie connect() die Optionen webSocket und connectTimeoutMs, dazu baseUrl (Standard https://api.phaseo.app/v1), falls du einen regionalen Endpunkt nutzt.
Verbindungsoptionen
Jedes SDK sendetmodel (erforderlich, zum Beispiel openai/gpt-realtime-2) und die optionalen Felder voice, instructions, provider und metadata an die Anfrage zum Erstellen der Sitzung und wartet standardmäßig 30 Sekunden auf relay.connected.
Sitzung
TypeScript und Python:
Die anderen SDKs bieten dieselben Operationen. Audio sind PCM16-Bytes, die für dich in Base64 kodiert werden; Anbieter-Events kommen unverändert im JSON-Typ der jeweiligen Sprache an;
end hat standardmäßig ein Timeout von 60 Sekunden.
Fehler
Wenn sich der Socket ohnesession.ended schließt oder end() in ein Timeout läuft, schlägt das Beenden des Anrufs mit einem Fehler für eine geschlossene Sitzung fehl. Der Anruf wird trotzdem abgerechnet. Der Fehler enthält den Pfad zur endgültigen Abrechnung, GET /v1/generations?id=realtime%3A<session_id>, der die endgültigen Kosten zurückgibt, sobald sie feststehen.
connect() schlägt fehl, wenn das Relay die Sitzung beendet, bevor die Verbindung steht, oder wenn relay.connected nicht rechtzeitig ankommt (Python löst TimeoutError aus; Rust gibt RealtimeError::EndedBeforeConnecting oder RealtimeError::ConnectTimeout zurück).