Nodes and media
Modo de conversa
O modo Talk tem dois formatos de runtime:
- O Talk nativo do macOS/iOS/Android usa reconhecimento de fala local, chat do Gateway e TTS
talk.speak. Os nós anunciam a capacidadetalke declaram os comandostalk.*que oferecem suporte. - O Talk no iOS usa WebRTC de propriedade do cliente para configurações em tempo real da OpenAI que selecionam
webrtcou omitem o transporte. Configurações em tempo real explícitas comgateway-relay,provider-websockete que não sejam da OpenAI permanecem no relay de propriedade do Gateway; configurações que não são em tempo real usam o loop de fala nativo. - O Talk no navegador usa
talk.client.createpara sessõeswebrtceprovider-websocketde propriedade do cliente, outalk.session.createpara sessõesgateway-relayde propriedade do Gateway.managed-roomé reservado para handoff do Gateway e salas walkie-talkie. - O Talk no Android pode optar por sessões de relay em tempo real de propriedade do Gateway com
talk.realtime.mode: "realtime"etalk.realtime.transport: "gateway-relay". Caso contrário, permanece no reconhecimento de fala nativo, chat do Gateway etalk.speak. - Clientes somente de transcrição usam
talk.session.create({ mode: "transcription", transport: "gateway-relay", brain: "none" }), depoistalk.session.appendAudio,talk.session.cancelTurnetalk.session.closequando precisam de legendas ou ditado sem uma resposta de voz do assistente.
O Talk nativo é um loop contínuo de conversa por voz:
- Escutar a fala
- Enviar a transcrição ao modelo pela sessão ativa
- Aguardar a resposta
- Falar a resposta pelo provedor Talk configurado (
talk.speak)
O Talk em tempo real de propriedade do cliente encaminha chamadas de ferramentas do provedor por talk.client.toolCall; esses clientes não chamam chat.send diretamente para consultas em tempo real.
Enquanto uma consulta em tempo real está ativa, clientes Talk podem usar talk.client.steer ou
talk.session.steer para classificar a entrada falada como status, steer, cancel ou
followup. O direcionamento aceito é enfileirado na execução incorporada ativa; o direcionamento
rejeitado retorna um motivo estruturado, como no_active_run, not_streaming
ou compacting.
O Talk somente de transcrição emite o mesmo envelope comum de eventos do Talk que sessões em tempo real e STT/TTS, mas usa mode: "transcription" e brain: "none". Ele serve para legendas, ditado e captura de fala apenas para observação; notas de voz enviadas em modo único ainda usam o caminho de mídia/áudio.
Comportamento (macOS)
- Sobreposição sempre ativa enquanto o modo Talk estiver habilitado.
- Transições de fase Escutando → Pensando → Falando.
- Em uma pausa curta (janela de silêncio), a transcrição atual é enviada.
- As respostas são escritas no WebChat (igual a digitar).
- Interromper ao falar (ativado por padrão): se o usuário começar a falar enquanto o assistente estiver falando, interrompemos a reprodução e registramos o timestamp da interrupção para o próximo prompt.
Diretivas de voz nas respostas
O assistente pode prefixar a resposta com uma única linha JSON para controlar a voz:
{ "voice": "<voice-id>", "once": true }Regras:
- Somente a primeira linha não vazia.
- Chaves desconhecidas são ignoradas.
once: truese aplica apenas à resposta atual.- Sem
once, a voz se torna o novo padrão do modo Talk. - A linha JSON é removida antes da reprodução TTS.
Chaves com suporte:
voice/voice_id/voiceIdmodel/model_id/modelIdspeed,rate(PPM),stability,similarity,style,speakerBoostseed,normalize,lang,output_format,latency_tieronce
Configuração (~/.openclaw/openclaw.json)
{ talk: { provider: "elevenlabs", providers: { elevenlabs: { voiceId: "elevenlabs_voice_id", modelId: "eleven_v3", outputFormat: "mp3_44100_128", apiKey: "elevenlabs_api_key", }, mlx: { modelId: "mlx-community/Soprano-80M-bf16", }, system: {}, }, speechLocale: "ru-RU", silenceTimeoutMs: 1500, interruptOnSpeech: true, realtime: { provider: "openai", providers: { openai: { apiKey: "openai_api_key", model: "gpt-realtime-2", voice: "cedar", }, }, instructions: "Speak warmly and keep answers brief.", mode: "realtime", transport: "webrtc", brain: "agent-consult", }, },}Padrões:
interruptOnSpeech: truesilenceTimeoutMs: quando não definido, o Talk mantém a janela de pausa padrão da plataforma antes de enviar a transcrição (700 ms no macOS e Android, 900 ms no iOS)provider: seleciona o provedor Talk ativo. Useelevenlabs,mlxousystempara os caminhos de reprodução locais do macOS.providers.<provider>.voiceId: usaELEVENLABS_VOICE_ID/SAG_VOICE_IDcomo fallback para ElevenLabs (ou a primeira voz da ElevenLabs quando a chave de API está disponível).providers.elevenlabs.modelId: o padrão éeleven_v3quando não definido.providers.mlx.modelId: o padrão émlx-community/Soprano-80M-bf16quando não definido.providers.elevenlabs.apiKey: usaELEVENLABS_API_KEYcomo fallback (ou o perfil de shell do Gateway, se disponível).consultThinkingLevel: substituição opcional do nível de raciocínio para a execução completa do agente OpenClaw por trás de chamadasopenclaw_agent_consultem tempo real.consultFastMode: substituição opcional do modo rápido para chamadasopenclaw_agent_consultem tempo real.realtime.provider: seleciona o provedor de voz em tempo real ativo. Useopenaipara WebRTC,googlepara WebSocket do provedor, ou um provedor somente de ponte pelo relay do Gateway.realtime.providers.<provider>armazena a configuração em tempo real de propriedade do provedor. O navegador recebe apenas credenciais de sessão efêmeras ou restritas, nunca uma chave de API padrão.realtime.providers.openai.voice: id de voz integrado do OpenAI Realtime. As vozes atuais degpt-realtime-2sãoalloy,ash,ballad,coral,echo,sage,shimmer,verse,marinecedar;marinecedarsão recomendadas para melhor qualidade.realtime.transport:webrtcusa WebRTC da OpenAI de propriedade do cliente no iOS e no navegador.provider-websocketé de propriedade do navegador, mas permanece no relay do Gateway no iOS.gateway-relaymantém o áudio do provedor no Gateway; o Android usa tempo real apenas para esse transporte e, caso contrário, mantém seu loop nativo de STT/TTS.realtime.brain:agent-consultroteia chamadas de ferramentas em tempo real pela política do Gateway;direct-toolsé o comportamento legado de compatibilidade com ferramentas diretas;noneé para transcrição ou orquestração externa.realtime.consultRouting:provider-directpreserva a resposta direta do provedor quando ele ignoraopenclaw_agent_consult;force-agent-consultfaz o relay do Gateway rotear transcrições finalizadas do usuário pelo OpenClaw.realtime.instructions: anexa instruções de sistema voltadas ao provedor ao prompt em tempo real integrado do OpenClaw. Use para estilo e tom de voz; o OpenClaw mantém a orientação padrão deopenclaw_agent_consult.talk.catalogexpõe ids canônicos de provedores e aliases de registro junto com os modos, transportes, estratégias de brain, formatos de áudio em tempo real, flags de capacidade e o resultado de prontidão selecionado em runtime válidos de cada provedor. Clientes Talk first-party devem usar esse catálogo em vez de manter aliases de provedores localmente; um Gateway mais antigo que omite prontidão de grupo fica não verificado em vez de definitivamente não configurado.- Provedores de transcrição por streaming são descobertos por
talk.catalog.transcription. O relay atual do Gateway usa a configuração do provedor de streaming de Voice Call até que a superfície dedicada de configuração de transcrição do Talk seja adicionada. speechLocale: id de localidade BCP 47 opcional para reconhecimento de fala do Talk no dispositivo no iOS/macOS. Deixe sem definir para usar o padrão do dispositivo.outputFormat: o padrão épcm_44100no macOS/iOS epcm_24000no Android (definamp3_*para forçar streaming de MP3)
Interface do macOS
- Alternância na barra de menus: Talk
- Aba de configuração: grupo Modo Talk (id de voz + alternância de interrupção)
- Sobreposição:
- Escutando: a nuvem pulsa com o nível do microfone
- Pensando: animação de afundamento
- Falando: anéis irradiantes
- Clicar na nuvem: parar de falar
- Clicar em X: sair do modo Talk
Interface do Android
- Alternância na aba de voz: Talk
- Microfone manual e Talk são modos de captura em runtime mutuamente exclusivos.
- O Microfone manual e o Talk em tempo real preferem um microfone de headset Bluetooth Classic ou BLE conectado. Se ele desconectar, o app solicita outra entrada de headset ou permite que o Android use o microfone padrão; interromper a captura restaura a preferência de microfone padrão.
- O Microfone manual para quando o app sai do primeiro plano ou quando o usuário sai da aba de Voz.
- O modo Talk continua em execução até ser desativado ou até o nó Android desconectar, e usa o tipo de serviço em primeiro plano de microfone do Android enquanto está ativo.
Observações
- Requer permissões de Fala + Microfone.
- O Talk nativo usa a sessão ativa do Gateway e só recorre à sondagem de histórico quando eventos de resposta não estão disponíveis.
- O Talk em tempo real de propriedade do cliente usa
talk.client.toolCallparaopenclaw_agent_consultem vez de exporchat.senda sessões de propriedade do provedor. - O Talk somente de transcrição usa
talk.session.create,talk.session.appendAudio,talk.session.cancelTurnetalk.session.close; os clientes assinamtalk.eventpara atualizações parciais/finais de transcrição. - O gateway resolve a reprodução do Talk por
talk.speakusando o provedor Talk ativo. O Android recorre ao TTS local do sistema apenas quando esse RPC está indisponível. - A reprodução local MLX no macOS usa o helper
openclaw-mlx-ttsincluído quando presente, ou um executável noPATH. DefinaOPENCLAW_MLX_TTS_BINpara apontar para um binário helper personalizado durante o desenvolvimento. stabilityparaeleven_v3é validado como0.0,0.5ou1.0; outros modelos aceitam0..1.latency_tieré validado como0..4quando definido.- O Android oferece suporte aos formatos de saída
pcm_16000,pcm_22050,pcm_24000epcm_44100para streaming de baixa latência com AudioTrack.