Перейти к основному содержанию
OpenClaw может преобразовывать исходящие ответы в аудио через 14 речевых провайдеров и доставлять нативные голосовые сообщения в Feishu, Matrix, Telegram и WhatsApp, аудиовложения во всех остальных каналах, а также потоки PCM/Ulaw для телефонии и Talk. TTS — это половина речевого вывода в режиме Talk stt-tts. Провайдер-нативные realtime-сеансы Talk синтезируют речь внутри realtime-провайдера вместо вызова этого пути TTS, а transcription-сеансы не синтезируют голосовой ответ ассистента.

Быстрый старт

1

Pick a provider

OpenAI и ElevenLabs — самые надежные размещенные варианты. Microsoft и локальный CLI работают без API-ключа. Полный список см. в матрице провайдеров.
2

Set the API key

Экспортируйте переменную окружения для своего провайдера (например, OPENAI_API_KEY, ELEVENLABS_API_KEY). Microsoft и локальному CLI ключ не нужен.
3

Enable in config

Задайте messages.tts.auto: "always" и messages.tts.provider:
{
  messages: {
    tts: {
      auto: "always",
      provider: "elevenlabs",
    },
  },
}
4

Try it in chat

/tts status показывает текущее состояние. /tts audio Hello from OpenClaw отправляет разовый аудиоответ.
Auto-TTS по умолчанию выключен. Если messages.tts.provider не задан, OpenClaw выбирает первого настроенного провайдера в порядке автовыбора реестра. Встроенный инструмент агента tts предназначен только для явного намерения: обычный чат остается текстовым, если пользователь не попросит аудио, не использует /tts или не включит Auto-TTS/директивную речь.

Поддерживаемые провайдеры

ПровайдерАутентификацияПримечания
Azure SpeechAZURE_SPEECH_KEY + AZURE_SPEECH_REGION (также AZURE_SPEECH_API_KEY, SPEECH_KEY, SPEECH_REGION)Нативный вывод голосовых заметок Ogg/Opus и телефония.
DeepInfraDEEPINFRA_API_KEYTTS, совместимый с OpenAI. По умолчанию hexgrad/Kokoro-82M.
ElevenLabsELEVENLABS_API_KEY или XI_API_KEYКлонирование голоса, многоязычность, детерминированность через seed; потоковая передача для голосового воспроизведения в Discord.
Google GeminiGEMINI_API_KEY или GOOGLE_API_KEYПакетный TTS через Gemini API; учитывает персону через promptTemplate: "audio-profile-v1".
GradiumGRADIUM_API_KEYВывод голосовых заметок и телефонии.
InworldINWORLD_API_KEYПотоковый TTS API. Нативные голосовые заметки Opus и телефония PCM.
Local CLIнетЗапускает настроенную локальную команду TTS.
MicrosoftнетПубличный нейронный TTS Edge через node-edge-tts. Best-effort, без SLA.
MiniMaxMINIMAX_API_KEY (или Token Plan: MINIMAX_OAUTH_TOKEN, MINIMAX_CODE_PLAN_KEY, MINIMAX_CODING_API_KEY)API T2A v2. По умолчанию speech-2.8-hd.
OpenAIOPENAI_API_KEYТакже используется для автосводки; поддерживает instructions для персоны.
OpenRouterOPENROUTER_API_KEY (можно повторно использовать models.providers.openrouter.apiKey)Модель по умолчанию hexgrad/kokoro-82m.
VolcengineVOLCENGINE_TTS_API_KEY или BYTEPLUS_SEED_SPEECH_API_KEY (устаревшие AppID/токен: VOLCENGINE_TTS_APPID/_TOKEN)HTTP API BytePlus Seed Speech.
VydraVYDRA_API_KEYОбщий провайдер изображений, видео и речи.
xAIXAI_API_KEYПакетный TTS xAI. Нативные голосовые заметки Opus не поддерживаются.
Xiaomi MiMoXIAOMI_API_KEYMiMo TTS через chat completions Xiaomi.
Если настроено несколько провайдеров, выбранный используется первым, а остальные служат резервными вариантами. Автосводка использует summaryModel (или agents.defaults.model.primary), поэтому этот провайдер также должен быть аутентифицирован, если вы оставляете сводки включенными.
Встроенный провайдер Microsoft использует онлайн-сервис нейронного TTS Microsoft Edge через node-edge-tts. Это публичный веб-сервис без опубликованного SLA или квоты — рассматривайте его как best-effort. Устаревший id провайдера edge нормализуется в microsoft, а openclaw doctor --fix переписывает сохраненную конфигурацию; новые конфигурации всегда должны использовать microsoft.

Конфигурация

