Nodes and media
حالت گفتوگو
حالت گفتوگو دو شکل اجرایی دارد:
- گفتوگوی بومی macOS/iOS/Android از تشخیص گفتار محلی، چت Gateway، و TTS با
talk.speakاستفاده میکند. گرهها قابلیتtalkرا اعلام میکنند و فرمانهایtalk.*پشتیبانیشده خود را مشخص میکنند. - گفتوگوی مرورگر از
talk.client.createبرای نشستهایwebrtcوprovider-websocketکه مالک آنها کلاینت است، یا ازtalk.session.createبرای نشستهایgateway-relayکه مالک آنها Gateway است، استفاده میکند.managed-roomبرای تحویل به Gateway و اتاقهای واکیتاکی رزرو شده است. - کلاینتهای فقطرونویسی از
talk.session.create({ mode: "transcription", transport: "gateway-relay", brain: "none" })استفاده میکنند، سپس وقتی به زیرنویس یا دیکته بدون پاسخ صوتی دستیار نیاز دارند،talk.session.appendAudio،talk.session.cancelTurn، وtalk.session.closeرا به کار میبرند.
گفتوگوی بومی یک حلقه پیوسته مکالمه صوتی است:
- گوش دادن به گفتار
- ارسال رونویسی به مدل از طریق نشست فعال
- انتظار برای پاسخ
- خواندن آن از طریق ارائهدهنده گفتوگوی پیکربندیشده (
talk.speak)
گفتوگوی بلادرنگ مرورگر فراخوانیهای ابزار ارائهدهنده را از طریق talk.client.toolCall عبور میدهد؛ کلاینتهای مرورگر برای مشاورههای بلادرنگ مستقیما chat.send را فراخوانی نمیکنند.
گفتوگوی فقطرونویسی همان پوشش رویداد مشترک گفتوگو را مثل نشستهای بلادرنگ و STT/TTS منتشر میکند، اما از mode: "transcription" و brain: "none" استفاده میکند. این حالت برای زیرنویس، دیکته، و ضبط گفتار فقطنظارتی است؛ یادداشتهای صوتی بارگذاریشده تکمرحلهای همچنان از مسیر رسانه/صدا استفاده میکنند.
رفتار (macOS)
- همپوشانی همیشهروشن وقتی حالت گفتوگو فعال است.
- گذارهای مرحلهای در حال گوش دادن ← در حال فکر کردن ← در حال صحبت کردن.
- در یک مکث کوتاه (پنجره سکوت)، رونویسی فعلی ارسال میشود.
- پاسخها در WebChat نوشته میشوند (همانند تایپ کردن).
- وقفه هنگام گفتار (بهطور پیشفرض روشن): اگر کاربر هنگام صحبت دستیار شروع به صحبت کند، پخش را متوقف میکنیم و زمان وقفه را برای درخواست بعدی ثبت میکنیم.
دستورهای صوتی در پاسخها
دستیار میتواند پاسخ خود را با یک خط JSON تکی برای کنترل صدا آغاز کند:
{ "voice": "<voice-id>", "once": true }
قواعد:
- فقط اولین خط غیرخالی.
- کلیدهای ناشناخته نادیده گرفته میشوند.
once: trueفقط برای پاسخ فعلی اعمال میشود.- بدون
once، صدا به پیشفرض جدید حالت گفتوگو تبدیل میشود. - خط JSON پیش از پخش TTS حذف میشود.
کلیدهای پشتیبانیشده:
voice/voice_id/voiceIdmodel/model_id/modelIdspeed,rate(WPM),stability,similarity,style,speakerBoostseed,normalize,lang,output_format,latency_tieronce
پیکربندی (~/.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",
},
},
}
پیشفرضها:
interruptOnSpeech: truesilenceTimeoutMs: وقتی تنظیم نشده باشد، گفتوگو پیش از ارسال رونویسی، پنجره مکث پیشفرض پلتفرم را نگه میدارد (700 ms در macOS و Android، 900 ms در iOS)provider: ارائهدهنده فعال گفتوگو را انتخاب میکند. برای مسیرهای پخش محلی macOS ازelevenlabs،mlx، یاsystemاستفاده کنید.providers.<provider>.voiceId: برای ElevenLabs بهELEVENLABS_VOICE_ID/SAG_VOICE_IDبازمیگردد (یا وقتی کلید API در دسترس باشد، به اولین صدای ElevenLabs).providers.elevenlabs.modelId: وقتی تنظیم نشده باشد، پیشفرض آنeleven_v3است.providers.mlx.modelId: وقتی تنظیم نشده باشد، پیشفرض آنmlx-community/Soprano-80M-bf16است.providers.elevenlabs.apiKey: بهELEVENLABS_API_KEYبازمیگردد (یا اگر در دسترس باشد، به پروفایل شل Gateway).realtime.provider: ارائهدهنده فعال صدای بلادرنگ مرورگر/سرور را انتخاب میکند. برای WebRTC ازopenai، برای WebSocket ارائهدهنده ازgoogle، یا برای ارائهدهنده فقطپل از طریق رله Gateway استفاده کنید.realtime.providers.<provider>پیکربندی بلادرنگ متعلق به ارائهدهنده را ذخیره میکند. مرورگر فقط اعتبارنامههای نشست موقت یا محدودشده را دریافت میکند، نه هرگز یک کلید API استاندارد.realtime.brain:agent-consultفراخوانیهای ابزار بلادرنگ را از طریق خطمشی Gateway مسیریابی میکند؛direct-toolsرفتار سازگاری فقطمالک است؛noneبرای رونویسی یا ارکستراسیون خارجی است.talk.catalogحالتهای معتبر، انتقالها، راهبردهای مغز، قالبهای صوتی بلادرنگ، و پرچمهای قابلیت هر ارائهدهنده را آشکار میکند تا کلاینتهای گفتوگوی فرستپارتی بتوانند از ترکیبهای پشتیبانینشده پرهیز کنند.- ارائهدهندگان رونویسی جریانی از طریق
talk.catalog.transcriptionکشف میشوند. رله فعلی Gateway تا زمانی که سطح پیکربندی اختصاصی رونویسی گفتوگو اضافه شود، از پیکربندی ارائهدهنده جریانی تماس صوتی استفاده میکند. speechLocale: شناسه اختیاری منطقه BCP 47 برای تشخیص گفتار رویدستگاه در گفتوگو در iOS/macOS. برای استفاده از پیشفرض دستگاه، آن را تنظیمنشده بگذارید.outputFormat: در macOS/iOS بهطور پیشفرضpcm_44100و در Android بهطور پیشفرضpcm_24000است (برای اجبار جریانیسازی MP3،mp3_*را تنظیم کنید)
رابط کاربری macOS
- کلید نوار منو: گفتوگو
- زبانه پیکربندی: گروه حالت گفتوگو (شناسه صدا + کلید وقفه)
- همپوشانی:
- در حال گوش دادن: ابر با سطح میکروفون میتپد
- در حال فکر کردن: پویانمایی فرورونده
- در حال صحبت کردن: حلقههای تابشی
- کلیک روی ابر: توقف صحبت کردن
- کلیک روی X: خروج از حالت گفتوگو
رابط کاربری Android
- کلید زبانه صدا: گفتوگو
- میکروفون دستی و گفتوگو حالتهای ضبط اجرایی ناسازگار با هم هستند.
- میکروفون دستی وقتی برنامه از پیشزمینه خارج شود یا کاربر زبانه صدا را ترک کند، متوقف میشود.
- حالت گفتوگو تا زمان خاموش شدن از طریق کلید یا قطع اتصال گره Android به اجرا ادامه میدهد و در زمان فعال بودن از نوع سرویس پیشزمینه میکروفون Android استفاده میکند.
یادداشتها
- به مجوزهای گفتار + میکروفون نیاز دارد.
- گفتوگوی بومی از نشست فعال Gateway استفاده میکند و فقط وقتی رویدادهای پاسخ در دسترس نباشند، به نظرسنجی تاریخچه بازمیگردد.
- گفتوگوی بلادرنگ مرورگر بهجای در معرض قرار دادن
chat.sendبرای نشستهای مرورگر متعلق به ارائهدهنده، ازtalk.client.toolCallبرایopenclaw_agent_consultاستفاده میکند. - گفتوگوی فقطرونویسی از
talk.session.create،talk.session.appendAudio،talk.session.cancelTurn، وtalk.session.closeاستفاده میکند؛ کلاینتها برای بهروزرسانیهای جزئی/نهایی رونویسی درtalk.eventمشترک میشوند. - Gateway پخش گفتوگو را از طریق
talk.speakو با استفاده از ارائهدهنده فعال گفتوگو حل میکند. Android فقط وقتی آن RPC در دسترس نباشد، به TTS سیستم محلی بازمیگردد. - پخش MLX محلی macOS وقتی در دسترس باشد از کمککننده همراه
openclaw-mlx-ttsاستفاده میکند، یا از یک فایل اجرایی رویPATH. در زمان توسعه،OPENCLAW_MLX_TTS_BINرا تنظیم کنید تا به باینری کمککننده سفارشی اشاره کند. stabilityبرایeleven_v3به0.0،0.5، یا1.0اعتبارسنجی میشود؛ مدلهای دیگر0..1را میپذیرند.latency_tierوقتی تنظیم شده باشد، به0..4اعتبارسنجی میشود.- Android از قالبهای خروجی
pcm_16000،pcm_22050،pcm_24000، وpcm_44100برای جریانیسازی AudioTrack با تاخیر کم پشتیبانی میکند.