github aldinokemal/go-whatsapp-web-multidevice v8.9.0

5 hours ago

What's New in v8.9.0

🚀 Minor Release: Media Direct-Path Downloads, Selective Call Rejection, SQLite Send Reliability & Empty Chat Polling

This release persists WhatsApp media direct paths so downloads keep working after URL expiry, adds a device-scoped call-reject API and UI, reduces random API send timeouts under heavy incoming message load, and returns empty chat-message responses instead of server errors when a chat row has not been stored yet.


✨ New Features

Selective Call Rejection API (#735)

  • Adds POST /call/reject for rejecting a specific incoming call with caller_jid and call_id, using the same whatsmeow RejectCall path as global auto-reject
  • Keeps existing WHATSAPP_AUTO_REJECT_CALL behavior unchanged while enabling per-call business logic from webhook consumers
  • Adds a device-scoped REST handler, validation, usecase/domain wiring, and a new embedded UI card for manual call rejection
  • Documents the endpoint and webhook-driven usage examples in OpenAPI and webhook payload docs

🐛 Bug Fixes

Persisted WhatsApp Media Direct Paths (#731)

  • Stores WhatsApp media direct_path alongside legacy media URLs in chat storage
  • Rebuilds downloadable media from the stored direct path, with URL fallback for older rows
  • Updates REST downloads, Chatwoot sync, and history-sync reconstruction to use the same downloadable-message helper
  • Adds repository and utility coverage for direct-path extraction, persistence, fallback, and media reconstruction

Random API Send Timeouts Under Load (#732)

  • Adds CHAT_STORAGE_MAX_OPEN_CONNS with a default of 5 so chat storage can use SQLite WAL read concurrency instead of serializing all device, webhook, API, and worker access through one connection
  • Applies the configured connection count to both open and idle chat-storage connections, clamped to a minimum of 1 for operators who need the previous behavior
  • Raises the CGO SQLite busy timeout from 5s to 30s, matching the purego build and reducing SQLITE_BUSY failures during write contention
  • Documents the new environment variable in src/.env.example

Empty Chat Messages for Missing Chat Rows (#740)

  • GET /chat/{jid}/messages now treats a missing chat row as an empty conversation instead of returning HTTP 500
  • Returns the normal empty pagination shape with minimal chat info for brand-new or not-yet-upserted chats
  • Keeps existing behavior unchanged for chats that are already present in storage

🔧 Technical Improvements

Dependency Updates

  • go.mau.fi/whatsmeow: refreshed to v0.0.0-20260622185415-5f04eac6dbbb
  • github.com/vektah/gqlparser/v2: updated to v2.5.35
  • Related Go dependency checksums refreshed through go.mod / go.sum

Release Metadata

  • AppVersion is now v8.9.0, so runtime status matches the published release tag

What's Changed

New Contributors

Full Changelog: v8.8.0...v8.9.0

Don't miss a new go-whatsapp-web-multidevice release

NewReleases is sending notifications on new releases.