Преобразование текста в речь
OpenClaw может преобразовывать исходящие ответы в аудио с помощью ElevenLabs, OpenAI или Edge TTS. Это работает везде, где OpenClaw может отправлять аудио; в Telegram ответы приходят в круглом пузырьке голосового сообщения.
Поддерживаемые сервисы
- ElevenLabs (основной или резервный провайдер)
- OpenAI (основной или резервный провайдер; также используется для суммаризации)
- Edge TTS (основной или резервный провайдер; использует
node-edge-tts, используется по умолчанию при отсутствии API-ключей)
Примечания по Edge TTS
Edge TTS использует онлайн-нейронный сервис синтеза речи Microsoft Edge через библиотеку node-edge-tts. Это хостируемый сервис (не локальный), использующий конечные точки Microsoft, и не требующий API-ключа. node-edge-tts предоставляет опции конфигурации речи и форматы вывода, но не все опции поддерживаются сервисом Edge. citeturn2search0 Поскольку Edge TTS — это публичный веб-сервис без опубликованного SLA или квот, рассматривайте его как сервис по принципу "как получится". Если вам нужны гарантированные лимиты и поддержка, используйте OpenAI или ElevenLabs. В документации к REST API Microsoft Speech указано ограничение в 10 минут аудио на запрос; Edge TTS не публикует лимиты, поэтому предполагайте аналогичные или более низкие ограничения. citeturn0search3
Необязательные ключи
Если вы хотите использовать OpenAI или ElevenLabs:
ELEVENLABS_API_KEY(илиXI_API_KEY)OPENAI_API_KEY
Edge TTS не требует API-ключа. Если API-ключи не найдены, OpenClaw по умолчанию использует Edge TTS (если не отключено через messages.tts.edge.enabled=false). Если настроено несколько провайдеров, выбранный провайдер используется первым, а остальные служат резервными вариантами. Авто-суммаризация использует настроенную summaryModel (или agents.defaults.model.primary), поэтому этот провайдер также должен быть аутентифицирован, если вы включаете суммаризацию.
Ссылки на сервисы
- Руководство по OpenAI Text-to-Speech
- Справочник по OpenAI Audio API
- ElevenLabs Text to Speech
- ElevenLabs Authentication
- node-edge-tts
- Форматы вывода Microsoft Speech
Включено ли по умолчанию?
Нет. Авто‑TTS по умолчанию выключен. Включите его в конфиге с помощью messages.tts.auto или для сессии командой /tts always (алиас: /tts on). Edge TTS по умолчанию включен, как только TTS активирован, и используется автоматически, когда нет доступных API-ключей OpenAI или ElevenLabs.
Конфигурация
Конфигурация TTS находится в openclaw.json в разделе messages.tts. Полная схема в Конфигурации шлюза.
Минимальная конфигурация (включение + провайдер)
{
messages: {
tts: {
auto: "always",
provider: "elevenlabs",
},
},
}
OpenAI основной с ElevenLabs резервным
{
messages: {
tts: {
auto: "always",
provider: "openai",
summaryModel: "openai/gpt-4.1-mini",
modelOverrides: {
enabled: true,
},
openai: {
apiKey: "openai_api_key",
baseUrl: "https://api.openai.com/v1",
model: "gpt-4o-mini-tts",
voice: "alloy",
},
elevenlabs: {
apiKey: "elevenlabs_api_key",
baseUrl: "https://api.elevenlabs.io",
voiceId: "voice_id",
modelId: "eleven_multilingual_v2",
seed: 42,
applyTextNormalization: "auto",
languageCode: "en",
voiceSettings: {
stability: 0.5,
similarityBoost: 0.75,
style: 0.0,
useSpeakerBoost: true,
speed: 1.0,
},
},
},
},
}
Edge TTS основной (без API-ключа)
{
messages: {
tts: {
auto: "always",
provider: "edge",
edge: {
enabled: true,
voice: "en-US-MichelleNeural",
lang: "en-US",
outputFormat: "audio-24khz-48kbitrate-mono-mp3",
rate: "+10%",
pitch: "-5%",
},
},
},
}
Отключить Edge TTS
{
messages: {
tts: {
edge: {
enabled: false,
},
},
},
}
Пользовательские лимиты + путь к настройкам
{
messages: {
tts: {
auto: "always",
maxTextLength: 4000,
timeoutMs: 30000,
prefsPath: "~/.openclaw/settings/tts.json",
},
},
}
Отправлять аудио только после входящего голосового сообщения
{
messages: {
tts: {
auto: "inbound",
},
},
}
Отключить авто-суммаризацию для длинных ответов
{
messages: {
tts: {
auto: "always",
},
},
}
Затем выполните:
/tts summary off
Примечания к полям
auto: режим авто‑TTS (off,always,inbound,tagged).inboundотправляет аудио только после входящего голосового сообщения.taggedотправляет аудио только когда ответ содержит теги[[tts]].
enabled: устаревший переключатель (доктор мигрирует это вauto).mode:"final"(по умолчанию) или"all"(включает ответы инструментов/блоков).provider:"elevenlabs","openai"или"edge"(резервный провайдер выбирается автоматически).- Если
providerне задан, OpenClaw предпочитаетopenai(если есть ключ), затемelevenlabs(если есть ключ), иначеedge. summaryModel: необязательная дешёвая модель для авто-суммаризации; по умолчаниюagents.defaults.model.primary.- Принимает
provider/modelили настроенный алиас модели.
- Принимает
modelOverrides: разрешить модели отправлять TTS-директивы (включено по умолчанию).allowProviderпо умолчаниюfalse(переключение провайдера требует явного разрешения).
maxTextLength: жёсткое ограничение на входной текст для TTS (символы)./tts audioзавершится ошибкой при превышении.timeoutMs: таймаут запроса (мс).prefsPath: переопределить путь к локальному JSON с настройками (провайдер/лимит/суммаризация).- Значения
apiKeyиспользуют переменные окружения как запасной вариант (ELEVENLABS_API_KEY/XI_API_KEY,OPENAI_API_KEY). elevenlabs.baseUrl: переопределить базовый URL API ElevenLabs.openai.baseUrl: переопределить конечную точку OpenAI TTS.- Порядок определения:
messages.tts.openai.baseUrl->OPENAI_TTS_BASE_URL->https://api.openai.com/v1 - Нестандартные значения рассматриваются как совместимые с OpenAI TTS конечные точки, поэтому принимаются пользовательские имена моделей и голосов.
- Порядок определения:
elevenlabs.voiceSettings:stability,similarityBoost,style:0..1useSpeakerBoost:true|falsespeed:0.5..2.0(1.0 = нормальная скорость)
elevenlabs.applyTextNormalization:auto|on|offelevenlabs.languageCode: 2-буквенный код ISO 639-1 (например,en,de)elevenlabs.seed: целое число0..4294967295(детерминированность по возможности)edge.enabled: разрешить использование Edge TTS (по умолчаниюtrue; без API-ключа).edge.voice: имя нейронного голоса Edge (например,en-US-MichelleNeural).edge.lang: код языка (например,en-US).edge.outputFormat: формат вывода Edge (например,audio-24khz-48kbitrate-mono-mp3).- См. форматы вывода Microsoft Speech для допустимых значений; не все форматы поддерживаются Edge.
edge.rate/edge.pitch/edge.volume: строки процентов (например,+10%,-5%).edge.saveSubtitles: записывать JSON-субтитры рядом с аудиофайлом.edge.proxy: URL прокси для запросов Edge TTS.edge.timeoutMs: переопределение таймаута запроса (мс).
Переопределения на уровне модели (включено по умолчанию)
По умолчанию модель может отправлять TTS-директивы для одного ответа. Когда messages.tts.auto установлен в tagged, эти директивы необходимы для запуска аудио. При включении модель может отправлять директивы [[tts:...]] для переопределения голоса для одного ответа, плюс необязательный блок [[tts:text]]...[[/tts:text]] для предоставления выразительных тегов (смех, реплики для пения и т.д.), которые должны появляться только в аудио. Директивы provider=... игнорируются, если не установлено modelOverrides.allowProvider: true. Пример полезной нагрузки ответа:
Вот, пожалуйста.
[[tts:voiceId=pMsXgVXv3BLzUgSXRplE model=eleven_v3 speed=1.1]]
[[tts:text]](смеётся) Прочти песню ещё раз.[[/tts:text]]
Доступные ключи директив (при включении):
provider(openai|elevenlabs|edge, требуетallowProvider: true)voice(голос OpenAI) илиvoiceId(ElevenLabs)model(модель TTS OpenAI или идентификатор модели ElevenLabs)stability,similarityBoost,style,speed,useSpeakerBoostapplyTextNormalization(auto|on|off)languageCode(ISO 639-1)seed
Отключить все переопределения модели:
{
messages: {
tts: {
modelOverrides: {
enabled: false,
},
},
},
}
Необязательный белый список (разрешить переключение провайдера, оставляя другие настройки конфигурируемыми):
{
messages: {
tts: {
modelOverrides: {
enabled: true,
allowProvider: true,
allowSeed: false,
},
},
},
}
Пользовательские предпочтения
Слэш-команды записывают локальные переопределения в prefsPath (по умолчанию: ~/.openclaw/settings/tts.json, можно переопределить через OPENCLAW_TTS_PREFS или messages.tts.prefsPath). Сохраняемые поля:
enabledprovidermaxLength(порог для суммаризации; по умолчанию 1500 символов)summarize(по умолчаниюtrue)
Они переопределяют messages.tts.* для данного хоста.
Форматы вывода (фиксированные)
- Telegram: голосовое сообщение Opus (
opus_48000_64от ElevenLabs,opusот OpenAI).- 48 кГц / 64 кбит/с — хороший компромисс для голосовых сообщений и требуется для круглого пузырька.
- Другие каналы: MP3 (
mp3_44100_128от ElevenLabs,mp3от OpenAI).- 44.1 кГц / 128 кбит/с — баланс по умолчанию для чёткости речи.
- Edge TTS: использует
edge.outputFormat(по умолчаниюaudio-24khz-48kbitrate-mono-mp3).node-edge-ttsпринимаетoutputFormat, но не все форматы доступны в сервисе Edge. citeturn2search0- Значения форматов вывода следуют форматам вывода Microsoft Speech (включая Ogg/WebM Opus). citeturn1search0
- Telegram
sendVoiceпринимает OGG/MP3/M4A; используйте OpenAI/ElevenLabs, если вам нужны гарантированные голосовые сообщения Opus. citeturn1search1 - Если настроенный формат вывода Edge не срабатывает, OpenClaw повторяет попытку с MP3.
Форматы OpenAI/ElevenLabs фиксированы; Telegram ожидает Opus для UX голосовых сообщений.
Поведение авто-TTS
При включении OpenClaw:
- пропускает TTS, если ответ уже содержит медиа или директиву
MEDIA:. - пропускает очень короткие ответы (< 10 символов).
- суммаризирует длинные ответы, когда включено, используя
agents.defaults.model.primary(илиsummaryModel). - прикрепляет сгенерированное аудио к ответу.
Если ответ превышает maxLength и суммаризация выключена (или нет API-ключа для модели суммаризации), аудио пропускается и отправляется обычный текстовый ответ.
Диаграмма потока
Ответ -> TTS включен?
нет -> отправить текст
да -> есть медиа / MEDIA: / короткий?
да -> отправить текст
нет -> длина > лимит?
нет -> TTS -> прикрепить аудио
да -> суммаризация включена?
нет -> отправить текст
да -> суммаризировать (summaryModel или agents.defaults.model.primary)
-> TTS -> прикрепить аудио
Использование слэш-команд
Есть одна команда: /tts. Подробности о включении см. в Слэш-командах. Примечание для Discord: /tts — это встроенная команда Discord, поэтому OpenClaw регистрирует /voice как нативную команду там. Текст /tts ... всё равно работает.
/tts off
/tts always
/tts inbound
/tts tagged
/tts status
/tts provider openai
/tts limit 2000
/tts summary off
/tts audio Hello from OpenClaw
Примечания:
- Команды требуют авторизованного отправителя (правила белого списка/владельца всё ещё применяются).
commands.textили регистрация нативных команд должны быть включены.off|always|inbound|tagged— это переключатели для сессии (/tts on— это алиас для/tts always).limitиsummaryсохраняются в локальных настройках, а не в основном конфиге./tts audioгенерирует разовый аудиоответ (не включает TTS).
Инструмент агента
Инструмент tts преобразует текст в речь и возвращает путь MEDIA:. Когда результат совместим с Telegram, инструмент включает [[audio_as_voice]], чтобы Telegram отправил голосовой пузырёк.
RPC шлюза
Методы шлюза:
tts.statustts.enabletts.disabletts.converttts.setProvidertts.providers