Nodes and media
Modalità conversazione
La modalità Talk ha due forme runtime:
- Talk nativo macOS/iOS/Android usa il riconoscimento vocale locale, la chat del Gateway e la sintesi vocale TTS
talk.speak. I Node pubblicizzano la capabilitytalke dichiarano i comanditalk.*che supportano. - Talk nel browser usa
talk.client.createper sessioniwebrtceprovider-websocketdi proprietà del client, oppuretalk.session.createper sessionigateway-relaydi proprietà del Gateway.managed-roomè riservato al passaggio di consegna del Gateway e alle stanze walkie-talkie. - I client solo trascrizione usano
talk.session.create({ mode: "transcription", transport: "gateway-relay", brain: "none" }), poitalk.session.appendAudio,talk.session.cancelTurnetalk.session.closequando hanno bisogno di sottotitoli o dettatura senza una risposta vocale dell'assistente.
Talk nativo è un ciclo continuo di conversazione vocale:
- Ascolta il parlato
- Invia la trascrizione al modello tramite la sessione attiva
- Attende la risposta
- La pronuncia tramite il provider Talk configurato (
talk.speak)
Talk realtime nel browser inoltra le chiamate agli strumenti del provider tramite talk.client.toolCall; i client browser non chiamano direttamente chat.send per le consulenze realtime.
Talk solo trascrizione emette lo stesso envelope comune di eventi Talk delle sessioni realtime e STT/TTS, ma usa mode: "transcription" e brain: "none". È pensato per sottotitoli, dettatura e acquisizione vocale solo osservazione; le note vocali caricate una tantum continuano a usare il percorso media/audio.
Comportamento (macOS)
- Overlay sempre attivo mentre la modalità Talk è abilitata.
- Transizioni di fase Ascolto → Elaborazione → Parlato.
- Dopo una breve pausa (finestra di silenzio), la trascrizione corrente viene inviata.
- Le risposte vengono scritte in WebChat (come quando si digita).
- Interruzione al parlato (attiva per impostazione predefinita): se l'utente inizia a parlare mentre l'assistente sta parlando, interrompiamo la riproduzione e annotiamo il timestamp dell'interruzione per il prompt successivo.
Direttive vocali nelle risposte
L'assistente può anteporre alla risposta una singola riga JSON per controllare la voce:
{ "voice": "<voice-id>", "once": true }
Regole:
- Solo la prima riga non vuota.
- Le chiavi sconosciute vengono ignorate.
once: truesi applica solo alla risposta corrente.- Senza
once, la voce diventa la nuova impostazione predefinita per la modalità Talk. - La riga JSON viene rimossa prima della riproduzione TTS.
Chiavi supportate:
voice/voice_id/voiceIdmodel/model_id/modelIdspeed,rate(WPM),stability,similarity,style,speakerBoostseed,normalize,lang,output_format,latency_tieronce
Configurazione (~/.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",
voice: "alloy",
},
},
mode: "realtime",
transport: "webrtc",
brain: "agent-consult",
},
},
}
Impostazioni predefinite:
interruptOnSpeech: truesilenceTimeoutMs: quando non è impostato, Talk mantiene la finestra di pausa predefinita della piattaforma prima di inviare la trascrizione (700 ms on macOS and Android, 900 ms on iOS)provider: seleziona il provider Talk attivo. Usaelevenlabs,mlxosystemper i percorsi di riproduzione locali su macOS.providers.<provider>.voiceId: ripiega suELEVENLABS_VOICE_ID/SAG_VOICE_IDper ElevenLabs (oppure sulla prima voce ElevenLabs quando è disponibile una chiave API).providers.elevenlabs.modelId: per impostazione predefinita usaeleven_v3quando non è impostato.providers.mlx.modelId: per impostazione predefinita usamlx-community/Soprano-80M-bf16quando non è impostato.providers.elevenlabs.apiKey: ripiega suELEVENLABS_API_KEY(o sul profilo shell del gateway, se disponibile).realtime.provider: seleziona il provider vocale realtime browser/server attivo. Usaopenaiper WebRTC,googleper WebSocket del provider, oppure un provider solo bridge tramite relay del Gateway.realtime.providers.<provider>archivia la configurazione realtime di proprietà del provider. Il browser riceve solo credenziali di sessione effimere o vincolate, mai una chiave API standard.realtime.brain:agent-consultinstrada le chiamate agli strumenti realtime tramite la policy del Gateway;direct-toolsè un comportamento di compatibilità riservato al proprietario;noneè per trascrizione o orchestrazione esterna.talk.catalogespone le modalità, i trasporti, le strategie brain, i formati audio realtime e i flag di capability validi di ciascun provider, così i client Talk proprietari possono evitare combinazioni non supportate.- I provider di trascrizione in streaming vengono scoperti tramite
talk.catalog.transcription. L'attuale relay del Gateway usa la configurazione del provider di streaming Voice Call finché non verrà aggiunta la superficie dedicata di configurazione della trascrizione Talk. speechLocale: id locale BCP 47 opzionale per il riconoscimento vocale Talk sul dispositivo in iOS/macOS. Lascialo non impostato per usare il valore predefinito del dispositivo.outputFormat: per impostazione predefinita usapcm_44100su macOS/iOS epcm_24000su Android (impostamp3_*per forzare lo streaming MP3)
UI macOS
- Interruttore nella barra dei menu: Talk
- Scheda di configurazione: gruppo Modalità Talk (id voce + interruttore interruzione)
- Overlay:
- Ascolto: la nuvola pulsa con il livello del microfono
- Elaborazione: animazione di affondamento
- Parlato: anelli irradianti
- Clic sulla nuvola: interrompe il parlato
- Clic su X: esce dalla modalità Talk
UI Android
- Interruttore nella scheda Voce: Talk
- Mic manuale e Talk sono modalità runtime di acquisizione mutuamente esclusive.
- Mic manuale si interrompe quando l'app lascia il primo piano o l'utente lascia la scheda Voce.
- La modalità Talk continua a funzionare finché non viene disattivata o il Node Android si disconnette, e usa il tipo di servizio in primo piano del microfono di Android mentre è attiva.
Note
- Richiede le autorizzazioni Voce + Microfono.
- Talk nativo usa la sessione Gateway attiva e ripiega sul polling della cronologia solo quando gli eventi di risposta non sono disponibili.
- Talk realtime nel browser usa
talk.client.toolCallperopenclaw_agent_consultinvece di esporrechat.sendalle sessioni browser di proprietà del provider. - Talk solo trascrizione usa
talk.session.create,talk.session.appendAudio,talk.session.cancelTurnetalk.session.close; i client si sottoscrivono atalk.eventper aggiornamenti parziali/finali della trascrizione. - Il gateway risolve la riproduzione Talk tramite
talk.speakusando il provider Talk attivo. Android ripiega sulla TTS di sistema locale solo quando quella RPC non è disponibile. - La riproduzione locale MLX su macOS usa l'helper incluso
openclaw-mlx-ttsquando presente, oppure un eseguibile suPATH. ImpostaOPENCLAW_MLX_TTS_BINper puntare a un binario helper personalizzato durante lo sviluppo. stabilitypereleven_v3viene convalidato su0.0,0.5o1.0; gli altri modelli accettano0..1.latency_tierviene convalidato su0..4quando impostato.- Android supporta i formati di output
pcm_16000,pcm_22050,pcm_24000epcm_44100per lo streaming AudioTrack a bassa latenza.