Tools

Tekst-naar-spraak

OpenClaw zet uitgaande antwoorden om in audio via 14 spraakproviders: native spraakberichten op Feishu, Matrix, Telegram en WhatsApp; audio- bijlagen op alle andere platforms; en PCM/Ulaw-streams voor telefonie en Talk.

TTS is de spraakuitvoerhelft van de stt-tts-modus van Talk (talk.speak-gesprekken gebruiken ditzelfde synthesepad). Providernatieve realtime-Talk-sessies synthetiseren spraak binnen de realtimeprovider; transcription-sessies synthetiseren nooit een gesproken antwoord van de assistent.

Snel aan de slag

  • Kies een provider

    OpenAI en ElevenLabs zijn de betrouwbaarste gehoste opties. Microsoft en de lokale CLI werken zonder API-sleutel. Bekijk de providermatrix voor de volledige lijst.

  • Stel de API-sleutel in

    Exporteer de omgevingsvariabele voor je provider (bijvoorbeeld OPENAI_API_KEY, ELEVENLABS_API_KEY). Microsoft en de lokale CLI hebben geen sleutel nodig.

  • Schakel het in de configuratie in

    Stel tts.auto: "always" en tts.provider in:

    json5
    {  tts: {    auto: "always",    provider: "elevenlabs",  },}
  • Probeer het in de chat

    /tts status toont de huidige status. /tts audio Hello from OpenClaw verzendt een eenmalig audioantwoord.

  • Ondersteunde providers

    Provider Authenticatie Opmerkingen
    Azure Speech AZURE_SPEECH_KEY + AZURE_SPEECH_REGION (ook AZURE_SPEECH_API_KEY, SPEECH_KEY, SPEECH_REGION) Native Ogg/Opus-uitvoer voor spraakberichten en telefonie.
    DeepInfra DEEPINFRA_API_KEY OpenAI-compatibele TTS. Standaard ingesteld op hexgrad/Kokoro-82M.
    ElevenLabs ELEVENLABS_API_KEY of XI_API_KEY Stemklonen, meertalig, deterministisch via seed; gestreamd voor spraakweergave in Discord.
    Google Gemini GEMINI_API_KEY of GOOGLE_API_KEY Batch-TTS via de Gemini-API; personabewust via promptTemplate: "audio-profile-v1".
    Gradium GRADIUM_API_KEY Uitvoer voor spraakberichten en telefonie.
    Inworld INWORLD_API_KEY Streaming-TTS-API. Native Opus voor spraakberichten en PCM voor telefonie.
    Lokale CLI geen Voert een geconfigureerde lokale TTS-opdracht uit.
    Microsoft geen Openbare neurale Edge-TTS via node-edge-tts. Naar beste vermogen, zonder SLA.
    MiniMax MINIMAX_API_KEY (of Token Plan: MINIMAX_OAUTH_TOKEN, MINIMAX_CODE_PLAN_KEY, MINIMAX_CODING_API_KEY) T2A v2-API. Standaard ingesteld op speech-2.8-hd.
    OpenAI OPENAI_API_KEY Wordt ook gebruikt voor automatische samenvattingen; ondersteunt persona instructions.
    OpenRouter OPENROUTER_API_KEY (kan models.providers.openrouter.apiKey hergebruiken) Standaardmodel hexgrad/kokoro-82m.
    Volcengine VOLCENGINE_TTS_API_KEY of BYTEPLUS_SEED_SPEECH_API_KEY (verouderde AppID/token: VOLCENGINE_TTS_APPID/_TOKEN) BytePlus Seed Speech HTTP-API.
    Vydra VYDRA_API_KEY Gedeelde provider voor afbeeldingen, video en spraak.
    xAI XAI_API_KEY Batch-TTS van xAI. Native Opus voor spraakberichten wordt niet ondersteund.
    Xiaomi MiMo XIAOMI_API_KEY MiMo-TTS via Xiaomi-chatvoltooiingen.

    Als meerdere providers zijn geconfigureerd, wordt de geselecteerde provider eerst gebruikt en dienen de andere als terugvalopties. Automatische samenvattingen gebruiken summaryModel (of agents.defaults.model.primary), dus die provider moet ook geauthenticeerd zijn als je samenvattingen ingeschakeld laat.

    Configuratie

    De TTS-configuratie staat onder tts in ~/.openclaw/openclaw.json. Kies een voorinstelling en pas het providerblok aan. De hieronder getoonde velden speakerVoice/speakerVoiceId zijn canoniek; de eigen veldnamen voice/voiceId/ voiceName van elke provider werken nog als verouderde aliassen.

    Azure Speech

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

    ElevenLabs

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

    Google Gemini

    json5
    {tts: {auto: "always",provider: "google",providers: {  google: {    apiKey: "${GEMINI_API_KEY}",    model: "gemini-3.1-flash-tts-preview",    speakerVoice: "Kore",    // Optionele stijlprompts in natuurlijke taal:    // audioProfile: "Spreek met een kalme toon, zoals een podcastpresentator.",    // speakerName: "Alex",  },},},}

    Gradium

    json5
    {tts: {auto: "always",provider: "gradium",providers: {  gradium: {    apiKey: "${GRADIUM_API_KEY}",    speakerVoiceId: "YTpq7expH9539ERJ",  },},},}

    Inworld

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

    Lokale CLI

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

    Microsoft (geen sleutel)

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

    MiniMax

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

    OpenAI + ElevenLabs

    json5
    {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",    speakerVoice: "alloy",  },  elevenlabs: {    apiKey: "${ELEVENLABS_API_KEY}",    model: "eleven_multilingual_v2",    speakerVoiceId: "EXAVITQu4vr4xnSDxMaL",    voiceSettings: { stability: 0.5, similarityBoost: 0.75, style: 0.0, useSpeakerBoost: true, speed: 1.0 },    applyTextNormalization: "auto",    languageCode: "en",  },},},}

    OpenRouter

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

    Volcengine

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

    xAI

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

    Xiaomi MiMo

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

    Laat voor Xiaomi mimo-v2.5-tts-voicedesign speakerVoice weg en stel style in op de prompt voor het stemontwerp. OpenClaw verzendt die prompt als het TTS-bericht user en verzendt audio.voice niet voor het voicedesign-model.

    Stemoverschrijvingen per agent

    Gebruik agents.entries.*.tts wanneer één agent met een andere provider, stem, model, persona of automatische TTS-modus moet spreken. Het agentblok wordt diep samengevoegd boven op tts, zodat providerreferenties in de globale providerconfiguratie kunnen blijven staan:

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

    Om een persona per agent vast te zetten, stel je agents.entries.*.tts.persona in naast de providerconfiguratie — deze overschrijft de algemene tts.persona uitsluitend voor die agent.

    Volgorde van prioriteit voor automatische antwoorden, /tts audio, /tts status en de agenttool tts:

    1. tts
    2. actieve agents.entries.*.tts
    3. kanaaloverschrijving, wanneer het kanaal channels.<channel>.tts ondersteunt
    4. accountoverschrijving, wanneer het kanaal channels.<channel>.accounts.<id>.tts doorgeeft
    5. lokale /tts-voorkeuren voor deze host
    6. inline [[tts:...]]-instructies wanneer modelgestuurde overschrijvingen zijn ingeschakeld

    Kanaal- en accountoverschrijvingen gebruiken dezelfde vorm als tts en worden diep samengevoegd over de eerdere lagen, zodat gedeelde providerreferenties in tts kunnen blijven terwijl een kanaal- of botaccount alleen de stem van de spreker, het model, de persona of de automatische modus wijzigt:

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

    Persona's

    Een persona is een stabiele gesproken identiteit die deterministisch kan worden toegepast bij verschillende providers. De persona kan de voorkeur geven aan één provider, providerneutrale promptintentie definiëren en providerspecifieke koppelingen bevatten voor stemmen, modellen, promptsjablonen, seeds en steminstellingen.

    Minimale persona

    json5
    {  tts: {    auto: "always",    persona: "narrator",    personas: {      narrator: {        label: "Verteller",        provider: "elevenlabs",        providers: {          elevenlabs: {            speakerVoiceId: "EXAVITQu4vr4xnSDxMaL",            modelId: "eleven_multilingual_v2",          },        },      },    },  },}

    Volledige persona (providerspecifieke vormgeving)

    json5
    {  tts: {    auto: "always",    persona: "alfred",    personas: {      alfred: {        label: "Alfred",        description: "Droge, warme Britse butlerverteller.",        provider: "google",        fallbackPolicy: "preserve-persona",        providers: {          google: {            model: "gemini-3.1-flash-tts-preview",            speakerVoice: "Algieba",            promptTemplate: "audio-profile-v1",          },          openai: { model: "gpt-4o-mini-tts", speakerVoice: "cedar" },          elevenlabs: {            speakerVoiceId: "voice_id",            modelId: "eleven_multilingual_v2",            seed: 42,            voiceSettings: {              stability: 0.65,              similarityBoost: 0.8,              style: 0.25,              useSpeakerBoost: true,              speed: 0.95,            },          },        },      },    },  },}

    Personaresolutie

    De actieve persona wordt deterministisch geselecteerd:

    1. /tts persona <id> lokale voorkeur, indien ingesteld.
    2. tts.persona, indien ingesteld.
    3. Geen persona.

    Providerselectie verwerkt expliciete keuzes eerst:

    1. Directe overschrijvingen (CLI, Gateway, Talk, toegestane TTS-instructies).
    2. /tts provider <id> lokale voorkeur.
    3. provider van de actieve persona.
    4. tts.provider.
    5. Automatische selectie uit het register.

    Voor elke providerpoging voegt OpenClaw configuraties in deze volgorde samen:

    1. tts.providers.<id>
    2. tts.personas.<persona>.providers.<id>
    3. Vertrouwde aanvraagoverschrijvingen
    4. Toegestane overschrijvingen uit door het model uitgegeven TTS-instructies

    Aangepaste personavormgeving

    Providerneutrale personas.<id>.prompt.*-configuratie is buiten gebruik gesteld. Doctor verwijdert die velden en verwijst naar de interface van de spraakprovider. Plaats ingebouwde providerinstellingen onder personas.<id>.providers.<provider> (bijvoorbeeld Google personaPrompt of OpenAI instructions). Voor aangepaste vormgeving implementeer je een spraakproviderplugin met prepareSynthesis(ctx) en retourneer je aangepaste tekst, providerconfiguratie of overschrijvingen voordat synthesize() wordt uitgevoerd. Hierdoor blijft de constructie van expressieve prompts in de providercode, waar de semantiek van de aanvraag bekend is.

    Terugvalbeleid

    fallbackPolicy bepaalt het gedrag wanneer een persona geen koppeling heeft voor de provider die wordt geprobeerd:

    Beleid Gedrag
    preserve-persona Standaard. Providerneutrale promptvelden blijven beschikbaar; de provider kan ze gebruiken of negeren.
    provider-defaults De persona wordt voor die poging weggelaten uit de promptvoorbereiding; de provider gebruikt zijn neutrale standaardwaarden terwijl de terugval naar andere providers doorgaat.
    fail Sla die providerpoging over met reasonCode: "not_configured" en personaBinding: "missing". Terugvalproviders worden nog steeds geprobeerd.

    De volledige TTS-aanvraag mislukt alleen wanneer elke providerpoging wordt overgeslagen of mislukt.

    De providerselectie voor een Talk-sessie geldt uitsluitend binnen de sessie. Een Talk-client hoort provider-ID's, model-ID's, stem-ID's en landinstellingen te kiezen uit talk.catalog en deze door te geven via de Talk-sessie of overdrachtsaanvraag. Het openen van een spraaksessie hoort tts of de algemene standaardproviders van Talk niet te wijzigen.

    Modelgestuurde instructies

    Standaard kan de assistent [[tts:...]]-instructies uitvoeren om de stem, het model of de snelheid voor één antwoord te overschrijven, plus een optioneel [[tts:text]]...[[/tts:text]]-blok voor expressieve aanwijzingen die alleen in de audio mogen voorkomen:

    text
    Alsjeblieft. [[tts:speakerVoiceId=pMsXgVXv3BLzUgSXRplE model=eleven_v3 speed=1.1]][[tts:text]](lacht) Lees het lied nogmaals.[[/tts:text]]

    Wanneer tts.auto gelijk is aan "tagged", zijn instructies vereist om audio te activeren. Bij gestreamde bloklevering worden instructies uit zichtbare tekst verwijderd voordat het kanaal ze ontvangt, zelfs wanneer ze over aangrenzende blokken zijn verdeeld.

    provider=... wordt genegeerd tenzij modelOverrides.allowProvider: true. Wanneer een antwoord provider=... declareert, worden de andere sleutels in die instructie uitsluitend door die provider geparseerd; niet-ondersteunde sleutels worden verwijderd en gemeld als waarschuwingen voor TTS-instructies.

    Beschikbare instructiesleutels:

    • provider (geregistreerde provider-ID; vereist allowProvider: true)
    • speakerVoice / speakerVoiceId (verouderde aliassen: voice, voiceName, voice_name, google_voice, voiceId)
    • model / google_model
    • stability, similarityBoost, style, speed, useSpeakerBoost
    • vol / volume (MiniMax-volume, (0, 10])
    • pitch (gehele MiniMax-toonhoogte, −12 tot 12; fractionele waarden worden afgekapt)
    • emotion (Volcengine-emotietag)
    • applyTextNormalization (auto|on|off)
    • languageCode (ISO 639-1)
    • seed

    Modeloverschrijvingen volledig uitschakelen:

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

    Wisselen van provider toestaan terwijl andere instellingen configureerbaar blijven:

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

    Slash-opdrachten

    Eén opdracht: /tts. Op Discord registreert OpenClaw ook /voice, omdat /tts een ingebouwde Discord-opdracht is — de tekst /tts ... werkt nog steeds.

    text
    /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>

    Gedragsnotities:

    • /tts on schrijft de lokale TTS-voorkeur naar always; /tts off schrijft deze naar off.
    • /tts chat on|off|default schrijft een sessiegebonden automatische TTS-overschrijving voor de huidige chat.
    • /tts persona <id> schrijft de lokale personavoorkeur; /tts persona off wist deze.
    • /tts latest leest het nieuwste assistentantwoord uit het transcript van de huidige sessie en verzendt het eenmaal als audio. Alleen een hash van dat antwoord wordt in het sessie-item opgeslagen om dubbele spraakverzendingen te voorkomen.
    • /tts audio genereert een eenmalig audioantwoord (schakelt TTS niet in).
    • /tts limit <chars> accepteert 100–4096 (4096 is het maximum voor Telegram-bijschriften/-berichten); waarden buiten dat bereik worden geweigerd.
    • limit en summary worden opgeslagen in lokale voorkeuren, niet in de hoofdconfiguratie.
    • /tts status bevat terugvaldiagnostiek voor de nieuwste poging — Fallback: <primary> -> <used>, Attempts: ... en details per poging (provider:outcome(reasonCode) latency).
    • /status toont de actieve TTS-modus plus de geconfigureerde provider, het model, de stem en opgeschoonde metagegevens van aangepaste eindpunten wanneer TTS is ingeschakeld.

    Voorkeuren per gebruiker

    Slash-opdrachten schrijven lokale overschrijvingen naar het pad voor TTS-voorkeuren. De standaardwaarde is ~/.openclaw/settings/tts.json; overschrijf deze met OPENCLAW_TTS_PREFS. Doctor verplaatst de buiten gebruik gestelde algemene waarde tts.prefsPath naar gedeelde machinestatus. Geavanceerde configuraties met meerdere agents kunnen nog steeds agents.entries.<id>.tts.prefsPath instellen wanneer agents bewust afzonderlijke voorkeursopslag gebruiken.

    Opgeslagen veld Effect
    auto Lokale automatische TTS-overschrijving (always, off, …)
    provider Lokale overschrijving van de primaire provider
    persona Lokale personaoverschrijving
    maxLength Drempelwaarde voor samenvatting/afkapping (standaard 1500 tekens, /tts limit bereik 100–4096)
    summarize Schakelaar voor samenvatting (standaard true)

    Deze overschrijven de effectieve configuratie van tts plus het actieve agents.entries.*.tts-blok voor die host.

    Uitvoerformaten

    De levering van TTS-spraak wordt bepaald door de kanaalmogelijkheden. Kanaalplugins geven aan of TTS in spraakstijl providers om een systeemeigen voice-note-doel moet vragen of normale audio-file-synthese moet behouden, en of het kanaal niet-systeemeigen uitvoer vóór verzending transcodeert.

    Doel Indeling
    Feishu / Matrix / Telegram / WhatsApp Antwoorden als spraakbericht geven de voorkeur aan Opus (opus_48000_64 van ElevenLabs, opus van OpenAI). 48 kHz / 64 kbps biedt een goede balans tussen helderheid en grootte.
    Andere kanalen MP3 (mp3_44100_128 van ElevenLabs, mp3 van OpenAI). 44.1 kHz / 128 kbps is de standaardbalans voor spraak.
    Talk / telefonie Providerspecifieke PCM (Inworld 22050 Hz, Google 24 kHz), of ulaw_8000 van Gradium voor telefonie.

    Opmerkingen per provider:

    • Transcodering voor Feishu / WhatsApp: wanneer een antwoord als spraakbericht binnenkomt als MP3/WebM/WAV/M4A of een ander waarschijnlijk audiobestand, transcodeert de kanaalplugin het vóór verzending als systeemeigen spraakbericht naar 48 kHz Ogg/Opus met ffmpeg (libopus, 64 kbps). WhatsApp verzendt het resultaat via de Baileys-audio-payload met ptt: true en audio/ogg; codecs=opus. Bij een transcoderingsfout: Feishu vangt de fout op en valt terug op verzending van het oorspronkelijke bestand als gewone bijlage; WhatsApp heeft geen terugvaloptie, waardoor de verzending zelf mislukt in plaats van een incompatibele PTT-payload te plaatsen.
    • MiniMax: MP3 (speech-2.8-hd-model, samplefrequentie van 32 kHz) voor normale audiobijlagen; getranscodeerd naar 48 kHz Opus met ffmpeg voor doelen die door het kanaal als spraakbericht worden aangeduid.
    • Xiaomi MiMo: standaard MP3, of WAV wanneer dit is geconfigureerd; getranscodeerd naar 48 kHz Opus met ffmpeg voor doelen die door het kanaal als spraakbericht worden aangeduid.
    • Lokale CLI: gebruikt de geconfigureerde outputFormat. Doelen voor spraakberichten worden geconverteerd naar Ogg/Opus en telefonie-uitvoer wordt met ffmpeg geconverteerd naar onbewerkte 16 kHz mono-PCM.
    • Google Gemini: retourneert onbewerkte 24 kHz PCM. OpenClaw verpakt deze als WAV voor audiobijlagen, transcodeert deze naar 48 kHz Opus voor doelen voor spraakberichten en retourneert PCM rechtstreeks voor Talk/telefonie.
    • Gradium: WAV voor audiobijlagen, Opus voor doelen voor spraakberichten en ulaw_8000 op 8 kHz voor telefonie.
    • Inworld: MP3 voor normale audiobijlagen, systeemeigen OGG_OPUS voor doelen voor spraakberichten en onbewerkte PCM op 22050 Hz voor Talk/telefonie.
    • xAI: standaard MP3; synthese van audiobestanden kan mp3, wav, pcm, mulaw of alaw gebruiken voor zowel gebufferde als gestreamde uitvoer. Doelen voor spraakberichten gebruiken MP3 voor streaming en als gebufferde terugvaloptie, omdat de uitvoer van xAI voor pcm, mulaw en alaw onbewerkte audio zonder headers is. Gebufferde synthese gebruikt het batch-REST-/v1/tts-eindpunt van xAI; textToSpeechStream gebruikt systeemeigen wss://api.x.ai/v1/tts. Dit is niet het realtime-spraakcontract. Een systeemeigen Opus-indeling voor spraakberichten wordt niet ondersteund.
    • Microsoft: gebruikt microsoft.outputFormat (standaard audio-24khz-48kbitrate-mono-mp3).
      • Het meegeleverde transport accepteert een outputFormat, maar niet alle indelingen zijn beschikbaar via de service.
      • Waarden voor de uitvoerindeling volgen de uitvoerindelingen van Microsoft Speech (waaronder Ogg/WebM Opus).
      • Telegram sendVoice accepteert OGG/MP3/M4A; gebruik OpenAI/ElevenLabs als je gegarandeerde Opus-spraakberichten nodig hebt.
      • Als de geconfigureerde Microsoft-uitvoerindeling mislukt, probeert OpenClaw het opnieuw met MP3.
      • Wanneer geen expliciete stemoverschrijving is ingesteld en de standaard Engelse stem wordt gebruikt, schakelt OpenClaw automatisch over naar een Chinese neurale stem (zh-CN-XiaoxiaoNeural, landinstelling zh-CN) als de antwoordtekst voornamelijk uit CJK-tekens bestaat.

    De uitvoerindelingen van OpenAI en ElevenLabs liggen per kanaal vast zoals hierboven vermeld.

    Gedrag van automatische TTS

    Wanneer tts.auto is ingeschakeld, doet OpenClaw het volgende:

    • Slaat TTS over als het antwoord al gestructureerde media bevat.
    • Slaat zeer korte antwoorden over (minder dan 10 tekens).
    • Vat lange antwoorden samen wanneer samenvattingen zijn ingeschakeld, met summaryModel (of agents.defaults.model.primary).
    • Voegt de gegenereerde audio toe aan het antwoord.
    • Verzendt in mode: "final" nog steeds uitsluitend audio-TTS voor gestreamde definitieve antwoorden nadat de tekststream is voltooid; de gegenereerde media ondergaan dezelfde normalisatie van kanaalmedia als normale antwoordbijlagen.

    Als het antwoord langer is dan maxLength, slaat OpenClaw audio nooit volledig over:

    • Samenvatting aan (standaard) en er is een samenvattingsmodel beschikbaar: vat de tekst samen tot ongeveer maxLength tekens en synthetiseert vervolgens de samenvatting.
    • Samenvatting uit, samenvatten mislukt of er is geen API-sleutel beschikbaar voor het samenvattingsmodel: kort de tekst in tot maxLength tekens en synthetiseert de ingekorte tekst.
    text
    Antwoord -> TTS ingeschakeld?  nee -> tekst verzenden  ja  -> bevat media / kort?          ja  -> tekst verzenden          nee -> lengte > limiet?                   nee -> TTS -> audio toevoegen                   ja  -> samenvatting ingeschakeld en beschikbaar?                            nee -> inkorten -> TTS -> audio toevoegen                            ja  -> samenvatten -> TTS -> audio toevoegen

    Veldreferentie

    TTS op het hoogste niveau.*
    auto"off" | "always" | "inbound" | "tagged"

    Modus voor automatische TTS. inbound verzendt alleen audio na een inkomend spraakbericht; tagged verzendt alleen audio wanneer het antwoord [[tts:...]]-instructies of een [[tts:text]]-blok bevat.

    enabledboolean

    Verouderde schakelaar. openclaw doctor --fix migreert deze naar auto.

    mode"final" | "all"default: final

    "all" neemt naast definitieve antwoorden ook tool-/blokantwoorden op.

    providerstring

    Id van de spraakprovider. Wanneer deze niet is ingesteld, gebruikt OpenClaw de eerste geconfigureerde provider in de automatische selecteervolgorde van het register. Verouderde provider: "edge" wordt door openclaw doctor --fix herschreven naar "microsoft".

    personastring

    Actieve persona-id uit personas. Genormaliseerd naar kleine letters.

    personas.<id>object

    Stabiele gesproken identiteit. Velden: label, description, provider, fallbackPolicy, prompt, providers.<provider>. Zie Persona's.

    summaryModelstring

    Goedkoop model voor automatische samenvatting; standaard agents.defaults.model.primary. Accepteert provider/model of een geconfigureerde modelalias.

    modelOverridesobject

    Staat toe dat het model TTS-instructies uitvoert. enabled is standaard true; allowProvider is standaard false.

    providers.<id>object

    Instellingen die eigendom zijn van de provider, geïndexeerd op spraakprovider-id. Verouderde directe blokken (tts.openai, .elevenlabs, .microsoft, .edge) worden herschreven door openclaw doctor --fix; leg alleen tts.providers.<id> vast.

    maxTextLengthnumberdefault: 4096

    Harde limiet voor het aantal invoertekens voor TTS. /tts audio, tts.convert en tts.speak mislukken als deze wordt overschreden.

    timeoutMsnumberdefault: 30000

    Time-out van aanvragen in milliseconden. Een timeoutMs per aanroep (agenttool, Gateway) heeft voorrang wanneer deze is ingesteld; anders heeft een expliciet geconfigureerde tts.timeoutMs voorrang op elke door een plugin ingestelde standaardwaarde van de provider.

    Provider-apiKey-velden kunnen onbewerkte tekenreeksen of SecretRefs zijn. Als tijdens een koude start van de Gateway een TTS-SecretRef niet beschikbaar is, wordt de ingebouwde TTS-mogelijkheid gemarkeerd als geconfigureerd-maar-niet-beschikbaar in plaats van de Gateway te stoppen. tts.speak retourneert dan UNAVAILABLE met reden SECRET_SURFACE_UNAVAILABLE en er wordt geen providerverzoek verzonden. Status en doctor vermelden de gedegradeerde TTS-eigenaar en de bijbehorende configuratiepaden. De expliciete verwijzingen blijven in de runtime-snapshot staan, zodat omgevings- of profielreferenties niet ongemerkt een ander account kunnen selecteren. Herlaadbewerkingen en controles voorafgaand aan het schrijven van configuratie passen het degradatiebeleid met eigenaarsbesef toe: een ongewijzigde, geschikte TTS- eigenaar mag de laatst bekende werkende referenties als verouderd behouden, terwijl een nieuwe of gewijzigde fout koud wordt zonder gezonde eigenaren te blokkeren. Structureel ongeldige verwijzingen en opgeloste waarden laten het opstarten nog steeds mislukken of zorgen ervoor dat de update wordt geweigerd.

    Azure Speech
    apiKeystring

    Omgeving: AZURE_SPEECH_KEY, AZURE_SPEECH_API_KEY of SPEECH_KEY.

    regionstring

    Azure Speech-regio (bijv. eastus). Omgeving: AZURE_SPEECH_REGION of SPEECH_REGION.

    endpointstring

    Optionele overschrijving van het Azure Speech-eindpunt (alias baseUrl).

    speakerVoicestring

    ShortName van de Azure-stem. Standaard en-US-JennyNeural. Verouderde alias: voice.

    langstring

    SSML-taalcode. Standaard en-US.

    outputFormatstring

    Azure X-Microsoft-OutputFormat voor standaardaudio. Standaard audio-24khz-48kbitrate-mono-mp3.

    voiceNoteOutputFormatstring

    Azure X-Microsoft-OutputFormat voor uitvoer van spraakberichten. Standaard ogg-24khz-16bit-mono-opus.

    ElevenLabs
    apiKeystring

    Valt terug op ELEVENLABS_API_KEY of XI_API_KEY.

    modelstring

    Model-id. Standaard eleven_multilingual_v2. Verouderde id's eleven_turbo_v2_5/eleven_turbo_v2 worden genormaliseerd naar het overeenkomende flash-model.

    speakerVoiceIdstring

    ElevenLabs-stem-id. Standaard pMsXgVXv3BLzUgSXRplE. Verouderde alias: voiceId.

    voiceSettingsobject

    stability, similarityBoost, style (elk 0..1, standaardwaarden 0.5/0.75/0), useSpeakerBoost (true|false, standaard true), speed (0.5..2.0, standaard 1.0).

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

    Modus voor tekstnormalisatie.

    languageCodestring

    2-letterige ISO 639-1-code (bijv. en, de).

    seednumber

    Geheel getal 0..4294967295 voor determinisme op basis van beste inspanning.

    baseUrlstring

    Overschrijf de basis-URL van de ElevenLabs-API.

    Google Gemini
    apiKeystring

    Valt terug op GEMINI_API_KEY / GOOGLE_API_KEY. Indien weggelaten, kan TTS models.providers.google.apiKey hergebruiken voordat op de omgevingsvariabele wordt teruggevallen.

    modelstring

    Gemini TTS-model. Standaard gemini-3.1-flash-tts-preview.

    speakerVoicestring

    Naam van een vooraf ingebouwde Gemini-stem. Standaard Kore. Verouderde aliassen: voiceName, voice.

    audioProfilestring

    Stijlprompt in natuurlijke taal die vóór de gesproken tekst wordt geplaatst.

    speakerNamestring

    Optioneel sprekerlabel dat vóór de gesproken tekst wordt geplaatst wanneer je prompt een benoemde spreker gebruikt.

    promptTemplate"audio-profile-v1"

    Stel in op audio-profile-v1 om actieve personapromptvelden in een deterministische Gemini TTS-promptstructuur te verpakken.

    personaPromptstring

    Aanvullende Google-specifieke personaprompttekst die aan de Director's Notes van de sjabloon wordt toegevoegd.

    baseUrlstring

    Alleen https://generativelanguage.googleapis.com wordt geaccepteerd.

    Gradium
    apiKeystring

    Omgevingsvariabele: GRADIUM_API_KEY.

    baseUrlstring

    HTTPS-URL van de Gradium-API op api.gradium.ai. Standaard https://api.gradium.ai.

    speakerVoiceIdstring

    Standaard Emma (YTpq7expH9539ERJ). Verouderde alias: voiceId.

    Inworld

    Primaire Inworld-configuratie

    apiKeystring

    Omgevingsvariabele: INWORLD_API_KEY.

    baseUrlstring

    Standaard https://api.inworld.ai.

    modelIdstring

    Standaard inworld-tts-1.5-max. Ook: inworld-tts-1.5-mini, inworld-tts-1-max, inworld-tts-1.

    speakerVoiceIdstring

    Standaard Sarah. Verouderde alias: voiceId.

    temperaturenumber

    Samplingtemperatuur 0..2 (0 uitgesloten).

    Lokale CLI (tts-local-cli)
    commandstring

    Lokaal uitvoerbaar bestand of opdrachttekenreeks voor CLI-TTS.

    argsstring[]

    Opdrachtargumenten. Ondersteunt de tijdelijke aanduidingen {{Text}}, {{OutputPath}}, {{OutputDir}}, {{OutputBase}}.

    outputFormat"mp3" | "opus" | "wav"

    Verwachte CLI-uitvoerindeling. Standaard mp3 voor audiobijlagen.

    timeoutMsnumber

    Time-out van de opdracht in milliseconden. Standaard 120000.

    cwdstring

    Optionele werkmap voor de opdracht.

    envRecord<string, string>

    Optionele overschrijvingen van omgevingsvariabelen voor de opdracht.

    De standaarduitvoer van de opdracht en gegenereerde of geconverteerde audio zijn beperkt tot 50 MiB. Diagnostische standaardfoutuitvoer is beperkt tot 1 MiB. OpenClaw beëindigt de opdracht en laat de synthese mislukken wanneer een van beide limieten wordt overschreden.

    Microsoft (geen API-sleutel)
    enabledbooleandefault: true

    Gebruik van Microsoft-spraak toestaan.

    speakerVoicestring

    Naam van de neurale Microsoft-stem (bijv. en-US-MichelleNeural). Verouderde alias: voice. Als de standaard Engelse stem actief is en de antwoordtekst hoofdzakelijk uit CJK-tekens bestaat, schakelt OpenClaw automatisch over naar zh-CN-XiaoxiaoNeural.

    langstring

    Taalcode (bijv. en-US).

    outputFormatstring

    Microsoft-uitvoerindeling. Standaard audio-24khz-48kbitrate-mono-mp3. Niet alle indelingen worden ondersteund door het meegeleverde, op Edge gebaseerde transport.

    rate / pitch / volumestring

    Percentagetekenreeksen (bijv. +10%, -5%).

    saveSubtitlesboolean

    JSON-ondertitels naast het audiobestand schrijven.

    proxystring

    Proxy-URL voor Microsoft-spraakverzoeken.

    timeoutMsnumber

    Overschrijving van de time-out voor verzoeken (ms).

    edge.*object

    Verouderde alias. Voer openclaw doctor --fix uit om de opgeslagen configuratie te herschrijven naar providers.microsoft.

    MiniMax
    apiKeystring

    Valt terug op MINIMAX_API_KEY. Authenticatie met Token Plan via MINIMAX_OAUTH_TOKEN, MINIMAX_CODE_PLAN_KEY of MINIMAX_CODING_API_KEY.

    baseUrlstring

    Standaard https://api.minimax.io. Omgevingsvariabele: MINIMAX_API_HOST.

    modelstring

    Standaard speech-2.8-hd. Omgevingsvariabele: MINIMAX_TTS_MODEL.

    speakerVoiceIdstring

    Standaard English_expressive_narrator. Omgevingsvariabele: MINIMAX_TTS_VOICE_ID. Verouderde alias: voiceId.

    speednumber

    0.5..2.0. Standaard 1.0.

    volnumber

    (0, 10]. Standaard 1.0.

    pitchnumber

    Geheel getal -12..12. Standaard 0. Fractionele waarden worden vóór het verzoek afgekapt.

    OpenAI
    apiKeystring

    Valt terug op OPENAI_API_KEY.

    modelstring

    OpenAI TTS-model-id. Standaard gpt-4o-mini-tts.

    speakerVoicestring

    Stemnaam (bijv. alloy, cedar). Standaard coral. Verouderde alias: voice.

    instructionsstring

    Expliciet OpenAI-veld instructions. Wanneer dit is ingesteld, worden personapromptvelden niet automatisch toegewezen.

    extraBody / extra_bodyRecord<string, unknown>

    Extra JSON-velden die na de gegenereerde OpenAI TTS-velden worden samengevoegd met de hoofdtekst van /audio/speech-verzoeken. Gebruik dit voor OpenAI-compatibele eindpunten zoals Kokoro die providerspecifieke sleutels zoals lang vereisen; onveilige prototypesleutels worden genegeerd.

    baseUrlstring

    Overschrijf het OpenAI TTS-eindpunt. Resolutievolgorde: configuratie → OPENAI_TTS_BASE_URLhttps://api.openai.com/v1. Niet-standaardwaarden worden behandeld als OpenAI-compatibele TTS-eindpunten, zodat aangepaste model- en stemnamen worden geaccepteerd en speed de bereikcontrole voor 0.25..4.0 verliest.

    OpenRouter
    apiKeystring

    Omgevingsvariabele: OPENROUTER_API_KEY. Kan models.providers.openrouter.apiKey hergebruiken.

    baseUrlstring

    Standaard https://openrouter.ai/api/v1. Verouderde https://openrouter.ai/v1 wordt genormaliseerd.

    modelstring

    Standaard hexgrad/kokoro-82m. Alias: modelId.

    speakerVoicestring

    Standaard af_alloy. Verouderde aliassen: voice, voiceId.

    responseFormat"mp3" | "pcm"

    Standaard mp3.

    speednumber

    Providerspecifieke overschrijving van de snelheid.

    Volcengine (BytePlus Seed Speech)
    apiKeystring

    Omgevingsvariabele: VOLCENGINE_TTS_API_KEY of BYTEPLUS_SEED_SPEECH_API_KEY.

    resourceIdstring

    Standaard seed-tts-1.0. Omgevingsvariabele: VOLCENGINE_TTS_RESOURCE_ID. Gebruik seed-tts-2.0 wanneer je project recht heeft op TTS 2.0.

    appKeystring

    App-sleutelheader. Standaard aGjiRDfUWi. Omgevingsvariabele: VOLCENGINE_TTS_APP_KEY.

    baseUrlstring

    Overschrijf het HTTP-eindpunt voor Seed Speech TTS. Omgevingsvariabele: VOLCENGINE_TTS_BASE_URL.

    speakerVoicestring

    Stemtype. Standaard en_female_anna_mars_bigtts. Omgevingsvariabele: VOLCENGINE_TTS_VOICE. Verouderde alias: voice.

    speedRationumber

    Providerspecifieke snelheidsverhouding, 0.2..3.

    emotionstring

    Providerspecifieke emotietag.

    appId / token / clusterstring

    Verouderde velden van de Volcengine Speech Console. Omgevingsvariabelen: VOLCENGINE_TTS_APPID, VOLCENGINE_TTS_TOKEN, VOLCENGINE_TTS_CLUSTER (standaard volcano_tts).

    xAI
    apiKeystring

    Omgevingsvariabele: XAI_API_KEY.

    baseUrlstring

    Standaard https://api.x.ai/v1. Omgevingsvariabele: XAI_BASE_URL.

    speakerVoiceIdstring

    Standaard eve. Met authenticatie haalt openclaw infer tts voices --provider xai de huidige ingebouwde catalogus op; zonder authenticatie geeft het de offline terugvalopties ara, eve, leo, rex en sal weer. Aangepaste stem-id's van het account worden doorgestuurd, zelfs wanneer ze niet in de ingebouwde lijst voorkomen. Verouderde alias: voiceId.

    languagestring

    BCP-47-taalcode of auto. Standaard en.

    responseFormat"mp3" | "wav" | "pcm" | "mulaw" | "alaw"

    Standaard mp3.

    speednumber

    Providerspecifieke overschrijving van de snelheid, 0.7..1.5.

    Xiaomi MiMo
    apiKeystring

    Omgevingsvariabele: XIAOMI_API_KEY.

    baseUrlstring

    Standaard https://api.xiaomimimo.com/v1. Omgevingsvariabele: XIAOMI_BASE_URL.

    modelstring

    Standaard mimo-v2.5-tts. Omgevingsvariabele: XIAOMI_TTS_MODEL. Ondersteunt ook mimo-v2.5-tts-voicedesign.

    speakerVoicestring

    Standaard mimo_default voor modellen met vooraf ingestelde stemmen. Omgevingsvariabele: XIAOMI_TTS_VOICE. Verouderde alias: voice. Wordt niet verzonden voor mimo-v2.5-tts-voicedesign.

    format"mp3" | "wav"

    Standaard mp3. Omgevingsvariabele: XIAOMI_TTS_FORMAT.

    stylestring

    Optionele stijlinstructie in natuurlijke taal die als gebruikersbericht wordt verzonden en niet wordt uitgesproken. Voor mimo-v2.5-tts-voicedesign is dit de prompt voor stemontwerp; OpenClaw levert een standaardwaarde wanneer deze wordt weggelaten.

    Agenttool

    De tool tts zet tekst om in spraak en retourneert een audiobijlage voor het afleveren van antwoorden. Op Feishu, Matrix, Telegram en WhatsApp wordt de audio afgeleverd als een spraakbericht in plaats van als bestandsbijlage. Feishu en WhatsApp kunnen niet-Opus TTS-uitvoer op dit pad transcoderen wanneer ffmpeg beschikbaar is.

    WhatsApp verzendt audio via Baileys als een PTT-spraakbericht (audio met ptt: true) en verzendt zichtbare tekst afzonderlijk van PTT-audio, omdat clients bijschriften bij spraakberichten niet consistent weergeven.

    De tool accepteert optionele velden channel en timeoutMs; timeoutMs is een time-out per aanroep voor providerverzoeken in milliseconden. Waarden per aanroep overschrijven tts.timeoutMs; geconfigureerde TTS-time-outs overschrijven elke door een Plugin ingestelde standaardwaarde van de provider.

    Gateway-RPC

    Methode Doel
    tts.status Huidige TTS-status en laatste poging lezen.
    tts.enable Lokale automatische voorkeur instellen op always.
    tts.disable Lokale automatische voorkeur instellen op off.
    tts.convert Eenmalig tekst → audio.
    tts.setProvider Lokale providervoorkeur instellen.
    tts.personas Geconfigureerde persona's en de actieve persona weergeven.
    tts.setPersona Lokale personavoorkeur instellen.
    tts.providers Geconfigureerde providers en hun status weergeven.

    Servicekoppelingen

    Gerelateerd

    Was this useful?
    Op deze pagina

    Op deze pagina