For the complete documentation index, see llms.txt. Markdown versions of documentation pages are available by appending .md to the page URL.
Navegação principal

Telefonia e SIP

Escolha uma conexão SIP ou uma ponte de áudio na aplicação para chamadas telefônicas.

Escolha a API que sua aplicação usa. Cada API tem seus próprios mecanismos de autenticação e criação de sessões, além de seu próprio contrato de eventos.

Escolha uma conexão de telefonia

Uma chamada telefônica pode chegar ao GPT-Live por um tronco SIP ou por uma aplicação que retransmite áudio. Escolha a opção adequada ao seu sistema de telefonia atual e ao ponto em que sua aplicação precisa processar o áudio.

ConexãoÁudio e responsabilidades da aplicação
SIP diretoO provedor troca o áudio da chamada com a OpenAI. Sua aplicação cuida dos webhooks, da configuração da sessão, das decisões sobre a chamada e da lógica de negócios.
Ponte de áudio no servidorSua aplicação retransmite o áudio do provedor ou da sala para o GPT-Live via WebSocket. Ela gerencia as duas conexões, a conversão de eventos, a reprodução e o ciclo de vida da chamada.

A conexão do provedor com sua aplicação e a conexão da sua aplicação com a OpenAI são separadas. Por exemplo, uma pessoa pode entrar em uma sala por SIP enquanto um agente nessa sala se conecta ao GPT-Live via WebSocket.

Você usa Twilio, Telnyx, LiveKit ou Daily/Pipecat? Consulte Integrações do GPT-Live com parceiros para ver guias específicos de cada provedor.

SIP direto

O SIP direto mantém o áudio da chamada no caminho de mídia entre o provedor e a OpenAI. A sinalização SIP usa TLS, e o GPT-Live exige SRTP para o áudio da chamada. Seu backend continua responsável pela decisão sobre a chamada recebida, pela configuração da sessão, pela autorização e pela lógica de negócios.

Use uma conexão de banda lateral quando seu backend precisar receber eventos da sessão ou enviar comandos. Ela se conecta à conversa existente enquanto o SIP transporta o áudio. Atribua um único manipulador a cada ação para que entregas duplicadas de webhooks ou eventos observados em várias conexões não executem ferramentas duas vezes.

Mantenha o roteamento SIP e a configuração do provedor junto à integração que os utiliza. Os eventos de webhook, os identificadores de chamada e os payloads de aceitação do Realtime pertencem à Realtime API; use o contrato do GPT-Live para uma sessão Live.

Gerencie o ciclo de vida da chamada

Confirme que o suporte a SIP do GPT-Live está habilitado para seu projeto e que o tronco SIP do provedor está roteado para esse projeto antes de usar este fluxo. Os payloads de webhook e de aceitação do Realtime na outra aba seguem um contrato de API diferente.

Receba a chamada de entrada

Configure o endpoint de webhook do seu projeto para live.transport.incoming. Verifique a assinatura do webhook e elimine entregas duplicadas antes de tomar uma decisão sobre a chamada. A confirmação de recebimento de uma entrega não aceita a chamada.

O webhook identifica uma chamada SIP com data.type: "sip" e fornece data.session_id. Use esse ID de sessão sem alterações em todas as ações de chamada do Live. Trate data.sip_headers como metadados não confiáveis de quem está ligando, não como autorização.

Integrações existentes ainda podem receber o evento obsoleto live.call.incoming, que não tem data.type. Durante a migração, trate os dois nomes e mantenha a assinatura antiga até que todas as entregas e novas tentativas legadas tenham sido processadas. A mesma chamada pendente também pode emitir um webhook do Realtime; atribua um único manipulador à decisão de aceitar ou rejeitar, em vez de aceitar pelas duas APIs.

Aceite ou rejeite a chamada

Aplique as regras de autorização e roteamento da sua aplicação. Para aceitar a chamada, envie uma requisição POST /v1/live/sessions/{session_id}/accept autenticada com um objeto session no nível superior:

{
  "session": {
    "type": "live",
    "model": "gpt-live-1",
    "instructions": "You are answering an inbound support call.",
    "audio": { "output": { "voice": "marin" } },
    "delegation": { "type": "client" }
  }
}

