Pular para o conteúdo principal
A voz em tempo real está em beta, e o acesso é liberado por espaço de trabalho. Os clientes de tempo real estão no código-fonte dos SDKs, mas não nos pacotes publicados (3.0.0, Rust 0.2.0); eles saem na próxima versão de todos os SDKs, exceto o de C++.
Conecte-se para criar a sessão (POST /v1/audio/realtime/sessions), abra o WebSocket do relay e espere por relay.connected. Depois, envie áudio PCM16, leia os eventos do provedor e encerre a chamada para receber a cobrança final. O protocolo do relay, os avisos e os códigos de motivo estão descritos em Sessões de voz em tempo real.

Instale o que a sua linguagem precisa

client.realtime.connect() envia a sua chave de API, então chame-o apenas no servidor. O Node.js 22 ou posterior tem um WebSocket global; em runtimes mais antigos, instale o pacote ws ou passe o seu próprio construtor como webSocket.Para uma chamada que roda no navegador, crie a sessão no servidor e abra o socket no navegador com connectRealtimeSession(). Ele recebe a sessão que o seu servidor criou, incluindo o client_secret dela, que só funciona para essa sessão, e nunca precisa da chave de API. Chamadas pelo navegador mostra as duas metades.

Faça uma chamada

Leia todos os eventos

Itere a sessão em vez de assinar cada tipo de evento. A iteração para quando o socket fecha. Em Python, o primeiro iterador também recebe os eventos que chegaram desde que connect() retornou, a começar por relay.connected.
Python: async with session: encerra a chamada com end() quando o bloco termina, se ela ainda não tiver terminado.

Chamadas pelo navegador

Apenas TypeScript. Nunca coloque uma chave de API do Phaseo em código do navegador. No servidor, crie a sessão com client.realtime.createSession(), que aceita as mesmas opções model, voice, instructions, provider e metadata de connect(), e retorne a resposta para a sua página:
TypeScript
No navegador, entre na sessão com connectRealtimeSession(). Ele abre o relay com o client_secret da sessão e retorna o mesmo objeto de sessão que connect():
TypeScript
connectRealtimeSession(info, options) aceita webSocket e connectTimeoutMs, como connect(), além de baseUrl (padrão https://api.phaseo.app/v1) se você usar um endpoint regional.

Opções de conexão

Todos os SDKs enviam model (obrigatório, por exemplo openai/gpt-realtime-2) e os opcionais voice, instructions, provider e metadata na solicitação de criação da sessão, e esperam 30 segundos por relay.connected por padrão.

Sessão

TypeScript e Python: Os outros SDKs têm as mesmas operações. O áudio são bytes PCM16, codificados em base64 para você; os eventos do provedor passam sem alterações, no tipo JSON de cada linguagem; end usa um timeout padrão de 60 segundos.

Erros

Se o socket fechar, ou se end() atingir o timeout, sem session.ended, o encerramento da chamada falha com um erro de sessão fechada. A chamada ainda é cobrada. O erro traz o caminho da cobrança final, GET /v1/generations?id=realtime%3A<session_id>, que retorna o custo final depois de liquidado. connect() falha se o relay encerrar a sessão antes de conectar ou se relay.connected não chegar a tempo (o Python gera TimeoutError; o Rust retorna RealtimeError::EndedBeforeConnecting ou RealtimeError::ConnectTimeout).
Última modificação em 5 de novembro de 2026