Sintesi vocale (TTS)
OpenClaw può convertire le risposte in uscita in audio usando ElevenLabs, Google Gemini, Microsoft, MiniMax o OpenAI. Funziona ovunque OpenClaw possa inviare audio.Servizi supportati
- ElevenLabs (provider primario o di fallback)
- Google Gemini (provider primario o di fallback; usa Gemini API TTS)
- Microsoft (provider primario o di fallback; l’implementazione bundled corrente usa
node-edge-tts) - MiniMax (provider primario o di fallback; usa l’API T2A v2)
- OpenAI (provider primario o di fallback; usato anche per i riepiloghi)
Note sulla sintesi vocale Microsoft
Il provider bundled per la sintesi vocale Microsoft usa attualmente il servizio TTS neurale online di Microsoft Edge tramite la librerianode-edge-tts. È un
servizio ospitato (non locale), usa endpoint Microsoft e non richiede una chiave API.
node-edge-tts espone opzioni di configurazione vocale e formati di output, ma
non tutte le opzioni sono supportate dal servizio. La configurazione legacy e l’input
delle direttive che usa edge continuano a funzionare e vengono normalizzati in microsoft.
Poiché questo percorso usa un servizio web pubblico senza uno SLA o una quota pubblicati,
consideralo come best-effort. Se ti servono limiti garantiti e supporto, usa OpenAI
o ElevenLabs.
Chiavi facoltative
Se vuoi usare OpenAI, ElevenLabs, Google Gemini o MiniMax:ELEVENLABS_API_KEY(oXI_API_KEY)GEMINI_API_KEY(oGOOGLE_API_KEY)MINIMAX_API_KEYOPENAI_API_KEY
summaryModel configurato (o agents.defaults.model.primary),
quindi anche quel provider deve essere autenticato se abiliti i riepiloghi.
Link ai servizi
- Guida OpenAI Text-to-Speech
- Riferimento OpenAI Audio API
- ElevenLabs Text to Speech
- Autenticazione ElevenLabs
- API MiniMax T2A v2
- node-edge-tts
- Formati di output Microsoft Speech
È abilitato per impostazione predefinita?
No. L’auto‑TTS è disattivato per impostazione predefinita. Abilitalo nella configurazione conmessages.tts.auto oppure localmente con /tts on.
Quando messages.tts.provider non è impostato, OpenClaw sceglie il primo
provider vocale configurato nell’ordine di selezione automatica del registro.
Configurazione
La configurazione TTS si trova inmessages.tts in openclaw.json.
Lo schema completo è in Configurazione del Gateway.
Configurazione minima (abilitazione + provider)
OpenAI primario con fallback ElevenLabs
Microsoft primario (senza chiave API)
MiniMax primario
Google Gemini primario
messages.tts.providers.google.apiKey -> models.providers.google.apiKey ->
GEMINI_API_KEY -> GOOGLE_API_KEY.
Disattivare la sintesi vocale Microsoft
Limiti personalizzati + percorso prefs
Rispondere con audio solo dopo un messaggio vocale in ingresso
Disattivare il riepilogo automatico per le risposte lunghe
Note sui campi
auto: modalità auto‑TTS (off,always,inbound,tagged).inboundinvia audio solo dopo un messaggio vocale in ingresso.taggedinvia audio solo quando la risposta include direttive[[tts:key=value]]o un blocco[[tts:text]]...[[/tts:text]].
enabled: interruttore legacy (doctor lo migra inauto).mode:"final"(predefinito) o"all"(include risposte di strumenti/blocchi).provider: id del provider vocale, ad esempio"elevenlabs","google","microsoft","minimax"o"openai"(il fallback è automatico).- Se
providernon è impostato, OpenClaw usa il primo provider vocale configurato nell’ordine di selezione automatica del registro. - Il legacy
provider: "edge"continua a funzionare e viene normalizzato inmicrosoft. summaryModel: modello economico facoltativo per il riepilogo automatico; per impostazione predefinita usaagents.defaults.model.primary.- Accetta
provider/modelo un alias di modello configurato.
- Accetta
modelOverrides: consente al modello di emettere direttive TTS (attivato per impostazione predefinita).allowProviderèfalseper impostazione predefinita (il cambio di provider è opt-in).
providers.<id>: impostazioni gestite dal provider, indicizzate per id del provider vocale.- I blocchi provider legacy diretti (
messages.tts.openai,messages.tts.elevenlabs,messages.tts.microsoft,messages.tts.edge) vengono migrati automaticamente inmessages.tts.providers.<id>al caricamento. maxTextLength: limite rigido per l’input TTS (caratteri)./tts audiofallisce se viene superato.timeoutMs: timeout della richiesta (ms).prefsPath: sovrascrive il percorso JSON delle preferenze locali (provider/limite/riepilogo).- I valori
apiKeyusano come fallback le variabili d’ambiente (ELEVENLABS_API_KEY/XI_API_KEY,GEMINI_API_KEY/GOOGLE_API_KEY,MINIMAX_API_KEY,OPENAI_API_KEY). providers.elevenlabs.baseUrl: sovrascrive l’URL base dell’API ElevenLabs.providers.openai.baseUrl: sovrascrive l’endpoint OpenAI TTS.- Ordine di risoluzione:
messages.tts.providers.openai.baseUrl->OPENAI_TTS_BASE_URL->https://api.openai.com/v1 - I valori diversi da quello predefinito vengono trattati come endpoint TTS compatibili con OpenAI, quindi sono accettati nomi personalizzati di modello e voce.
- Ordine di risoluzione:
providers.elevenlabs.voiceSettings:stability,similarityBoost,style:0..1useSpeakerBoost:true|falsespeed:0.5..2.0(1.0 = normale)
providers.elevenlabs.applyTextNormalization:auto|on|offproviders.elevenlabs.languageCode: ISO 639-1 a 2 lettere (ad esempioen,de)providers.elevenlabs.seed: intero0..4294967295(determinismo best-effort)providers.minimax.baseUrl: sovrascrive l’URL base dell’API MiniMax (predefinitohttps://api.minimax.io, env:MINIMAX_API_HOST).providers.minimax.model: modello TTS (predefinitospeech-2.8-hd, env:MINIMAX_TTS_MODEL).providers.minimax.voiceId: identificatore della voce (predefinitoEnglish_expressive_narrator, env:MINIMAX_TTS_VOICE_ID).providers.minimax.speed: velocità di riproduzione0.5..2.0(predefinita 1.0).providers.minimax.vol: volume(0, 10](predefinito 1.0; deve essere maggiore di 0).providers.minimax.pitch: variazione di tonalità-12..12(predefinita 0).providers.google.model: modello Gemini TTS (predefinitogemini-3.1-flash-tts-preview).providers.google.voiceName: nome della voce predefinita Gemini (predefinitoKore; è accettato anchevoice).providers.google.baseUrl: sovrascrive l’URL base della Gemini API. È accettato solohttps://generativelanguage.googleapis.com.- Se
messages.tts.providers.google.apiKeyè omesso, TTS può riutilizzaremodels.providers.google.apiKeyprima del fallback alle variabili d’ambiente.
- Se
providers.microsoft.enabled: consente l’uso della sintesi vocale Microsoft (predefinitotrue; nessuna chiave API).providers.microsoft.voice: nome della voce neurale Microsoft (ad esempioen-US-MichelleNeural).providers.microsoft.lang: codice lingua (ad esempioen-US).providers.microsoft.outputFormat: formato di output Microsoft (ad esempioaudio-24khz-48kbitrate-mono-mp3).- Consulta i formati di output Microsoft Speech per i valori validi; non tutti i formati sono supportati dal trasporto bundled basato su Edge.
providers.microsoft.rate/providers.microsoft.pitch/providers.microsoft.volume: stringhe percentuali (ad esempio+10%,-5%).providers.microsoft.saveSubtitles: scrive sottotitoli JSON accanto al file audio.providers.microsoft.proxy: URL proxy per le richieste Microsoft speech.providers.microsoft.timeoutMs: sovrascrittura del timeout della richiesta (ms).edge.*: alias legacy per le stesse impostazioni Microsoft.
Override guidati dal modello (attivi per impostazione predefinita)
Per impostazione predefinita, il modello può emettere direttive TTS per una singola risposta. Quandomessages.tts.auto è tagged, queste direttive sono necessarie per attivare l’audio.
Quando è attivo, il modello può emettere direttive [[tts:...]] per sovrascrivere la voce
per una singola risposta, oltre a un blocco facoltativo [[tts:text]]...[[/tts:text]] per
fornire tag espressivi (risate, indicazioni di canto, ecc.) che devono comparire solo
nell’audio.
Le direttive provider=... vengono ignorate a meno che modelOverrides.allowProvider: true.
Esempio di payload di risposta:
provider(id del provider vocale registrato, per esempioopenai,elevenlabs,google,minimaxomicrosoft; richiedeallowProvider: true)voice(voce OpenAI),voiceName/voice_name/google_voice(voce Google), ovoiceId(ElevenLabs / MiniMax)model(modello OpenAI TTS, id del modello ElevenLabs o modello MiniMax) oppuregoogle_model(modello Google TTS)stability,similarityBoost,style,speed,useSpeakerBoostvol/volume(volume MiniMax, 0-10)pitch(tonalità MiniMax, da -12 a 12)applyTextNormalization(auto|on|off)languageCode(ISO 639-1)seed
Preferenze per utente
I comandi slash scrivono override locali inprefsPath (predefinito:
~/.openclaw/settings/tts.json, sovrascrivibile con OPENCLAW_TTS_PREFS o
messages.tts.prefsPath).
Campi memorizzati:
enabledprovidermaxLength(soglia del riepilogo; predefinita 1500 caratteri)summarize(predefinitotrue)
messages.tts.* per quell’host.
Formati di output (fissi)
- Feishu / Matrix / Telegram / WhatsApp: messaggio vocale Opus (
opus_48000_64da ElevenLabs,opusda OpenAI).- 48kHz / 64kbps è un buon compromesso per i messaggi vocali.
- Altri canali: MP3 (
mp3_44100_128da ElevenLabs,mp3da OpenAI).- 44.1kHz / 128kbps è il bilanciamento predefinito per la chiarezza del parlato.
- MiniMax: MP3 (modello
speech-2.8-hd, frequenza di campionamento 32kHz). Il formato nota vocale non è supportato nativamente; usa OpenAI o ElevenLabs per messaggi vocali Opus garantiti. - Google Gemini: Gemini API TTS restituisce PCM grezzo a 24kHz. OpenClaw lo incapsula come WAV per gli allegati audio e restituisce PCM direttamente per Talk/telefonia. Il formato nota vocale Opus nativo non è supportato da questo percorso.
- Microsoft: usa
microsoft.outputFormat(predefinitoaudio-24khz-48kbitrate-mono-mp3).- Il trasporto bundled accetta un
outputFormat, ma non tutti i formati sono disponibili dal servizio. - I valori del formato di output seguono i formati di output Microsoft Speech (inclusi Ogg/WebM Opus).
- Telegram
sendVoiceaccetta OGG/MP3/M4A; usa OpenAI/ElevenLabs se ti servono messaggi vocali Opus garantiti. - Se il formato di output Microsoft configurato fallisce, OpenClaw riprova con MP3.
- Il trasporto bundled accetta un
Comportamento auto-TTS
Quando è abilitato, OpenClaw:- salta il TTS se la risposta contiene già contenuti multimediali o una direttiva
MEDIA:. - salta le risposte molto brevi (< 10 caratteri).
- riepiloga le risposte lunghe quando abilitato usando
agents.defaults.model.primary(osummaryModel). - allega l’audio generato alla risposta.
maxLength e il riepilogo è disattivato (oppure non c’è alcuna chiave API per il
modello di riepilogo), l’audio
viene saltato e viene inviata la normale risposta testuale.
Diagramma di flusso
Utilizzo del comando slash
Esiste un solo comando:/tts.
Vedi Comandi slash per i dettagli sull’abilitazione.
Nota Discord: /tts è un comando integrato di Discord, quindi OpenClaw registra
/voice come comando nativo lì. Il testo /tts ... continua a funzionare.
- I comandi richiedono un mittente autorizzato (continuano ad applicarsi le regole di allowlist/proprietario).
commands.texto la registrazione dei comandi nativi devono essere abilitati.- La configurazione
messages.tts.autoaccettaoff|always|inbound|tagged. /tts onscrive la preferenza TTS locale sualways;/tts offla scrive suoff.- Usa la configurazione quando vuoi impostazioni predefinite
inboundotagged. limitesummaryvengono memorizzati nelle preferenze locali, non nella configurazione principale./tts audiogenera una risposta audio una tantum (non attiva il TTS)./tts statusinclude la visibilità del fallback per l’ultimo tentativo:- fallback riuscito:
Fallback: <primary> -> <used>piùAttempts: ... - errore:
Error: ...piùAttempts: ... - diagnostica dettagliata:
Attempt details: provider:outcome(reasonCode) latency
- fallback riuscito:
- Gli errori API di OpenAI ed ElevenLabs ora includono i dettagli dell’errore del provider analizzati e l’id richiesta (quando restituito dal provider), che viene mostrato negli errori/log TTS.
Strumento dell’agente
Lo strumentotts converte il testo in parlato e restituisce un allegato audio per
la consegna della risposta. Quando il canale è Feishu, Matrix, Telegram o WhatsApp,
l’audio viene consegnato come messaggio vocale invece che come allegato file.
RPC Gateway
Metodi Gateway:tts.statustts.enabletts.disabletts.converttts.setProvidertts.providers