Use Authorization: Bearer $OPENAI_API_KEY a partir do seu backend confiável nas requisições de controle de chamadas. Escolha a voz e o modo de delegação ao aceitar a chamada. O SIP negocia o formato de áudio, então omita audio.format. O exemplo seleciona a delegação ao cliente; seu backend deve processar o trabalho delegado. Consulte Delegação e ferramentas para ver as configurações de cliente e de Responses.

Uma aceitação bem-sucedida retorna 200 OK com o corpo vazio após a inicialização da sessão. Trate os erros HTTP antes de considerar a chamada aceita.

Para rejeitar a chamada, envie POST /v1/live/sessions/{session_id}/reject com um status SIP, como { "status_code": 486 } para indicar ocupado. O status deve ser um número inteiro entre 300 e 699, inclusive. A primeira decisão de aceitar ou rejeitar prevalece; uma decisão concorrente posterior retorna decision_already_made.

Conecte seu backend

Após a aceitação, conecte um WebSocket de banda lateral em wss://api.openai.com/v1/live/sessions/{session_id}/attach. Use o ID da sessão aceita, a mesma autenticação do projeto e os mesmos cabeçalhos de conexão. Não envie session.start novamente.

O SIP transporta o áudio da chamada. Use a conexão de banda lateral para transcrições, delegação, ferramentas, comandos e áudio espelhado. Defina um único responsável por cada efeito colateral, mesmo que várias conexões observem um evento.

Observe os eventos do teclado telefônico

A conexão de banda lateral recebe transport.dtmf.received quando a pessoa que está ligando pressiona uma tecla e transport.dtmf.send após uma ferramenta hospedada enviar um tom com sucesso. O campo event do evento contém um dos valores 09, *, # ou AD.

Essas são notificações para observadores, não comandos do cliente. Não envie transport.dtmf.send para solicitar um tom, nem presuma que o canal de dados do navegador receba eventos do teclado telefônico.

Transfira ou encerre a chamada

Para transferir a chamada, envie POST /v1/live/sessions/{session_id}/refer com { "target_uri": "sip:agent@example.com" } para indicar o destino. Para desligar, envie POST /v1/live/sessions/{session_id}/hangup sem corpo de requisição. Ambas retornam 200 OK com o corpo vazio em caso de sucesso.

Mantenha a conexão de banda lateral aberta para receber os eventos finais e os dados de uso antes de liberar os recursos da aplicação. Uma requisição de desligamento bem-sucedida ou uma desconexão inesperada não substitui session.closed. Consulte Uso e encerramento controlado para saber mais sobre a finalização e os motivos de encerramento.

Este fluxo aceita chamadas de entrada. Não há suporte à criação de chamadas SIP de saída por POST /v1/live/sessions; use a integração com parceiros correspondente para chamadas de saída gerenciadas pelo provedor.

Pontes de áudio no servidor

Use a conexão WebSocket do GPT-Live quando sua aplicação receber um fluxo de áudio de um provedor de telefonia ou de um framework de agentes. A aplicação autentica as duas conexões, converte seus envelopes de eventos e retransmite o áudio nas duas direções.

O GPT-Live oferece suporte a áudio bruto G.711 μ-law e A-law a 8 kHz via WebSocket. Quando o fluxo do provedor usa o mesmo codec, a mesma taxa de amostragem e o mesmo número de canais, sua aplicação pode encaminhar os bytes de áudio bruto sem convertê-los para PCM. Preserve a ordem do áudio e use o formato de mensagem exigido por cada conexão. A correspondência entre os formatos de áudio não torna os dois protocolos de eventos intercambiáveis.

A ponte também é responsável por todo áudio que coloca na fila de reprodução. Considere o armazenamento em buffer do provedor, as interrupções e o encerramento da chamada no projeto da sua aplicação. Consulte Gerenciamento de sessões para saber mais sobre o ciclo de vida da sessão Live e Migre para o GPT-Live para ver as mudanças na alternância de turnos e no controle de reprodução.

Mantenha o identificador da chamada ou da sala do provedor junto ao ID da sessão da OpenAI para poder rastrear uma conversa nos dois sistemas.

Próximos passos com o GPT-Live