Vai al contenuto principale

Sintesi vocale (TTS)

OpenClaw può convertire le risposte in uscita in audio usando ElevenLabs, Microsoft, MiniMax o OpenAI. Funziona ovunque OpenClaw possa inviare audio.

Servizi supportati

  • ElevenLabs (provider primario o di fallback)
  • Microsoft (provider primario o di fallback; l’implementazione bundled attuale 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 di sintesi vocale Microsoft bundled attualmente usa il servizio TTS neurale online di Microsoft Edge tramite la libreria node-edge-tts. È un servizio hosted (non locale), usa endpoint Microsoft e non richiede una chiave API. node-edge-tts espone opzioni di configurazione della sintesi e formati di output, ma non tutte le opzioni sono supportate dal servizio. La configurazione legacy e l’input direttiva che usa edge continuano a funzionare e vengono normalizzati in microsoft. Poiché questo percorso è un servizio web pubblico senza SLA o quota pubblicati, consideralo best-effort. Se hai bisogno di limiti garantiti e supporto, usa OpenAI o ElevenLabs.

Chiavi facoltative

Se vuoi usare OpenAI, ElevenLabs o MiniMax:
  • ELEVENLABS_API_KEY (o XI_API_KEY)
  • MINIMAX_API_KEY
  • OPENAI_API_KEY
La sintesi vocale Microsoft non richiede una chiave API. Se sono configurati più provider, viene usato prima il provider selezionato e gli altri diventano opzioni di fallback. Il riepilogo automatico usa il summaryModel configurato (o agents.defaults.model.primary), quindi anche quel provider deve essere autenticato se abiliti i riepiloghi.

È abilitato per impostazione predefinita?

No. L’auto‑TTS è disattivato per impostazione predefinita. Abilitalo nella configurazione con messages.tts.auto o per sessione con /tts always (alias: /tts on). Quando messages.tts.provider non è impostato, OpenClaw sceglie il primo provider di sintesi vocale configurato nell’ordine di selezione automatica del registro.

Configurazione

La configurazione TTS si trova sotto messages.tts in openclaw.json. Lo schema completo è in Configurazione del Gateway.

Configurazione minima (abilitazione + provider)

{
  messages: {
    tts: {
      auto: "always",
      provider: "elevenlabs",
    },
  },
}

OpenAI primario con fallback ElevenLabs

{
  messages: {
    tts: {
      auto: "always",
      provider: "openai",
      summaryModel: "openai/gpt-4.1-mini",
      modelOverrides: {
        enabled: true,
      },
      providers: {
        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,
          },
        },
      },
    },
  },
}

Microsoft primario (nessuna chiave API)

{
  messages: {
    tts: {
      auto: "always",
      provider: "microsoft",
      providers: {
        microsoft: {
          enabled: true,
          voice: "en-US-MichelleNeural",
          lang: "en-US",
          outputFormat: "audio-24khz-48kbitrate-mono-mp3",
          rate: "+10%",
          pitch: "-5%",
        },
      },
    },
  },
}

MiniMax primario

{
  messages: {
    tts: {
      auto: "always",
      provider: "minimax",
      providers: {
        minimax: {
          apiKey: "minimax_api_key",
          baseUrl: "https://api.minimax.io",
          model: "speech-2.8-hd",
          voiceId: "English_expressive_narrator",
          speed: 1.0,
          vol: 1.0,
          pitch: 0,
        },
      },
    },
  },
}

Disabilitare la sintesi vocale Microsoft

{
  messages: {
    tts: {
      providers: {
        microsoft: {
          enabled: false,
        },
      },
    },
  },
}

Limiti personalizzati + percorso prefs

{
  messages: {
    tts: {
      auto: "always",
      maxTextLength: 4000,
      timeoutMs: 30000,
      prefsPath: "~/.openclaw/settings/tts.json",
    },
  },
}

Rispondere con audio solo dopo un messaggio vocale in entrata

{
  messages: {
    tts: {
      auto: "inbound",
    },
  },
}

Disabilitare il riepilogo automatico per risposte lunghe

{
  messages: {
    tts: {
      auto: "always",
    },
  },
}
Quindi esegui:
/tts summary off

