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 شروع کند:

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)

json5
{  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 را می‌پذیرد.

مرتبط

Was this useful?
On this page

On this page