---
read_when:
    - Реалізація режиму Talk на macOS/iOS/Android
    - Зміна поведінки голосу/TTS/переривання
summary: 'Режим розмови: безперервні голосові розмови через локальні STT/TTS і голос у реальному часі'
title: Режим розмови
x-i18n:
    generated_at: "2026-07-03T09:55:57Z"
    model: gpt-5.5
    postprocess_version: locale-links-v1
    provider: openai
    source_hash: f9c8cdb6ffef7575348e94b36cd73a0613c336d8e811d6ce46d7518ee7c34b14
    source_path: nodes/talk.md
    workflow: 16
---

Режим Talk має дві форми виконання:

- Нативний Talk для macOS/iOS/Android використовує локальне розпізнавання мовлення, чат Gateway і TTS `talk.speak`. Вузли оголошують можливість `talk` і декларують команди `talk.*`, які вони підтримують.
- iOS Talk використовує WebRTC, керований клієнтом, для конфігурацій OpenAI реального часу, які вибирають `webrtc` або не вказують транспорт. Явні конфігурації реального часу `gateway-relay`, `provider-websocket` і не-OpenAI залишаються на ретрансляторі, керованому Gateway; конфігурації не реального часу використовують нативний мовленнєвий цикл.
- Browser Talk використовує `talk.client.create` для сеансів `webrtc` і `provider-websocket`, керованих клієнтом, або `talk.session.create` для сеансів `gateway-relay`, керованих Gateway. `managed-room` зарезервовано для передачі Gateway і кімнат раційного зв’язку.
- Android Talk може увімкнути сеанси ретрансляції реального часу, керовані Gateway, з `talk.realtime.mode: "realtime"` і `talk.realtime.transport: "gateway-relay"`. Інакше він залишається на нативному розпізнаванні мовлення, чаті Gateway і `talk.speak`.
- Клієнти лише для транскрипції використовують `talk.session.create({ mode: "transcription", transport: "gateway-relay", brain: "none" })`, а потім `talk.session.appendAudio`, `talk.session.cancelTurn` і `talk.session.close`, коли їм потрібні субтитри або диктування без голосової відповіді асистента.

Нативний Talk — це безперервний цикл голосової розмови:

1. Слухати мовлення
2. Надіслати транскрипт до моделі через активний сеанс
3. Дочекатися відповіді
4. Озвучити її через налаштованого провайдера Talk (`talk.speak`)

Talk реального часу, керований клієнтом, пересилає виклики інструментів провайдера через `talk.client.toolCall`; ці клієнти не викликають `chat.send` напряму для консультацій реального часу.
Поки консультація реального часу активна, клієнти Talk можуть використовувати `talk.client.steer` або
`talk.session.steer`, щоб класифікувати мовленнєвий ввід як `status`, `steer`, `cancel` або
`followup`. Прийняте керування ставиться в чергу активного вбудованого запуску; відхилене
керування повертає структуровану причину, як-от `no_active_run`, `not_streaming`
або `compacting`.

Talk лише для транскрипції видає той самий спільний конверт подій Talk, що й сеанси реального часу та STT/TTS, але використовує `mode: "transcription"` і `brain: "none"`. Він призначений для субтитрів, диктування та пасивного захоплення мовлення; одноразово завантажені голосові нотатки все ще використовують шлях медіа/аудіо.

## Поведінка (macOS)

- **Постійно видимий оверлей**, поки режим Talk увімкнено.
- Переходи фаз **Слухання → Обмірковування → Говоріння**.
- Після **короткої паузи** (вікна тиші) поточний транскрипт надсилається.
- Відповіді **записуються у WebChat** (так само, як під час введення тексту).
- **Переривання мовленням** (увімкнено за замовчуванням): якщо користувач починає говорити, поки асистент говорить, ми зупиняємо відтворення й фіксуємо часову мітку переривання для наступного запиту.

## Голосові директиви у відповідях

Асистент може додати до відповіді префікс у вигляді **одного JSON-рядка** для керування голосом:

```json
{ "voice": "<voice-id>", "once": true }
```

Правила:

- Лише перший непорожній рядок.
- Невідомі ключі ігноруються.
- `once: true` застосовується лише до поточної відповіді.
- Без `once` голос стає новим типовим для режиму Talk.
- JSON-рядок видаляється перед відтворенням TTS.

Підтримувані ключі:

- `voice` / `voice_id` / `voiceId`
- `model` / `model_id` / `modelId`
- `speed`, `rate` (WPM), `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",
          voice: "cedar",
        },
      },
      instructions: "Speak warmly and keep answers brief.",
      mode: "realtime",
      transport: "webrtc",
      brain: "agent-consult",
    },
  },
}
```

Типові значення:

