Tools

Sintesi vocale

OpenClaw può convertire le risposte in uscita in audio tramite 14 provider vocali e consegnare messaggi vocali nativi su Feishu, Matrix, Telegram e WhatsApp, allegati audio ovunque altrove, e flussi PCM/Ulaw per telefonia e Talk.

TTS è la metà di output vocale della modalità stt-tts di Talk. Le sessioni Talk realtime native del provider sintetizzano il parlato all'interno del provider realtime invece di chiamare questo percorso TTS, mentre le sessioni transcription non sintetizzano una risposta vocale dell'assistente.

Avvio rapido

  • Scegli un provider

    OpenAI ed ElevenLabs sono le opzioni ospitate più affidabili. Microsoft e Local CLI funzionano senza una chiave API. Consulta la matrice dei provider per l'elenco completo.

  • Imposta la chiave API

    Esporta la variabile d'ambiente per il tuo provider (per esempio OPENAI_API_KEY, ELEVENLABS_API_KEY). Microsoft e Local CLI non richiedono alcuna chiave.

  • Abilita nella configurazione

    Imposta messages.tts.auto: "always" e messages.tts.provider:

    {
      messages: {
        tts: {
          auto: "always",
          provider: "elevenlabs",
        },
      },
    }
    
  • Provalo in chat

    /tts status mostra lo stato corrente. /tts audio Hello from OpenClaw invia una risposta audio una tantum.

  • Provider supportati

    Provider Autenticazione Note
    Azure Speech AZURE_SPEECH_KEY + AZURE_SPEECH_REGION (anche AZURE_SPEECH_API_KEY, SPEECH_KEY, SPEECH_REGION) Output nativo per note vocali Ogg/Opus e telefonia.
    DeepInfra DEEPINFRA_API_KEY TTS compatibile con OpenAI. Predefinito su hexgrad/Kokoro-82M.
    ElevenLabs ELEVENLABS_API_KEY o XI_API_KEY Clonazione vocale, multilingue, deterministico tramite seed.
    Google Gemini GEMINI_API_KEY o GOOGLE_API_KEY TTS API Gemini; consapevole della persona tramite promptTemplate: "audio-profile-v1".
    Gradium GRADIUM_API_KEY Output per note vocali e telefonia.
    Inworld INWORLD_API_KEY API TTS in streaming. Note vocali Opus native e telefonia PCM.
    Local CLI nessuna Esegue un comando TTS locale configurato.
    Microsoft nessuna TTS neurale pubblico Edge tramite node-edge-tts. Best-effort, senza SLA.
    MiniMax MINIMAX_API_KEY (o Piano Token: MINIMAX_OAUTH_TOKEN, MINIMAX_CODE_PLAN_KEY, MINIMAX_CODING_API_KEY) API T2A v2. Predefinito su speech-2.8-hd.
    OpenAI OPENAI_API_KEY Usato anche per il riepilogo automatico; supporta instructions della persona.
    OpenRouter OPENROUTER_API_KEY (può riutilizzare models.providers.openrouter.apiKey) Modello predefinito hexgrad/kokoro-82m.
    Volcengine VOLCENGINE_TTS_API_KEY o BYTEPLUS_SEED_SPEECH_API_KEY (AppID/token legacy: VOLCENGINE_TTS_APPID/_TOKEN) API HTTP BytePlus Seed Speech.
    Vydra VYDRA_API_KEY Provider condiviso per immagini, video e voce.
    xAI XAI_API_KEY TTS batch xAI. La nota vocale Opus nativa non è supportata.
    Xiaomi MiMo XIAOMI_API_KEY TTS MiMo tramite completamenti chat Xiaomi.

    Se sono configurati più provider, quello selezionato viene usato per primo e gli altri sono opzioni di fallback. Il riepilogo automatico usa summaryModel (o agents.defaults.model.primary), quindi anche quel provider deve essere autenticato se mantieni abilitati i riepiloghi.

    Configurazione

    La configurazione TTS si trova sotto messages.tts in ~/.openclaw/openclaw.json. Scegli un preset e adatta il blocco del provider:

    Azure Speech

    {
    messages: {
    tts: {
      auto: "always",
      provider: "azure-speech",
      providers: {
        "azure-speech": {
          apiKey: "${AZURE_SPEECH_KEY}",
          region: "eastus",
          voice: "en-US-JennyNeural",
          lang: "en-US",
          outputFormat: "audio-24khz-48kbitrate-mono-mp3",
          voiceNoteOutputFormat: "ogg-24khz-16bit-mono-opus",
        },
      },
    },
    },
    }
    

    ElevenLabs

    {
    messages: {
    tts: {
      auto: "always",
      provider: "elevenlabs",
      providers: {
        elevenlabs: {
          apiKey: "${ELEVENLABS_API_KEY}",
          model: "eleven_multilingual_v2",
          voiceId: "EXAVITQu4vr4xnSDxMaL",
        },
      },
    },
    },
    }
    

    Google Gemini

    {
    messages: {
    tts: {
      auto: "always",
      provider: "google",
      providers: {
        google: {
          apiKey: "${GEMINI_API_KEY}",
          model: "gemini-3.1-flash-tts-preview",
          voiceName: "Kore",
          // Optional natural-language style prompts:
          // audioProfile: "Speak in a calm, podcast-host tone.",
          // speakerName: "Alex",
        },
      },
    },
    },
    }
    

    Gradium

    {
    messages: {
    tts: {
      auto: "always",
      provider: "gradium",
      providers: {
        gradium: {
          apiKey: "${GRADIUM_API_KEY}",
          voiceId: "YTpq7expH9539ERJ",
        },
      },
    },
    },
    }
    

    Inworld

    {
    messages: {
    tts: {
      auto: "always",
      provider: "inworld",
      providers: {
        inworld: {
          apiKey: "${INWORLD_API_KEY}",
          modelId: "inworld-tts-1.5-max",
          voiceId: "Sarah",
          temperature: 0.7,
        },
      },
    },
    },
    }
    

    Local CLI

    {
    messages: {
    tts: {
      auto: "always",
      provider: "tts-local-cli",
      providers: {
        "tts-local-cli": {
          command: "say",
          args: ["-o", "{{OutputPath}}", "{{Text}}"],
          outputFormat: "wav",
          timeoutMs: 120000,
        },
      },
    },
    },
    }
    

    Microsoft (senza chiave)

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

    MiniMax

    {
    messages: {
    tts: {
      auto: "always",
      provider: "minimax",
      providers: {
        minimax: {
          apiKey: "${MINIMAX_API_KEY}",
          model: "speech-2.8-hd",
          voiceId: "English_expressive_narrator",
          speed: 1.0,
          vol: 1.0,
          pitch: 0,
        },
      },
    },
    },
    }
    

    OpenAI + ElevenLabs

    {
    messages: {
    tts: {
      auto: "always",
      provider: "openai",
      summaryModel: "openai/gpt-4.1-mini",
      modelOverrides: { enabled: true },
      providers: {
        openai: {
          apiKey: "${OPENAI_API_KEY}",
          model: "gpt-4o-mini-tts",
          voice: "alloy",
        },
        elevenlabs: {
          apiKey: "${ELEVENLABS_API_KEY}",
          model: "eleven_multilingual_v2",
          voiceId: "EXAVITQu4vr4xnSDxMaL",
          voiceSettings: { stability: 0.5, similarityBoost: 0.75, style: 0.0, useSpeakerBoost: true, speed: 1.0 },
          applyTextNormalization: "auto",
          languageCode: "en",
        },
      },
    },
    },
    }
    

    OpenRouter

    {
    messages: {
    tts: {
      auto: "always",
      provider: "openrouter",
      providers: {
        openrouter: {
          apiKey: "${OPENROUTER_API_KEY}",
          model: "hexgrad/kokoro-82m",
          voice: "af_alloy",
          responseFormat: "mp3",
        },
      },
    },
    },
    }
    

    Volcengine

    {
    messages: {
    tts: {
      auto: "always",
      provider: "volcengine",
      providers: {
        volcengine: {
          apiKey: "${VOLCENGINE_TTS_API_KEY}",
          resourceId: "seed-tts-1.0",
          voice: "en_female_anna_mars_bigtts",
        },
      },
    },
    },
    }
    

    xAI

    {
    messages: {
    tts: {
      auto: "always",
      provider: "xai",
      providers: {
        xai: {
          apiKey: "${XAI_API_KEY}",
          voiceId: "eve",
          language: "en",
          responseFormat: "mp3",
        },
      },
    },
    },
    }
    

    Xiaomi MiMo

    {
    messages: {
    tts: {
      auto: "always",
      provider: "xiaomi",
      providers: {
        xiaomi: {
          apiKey: "${XIAOMI_API_KEY}",
          model: "mimo-v2.5-tts",
          voice: "mimo_default",
          format: "mp3",
        },
      },
    },
    },
    }
    

    Override vocali per agente

    Usa agents.list[].tts quando un agente deve parlare con un provider, una voce, un modello, una persona o una modalità Auto-TTS diversi. Il blocco agente esegue un deep merge sopra messages.tts, quindi le credenziali del provider possono restare nella configurazione globale del provider:

    {
      messages: {
        tts: {
          auto: "always",
          provider: "elevenlabs",
          providers: {
            elevenlabs: { apiKey: "${ELEVENLABS_API_KEY}", model: "eleven_multilingual_v2" },
          },
        },
      },
      agents: {
        list: [
          {
            id: "reader",
            tts: {
              providers: {
                elevenlabs: { voiceId: "EXAVITQu4vr4xnSDxMaL" },
              },
            },
          },
        ],
      },
    }
    

    Per fissare una persona per agente, imposta agents.list[].tts.persona insieme alla configurazione del provider: sovrascrive la messages.tts.persona globale solo per quell'agente.

    Ordine di precedenza per risposte automatiche, /tts audio, /tts status e lo strumento agente tts:

    1. messages.tts
    2. agents.list[].tts attivo
    3. override del canale, quando il canale supporta channels.<channel>.tts
    4. override dell'account, quando il canale passa channels.<channel>.accounts.<id>.tts
    5. preferenze locali /tts per questo host
    6. direttive inline [[tts:...]] quando gli override del modello sono abilitati

    Gli override di canale e account usano la stessa forma di messages.tts e si uniscono in profondità ai livelli precedenti, quindi le credenziali condivise del provider possono restare in messages.tts mentre un canale o un account bot modifica solo voce, modello, persona o modalità automatica:

    {
      messages: {
        tts: {
          provider: "openai",
          providers: {
            openai: { apiKey: "${OPENAI_API_KEY}", model: "gpt-4o-mini-tts" },
          },
        },
      },
      channels: {
        feishu: {
          accounts: {
            english: {
              tts: {
                providers: {
                  openai: { voice: "shimmer" },
                },
              },
            },
          },
        },
      },
    }
    

    Persona

    Una persona è un'identità vocale stabile che può essere applicata in modo deterministico tra provider. Può preferire un provider, definire l'intento del prompt indipendente dal provider e portare binding specifici del provider per voci, modelli, template di prompt, seed e impostazioni vocali.

    Persona minimale

    {
      messages: {
        tts: {
          auto: "always",
          persona: "narrator",
          personas: {
            narrator: {
              label: "Narrator",
              provider: "elevenlabs",
              providers: {
                elevenlabs: { voiceId: "EXAVITQu4vr4xnSDxMaL", modelId: "eleven_multilingual_v2" },
              },
            },
          },
        },
      },
    }
    

    Persona completa (prompt indipendente dal provider)

    {
      messages: {
        tts: {
          auto: "always",
          persona: "alfred",
          personas: {
            alfred: {
              label: "Alfred",
              description: "Dry, warm British butler narrator.",
              provider: "google",
              fallbackPolicy: "preserve-persona",
              prompt: {
                profile: "A brilliant British butler. Dry, witty, warm, charming, emotionally expressive, never generic.",
                scene: "A quiet late-night study. Close-mic narration for a trusted operator.",
                sampleContext: "The speaker is answering a private technical request with concise confidence and dry warmth.",
                style: "Refined, understated, lightly amused.",
                accent: "British English.",
                pacing: "Measured, with short dramatic pauses.",
                constraints: ["Do not read configuration values aloud.", "Do not explain the persona."],
              },
              providers: {
                google: {
                  model: "gemini-3.1-flash-tts-preview",
                  voiceName: "Algieba",
                  promptTemplate: "audio-profile-v1",
                },
                openai: { model: "gpt-4o-mini-tts", voice: "cedar" },
                elevenlabs: {
                  voiceId: "voice_id",
                  modelId: "eleven_multilingual_v2",
                  seed: 42,
                  voiceSettings: {
                    stability: 0.65,
                    similarityBoost: 0.8,
                    style: 0.25,
                    useSpeakerBoost: true,
                    speed: 0.95,
                  },
                },
              },
            },
          },
        },
      },
    }
    

    Risoluzione della persona

    La persona attiva viene selezionata in modo deterministico:

    1. preferenza locale /tts persona <id>, se impostata.
    2. messages.tts.persona, se impostata.
    3. Nessuna persona.

    La selezione del provider usa prima i valori espliciti:

    1. Override diretti (CLI, Gateway, Talk, direttive TTS consentite).
    2. Preferenza locale /tts provider <id>.
    3. provider della persona attiva.
    4. messages.tts.provider.
    5. Selezione automatica del registro.

    Per ogni tentativo di provider, OpenClaw unisce le configurazioni in questo ordine:

    1. messages.tts.providers.<id>
    2. messages.tts.personas.<persona>.providers.<id>
    3. Override attendibili della richiesta
    4. Override da direttive TTS emesse dal modello e consentite

    Come i provider usano i prompt della persona

    I campi prompt della persona (profile, scene, sampleContext, style, accent, pacing, constraints) sono indipendenti dal provider. Ogni provider decide come usarli:

    Google Gemini

    Racchiude i campi prompt della persona in una struttura di prompt TTS Gemini solo quando la configurazione effettiva del provider Google imposta promptTemplate: "audio-profile-v1" o personaPrompt. I campi precedenti audioProfile e speakerName vengono ancora anteposti come testo di prompt specifico di Google. I tag audio inline come [whispers] o [laughs] dentro un blocco [[tts:text]] vengono preservati dentro la trascrizione Gemini; OpenClaw non genera questi tag.

    OpenAI

    Mappa i campi prompt della persona al campo instructions della richiesta solo quando non sono configurate instructions OpenAI esplicite. Le instructions esplicite prevalgono sempre.

    Altri provider

    Usano solo i binding della persona specifici del provider sotto personas.<id>.providers.<provider>. I campi prompt della persona vengono ignorati a meno che il provider implementi la propria mappatura dei prompt della persona.

    Criterio di fallback

    fallbackPolicy controlla il comportamento quando una persona non ha alcun binding per il provider tentato:

    Criterio Comportamento
    preserve-persona Predefinito. I campi prompt indipendenti dal provider restano disponibili; il provider può usarli o ignorarli.
    provider-defaults La persona viene omessa dalla preparazione del prompt per quel tentativo; il provider usa i propri valori predefiniti neutri mentre il fallback ad altri provider continua.
    fail Salta quel tentativo di provider con reasonCode: "not_configured" e personaBinding: "missing". I provider di fallback vengono comunque provati.

    L'intera richiesta TTS fallisce solo quando ogni provider tentato viene saltato o fallisce.

    La selezione del provider della sessione Talk ha ambito di sessione. Un client Talk dovrebbe scegliere gli ID provider, gli ID modello, gli ID voce e le impostazioni locali da talk.catalog e passarli attraverso la sessione Talk o la richiesta di handoff. L'apertura di una sessione vocale non dovrebbe mutare messages.tts o i valori predefiniti globali del provider Talk.

    Direttive guidate dal modello

    Per impostazione predefinita, l'assistente può emettere direttive [[tts:...]] per sovrascrivere voce, modello o velocità per una singola risposta, più un blocco facoltativo [[tts:text]]...[[/tts:text]] per segnali espressivi che dovrebbero apparire solo nell'audio:

    Here you go.
    
    [[tts:voiceId=pMsXgVXv3BLzUgSXRplE model=eleven_v3 speed=1.1]]
    [[tts:text]](laughs) Read the song once more.[[/tts:text]]
    

    Quando messages.tts.auto è "tagged", le direttive sono obbligatorie per attivare l'audio. La consegna dei blocchi in streaming rimuove le direttive dal testo visibile prima che il canale le veda, anche quando sono divise tra blocchi adiacenti.

    provider=... viene ignorato a meno che modelOverrides.allowProvider: true. Quando una risposta dichiara provider=..., le altre chiavi in quella direttiva vengono analizzate solo da quel provider; le chiavi non supportate vengono rimosse e segnalate come avvisi di direttiva TTS.

    Chiavi di direttiva disponibili:

    • provider (ID provider registrato; richiede allowProvider: true)
    • voice / voiceName / voice_name / google_voice / voiceId
    • model / google_model
    • stability, similarityBoost, style, speed, useSpeakerBoost
    • vol / volume (volume MiniMax, 0–10)
    • pitch (pitch intero MiniMax, da −12 a 12; i valori frazionari vengono troncati)
    • emotion (tag emozione Volcengine)
    • applyTextNormalization (auto|on|off)
    • languageCode (ISO 639-1)
    • seed

    Disabilitare completamente gli override del modello:

    { messages: { tts: { modelOverrides: { enabled: false } } } }
    

    Consentire il cambio di provider mantenendo configurabili le altre manopole:

    { messages: { tts: { modelOverrides: { enabled: true, allowProvider: true, allowSeed: false } } } }
    

    Comandi slash

    Singolo comando /tts. Su Discord, OpenClaw registra anche /voice perché /tts è un comando Discord integrato — il testo /tts ... funziona comunque.

    /tts off | on | status
    /tts chat on | off | default
    /tts latest
    /tts provider <id>
    /tts persona <id> | off
    /tts limit <chars>
    /tts summary off
    /tts audio <text>
    

    Note sul comportamento:

    • /tts on scrive la preferenza TTS locale su always; /tts off la scrive su off.
    • /tts chat on|off|default scrive un override auto-TTS con ambito di sessione per la chat corrente.
    • /tts persona <id> scrive la preferenza locale della persona; /tts persona off la cancella.
    • /tts latest legge l'ultima risposta dell'assistente dalla trascrizione della sessione corrente e la invia una volta come audio. Memorizza solo un hash di quella risposta nella voce della sessione per sopprimere invii vocali duplicati.
    • /tts audio genera una risposta audio una tantum (non attiva TTS).
    • limit e summary vengono archiviati nelle preferenze locali, non nella configurazione principale.
    • /tts status include diagnostica di fallback per l'ultimo tentativo — Fallback: <primary> -> <used>, Attempts: ... e dettagli per tentativo (provider:outcome(reasonCode) latency).
    • /status mostra la modalità TTS attiva più provider, modello, voce e metadati dell'endpoint personalizzato sanificati configurati quando TTS è abilitato.

    Preferenze per utente

    I comandi slash scrivono override locali in prefsPath. Il valore predefinito è ~/.openclaw/settings/tts.json; sovrascrivilo con la variabile env OPENCLAW_TTS_PREFS o messages.tts.prefsPath.

    Campo archiviato Effetto
    auto Override auto-TTS locale (always, off, …)
    provider Override locale del provider primario
    persona Override locale della persona
    maxLength Soglia di riepilogo (predefinita 1500 caratteri)
    summarize Attiva/disattiva riepilogo (predefinito true)

    Questi sovrascrivono la configurazione effettiva da messages.tts più il blocco agents.list[].tts attivo per quell'host.

    Formati di output (fissi)

    La consegna vocale TTS è guidata dalle capacità del canale. I Plugin di canale pubblicizzano se il TTS in stile messaggio vocale deve chiedere ai provider un target nativo voice-note o mantenere la normale sintesi audio-file e marcare solo l'output compatibile per la consegna vocale.

    • Canali compatibili con le note vocali: le risposte come note vocali preferiscono Opus (opus_48000_64 da ElevenLabs, opus da OpenAI).
      • 48 kHz / 64 kbps è un buon compromesso per i messaggi vocali.
    • Feishu / WhatsApp: quando una risposta come nota vocale viene prodotta come MP3/WebM/WAV/M4A o un altro file probabilmente audio, il plugin del canale la transcodifica a Ogg/Opus a 48 kHz con ffmpeg prima di inviare il messaggio vocale nativo. WhatsApp invia il risultato tramite il payload audio di Baileys con ptt: true e audio/ogg; codecs=opus. Se la conversione non riesce, Feishu riceve il file originale come allegato; l'invio di WhatsApp non riesce invece di pubblicare un payload PTT incompatibile.
    • BlueBubbles: mantiene la sintesi del provider sul normale percorso dei file audio; gli output MP3 e CAF sono contrassegnati per la consegna come memo vocale iMessage.
    • Altri canali: MP3 (mp3_44100_128 da ElevenLabs, mp3 da OpenAI).
      • 44,1 kHz / 128 kbps è il bilanciamento predefinito per la chiarezza del parlato.
    • MiniMax: MP3 (modello speech-2.8-hd, frequenza di campionamento 32 kHz) per i normali allegati audio. Per le destinazioni per note vocali dichiarate dal canale, OpenClaw transcodifica l'MP3 MiniMax a Opus 48 kHz con ffmpeg prima della consegna quando il canale dichiara la transcodifica.
    • Xiaomi MiMo: MP3 per impostazione predefinita, oppure WAV quando configurato. Per le destinazioni per note vocali dichiarate dal canale, OpenClaw transcodifica l'output Xiaomi a Opus 48 kHz con ffmpeg prima della consegna quando il canale dichiara la transcodifica.
    • CLI locale: usa l'outputFormat configurato. Le destinazioni per note vocali sono convertite in Ogg/Opus e l'output di telefonia viene convertito in PCM mono raw a 16 kHz con ffmpeg.
    • Google Gemini: Gemini API TTS restituisce PCM raw a 24 kHz. OpenClaw lo incapsula come WAV per gli allegati audio, lo transcodifica a Opus 48 kHz per le destinazioni per note vocali e restituisce direttamente PCM per Talk/telefonia.
    • Gradium: WAV per gli allegati audio, Opus per le destinazioni per note vocali e ulaw_8000 a 8 kHz per la telefonia.
    • Inworld: MP3 per i normali allegati audio, OGG_OPUS nativo per le destinazioni per note vocali e PCM raw a 22050 Hz per Talk/telefonia.
    • xAI: MP3 per impostazione predefinita; responseFormat può essere mp3, wav, pcm, mulaw o alaw. OpenClaw usa l'endpoint TTS REST batch di xAI e restituisce un allegato audio completo; il WebSocket TTS streaming di xAI non viene usato da questo percorso del provider. Il formato nativo Opus per note vocali non è supportato da questo percorso.
    • Microsoft: usa microsoft.outputFormat (predefinito audio-24khz-48kbitrate-mono-mp3).
      • Il trasporto incluso accetta un outputFormat, ma non tutti i formati sono disponibili dal servizio.
      • I valori del formato di output seguono i formati di output di Microsoft Speech (inclusi Ogg/WebM Opus).
      • Telegram sendVoice accetta OGG/MP3/M4A; usa OpenAI/ElevenLabs se ti servono messaggi vocali Opus garantiti.
      • Se il formato di output Microsoft configurato non riesce, OpenClaw riprova con MP3.

    I formati di output OpenAI/ElevenLabs sono fissi per canale (vedi sopra).

    Comportamento Auto-TTS

    Quando messages.tts.auto è abilitato, OpenClaw:

    • Salta TTS se la risposta contiene già media o una direttiva MEDIA:.
    • Salta le risposte molto brevi (meno di 10 caratteri).
    • Riassume le risposte lunghe quando i riassunti sono abilitati, usando summaryModel (o agents.defaults.model.primary).
    • Allega l'audio generato alla risposta.
    • In mode: "final", invia comunque TTS solo audio per le risposte finali in streaming dopo il completamento dello stream di testo; il media generato passa attraverso la stessa normalizzazione dei media del canale degli allegati di risposta normali.

    Se la risposta supera maxLength e il riassunto è disattivato (o manca una chiave API per il modello di riassunto), l'audio viene saltato e viene inviata la normale risposta testuale.

    Reply -> TTS enabled?
      no  -> send text
      yes -> has media / MEDIA: / short?
              yes -> send text
              no  -> length > limit?
                       no  -> TTS -> attach audio
                       yes -> summary enabled?
                                no  -> send text
                                yes -> summarize -> TTS -> attach audio
    

    Formati di output per canale

    Destinazione Formato
    Feishu / Matrix / Telegram / WhatsApp Le risposte come note vocali preferiscono Opus (opus_48000_64 da ElevenLabs, opus da OpenAI). 48 kHz / 64 kbps bilancia chiarezza e dimensione.
    Altri canali MP3 (mp3_44100_128 da ElevenLabs, mp3 da OpenAI). 44,1 kHz / 128 kbps predefinito per il parlato.
    Talk / telefonia PCM nativo del provider (Inworld 22050 Hz, Google 24 kHz), oppure ulaw_8000 da Gradium per la telefonia.

    Note per provider:

    • Transcodifica Feishu / WhatsApp: Quando una risposta come nota vocale arriva come MP3/WebM/WAV/M4A, il plugin del canale la transcodifica a Ogg/Opus 48 kHz con ffmpeg. WhatsApp invia tramite Baileys con ptt: true e audio/ogg; codecs=opus. Se la conversione non riesce: Feishu ripiega sull'allegare il file originale; l'invio di WhatsApp non riesce invece di pubblicare un payload PTT incompatibile.
    • MiniMax / Xiaomi MiMo: MP3 predefinito (32 kHz per MiniMax speech-2.8-hd); transcodificato a Opus 48 kHz per le destinazioni per note vocali tramite ffmpeg.
    • CLI locale: Usa l'outputFormat configurato. Le destinazioni per note vocali sono convertite in Ogg/Opus e l'output di telefonia in PCM mono raw a 16 kHz.
    • Google Gemini: Restituisce PCM raw a 24 kHz. OpenClaw lo incapsula come WAV per gli allegati, lo transcodifica a Opus 48 kHz per le destinazioni per note vocali, restituisce direttamente PCM per Talk/telefonia.
    • Inworld: Allegati MP3, nota vocale OGG_OPUS nativa, PCM raw a 22050 Hz per Talk/telefonia.
    • xAI: MP3 per impostazione predefinita; responseFormat può essere mp3|wav|pcm|mulaw|alaw. Usa l'endpoint REST batch di xAI: il WebSocket TTS streaming non viene usato. Il formato nativo Opus per note vocali non è supportato.
    • Microsoft: Usa microsoft.outputFormat (predefinito audio-24khz-48kbitrate-mono-mp3). Telegram sendVoice accetta OGG/MP3/M4A; usa OpenAI/ElevenLabs se ti servono messaggi vocali Opus garantiti. Se il formato Microsoft configurato non riesce, OpenClaw riprova con MP3.

    I formati di output OpenAI ed ElevenLabs sono fissi per canale come indicato sopra.

    Riferimento dei campi

    messages.tts.* di primo livello
    auto"off" | "always" | "inbound" | "tagged"

    Modalità Auto-TTS. inbound invia l'audio solo dopo un messaggio vocale in ingresso; tagged invia l'audio solo quando la risposta include direttive [[tts:...]] o un blocco [[tts:text]].

    enabledboolean

    Interruttore legacy. openclaw doctor --fix lo migra a auto.

    mode"final" | "all"

    "all" include le risposte di strumenti/blocchi oltre alle risposte finali.

    providerstring

    ID del provider vocale. Quando non è impostato, OpenClaw usa il primo provider configurato nell'ordine di selezione automatica del registro. Il legacy provider: "edge" viene riscritto in "microsoft" da openclaw doctor --fix.

    personastring

    ID della persona attiva da personas. Normalizzato in minuscolo.

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InBlcnNvbmFzLjxpZA " type="object"> Identità vocale stabile. Campi: label, description, provider, fallbackPolicy, prompt, providers.<provider>. Vedi Personas.

    summaryModelstring

    Modello economico per il riassunto automatico; il valore predefinito è agents.defaults.model.primary. Accetta provider/model o un alias di modello configurato.

    modelOverridesobject

    Consente al modello di emettere direttive TTS. enabled è true per impostazione predefinita; allowProvider è false per impostazione predefinita.

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InByb3ZpZGVycy48aWQ " type="object"> Impostazioni di proprietà del provider indicizzate per ID del provider vocale. I blocchi diretti legacy (messages.tts.openai, .elevenlabs, .microsoft, .edge) vengono riscritti da openclaw doctor --fix; committa solo messages.tts.providers.<id>.

    maxTextLengthnumber

    Limite rigido per i caratteri di input TTS. /tts audio non riesce se viene superato.

    timeoutMsnumber

    Timeout della richiesta in millisecondi.

    prefsPathstring

    Sovrascrive il percorso JSON delle preferenze locali (provider/limite/riassunto). Predefinito ~/.openclaw/settings/tts.json.

    Azure Speech

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImFwaUtleSIgdHlwZT0ic3RyaW5nIg Env: AZURE_SPEECH_KEY, AZURE_SPEECH_API_KEY o SPEECH_KEY. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InJlZ2lvbiIgdHlwZT0ic3RyaW5nIg Regione Azure Speech (ad es. eastus). Env: AZURE_SPEECH_REGION o SPEECH_REGION. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImVuZHBvaW50IiB0eXBlPSJzdHJpbmci Override opzionale dell'endpoint Azure Speech (alias baseUrl). OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InZvaWNlIiB0eXBlPSJzdHJpbmci ShortName della voce Azure. Predefinito en-US-JennyNeural. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImxhbmciIHR5cGU9InN0cmluZyI Codice lingua SSML. Predefinito en-US. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9Im91dHB1dEZvcm1hdCIgdHlwZT0ic3RyaW5nIg X-Microsoft-OutputFormat di Azure per l'audio standard. Predefinito audio-24khz-48kbitrate-mono-mp3. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InZvaWNlTm90ZU91dHB1dEZvcm1hdCIgdHlwZT0ic3RyaW5nIg X-Microsoft-OutputFormat di Azure per l'output delle note vocali. Predefinito ogg-24khz-16bit-mono-opus. OPENCLAW_DOCS_MARKER:paramClose:

    ElevenLabs

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImFwaUtleSIgdHlwZT0ic3RyaW5nIg Ripiega su ELEVENLABS_API_KEY o XI_API_KEY. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9Im1vZGVsIiB0eXBlPSJzdHJpbmci ID del modello (ad es. eleven_multilingual_v2, eleven_v3). OPENCLAW_DOCS_MARKER:paramClose:

    voiceIdstring
    voiceSettingsobject

    stability, similarityBoost, style (ciascuno 0..1), useSpeakerBoost (true|false), speed (0.5..2.0, 1.0 = normale).

    applyTextNormalization"auto" | "on" | "off"

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9Imxhbmd1YWdlQ29kZSIgdHlwZT0ic3RyaW5nIg ISO 639-1 a 2 lettere (ad es. en, de). OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InNlZWQiIHR5cGU9Im51bWJlciI Intero 0..4294967295 per determinismo best-effort. OPENCLAW_DOCS_MARKER:paramClose:

    baseUrlstring
    Google Gemini

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImFwaUtleSIgdHlwZT0ic3RyaW5nIg Ripiega su GEMINI_API_KEY / GOOGLE_API_KEY. Se omesso, TTS può riutilizzare models.providers.google.apiKey prima del fallback env. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9Im1vZGVsIiB0eXBlPSJzdHJpbmci Modello Gemini TTS. Predefinito gemini-3.1-flash-tts-preview. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InZvaWNlTmFtZSIgdHlwZT0ic3RyaW5nIg Nome della voce predefinita Gemini. Predefinito Kore. Alias: voice. OPENCLAW_DOCS_MARKER:paramClose:

    audioProfilestring
    speakerNamestring

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InByb21wdFRlbXBsYXRlIiB0eXBlPSciYXVkaW8tcHJvZmlsZS12MSIn Imposta su audio-profile-v1 per incapsulare i campi del prompt della persona attiva in una struttura di prompt Gemini TTS deterministica. OPENCLAW_DOCS_MARKER:paramClose:

    personaPromptstring

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImJhc2VVcmwiIHR5cGU9InN0cmluZyI È accettato solo https://generativelanguage.googleapis.com. OPENCLAW_DOCS_MARKER:paramClose:

    Gradium

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImFwaUtleSIgdHlwZT0ic3RyaW5nIg Env: GRADIUM_API_KEY. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImJhc2VVcmwiIHR5cGU9InN0cmluZyI Predefinito https://api.gradium.ai. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InZvaWNlSWQiIHR5cGU9InN0cmluZyI Predefinito Emma (YTpq7expH9539ERJ). OPENCLAW_DOCS_MARKER:paramClose:

    Inworld

    Inworld primario

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImFwaUtleSIgdHlwZT0ic3RyaW5nIg Env: INWORLD_API_KEY. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImJhc2VVcmwiIHR5cGU9InN0cmluZyI Predefinito https://api.inworld.ai. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9Im1vZGVsSWQiIHR5cGU9InN0cmluZyI Predefinito inworld-tts-1.5-max. Inoltre: inworld-tts-1.5-mini, inworld-tts-1-max, inworld-tts-1. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InZvaWNlSWQiIHR5cGU9InN0cmluZyI Predefinito Sarah. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InRlbXBlcmF0dXJlIiB0eXBlPSJudW1iZXIi Temperatura di campionamento 0..2. OPENCLAW_DOCS_MARKER:paramClose:

    CLI locale (tts-local-cli)
    commandstring

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImFyZ3MiIHR5cGU9InN0cmluZ1tdIg Argomenti del comando. Supporta i segnaposto {{Text}}, {{OutputPath}}, {{OutputDir}}, {{OutputBase}}. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9Im91dHB1dEZvcm1hdCIgdHlwZT0nIm1wMyIgfCAib3B1cyIgfCAid2F2Iic Formato di output CLI previsto. Predefinito mp3 per gli allegati audio. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InRpbWVvdXRNcyIgdHlwZT0ibnVtYmVyIg Timeout del comando in millisecondi. Predefinito 120000. OPENCLAW_DOCS_MARKER:paramClose:

    cwdstring
    env"Record<string,
    Microsoft (nessuna chiave API)
    enabledboolean

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InZvaWNlIiB0eXBlPSJzdHJpbmci Nome della voce neurale Microsoft (ad es. en-US-MichelleNeural). OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImxhbmciIHR5cGU9InN0cmluZyI Codice lingua (ad es. en-US). OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9Im91dHB1dEZvcm1hdCIgdHlwZT0ic3RyaW5nIg Formato di output Microsoft. Predefinito audio-24khz-48kbitrate-mono-mp3. Non tutti i formati sono supportati dal trasporto incluso basato su Edge. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InJhdGUgLyBwaXRjaCAvIHZvbHVtZSIgdHlwZT0ic3RyaW5nIg Stringhe percentuali (ad es. +10%, -5%). OPENCLAW_DOCS_MARKER:paramClose:

    saveSubtitlesboolean
    proxystring
    timeoutMsnumber

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImVkZ2UuKiIgdHlwZT0ib2JqZWN0IiBkZXByZWNhdGVk Alias legacy. Esegui openclaw doctor --fix per riscrivere la configurazione persistita in providers.microsoft. OPENCLAW_DOCS_MARKER:paramClose:

    MiniMax

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImFwaUtleSIgdHlwZT0ic3RyaW5nIg Ripiega su MINIMAX_API_KEY. Autenticazione Token Plan tramite MINIMAX_OAUTH_TOKEN, MINIMAX_CODE_PLAN_KEY o MINIMAX_CODING_API_KEY. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImJhc2VVcmwiIHR5cGU9InN0cmluZyI Predefinito https://api.minimax.io. Env: MINIMAX_API_HOST. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9Im1vZGVsIiB0eXBlPSJzdHJpbmci Predefinito speech-2.8-hd. Env: MINIMAX_TTS_MODEL. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InZvaWNlSWQiIHR5cGU9InN0cmluZyI Predefinito English_expressive_narrator. Env: MINIMAX_TTS_VOICE_ID. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InNwZWVkIiB0eXBlPSJudW1iZXIi 0.5..2.0. Predefinito 1.0. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InZvbCIgdHlwZT0ibnVtYmVyIg (0, 10]. Predefinito 1.0. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InBpdGNoIiB0eXBlPSJudW1iZXIi Intero -12..12. Predefinito 0. I valori frazionari vengono troncati prima della richiesta. OPENCLAW_DOCS_MARKER:paramClose:

    OpenAI

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImFwaUtleSIgdHlwZT0ic3RyaW5nIg Ripiega su OPENAI_API_KEY. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9Im1vZGVsIiB0eXBlPSJzdHJpbmci ID del modello TTS OpenAI (ad es. gpt-4o-mini-tts). OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InZvaWNlIiB0eXBlPSJzdHJpbmci Nome della voce (ad es. alloy, cedar). OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9Imluc3RydWN0aW9ucyIgdHlwZT0ic3RyaW5nIg Campo instructions OpenAI esplicito. Quando impostato, i campi del prompt persona non vengono mappati automaticamente. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImV4dHJhQm9keSAvIGV4dHJhX2JvZHkiIHR5cGU9IlJlY29yZDxzdHJpbmcsIHVua25vd24 ">Campi JSON aggiuntivi uniti nei corpi delle richieste /audio/speech dopo i campi TTS OpenAI generati. Usalo per endpoint compatibili con OpenAI come Kokoro che richiedono chiavi specifiche del provider come lang; le chiavi prototype non sicure vengono ignorate. OPENCLAW_DOCS_MARKER:paramClose:

    baseUrlstring

    Override dell'endpoint TTS OpenAI. Ordine di risoluzione: configurazione → OPENAI_TTS_BASE_URLhttps://api.openai.com/v1. I valori non predefiniti vengono trattati come endpoint TTS compatibili con OpenAI, quindi sono accettati nomi di modelli e voci personalizzati.

    OpenRouter

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImFwaUtleSIgdHlwZT0ic3RyaW5nIg Env: OPENROUTER_API_KEY. Può riutilizzare models.providers.openrouter.apiKey. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImJhc2VVcmwiIHR5cGU9InN0cmluZyI Predefinito https://openrouter.ai/api/v1. Il legacy https://openrouter.ai/v1 viene normalizzato. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9Im1vZGVsIiB0eXBlPSJzdHJpbmci Predefinito hexgrad/kokoro-82m. Alias: modelId. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InZvaWNlIiB0eXBlPSJzdHJpbmci Predefinito af_alloy. Alias: voiceId. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InJlc3BvbnNlRm9ybWF0IiB0eXBlPScibXAzIiB8ICJwY20iJw Predefinito mp3. OPENCLAW_DOCS_MARKER:paramClose:

    speednumber
    Volcengine (BytePlus Seed Speech)

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImFwaUtleSIgdHlwZT0ic3RyaW5nIg Env: VOLCENGINE_TTS_API_KEY o BYTEPLUS_SEED_SPEECH_API_KEY. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InJlc291cmNlSWQiIHR5cGU9InN0cmluZyI Predefinito seed-tts-1.0. Env: VOLCENGINE_TTS_RESOURCE_ID. Usa seed-tts-2.0 quando il tuo progetto ha l'autorizzazione TTS 2.0. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImFwcEtleSIgdHlwZT0ic3RyaW5nIg Header della chiave app. Predefinito aGjiRDfUWi. Env: VOLCENGINE_TTS_APP_KEY. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImJhc2VVcmwiIHR5cGU9InN0cmluZyI Override dell'endpoint HTTP TTS Seed Speech. Env: VOLCENGINE_TTS_BASE_URL. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InZvaWNlIiB0eXBlPSJzdHJpbmci Tipo di voce. Predefinito en_female_anna_mars_bigtts. Env: VOLCENGINE_TTS_VOICE. OPENCLAW_DOCS_MARKER:paramClose:

    speedRationumber
    emotionstring

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImFwcElkIC8gdG9rZW4gLyBjbHVzdGVyIiB0eXBlPSJzdHJpbmciIGRlcHJlY2F0ZWQ Campi legacy della Volcengine Speech Console. Env: VOLCENGINE_TTS_APPID, VOLCENGINE_TTS_TOKEN, VOLCENGINE_TTS_CLUSTER (predefinito volcano_tts). OPENCLAW_DOCS_MARKER:paramClose:

    xAI

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImFwaUtleSIgdHlwZT0ic3RyaW5nIg Env: XAI_API_KEY. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImJhc2VVcmwiIHR5cGU9InN0cmluZyI Predefinito https://api.x.ai/v1. Env: XAI_BASE_URL. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InZvaWNlSWQiIHR5cGU9InN0cmluZyI Predefinito eve. Voci live: ara, eve, leo, rex, sal, una. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9Imxhbmd1YWdlIiB0eXBlPSJzdHJpbmci Codice lingua BCP-47 o auto. Predefinito en. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InJlc3BvbnNlRm9ybWF0IiB0eXBlPScibXAzIiB8ICJ3YXYiIHwgInBjbSIgfCAibXVsYXciIHwgImFsYXciJw Predefinito mp3. OPENCLAW_DOCS_MARKER:paramClose:

    speednumber
    Xiaomi MiMo

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImFwaUtleSIgdHlwZT0ic3RyaW5nIg Env: XIAOMI_API_KEY. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImJhc2VVcmwiIHR5cGU9InN0cmluZyI Predefinito https://api.xiaomimimo.com/v1. Env: XIAOMI_BASE_URL. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9Im1vZGVsIiB0eXBlPSJzdHJpbmci Predefinito mimo-v2.5-tts. Env: XIAOMI_TTS_MODEL. Supporta anche mimo-v2-tts. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InZvaWNlIiB0eXBlPSJzdHJpbmci Predefinito mimo_default. Env: XIAOMI_TTS_VOICE. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImZvcm1hdCIgdHlwZT0nIm1wMyIgfCAid2F2Iic Predefinito mp3. Env: XIAOMI_TTS_FORMAT. OPENCLAW_DOCS_MARKER:paramClose:

    stylestring

    Strumento dell'agente

    Lo strumento tts converte il testo in parlato e restituisce un allegato audio per la consegna della risposta. Su Feishu, Matrix, Telegram e WhatsApp, l'audio viene consegnato come messaggio vocale anziché come allegato file. Feishu e WhatsApp possono transcodificare l'output TTS non Opus in questo percorso quando ffmpeg è disponibile.

    WhatsApp invia l'audio tramite Baileys come nota vocale PTT (audio con ptt: true) e invia il testo visibile separatamente dall'audio PTT perché i client non visualizzano in modo coerente le didascalie sulle note vocali.

    Lo strumento accetta i campi facoltativi channel e timeoutMs; timeoutMs è un timeout di richiesta del provider per chiamata in millisecondi.

    RPC Gateway

    Metodo Scopo
    tts.status Legge lo stato TTS attuale e l'ultimo tentativo.
    tts.enable Imposta la preferenza automatica locale su always.
    tts.disable Imposta la preferenza automatica locale su off.
    tts.convert Testo una tantum → audio.
    tts.setProvider Imposta la preferenza locale del provider.
    tts.setPersona Imposta la preferenza locale della persona.
    tts.providers Elenca i provider configurati e lo stato.

    Correlati