---
read_when:
    - پیاده‌سازی حالت مکالمه در macOS/iOS/Android
    - تغییر رفتار صدا/TTS/وقفه
summary: 'حالت مکالمه: گفت‌وگوهای صوتی پیوسته با استفاده از STT/TTS محلی و صدای بلادرنگ'
title: حالت مکالمه
x-i18n:
    generated_at: "2026-07-12T10:15:38Z"
    model: gpt-5.6
    postprocess_version: locale-links-v1
    provider: openai
    source_hash: 4180dcbf7a62cd03e2d18f2c568ed2182c9cf2f80159154a7d261bcb9b3ebee0
    source_path: nodes/talk.md
    workflow: 16
---

حالت مکالمه پنج الگوی اجرایی را پوشش می‌دهد:

- **مکالمه بومی 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` برای زیرنویس/دیکته بدون پاسخ صوتی دستیار. یادداشت‌های صوتی بارگذاری‌شده تک‌مرحله‌ای همچنان از مسیر صوتی [درک رسانه](/fa/nodes/media-understanding) استفاده می‌کنند.

مکالمه بومی یک چرخه پیوسته است: به گفتار گوش می‌دهد، متن رونویسی‌شده را از طریق نشست فعال برای مدل می‌فرستد، منتظر پاسخ می‌ماند و سپس آن را با ارائه‌دهنده پیکربندی‌شده مکالمه (`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)

- تا زمانی که حالت مکالمه فعال است، پوشش روی‌صفحه همیشه نمایش داده می‌شود.
- گذار مرحله‌ای **گوش‌دادن &rarr; فکرکردن &rarr; صحبت‌کردن**.
- پس از یک مکث کوتاه (بازه سکوت)، متن رونویسی‌شده فعلی ارسال می‌شود.
- پاسخ‌ها در 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` را می‌پذیرد.

## مرتبط

- [بیدارباش صوتی](/fa/nodes/voicewake)
- [یادداشت‌های صوتی و صدا](/fa/nodes/audio)
- [درک رسانه](/fa/nodes/media-understanding)
