Nodes and media
حالت مکالمه
حالت مکالمه پنج شکل اجرایی را پوشش میدهد:
- مکالمه بومی macOS/iOS/Android: تشخیص گفتار بومی، گفتوگوی Gateway و TTS
talk.speak. تشخیص گفتار Apple در macOS/iOS ممکن است از سرویسهای شبکه استفاده کند؛ رفتار Android به سرویس گفتار نصبشده بستگی دارد. 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 برمیگرداند.
گفتههای نهاییشده بلادرنگ کاربر و دستیار همیشه بهصورت زنده به نشست فعال عامل افزوده میشوند، بنابراین نوبتهای بعدی گفتوگو و صوت از یک تاریخچه مشترک استفاده میکنند. انتقالهای تحت مالکیت کلاینت، رونویسیهای نهاییشده خود را با شناسههای ورودی پایدار گزارش میکنند؛ نشستهای رله Gateway همان رویدادها را در سمت سرور اضافه میکنند. نشستهای ارائهدهنده همچنین زمینه محدودشده نمایه بلادرنگ را که Discord voice استفاده میکند، دریافت میکنند.
اجراهای مشاورهای که از صدا آغاز میشوند، پیش از اقدامهای پراثر مانند ارسال پیام، کنترل Nodeها، اقدامهای مرورگر/رایانه، تغییرات سرویس، فرمانهای مخرب پوسته یا انتشار، به یک تأیید گفتاری جدید و دقیق نیاز دارند. تأیید فقط بر آرگومانهای دقیق ابزار مسدودشده اعمال میشود و یکبار مصرف میشود؛ اجراهای همزمان نامرتبط بدون تأثیر باقی میمانند. وقتی یک تماس بسته میشود، OpenClaw میتواند چکیدهای فشرده با عنوان تغییرات تماس صوتی برای ابزارهای تغییردهنده به آخرین مقصد تحویل غیر WebChat نشست ارسال کند.
مکالمه فقط رونویسی، همان پوشش رویداد مکالمه نشستهای بلادرنگ و STT/TTS را منتشر میکند، اما از mode: "transcription" و brain: "none" استفاده میکند. همه نشستهای مکالمه رویدادها را در کانال talk.event پخش میکنند؛ کلاینتها برای بهروزرسانیهای رونویسی جزئی/نهایی (transcript.delta/transcript.done) و دیگر دادههای تلهمتری نشست در آن مشترک میشوند.
مکالمه ویدیویی مرورگر برای نشستهای OpenAI Realtime WebRTC و WebSocket ارائهدهنده Google Live
در دسترس است. هنگامی که describe_view زمینه بصری درخواست میکند، OpenAI
یک JPEG محدودشده دریافت میکند؛ OpenAI مسیر پیوسته دوربین را دریافت نمیکند.
Google Live فریمهای JPEG محدودشده را مستقیماً از مرورگر و با نرخ حداکثر
یک فریم در ثانیه دریافت میکند، درحالیکه describe_view وضعیت جریان دوربین
را گزارش میدهد. در هر دو مورد، فریمهای دوربین Gateway را دور میزنند و
توقف مکالمه مسیرهای دوربین و میکروفون را آزاد میکند.
رفتار (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 برای Active Talk. برای مسیرهای پخش محلی macOS از elevenlabs، mlx یا system استفاده کنید. |
providers.<id>.voiceId |
- | ElevenLabs به ELEVENLABS_VOICE_ID / SAG_VOICE_ID یا نخستین صدای دردسترس دارای کلید API بازمیگردد. |
speechLocale |
پیشفرض دستگاه | محلیسازی BCP 47 برای تشخیص گفتار بومی Android، iOS و macOS. Apple Speech ممکن است از سرویسهای شبکه استفاده کند؛ Android همچنین مؤلفهٔ زبان را به رونویسی ورودی بلادرنگ ارسال میکند. |
providers.elevenlabs.modelId |
eleven_v3 |
|
providers.mlx.modelId |
mlx-community/Soprano-80M-bf16 |
|
providers.elevenlabs.apiKey |
- | به ELEVENLABS_API_KEY (یا در صورت دسترسبودن، پروفایل پوستهٔ Gateway) بازمیگردد. |
silenceTimeoutMs |
700 ms در macOS/Android، 900 ms در iOS |
بازهٔ مکث پیش از ارسال رونوشت توسط Talk. |
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 |
- | اگر ارائهدهنده openclaw_agent_consult را رد کند، provider-direct پاسخ مستقیم آن را حفظ میکند؛ در عوض، 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
- پیمایش اصلی Android شامل Home، Chat و Settings است. ورودی صوتی بهجای زبانهٔ جداگانهٔ Voice، در کادر نوشتن Chat قرار دارد.
- برای دیکتهٔ روی دستگاه، روی میکروفون کادر نوشتن ضربه بزنید. برای ضبط پیوست یادداشت صوتی، آن را طولانی فشار دهید. Talk پیوسته را از شکل موج Talk آغاز کنید.
- دیکته، ضبط یادداشت صوتی و Talk مسیرهای میکروفون ناسازگار با یکدیگرند؛ آغاز هرکدام، موارد دیگر را متوقف یا مسدود میکند.
- Talk بلادرنگ، میکروفون هدست متصل Bluetooth Classic یا BLE را ترجیح میدهد؛ اگر اتصال آن قطع شود، برنامه ورودی هدست دیگری درخواست میکند یا به میکروفون پیشفرض بازمیگردد و پس از توقف ضبط، ترجیح پیشفرض را بازیابی میکند.
- دیکته و ضبط یادداشت صوتی هنگامی متوقف میشوند که برنامه از پیشزمینه خارج شود یا کاربر Chat را ترک کند.
- Talk Mode تا زمان خاموششدن یا قطع اتصال Node به اجرا ادامه میدهد و هنگام فعالبودن از نوع سرویس پیشزمینهٔ میکروفون Android استفاده میکند.
- Android از قالبهای خروجی
pcm_16000،pcm_22050،pcm_24000وpcm_44100برای پخش جریانی کمتأخیرAudioTrackپشتیبانی میکند.
یادداشتها
- به مجوزهای گفتار + میکروفون نیاز دارد.
- 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را میپذیرد.