Saltar al contenido principal
La voz en tiempo real está en beta y el acceso se habilita por espacio de trabajo. Los clientes en tiempo real están en el código fuente de los SDK, pero no en los paquetes publicados (3.0.0, Rust 0.2.0); llegan con la próxima versión de todos los SDK salvo C++.
Conéctate para crear la sesión (POST /v1/audio/realtime/sessions), abrir el WebSocket del relay y esperar a relay.connected. Después, transmite audio PCM16, lee los eventos del proveedor y termina la llamada para recibir su factura final. El protocolo del relay, los avisos y los códigos de motivo se describen en Sesiones de voz en tiempo real.

Instala lo que necesita tu lenguaje

client.realtime.connect() envía tu clave de API, así que llámalo solo en tu servidor. Node.js 22 o posterior tiene un WebSocket global; en entornos de ejecución más antiguos, instala el paquete ws o pasa tu propio constructor como webSocket.Para una llamada que se ejecuta en el navegador, crea la sesión en tu servidor y abre el socket en el navegador con connectRealtimeSession(). Recibe la sesión que creó tu servidor, incluido su client_secret, que solo sirve para esa sesión, y nunca necesita la clave de API. Llamadas desde el navegador muestra las dos partes.

Haz una llamada

Lee todos los eventos

Itera la sesión en lugar de suscribirte por tipo de evento. La iteración se detiene cuando se cierra el socket. En Python, el primer iterador también recibe los eventos llegados desde que connect() volvió, empezando por relay.connected.
Python: async with session: termina la llamada con end() al salir del bloque, si aún no ha terminado.

Llamadas desde el navegador

Solo TypeScript. Nunca pongas una clave de API de Phaseo en código del navegador. En tu servidor, crea la sesión con client.realtime.createSession(), que acepta las mismas opciones model, voice, instructions, provider y metadata que connect(), y devuelve la respuesta a tu página:
TypeScript
En el navegador, únete a la sesión con connectRealtimeSession(). Abre el relay con el client_secret de la sesión y devuelve el mismo objeto de sesión que connect():
TypeScript
connectRealtimeSession(info, options) acepta webSocket y connectTimeoutMs como connect(), además de baseUrl (por defecto https://api.phaseo.app/v1) si usas un endpoint regional.

Opciones de conexión

Todos los SDK envían model (obligatorio, por ejemplo openai/gpt-realtime-2) y las opciones voice, instructions, provider y metadata a la solicitud de creación de la sesión, y por defecto esperan 30 segundos a relay.connected.

Sesión

TypeScript y Python: Los demás SDK tienen las mismas operaciones. El audio son bytes PCM16, que se codifican en base64 por ti; los eventos del proveedor pasan sin cambios como el tipo JSON de cada lenguaje; end tiene por defecto un tiempo de espera de 60 segundos.

Errores

Si el socket se cierra, o end() agota el tiempo de espera, sin session.ended, terminar la llamada falla con un error de sesión cerrada. La llamada se factura igualmente. El error incluye la ruta de la factura final, GET /v1/generations?id=realtime%3A<session_id>, que devuelve el coste final una vez liquidado. connect() falla si el relay termina la sesión antes de conectarse, o si relay.connected no llega a tiempo (Python lanza TimeoutError; Rust devuelve RealtimeError::EndedBeforeConnecting o RealtimeError::ConnectTimeout).
Última modificación el 5 de noviembre de 2026