Pular para o conteúdo principal
A API MKA1 oferece uma interface de voz em tempo real através do LiveKit. Este guia cobre como obter um token de sala, conectar-se a uma sessão de voz, enviar áudio e texto, e capturar as respostas do agente.

Visão geral

A integração de voz consiste em três componentes principais:
  1. Token de Sala: Um JWT que concede acesso a uma sala LiveKit
  2. Conexão LiveKit: Comunicação em tempo real baseada em WebRTC
  3. Agente de Voz: Processa entrada de áudio/texto e gera respostas faladas
O pipeline do agente funciona da seguinte forma:
  • STT (Speech-to-Text): O áudio é transmitido via WebSocket a 16kHz e transcrito
  • LLM: O texto transcrito é processado pela API de Respostas MKA1
  • TTS (Text-to-Speech): A saída do LLM é sintetizada em áudio a 24kHz
Cada requisição que o agente de voz envia para a API de Respostas inclui automaticamente "voice_mode": "true" no metadata da requisição. Isso permite distinguir respostas originadas por voz das baseadas em texto ao revisar o uso ou histórico de respostas.

Obtendo um token de sala

Para iniciar uma sessão de voz, primeiro solicite um token de sala à API MKA1. O endpoint de token exige uma chave de API e aceita opcionalmente o cabeçalho X-On-Behalf-Of para identificar usuários finais. Veja Autenticação para detalhes.

Parâmetros

O corpo da requisição possui dois objetos de nível superior:

llm — configuração do LLM (obrigatório)

O objeto llm aceita os mesmos campos do corpo da requisição da API de Respostas, exceto campos gerenciados pelo agente de voz (input, stream, store, background). Você não pode especificar ambos previous_response_id e conversation.
Os metadados do token são incorporados em um JWT, que é passado como cabeçalho HTTP. Mantenha o payload total de llm abaixo de ~8 KB — arrays grandes de tools podem precisar ser reduzidos.
Para sessões de voz, desative o raciocínio configurando "reasoning": { "effort": "none" }. O raciocínio adiciona tempo de reflexão antes da resposta do modelo, o que aumenta a latência e cria pausas perceptíveis na conversa. Desativando-o, as respostas ficam rápidas e naturais.

stt — configuração de Speech-to-Text (opcional)

Controla a detecção de atividade de voz (VAD) e o comportamento de endpointing no servidor.

Configuração avançada

Você pode passar ferramentas, instruções personalizadas e ajuste de STT em uma única requisição de token:

Resposta

O token inclui metadados que o agente de voz usa para configurar a sessão.

Continuando uma sessão

Para continuar a partir de uma resposta anterior:
Para continuar uma conversa existente:
Ao continuar uma sessão, a chave de API e o cabeçalho X-On-Behalf-Of (se usado) devem coincidir com a sessão original. O agente de voz criptografa ambos no token da sala e os repassa para todos os serviços MKA1 subsequentes. Se não coincidirem, o agente não terá acesso ao contexto anterior.

Conectando-se a uma sala

Depois de obter um token, use o SDK do LiveKit para conectar-se à sala.

Enviando entrada de áudio

O agente aceita entrada de áudio através do track de áudio da sala LiveKit. O áudio é processado a 16kHz.

Comportamento do áudio

  • Detecção de Atividade de Voz (VAD): O VAD é tratado no servidor pelo agente MKA1, não localmente. O agente detecta automaticamente quando você para de falar e inicia o processamento.
  • Taxa de amostragem: O áudio é transmitido a 16kHz para o serviço de STT.
  • Endpointing: O agente usa endpointing no servidor para determinar quando a fala termina. Não há atraso de endpointing local.

Enviando entrada de texto

Você também pode enviar mensagens de texto diretamente ao agente sem falar.

Recebendo respostas do agente

O agente responde de três formas:
  1. Saída de áudio: Fala sintetizada via track de áudio
  2. Transcrição: Texto do que o agente está dizendo (para legendas)
  3. Metadados da resposta: ID da resposta e ID da conversa via data channel

Inscrevendo-se na saída de áudio

Recebendo transcrições

O agente publica transcrições de sua fala. Você pode usá-las para legendas ou registro.

Recebendo metadados da resposta

O agente publica o response_id e o conversation_id (se aplicável) quando começa a gerar uma resposta. Salve o response_id para encadear sessões futuras usando previous_response_id.

Continuidade de conversas

O agente suporta conversas de múltiplas interações com memória persistente. Cada resposta recebe automaticamente um response_id, enquanto conversas precisam ser explicitamente criadas e gerenciadas pela API de Conversas. Há duas formas de continuar uma conversa: llm.previous_response_id encadeia uma nova sessão a uma resposta específica. O agente recebe o contexto daquela resposta e todas as anteriores na cadeia. Use quando:
  • Você deseja continuar de um ponto específico em uma conversa
  • Está construindo um fluxo de conversa linear
  • Deseja ramificar a partir de uma resposta específica
llm.conversation referencia uma conversa criada via a API de Conversas. Use quando:
  • Precisa gerenciar metadados da conversa (títulos, tags, etc.)
  • Deseja listar ou buscar conversas passadas
  • Está construindo uma interface de chat com histórico persistente
  • Múltiplos clientes precisam acessar a mesma conversa

Iniciando uma nova sessão

Continuando de uma resposta anterior

Use previous_response_id para encadear uma nova sessão à última resposta, preservando o contexto da conversa:

Continuando de uma conversa

Use conversation_id para continuar uma conversa existente criada via a API de Conversas:
Ao continuar uma conversa, a chave de API e o cabeçalho X-On-Behalf-Of (se usado) devem coincidir com a sessão original. O contexto é restrito à identidade autenticada.

Lidando com desconexão

Tokens expiram após 5 minutos. Se precisar de sessões mais longas, implemente lógica de reconexão:

Exemplo completo

Veja um exemplo completo integrando tudo:

Tratamento de erros

Erros do endpoint de token

São retornados como respostas HTTP ao solicitar um token de sala:

Erros durante a sessão

Durante uma sessão de voz ativa, o agente publica erros via data channel do LiveKit. Ouça-os junto com os metadados de resposta:
A estrutura do payload de erro:
Códigos de erro:

Erros de conexão

Próximos passos