Конфигурация TTS находится в messages.tts в ~/.openclaw/openclaw.json. Выберите пресет и адаптируйте блок провайдера:
{
  messages: {
    tts: {
      auto: "always",
      provider: "azure-speech",
      providers: {
        "azure-speech": {
          apiKey: "${AZURE_SPEECH_KEY}",
          region: "eastus",
          speakerVoice: "en-US-JennyNeural",
          lang: "en-US",
          outputFormat: "audio-24khz-48kbitrate-mono-mp3",
          voiceNoteOutputFormat: "ogg-24khz-16bit-mono-opus",
        },
      },
    },
  },
}
Для Xiaomi mimo-v2.5-tts-voicedesign опустите speakerVoice и задайте style как подсказку для дизайна голоса. OpenClaw отправляет эту подсказку как TTS-сообщение user и не отправляет audio.voice для модели voicedesign.

Переопределения голоса для отдельных агентов

Используйте agents.list[].tts, когда один агент должен говорить с другим провайдером, голосом, моделью, персоной или режимом автоматического TTS. Блок агента глубоко объединяется поверх messages.tts, поэтому учетные данные провайдера могут оставаться в глобальной конфигурации провайдера:
{
  messages: {
    tts: {
      auto: "always",
      provider: "elevenlabs",
      providers: {
        elevenlabs: { apiKey: "${ELEVENLABS_API_KEY}", model: "eleven_multilingual_v2" },
      },
    },
  },
  agents: {
    list: [
      {
        id: "reader",
        tts: {
          providers: {
            elevenlabs: { speakerVoiceId: "EXAVITQu4vr4xnSDxMaL" },
          },
        },
      },
    ],
  },
}
Чтобы закрепить персону для отдельного агента, задайте agents.list[].tts.persona вместе с конфигурацией провайдера — она переопределяет глобальную messages.tts.persona только для этого агента. Порядок приоритета для автоматических ответов, /tts audio, /tts status и инструмента агента tts:
  1. messages.tts
  2. активная agents.list[].tts
  3. переопределение канала, когда канал поддерживает channels.<channel>.tts
  4. переопределение учетной записи, когда канал передает channels.<channel>.accounts.<id>.tts
  5. локальные настройки /tts для этого хоста
  6. встроенные директивы [[tts:...]], когда включены переопределения модели
Переопределения канала и учетной записи используют ту же форму, что и messages.tts, и глубоко объединяются поверх предыдущих слоев, поэтому общие учетные данные провайдера могут оставаться в messages.tts, а канал или учетная запись бота меняет только голос диктора, модель, персону или автоматический режим:
{
  messages: {
    tts: {
      provider: "openai",
      providers: {
        openai: { apiKey: "${OPENAI_API_KEY}", model: "gpt-4o-mini-tts" },
      },
    },
  },
  channels: {
    feishu: {
      accounts: {
        english: {
          tts: {
            providers: {
              openai: { speakerVoice: "shimmer" },
            },
          },
        },
      },
    },
  },
}

Персоны

Персона — это стабильная речевая идентичность, которую можно детерминированно применять у разных провайдеров. Она может предпочитать одного провайдера, определять независимое от провайдера намерение промпта и хранить привязки для конкретных провайдеров: голоса, модели, шаблоны промптов, seed-значения и настройки голоса.

Минимальная персона

{
  messages: {
    tts: {
      auto: "always",
      persona: "narrator",
      personas: {
        narrator: {
          label: "Narrator",
          provider: "elevenlabs",
          providers: {
            elevenlabs: {
              speakerVoiceId: "EXAVITQu4vr4xnSDxMaL",
              modelId: "eleven_multilingual_v2",
            },
          },
        },
      },
    },
  },
}

Полная персона (независимый от провайдера промпт)

{
  messages: {
    tts: {
      auto: "always",
      persona: "alfred",
      personas: {
        alfred: {
          label: "Alfred",
          description: "Dry, warm British butler narrator.",
          provider: "google",
          fallbackPolicy: "preserve-persona",
          prompt: {
            profile: "A brilliant British butler. Dry, witty, warm, charming, emotionally expressive, never generic.",
            scene: "A quiet late-night study. Close-mic narration for a trusted operator.",
            sampleContext: "The speaker is answering a private technical request with concise confidence and dry warmth.",
            style: "Refined, understated, lightly amused.",
            accent: "British English.",
            pacing: "Measured, with short dramatic pauses.",
            constraints: ["Do not read configuration values aloud.", "Do not explain the persona."],
          },
          providers: {
            google: {
              model: "gemini-3.1-flash-tts-preview",
              speakerVoice: "Algieba",
              promptTemplate: "audio-profile-v1",
            },
            openai: { model: "gpt-4o-mini-tts", speakerVoice: "cedar" },
            elevenlabs: {
              speakerVoiceId: "voice_id",
              modelId: "eleven_multilingual_v2",
              seed: 42,
              voiceSettings: {
                stability: 0.65,
                similarityBoost: 0.8,
                style: 0.25,
                useSpeakerBoost: true,
                speed: 0.95,
              },
            },
          },
        },
      },
    },
  },
}

