---
read_when:
    - Реализация режима разговора на macOS/iOS/Android
    - Изменение поведения голоса, TTS и прерываний
summary: 'Режим разговора: непрерывные голосовые беседы через локальные STT/TTS и голос в реальном времени'
title: Режим разговора
x-i18n:
    generated_at: "2026-06-28T23:10:02Z"
    model: gpt-5.5
    postprocess_version: locale-links-v1
    provider: openai
    source_hash: 47ae6c1abc763688ab5bbea1c23c9f4f27fe2f4b13cfade61917f5a1a912f057
    source_path: nodes/talk.md
    workflow: 16
---

Режим разговора имеет две runtime-формы:

- Нативный режим разговора macOS/iOS/Android использует локальное распознавание речи, чат Gateway и TTS `talk.speak`. Узлы объявляют возможность `talk` и команды `talk.*`, которые они поддерживают.
- Браузерный режим разговора использует `talk.client.create` для принадлежащих клиенту сеансов `webrtc` и `provider-websocket` или `talk.session.create` для принадлежащих Gateway сеансов `gateway-relay`. `managed-room` зарезервирован для передачи управления Gateway и комнат рации.
- Режим разговора Android может включать принадлежащие Gateway realtime-сеансы ретрансляции с `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`, когда им нужны субтитры или диктовка без голосового ответа ассистента.

Нативный режим разговора — это непрерывный цикл голосового диалога:

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

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

Режим разговора только для транскрибации создает ту же общую оболочку событий разговора, что и realtime- и STT/TTS-сеансы, но использует `mode: "transcription"` и `brain: "none"`. Он предназначен для субтитров, диктовки и наблюдательного захвата речи; одноразово загруженные голосовые заметки по-прежнему используют путь медиа/аудио.

## Поведение (macOS)

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

## Голосовые директивы в ответах

Ассистент может добавить в начало ответа **одну строку JSON** для управления голосом:

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

Правила:

- Только первая непустая строка.
- Неизвестные ключи игнорируются.
- `once: true` применяется только к текущему ответу.
- Без `once` голос становится новым значением по умолчанию для режима разговора.
- Строка 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`: если не задано, режим разговора сохраняет стандартное для платформы окно паузы перед отправкой транскрипта (`700 ms on macOS and Android, 900 ms on iOS`)
- `provider`: выбирает активного провайдера разговора. Используйте `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` (или к shell-профилю Gateway, если доступен).
- `consultThinkingLevel`: необязательное переопределение уровня мышления для полного запуска агента OpenClaw за realtime-вызовами `openclaw_agent_consult`.
- `consultFastMode`: необязательное переопределение быстрого режима для realtime-вызовов `openclaw_agent_consult`.
- `realtime.provider`: выбирает активного браузерного/серверного realtime-провайдера голоса. Используйте `openai` для WebRTC, `google` для WebSocket провайдера или провайдера только-моста через ретрансляцию Gateway.
- `realtime.providers.<provider>` хранит принадлежащую провайдеру realtime-конфигурацию. Браузер получает только эфемерные или ограниченные учетные данные сеанса, но никогда стандартный ключ 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` и `provider-websocket` — браузерные realtime-транспорты. Android использует realtime-ретрансляцию только когда задано `gateway-relay`; в остальных случаях режим разговора Android использует собственный нативный цикл STT/TTS.
- `realtime.brain`: `agent-consult` маршрутизирует realtime-вызовы инструментов через политику Gateway; `direct-tools` — устаревшее совместимое поведение прямых инструментов; `none` предназначен для транскрибации или внешней оркестрации.
- `realtime.consultRouting`: `provider-direct` сохраняет прямой ответ провайдера, когда он пропускает `openclaw_agent_consult`; `force-agent-consult` вместо этого заставляет ретрансляцию Gateway маршрутизировать финализированные пользовательские транскрипты через OpenClaw.
- `realtime.instructions`: добавляет обращенные к провайдеру системные инструкции к встроенному realtime-промпту OpenClaw. Используйте для стиля и тона голоса; OpenClaw сохраняет стандартные указания `openclaw_agent_consult`.
- `talk.catalog` предоставляет допустимые режимы, транспорты, стратегии brain, realtime-форматы аудио и флаги возможностей каждого провайдера, чтобы собственные клиенты режима разговора могли избегать неподдерживаемых комбинаций.
- Потоковые провайдеры транскрибации обнаруживаются через `talk.catalog.transcription`. Текущая ретрансляция Gateway использует конфигурацию потокового провайдера Voice Call, пока не будет добавлена выделенная поверхность конфигурации транскрибации режима разговора.
- `speechLocale`: необязательный идентификатор локали BCP 47 для распознавания речи режима разговора на устройстве в iOS/macOS. Оставьте незаданным, чтобы использовать значение устройства по умолчанию.
- `outputFormat`: по умолчанию `pcm_44100` на macOS/iOS и `pcm_24000` на Android (задайте `mp3_*`, чтобы принудительно включить потоковую передачу MP3)

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

- Переключатель в строке меню: **Разговор**
- Вкладка конфигурации: группа **Режим разговора** (идентификатор голоса + переключатель прерывания)
- Оверлей:
  - **Прослушивание**: облако пульсирует с уровнем микрофона
  - **Обдумывание**: погружающаяся анимация
  - **Озвучивание**: расходящиеся кольца
  - Нажатие на облако: остановить озвучивание
  - Нажатие на X: выйти из режима разговора

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

- Переключатель вкладки голоса: **Разговор**
- Ручные **Микрофон** и **Разговор** являются взаимоисключающими режимами runtime-захвата.
- Ручной микрофон останавливается, когда приложение покидает передний план или пользователь уходит с вкладки голоса.
- Режим разговора продолжает работать, пока его не отключат или пока Android-узел не отключится, и во время активности использует тип foreground-службы микрофона Android.

## Примечания

- Требуются разрешения на речь и микрофон.
- Нативный режим разговора использует активный сеанс Gateway и откатывается к опросу истории только когда события ответа недоступны.
- Браузерный realtime-режим разговора использует `talk.client.toolCall` для `openclaw_agent_consult` вместо предоставления `chat.send` принадлежащим провайдеру браузерным сеансам.
- Режим разговора только для транскрибации использует `talk.session.create`, `talk.session.appendAudio`, `talk.session.cancelTurn` и `talk.session.close`; клиенты подписываются на `talk.event` для частичных/финальных обновлений транскрипта.
- Gateway разрешает воспроизведение разговора через `talk.speak`, используя активного провайдера разговора. 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.

## Связанные материалы

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