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++.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
- TypeScript
- Python
- Go
- C#
- PHP
- Ruby
- Java
- Rust
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 queconnect() retornou, a começar por relay.connected.
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 comclient.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
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 enviammodel (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 seend() 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).