Разрешение персоны

Активная персона выбирается детерминированно:
  1. локальная настройка /tts persona <id>, если задана.
  2. messages.tts.persona, если задана.
  3. Без персоны.
Выбор провайдера выполняется по принципу «сначала явные настройки»:
  1. Прямые переопределения (CLI, Gateway, Talk, разрешенные директивы TTS).
  2. локальная настройка /tts provider <id>.
  3. provider активной персоны.
  4. messages.tts.provider.
  5. Автовыбор из реестра.
Для каждой попытки провайдера OpenClaw объединяет конфигурации в таком порядке:
  1. messages.tts.providers.<id>
  2. messages.tts.personas.<persona>.providers.<id>
  3. доверенные переопределения запроса
  4. разрешенные переопределения директив TTS, сгенерированных моделью

Как провайдеры используют промпты персон

Поля промпта персоны (profile, scene, sampleContext, style, accent, pacing, constraints) независимы от провайдера. Каждый провайдер сам решает, как их использовать:
Оборачивает поля промпта персоны в структуру промпта Gemini TTS только когда эффективная конфигурация провайдера Google задает promptTemplate: "audio-profile-v1" или personaPrompt. Более старые поля audioProfile и speakerName по-прежнему добавляются в начало как текст промпта, специфичный для Google. Встроенные аудиотеги, такие как [whispers] или [laughs] внутри блока [[tts:text]], сохраняются внутри транскрипта Gemini; OpenClaw не генерирует эти теги.
Сопоставляет поля промпта персоны с полем запроса instructions только когда явные OpenAI instructions не настроены. Явные instructions всегда имеют приоритет.
Используют только привязки персоны для конкретного провайдера в personas.<id>.providers.<provider>. Поля промпта персоны игнорируются, если провайдер не реализует собственное сопоставление промпта персоны.

Политика fallback

fallbackPolicy управляет поведением, когда у персоны нет привязки для проверяемого провайдера:
ПолитикаПоведение
preserve-personaПо умолчанию. Нейтральные к провайдеру поля промпта остаются доступными; провайдер может использовать или игнорировать их.
provider-defaultsПерсона исключается из подготовки промпта для этой попытки; провайдер использует свои нейтральные значения по умолчанию, при этом fallback к другим провайдерам продолжается.
failПропустить эту попытку провайдера с reasonCode: "not_configured" и personaBinding: "missing". Fallback-провайдеры всё равно пробуются.
Весь TTS-запрос завершается неудачей только тогда, когда каждый испробованный провайдер пропущен или завершается ошибкой. Выбор провайдера сеанса Talk ограничен областью сеанса. Клиент Talk должен выбирать идентификаторы провайдеров, моделей, голосов и локали из talk.catalog и передавать их через сеанс Talk или запрос передачи. Открытие голосового сеанса не должно изменять messages.tts или глобальные значения провайдера Talk по умолчанию.

Директивы, управляемые моделью

По умолчанию ассистент может выдавать директивы [[tts:...]], чтобы переопределить голос, модель или скорость для одного ответа, а также необязательный блок [[tts:text]]...[[/tts:text]] для выразительных подсказок, которые должны появляться только в аудио:
Here you go.

[[tts:speakerVoiceId=pMsXgVXv3BLzUgSXRplE model=eleven_v3 speed=1.1]]
[[tts:text]](laughs) Read the song once more.[[/tts:text]]
Когда messages.tts.auto равно "tagged", директивы обязательны, чтобы запустить аудио. Потоковая доставка блоков удаляет директивы из видимого текста до того, как канал их увидит, даже если они разделены между соседними блоками. provider=... игнорируется, если не задано modelOverrides.allowProvider: true. Когда ответ объявляет provider=..., остальные ключи в этой директиве разбираются только этим провайдером; неподдерживаемые ключи удаляются и сообщаются как предупреждения директив TTS. Доступные ключи директив:
  • provider (идентификатор зарегистрированного провайдера; требует allowProvider: true)
  • speakerVoice / speakerVoiceId (устаревшие псевдонимы: voice, voiceName, voice_name, google_voice, voiceId)
  • model / google_model
  • stability, similarityBoost, style, speed, useSpeakerBoost
  • vol / volume (громкость MiniMax, 0–10)
  • pitch (целочисленная высота тона MiniMax, −12 до 12; дробные значения отбрасываются)
  • emotion (тег эмоции Volcengine)
  • applyTextNormalization (auto|on|off)
  • languageCode (ISO 639-1)
  • seed
