Nodes and media
حالت مکالمه
حالت مکالمه پنج الگوی اجرایی را پوشش میدهد:
- مکالمه بومی macOS/iOS/Android: تشخیص گفتار محلی، گفتوگو از طریق Gateway و تبدیل متن به گفتار با
talk.speak. Nodeها قابلیتtalkرا اعلام میکنند و مشخص میکنند از کدام فرمانهایtalk.*پشتیبانی میکنند. - مکالمه iOS (بلادرنگ): WebRTC تحت مالکیت کلاینت برای پیکربندیهای بلادرنگ OpenAI که انتقال
webrtcرا انتخاب میکنند یا انتقال را مشخص نمیکنند. پیکربندیهای بلادرنگی که صراحتاًgateway-relayیاprovider-websocketرا انتخاب میکنند و نیز پیکربندیهای بلادرنگ غیر OpenAI، روی رله تحت مالکیت Gateway باقی میمانند؛ پیکربندیهای غیربلادرنگ از چرخه بومی گفتار استفاده میکنند. - مکالمه مرورگر:
talk.client.createبرای نشستهایwebrtc/provider-websocketتحت مالکیت کلاینت، یاtalk.session.createبرای نشستهایgateway-relayتحت مالکیت Gateway.managed-roomبرای تحویل به Gateway و اتاقهای واکیتاکی رزرو شده است. - مکالمه Android (بلادرنگ): با
talk.realtime.mode: "realtime"وtalk.realtime.transport: "gateway-relay"فعال کنید. در غیر این صورت، Android از تشخیص گفتار بومی، گفتوگو از طریق Gateway وtalk.speakاستفاده میکند. - کلاینتهای صرفاً رونویسی:
talk.session.create({ mode: "transcription", transport: "gateway-relay", brain: "none" })، سپسtalk.session.appendAudio،talk.session.cancelTurnوtalk.session.closeبرای زیرنویس/دیکته بدون پاسخ صوتی دستیار. یادداشتهای صوتی بارگذاریشده تکمرحلهای همچنان از مسیر صوتی درک رسانه استفاده میکنند.
مکالمه بومی یک چرخه پیوسته است: به گفتار گوش میدهد، متن رونویسیشده را از طریق نشست فعال برای مدل میفرستد، منتظر پاسخ میماند و سپس آن را با ارائهدهنده پیکربندیشده مکالمه (talk.speak) پخش میکند.
مکالمه بلادرنگ تحت مالکیت کلاینت، بهجای فراخوانی مستقیم chat.send، فراخوانیهای ابزار ارائهدهنده را از طریق talk.client.toolCall ارسال میکند. هنگام فعال بودن یک مشاوره بلادرنگ، کلاینتها میتوانند talk.client.steer یا talk.session.steer را فراخوانی کنند تا ورودی گفتاری را در یکی از دستههای status، steer، cancel یا followup طبقهبندی کنند. هدایت پذیرفتهشده در صف اجرای تعبیهشده فعال قرار میگیرد؛ هدایت ردشده دلیلی مانند no_active_run، not_streaming یا compacting برمیگرداند.
مکالمه صرفاً رونویسی همان پوش رویداد مکالمه را مانند نشستهای بلادرنگ و STT/TTS منتشر میکند، اما از mode: "transcription" و brain: "none" استفاده میکند. همه نشستهای مکالمه رویدادها را در کانال talk.event پخش میکنند؛ کلاینتها برای دریافت بهروزرسانیهای جزئی/نهایی رونویسی (transcript.delta/transcript.done) و سایر دادههای تلهمتری نشست، در آن مشترک میشوند.
رفتار (macOS)
- تا زمانی که حالت مکالمه فعال است، پوشش رویصفحه همیشه نمایش داده میشود.
- گذار مرحلهای گوشدادن → فکرکردن → صحبتکردن.
- پس از یک مکث کوتاه (بازه سکوت)، متن رونویسیشده فعلی ارسال میشود.
- پاسخها در WebChat نوشته میشوند (همانند تایپکردن).
- وقفه با گفتار (بهطور پیشفرض فعال): اگر کاربر هنگام صحبت دستیار حرف بزند، پخش متوقف میشود و برچسب زمانی وقفه برای درخواست بعدی ثبت میشود.
دستورهای صوتی در پاسخها
دستیار میتواند برای کنترل صدا، ابتدای پاسخ را با یک خط JSON شروع کند:
{ "voice": "<voice-id>", "once": true }قواعد:
- فقط نخستین خط غیرخالی؛ خط JSON پیش از پخش TTS حذف میشود.
- کلیدهای ناشناخته نادیده گرفته میشوند.
once: trueفقط برای پاسخ فعلی اعمال میشود؛ بدون آن، صدا به پیشفرض جدید حالت مکالمه تبدیل میشود.
کلیدهای پشتیبانیشده: voice / voice_id / voiceId، model / model_id / modelId، speed، rate (واژه در دقیقه)، stability، similarity، style، speakerBoost، seed، normalize، lang، output_format، latency_tier، once.
پیکربندی (~/.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.1", speakerVoice: "cedar", }, }, instructions: "Speak warmly and keep answers brief.", mode: "realtime", transport: "webrtc", brain: "agent-consult", }, },}| کلید | پیشفرض | توضیحات |
|---|---|---|
provider |
- | ارائهدهنده فعال TTS مکالمه. برای مسیرهای پخش محلی macOS از elevenlabs، mlx یا system استفاده کنید. |
providers.<id>.voiceId |
- | ElevenLabs در صورت نبود مقدار، از ELEVENLABS_VOICE_ID / SAG_VOICE_ID یا نخستین صدای دردسترس با کلید API استفاده میکند. |
providers.elevenlabs.modelId |
eleven_v3 |
|
providers.mlx.modelId |
mlx-community/Soprano-80M-bf16 |
|
providers.elevenlabs.apiKey |
- | در صورت نبود مقدار، از ELEVENLABS_API_KEY (یا نمایه پوسته Gateway، در صورت دسترسی) استفاده میکند. |
speechLocale |
پیشفرض دستگاه | شناسه منطقهای BCP 47 برای تشخیص گفتار رویدستگاه مکالمه در iOS/macOS. |
silenceTimeoutMs |
700 میلیثانیه در macOS/Android، 900 میلیثانیه در iOS |
بازه مکث پیش از ارسال متن رونویسیشده توسط مکالمه. |
interruptOnSpeech |
true |
|
outputFormat |
pcm_44100 در macOS/iOS، pcm_24000 در Android |
برای اجبار پخش جریانی MP3، مقدار mp3_* را تنظیم کنید. |
consultThinkingLevel |
تنظیمنشده | بازنویسی سطح تفکر برای اجرای عامل در پشت فراخوانیهای بلادرنگ openclaw_agent_consult. |
consultFastMode |
تنظیمنشده | بازنویسی حالت سریع برای فراخوانیهای بلادرنگ openclaw_agent_consult. |
realtime.provider |
- | openai برای WebRTC، google برای WebSocket ارائهدهنده، یا یک ارائهدهنده صرفاً پل از طریق رله Gateway. |
realtime.providers.<id> |
- | پیکربندی بلادرنگ تحت مالکیت ارائهدهنده. مرورگرها فقط اعتبارنامههای موقت/محدود نشست را دریافت میکنند و هرگز کلید API استاندارد دریافت نمیکنند. |
realtime.providers.openai.speakerVoice |
alloy |
شناسه صدای داخلی OpenAI Realtime (کلید قدیمیتر voice همچنان کار میکند، اما منسوخ شده است). صداهای فعلی gpt-realtime-2.1: alloy، ash، ballad، cedar، coral، echo، marin، sage، shimmer، verse؛ برای بهترین کیفیت، marin و cedar توصیه میشوند. |
realtime.transport |
- | webrtc: OpenAI WebRTC تحت مالکیت کلاینت در iOS و مرورگر. provider-websocket: تحت مالکیت مرورگر و در iOS روی رله Gateway باقی میماند. gateway-relay: صدای ارائهدهنده را روی Gateway نگه میدارد؛ Android فقط با این انتقال از حالت بلادرنگ استفاده میکند. |
realtime.brain |
- | agent-consult فراخوانیهای ابزار بلادرنگ را از طریق خطمشی Gateway مسیریابی میکند؛ direct-tools سازگاری قدیمی ابزار مستقیم است؛ none برای رونویسی/هماهنگسازی خارجی است. |
realtime.consultRouting |
- | provider-direct پاسخ مستقیم ارائهدهنده را هنگامی که openclaw_agent_consult را نادیده میگیرد حفظ میکند؛ force-agent-consult در عوض متنهای نهایی رونویسیشده کاربر را از طریق OpenClaw مسیریابی میکند. |
realtime.instructions |
- | دستورهای سیستمی روبهارائهدهنده را به درخواست بلادرنگ داخلی OpenClaw (سبک/لحن صدا) میافزاید؛ راهنمای پیشفرض openclaw_agent_consult حفظ میشود. |
talk.catalog شناسههای معیار ارائهدهندگان و نامهای مستعار رجیستری، حالتها/انتقالها/راهبردهای مغز/قالبهای صوتی بلادرنگ/پرچمهای قابلیت معتبر هر ارائهدهنده و نتیجه آمادگی انتخابشده در زمان اجرا را ارائه میکند. کلاینتهای Talk شخصاول باید بهجای نگهداری محلی نامهای مستعار ارائهدهندگان، این کاتالوگ را بخوانند؛ Gateway قدیمیتری را که آمادگی گروهی را ارائه نمیکند، تأییدنشده در نظر بگیرید، نه اینکه قطعاً پیکربندینشده باشد. ارائهدهندگان رونویسی جریانی از طریق talk.catalog.transcription کشف میشوند؛ رله فعلی Gateway تا زمانی که سطح پیکربندی اختصاصی رونویسی Talk عرضه شود، از پیکربندی ارائهدهنده جریانی Voice Call استفاده میکند.
رابط کاربری macOS
- کلید تغییر نوار منو: Talk
- زبانه پیکربندی: گروه Talk Mode (شناسه صدا + کلید تغییر وقفه)
- همپوشان: گوی، شکل موج عمومی گفتوگو را نمایش میدهد (مشترک با iOS، watchOS و Android). حالت گوشدادن از سطح زنده میکروفون پیروی میکند، حالت صحبتکردن از پوش واقعی پخش TTS پیروی میکند و حالت فکرکردن بهآرامی ضربان دارد. برای مکث/ادامه روی گوی کلیک کنید، برای توقف صحبت دوبار کلیک کنید و برای خروج از حالت Talk روی X کلیک کنید.
رابط کاربری Android
- کلید تغییر زبانه صدا: Talk
- حالتهای دریافت دستی Mic و Talk متقابلاً انحصاری هستند.
- میکروفون دستی و Talk بلادرنگ، میکروفون هدست متصل Bluetooth Classic یا BLE را ترجیح میدهند؛ اگر اتصال آن قطع شود، برنامه ورودی هدست دیگری درخواست میکند یا به میکروفون پیشفرض بازمیگردد و پس از توقف دریافت، ترجیح پیشفرض را بازیابی میکند.
- وقتی برنامه از پیشزمینه خارج شود یا کاربر زبانه صدا را ترک کند، میکروفون دستی متوقف میشود.
- Talk Mode تا زمانی که خاموش شود یا اتصال Node قطع شود، همچنان اجرا میشود و هنگام فعالبودن از نوع سرویس پیشزمینه میکروفون Android استفاده میکند.
- Android برای پخش جریانی کمتأخیر
AudioTrackاز قالبهای خروجیpcm_16000،pcm_22050،pcm_24000وpcm_44100پشتیبانی میکند.
نکات
- به مجوزهای گفتار و میکروفون نیاز دارد.
- Talk بومی از نشست فعال Gateway استفاده میکند و فقط وقتی رویدادهای پاسخ در دسترس نباشند، به واکشی دورهای تاریخچه بازمیگردد.
- Gateway پخش Talk را با استفاده از ارائهدهنده فعال Talk از طریق
talk.speakحلوفصل میکند. Android فقط زمانی به TTS محلی سیستم بازمیگردد که آن RPC در دسترس نباشد. - پخش محلی MLX در macOS، در صورت وجود، از ابزار کمکی همراه
openclaw-mlx-ttsیا یک فایل اجرایی درPATHاستفاده میکند. هنگام توسعه،OPENCLAW_MLX_TTS_BINرا تنظیم کنید تا به یک فایل اجرایی کمکی سفارشی اشاره کند. - بازه مقادیر دستور صدا (ElevenLabs):
stability، similarityو styleمقادیر0..1را میپذیرند؛ speedمقادیر0.5..2را میپذیرد؛ latency_tierمقادیر0..4را میپذیرد.