What's New in v9.3.0
📬 Newsletter Media Downloads, Poll Vote Webhooks & Audio Played Receipts
Version 9.3.0 adds newsletter media downloads by server ID, exposes decrypted poll vote selections in webhooks, and introduces played receipts for incoming audio and voice notes. Group read receipts now use the original message sender, and whatsmeow is updated to the latest revision.
✨ Features
Newsletter Media Download (#818)
- Adds
GET /newsletter/messages/{server_id}/download?newsletter_id=...to download image, video, video-note, audio, document, and sticker media from newsletters - Returns local file metadata and a base-path-aware public URL without exposing WhatsApp media secrets
- Documents the endpoint in OpenAPI and covers validation, target selection, media selection, and REST behavior with regression tests
Poll Vote Selections in Webhooks (#816)
- Decrypts poll vote updates with the pinned whatsmeow client and persists device- and chat-scoped poll definitions from live messages, sent polls, and history sync
- Returns selected option names, lowercase hashes, full option lists, and explicit resolution states while preserving
event: "message"compatibility - Handles current poll creation variants plus poll edit/add-option updates, and degrades safely when definitions or original message secrets are unavailable
Audio Played Receipts (#813)
- Adds
POST /message/:message_id/playedto send WhatsApp's played receipt for incoming audio and voice-note messages - Resolves messages through device-scoped chat storage, verifies the requested chat and audio direction/type, and uses the original participant JID for group receipts
- Adds the equivalent MCP
mark_playedaction and documents the REST endpoint in OpenAPI
🐛 Bug Fixes
Group Read Receipts Use Original Sender (#814)
- Uses the stored original group message sender for
MarkAsReadinstead of the active device JID, so incoming group read receipts reach WhatsApp correctly - Resolves group messages by their full storage identity
(device_id, chat_jid, message_id)and normalizes stored sender JIDs, including@lidto PN when a mapping is available - Rejects missing or non-user group senders instead of falling back to the local device JID, while preserving existing direct-chat behavior without requiring chat storage
🔧 Technical Improvements
Dependency & Documentation Updates
- Updates whatsmeow to the latest revision
- Syncs the README with the current server capabilities and configuration
What's Changed
- feat(message): add audio played receipts (#813) by @aldinokemal
- docs: sync README with current server by @aldinokemal
- fix(message): use original group sender for read receipts (#814) by @aldinokemal
- feat(webhook): expose poll vote selections (#816) by @aldinokemal
- chore: update whatsmeow to latest by @aldinokemal
- feat(newsletter): add media download endpoint (#818) by @aldinokemal
- chore(release): v9.3.0 by @aldinokemal
Contributors
Full Changelog: v9.2.2...v9.3.0