Nodes and media
حالت گفتگو
حالت Talk دو شکل اجرایی دارد:
- Talk بومی macOS/iOS/Android از تشخیص گفتار محلی، گفتوگوی Gateway و TTS با
talk.speakاستفاده میکند. Nodeها قابلیتtalkرا اعلام میکنند و فرمانهای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 بومی یک حلقه گفتوگوی صوتی پیوسته است:
- گوش دادن به گفتار
- ارسال رونویسی به مدل از طریق نشست فعال
- انتظار برای پاسخ
- پخش آن از طریق ارائهدهنده Talk پیکربندیشده (
talk.speak)
Talk بلادرنگ مرورگر فراخوانیهای ابزار ارائهدهنده را از طریق talk.client.toolCall عبور میدهد؛ کلاینتهای مرورگر برای مشاورههای بلادرنگ مستقیما chat.send را فراخوانی نمیکنند.
Talk فقط رونویسی همان پوشش رویداد مشترک Talk را مانند نشستهای بلادرنگ و STT/TTS منتشر میکند، اما از mode: "transcription" و brain: "none" استفاده میکند. این حالت برای زیرنویس، دیکته و ضبط گفتار فقطمشاهده است؛ یادداشتهای صوتی بارگذاریشده تکمرحلهای همچنان از مسیر رسانه/صوت استفاده میکنند.
رفتار (macOS)
- همپوشان همیشهروشن تا زمانی که حالت Talk فعال است.
- گذارهای مرحلهای در حال گوش دادن → در حال فکر کردن → در حال صحبت کردن.
- در یک مکث کوتاه (پنجره سکوت)، رونویسی فعلی ارسال میشود.
- پاسخها در WebChat نوشته میشوند (همانند تایپ کردن).
- وقفه هنگام گفتار (بهصورت پیشفرض روشن): اگر کاربر هنگام صحبت کردن دستیار شروع به صحبت کند، پخش را متوقف میکنیم و زمان وقفه را برای اعلان بعدی ثبت میکنیم.
دستورهای صوتی در پاسخها
دستیار میتواند برای کنترل صدا، پاسخ خود را با یک خط JSON تکی آغاز کند:
{ "voice": "<voice-id>", "once": true }قواعد:
- فقط نخستین خط غیرخالی.
- کلیدهای ناشناخته نادیده گرفته میشوند.
once: trueفقط برای پاسخ فعلی اعمال میشود.- بدون
once، صدا به پیشفرض جدید حالت Talk تبدیل میشود. - خط 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-2", voice: "cedar", }, }, instructions: "Speak warmly and keep answers brief.", mode: "realtime", transport: "webrtc", brain: "agent-consult", }, },}پیشفرضها:
interruptOnSpeech: truesilenceTimeoutMs: وقتی تنظیم نشده باشد، Talk پیش از ارسال رونویسی، پنجره مکث پیشفرض پلتفرم را نگه میدارد (700 ms on macOS and Android, 900 ms on iOS)provider: ارائهدهنده فعال Talk را انتخاب میکند. برای مسیرهای پخش محلی 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).consultThinkingLevel: بازنویسی اختیاری سطح فکر برای اجرای کامل عامل OpenClaw پشت فراخوانیهای بلادرنگopenclaw_agent_consult.consultFastMode: بازنویسی اختیاری حالت سریع برای فراخوانیهای بلادرنگopenclaw_agent_consult.realtime.provider: ارائهدهنده صدای بلادرنگ فعال مرورگر/سرور را انتخاب میکند. ازopenaiبرای WebRTC، ازgoogleبرای WebSocket ارائهدهنده، یا از یک ارائهدهنده فقطپل از طریق رله Gateway استفاده کنید.realtime.providers.<provider>پیکربندی بلادرنگ تحت مالکیت ارائهدهنده را ذخیره میکند. مرورگر فقط اعتبارنامههای نشست موقت یا محدودشده را دریافت میکند، هرگز یک کلید API استاندارد را دریافت نمیکند.realtime.providers.openai.voice: شناسه صدای بلادرنگ داخلی OpenAI. صداهای فعلیgpt-realtime-2عبارتاند ازalloy،ash،ballad،coral،echo،sage،shimmer،verse،marinوcedar؛ برای بهترین کیفیت،marinوcedarتوصیه میشوند.realtime.brain:agent-consultفراخوانیهای ابزار بلادرنگ را از طریق سیاست Gateway مسیریابی میکند؛direct-toolsرفتار سازگاری فقطمالک است؛noneبرای رونویسی یا ارکستراسیون خارجی است.realtime.instructions: دستورهای سیستمی روبهروی ارائهدهنده را به اعلان بلادرنگ داخلی OpenClaw اضافه میکند. از آن برای سبک و لحن صدا استفاده کنید؛ OpenClaw راهنمای پیشفرضopenclaw_agent_consultرا حفظ میکند.talk.catalogحالتهای معتبر، انتقالها، راهبردهای brain، قالبهای صوتی بلادرنگ و پرچمهای قابلیت هر ارائهدهنده را نمایش میدهد تا کلاینتهای Talk فرستپارتی بتوانند از ترکیبهای پشتیبانینشده پرهیز کنند.- ارائهدهندگان رونویسی جریانی از طریق
talk.catalog.transcriptionکشف میشوند. رله Gateway فعلی تا زمان افزوده شدن سطح پیکربندی اختصاصی رونویسی Talk، از پیکربندی ارائهدهنده جریانی Voice Call استفاده میکند. speechLocale: شناسه محلی اختیاری BCP 47 برای تشخیص گفتار رویدستگاه Talk در iOS/macOS. برای استفاده از پیشفرض دستگاه، آن را تنظیمنشده بگذارید.outputFormat: در macOS/iOS بهصورت پیشفرضpcm_44100و در Android بهصورت پیشفرضpcm_24000است (برای اجبار به پخش جریانی MP3،mp3_*را تنظیم کنید)
رابط کاربری macOS
- کلید نوار منو: Talk
- زبانه پیکربندی: گروه حالت Talk (شناسه صدا + کلید وقفه)
- همپوشان:
- در حال گوش دادن: ابر با سطح میکروفون تپش میکند
- در حال فکر کردن: پویانمایی فرورونده
- در حال صحبت کردن: حلقههای تابشی
- کلیک روی ابر: توقف صحبت
- کلیک روی X: خروج از حالت Talk
رابط کاربری Android
- کلید زبانه صوت: Talk
- Mic دستی و Talk حالتهای ضبط اجرایی ناسازگار با هم هستند.
- Mic دستی وقتی برنامه از پیشزمینه خارج شود یا کاربر زبانه Voice را ترک کند متوقف میشود.
- حالت Talk تا زمانی که خاموش شود یا Node اندروید قطع شود به اجرا ادامه میدهد و هنگام فعال بودن از نوع سرویس پیشزمینه میکروفون Android استفاده میکند.
نکتهها
- به مجوزهای Speech + Microphone نیاز دارد.
- Talk بومی از نشست Gateway فعال استفاده میکند و فقط وقتی رویدادهای پاسخ در دسترس نباشند به نظرسنجی تاریخچه برمیگردد.
- Talk بلادرنگ مرورگر برای
openclaw_agent_consultازtalk.client.toolCallاستفاده میکند، نه اینکهchat.sendرا در معرض نشستهای مرورگر تحت مالکیت ارائهدهنده قرار دهد. - Talk فقط رونویسی از
talk.session.create،talk.session.appendAudio،talk.session.cancelTurnوtalk.session.closeاستفاده میکند؛ کلاینتها برای بهروزرسانیهای رونویسی جزئی/نهایی درtalk.eventمشترک میشوند. - Gateway پخش Talk را با استفاده از ارائهدهنده فعال Talk از طریق
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 پشتیبانی میکند.