Полностью отключить переопределения модели:
{ messages: { tts: { modelOverrides: { enabled: false } } } }
Разрешить переключение провайдера, сохранив настройку других параметров:
{ messages: { tts: { modelOverrides: { enabled: true, allowProvider: true, allowSeed: false } } } }

Слэш-команды

Одна команда /tts. В Discord OpenClaw также регистрирует /voice, потому что /tts является встроенной командой Discord — текстовая /tts ... всё равно работает.
/tts off | on | status
/tts chat on | off | default
/tts latest
/tts provider <id>
/tts persona <id> | off
/tts limit <chars>
/tts summary off
/tts audio <text>
Команды требуют авторизованного отправителя (применяются правила allowlist/владельца), а также должен быть включён либо commands.text, либо регистрация нативных команд.
Примечания по поведению:
  • /tts on записывает локальную настройку TTS в always; /tts off записывает её в off.
  • /tts chat on|off|default записывает ограниченное сеансом переопределение авто-TTS для текущего чата.
  • /tts persona <id> записывает локальную настройку персоны; /tts persona off очищает её.
  • /tts latest считывает последний ответ ассистента из транскрипта текущего сеанса и один раз отправляет его как аудио. Он сохраняет только хеш этого ответа в записи сеанса, чтобы подавлять дублирующие голосовые отправки.
  • /tts audio создаёт одноразовый аудиоответ (не включает TTS).
  • limit и summary хранятся в локальных настройках, а не в основной конфигурации.
  • /tts status включает диагностику fallback для последней попытки — Fallback: <primary> -> <used>, Attempts: ... и подробности по каждой попытке (provider:outcome(reasonCode) latency).
  • /status показывает активный режим TTS, а также настроенного провайдера, модель, голос и очищенные метаданные пользовательского endpoint, когда TTS включён.

Пользовательские настройки

Слэш-команды записывают локальные переопределения в prefsPath. Значение по умолчанию: ~/.openclaw/settings/tts.json; переопределите его с помощью env var OPENCLAW_TTS_PREFS или messages.tts.prefsPath.
Сохранённое полеЭффект
autoЛокальное переопределение авто-TTS (always, off, …)
providerЛокальное переопределение основного провайдера
personaЛокальное переопределение персоны
maxLengthПорог сводки (по умолчанию 1500 символов)
summarizeПереключатель сводки (по умолчанию true)
Они переопределяют эффективную конфигурацию из messages.tts плюс активный блок agents.list[].tts для этого хоста.

Форматы вывода (фиксированные)

Доставка голоса TTS определяется возможностями канала. Plugins каналов объявляют, должен ли TTS в стиле голоса запрашивать у провайдеров нативную цель voice-note или сохранять обычный синтез audio-file и только помечать совместимый вывод для голосовой доставки.
  • Каналы с поддержкой голосовых заметок: для ответов голосовыми заметками предпочтителен Opus (opus_48000_64 от ElevenLabs, opus от OpenAI).
    • 48 кГц / 64 кбит/с — хороший компромисс для голосовых сообщений.
  • Feishu / WhatsApp: когда ответ голосовой заметкой создается как MP3/WebM/WAV/M4A или другой вероятный аудиофайл, Plugin канала перекодирует его в 48 кГц Ogg/Opus с помощью ffmpeg перед отправкой нативного голосового сообщения. WhatsApp отправляет результат через полезную нагрузку Baileys audio с ptt: true и audio/ogg; codecs=opus. Если преобразование завершается ошибкой, Feishu получает исходный файл как вложение; отправка WhatsApp завершается ошибкой вместо публикации несовместимой полезной нагрузки PTT.
  • Другие каналы: MP3 (mp3_44100_128 от ElevenLabs, mp3 от OpenAI).
    • 44,1 кГц / 128 кбит/с — баланс по умолчанию для четкости речи.
  • MiniMax: MP3 (модель speech-2.8-hd, частота дискретизации 32 кГц) для обычных аудиовложений. Для целей голосовых заметок, объявленных каналом, OpenClaw перекодирует MiniMax MP3 в Opus 48 кГц с помощью ffmpeg перед доставкой, когда канал объявляет перекодирование.
  • Xiaomi MiMo: по умолчанию MP3 или WAV при соответствующей настройке. Для целей голосовых заметок, объявленных каналом, OpenClaw перекодирует вывод Xiaomi в Opus 48 кГц с помощью ffmpeg перед доставкой, когда канал объявляет перекодирование.
  • Локальный CLI: использует настроенный outputFormat. Цели голосовых заметок преобразуются в Ogg/Opus, а телефонный вывод преобразуется в необработанный моно PCM 16 кГц с помощью ffmpeg.
  • Google Gemini: Gemini API TTS возвращает необработанный PCM 24 кГц. OpenClaw упаковывает его как WAV для аудиовложений, перекодирует в Opus 48 кГц для целей голосовых заметок и возвращает PCM напрямую для Talk/телефонии.
  • Gradium: WAV для аудиовложений, Opus для целей голосовых заметок и ulaw_8000 при 8 кГц для телефонии.
  • Inworld: MP3 для обычных аудиовложений, нативный OGG_OPUS для целей голосовых заметок и необработанный PCM при 22050 Гц для Talk/телефонии.
  • xAI: по умолчанию MP3; responseFormat может быть mp3, wav, pcm, mulaw или alaw. OpenClaw использует пакетную конечную точку REST TTS xAI и возвращает полное аудиовложение; потоковый WebSocket TTS xAI не используется в этом пути провайдера. Нативный формат Opus для голосовых заметок в этом пути не поддерживается.
  • Microsoft: использует microsoft.outputFormat (по умолчанию audio-24khz-48kbitrate-mono-mp3).
    • Встроенный транспорт принимает outputFormat, но не все форматы доступны в сервисе.
    • Значения формата вывода соответствуют форматам вывода Microsoft Speech (включая Ogg/WebM Opus).
    • Telegram sendVoice принимает OGG/MP3/M4A; используйте OpenAI/ElevenLabs, если вам нужны гарантированные голосовые сообщения Opus.
    • Если настроенный формат вывода Microsoft завершается ошибкой, OpenClaw повторяет попытку с MP3.
