文本转语音输出和 Auto-TTS 行为
输出格式¶
TTS 语音投递由通道能力驱动。通道插件会声明语音风格的 TTS 是应要求提供商使用原生 voice-note 目标,还是保持常规 audio-file 合成,以及通道在发送前是否会对非原生输出进行转码。
来自 agent 工具和 /tts 命令的一次性语音请求使用与自动回复相同的通道投递规则。
Telegram 还声明支持带字幕的最终 TTS。当 tts.mode: "final" 且 Auto-TTS 设置为 always(或符合条件的 inbound 模式)时,流式文本会被保留,直到合成完成,然后作为语音消息字幕发送。超出 Telegram 字幕限制的文本会作为普通文本消息跟随语音消息发送。如果合成或已确认的发送前投递步骤失败,OpenClaw 会改为发送可见文本。tagged 模式保持其常规流式行为,[[tts:text]] 块内的文本仍仅作为音频。
合成完成后,OpenClaw 会将批量 TTS 输出持久化到媒体存储中的 tool-speech-synthesis 下。回复会使用该稳定的媒体路径,而不是提供商临时文件,常规媒体维护会清理过期输出。本地 CLI 提供商在 OpenClaw 导入完整字节之前,仍可使用 {{OutputPath}} 作为临时空间。有关内联播放器格式和限制,请参阅 媒体播放。
| 目标 | 格式 |
|---|---|
| Feishu / Matrix / Telegram / WhatsApp | 语音消息回复优先使用 Opus(ElevenLabs 的 opus_48000_64,OpenAI 的 opus)。48 kHz / 64 kbps 在清晰度和体积之间取得平衡。 |
| 其他通道 | MP3(ElevenLabs 的 mp3_44100_128,OpenAI 的 mp3)。44.1 kHz / 128 kbps 是语音的默认平衡设置。 |
| Talk / 电话 | 提供商原生 PCM(Inworld 22050 Hz,Google 24 kHz),或 Gradium 用于电话的 ulaw_8000。 |
按提供商说明:
- Feishu / WhatsApp 转码: 当语音消息回复以 MP3/WebM/WAV/M4A 或其他可能的音频文件形式到达时,通道插件会在发送原生语音消息前,使用
ffmpeg(libopus,64 kbps)将其转码为 48 kHz Ogg/Opus。WhatsApp 会通过 Baileysaudio负载发送结果,并设置ptt: true和audio/ogg; codecs=opus。转码失败时:Feishu 会捕获错误并回退为将原始文件作为普通附件发送;WhatsApp 没有回退机制,因此发送本身会失败,而不是发布不兼容的 PTT 负载。 - MiniMax: 普通音频附件使用 MP3(
speech-2.8-hd模型,32 kHz 采样率);对于通道声明的语音消息目标,使用ffmpeg转码为 48 kHz Opus。 - Xiaomi MiMo: 默认使用 MP3,配置后可使用 WAV;对于通道声明的语音消息目标,使用
ffmpeg转码为 48 kHz Opus。 - 本地 CLI: 使用配置的
outputFormat。语音消息目标会转换为 Ogg/Opus,电话输出会使用ffmpeg转换为原始 16 kHz 单声道 PCM。 - Google Gemini: 返回原始 24 kHz PCM。OpenClaw 会将其封装为 WAV 用于音频附件,为语音消息目标转码为 48 kHz Opus,并为 Talk/电话直接返回 PCM。
- Gradium: 音频附件使用 WAV,语音消息目标使用 Opus,电话使用 8 kHz 的
ulaw_8000。 - Inworld: 普通音频附件使用 MP3,语音消息目标使用原生
OGG_OPUS,Talk/电话使用 22050 Hz 的原始PCM。 - xAI: 默认使用 MP3;音频文件合成在缓冲和流式输出中均可使用
mp3、wav、pcm、mulaw或alaw。语音消息目标在流式和缓冲回退中使用 MP3,因为 xAI 的pcm、mulaw和alaw输出是无文件头的原始音频。缓冲合成使用 xAI 的批量 REST/v1/tts端点;textToSpeechStream使用原生wss://api.x.ai/v1/tts。这不是实时语音契约。不支持原生 Opus 语音消息格式。 - Microsoft: 使用
microsoft.outputFormat(默认audio-24khz-48kbitrate-mono-mp3)。 - 捆绑的传输接受
outputFormat,但并非所有格式都可供该服务使用。 - 输出格式值遵循 Microsoft Speech 输出格式(包括 Ogg/WebM Opus)。
- Telegram
sendVoice接受 OGG/MP3/M4A;如果需要保证 Opus 语音消息,请使用 OpenAI/ElevenLabs。 - 如果配置的 Microsoft 输出格式失败,OpenClaw 会使用 MP3 重试。
- 当未设置显式语音覆盖且使用默认英语语音时,如果回复文本以 CJK 为主,OpenClaw 会自动切换到中文神经语音(
zh-CN-XiaoxiaoNeural,zh-CN区域设置)。
OpenAI 和 ElevenLabs 会按通道选择上述列出的输出格式。显式的 OpenAI responseFormat 会覆盖该选择;与语音消息不兼容的格式可能作为音频文件投递,或由支持转换的通道进行转码。
Auto-TTS 行为¶
当启用 tts.auto 时,OpenClaw:
- 保持终端斜杠命令和插件命令回复仅文本,包括在
auto: "always"下。诸如/tts audio和/tts latest的显式语音请求仍会发送音频。继续进入助手运行的命令会保持助手回答的常规 auto-TTS 行为。 - 如果回复已包含结构化媒体,则跳过 TTS。
- 跳过非常短的回复(少于 10 个字符)。
- 跳过以围栏代码为主的回复;内联代码和周围文本仍符合语音条件。
- 当启用摘要时,使用
summaryModel(或agents.defaults.model.primary)对长回复进行摘要。 摘要模型访问使用回复代理的凭据和所有权。 - 将生成的音频附加到回复中。
- 在
mode: "final"下,流式文本完成后发送 TTS。不支持带字幕最终消息的通道会收到仅音频补充;Telegram 会将字幕限制内的文本放在语音消息上,并将超出部分作为后续文本发送。生成的媒体会经过与常规回复附件相同的通道媒体规范化处理。
如果回复超过 maxLength,OpenClaw 绝不会直接跳过音频:
- 摘要开启(默认)且摘要模型可用:将文本摘要为大约
maxLength个字符, 然后合成摘要。 - 摘要关闭、摘要失败,或摘要模型没有可用的 API 密钥:将文本截断为
maxLength个字符, 并合成截断后的文本。
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 cl/openclaw