Passer au contenu principal
La voix en temps réel est en bêta, et l’accès est accordé espace de travail par espace de travail. Les clients temps réel sont dans la source des SDK, mais pas dans les paquets publiés (3.0.0, Rust 0.2.0) ; ils arrivent avec la prochaine version de chaque SDK, sauf C++.
Connectez-vous pour créer la session (POST /v1/audio/realtime/sessions), ouvrir le WebSocket du relais et attendre relay.connected. Envoyez ensuite l’audio PCM16 en flux, lisez les événements du fournisseur, puis terminez l’appel pour obtenir sa facture finale. Le protocole du relais, les avertissements et les codes de motif sont décrits dans Sessions vocales en temps réel.

Installer ce dont votre langage a besoin

client.realtime.connect() envoie votre clé API : appelez-le uniquement sur votre serveur. Node.js 22 et les versions ultérieures disposent d’un WebSocket global ; sur les runtimes plus anciens, installez le paquet ws ou passez votre propre constructeur via webSocket.Pour un appel qui s’exécute dans le navigateur, créez la session sur votre serveur et ouvrez le socket dans le navigateur avec connectRealtimeSession(). Cette fonction prend la session créée par votre serveur, y compris son client_secret, qui ne fonctionne que pour cette session, et n’a jamais besoin de la clé API. Appels depuis le navigateur montre les deux côtés.

Passer un appel

Lire tous les événements

Itérez sur la session plutôt que de vous abonner à chaque type d’événement. L’itération s’arrête à la fermeture du socket. En Python, le premier itérateur reçoit aussi les événements arrivés depuis le retour de connect(), à commencer par relay.connected.
Python : async with session: termine l’appel avec end() à la sortie du bloc, s’il n’est pas déjà terminé.

Appels depuis le navigateur

TypeScript uniquement. Ne mettez jamais de clé API Phaseo dans du code exécuté par le navigateur. Sur votre serveur, créez la session avec client.realtime.createSession(), qui accepte les mêmes options model, voice, instructions, provider et metadata que connect(), puis renvoyez la réponse à votre page :
TypeScript
Dans le navigateur, rejoignez la session avec connectRealtimeSession(). Cette fonction ouvre le relais avec le client_secret de la session et renvoie le même objet de session que connect() :
TypeScript
connectRealtimeSession(info, options) accepte webSocket et connectTimeoutMs comme connect(), plus baseUrl (par défaut https://api.phaseo.app/v1) si vous utilisez un endpoint régional.

Options de connexion

Chaque SDK envoie model (obligatoire, par exemple openai/gpt-realtime-2) ainsi que les champs facultatifs voice, instructions, provider et metadata à la requête de création de session, et attend relay.connected pendant 30 secondes par défaut.

Session

TypeScript et Python : Les autres SDK proposent les mêmes opérations. L’audio est en octets PCM16, encodés en base64 pour vous ; les événements du fournisseur passent tels quels, dans le type JSON de chaque langage ; end a un délai d’expiration par défaut de 60 secondes.

Erreurs

Si le socket se ferme, ou si end() expire, sans session.ended, la fin de l’appel échoue avec une erreur de session fermée. L’appel est quand même facturé. L’erreur contient le chemin de la facture finale, GET /v1/generations?id=realtime%3A<session_id>, qui renvoie le coût définitif une fois réglé. connect() échoue si le relais termine la session avant la connexion, ou si relay.connected n’arrive pas à temps (Python lève TimeoutError ; Rust renvoie RealtimeError::EndedBeforeConnecting ou RealtimeError::ConnectTimeout).
Dernière modification le 5 novembre 2026