Форматы вывода OpenAI/ElevenLabs фиксированы для каждого канала (см. выше).

Поведение Auto-TTS

Когда включен messages.tts.auto, OpenClaw:
  • Пропускает TTS, если ответ уже содержит структурированные медиа.
  • Пропускает очень короткие ответы (меньше 10 символов).
  • Резюмирует длинные ответы, когда резюме включены, используя summaryModel (или agents.defaults.model.primary).
  • Прикрепляет созданное аудио к ответу.
  • В mode: "final" все равно отправляет TTS только с аудио для потоковых финальных ответов после завершения текстового потока; созданные медиа проходят ту же нормализацию медиа канала, что и обычные вложения ответа.
Если ответ превышает maxLength, а резюме выключено (или нет API-ключа для модели резюме), аудио пропускается и отправляется обычный текстовый ответ.
Reply -> TTS enabled?
  no  -> send text
  yes -> has media / short?
          yes -> send text
          no  -> length > limit?
                   no  -> TTS -> attach audio
                   yes -> summary enabled?
                            no  -> send text
                            yes -> summarize -> TTS -> attach audio

Форматы вывода по каналам

ЦельФормат
Feishu / Matrix / Telegram / WhatsAppОтветы голосовыми заметками предпочитают Opus (opus_48000_64 от ElevenLabs, opus от OpenAI). 48 кГц / 64 кбит/с балансирует четкость и размер.
Другие каналыMP3 (mp3_44100_128 от ElevenLabs, mp3 от OpenAI). 44,1 кГц / 128 кбит/с по умолчанию для речи.
Talk / телефонияНативный для провайдера PCM (Inworld 22050 Гц, Google 24 кГц) или ulaw_8000 от Gradium для телефонии.
Примечания по провайдерам:
  • Транскодирование Feishu / WhatsApp: Когда ответ голосовой заметкой приходит как MP3/WebM/WAV/M4A, Plugin канала транскодирует его в 48 кГц Ogg/Opus с помощью ffmpeg. WhatsApp отправляет через Baileys с ptt: true и audio/ogg; codecs=opus. Если преобразование не удается: Feishu откатывается к прикреплению исходного файла; отправка WhatsApp завершается ошибкой вместо публикации несовместимой полезной нагрузки PTT.
  • MiniMax / Xiaomi MiMo: MP3 по умолчанию (32 кГц для MiniMax speech-2.8-hd); транскодируется в 48 кГц Opus для целей голосовых заметок через ffmpeg.
  • Локальный CLI: Использует настроенный outputFormat. Цели голосовых заметок преобразуются в Ogg/Opus, а телефонный вывод — в необработанный моно PCM 16 кГц.
  • Google Gemini: Возвращает необработанный PCM 24 кГц. OpenClaw оборачивает его как WAV для вложений, транскодирует в 48 кГц Opus для целей голосовых заметок, возвращает PCM напрямую для Talk/телефонии.
  • Inworld: MP3-вложения, нативный OGG_OPUS для голосовых заметок, необработанный PCM 22050 Гц для Talk/телефонии.
  • xAI: MP3 по умолчанию; responseFormat может быть mp3|wav|pcm|mulaw|alaw. Использует пакетную REST-конечную точку xAI — потоковый WebSocket TTS не используется. Нативный формат Opus для голосовых заметок не поддерживается.
  • Microsoft: Использует microsoft.outputFormat (по умолчанию audio-24khz-48kbitrate-mono-mp3). Telegram sendVoice принимает OGG/MP3/M4A; используйте OpenAI/ElevenLabs, если вам нужны гарантированные голосовые сообщения Opus. Если настроенный формат Microsoft завершается ошибкой, OpenClaw повторяет попытку с MP3.
