What's New in v9.0.1
🛠️ Maintenance Release: Sender Names, Reliable Webhooks & URL Fixes
This release adds sender display names across chat history, reactions, and webhook payloads, while fixing several reliability issues around generated URLs, device webhook setup, webhook delivery, concurrent image sends, and LID JID formatting. It also improves diagnostics for undecryptable messages, documents device pairing responses more clearly, and refreshes WhatsApp protocol dependencies.
✨ New Features
Sender Display Names (#782)
- Adds
sender_display_nameto chat history messages, nested reactions, and sender-bearing webhook payloads - Resolves names dynamically using the best available contact information while preserving the existing raw sender fields and legacy
from_namebehavior - Uses per-response caching to avoid repeated lookups and requires no database migration or backfill
🐛 Bug Fixes
Generated URLs Preserve Non-Default Ports (#781)
- QR-code and downloaded-media URLs now retain the request port when the service is accessed through a non-default port
- Replaces Fiber's hostname-only value with the complete request host while preserving existing proxy behavior
Webhook Configuration Uses the Generated Device ID (#785)
- Creating a device without supplying
device_idnow saves its webhook configuration against the ID generated for the new device - Prevents a misleading 500 response after the device slot was already created and ensures the requested webhook settings are persisted
Webhook Requests Include Content-Length
- Webhook bodies are now attached when the HTTP request is created, producing a
Content-Lengthheader instead of chunked transfer encoding - Fixes empty request bodies on receivers that do not reliably expose chunked payloads, including some PHP deployments behind nginx/FPM
- Retry attempts now replay the original request body safely
Concurrent Image Sends Use Unique Temporary Files
- Temporary image files are prefixed with a UUID so simultaneous sends of identically named files cannot overwrite or delete each other's working files
LID JIDs Drop Device Suffixes
FormatJIDnow normalizes device-specific suffixes for@lidaddresses as well as standard WhatsApp JIDs
🔧 Technical Improvements
Undecryptable Message Diagnostics
- Undecryptable incoming messages are now logged at warning level with sender and failure details instead of being silently dropped
- No webhook or stored message is emitted because these events contain no plaintext payload
Device Login OpenAPI Documentation
- Clarifies the device QR and pairing-code login endpoint descriptions and error responses
- Adds explicit success schemas for device login and pairing-code responses
Dependency & Documentation Updates
- Refreshes
go.mau.fi/whatsmeowto recent snapshots throughout the release cycle - Corrects a stale configuration comment around
viper.IsSet
What's Changed
- fix: send webhooks with Content-Length instead of chunked by @aldinokemal
- fix: strip device suffix from
@lidJIDs inFormatJIDby @aldinokemal - fix: log undecryptable messages instead of dropping them silently by @aldinokemal
- fix: prefix send-image temp files with a UUID by @aldinokemal
- docs: correct stale
viper.IsSetcomment by @aldinokemal - fix: keep the request port in generated URLs (#779) by @aldinokemal in #781
- feat: add sender display names by @aldinokemal in #782
- feat: update device login endpoints in OpenAPI spec by @aldinokemal
- fix: save device webhook config against the generated device ID by @alkadoHs in #785
- chore: update whatsmeow to latest by @aldinokemal
New Contributors
Full Changelog: v9.0.0...v9.0.1