Problem
The OpenAI-compatible TTS provider (used for local TTS servers like Piper/Kokoro) treats responseFormat: "mp3" as not voice-compatible for Telegram voice notes. However, Edge TTS (Microsoft provider) outputs MP3 by default and works fine as Telegram voice messages.
Current behavior
OpenAI provider (speech-provider-CzRYCn2R.js):
voiceCompatible: req.target === "voice-note" && responseFormat === "opus"
When configured with responseFormat: "mp3" for Telegram:
voiceCompatible = false
- OpenClaw falls back to
sendAudio instead of sendVoice
- Telegram displays it as a file attachment with filename, no voice waveform UI
Edge TTS provider (speech-provider-cIDKP9Bn.js):
- Outputs
audio-24khz-48kbitrate-mono-mp3
isVoiceCompatibleAudio() checks file extension (.mp3 is in whitelist)
- Telegram
sendVoice accepts MP3 and converts server-side
- Voice note UI (circle + waveform) works correctly
Expected behavior
MP3 from OpenAI-compatible local TTS should behave identically to Edge TTS:
- Pass
voiceCompatible check
- Route through
sendVoice
- Show native Telegram voice message UI
Workaround
Manually patching the source:
// speech-provider-CzRYCn2R.js line ~189
voiceCompatible: req.target === "voice-note" && (responseFormat === "opus" || responseFormat === "mp3")
Related
Environment
- OpenClaw version: 2026.5.6
- Channel: Telegram
- Local TTS: Piper TTS (OpenAI-compatible API)
- Server response formats tested:
mp3, opus, ogg
Problem
The OpenAI-compatible TTS provider (used for local TTS servers like Piper/Kokoro) treats
responseFormat: "mp3"as not voice-compatible for Telegram voice notes. However, Edge TTS (Microsoft provider) outputs MP3 by default and works fine as Telegram voice messages.Current behavior
OpenAI provider (
speech-provider-CzRYCn2R.js):When configured with
responseFormat: "mp3"for Telegram:voiceCompatible=falsesendAudioinstead ofsendVoiceEdge TTS provider (
speech-provider-cIDKP9Bn.js):audio-24khz-48kbitrate-mono-mp3isVoiceCompatibleAudio()checks file extension (.mp3is in whitelist)sendVoiceaccepts MP3 and converts server-sideExpected behavior
MP3 from OpenAI-compatible local TTS should behave identically to Edge TTS:
voiceCompatiblechecksendVoiceWorkaround
Manually patching the source:
Related
sendVoice, rather than relying on Telegram to accept non-Opus formats.Environment
mp3,opus,ogg