Форматы вывода OpenAI и ElevenLabs фиксированы для каждого канала, как указано выше.

Справочник полей

auto
"off" | "always" | "inbound" | "tagged"
Режим Auto-TTS. inbound отправляет аудио только после входящего голосового сообщения; tagged отправляет аудио только когда ответ включает директивы [[tts:...]] или блок [[tts:text]].
enabled
boolean
устарело
Устаревший переключатель. openclaw doctor --fix переносит его в auto.
mode
"final" | "all"
по умолчанию:"final"
"all" включает ответы инструментов/блоков в дополнение к финальным ответам.
provider
string
Идентификатор речевого провайдера. Если не задан, OpenClaw использует первый настроенный провайдер в порядке авто-выбора реестра. Устаревшее provider: "edge" переписывается в "microsoft" командой openclaw doctor --fix.
persona
string
Идентификатор активной персоны из personas. Нормализуется к нижнему регистру.
personas.<id>
object
Стабильная речевая идентичность. Поля: label, description, provider, fallbackPolicy, prompt, providers.<provider>. См. Персоны.
summaryModel
string
Недорогая модель для автосводки; по умолчанию agents.defaults.model.primary. Принимает provider/model или настроенный псевдоним модели.
modelOverrides
object
Разрешить модели выдавать директивы TTS. enabled по умолчанию равно true; allowProvider по умолчанию равно false.
providers.<id>
object
Настройки, принадлежащие провайдеру, с ключами по идентификатору речевого провайдера. Устаревшие прямые блоки (messages.tts.openai, .elevenlabs, .microsoft, .edge) переписываются командой openclaw doctor --fix; коммитьте только messages.tts.providers.<id>.
maxTextLength
number
Жесткий лимит символов входного текста TTS. /tts audio завершается ошибкой при превышении.
timeoutMs
number
Тайм-аут запроса в миллисекундах.
prefsPath
string
Переопределить локальный путь JSON настроек (провайдер/лимит/сводка). По умолчанию ~/.openclaw/settings/tts.json.
apiKey
string
Переменная окружения: AZURE_SPEECH_KEY, AZURE_SPEECH_API_KEY или SPEECH_KEY.
region
string
Регион Azure Speech (например, eastus). Переменная окружения: AZURE_SPEECH_REGION или SPEECH_REGION.
endpoint
string
Необязательное переопределение конечной точки Azure Speech (псевдоним baseUrl).
speakerVoice
string
ShortName голоса Azure. По умолчанию en-US-JennyNeural. Устаревший псевдоним: voice.
lang
string
Код языка SSML. По умолчанию en-US.
outputFormat
string
Azure X-Microsoft-OutputFormat для стандартного аудио. По умолчанию audio-24khz-48kbitrate-mono-mp3.
voiceNoteOutputFormat
string
Azure X-Microsoft-OutputFormat для вывода голосовых заметок. По умолчанию ogg-24khz-16bit-mono-opus.
apiKey
string
Откатывается к ELEVENLABS_API_KEY или XI_API_KEY.
model
string
Идентификатор модели (например, eleven_multilingual_v2, eleven_v3).
speakerVoiceId
string
Идентификатор голоса ElevenLabs. Устаревший псевдоним: voiceId.
voiceSettings
object
stability, similarityBoost, style (каждый 0..1), useSpeakerBoost (true|false), speed (0.5..2.0, 1.0 = нормальная).
applyTextNormalization
"auto" | "on" | "off"
Режим нормализации текста.
languageCode
string
2-буквенный ISO 639-1 (например, en, de).
seed
number
Целое число 0..4294967295 для детерминизма по мере возможности.
baseUrl
string
Переопределить базовый URL API ElevenLabs.
apiKey
string
Откатывается к GEMINI_API_KEY / GOOGLE_API_KEY. Если опущено, TTS может повторно использовать models.providers.google.apiKey до отката к переменным окружения.
model
string
Модель Gemini TTS. По умолчанию gemini-3.1-flash-tts-preview.
speakerVoice
string
Имя готового голоса Gemini. По умолчанию Kore. Устаревшие псевдонимы: voiceName, voice.
audioProfile
string
Запрос стиля на естественном языке, добавляемый перед произносимым текстом.
speakerName
string
Необязательная метка говорящего, добавляемая перед произносимым текстом, когда ваш запрос использует именованного говорящего.
promptTemplate
"audio-profile-v1"
Установите audio-profile-v1, чтобы обернуть поля запроса активной персоны в детерминированную структуру запроса Gemini TTS.
personaPrompt
string
Дополнительный текст запроса персоны, специфичный для Google, добавляемый к Director’s Notes шаблона.
baseUrl
string
Принимается только https://generativelanguage.googleapis.com.
apiKey
string
Переменная окружения: GRADIUM_API_KEY.
baseUrl
string
По умолчанию https://api.gradium.ai.
speakerVoiceId
string
По умолчанию Emma (YTpq7expH9539ERJ). Устаревший псевдоним: voiceId.