- `interruptOnSpeech`: true
- `silenceTimeoutMs`: якщо не задано, Talk зберігає типове для платформи вікно паузи перед надсиланням транскрипту (`700 ms on macOS and Android, 900 ms on iOS`)
- `provider`: вибирає активного провайдера Talk. Використовуйте `elevenlabs`, `mlx` або `system` для локальних шляхів відтворення macOS.
- `providers.<provider>.voiceId`: повертається до `ELEVENLABS_VOICE_ID` / `SAG_VOICE_ID` для ElevenLabs (або до першого голосу ElevenLabs, коли доступний API-ключ).
- `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 Realtime. Поточні голоси `gpt-realtime-2`: `alloy`, `ash`, `ballad`, `coral`, `echo`, `sage`, `shimmer`, `verse`, `marin` і `cedar`; `marin` і `cedar` рекомендовані для найкращої якості.
- `realtime.transport`: `webrtc` використовує OpenAI WebRTC, керований клієнтом, на iOS і в браузері. `provider-websocket` керується браузером, але на iOS залишається на ретрансляторі Gateway. `gateway-relay` тримає аудіо провайдера на Gateway; Android використовує режим реального часу лише для цього транспорту, а в інших випадках зберігає свій нативний цикл STT/TTS.
- `realtime.brain`: `agent-consult` маршрутизує виклики інструментів реального часу через політику Gateway; `direct-tools` — це застаріла сумісна поведінка прямих інструментів; `none` призначено для транскрипції або зовнішньої оркестрації.
- `realtime.consultRouting`: `provider-direct` зберігає пряму відповідь провайдера, коли він пропускає `openclaw_agent_consult`; `force-agent-consult` натомість змушує ретранслятор Gateway маршрутизувати фіналізовані транскрипти користувача через OpenClaw.
- `realtime.instructions`: додає системні інструкції для провайдера до вбудованого запиту OpenClaw реального часу. Використовуйте це для стилю й тону голосу; OpenClaw зберігає типові вказівки `openclaw_agent_consult`.
- `talk.catalog` показує канонічні ідентифікатори провайдерів і псевдоніми реєстру поряд із допустимими режимами, транспортами, стратегіями brain, аудіоформатами реального часу, прапорцями можливостей і вибраним середовищем виконання результатом готовності для кожного провайдера. Клієнти Talk першої сторони мають використовувати цей каталог замість локального підтримання псевдонімів провайдерів; старіший Gateway, який не передає готовність групи, вважається неперевіреним, а не точно неналаштованим.
- Провайдери потокової транскрипції виявляються через `talk.catalog.transcription`. Поточний ретранслятор Gateway використовує конфігурацію провайдера потокових голосових викликів, доки не буде додано окрему поверхню конфігурації транскрипції Talk.
- `speechLocale`: необов’язковий ідентифікатор локалі BCP 47 для розпізнавання мовлення Talk на пристрої в iOS/macOS. Залиште незаданим, щоб використовувати типове значення пристрою.
- `outputFormat`: за замовчуванням `pcm_44100` на macOS/iOS і `pcm_24000` на Android (задайте `mp3_*`, щоб примусово ввімкнути потокове MP3)

## Інтерфейс macOS

- Перемикач у рядку меню: **Talk**
- Вкладка конфігурації: група **Talk Mode** (ідентифікатор голосу + перемикач переривання)
- Оверлей:
  - **Слухання**: хмара пульсує відповідно до рівня мікрофона
  - **Обмірковування**: анімація занурення
  - **Говоріння**: розбіжні кільця
  - Клацання хмари: зупинити говоріння
  - Клацання X: вийти з режиму Talk

## Інтерфейс Android

- Перемикач вкладки голосу: **Talk**
- Ручні режими **Mic** і **Talk** є взаємовиключними режимами захоплення під час виконання.
- Ручний Mic і Talk реального часу надають перевагу підключеному мікрофону гарнітури Bluetooth Classic або BLE. Якщо він від’єднується, застосунок запитує інший вхід гарнітури або дозволяє Android використовувати типовий мікрофон; зупинка захоплення відновлює типову перевагу мікрофона.
- Ручний Mic зупиняється, коли застосунок виходить із переднього плану або користувач залишає вкладку Voice.
- Talk Mode працює, доки його не вимкнуть або вузол Android не від’єднається, і під час активності використовує тип foreground-service мікрофона Android.

## Примітки

- Потребує дозволів Speech + Microphone.
- Нативний Talk використовує активний сеанс Gateway і повертається до опитування історії лише тоді, коли події відповіді недоступні.
- Talk реального часу, керований клієнтом, використовує `talk.client.toolCall` для `openclaw_agent_consult` замість відкриття `chat.send` для сеансів, якими володіє провайдер.
- Talk лише для транскрипції використовує `talk.session.create`, `talk.session.appendAudio`, `talk.session.cancelTurn` і `talk.session.close`; клієнти підписуються на `talk.event` для часткових/фінальних оновлень транскрипту.
- Gateway розв’язує відтворення Talk через `talk.speak`, використовуючи активного провайдера Talk. Android повертається до локального системного TTS лише тоді, коли цей RPC недоступний.
- Локальне відтворення 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 із низькою затримкою.

## Пов’язане

- [Голосове пробудження](/uk/nodes/voicewake)
- [Аудіо та голосові нотатки](/uk/nodes/audio)
- [Розуміння медіа](/uk/nodes/media-understanding)
