Skip to main content
Voice notes sent to your gateway bot are transcribed and delivered to the agent as text — no code changes required, on by default across Telegram, Slack, and WhatsApp.

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.
The stt: block also accepts a bare boolean as shorthand — stt: true is equivalent to {enabled: true}, and stt: false to {enabled: false}.

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 to whisper-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 WARNING in logs.

Configuration Options

The stt: block lives under any channel in gateway.yaml / bot.yaml.

Bool shorthand

Resolution order

The effective policy is resolved from, in order:
  1. config.metadata["stt"] (operator override; dict or bool),
  2. a direct config.stt attribute (schema-backed configs), then
  3. 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

language: "en" (or "es", "fr", …) skips auto-detection — faster and more accurate for short clips.
echo_transcripts: true shows users what the bot heard so they can rephrase if recognition was off.
Even with STT off, the placeholder fallback still lets voice-note messages reach the agent. Only disable for privacy, cost, or latency reasons.
openai/whisper-1 is the default, so set OPENAI_API_KEY. Any LiteLLM-supported STT model works via the model: field.

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.