Quick Start
1
Works out of the box
Voice notes are transcribed automatically — no config needed.
2
Echo the transcript back
Mirror the recognised text back so users can verify what the bot heard.
3
Force a language
Skip auto-detection for faster, more accurate short clips.
4
Custom STT model
Swap the default model for any LiteLLM-supported STT model.
5
Opt out entirely
Disable transcription for a channel.
How It Works
A voice note is downloaded, transcribed, and handed to the agent as text. A user records a voice note in Telegram (or Slack, or WhatsApp) and taps send. Within a second, the bot’s typing indicator appears — the audio has been downloaded and handed towhisper-1. When the transcript comes back, the agent processes it exactly as if the user had typed the text. If echo_transcripts: true, the user first sees the recognised text confirmed back to them, then the agent’s reply — helpful during onboarding so users know their voice was heard correctly.
Graceful degradation
A voice note is never silently dropped — the agent always sees at least a placeholder.- STT disabled → the turn still reaches the agent with
[Voice message received]. - Transcription fails → same placeholder.
- STT tool import fails (missing whisper/litellm deps) → same placeholder plus a
WARNINGin logs.
Configuration Options
Thestt: block lives under any channel in gateway.yaml / bot.yaml.
Bool shorthand
Resolution order
The effective policy is resolved from, in order:config.metadata["stt"](operator override; dict or bool),- a direct
config.sttattribute (schema-backed configs), then - the on-by-default default.
Platform Support
Placeholder Behaviour
When transcription is unavailable, the agent receives[Voice message received] instead of nothing.
The invariant: a voice note always reaches the agent with at least the placeholder.
Common Patterns
Voice notes fit several bot styles.Voice-first assistant
No config needed. The user taps the mic, records a question, and the agent replies in text — the transcription happens automatically.Multilingual support
Force a language for a single-language community bot. Auto-detection is skipped for faster, more accurate recognition.Debug transcription quality
Echo the recognised text back so users can spot recognition errors and rephrase.Best Practices
Set a language when your users speak one language
Set a language when your users speak one language
language: "en" (or "es", "fr", …) skips auto-detection — faster and more accurate for short clips.Turn on echo_transcripts during onboarding
Turn on echo_transcripts during onboarding
echo_transcripts: true shows users what the bot heard so they can rephrase if recognition was off.Keep enabled: true unless you have a reason to disable
Keep enabled: true unless you have a reason to disable
Even with STT off, the placeholder fallback still lets voice-note messages reach the agent. Only disable for privacy, cost, or latency reasons.
Ship your STT provider's API key
Ship your STT provider's API key
openai/whisper-1 is the default, so set OPENAI_API_KEY. Any LiteLLM-supported STT model works via the model: field.Related
Gateway Overview
The overall gateway pattern — voice notes are one of several inbound-media types.
Audio Overview
The higher-level
AudioAgent abstraction — different from this gateway feature.