Основной Inworld

apiKey
string
Переменная окружения: INWORLD_API_KEY.
baseUrl
string
По умолчанию https://api.inworld.ai.
modelId
string
По умолчанию inworld-tts-1.5-max. Также: inworld-tts-1.5-mini, inworld-tts-1-max, inworld-tts-1.
speakerVoiceId
string
По умолчанию Sarah. Устаревший псевдоним: voiceId.
temperature
number
Температура сэмплирования 0..2.
command
string
Локальный исполняемый файл или командная строка для CLI TTS.
args
string[]
Аргументы команды. Поддерживает плейсхолдеры {{Text}}, {{OutputPath}}, {{OutputDir}}, {{OutputBase}}.
outputFormat
"mp3" | "opus" | "wav"
Ожидаемый формат вывода CLI. По умолчанию mp3 для аудиовложений.
timeoutMs
number
Тайм-аут команды в миллисекундах. По умолчанию 120000.
cwd
string
Необязательный рабочий каталог команды.
env
Record<string, string>
Необязательные переопределения переменных окружения для команды.
enabled
boolean
по умолчанию:"true"
Разрешить использование речи Microsoft.
speakerVoice
string
Имя нейронного голоса Microsoft (например, en-US-MichelleNeural). Устаревший псевдоним: voice.
lang
string
Код языка (например, en-US).
outputFormat
string
Формат вывода Microsoft. По умолчанию audio-24khz-48kbitrate-mono-mp3. Не все форматы поддерживаются встроенным транспортом на базе Edge.
rate / pitch / volume
string
Процентные строки (например, +10%, -5%).
saveSubtitles
boolean
Записывать субтитры JSON рядом с аудиофайлом.
proxy
string
URL прокси для речевых запросов Microsoft.
timeoutMs
number
Переопределение тайм-аута запроса (мс).
edge.*
object
устарело
Устаревший псевдоним. Запустите openclaw doctor --fix, чтобы переписать сохраненную конфигурацию в providers.microsoft.
apiKey
string
Использует MINIMAX_API_KEY как запасной вариант. Аутентификация Token Plan через MINIMAX_OAUTH_TOKEN, MINIMAX_CODE_PLAN_KEY или MINIMAX_CODING_API_KEY.
baseUrl
string
По умолчанию https://api.minimax.io. Переменная окружения: MINIMAX_API_HOST.
model
string
По умолчанию speech-2.8-hd. Переменная окружения: MINIMAX_TTS_MODEL.
speakerVoiceId
string
По умолчанию English_expressive_narrator. Переменная окружения: MINIMAX_TTS_VOICE_ID. Устаревший псевдоним: voiceId.
speed
number
0.5..2.0. По умолчанию 1.0.
vol
number
(0, 10]. По умолчанию 1.0.
pitch
number
Целое число -12..12. По умолчанию 0. Дробные значения усекаются перед запросом.
apiKey
string
Использует OPENAI_API_KEY как запасной вариант.
model
string
Идентификатор модели OpenAI TTS (например, gpt-4o-mini-tts).
speakerVoice
string
Имя голоса (например, alloy, cedar). Устаревший псевдоним: voice.
instructions
string
Явное поле OpenAI instructions. Если оно задано, поля промпта персоны не сопоставляются автоматически.
extraBody / extra_body
Record<string, unknown>
Дополнительные поля JSON, объединяемые с телами запросов /audio/speech после сгенерированных полей OpenAI TTS. Используйте это для OpenAI-совместимых конечных точек, таких как Kokoro, которым требуются ключи, специфичные для провайдера, например lang; небезопасные ключи прототипов игнорируются.
baseUrl
string
Переопределяет конечную точку OpenAI TTS. Порядок разрешения: конфигурация → OPENAI_TTS_BASE_URLhttps://api.openai.com/v1. Значения, отличные от стандартного, считаются OpenAI-совместимыми конечными точками TTS, поэтому пользовательские имена моделей и голосов принимаются.
apiKey
string
Переменная окружения: OPENROUTER_API_KEY. Может повторно использовать models.providers.openrouter.apiKey.
baseUrl
string
По умолчанию https://openrouter.ai/api/v1. Устаревший https://openrouter.ai/v1 нормализуется.
model
string
По умолчанию hexgrad/kokoro-82m. Псевдоним: modelId.
speakerVoice
string
По умолчанию af_alloy. Устаревшие псевдонимы: voice, voiceId.
responseFormat
"mp3" | "pcm"
По умолчанию mp3.
speed
number
Собственное переопределение скорости провайдера.
apiKey
string
Переменная окружения: VOLCENGINE_TTS_API_KEY или BYTEPLUS_SEED_SPEECH_API_KEY.
resourceId
string
По умолчанию seed-tts-1.0. Переменная окружения: VOLCENGINE_TTS_RESOURCE_ID. Используйте seed-tts-2.0, если у вашего проекта есть право на TTS 2.0.
appKey
string
Заголовок ключа приложения. По умолчанию aGjiRDfUWi. Переменная окружения: VOLCENGINE_TTS_APP_KEY.
baseUrl
string
Переопределяет HTTP-конечную точку Seed Speech TTS. Переменная окружения: VOLCENGINE_TTS_BASE_URL.
speakerVoice
string
Тип голоса. По умолчанию en_female_anna_mars_bigtts. Переменная окружения: VOLCENGINE_TTS_VOICE. Устаревший псевдоним: voice.
speedRatio
number
Собственный коэффициент скорости провайдера.
emotion
string
Собственный тег эмоции провайдера.
appId / token / cluster
string
устарело
Устаревшие поля Volcengine Speech Console. Переменные окружения: VOLCENGINE_TTS_APPID, VOLCENGINE_TTS_TOKEN, VOLCENGINE_TTS_CLUSTER (по умолчанию volcano_tts).
apiKey
string
Переменная окружения: XAI_API_KEY.
baseUrl
string
По умолчанию https://api.x.ai/v1. Переменная окружения: XAI_BASE_URL.
speakerVoiceId
string
По умолчанию eve. Доступные рабочие голоса: ara, eve, leo, rex, sal, una. Устаревший псевдоним: voiceId.
language
string
Код языка BCP-47 или auto. По умолчанию en.
responseFormat
"mp3" | "wav" | "pcm" | "mulaw" | "alaw"
По умолчанию mp3.
speed
number
Собственное переопределение скорости провайдера.
apiKey
string
Переменная окружения: XIAOMI_API_KEY.
baseUrl
string
По умолчанию https://api.xiaomimimo.com/v1. Переменная окружения: XIAOMI_BASE_URL.
model
string
По умолчанию mimo-v2.5-tts. Переменная окружения: XIAOMI_TTS_MODEL. Также поддерживает mimo-v2-tts и mimo-v2.5-tts-voicedesign.
speakerVoice
string
По умолчанию mimo_default для моделей с предустановленными голосами. Переменная окружения: XIAOMI_TTS_VOICE. Устаревший псевдоним: voice. Не отправляется для mimo-v2.5-tts-voicedesign.
format
"mp3" | "wav"
По умолчанию mp3. Переменная окружения: XIAOMI_TTS_FORMAT.
style
string
Необязательная инструкция стиля на естественном языке, отправляемая как сообщение пользователя; не озвучивается. Для mimo-v2.5-tts-voicedesign это промпт проектирования голоса; OpenClaw предоставляет значение по умолчанию, если оно опущено.

