文本转语音 (TTS)
OpenClaw 可以使用 ElevenLabs、Microsoft 或 OpenAI 将回复转换为音频。 在 OpenClaw 可以发送音频的任何地方,它都有效。支持的服务
- ElevenLabs(主要或备用提供商)
- Microsoft(主要或备用提供商;当前捆绑的实现使用
node-edge-tts,当没有 API 密钥时的默认选项) - OpenAI(主要或备用提供商;也用于生成摘要)
Microsoft 语音说明
捆绑的 Microsoft 语音提供商目前通过node-edge-tts 库使用 Microsoft Edge 的在线神经 TTS 服务。这是一种托管服务(非本地),使用 Microsoft 端点,不需要 API 密钥。
node-edge-tts 公开了语音配置选项和输出格式,但并非所有选项都受该服务支持。使用 edge 的旧版配置和指令输入仍然有效,并被规范化为 microsoft。
由于此路径是一个没有发布 SLA 或配额的公共 Web 服务,因此请将其视为尽力而为的服务。如果您需要保证的限值和支持,请使用 OpenAI
或 ElevenLabs。
可选密钥
如果您想要 OpenAI 或 ElevenLabs:ELEVENLABS_API_KEY(或XI_API_KEY)OPENAI_API_KEY
messages.tts.microsoft.enabled=false 或 messages.tts.edge.enabled=false 禁用)。
如果配置了多个提供商,则首先使用选定的提供商,其他提供商作为备用选项。
自动摘要使用配置的 summaryModel(或 agents.defaults.model.primary),
因此如果您启用摘要,该提供商也必须经过身份验证。
服务链接
默认情况下是否启用?
否。自动语音转换(Auto‑TTS)默认关闭。可以在配置中通过messages.tts.auto 启用,或者在每次会话中通过 /tts always(别名:/tts on)启用。
一旦开启 TTS,Microsoft 语音默认启用,并且在没有 OpenAI 或 ElevenLabs API 密钥可用时会自动使用。
配置
TTS 配置位于messages.tts 下的 openclaw.json 中。
完整的架构位于 Gateway(网关) 配置。
最小配置(启用 + 提供商)
OpenAI 为主,ElevenLabs 为后备
Microsoft 为主(无 API 密钥)
禁用 Microsoft 语音
自定义限制 + 偏好路径
仅在收到语音消息后以音频回复
对长回复禁用自动摘要
字段说明
auto:自动 TTS 模式(off、always、inbound、tagged)。inbound仅在收到语音消息后发送音频。tagged仅在回复包含[[tts]]标签时发送音频。
enabled:旧版切换开关(doctor 会将其迁移至auto)。mode:"final"(默认)或"all"(包括工具/区块回复)。provider:语音提供商 ID,例如"elevenlabs"、"microsoft"或"openai"(后备为自动)。- 如果未设置
provider,OpenClaw 优先使用openai(如果有密钥),然后是elevenlabs(如果有密钥), 否则为microsoft。 - 旧版
provider: "edge"仍然有效,并被规范化为microsoft。 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:覆盖 ElevenLabs API 基础 URL。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(尽力确定性)microsoft.enabled:允许使用 Microsoft 语音(默认true;无需 API 密钥)。microsoft.voice:Microsoft 神经语音名称(例如en-US-MichelleNeural)。microsoft.lang:语言代码(例如en-US)。microsoft.outputFormat:Microsoft 输出格式(例如audio-24khz-48kbitrate-mono-mp3)。- 有关有效值,请参阅 Microsoft 语音输出格式;并非所有格式都受附带的 Edge 支持传输层支持。
microsoft.rate/microsoft.pitch/microsoft.volume:百分比字符串(例如+10%、-5%)。microsoft.saveSubtitles:在音频文件旁边写入 JSON 字幕。microsoft.proxy:Microsoft 语音请求的代理 URL。microsoft.timeoutMs:请求超时覆盖(毫秒)。edge.*:相同 Microsoft 设置的旧别名。
模型驱动的覆盖(默认开启)
默认情况下,模型可以针对单次回复发出 TTS 指令。 当messages.tts.auto 为 tagged 时,必须使用这些指令才能触发音频。
启用后,模型可以发出 [[tts:...]] 指令来覆盖单次回复的语音,还可以发出可选的 [[tts:text]]...[[/tts:text]] 块,以提供应仅出现在音频中的表达性标签(笑声、歌唱提示等)。
除非 modelOverrides.allowProvider: true,否则将忽略 provider=... 指令。
示例回复负载:
provider(注册的语音提供商 ID,例如openai、elevenlabs或microsoft;需要allowProvider: true)voice(OpenAI voice) 或voiceId(ElevenLabs)model(OpenAI TTS 模型 or ElevenLabs 模型 id)stability、similarityBoost、style、speed、useSpeakerBoostapplyTextNormalization(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 语音消息(来自 ElevenLabs 的
opus_48000_64,来自 OpenAI 的opus)。- 48kHz / 64kbps 是语音消息的一个很好的折衷方案。
- 其他频道:MP3(来自 ElevenLabs 的
mp3_44100_128,来自 OpenAI 的mp3)。- 44.1kHz / 128kbps 是语音清晰度的默认平衡值。
- Microsoft:使用
microsoft.outputFormat(默认audio-24khz-48kbitrate-mono-mp3)。- 捆绑的传输接受
outputFormat,但并非所有格式都可以从该服务获得。 - 输出格式值遵循 Microsoft 语音输出格式(包括 Ogg/WebM Opus)。
- Telegram
sendVoice接受 OGG/MP3/M4A;如果您需要 确定的 Opus 语音消息,请使用 OpenAI/ElevenLabs。 - 如果配置的 Microsoft 输出格式失败,OpenClaw 将重试使用 MP3。
- 捆绑的传输接受
自动 TTS 行为
启用后,OpenClaw 会:- 如果回复已包含媒体或
MEDIA:指令,则跳过 TTS。 - 跳过非常短的回复(< 10 个字符)。
- 如果使用
agents.defaults.model.primary(或summaryModel)启用了摘要,则会汇总长回复。 - 将生成的音频附加到回复中。
maxLength 且摘要关闭(或没有摘要 API 的 API 密钥),
将跳过音频并发送正常文本回复。
流程图
斜杠命令用法
只有一个命令:/tts。
有关启用详情,请参阅 斜杠命令。
Discord 说明:/tts 是 Discord 的内置命令,因此 OpenClaw 在那里注册
/voice 作为原生命令。文本 /tts ... 仍然有效。
- 命令需要授权发送者(白名单/所有者规则仍然适用)。
- 必须启用
commands.text或原生命令注册。 off|always|inbound|tagged是基于会话的切换开关(/tts on是/tts always的别名)。limit和summary存储在本地首选项中,而非主配置中。/tts audio生成一次性音频回复(不会开启 TTS)。
Agent 工具
tts 工具将文本转换为语音并返回音频附件以
用于回复传递。当渠道是 Feishu、Matrix、Telegram 或 WhatsApp 时,
音频作为语音消息而不是文件附件发送。
Gateway(网关) RPC
Gateway(网关) 方法:tts.statustts.enabletts.disabletts.converttts.setProvidertts.providers
本页面源自 openclaw/openclaw,由 BeaversLab 翻译,遵循 MIT 协议 发布。