New features
Forward messages withClient::forward_message
Client::forward_message(to, &message) is a high-level wrapper that turns any received message into a properly forwarded one:
- Sets
context_info.is_forwarded = trueso recipients see the Forwarded label. - Bumps
forwarding_score, jumping to the127Forwarded many times sentinel at 5. - Strips the source reply/quote chain and mentions.
- Drops the source
message_secretso the send path mints a fresh one. - Unwraps ephemeral and view-once wrappers before sending the inner content.
- Relays existing media from the same CDN blob — no re-download or re-upload.
MessageExt::prepare_for_forward helper directly and pass the result to send_message_with_options.
See forward_message and the Forwarding messages guide for details.
Send played receipts for voice and video notes
Client::mark_as_played(chat, sender, message_ids) now sends <receipt type="played"> (or played-self for newsletters) so recipients can signal that a voice note or video note was played. Pass Some(sender) for groups, broadcast lists, and status broadcasts; pass None for DMs. Extra message IDs are batched into a <list> child, matching mark_as_read.
Played / PlayedSelf receipts were already parsed into Event::Receipt; this closes the gap on the outbound side. See the receipt API reference.
Set or remove a group’s profile picture The
Groups feature now exposes admin-side methods for managing a group’s display picture, mirroring the existing own-picture API on Profile:
Groups::set_profile_picture(group_jid, image_data)— upload JPEG bytes as the group avatar.Groups::remove_profile_picture(group_jid)— clear the group’s current picture.
set_profile_picture routes to removal, so callers that already model “no image” as an empty buffer keep working. The caller is responsible for sizing and cropping the JPEG (WhatsApp uses 640x640).
Surface verified business names from contact lookups
IsOnWhatsAppResult and UserInfo now expose verified_name: Option<VerifiedName> alongside the existing is_business flag. The certificate carried in the <business><verified_name> response is decoded, so you can show the verified display name (the green-checkmark name) without a second request. verified_name is Some only for verified business accounts; regular accounts and unverified businesses stay None.
VerifiedName re-exports from whatsapp_rust::features and exposes name, serial, issuer, and the raw certificate bytes.
IsOnWhatsAppResult is #[non_exhaustive], adding this field is not a breaking change for consumers that construct it via the parser. See the contacts API reference for the full field list.