Added
- Stats endpoint now returns chat names in top chats. The
GET /stats/messagesandGET /sessions/:id/statsendpoints include achatNamefield on each top-chat entry, populated from the contact's pushName or saved name at message time. The dashboard uses it to show readable names instead of raw JIDs. Existing rows start asNULLuntil a new message sets the name. (#558) Thanks @buluma.
Fixed
- Incoming WhatsApp Business interactive messages no longer arrive with an empty body on the Baileys engine. Messages sent as interactive/button/template shapes — which businesses use for one-time codes and verification prompts — were saved with
type: "unknown"and a blank body, dropping the text (e.g. an OTP) entirely. The engine now extracts the display text frominteractiveMessage,buttonsMessage,templateMessage, andinteractiveResponseMessageinto the message body and classifies them astext, so the content is retrievable over the standard messages API and rendered in the dashboard. (#562) - Deleting a message "for everyone" now reliably flags it as revoked, and
message.revokedcarries the original message id. On the whatsapp-web.js engine the revoke event'sidis the revocation notification — a distinct message whose id never matched the stored row — so the stored message was silently never marked revoked, and webhook/WebSocket consumers had no id to reconcile against. Themessage.revokedpayload now includes an optionalrevokedId(the original deleted message's id) that both engines populate; OpenWA flags the stored message onrevokedId(falling back toid), and consumers should match the same way. Purely additive and backward-compatible — on BaileysidandrevokedIdcoincide. (#567) Thanks @JibayMcs.