Nodes and media
Konuşma modu
Konuşma modunun iki çalışma zamanı biçimi vardır:
- Yerel macOS/iOS/Android Konuşma, yerel konuşma tanımayı, Gateway sohbetini ve
talk.speakTTS'yi kullanır. Düğümlertalkyeteneğini duyurur ve destekledikleritalk.*komutlarını bildirir. - iOS Konuşma,
webrtcseçen veya aktarımı atlayan OpenAI gerçek zamanlı yapılandırmaları için istemciye ait WebRTC kullanır. Açıkgateway-relay,provider-websocketve OpenAI dışı gerçek zamanlı yapılandırmalar Gateway'e ait aktarıcıda kalır; gerçek zamanlı olmayan yapılandırmalar yerel konuşma döngüsünü kullanır. - Tarayıcı Konuşma, istemciye ait
webrtcveprovider-websocketoturumları içintalk.client.create, Gateway'e aitgateway-relayoturumları içinsetalk.session.createkullanır.managed-room, Gateway devri ve telsiz odaları için ayrılmıştır. - Android Konuşma,
talk.realtime.mode: "realtime"vetalk.realtime.transport: "gateway-relay"ile Gateway'e ait gerçek zamanlı aktarıcı oturumlarına katılabilir. Aksi halde yerel konuşma tanıma, Gateway sohbeti vetalk.speaküzerinde kalır. - Yalnızca transkripsiyon istemcileri, yardımcı ses yanıtı olmadan altyazı veya dikte gerektiğinde
talk.session.create({ mode: "transcription", transport: "gateway-relay", brain: "none" }), ardındantalk.session.appendAudio,talk.session.cancelTurnvetalk.session.closekullanır.
Yerel Konuşma, sürekli bir sesli konuşma döngüsüdür:
- Konuşmayı dinle
- Transkripti etkin oturum üzerinden modele gönder
- Yanıtı bekle
- Yapılandırılmış Konuşma sağlayıcısı (
talk.speak) üzerinden seslendir
İstemciye ait gerçek zamanlı Konuşma, sağlayıcı araç çağrılarını talk.client.toolCall üzerinden iletir; bu istemciler gerçek zamanlı danışmalar için doğrudan chat.send çağırmaz.
Gerçek zamanlı bir danışma etkinken, Konuşma istemcileri sözlü girdiyi status, steer, cancel veya
followup olarak sınıflandırmak için talk.client.steer ya da
talk.session.steer kullanabilir. Kabul edilen yönlendirme etkin gömülü çalıştırmaya kuyruğa alınır; reddedilen yönlendirme
no_active_run, not_streaming veya compacting gibi yapılandırılmış bir neden döndürür.
Yalnızca transkripsiyon Konuşma, gerçek zamanlı ve STT/TTS oturumlarıyla aynı ortak Konuşma olay zarfını yayar, ancak mode: "transcription" ve brain: "none" kullanır. Altyazılar, dikte ve yalnızca gözlem amaçlı konuşma yakalama içindir; tek seferlik yüklenen sesli notlar hâlâ medya/ses yolunu kullanır.
Davranış (macOS)
- Konuşma modu etkinken her zaman açık katman.
- Dinliyor → Düşünüyor → Konuşuyor aşama geçişleri.
- Kısa bir duraklamada (sessizlik penceresi), geçerli transkript gönderilir.
- Yanıtlar WebChat'e yazılır (yazmayla aynı).
- Konuşmayla kesme (varsayılan olarak açık): kullanıcı asistan konuşurken konuşmaya başlarsa oynatmayı durdurur ve sonraki istem için kesinti zaman damgasını not ederiz.
Yanıtlarda ses yönergeleri
Asistan, sesi denetlemek için yanıtının başına tek bir JSON satırı ekleyebilir:
{ "voice": "<voice-id>", "once": true }Kurallar:
- Yalnızca ilk boş olmayan satır.
- Bilinmeyen anahtarlar yok sayılır.
once: trueyalnızca geçerli yanıta uygulanır.onceolmadan ses, Konuşma modu için yeni varsayılan olur.- JSON satırı TTS oynatmasından önce çıkarılır.
Desteklenen anahtarlar:
voice/voice_id/voiceIdmodel/model_id/modelIdspeed,rate(WPM),stability,similarity,style,speakerBoostseed,normalize,lang,output_format,latency_tieronce
Yapılandırma (~/.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", }, },}Varsayılanlar:
interruptOnSpeech: truesilenceTimeoutMs: ayarlanmadığında, Konuşma transkripti göndermeden önce platformun varsayılan duraklama penceresini korur (macOS ve Android'de 700 ms, iOS'ta 900 ms)provider: etkin Konuşma sağlayıcısını seçer. macOS yerel oynatma yolları içinelevenlabs,mlxveyasystemkullanın.providers.<provider>.voiceId: ElevenLabs içinELEVENLABS_VOICE_ID/SAG_VOICE_IDdeğerlerine geri döner (veya API anahtarı varsa ilk ElevenLabs sesine).providers.elevenlabs.modelId: ayarlanmadığında varsayılan olarakeleven_v3olur.providers.mlx.modelId: ayarlanmadığında varsayılan olarakmlx-community/Soprano-80M-bf16olur.providers.elevenlabs.apiKey:ELEVENLABS_API_KEYdeğerine geri döner (veya varsa Gateway kabuk profiline).consultThinkingLevel: gerçek zamanlıopenclaw_agent_consultçağrılarının arkasındaki tam OpenClaw ajan çalıştırması için isteğe bağlı düşünme düzeyi geçersiz kılması.consultFastMode: gerçek zamanlıopenclaw_agent_consultçağrıları için isteğe bağlı hızlı mod geçersiz kılması.realtime.provider: etkin gerçek zamanlı ses sağlayıcısını seçer. WebRTC içinopenai, sağlayıcı WebSocket içingoogleveya Gateway aktarıcısı üzerinden yalnızca köprü sağlayıcısı kullanın.realtime.providers.<provider>sağlayıcıya ait gerçek zamanlı yapılandırmayı saklar. Tarayıcı yalnızca geçici veya kısıtlanmış oturum kimlik bilgilerini alır, hiçbir zaman standart API anahtarı almaz.realtime.providers.openai.voice: yerleşik OpenAI Realtime ses kimliği. Geçerligpt-realtime-2seslerialloy,ash,ballad,coral,echo,sage,shimmer,verse,marinvecedardeğerleridir; en iyi kalite içinmarinvecedarönerilir.realtime.transport:webrtc, iOS'ta ve tarayıcıda istemciye ait OpenAI WebRTC kullanır.provider-websockettarayıcıya aittir, ancak iOS'ta Gateway aktarıcısında kalır.gateway-relaysağlayıcı sesini Gateway'de tutar; Android gerçek zamanlıyı yalnızca bu aktarım için kullanır ve aksi halde yerel STT/TTS döngüsünü korur.realtime.brain:agent-consult, gerçek zamanlı araç çağrılarını Gateway ilkesi üzerinden yönlendirir;direct-tools, eski doğrudan araç uyumluluk davranışıdır;none, transkripsiyon veya dış orkestrasyon içindir.realtime.consultRouting:provider-direct,openclaw_agent_consultatlandığında sağlayıcının doğrudan yanıtını korur;force-agent-consult, Gateway aktarıcısının sonlandırılmış kullanıcı transkriptlerini bunun yerine OpenClaw üzerinden yönlendirmesini sağlar.realtime.instructions: sağlayıcıya dönük sistem yönergelerini OpenClaw'ın yerleşik gerçek zamanlı istemine ekler. Ses stili ve tonu için kullanın; OpenClaw varsayılanopenclaw_agent_consultrehberliğini korur.talk.catalog, birinci taraf Konuşma istemcilerinin desteklenmeyen kombinasyonlardan kaçınabilmesi için her sağlayıcının geçerli modlarını, aktarımlarını, beyin stratejilerini, gerçek zamanlı ses biçimlerini ve yetenek bayraklarını sunar.- Akış transkripsiyon sağlayıcıları
talk.catalog.transcriptionüzerinden keşfedilir. Geçerli Gateway aktarıcısı, özel Konuşma transkripsiyon yapılandırma yüzeyi eklenene kadar Voice Call akış sağlayıcı yapılandırmasını kullanır. speechLocale: iOS/macOS üzerinde cihaz içi Konuşma konuşma tanıma için isteğe bağlı BCP 47 yerel ayar kimliği. Cihaz varsayılanını kullanmak için ayarlamayın.outputFormat: macOS/iOS'ta varsayılan olarakpcm_44100, Android'depcm_24000olur (MP3 akışını zorlamak içinmp3_*ayarlayın)
macOS kullanıcı arayüzü
- Menü çubuğu anahtarı: Konuşma
- Yapılandırma sekmesi: Konuşma Modu grubu (ses kimliği + kesme anahtarı)
- Katman:
- Dinliyor: bulut mikrofon düzeyiyle titreşir
- Düşünüyor: batma animasyonu
- Konuşuyor: yayılan halkalar
- Buluta tıkla: konuşmayı durdur
- X'e tıkla: Konuşma modundan çık
Android kullanıcı arayüzü
- Ses sekmesi anahtarı: Konuşma
- Manuel Mikrofon ve Konuşma, birbirini dışlayan çalışma zamanı yakalama modlarıdır.
- Manuel Mikrofon ve gerçek zamanlı Konuşma, bağlı bir Bluetooth Classic veya BLE kulaklık mikrofonunu tercih eder. Bağlantı kesilirse uygulama başka bir kulaklık girişi ister veya Android'in varsayılan mikrofonu kullanmasına izin verir; yakalamayı durdurmak varsayılan mikrofon tercihini geri yükler.
- Uygulama ön plandan ayrıldığında veya kullanıcı Ses sekmesinden çıktığında Manuel Mikrofon durur.
- Konuşma Modu kapatılana veya Android düğümünün bağlantısı kesilene kadar çalışmaya devam eder ve etkinken Android'in mikrofon ön plan hizmeti türünü kullanır.
Notlar
- Konuşma + Mikrofon izinleri gerektirir.
- Yerel Konuşma, etkin Gateway oturumunu kullanır ve yalnızca yanıt olayları kullanılamadığında geçmiş yoklamasına geri döner.
- İstemciye ait gerçek zamanlı Konuşma, sağlayıcıya ait oturumlara
chat.sendsunmak yerineopenclaw_agent_consultiçintalk.client.toolCallkullanır. - Yalnızca transkripsiyon Konuşma
talk.session.create,talk.session.appendAudio,talk.session.cancelTurnvetalk.session.closekullanır; istemciler kısmi/son transkript güncellemeleri içintalk.eventolayına abone olur. - Gateway, etkin Konuşma sağlayıcısını kullanarak Konuşma oynatmasını
talk.speaküzerinden çözer. Android yalnızca bu RPC kullanılamadığında yerel sistem TTS'ye geri döner. - macOS yerel MLX oynatma, varsa paketlenmiş
openclaw-mlx-ttsyardımcısını veyaPATHüzerindeki bir çalıştırılabilir dosyayı kullanır. Geliştirme sırasında özel bir yardımcı ikili dosyasını göstermek içinOPENCLAW_MLX_TTS_BINayarlayın. eleven_v3içinstability,0.0,0.5veya1.0olarak doğrulanır; diğer modeller0..1kabul eder.latency_tierayarlandığında0..4olarak doğrulanır.- Android, düşük gecikmeli AudioTrack akışı için
pcm_16000,pcm_22050,pcm_24000vepcm_44100çıktı biçimlerini destekler.