<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Tts on FixClaw</title>
        <link>https://fixclaw.dev/tags/tts/</link>
        <description>Recent content in Tts on FixClaw</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en-us</language>
        <lastBuildDate>Mon, 01 Jan 0001 00:00:00 +0000</lastBuildDate><atom:link href="https://fixclaw.dev/tags/tts/index.xml" rel="self" type="application/rss+xml" /><item>
            <title>TTS Voice Note Delivery Regression in v2026.4.9</title>
            <link>https://fixclaw.dev/troubleshooting/tts-voice-note-delivery-regression-in-v202649/</link>
            <pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate>
            <guid>https://fixclaw.dev/troubleshooting/tts-voice-note-delivery-regression-in-v202649/</guid>
            <description>&lt;h2 id=&#34;symptom&#34;&gt;Symptom&#xA;&lt;/h2&gt;&lt;p&gt;After upgrading to OpenClaw v2026.4.9, TTS (text-to-speech) voice note delivery is completely broken:&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Outbound TTS (Voice Notes from Assistant):&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;User sends a text message to the assistant via Telegram&lt;/li&gt;&#xA;&lt;li&gt;Assistant calls &lt;code&gt;tts&lt;/code&gt; tool with &lt;code&gt;channel: &amp;quot;telegram&amp;quot;&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Tool returns &lt;code&gt;Generated audio reply&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Expected:&lt;/strong&gt; Voice note delivered to user&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Actual:&lt;/strong&gt; Only text response received; no voice note&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;strong&gt;Inbound STT (Voice Notes to Assistant):&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;User sends a voice note to the assistant via Telegram&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Expected:&lt;/strong&gt; Audio transcribed and processed&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Actual:&lt;/strong&gt; No transcription; &lt;code&gt;pdf&lt;/code&gt; tool fails with &amp;ldquo;Expected PDF but got audio/ogg&amp;rdquo;, &lt;code&gt;image&lt;/code&gt; tool fails with &amp;ldquo;Unsupported media type: audio&amp;rdquo;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;strong&gt;Evidence from logs:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Gateway logs show &lt;strong&gt;no TTS-related events&lt;/strong&gt; after the &lt;code&gt;tts&lt;/code&gt; tool call&lt;/li&gt;&#xA;&lt;li&gt;No &lt;code&gt;sendVoice&lt;/code&gt; API calls are made to Telegram&lt;/li&gt;&#xA;&lt;li&gt;Text messages continue to work correctly (proving Telegram connectivity is intact)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Historical logs show the last &lt;code&gt;sendVoice&lt;/code&gt; attempts failing:&#xA;telegram sendVoice failed: Network request for &amp;lsquo;sendVoice&amp;rsquo; failed!&#xA;telegram final reply failed: HttpError: Network request for &amp;lsquo;sendVoice&amp;rsquo; failed!&lt;/p&gt;&#xA;&lt;h2 id=&#34;root-cause-analysis&#34;&gt;Root Cause Analysis&#xA;&lt;/h2&gt;&lt;p&gt;The investigation reveals that the &lt;strong&gt;tool→channel delivery handoff is broken&lt;/strong&gt;:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;ElevenLabs API is functioning correctly&lt;/strong&gt; — Audio files are successfully generated by the &lt;code&gt;tts&lt;/code&gt; tool&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Tool reports success&lt;/strong&gt; — &lt;code&gt;Generated audio reply&lt;/code&gt; message confirms audio creation&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Broken handoff&lt;/strong&gt; — The audio file is &lt;strong&gt;never passed to the gateway&amp;rsquo;s Telegram channel&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;No &lt;code&gt;sendVoice&lt;/code&gt; call&lt;/strong&gt; — No Telegram API call is initiated to deliver the voice note&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Regression introduced in v2026.4.9&lt;/strong&gt; — The change from pre-v2026.4.9 behavior (corrupted delivery) to v2026.4.9 (no delivery) indicates a code regression in how the &lt;code&gt;tts&lt;/code&gt; tool result is handled by the channel delivery layer&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;strong&gt;Pre-v2026.4.9 behavior:&lt;/strong&gt; TTS generated audio but it was corrupted (appearing as long strings of exclamation marks in webchat).&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;v2026.4.9 behavior:&lt;/strong&gt; TTS generates audio but delivers nothing at all.&lt;/p&gt;&#xA;&lt;p&gt;The shift from &amp;ldquo;corrupted delivery&amp;rdquo; to &amp;ldquo;no delivery&amp;rdquo; suggests the audio file handling code path was either removed or broken during the v2026.4.9 update.&lt;/p&gt;&#xA;&lt;h2 id=&#34;solution&#34;&gt;Solution&#xA;&lt;/h2&gt;&lt;p&gt;This is a &lt;strong&gt;code regression bug&lt;/strong&gt; that requires a fix in the OpenClaw codebase. The following steps are needed:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Restore the &lt;code&gt;sendVoice&lt;/code&gt; call path&lt;/strong&gt; in the channel delivery layer — Ensure the audio file generated by the &lt;code&gt;tts&lt;/code&gt; tool is properly passed to &lt;code&gt;sendVoice&lt;/code&gt; for Telegram delivery&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Verify audio file handling&lt;/strong&gt; — Confirm the audio file path/content is correctly transferred between the tool result handler and the Telegram sender&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Add integration tests&lt;/strong&gt; for TTS→Telegram delivery to prevent future regressions&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Fix STT handling&lt;/strong&gt; — Ensure inbound voice notes are properly recognized and routed to the STT pipeline instead of being rejected as unsupported media types&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;strong&gt;Temporary Workaround:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Users may attempt to use the &lt;code&gt;message&lt;/code&gt; tool with explicit media path for file attachment (untested)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;prevention&#34;&gt;Prevention&#xA;&lt;/h2&gt;&lt;p&gt;To prevent similar regressions in future releases:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Add automated TTS integration tests&lt;/strong&gt; — Create end-to-end tests that verify voice notes are actually delivered to Telegram (not just that the tool reports success)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Test the full delivery pipeline&lt;/strong&gt; — Ensure both generation AND delivery are tested together, not in isolation&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Monitor channel delivery layer changes&lt;/strong&gt; — Any modifications to how tool results are processed should include regression testing for media delivery&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Log delivery confirmation&lt;/strong&gt; — Add explicit logging when &lt;code&gt;sendVoice&lt;/code&gt; is called to make failures more visible in logs&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Multi-channel testing&lt;/strong&gt; — Test TTS functionality when multiple channels (Telegram + webchat) are active simultaneously, as session handling issues may compound the problem&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;additional-information&#34;&gt;Additional Information&#xA;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Affected versions:&lt;/strong&gt; OpenClaw v2026.4.9 (updated 2026-04-09) and potentially later versions&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Previous working behavior:&lt;/strong&gt; Pre-v2026.4.9 had corrupted audio delivery&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;TTS Provider tested:&lt;/strong&gt; ElevenLabs (&lt;code&gt;eleven_multilingual_v2&lt;/code&gt;)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Channel:&lt;/strong&gt; Telegram&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Network connectivity:&lt;/strong&gt; Confirmed working (text messages deliver successfully)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;API credentials:&lt;/strong&gt; ElevenLabs credentials verified functional via manual API calls&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Multi-session factor:&lt;/strong&gt; Session handling issues may contribute when Telegram and webchat are used simultaneously&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;sources&#34;&gt;Sources&#xA;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/openclaw/openclaw/issues/64272&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;GitHub Issue #64272&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</description>
        </item><item>
            <title>Agent-Sent TTS Audio Not Delivered via Webchat</title>
            <link>https://fixclaw.dev/troubleshooting/agent-sent-tts-audio-not-delivered-via-webchat/</link>
            <pubDate>Sun, 08 Mar 2026 00:00:00 +0000</pubDate>
            <guid>https://fixclaw.dev/troubleshooting/agent-sent-tts-audio-not-delivered-via-webchat/</guid>
            <description>&lt;h2 id=&#34;symptom&#34;&gt;Symptom&#xA;&lt;/h2&gt;&lt;p&gt;Agent-initiated TTS audio fails to reach webchat clients through two different paths:&lt;/p&gt;&#xA;&lt;h3 id=&#34;path-1-tts-tool&#34;&gt;Path 1: &lt;code&gt;tts&lt;/code&gt; Tool&#xA;&lt;/h3&gt;&lt;ol&gt;&#xA;&lt;li&gt;Agent calls the &lt;code&gt;tts&lt;/code&gt; tool with text&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;textToSpeech()&lt;/code&gt; succeeds, audio file is created on disk (confirmed valid MP3)&lt;/li&gt;&#xA;&lt;li&gt;Agent replies with &lt;code&gt;NO_REPLY&lt;/code&gt; (as instructed by tool description)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;No audio is delivered to the webchat client&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h3 id=&#34;path-2-tts-tags&#34;&gt;Path 2: &lt;code&gt;[[tts]]&lt;/code&gt; Tags&#xA;&lt;/h3&gt;&lt;ol&gt;&#xA;&lt;li&gt;Agent includes &lt;code&gt;[[tts]]&lt;/code&gt; or &lt;code&gt;[[tts:text]]...[[/tts:text]]&lt;/code&gt; tags in a reply&lt;/li&gt;&#xA;&lt;li&gt;During streaming, raw tags are visible in the UI (not processed)&lt;/li&gt;&#xA;&lt;li&gt;After the run completes, &lt;strong&gt;no audio is delivered&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;Tags may remain visible as raw text in the final message&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h3 id=&#34;working-path-tts-audio&#34;&gt;Working Path: &lt;code&gt;/tts audio&lt;/code&gt;&#xA;&lt;/h3&gt;&lt;ol&gt;&#xA;&lt;li&gt;User runs &lt;code&gt;/tts audio Hello world&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Audio is generated and delivered correctly on both webchat and Telegram&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;root-cause-analysis&#34;&gt;Root Cause Analysis&#xA;&lt;/h2&gt;&lt;p&gt;This is a &lt;strong&gt;regression&lt;/strong&gt; caused by a mismatch between where audio is emitted and where it is processed in the reply delivery pipeline.&lt;/p&gt;&#xA;&lt;h3 id=&#34;root-cause-1-block-vs-final-payload-mismatch-tts-tool-path&#34;&gt;Root Cause 1: Block vs Final Payload Mismatch (&lt;code&gt;tts&lt;/code&gt; tool path)&#xA;&lt;/h3&gt;&lt;p&gt;The issue lies in the disconnect between how pending tool media is emitted and how webchat processes replies:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Emission side&lt;/strong&gt; (&lt;code&gt;pi-embedded&lt;/code&gt; — &lt;code&gt;handleAgentEnd&lt;/code&gt; → &lt;code&gt;flushPendingMediaAndChannel&lt;/code&gt;):&#xA;const pendingToolMediaReply = consumePendingToolMediaReply(ctx.state);&#xA;if (pendingToolMediaReply &amp;amp;&amp;amp; hasAssistantVisibleReply(pendingToolMediaReply))&#xA;ctx.emitBlockReply(pendingToolMediaReply);  // ← emitted as &amp;ldquo;block&amp;rdquo; kind&#xA;Audio is emitted as a &lt;strong&gt;&amp;ldquo;block&amp;rdquo;&lt;/strong&gt; kind reply and queued in &lt;code&gt;state.pendingToolMediaUrls&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Processing side&lt;/strong&gt; (&lt;code&gt;server.impl&lt;/code&gt; — webchat dispatch post-processing):&#xA;const finalPayloads = deliveredReplies&#xA;.filter((entry) =&amp;gt; entry.kind === &amp;ldquo;final&amp;rdquo;)  // ← blocks excluded&#xA;.map((entry) =&amp;gt; entry.payload);&#xA;const audioBlocks = buildWebchatAudioContentBlocksFromReplyPayloads(finalPayloads);&#xA;Webchat &lt;strong&gt;only&lt;/strong&gt; extracts audio from &amp;ldquo;final&amp;rdquo; kind payloads, completely ignoring block payloads.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;The block payload containing the audio file path is collected by the deliver callback but never processed for audio extraction. The audio file sits on disk, unused.&lt;/p&gt;&#xA;&lt;h3 id=&#34;root-cause-2-auto-tts-mode-skips-block-replies-tts-tag-path&#34;&gt;Root Cause 2: Auto-TTS Mode Skips Block Replies (&lt;code&gt;[[tts]]&lt;/code&gt; tag path)&#xA;&lt;/h3&gt;&lt;p&gt;The auto-TTS mode defaults to &lt;code&gt;&amp;quot;final&amp;quot;&lt;/code&gt;, which causes block-kind replies to be skipped entirely:&lt;/p&gt;&#xA;&lt;p&gt;// speech-core/runtime-api.js — maybeApplyTtsToPayload&#xA;if ((config.mode ?? &amp;ldquo;final&amp;rdquo;) === &amp;ldquo;final&amp;rdquo; &amp;amp;&amp;amp; params.kind &amp;amp;&amp;amp; params.kind !== &amp;ldquo;final&amp;rdquo;)&#xA;return nextPayload;  // ← blocks skip TTS processing entirely&lt;/p&gt;&#xA;&lt;p&gt;For streaming models, agent text is delivered incrementally as block replies, so &lt;code&gt;[[tts]]&lt;/code&gt; tags pass through unprocessed during streaming.&lt;/p&gt;&#xA;&lt;p&gt;A synthetic fallback exists in dispatch that attempts TTS on accumulated block text after the run completes:&lt;/p&gt;&#xA;&lt;p&gt;// dispatch — after embedded run&#xA;if (resolveConfiguredTtsMode(cfg) === &amp;ldquo;final&amp;rdquo; &amp;amp;&amp;amp; replies.length === 0&#xA;&amp;amp;&amp;amp; blockCount &amp;gt; 0 &amp;amp;&amp;amp; accumulatedBlockText.trim()) {&#xA;const ttsSyntheticReply = await maybeApplyTtsToReplyPayload({&#xA;payload: { text: accumulatedBlockText },&#xA;cfg, channel: ttsChannel, kind: &amp;ldquo;final&amp;rdquo;, &amp;hellip;&#xA;});&lt;/p&gt;&#xA;&lt;p&gt;However, this fallback &lt;strong&gt;only fires when &lt;code&gt;replies.length === 0&lt;/code&gt;&lt;/strong&gt; (no final replies returned from the embedded run). Whether the embedded run returns final replies depends on the model/provider implementation, making this path unreliable.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;solution&#34;&gt;Solution&#xA;&lt;/h2&gt;&lt;h3 id=&#34;for-tts-tool-path&#34;&gt;For &lt;code&gt;tts&lt;/code&gt; tool path:&#xA;&lt;/h3&gt;&lt;p&gt;Modify &lt;code&gt;server.impl&lt;/code&gt; to include block-kind payloads when extracting audio content blocks:&lt;/p&gt;&#xA;&lt;p&gt;// server.impl — webchat dispatch post-processing&#xA;// Before (broken):&#xA;const finalPayloads = deliveredReplies&#xA;.filter((entry) =&amp;gt; entry.kind === &amp;ldquo;final&amp;rdquo;)&#xA;.map((entry) =&amp;gt; entry.payload);&lt;/p&gt;&#xA;&lt;p&gt;// After (fixed):&#xA;const allPayloads = deliveredReplies&#xA;.map((entry) =&amp;gt; entry.payload);&#xA;const audioBlocks = buildWebchatAudioContentBlocksFromReplyPayloads(allPayloads);&lt;/p&gt;&#xA;&lt;h3 id=&#34;for-tts-tag-path&#34;&gt;For &lt;code&gt;[[tts]]&lt;/code&gt; tag path:&#xA;&lt;/h3&gt;&lt;p&gt;Modify &lt;code&gt;speech-core/runtime-api.js&lt;/code&gt; to process block-kind replies when in streaming mode:&lt;/p&gt;&#xA;&lt;p&gt;// speech-core/runtime-api.js — maybeApplyTtsToPayload&#xA;// Before (broken):&#xA;if ((config.mode ?? &amp;ldquo;final&amp;rdquo;) === &amp;ldquo;final&amp;rdquo; &amp;amp;&amp;amp; params.kind &amp;amp;&amp;amp; params.kind !== &amp;ldquo;final&amp;rdquo;)&#xA;return nextPayload;&lt;/p&gt;&#xA;&lt;p&gt;// After (fixed):&#xA;// Allow block-kind processing when streaming is active&#xA;if (params.kind === &amp;ldquo;block&amp;rdquo; &amp;amp;&amp;amp; !config.streamingMode) {&#xA;return nextPayload;&#xA;}&lt;/p&gt;&#xA;&lt;p&gt;Alternatively, update the synthetic fallback in dispatch to be more robust regardless of whether final replies are present.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;prevention&#34;&gt;Prevention&#xA;&lt;/h2&gt;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;Add integration tests&lt;/strong&gt; that verify audio delivery for all TTS paths (tool, tags, and slash command) across all channels (webchat, Telegram).&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Introduce a unified payload extraction function&lt;/strong&gt; that processes both block and final kinds for audio content, preventing similar mismatches in the future.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Add QA checklist&lt;/strong&gt; for TTS-related changes requiring verification that audio artifacts flow correctly from generation → emission → processing → delivery.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Document payload kind semantics&lt;/strong&gt; clearly, especially the distinction between &amp;ldquo;block&amp;rdquo; and &amp;ldquo;final&amp;rdquo; kinds and which processing stages expect which kinds.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;additional-information&#34;&gt;Additional Information&#xA;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Affected version&lt;/strong&gt;: 2026.3.7/2026.3.8&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Operating system&lt;/strong&gt;: Debian GNU/Linux 12 (bookworm)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Install method&lt;/strong&gt;: Docker&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Affected models&lt;/strong&gt;: claude-opus-4.6, gpt-codex-5.4&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Affected channels&lt;/strong&gt;: web, telegram&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Severity&lt;/strong&gt;: Complete feature disablement (100% impact on agent-sent TTS)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Frequency&lt;/strong&gt;: Always reproducible&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The &lt;code&gt;/tts audio&lt;/code&gt; slash command works correctly because it bypasses the embedded handler entirely and delivers audio through the standard final-payload path.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;sources&#34;&gt;Sources&#xA;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/openclaw/openclaw/issues/63033&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;GitHub Issue #63033&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</description>
        </item></channel>
</rss>
