Text-to-speech(文字轉語音)
OpenClaw 可以使用 ElevenLabs、OpenAI 或 Edge TTS 將外送回覆轉換為音訊。 它適用於 OpenClaw 可以傳送音訊的任何地方;Telegram 會獲得圓形語音備忘錄氣泡。支援的服務
- ElevenLabs(主要或退備提供商)
- OpenAI(主要或退備提供商;也用於摘要)
- Edge TTS(主要或退備提供商;使用
node-edge-tts,無 API 金鑰時的預設)
Edge TTS 注意事項
Edge TTS 透過node-edge-tts 函式庫使用 Microsoft Edge 的線上神經 TTS 服務。它是託管服務(非本地),使用 Microsoft 的端點,不需要 API 金鑰。node-edge-tts 公開語音設定選項和輸出格式,但並非所有選項都受 Edge 服務支援。
由於 Edge TTS 是沒有已發布 SLA 或配額的公開網路服務,請將其視為盡力而為。若你需要保證的限制和支援,請使用 OpenAI 或 ElevenLabs。Microsoft 的 Speech REST API 記錄每個請求 10 分鐘的音訊限制;Edge TTS 未發布限制,因此假設類似或更低的限制。
選用金鑰
若你想要 OpenAI 或 ElevenLabs:ELEVENLABS_API_KEY(或XI_API_KEY)OPENAI_API_KEY
messages.tts.edge.enabled=false 停用)。
若設定了多個提供商,選定的提供商優先使用,其他提供商作為退備選項。
自動摘要使用設定的 summaryModel(或 agents.defaults.model.primary),因此若啟用摘要,該提供商也必須通過驗證。
服務連結
- OpenAI 文字轉語音指南
- OpenAI Audio API 參考
- ElevenLabs Text to Speech
- ElevenLabs 驗證
- node-edge-tts
- Microsoft Speech 輸出格式
預設啟用嗎?
否。自動 TTS 預設關閉。透過設定中的messages.tts.auto 或每個 session 使用 /tts always(別名:/tts on)啟用。
一旦 TTS 啟用,Edge TTS 就會啟用,並在沒有 OpenAI 或 ElevenLabs API 金鑰時自動使用。
設定
TTS 設定位於openclaw.json 中的 messages.tts 下。
完整 schema 請見 Gateway 設定。
最少設定(啟用 + 提供商)
OpenAI 主要搭配 ElevenLabs 退備
Edge TTS 主要(無 API 金鑰)
停用 Edge TTS
自訂限制 + prefs 路徑
僅在收到語音備忘錄後以音訊回覆
停用長回覆的自動摘要
欄位說明
auto:自動 TTS 模式(off、always、inbound、tagged)。inbound僅在收到語音備忘錄後傳送音訊。tagged僅在回覆包含[[tts]]標籤時傳送音訊。
enabled:舊版開關(doctor 會將其遷移至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:覆蓋本地 prefs 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(盡力確定性)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:Edge TTS 請求的代理 URL。edge.timeoutMs:請求逾時覆蓋(毫秒)。
模型驅動的覆蓋(預設開啟)
預設情況下,模型可以為單一回覆發出 TTS 指令。 當messages.tts.auto 為 tagged 時,這些指令是觸發音訊的必要條件。
啟用後,模型可以發出 [[tts:...]] 指令來覆蓋單一回覆的語音,加上可選的 [[tts:text]]...[[/tts:text]] 區塊,提供僅應出現在音訊中的表達標籤(笑聲、歌唱提示等)。
除非設定 modelOverrides.allowProvider: true,否則忽略 provider=... 指令。
回覆酬載範例:
provider(openai|elevenlabs|edge,需要allowProvider: true)voice(OpenAI 語音)或voiceId(ElevenLabs)model(OpenAI TTS 模型或 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.*。
輸出格式(固定)
- Telegram:Opus 語音備忘錄(ElevenLabs 的
opus_48000_64,OpenAI 的opus)。- 48kHz / 64kbps 是語音備忘錄的良好平衡點,且圓形氣泡需要此格式。
- 其他頻道:MP3(ElevenLabs 的
mp3_44100_128,OpenAI 的mp3)。- 44.1kHz / 128kbps 是語音清晰度的預設平衡點。
- Edge TTS:使用
edge.outputFormat(預設audio-24khz-48kbitrate-mono-mp3)。node-edge-tts接受outputFormat,但並非所有格式都受 Edge 服務提供。- 輸出格式值遵循 Microsoft Speech 輸出格式(包含 Ogg/WebM Opus)。
- Telegram
sendVoice接受 OGG/MP3/M4A;若需要保證的 Opus 語音備忘錄請使用 OpenAI/ElevenLabs。 - 若設定的 Edge 輸出格式失敗,OpenClaw 以 MP3 重試。
自動 TTS 行為
啟用時,OpenClaw:- 若回覆已包含媒體或
MEDIA:指令,則跳過 TTS。 - 跳過非常短的回覆(< 10 字元)。
- 啟用時,使用
agents.defaults.model.primary(或summaryModel)摘要長回覆。 - 將生成的音訊附加至回覆。
maxLength 且摘要已關閉(或摘要模型無 API 金鑰),則跳過音訊並傳送正常文字回覆。
流程圖
斜線指令使用
只有一個指令:/tts。
啟用詳情請見 斜線指令。
Discord 注意:/tts 是 Discord 的內建指令,因此 OpenClaw 在 Discord 上將 /voice 註冊為原生指令。文字 /tts ... 仍然有效。
- 指令需要授權的傳送者(允許清單/擁有者規則仍適用)。
- 必須啟用
commands.text或原生指令註冊。 off|always|inbound|tagged是按 session 的切換(/tts on是/tts always的別名)。limit和summary儲存在本地 prefs 中,不在主設定中。/tts audio產生一次性音訊回覆(不切換 TTS 啟用)。
Agent 工具
tts 工具將文字轉換為語音並返回 MEDIA: 路徑。當結果與 Telegram 相容時,工具包含 [[audio_as_voice]],讓 Telegram 傳送語音氣泡。
Gateway RPC
Gateway 方法:tts.statustts.enabletts.disabletts.converttts.setProvidertts.providers