Инструмент агента

Инструмент tts преобразует текст в речь и возвращает аудиовложение для доставки ответа. В Feishu, Matrix, Telegram и WhatsApp аудио доставляется как голосовое сообщение, а не как вложенный файл. Feishu и WhatsApp могут транскодировать вывод TTS не в формате Opus на этом пути, когда доступен ffmpeg. WhatsApp отправляет аудио через Baileys как голосовую заметку PTT (audio с ptt: true) и отправляет видимый текст отдельно от PTT-аудио, потому что клиенты не всегда корректно отображают подписи к голосовым заметкам. Инструмент принимает необязательные поля channel и timeoutMs; timeoutMs — это тайм-аут запроса к провайдеру для отдельного вызова в миллисекундах. Значения для отдельного вызова переопределяют messages.tts.timeoutMs; настроенные тайм-ауты TTS переопределяют любое значение по умолчанию провайдера, заданное Plugin.

Gateway RPC

МетодНазначение
tts.statusЧитать текущее состояние TTS и последнюю попытку.
tts.enableУстановить локальную автоматическую настройку в always.
tts.disableУстановить локальную автоматическую настройку в off.
tts.convertРазовое преобразование текста → аудио.
tts.setProviderУстановить локальную настройку провайдера.
tts.setPersonaУстановить локальную настройку персоны.
tts.providersСписок настроенных провайдеров и их статус.

Ссылки на сервисы

См. также