Note sui campi

  • auto: modalità auto‑TTS (off, always, inbound, tagged).
    • inbound invia audio solo dopo un messaggio vocale in entrata.
    • tagged invia audio solo quando la risposta include tag [[tts]].
  • enabled: interruttore legacy (doctor lo migra in auto).
  • mode: "final" (predefinito) o "all" (include risposte di strumenti/blocchi).
  • provider: ID del provider di sintesi vocale come "elevenlabs", "microsoft", "minimax" o "openai" (il fallback è automatico).
  • Se provider non è impostato, OpenClaw usa il primo provider di sintesi vocale configurato nell’ordine di selezione automatica del registro.
  • Il legacy provider: "edge" continua a funzionare e viene normalizzato in microsoft.
  • summaryModel: modello economico facoltativo per il riepilogo automatico; il valore predefinito è agents.defaults.model.primary.
    • Accetta provider/model o un alias di modello configurato.
  • modelOverrides: consente al modello di emettere direttive TTS (attivo per impostazione predefinita).
    • allowProvider è false per impostazione predefinita (il cambio provider è facoltativo).
  • providers.<id>: impostazioni gestite dal provider, con chiave sull’ID del provider di sintesi vocale.
  • I blocchi provider legacy diretti (messages.tts.openai, messages.tts.elevenlabs, messages.tts.microsoft, messages.tts.edge) vengono migrati automaticamente in messages.tts.providers.<id> al caricamento.
  • maxTextLength: limite rigido per l’input TTS (caratteri). /tts audio fallisce se viene superato.
  • timeoutMs: timeout della richiesta (ms).
  • prefsPath: sovrascrive il percorso JSON locale delle preferenze (provider/limite/riepilogo).
  • I valori apiKey usano come fallback le variabili d’ambiente (ELEVENLABS_API_KEY/XI_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 non predefiniti vengono trattati come endpoint TTS compatibili con OpenAI, quindi sono accettati nomi personalizzati di modello e voce.
  • providers.elevenlabs.voiceSettings:
    • stability, similarityBoost, style: 0..1
    • useSpeakerBoost: true|false
    • speed: 0.5..2.0 (1.0 = normale)
  • providers.elevenlabs.applyTextNormalization: auto|on|off
  • providers.elevenlabs.languageCode: ISO 639-1 a 2 lettere (per esempio en, de)
  • providers.elevenlabs.seed: intero 0..4294967295 (determinismo best-effort)
  • providers.minimax.baseUrl: sovrascrive l’URL base dell’API MiniMax (predefinito https://api.minimax.io, env: MINIMAX_API_HOST).
  • providers.minimax.model: modello TTS (predefinito speech-2.8-hd, env: MINIMAX_TTS_MODEL).
  • providers.minimax.voiceId: identificatore voce (predefinito English_expressive_narrator, env: MINIMAX_TTS_VOICE_ID).
  • providers.minimax.speed: velocità di riproduzione 0.5..2.0 (predefinito 1.0).
  • providers.minimax.vol: volume (0, 10] (predefinito 1.0; deve essere maggiore di 0).
  • providers.minimax.pitch: variazione di tono -12..12 (predefinito 0).
  • providers.microsoft.enabled: consente l’uso della sintesi vocale Microsoft (predefinito true; nessuna chiave API).
  • providers.microsoft.voice: nome della voce neurale Microsoft (per esempio en-US-MichelleNeural).
  • providers.microsoft.lang: codice lingua (per esempio en-US).
  • providers.microsoft.outputFormat: formato di output Microsoft (per esempio audio-24khz-48kbitrate-mono-mp3).
    • Vedi 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 (per esempio +10%, -5%).
  • providers.microsoft.saveSubtitles: scrive sottotitoli JSON accanto al file audio.
  • providers.microsoft.proxy: URL proxy per le richieste di sintesi vocale Microsoft.
  • providers.microsoft.timeoutMs: override del timeout 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. Quando messages.tts.auto è tagged, queste direttive sono necessarie per attivare l’audio. Quando è abilitato, il modello può emettere direttive [[tts:...]] per sovrascrivere la voce per una singola risposta, più 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. Payload di risposta di esempio:
Here you go.

[[tts:voiceId=pMsXgVXv3BLzUgSXRplE model=eleven_v3 speed=1.1]]
[[tts:text]](laughs) Read the song once more.[[/tts:text]]
Chiavi di direttiva disponibili (quando abilitate):
  • provider (ID provider di sintesi vocale registrato, per esempio openai, elevenlabs, minimax o microsoft; richiede allowProvider: true)
  • voice (voce OpenAI) o voiceId (ElevenLabs / MiniMax)
  • model (modello OpenAI TTS, ID modello ElevenLabs o modello MiniMax)
  • stability, similarityBoost, style, speed, useSpeakerBoost
  • vol / volume (volume MiniMax, 0-10)
  • pitch (tono MiniMax, da -12 a 12)
  • applyTextNormalization (auto|on|off)
  • languageCode (ISO 639-1)
  • seed
Disabilita tutti gli override del modello:
{
  messages: {
    tts: {
      modelOverrides: {
        enabled: false,
      },
    },
  },
}
Allowlist facoltativa (abilita il cambio provider mantenendo configurabili gli altri controlli):
{
  messages: {
    tts: {
      modelOverrides: {
        enabled: true,
        allowProvider: true,
        allowSeed: false,
      },
    },
  },
}

Preferenze per utente

I comandi slash scrivono override locali in prefsPath (predefinito: ~/.openclaw/settings/tts.json, sovrascrivibile con OPENCLAW_TTS_PREFS o messages.tts.prefsPath). Campi memorizzati:
  • enabled
  • provider
  • maxLength (soglia di riepilogo; predefinito 1500 caratteri)
  • summarize (predefinito true)
Questi campi sovrascrivono messages.tts.* per quell’host.

Formati di output (fissi)

  • Feishu / Matrix / Telegram / WhatsApp: messaggio vocale Opus (opus_48000_64 da ElevenLabs, opus da OpenAI).
    • 48kHz / 64kbps è un buon compromesso per i messaggi vocali.
  • Altri canali: MP3 (mp3_44100_128 da ElevenLabs, mp3 da OpenAI).
    • 44.1kHz / 128kbps è il bilanciamento predefinito per la chiarezza del parlato.
  • MiniMax: MP3 (speech-2.8-hd, frequenza di campionamento 32kHz). Il formato nota vocale non è supportato nativamente; usa OpenAI o ElevenLabs per messaggi vocali Opus garantiti.
  • Microsoft: usa microsoft.outputFormat (predefinito audio-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 sendVoice accetta OGG/MP3/M4A; usa OpenAI/ElevenLabs se hai bisogno di messaggi vocali Opus garantiti.
    • Se il formato di output Microsoft configurato fallisce, OpenClaw riprova con MP3.
I formati di output OpenAI/ElevenLabs sono fissi per canale (vedi sopra).

Comportamento auto-TTS

Quando è abilitato, OpenClaw:
  • salta il TTS se la risposta contiene già media o una direttiva MEDIA:.
  • salta le risposte molto brevi (< 10 caratteri).
  • riassume le risposte lunghe quando abilitato usando agents.defaults.model.primary (o summaryModel).
  • allega l’audio generato alla risposta.
Se la risposta supera maxLength e il riepilogo è disattivato (o manca una chiave API per il modello di riepilogo), l’audio viene saltato e viene inviata la normale risposta testuale.

Diagramma di flusso

Reply -> TTS enabled?
  no  -> invia testo
  yes -> ha media / MEDIA: / è breve?
          yes -> invia testo
          no  -> lunghezza > limite?
                   no  -> TTS -> allega audio
                   yes -> riepilogo abilitato?
                            no  -> invia testo
                            yes -> riepiloga (summaryModel o agents.defaults.model.primary)
                                      -> TTS -> allega audio

Uso dei comandi slash

Esiste un solo comando: /tts. Vedi Comandi slash per i dettagli di abilitazione. Nota Discord: /tts è un comando Discord integrato, quindi OpenClaw registra /voice come comando nativo lì. Il testo /tts ... continua a funzionare.
/tts off
/tts always
/tts inbound
/tts tagged
/tts status
/tts provider openai
/tts limit 2000
/tts summary off
/tts audio Hello from OpenClaw
Note:
  • I comandi richiedono un mittente autorizzato (continuano ad applicarsi le regole allowlist/proprietario).
  • commands.text o la registrazione del comando nativo devono essere abilitati.
  • off|always|inbound|tagged sono interruttori per sessione (/tts on è un alias di /tts always).
  • limit e summary vengono memorizzati nelle preferenze locali, non nella configurazione principale.
  • /tts audio genera una risposta audio una tantum (non abilita/disabilita il TTS).
  • /tts status include 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
  • Gli errori API OpenAI ed ElevenLabs ora includono dettagli dell’errore provider analizzati e request id (quando restituito dal provider), che vengono mostrati negli errori/log TTS.

Strumento agente

Lo strumento tts converte il testo in sintesi vocale e restituisce un allegato audio per la consegna della risposta. Quando il canale è Feishu, Matrix, Telegram o WhatsApp, l’audio viene recapitato come messaggio vocale invece che come allegato file.

RPC del Gateway

Metodi Gateway:
  • tts.status
  • tts.enable
  • tts.disable
  • tts.convert
  • tts.setProvider
  • tts.providers