Nodes and media
Mode bicara
Mode Talk memiliki dua bentuk runtime:
- Talk native macOS/iOS/Android menggunakan pengenalan suara lokal, chat Gateway, dan TTS
talk.speak. Node mengiklankan kapabilitastalkdan mendeklarasikan perintahtalk.*yang didukung. - Talk browser menggunakan
talk.client.createuntuk sesiwebrtcdanprovider-websocketyang dimiliki klien, atautalk.session.createuntuk sesigateway-relayyang dimiliki Gateway.managed-roomdicadangkan untuk handoff Gateway dan ruang walkie-talkie. - Klien khusus transkripsi menggunakan
talk.session.create({ mode: "transcription", transport: "gateway-relay", brain: "none" }), lalutalk.session.appendAudio,talk.session.cancelTurn, dantalk.session.closesaat membutuhkan caption atau dikte tanpa respons suara asisten.
Talk native adalah loop percakapan suara berkelanjutan:
- Dengarkan ucapan
- Kirim transkrip ke model melalui sesi aktif
- Tunggu respons
- Ucapkan melalui penyedia Talk yang dikonfigurasi (
talk.speak)
Talk realtime browser meneruskan pemanggilan tool penyedia melalui talk.client.toolCall; klien browser tidak memanggil chat.send secara langsung untuk konsultasi realtime.
Talk khusus transkripsi memancarkan envelope peristiwa Talk umum yang sama seperti sesi realtime dan STT/TTS, tetapi menggunakan mode: "transcription" dan brain: "none". Ini ditujukan untuk caption, dikte, dan penangkapan ucapan hanya-observasi; catatan suara unggahan sekali pakai tetap menggunakan jalur media/audio.
Perilaku (macOS)
- Overlay selalu aktif saat mode Talk diaktifkan.
- Transisi fase Mendengarkan → Berpikir → Berbicara.
- Pada jeda singkat (jendela hening), transkrip saat ini dikirim.
- Balasan ditulis ke WebChat (sama seperti mengetik).
- Interupsi saat ada ucapan (aktif secara default): jika pengguna mulai berbicara saat asisten sedang berbicara, kami menghentikan pemutaran dan mencatat timestamp interupsi untuk prompt berikutnya.
Direktif suara dalam balasan
Asisten dapat memberi prefix balasannya dengan satu baris JSON untuk mengontrol suara:
{ "voice": "<voice-id>", "once": true }
Aturan:
- Hanya baris tidak kosong pertama.
- Kunci yang tidak dikenal diabaikan.
once: truehanya berlaku untuk balasan saat ini.- Tanpa
once, suara menjadi default baru untuk mode Talk. - Baris JSON dihapus sebelum pemutaran TTS.
Kunci yang didukung:
voice/voice_id/voiceIdmodel/model_id/modelIdspeed,rate(WPM),stability,similarity,style,speakerBoostseed,normalize,lang,output_format,latency_tieronce
Konfigurasi (~/.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",
},
},
}
Default:
interruptOnSpeech: truesilenceTimeoutMs: saat tidak disetel, Talk mempertahankan jendela jeda default platform sebelum mengirim transkrip (700 ms on macOS and Android, 900 ms on iOS)provider: memilih penyedia Talk aktif. Gunakanelevenlabs,mlx, atausystemuntuk jalur pemutaran lokal macOS.providers.<provider>.voiceId: fallback keELEVENLABS_VOICE_ID/SAG_VOICE_IDuntuk ElevenLabs (atau suara ElevenLabs pertama saat kunci API tersedia).providers.elevenlabs.modelId: default keeleven_v3saat tidak disetel.providers.mlx.modelId: default kemlx-community/Soprano-80M-bf16saat tidak disetel.providers.elevenlabs.apiKey: fallback keELEVENLABS_API_KEY(atau profil shell gateway jika tersedia).realtime.provider: memilih penyedia suara realtime browser/server aktif. Gunakanopenaiuntuk WebRTC,googleuntuk WebSocket penyedia, atau penyedia khusus bridge melalui relay Gateway.realtime.providers.<provider>menyimpan konfigurasi realtime yang dimiliki penyedia. Browser hanya menerima kredensial sesi ephemeral atau terbatas, tidak pernah kunci API standar.realtime.brain:agent-consultmerutekan pemanggilan tool realtime melalui kebijakan Gateway;direct-toolsadalah perilaku kompatibilitas khusus pemilik;noneuntuk transkripsi atau orkestrasi eksternal.talk.catalogmengekspos mode valid, transport, strategi brain, format audio realtime, dan flag kapabilitas setiap penyedia sehingga klien Talk pihak pertama dapat menghindari kombinasi yang tidak didukung.- Penyedia transkripsi streaming ditemukan melalui
talk.catalog.transcription. Relay Gateway saat ini menggunakan konfigurasi penyedia streaming Voice Call sampai permukaan konfigurasi transkripsi Talk khusus ditambahkan. speechLocale: id lokal BCP 47 opsional untuk pengenalan ucapan Talk di perangkat pada iOS/macOS. Biarkan tidak disetel untuk menggunakan default perangkat.outputFormat: default kepcm_44100pada macOS/iOS danpcm_24000pada Android (setelmp3_*untuk memaksa streaming MP3)
UI macOS
- Toggle bilah menu: Talk
- Tab konfigurasi: grup Mode Talk (id suara + toggle interupsi)
- Overlay:
- Mendengarkan: cloud berdenyut mengikuti level mikrofon
- Berpikir: animasi tenggelam
- Berbicara: cincin yang memancar
- Klik cloud: hentikan berbicara
- Klik X: keluar dari mode Talk
UI Android
- Toggle tab Suara: Talk
- Mikrofon manual dan Talk adalah mode penangkapan runtime yang saling eksklusif.
- Mikrofon manual berhenti saat aplikasi meninggalkan foreground atau pengguna meninggalkan tab Suara.
- Mode Talk tetap berjalan sampai dinonaktifkan atau node Android terputus, dan menggunakan tipe foreground-service mikrofon Android saat aktif.
Catatan
- Memerlukan izin Ucapan + Mikrofon.
- Talk native menggunakan sesi Gateway aktif dan hanya fallback ke polling riwayat saat peristiwa respons tidak tersedia.
- Talk realtime browser menggunakan
talk.client.toolCalluntukopenclaw_agent_consult, bukan mengeksposchat.sendke sesi browser yang dimiliki penyedia. - Talk khusus transkripsi menggunakan
talk.session.create,talk.session.appendAudio,talk.session.cancelTurn, dantalk.session.close; klien berlangganan ketalk.eventuntuk pembaruan transkrip sebagian/final. - Gateway menyelesaikan pemutaran Talk melalui
talk.speakmenggunakan penyedia Talk aktif. Android fallback ke TTS sistem lokal hanya saat RPC tersebut tidak tersedia. - Pemutaran MLX lokal macOS menggunakan helper
openclaw-mlx-ttsyang dibundel saat tersedia, atau executable diPATH. SetelOPENCLAW_MLX_TTS_BINuntuk menunjuk ke biner helper kustom selama pengembangan. stabilityuntukeleven_v3divalidasi ke0.0,0.5, atau1.0; model lain menerima0..1.latency_tierdivalidasi ke0..4saat disetel.- Android mendukung format output
pcm_16000,pcm_22050,pcm_24000, danpcm_44100untuk streaming AudioTrack latensi rendah.