Parent: #520
Depends on: #521, #522
Context
Telegram supports voice messages (OGG/Opus) and audio file attachments natively. teloxide already provides `Message::voice()` and `Message::audio()` accessors — currently ignored.
Changes
`crates/zeph-channels/src/telegram.rs`
- Check `msg.voice()` and `msg.audio()` in addition to `msg.text()`
- Download audio via Telegram Bot API `getFile` + HTTP fetch
- Convert to `Attachment::Audio` and attach to `ChannelMessage`
- If text is also present (caption), include both
Audio flow
- User sends voice message in Telegram
- Adapter detects `msg.voice()`, gets `file_id`
- Downloads OGG/Opus file via Bot API
- Creates `ChannelMessage { text: "", attachments: [Audio { data, mime: "audio/ogg" }] }`
- Agent loop transcribes via configured STT backend
- Transcribed text enters normal agent pipeline
Size limits
- Telegram voice messages: up to 20 MB
- Apply configurable max duration (default: 120s) to prevent abuse
Acceptance criteria