WhatsApp Web previously only processed text messages — voice notes,
images, videos, and documents were silently dropped because
text_content() returns empty for non-text messages.
This adds media message handling to the Event::Message handler:
- Audio/voice notes: download via wa-rs client and transcribe using
the existing transcription.rs module (Whisper API), forwarded as
"[Voice] <transcription>"
- Images: forward caption or "[Image]" tag
- Videos: forward caption or "[Video]" tag
- Documents: forward filename/title or "[Document]" tag
The transcription config is wired through with_transcription() on the
WhatsApp Web channel, following the same pattern as TelegramChannel.
When transcription is not configured, voice notes get an informational
placeholder instead of being silently dropped.
Closes#2918
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>