Перетворення тексту на мовлення (TTS)
OpenClaw може перетворювати вихідні відповіді на аудіо за допомогою ElevenLabs, Google Gemini, Microsoft, MiniMax або OpenAI. Це працює всюди, де OpenClaw може надсилати аудіо.Підтримувані сервіси
- ElevenLabs (основний або резервний провайдер)
- Google Gemini (основний або резервний провайдер; використовує Gemini API TTS)
- Microsoft (основний або резервний провайдер; поточна вбудована реалізація використовує
node-edge-tts) - MiniMax (основний або резервний провайдер; використовує API T2A v2)
- OpenAI (основний або резервний провайдер; також використовується для підсумків)
Примітки щодо мовлення Microsoft
Вбудований провайдер мовлення Microsoft наразі використовує онлайн-сервіс нейронного TTS Microsoft Edge через бібліотекуnode-edge-tts. Це хостований сервіс (не
локальний), він використовує кінцеві точки Microsoft і не потребує API-ключа.
node-edge-tts надає параметри конфігурації мовлення та вихідні формати, але
не всі параметри підтримуються сервісом. Застаріла конфігурація та введення директив
із використанням edge усе ще працюють і нормалізуються до microsoft.
Оскільки цей шлях використовує публічний вебсервіс без опублікованих SLA або квот,
вважайте його рішенням із найкращими можливими зусиллями. Якщо вам потрібні гарантовані ліміти та підтримка, використовуйте OpenAI
або ElevenLabs.
Необов’язкові ключі
Якщо ви хочете використовувати OpenAI, ElevenLabs, Google Gemini або MiniMax:ELEVENLABS_API_KEY(абоXI_API_KEY)GEMINI_API_KEY(абоGOOGLE_API_KEY)MINIMAX_API_KEYOPENAI_API_KEY
summaryModel (або agents.defaults.model.primary),
тому якщо ви вмикаєте підсумки, цей провайдер також має бути автентифікований.
Посилання на сервіси
- Посібник OpenAI Text-to-Speech
- Довідка API Audio OpenAI
- ElevenLabs Text to Speech
- Автентифікація ElevenLabs
- MiniMax T2A v2 API
- node-edge-tts
- Вихідні формати Microsoft Speech
Чи ввімкнено це за замовчуванням?
Ні. Автоматичний TTS вимкнено за замовчуванням. Увімкніть його в конфігурації черезmessages.tts.auto або локально за допомогою /tts on.
Коли messages.tts.provider не задано, OpenClaw вибирає першого
налаштованого провайдера мовлення в порядку автоматичного вибору реєстру.
Конфігурація
Конфігурація TTS розміщується вmessages.tts у openclaw.json.
Повна схема наведена в Конфігурація Gateway.
Мінімальна конфігурація (увімкнення + провайдер)
OpenAI як основний, ElevenLabs як резервний
Microsoft як основний (без API-ключа)
MiniMax як основний
Google Gemini як основний
messages.tts.providers.google.apiKey -> models.providers.google.apiKey ->
GEMINI_API_KEY -> GOOGLE_API_KEY.
Вимкнення мовлення Microsoft
Власні ліміти + шлях до prefs
Відповідати лише аудіо після вхідного голосового повідомлення
Вимкнення автоматичного підсумку для довгих відповідей
Примітки щодо полів
auto: режим автоматичного TTS (off,always,inbound,tagged).inboundнадсилає аудіо лише після вхідного голосового повідомлення.taggedнадсилає аудіо лише тоді, коли відповідь містить директиви[[tts:key=value]]або блок[[tts:text]]...[[/tts:text]].
enabled: застарілий перемикач (doctor мігрує його доauto).mode:"final"(типово) або"all"(включає відповіді інструментів/блоків).provider: ідентифікатор провайдера мовлення, наприклад"elevenlabs","google","microsoft","minimax"або"openai"(резервне перемикання відбувається автоматично).- Якщо
providerне задано, OpenClaw використовує першого налаштованого провайдера мовлення в порядку автоматичного вибору реєстру. - Застарілий
provider: "edge"усе ще працює та нормалізується доmicrosoft. summaryModel: необов’язкова недорога модель для автоматичного підсумку; типово використовуєтьсяagents.defaults.model.primary.- Приймає
provider/modelабо налаштований псевдонім моделі.
- Приймає
modelOverrides: дозволяє моделі видавати директиви TTS (типово ввімкнено).allowProviderтипово має значенняfalse(перемикання провайдера вмикається явно).
providers.<id>: налаштування, що належать провайдеру, із ключем за ідентифікатором провайдера мовлення.- Застарілі прямі блоки провайдерів (
messages.tts.openai,messages.tts.elevenlabs,messages.tts.microsoft,messages.tts.edge) автоматично мігруються доmessages.tts.providers.<id>під час завантаження. maxTextLength: жорстке обмеження для вхідного тексту TTS (символи)./tts audioзавершується помилкою, якщо його перевищено.timeoutMs: тайм-аут запиту (мс).prefsPath: перевизначає локальний шлях до JSON-файлу prefs (провайдер/ліміт/підсумок).- Значення
apiKeyрезервно беруться зі змінних середовища (ELEVENLABS_API_KEY/XI_API_KEY,GEMINI_API_KEY/GOOGLE_API_KEY,MINIMAX_API_KEY,OPENAI_API_KEY). providers.elevenlabs.baseUrl: перевизначає базову URL-адресу API ElevenLabs.providers.openai.baseUrl: перевизначає кінцеву точку OpenAI TTS.- Порядок визначення:
messages.tts.providers.openai.baseUrl->OPENAI_TTS_BASE_URL->https://api.openai.com/v1 - Нетипові значення вважаються OpenAI-сумісними кінцевими точками TTS, тому приймаються власні назви моделей і голосів.
- Порядок визначення:
providers.elevenlabs.voiceSettings:stability,similarityBoost,style:0..1useSpeakerBoost:true|falsespeed:0.5..2.0(1.0 = звичайна швидкість)
providers.elevenlabs.applyTextNormalization:auto|on|offproviders.elevenlabs.languageCode: 2-літерний ISO 639-1 (наприклад,en,de)providers.elevenlabs.seed: ціле число0..4294967295(детермінованість у межах найкращих можливих зусиль)providers.minimax.baseUrl: перевизначає базову URL-адресу API MiniMax (типовоhttps://api.minimax.io, env:MINIMAX_API_HOST).providers.minimax.model: модель TTS (типовоspeech-2.8-hd, env:MINIMAX_TTS_MODEL).providers.minimax.voiceId: ідентифікатор голосу (типовоEnglish_expressive_narrator, env:MINIMAX_TTS_VOICE_ID).providers.minimax.speed: швидкість відтворення0.5..2.0(типово 1.0).providers.minimax.vol: гучність(0, 10](типово 1.0; має бути більшою за 0).providers.minimax.pitch: зміщення тону-12..12(типово 0).providers.google.model: модель Gemini TTS (типовоgemini-3.1-flash-tts-preview).providers.google.voiceName: назва вбудованого голосу Gemini (типовоKore; також приймаєтьсяvoice).providers.google.baseUrl: перевизначає базову URL-адресу Gemini API. Приймається лишеhttps://generativelanguage.googleapis.com.- Якщо
messages.tts.providers.google.apiKeyпропущено, TTS може повторно використатиmodels.providers.google.apiKeyперед резервним переходом до env.
- Якщо
providers.microsoft.enabled: дозволяє використання мовлення Microsoft (типовоtrue; без API-ключа).providers.microsoft.voice: назва нейронного голосу Microsoft (наприклад,en-US-MichelleNeural).providers.microsoft.lang: код мови (наприклад,en-US).providers.microsoft.outputFormat: вихідний формат Microsoft (наприклад,audio-24khz-48kbitrate-mono-mp3).- Дивіться вихідні формати Microsoft Speech для допустимих значень; не всі формати підтримуються вбудованим транспортом на основі Edge.
providers.microsoft.rate/providers.microsoft.pitch/providers.microsoft.volume: рядки у відсотках (наприклад,+10%,-5%).providers.microsoft.saveSubtitles: записує JSON-субтитри поруч з аудіофайлом.providers.microsoft.proxy: URL-адреса проксі для запитів мовлення Microsoft.providers.microsoft.timeoutMs: перевизначення тайм-ауту запиту (мс).edge.*: застарілий псевдонім для тих самих налаштувань Microsoft.
Перевизначення, керовані моделлю (типово ввімкнено)
Типово модель може видавати директиви TTS для однієї відповіді. Колиmessages.tts.auto має значення tagged, ці директиви потрібні для запуску аудіо.
Коли це ввімкнено, модель може видавати директиви [[tts:...]] для перевизначення голосу
для однієї відповіді, а також необов’язковий блок [[tts:text]]...[[/tts:text]] для
додавання виразних тегів (сміх, підказки для співу тощо), які мають з’являтися
лише в аудіо.
Директиви provider=... ігноруються, якщо не встановлено modelOverrides.allowProvider: true.
Приклад корисного навантаження відповіді:
provider(ідентифікатор зареєстрованого провайдера мовлення, наприкладopenai,elevenlabs,google,minimaxабоmicrosoft; потребуєallowProvider: true)voice(голос OpenAI),voiceName/voice_name/google_voice(голос Google) абоvoiceId(ElevenLabs / MiniMax)model(модель OpenAI TTS, ідентифікатор моделі ElevenLabs або модель MiniMax) абоgoogle_model(модель Google TTS)stability,similarityBoost,style,speed,useSpeakerBoostvol/volume(гучність MiniMax, 0-10)pitch(тон MiniMax, від -12 до 12)applyTextNormalization(auto|on|off)languageCode(ISO 639-1)seed
Налаштування для окремих користувачів
Команди зі слешем записують локальні перевизначення вprefsPath (типово:
~/.openclaw/settings/tts.json, перевизначається через OPENCLAW_TTS_PREFS або
messages.tts.prefsPath).
Збережені поля:
enabledprovidermaxLength(поріг підсумку; типово 1500 символів)summarize(типовоtrue)
messages.tts.* для цього хоста.
Вихідні формати (фіксовані)
- Feishu / Matrix / Telegram / WhatsApp: голосове повідомлення Opus (
opus_48000_64від ElevenLabs,opusвід OpenAI).- 48 кГц / 64 кбіт/с — це хороший компроміс для голосових повідомлень.
- Інші канали: MP3 (
mp3_44100_128від ElevenLabs,mp3від OpenAI).- 44,1 кГц / 128 кбіт/с — типовий баланс для чіткості мовлення.
- MiniMax: MP3 (модель
speech-2.8-hd, частота дискретизації 32 кГц). Формат голосових нотаток нативно не підтримується; використовуйте OpenAI або ElevenLabs, якщо вам потрібні гарантовані голосові повідомлення Opus. - Google Gemini: Gemini API TTS повертає необроблений PCM 24 кГц. OpenClaw обгортає його у WAV для аудіовкладень і повертає PCM напряму для Talk/телефонії. Нативний формат голосових нотаток 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.
- Вбудований транспорт приймає
Поведінка автоматичного TTS
Коли ввімкнено, OpenClaw:- пропускає TTS, якщо відповідь уже містить медіа або директиву
MEDIA:. - пропускає дуже короткі відповіді (< 10 символів).
- створює підсумок довгих відповідей, якщо це ввімкнено, за допомогою
agents.defaults.model.primary(абоsummaryModel). - додає згенероване аудіо до відповіді.
maxLength, а підсумок вимкнено (або немає API-ключа для
моделі підсумку), аудіо
пропускається, і надсилається звичайна текстова відповідь.
Діаграма потоку
Використання команд зі слешем
Є одна команда:/tts.
Докладніше про ввімкнення див. у Команди зі слешем.
Примітка для Discord: /tts — це вбудована команда Discord, тому OpenClaw реєструє
/voice як нативну команду там. Текстова команда /tts ... усе ще працює.
- Команди потребують авторизованого відправника (правила allowlist/owner усе ще застосовуються).
- Має бути ввімкнено
commands.textабо реєстрацію нативних команд. - Конфігурація
messages.tts.autoприймаєoff|always|inbound|tagged. /tts onзаписує локальне налаштування TTS якalways;/tts offзаписує його якoff.- Використовуйте конфігурацію, якщо вам потрібні типові значення
inboundабоtagged. limitіsummaryзберігаються в локальних prefs, а не в основній конфігурації./tts audioгенерує одноразову аудіовідповідь (не вмикає TTS)./tts statusмістить видимість резервного перемикання для останньої спроби:- успішне резервне перемикання:
Fallback: <primary> -> <used>плюсAttempts: ... - помилка:
Error: ...плюсAttempts: ... - докладна діагностика:
Attempt details: provider:outcome(reasonCode) latency
- успішне резервне перемикання:
- Збої API OpenAI та ElevenLabs тепер містять розібрані відомості про помилку провайдера та ідентифікатор запиту (коли його повертає провайдер), що відображається в помилках/журналах TTS.
Інструмент агента
Інструментtts перетворює текст на мовлення та повертає аудіовкладення для
доставки у відповіді. Коли каналом є Feishu, Matrix, Telegram або WhatsApp,
аудіо доставляється як голосове повідомлення, а не як файлове вкладення.
Gateway RPC
Методи Gateway:tts.statustts.enabletts.disabletts.converttts.setProvidertts.providers