Tools

Zamiana tekstu na mowę

OpenClaw może konwertować wychodzące odpowiedzi na audio za pomocą 14 dostawców mowy i dostarczać natywne wiadomości głosowe w Feishu, Matrix, Telegram i WhatsApp, załączniki audio wszędzie indziej oraz strumienie PCM/Ulaw dla telefonii i Talk.

TTS to połowa trybu Talk stt-tts odpowiadająca za wyjście mowy. Natywne dla dostawcy sesje Talk realtime syntetyzują mowę wewnątrz dostawcy czasu rzeczywistego zamiast wywoływać tę ścieżkę TTS, natomiast sesje transcription nie syntetyzują głosowej odpowiedzi asystenta.

Szybki start

  • Pick a provider

    OpenAI i ElevenLabs to najbardziej niezawodne opcje hostowane. Microsoft i Local CLI działają bez klucza API. Pełną listę znajdziesz w macierzy dostawców.

  • Set the API key

    Wyeksportuj zmienną środowiskową dla swojego dostawcy (na przykład OPENAI_API_KEY, ELEVENLABS_API_KEY). Microsoft i Local CLI nie wymagają klucza.

  • Enable in config

    Ustaw messages.tts.auto: "always" i messages.tts.provider:

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

    /tts status pokazuje bieżący stan. /tts audio Hello from OpenClaw wysyła jednorazową odpowiedź audio.

  • Obsługiwani dostawcy

    Dostawca Uwierzytelnianie Uwagi
    Azure Speech AZURE_SPEECH_KEY + AZURE_SPEECH_REGION (także AZURE_SPEECH_API_KEY, SPEECH_KEY, SPEECH_REGION) Natywne wyjście notatek głosowych Ogg/Opus i telefonia.
    DeepInfra DEEPINFRA_API_KEY TTS zgodne z OpenAI. Domyślnie hexgrad/Kokoro-82M.
    ElevenLabs ELEVENLABS_API_KEY lub XI_API_KEY Klonowanie głosu, wielojęzyczność, deterministyczność przez seed.
    Google Gemini GEMINI_API_KEY lub GOOGLE_API_KEY TTS API Gemini; świadome persony przez promptTemplate: "audio-profile-v1".
    Gradium GRADIUM_API_KEY Wyjście notatek głosowych i telefonii.
    Inworld INWORLD_API_KEY Strumieniowe API TTS. Natywne notatki głosowe Opus i telefonia PCM.
    Local CLI brak Uruchamia skonfigurowane lokalne polecenie TTS.
    Microsoft brak Publiczny neuralny TTS Edge przez node-edge-tts. Najlepszy możliwy wysiłek, bez SLA.
    MiniMax MINIMAX_API_KEY (lub plan tokenowy: MINIMAX_OAUTH_TOKEN, MINIMAX_CODE_PLAN_KEY, MINIMAX_CODING_API_KEY) API T2A v2. Domyślnie speech-2.8-hd.
    OpenAI OPENAI_API_KEY Używane także do automatycznych podsumowań; obsługuje personę instructions.
    OpenRouter OPENROUTER_API_KEY (może ponownie użyć models.providers.openrouter.apiKey) Domyślny model hexgrad/kokoro-82m.
    Volcengine VOLCENGINE_TTS_API_KEY lub BYTEPLUS_SEED_SPEECH_API_KEY (starszy AppID/token: VOLCENGINE_TTS_APPID/_TOKEN) HTTP API BytePlus Seed Speech.
    Vydra VYDRA_API_KEY Wspólny dostawca obrazów, wideo i mowy.
    xAI XAI_API_KEY Wsadowy TTS xAI. Natywna notatka głosowa Opus nie jest obsługiwana.
    Xiaomi MiMo XIAOMI_API_KEY MiMo TTS przez uzupełnianie czatu Xiaomi.

    Jeśli skonfigurowano wielu dostawców, wybrany dostawca jest używany jako pierwszy, a pozostali są opcjami awaryjnymi. Automatyczne podsumowanie używa summaryModel (lub agents.defaults.model.primary), więc ten dostawca również musi być uwierzytelniony, jeśli pozostawiasz podsumowania włączone.

    Konfiguracja

    Konfiguracja TTS znajduje się pod messages.tts w ~/.openclaw/openclaw.json. Wybierz preset i dostosuj blok dostawcy:

    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 (no key)

    {
    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",
        },
      },
    },
    },
    }
    

    Nadpisania głosu dla poszczególnych agentów

    Użyj agents.list[].tts, gdy jeden agent powinien mówić z użyciem innego dostawcy, głosu, modelu, persony lub trybu Auto-TTS. Blok agenta jest głęboko scalany z messages.tts, więc poświadczenia dostawcy mogą pozostać w globalnej konfiguracji dostawcy:

    {
      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" },
              },
            },
          },
        ],
      },
    }
    

    Aby przypiąć personę dla konkretnego agenta, ustaw agents.list[].tts.persona obok konfiguracji dostawcy — nadpisuje ona globalne messages.tts.persona tylko dla tego agenta.

    Kolejność pierwszeństwa dla automatycznych odpowiedzi, /tts audio, /tts status i narzędzia agenta tts:

    1. messages.tts
    2. aktywne agents.list[].tts
    3. nadpisanie kanału, gdy kanał obsługuje channels.<channel>.tts
    4. nadpisanie konta, gdy kanał przekazuje channels.<channel>.accounts.<id>.tts
    5. lokalne preferencje /tts dla tego hosta
    6. dyrektywy inline [[tts:...]], gdy włączone są nadpisania modelu

    Nadpisania kanału i konta używają tego samego kształtu co messages.tts i są głęboko scalane z wcześniejszymi warstwami, więc współdzielone dane uwierzytelniające dostawcy mogą pozostać w messages.tts, podczas gdy kanał lub konto bota zmienia tylko głos, model, personę albo tryb automatyczny:

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

    Persony

    Persona to stabilna tożsamość mówiona, którą można deterministycznie stosować u różnych dostawców. Może preferować jednego dostawcę, definiować neutralny względem dostawcy zamiar promptu oraz przenosić powiązania specyficzne dla dostawcy dotyczące głosów, modeli, szablonów promptów, ziaren i ustawień głosu.

    Minimalna persona

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

    Pełna persona (prompt neutralny względem dostawcy)

    {
      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,
                  },
                },
              },
            },
          },
        },
      },
    }
    

    Rozpoznawanie persony

    Aktywna persona jest wybierana deterministycznie:

    1. lokalna preferencja /tts persona <id>, jeśli ustawiona.
    2. messages.tts.persona, jeśli ustawiona.
    3. Brak persony.

    Wybór dostawcy działa według zasady najpierw jawne ustawienia:

    1. Bezpośrednie nadpisania (CLI, Gateway, Talk, dozwolone dyrektywy TTS).
    2. lokalna preferencja /tts provider <id>.
    3. provider aktywnej persony.
    4. messages.tts.provider.
    5. Automatyczny wybór z rejestru.

    Dla każdej próby dostawcy OpenClaw scala konfiguracje w tej kolejności:

    1. messages.tts.providers.<id>
    2. messages.tts.personas.<persona>.providers.<id>
    3. Zaufane nadpisania żądania
    4. Dozwolone nadpisania z dyrektyw TTS emitowanych przez model

    Jak dostawcy używają promptów persony

    Pola promptu persony (profile, scene, sampleContext, style, accent, pacing, constraints) są neutralne względem dostawcy. Każdy dostawca decyduje, jak ich użyć:

    Google Gemini

    Opakowuje pola promptu persony w strukturę promptu Gemini TTS tylko wtedy, gdy efektywna konfiguracja dostawcy Google ustawia promptTemplate: "audio-profile-v1" albo personaPrompt. Starsze pola audioProfile i speakerName nadal są poprzedzane jako tekst promptu specyficzny dla Google. Tagi audio inline, takie jak [whispers] lub [laughs], wewnątrz bloku [[tts:text]] są zachowywane w transkrypcie Gemini; OpenClaw nie generuje tych tagów.

    OpenAI

    Mapuje pola promptu persony na pole żądania instructions tylko wtedy, gdy nie skonfigurowano jawnych OpenAI instructions. Jawne instructions zawsze wygrywa.

    Inni dostawcy

    Używają tylko powiązań persony specyficznych dla dostawcy pod personas.<id>.providers.<provider>. Pola promptu persony są ignorowane, chyba że dostawca implementuje własne mapowanie promptu persony.

    Zasady awaryjnego przełączenia

    fallbackPolicy kontroluje zachowanie, gdy persona nie ma powiązania dla próbowanego dostawcy:

    Zasada Zachowanie
    preserve-persona Domyślnie. Pola promptu neutralne względem dostawcy pozostają dostępne; dostawca może ich użyć albo je zignorować.
    provider-defaults Persona jest pomijana podczas przygotowania promptu dla tej próby; dostawca używa swoich neutralnych wartości domyślnych, a przełączanie awaryjne na innych dostawców jest kontynuowane.
    fail Pomija tę próbę dostawcy z reasonCode: "not_configured" i personaBinding: "missing". Dostawcy awaryjni nadal są próbowani.

    Całe żądanie TTS kończy się niepowodzeniem tylko wtedy, gdy każdy próbowany dostawca zostanie pominięty albo zakończy się błędem.

    Wybór dostawcy sesji Talk jest ograniczony do sesji. Klient Talk powinien wybierać identyfikatory dostawców, identyfikatory modeli, identyfikatory głosów i ustawienia regionalne z talk.catalog oraz przekazywać je przez sesję Talk lub żądanie przekazania. Otwarcie sesji głosowej nie powinno modyfikować messages.tts ani globalnych wartości domyślnych dostawcy Talk.

    Dyrektywy sterowane modelem

    Domyślnie asystent może emitować dyrektywy [[tts:...]], aby nadpisać głos, model lub szybkość dla pojedynczej odpowiedzi, a także opcjonalny blok [[tts:text]]...[[/tts:text]] dla ekspresyjnych wskazówek, które powinny pojawić się tylko w audio:

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

    Gdy messages.tts.auto ma wartość "tagged", dyrektywy są wymagane, aby wyzwolić audio. Strumieniowe dostarczanie bloków usuwa dyrektywy z widocznego tekstu, zanim kanał je zobaczy, nawet gdy są podzielone między sąsiadujące bloki.

    provider=... jest ignorowane, chyba że modelOverrides.allowProvider: true. Gdy odpowiedź deklaruje provider=..., pozostałe klucze w tej dyrektywie są parsowane tylko przez tego dostawcę; nieobsługiwane klucze są usuwane i zgłaszane jako ostrzeżenia dyrektywy TTS.

    Dostępne klucze dyrektyw:

    • provider (zarejestrowany identyfikator dostawcy; wymaga allowProvider: true)
    • voice / voiceName / voice_name / google_voice / voiceId
    • model / google_model
    • stability, similarityBoost, style, speed, useSpeakerBoost
    • vol / volume (głośność MiniMax, 0–10)
    • pitch (całkowita wysokość dźwięku MiniMax, od −12 do 12; wartości ułamkowe są obcinane)
    • emotion (tag emocji Volcengine)
    • applyTextNormalization (auto|on|off)
    • languageCode (ISO 639-1)
    • seed

    Całkowicie wyłącz nadpisania modelu:

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

    Zezwól na przełączanie dostawcy, pozostawiając inne pokrętła konfigurowalne:

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

    Polecenia ukośnikowe

    Pojedyncze polecenie /tts. Na Discord OpenClaw rejestruje też /voice, ponieważ /tts jest wbudowanym poleceniem Discord — tekstowe /tts ... nadal działa.

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

    Uwagi dotyczące zachowania:

    • /tts on zapisuje lokalną preferencję TTS jako always; /tts off zapisuje ją jako off.
    • /tts chat on|off|default zapisuje ograniczone do sesji nadpisanie automatycznego TTS dla bieżącego czatu.
    • /tts persona <id> zapisuje lokalną preferencję persony; /tts persona off ją czyści.
    • /tts latest odczytuje najnowszą odpowiedź asystenta z transkryptu bieżącej sesji i wysyła ją raz jako audio. Przechowuje tylko hash tej odpowiedzi we wpisie sesji, aby zapobiec duplikatom wysyłania głosu.
    • /tts audio generuje jednorazową odpowiedź audio (nie włącza TTS).
    • limit i summary są przechowywane w lokalnych preferencjach, nie w głównej konfiguracji.
    • /tts status zawiera diagnostykę awaryjnego przełączenia dla najnowszej próby — Fallback: <primary> -> <used>, Attempts: ... oraz szczegóły każdej próby (provider:outcome(reasonCode) latency).
    • /status pokazuje aktywny tryb TTS oraz skonfigurowanego dostawcę, model, głos i oczyszczone metadane niestandardowego punktu końcowego, gdy TTS jest włączone.

    Preferencje poszczególnych użytkowników

    Polecenia ukośnikowe zapisują lokalne nadpisania do prefsPath. Wartość domyślna to ~/.openclaw/settings/tts.json; nadpisz ją zmienną środowiskową OPENCLAW_TTS_PREFS albo messages.tts.prefsPath.

    Przechowywane pole Efekt
    auto Lokalne nadpisanie automatycznego TTS (always, off, …)
    provider Lokalne nadpisanie głównego dostawcy
    persona Lokalne nadpisanie persony
    maxLength Próg podsumowania (domyślnie 1500 znaków)
    summarize Przełącznik podsumowania (domyślnie true)

    Nadpisują one efektywną konfigurację z messages.tts oraz aktywny blok agents.list[].tts dla tego hosta.

    Formaty wyjściowe (stałe)

    Dostarczanie głosu TTS jest sterowane możliwościami kanału. Pluginy kanałów ogłaszają, czy TTS w stylu głosowym powinno prosić dostawców o natywny cel voice-note, czy zachować normalną syntezę audio-file i tylko oznaczać zgodne wyjście do dostarczania głosowego.

    • Kanały obsługujące notatki głosowe: odpowiedzi w formie notatek głosowych preferują Opus (opus_48000_64 z ElevenLabs, opus z OpenAI).
      • 48 kHz / 64 kb/s to dobry kompromis dla wiadomości głosowych.
    • Feishu / WhatsApp: gdy odpowiedź w formie notatki głosowej jest tworzona jako MP3/WebM/WAV/M4A lub inny prawdopodobny plik audio, Plugin kanału transkoduje ją do 48 kHz Ogg/Opus za pomocą ffmpeg przed wysłaniem natywnej wiadomości głosowej. WhatsApp wysyła wynik przez ładunek Baileys audio z ptt: true oraz audio/ogg; codecs=opus. Jeśli konwersja się nie powiedzie, Feishu otrzymuje oryginalny plik jako załącznik; wysyłka WhatsApp kończy się niepowodzeniem zamiast opublikowania niezgodnego ładunku PTT.
    • BlueBubbles: utrzymuje syntezę po stronie dostawcy na zwykłej ścieżce pliku audio; wyjścia MP3 i CAF są oznaczane do dostarczenia jako notatka głosowa iMessage.
    • Inne kanały: MP3 (mp3_44100_128 z ElevenLabs, mp3 z OpenAI).
      • 44,1 kHz / 128 kb/s to domyślny balans dla wyrazistości mowy.
    • MiniMax: MP3 (model speech-2.8-hd, częstotliwość próbkowania 32 kHz) dla zwykłych załączników audio. Dla deklarowanych przez kanał docelowych notatek głosowych OpenClaw transkoduje MP3 z MiniMax do 48 kHz Opus za pomocą ffmpeg przed dostarczeniem, gdy kanał deklaruje transkodowanie.
    • Xiaomi MiMo: domyślnie MP3 albo WAV, gdy tak skonfigurowano. Dla deklarowanych przez kanał docelowych notatek głosowych OpenClaw transkoduje wyjście Xiaomi do 48 kHz Opus za pomocą ffmpeg przed dostarczeniem, gdy kanał deklaruje transkodowanie.
    • Lokalne CLI: używa skonfigurowanego outputFormat. Cele notatek głosowych są konwertowane do Ogg/Opus, a wyjście telefoniczne jest konwertowane do surowego mono PCM 16 kHz za pomocą ffmpeg.
    • Google Gemini: TTS Gemini API zwraca surowe PCM 24 kHz. OpenClaw opakowuje je jako WAV dla załączników audio, transkoduje do 48 kHz Opus dla docelowych notatek głosowych i zwraca PCM bezpośrednio dla Talk/telefonii.
    • Gradium: WAV dla załączników audio, Opus dla docelowych notatek głosowych oraz ulaw_8000 przy 8 kHz dla telefonii.
    • Inworld: MP3 dla zwykłych załączników audio, natywne OGG_OPUS dla docelowych notatek głosowych oraz surowe PCM przy 22050 Hz dla Talk/telefonii.
    • xAI: domyślnie MP3; responseFormat może mieć wartość mp3, wav, pcm, mulaw lub alaw. OpenClaw używa wsadowego punktu końcowego REST TTS xAI i zwraca kompletny załącznik audio; strumieniowy WebSocket TTS xAI nie jest używany przez tę ścieżkę dostawcy. Natywny format Opus dla notatek głosowych nie jest obsługiwany przez tę ścieżkę.
    • Microsoft: używa microsoft.outputFormat (domyślnie audio-24khz-48kbitrate-mono-mp3).
      • Dołączony transport akceptuje outputFormat, ale nie wszystkie formaty są dostępne w usłudze.
      • Wartości formatu wyjściowego są zgodne z formatami wyjściowymi Microsoft Speech (w tym Ogg/WebM Opus).
      • Telegram sendVoice akceptuje OGG/MP3/M4A; użyj OpenAI/ElevenLabs, jeśli potrzebujesz gwarantowanych wiadomości głosowych Opus.
      • Jeśli skonfigurowany format wyjściowy Microsoft zawiedzie, OpenClaw ponawia próbę z MP3.

    Formaty wyjściowe OpenAI/ElevenLabs są stałe dla każdego kanału (zobacz wyżej).

    Automatyczne zachowanie TTS

    Gdy messages.tts.auto jest włączone, OpenClaw:

    • Pomija TTS, jeśli odpowiedź zawiera już multimedia lub dyrektywę MEDIA:.
    • Pomija bardzo krótkie odpowiedzi (poniżej 10 znaków).
    • Streszcza długie odpowiedzi, gdy streszczenia są włączone, używając summaryModel (lub agents.defaults.model.primary).
    • Dołącza wygenerowany dźwięk do odpowiedzi.
    • W mode: "final" nadal wysyła TTS tylko z dźwiękiem dla strumieniowanych odpowiedzi końcowych po zakończeniu strumienia tekstu; wygenerowane multimedia przechodzą przez tę samą normalizację multimediów kanału co zwykłe załączniki odpowiedzi.

    Jeśli odpowiedź przekracza maxLength, a streszczenie jest wyłączone (lub nie ma klucza API dla modelu streszczeń), dźwięk jest pomijany i wysyłana jest zwykła odpowiedź tekstowa.

    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
    

    Formaty wyjściowe według kanału

    Cel Format
    Feishu / Matrix / Telegram / WhatsApp Odpowiedzi w formie notatek głosowych preferują Opus (opus_48000_64 z ElevenLabs, opus z OpenAI). 48 kHz / 64 kbps równoważy klarowność i rozmiar.
    Inne kanały MP3 (mp3_44100_128 z ElevenLabs, mp3 z OpenAI). 44,1 kHz / 128 kbps to domyślne ustawienie dla mowy.
    Talk / telefonia Natywny dla dostawcy PCM (Inworld 22050 Hz, Google 24 kHz) albo ulaw_8000 z Gradium dla telefonii.

    Uwagi według dostawcy:

    • Transkodowanie Feishu / WhatsApp: Gdy odpowiedź w formie notatki głosowej trafia jako MP3/WebM/WAV/M4A, Plugin kanału transkoduje ją do Ogg/Opus 48 kHz za pomocą ffmpeg. WhatsApp wysyła przez Baileys z ptt: true i audio/ogg; codecs=opus. Jeśli konwersja się nie powiedzie: Feishu wraca do dołączenia oryginalnego pliku; wysyłka WhatsApp kończy się niepowodzeniem zamiast opublikowania niezgodnego ładunku PTT.
    • MiniMax / Xiaomi MiMo: Domyślnie MP3 (32 kHz dla MiniMax speech-2.8-hd); transkodowane do Opus 48 kHz dla celów notatek głosowych przez ffmpeg.
    • Lokalne CLI: Używa skonfigurowanego outputFormat. Cele notatek głosowych są konwertowane do Ogg/Opus, a wyjście telefoniczne do surowego, monofonicznego PCM 16 kHz.
    • Google Gemini: Zwraca surowy PCM 24 kHz. OpenClaw opakowuje go jako WAV dla załączników, transkoduje do Opus 48 kHz dla celów notatek głosowych, a dla Talk/telefonii zwraca bezpośrednio PCM.
    • Inworld: Załączniki MP3, natywny OGG_OPUS dla notatek głosowych, surowy PCM 22050 Hz dla Talk/telefonii.
    • xAI: Domyślnie MP3; responseFormat może mieć wartość mp3|wav|pcm|mulaw|alaw. Używa wsadowego punktu końcowego REST xAI — strumieniowe WebSocket TTS nie jest używane. Natywny format notatek głosowych Opus nie jest obsługiwany.
    • Microsoft: Używa microsoft.outputFormat (domyślnie audio-24khz-48kbitrate-mono-mp3). Telegram sendVoice akceptuje OGG/MP3/M4A; użyj OpenAI/ElevenLabs, jeśli potrzebujesz gwarantowanych wiadomości głosowych Opus. Jeśli skonfigurowany format Microsoft zawiedzie, OpenClaw ponawia próbę z MP3.

    Formaty wyjściowe OpenAI i ElevenLabs są ustalone dla każdego kanału zgodnie z powyższą listą.

    Opis pól

    Najwyższego poziomu messages.tts.*
    auto"off" | "always" | "inbound" | "tagged"

    Tryb automatycznego TTS. inbound wysyła dźwięk tylko po przychodzącej wiadomości głosowej; tagged wysyła dźwięk tylko wtedy, gdy odpowiedź zawiera dyrektywy [[tts:...]] lub blok [[tts:text]].

    enabledboolean

    Starszy przełącznik. openclaw doctor --fix migruje go do auto.

    mode"final" | "all"

    "all" obejmuje odpowiedzi narzędzi/bloków oprócz odpowiedzi końcowych.

    providerstring

    Identyfikator dostawcy mowy. Gdy nie jest ustawiony, OpenClaw używa pierwszego skonfigurowanego dostawcy w kolejności automatycznego wyboru z rejestru. Starsze provider: "edge" jest przepisywane na "microsoft" przez openclaw doctor --fix.

    personastring

    Identyfikator aktywnej persony z personas. Normalizowany do małych liter.

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InBlcnNvbmFzLjxpZA " type="object"> Stabilna tożsamość mówiona. Pola: label, description, provider, fallbackPolicy, prompt, providers.<provider>. Zobacz Persony.

    summaryModelstring

    Tani model do automatycznego podsumowania; domyślnie agents.defaults.model.primary. Akceptuje provider/model lub skonfigurowany alias modelu.

    modelOverridesobject

    Zezwól modelowi na emitowanie dyrektyw TTS. enabled domyślnie ma wartość true; allowProvider domyślnie ma wartość false.

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InByb3ZpZGVycy48aWQ " type="object"> Ustawienia należące do dostawcy, kluczowane identyfikatorem dostawcy mowy. Starsze bezpośrednie bloki (messages.tts.openai, .elevenlabs, .microsoft, .edge) są przepisywane przez openclaw doctor --fix; zatwierdzaj tylko messages.tts.providers.<id>.

    maxTextLengthnumber

    Twardy limit znaków wejściowych TTS. /tts audio kończy się niepowodzeniem, jeśli zostanie przekroczony.

    timeoutMsnumber

    Limit czasu żądania w milisekundach.

    prefsPathstring

    Nadpisz lokalną ścieżkę JSON preferencji (dostawca/limit/podsumowanie). Domyślnie ~/.openclaw/settings/tts.json.

    Azure Speech

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

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InJlZ2lvbiIgdHlwZT0ic3RyaW5nIg Region Azure Speech (np. eastus). Env: AZURE_SPEECH_REGION lub SPEECH_REGION. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImVuZHBvaW50IiB0eXBlPSJzdHJpbmci Opcjonalne nadpisanie punktu końcowego Azure Speech (alias baseUrl). OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InZvaWNlIiB0eXBlPSJzdHJpbmci ShortName głosu Azure. Domyślnie en-US-JennyNeural. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImxhbmciIHR5cGU9InN0cmluZyI Kod języka SSML. Domyślnie en-US. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9Im91dHB1dEZvcm1hdCIgdHlwZT0ic3RyaW5nIg Azure X-Microsoft-OutputFormat dla standardowego dźwięku. Domyślnie audio-24khz-48kbitrate-mono-mp3. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InZvaWNlTm90ZU91dHB1dEZvcm1hdCIgdHlwZT0ic3RyaW5nIg Azure X-Microsoft-OutputFormat dla wyjścia notatki głosowej. Domyślnie ogg-24khz-16bit-mono-opus. OPENCLAW_DOCS_MARKER:paramClose:

    ElevenLabs

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImFwaUtleSIgdHlwZT0ic3RyaW5nIg Wraca do ELEVENLABS_API_KEY lub XI_API_KEY. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9Im1vZGVsIiB0eXBlPSJzdHJpbmci Identyfikator modelu (np. eleven_multilingual_v2, eleven_v3). OPENCLAW_DOCS_MARKER:paramClose:

    voiceIdstring
    voiceSettingsobject

    stability, similarityBoost, style (każde 0..1), useSpeakerBoost (true|false), speed (0.5..2.0, 1.0 = normalnie).

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

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9Imxhbmd1YWdlQ29kZSIgdHlwZT0ic3RyaW5nIg 2-literowy ISO 639-1 (np. en, de). OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InNlZWQiIHR5cGU9Im51bWJlciI Liczba całkowita 0..4294967295 dla deterministyczności na zasadzie najlepszej próby. OPENCLAW_DOCS_MARKER:paramClose:

    baseUrlstring
    Google Gemini

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImFwaUtleSIgdHlwZT0ic3RyaW5nIg Wraca do GEMINI_API_KEY / GOOGLE_API_KEY. Jeśli pominięto, TTS może ponownie użyć models.providers.google.apiKey przed awaryjnym użyciem env. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9Im1vZGVsIiB0eXBlPSJzdHJpbmci Model TTS Gemini. Domyślnie gemini-3.1-flash-tts-preview. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InZvaWNlTmFtZSIgdHlwZT0ic3RyaW5nIg Nazwa wbudowanego głosu Gemini. Domyślnie Kore. Alias: voice. OPENCLAW_DOCS_MARKER:paramClose:

    audioProfilestring
    speakerNamestring

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InByb21wdFRlbXBsYXRlIiB0eXBlPSciYXVkaW8tcHJvZmlsZS12MSIn Ustaw na audio-profile-v1, aby opakować pola promptu aktywnej persony w deterministyczną strukturę promptu TTS Gemini. OPENCLAW_DOCS_MARKER:paramClose:

    personaPromptstring

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImJhc2VVcmwiIHR5cGU9InN0cmluZyI Akceptowane jest tylko 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 Domyślnie https://api.gradium.ai. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InZvaWNlSWQiIHR5cGU9InN0cmluZyI Domyślnie Emma (YTpq7expH9539ERJ). OPENCLAW_DOCS_MARKER:paramClose:

    Inworld

    Podstawowy Inworld

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

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImJhc2VVcmwiIHR5cGU9InN0cmluZyI Domyślnie https://api.inworld.ai. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9Im1vZGVsSWQiIHR5cGU9InN0cmluZyI Domyślnie inworld-tts-1.5-max. Także: inworld-tts-1.5-mini, inworld-tts-1-max, inworld-tts-1. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InZvaWNlSWQiIHR5cGU9InN0cmluZyI Domyślnie Sarah. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InRlbXBlcmF0dXJlIiB0eXBlPSJudW1iZXIi Temperatura próbkowania 0..2. OPENCLAW_DOCS_MARKER:paramClose:

    Local CLI (tts-local-cli)
    commandstring

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImFyZ3MiIHR5cGU9InN0cmluZ1tdIg Argumenty polecenia. Obsługuje symbole zastępcze {{Text}}, {{OutputPath}}, {{OutputDir}}, {{OutputBase}}. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9Im91dHB1dEZvcm1hdCIgdHlwZT0nIm1wMyIgfCAib3B1cyIgfCAid2F2Iic Oczekiwany format wyjścia CLI. Domyślnie mp3 dla załączników audio. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InRpbWVvdXRNcyIgdHlwZT0ibnVtYmVyIg Limit czasu polecenia w milisekundach. Domyślnie 120000. OPENCLAW_DOCS_MARKER:paramClose:

    cwdstring
    envRecord<string, string��-�өr:'jYޝ�i�Ƨ���v�
    Microsoft (no API key)
    enabledboolean

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InZvaWNlIiB0eXBlPSJzdHJpbmci Nazwa głosu neuronowego Microsoft (np. en-US-MichelleNeural). OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImxhbmciIHR5cGU9InN0cmluZyI Kod języka (np. en-US). OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9Im91dHB1dEZvcm1hdCIgdHlwZT0ic3RyaW5nIg Format wyjściowy Microsoft. Domyślnie audio-24khz-48kbitrate-mono-mp3. Nie wszystkie formaty są obsługiwane przez dołączony transport oparty na Edge. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InJhdGUgLyBwaXRjaCAvIHZvbHVtZSIgdHlwZT0ic3RyaW5nIg Ciągi procentowe (np. +10%, -5%). OPENCLAW_DOCS_MARKER:paramClose:

    saveSubtitlesboolean
    proxystring
    timeoutMsnumber

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImVkZ2UuKiIgdHlwZT0ib2JqZWN0IiBkZXByZWNhdGVk Starszy alias. Uruchom openclaw doctor --fix, aby przepisać utrwaloną konfigurację do providers.microsoft. OPENCLAW_DOCS_MARKER:paramClose:

    MiniMax

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImFwaUtleSIgdHlwZT0ic3RyaW5nIg Powraca do MINIMAX_API_KEY. Uwierzytelnianie Token Plan przez MINIMAX_OAUTH_TOKEN, MINIMAX_CODE_PLAN_KEY lub MINIMAX_CODING_API_KEY. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImJhc2VVcmwiIHR5cGU9InN0cmluZyI Domyślnie https://api.minimax.io. Env: MINIMAX_API_HOST. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9Im1vZGVsIiB0eXBlPSJzdHJpbmci Domyślnie speech-2.8-hd. Env: MINIMAX_TTS_MODEL. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InZvaWNlSWQiIHR5cGU9InN0cmluZyI Domyślnie English_expressive_narrator. Env: MINIMAX_TTS_VOICE_ID. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InNwZWVkIiB0eXBlPSJudW1iZXIi 0.5..2.0. Domyślnie 1.0. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InZvbCIgdHlwZT0ibnVtYmVyIg (0, 10]. Domyślnie 1.0. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InBpdGNoIiB0eXBlPSJudW1iZXIi Liczba całkowita -12..12. Domyślnie 0. Wartości ułamkowe są obcinane przed żądaniem. OPENCLAW_DOCS_MARKER:paramClose:

    OpenAI

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImFwaUtleSIgdHlwZT0ic3RyaW5nIg Powraca do OPENAI_API_KEY. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9Im1vZGVsIiB0eXBlPSJzdHJpbmci Identyfikator modelu TTS OpenAI (np. gpt-4o-mini-tts). OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InZvaWNlIiB0eXBlPSJzdHJpbmci Nazwa głosu (np. alloy, cedar). OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9Imluc3RydWN0aW9ucyIgdHlwZT0ic3RyaW5nIg Jawne pole OpenAI instructions. Gdy jest ustawione, pola promptu persony nie są mapowane automatycznie. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImV4dHJhQm9keSAvIGV4dHJhX2JvZHkiIHR5cGU9IlJlY29yZDxzdHJpbmcsIHVua25vd24 ">Dodatkowe pola JSON scalane z treściami żądań /audio/speech po wygenerowanych polach TTS OpenAI. Użyj tego dla punktów końcowych zgodnych z OpenAI, takich jak Kokoro, które wymagają kluczy specyficznych dla dostawcy, takich jak lang; niebezpieczne klucze prototypu są ignorowane. OPENCLAW_DOCS_MARKER:paramClose:

    baseUrlstring

    Nadpisz punkt końcowy TTS OpenAI. Kolejność rozstrzygania: konfiguracja → OPENAI_TTS_BASE_URLhttps://api.openai.com/v1. Wartości inne niż domyślne są traktowane jako punkty końcowe TTS zgodne z OpenAI, więc niestandardowe nazwy modeli i głosów są akceptowane.

    OpenRouter

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImFwaUtleSIgdHlwZT0ic3RyaW5nIg Env: OPENROUTER_API_KEY. Może ponownie użyć models.providers.openrouter.apiKey. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImJhc2VVcmwiIHR5cGU9InN0cmluZyI Domyślnie https://openrouter.ai/api/v1. Starszy https://openrouter.ai/v1 jest normalizowany. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9Im1vZGVsIiB0eXBlPSJzdHJpbmci Domyślnie hexgrad/kokoro-82m. Alias: modelId. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InZvaWNlIiB0eXBlPSJzdHJpbmci Domyślnie af_alloy. Alias: voiceId. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InJlc3BvbnNlRm9ybWF0IiB0eXBlPScibXAzIiB8ICJwY20iJw Domyślnie mp3. OPENCLAW_DOCS_MARKER:paramClose:

    speednumber
    Volcengine (BytePlus Seed Speech)

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

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InJlc291cmNlSWQiIHR5cGU9InN0cmluZyI Domyślnie seed-tts-1.0. Env: VOLCENGINE_TTS_RESOURCE_ID. Użyj seed-tts-2.0, gdy projekt ma uprawnienie TTS 2.0. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImFwcEtleSIgdHlwZT0ic3RyaW5nIg Nagłówek klucza aplikacji. Domyślnie aGjiRDfUWi. Env: VOLCENGINE_TTS_APP_KEY. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImJhc2VVcmwiIHR5cGU9InN0cmluZyI Nadpisz punkt końcowy HTTP TTS Seed Speech. Env: VOLCENGINE_TTS_BASE_URL. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InZvaWNlIiB0eXBlPSJzdHJpbmci Typ głosu. Domyślnie en_female_anna_mars_bigtts. Env: VOLCENGINE_TTS_VOICE. OPENCLAW_DOCS_MARKER:paramClose:

    speedRationumber
    emotionstring

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImFwcElkIC8gdG9rZW4gLyBjbHVzdGVyIiB0eXBlPSJzdHJpbmciIGRlcHJlY2F0ZWQ Starsze pola Volcengine Speech Console. Env: VOLCENGINE_TTS_APPID, VOLCENGINE_TTS_TOKEN, VOLCENGINE_TTS_CLUSTER (domyślnie 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 Domyślnie https://api.x.ai/v1. Env: XAI_BASE_URL. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InZvaWNlSWQiIHR5cGU9InN0cmluZyI Domyślnie eve. Głosy live: ara, eve, leo, rex, sal, una. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9Imxhbmd1YWdlIiB0eXBlPSJzdHJpbmci Kod języka BCP-47 lub auto. Domyślnie en. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InJlc3BvbnNlRm9ybWF0IiB0eXBlPScibXAzIiB8ICJ3YXYiIHwgInBjbSIgfCAibXVsYXciIHwgImFsYXciJw Domyślnie 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 Domyślnie https://api.xiaomimimo.com/v1. Env: XIAOMI_BASE_URL. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9Im1vZGVsIiB0eXBlPSJzdHJpbmci Domyślnie mimo-v2.5-tts. Env: XIAOMI_TTS_MODEL. Obsługuje także mimo-v2-tts. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InZvaWNlIiB0eXBlPSJzdHJpbmci Domyślnie mimo_default. Env: XIAOMI_TTS_VOICE. OPENCLAW_DOCS_MARKER:paramClose:

    OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImZvcm1hdCIgdHlwZT0nIm1wMyIgfCAid2F2Iic Domyślnie mp3. Env: XIAOMI_TTS_FORMAT. OPENCLAW_DOCS_MARKER:paramClose:

    stylestring

    Narzędzie agenta

    Narzędzie tts konwertuje tekst na mowę i zwraca załącznik audio do dostarczenia odpowiedzi. W Feishu, Matrix, Telegram i WhatsApp audio jest dostarczane jako wiadomość głosowa, a nie jako załącznik pliku. Feishu i WhatsApp mogą transkodować wyjście TTS inne niż Opus na tej ścieżce, gdy ffmpeg jest dostępny.

    WhatsApp wysyła audio przez Baileys jako notatkę głosową PTT (audio z ptt: true) i wysyła widoczny tekst osobno od audio PTT, ponieważ klienty nie renderują konsekwentnie podpisów w notatkach głosowych.

    Narzędzie akceptuje opcjonalne pola channel i timeoutMs; timeoutMs to limit czasu żądania dostawcy dla pojedynczego wywołania, w milisekundach.

    RPC Gateway

    Metoda Cel
    tts.status Odczytaj bieżący stan TTS i ostatnią próbę.
    tts.enable Ustaw lokalną preferencję automatyczną na always.
    tts.disable Ustaw lokalną preferencję automatyczną na off.
    tts.convert Jednorazowa konwersja tekst → audio.
    tts.setProvider Ustaw lokalną preferencję dostawcy.
    tts.setPersona Ustaw lokalną preferencję persony.
    tts.providers Wyświetl skonfigurowanych dostawców i status.

    Linki usług

    Powiązane