Releases: erancybersec/evolution-API-webchat-UI
v1.2.0 — Background Tab Scheduler
What's New
Scheduler — Background Tab Support
Scheduled messages now fire on time even when the tab is in the background.
Problem: Browsers aggressively throttle setInterval in hidden/background tabs — a 30-second timer could be delayed by a minute or more, causing scheduled sends to miss their window.
Fix: The scheduler tick is now driven by a Web Worker. Worker timers run on a separate thread and are not subject to the same throttling. The tab just needs to stay open — it does not need to be the active/focused tab.
- Falls back to plain
setIntervalin environments without Worker support - All UI copy updated to clarify "tab open, not necessarily active"
Changelog
See CHANGELOG.md for full history.
v1.1.0 — Delete Message + RTL + Security Fixes
What's New in v1.1.0
New Features
Delete Message
WhatsApp-style delete confirmation modal — right-click any message or use the multi-select toolbar.
- Delete for everyone — unsends the message for all participants (only available for your own sent messages, within ~60 hours). Calls
DELETE /message/delete/. - Delete for me — removes the message from your local view only. Calls
DELETE /message/deleteMessage/(best-effort; always removes locally). - Modal auto-dismisses when switching or closing conversations.
- Escape key closes the modal.
- Error toast shown if any message in a batch could not be deleted.
RTL / LTR Auto-Direction
Hebrew, Arabic, and other RTL text now renders correctly in every part of the UI. English stays left-to-right. No configuration needed — dir="auto" is applied per element, so mixed conversations work naturally.
Bug Fixes
Security
- XSS: avatar
onerrorno longer usesinnerHTMLwith unescaped text - XSS:
quotedMsg.idsanitised before embedding inonclickattribute - XSS: image lightbox uses
data-srcinstead of raw URL in inline handler - XSS: group name, subject, and description now escaped with
chatEsc()
Crashes
chatState.allFetchedMessageswas uninitialised — fixed with[]default- Location messages crashed on null
m.text - Location coordinates were not URL-encoded before being put into a Maps URL
FileReaderbase64 split did not guard against a missing comma
API
chatApiCallwas silently dropping the request body onDELETEcalls — Evolution API delete endpoints require a JSON body
Lifecycle
- Delete modal not dismissed on conversation switch → wrong JID could be used
- Delete modal not dismissed when closing a conversation
chatCloseConversationdid not reset select mode state- Both confirm functions now guard against
activeJidbeingnull
UI / State
- Select toolbar delete button used a fragile attribute CSS selector; replaced with a stable
id - Delete button started enabled before first
chatUpdateSelectCountcall chatCopySelected/chatForwardSelected/chatDeleteSelecteduseSet.has()instead ofArray.includes()
Full Changelog
See CHANGELOG.md for the complete history.
v1.0.1 — Fix scroll-up chat pagination
What's new in v1.0.1
Bug fixes
- Scroll-up now loads older messages — Chat history pagination was silently stopping after the first page. The app now correctly fetches additional pages from the Evolution API as you scroll up, with a loading spinner and preserved scroll position.
Technical details
- Rewrote
chatFetchMessagesto use the API's page-based response format ({ messages: { total, pages, currentPage, records[] } }) - Added
chatFetchOlderFromApi()that fetches the next API page when local cache is exhausted historyFullyLoadedis now only set when the API confirms no more pages remain- Cleaned up verbose debug
console.logstatements
Full changelog: v1.0.0...v1.0.1
v1.0.0 — WhatsApp Web Chat UI
What's New
WhatsApp Inbox (Chat Feature)
- Full WhatsApp-style inbox with real-time conversation list, message bubbles, and send/receive
- Contact name resolution: saved names, push names, and phone number fallback
- LID/phone JID deduplication — merges duplicate contacts (32+ duplicates eliminated)
- Group names fetched from authoritative group metadata API with in-memory verified cache
- Poll message rendering with vote aggregation, progress bars, voter avatars, and View votes detail panel
- Archive detection with triple API strategy and deep field scanning
- IndexedDB caching for conversations, contacts, and messages
- Search, filter (All/Unread/Favorites/Groups/Archived), pin indicators
- Media messages: send images, videos, documents, audio via drag-and-drop or file picker
- Reply-to-message support with quoted message preview
- Message reactions and new chat dialog with contact search
Send History
- Messages sent via Compose are now tracked in a Send History section under Scheduled Jobs
- Each entry shows recipients, message previews, success/fail counts
- Actions: expand details, resend (loads back to Compose), delete individual entries, clear all
Bug Fixes
- Group names: no longer show last sender name — uses dedicated verified cache from group metadata API
- Scheduled messages from Inbox: now saves correct phone number/group JID instead of internal database ID
- Recipient resolution: new chatResolveApiNumber() correctly handles groups, phones, LID, and DB internal IDs
- Poll votes: pollUpdateMessage no longer filtered as noise; vote aggregation tracks per-voter last-vote-wins
- Archive false positives: stopped marking all chats as archived when API filter returns same data as normal endpoint
- IndexedDB cache poisoning: v5 one-time cleanup wipes contaminated group names from previous bugs
UX Improvements
- Inbox is now the default tab on page load
- Compose message queue with Text, Media, Voice, Poll, and Buttons message types
- Schedule panel for both Compose and Group broadcast
- Multi-recipient chip input with paste support
v0.1.6
What's Changed
- fix: Remove duplicate Invite Link / Leave Group blocks from Settings tab
- fix: Group search "Select All" now only selects filtered groups & count updates on filter
- fix: Make config modal scrollable on small viewports
- chore: Replace personal placeholders with generic examples
Full Changelog: v0.1.5...v0.1.6
v0.1.5 — Group Bulk Management & Single-Group Panel
What's New
🗂️ Group Bulk Actions (Manage tab)
Apply changes to multiple groups at once:
- Set group picture (URL or file upload)
- Update group name & description
- Toggle group settings (send messages, edit info, add members)
- Set disappearing messages timer
🔍 Context-Aware Single-Group Panel
When exactly 1 group is selected, a dedicated panel automatically appears with:
- Participants list & management
- Invite link (generate, revoke, copy)
- Leave Group
🔗 Seamless Browse ↔ Manage Navigation
- Gear icon in Browse & Send pre-selects that group in the Manage tab
- "Manage Selected Groups" button passes your current selection directly to Manage
🐛 Fixes
- Corrected Evolution API v2 group update route names
- Moved
groupJidfrom query param to request body (API compliance) - Scheduled jobs: clicking card body now toggles the details panel
- Scheduled jobs: uniform button widths
- Group list max-height increased to
60vh
📜 Full Version History
v0.1.4 — Scheduled Tab Enhancements
- Full job lifecycle: resend, edit, duplicate, restore, cancel
- Uniform button widths across all job cards
- Card body click toggles details/preview panel
- README updated with Scheduled Sending docs
v0.1.3 — Scheduled Send
- Schedule any Compose or Group Broadcast job to send at a future date/time
- Jobs stored in IndexedDB — survive page refresh, handle large payloads
- Scheduler polls every 30 seconds; jobs execute in order
- Response panel hidden on non-API tabs (Scheduled, Settings)
v0.1.2 — Group Broadcast Queue Builder
- Broadcast a message queue to multiple groups at once
- Phone number: manual country code input in Settings
- Accept numeric dial prefix (e.g.
972,44) in addition to ISO codes
v0.1.1 — Message Queue Builder
- Build a sequence of mixed-type messages in the Compose tab before sending
- Configurable random delay between messages
- Default text card pre-loaded on page open
v0.1.0 — Compose Tab
- New Compose tab: send multiple message types to multiple recipients in one go
- Chip-based recipient input with E.164 phone normalization
v0.0.9 — File Upload
- File upload support for Media and Audio message types (in addition to URL input)
v0.0.8 — Server Config
config.jsonsupport for server deployments — pre-configure all settings centrally- Users on hosted deployments no longer need to touch the Settings panel
v0.0.7 — App Name & README
- Configurable app/business name shown in the header
- README added for public sharing
v0.0.6 — Initial Release
- First public version of WhatsApp Manager UI
- Built on Evolution API v2 — no install, no Node.js, single
index.html - Tabs: Text, Media, Audio, Location, Contact, Reaction, Poll, Buttons, List, Status
- Settings panel with server URL, instance name, API key, and country code
v0.1.4 — Scheduled Tab Enhancements
What's New
🔁 Full Scheduled Job Lifecycle
- Resend — clone a completed or cancelled job with a new send time
- Edit — cancel a pending job and reload it into the tab for full editing
- Duplicate — copy a job as a new draft with schedule cleared
- Restore — re-activate a cancelled job (only if scheduled time hasn't passed)
- Cancel — cancel a pending job without editing
🎨 UX Improvements
- Uniform button widths across all job cards
- Clicking card body toggles the details/preview panel
- Inline message preview (icon + truncated content) collapsed by default
📖 Documentation
- README updated with full Scheduled Sending section and job action reference table
v0.1.3 — Scheduled Send
What's New
⏰ Scheduled Sending
- Schedule any Compose or Group Broadcast job to send at a future date/time
- Jobs stored in IndexedDB — survive page refresh and handle large payloads
- Scheduler polls every 30 seconds and executes jobs in order
- Response panel hidden on non-API tabs (Scheduled, Settings) for a cleaner UI
🐛 Fixes
- Reset scroll position to top when switching tabs
- Fixed missing closing
</div>that broke scroll container layout - Forced tab panel visibility to fix intermittent display issues
v0.1.2 — Group Broadcast Queue Builder
What's New
📣 Group Broadcast Queue Builder
- Select one or more groups and broadcast a message queue to all of them
- Same queue builder from Compose tab — supports all message types
- Messages sent with randomized delay between each group
📞 Phone Number Improvements
- Allow manual country code input in Settings (text field)
- Accept numeric dial prefix (e.g.
972,44) in addition to ISO country codes
v0.1.1 — Message Queue Builder
What's New
📋 Message Queue Builder (Compose tab)
- Build a sequence of multiple messages before sending
- Each card in the queue can be a different message type (text, media, audio, location, contact, etc.)
- Queue is sent in order with the configured random delay between messages
- Add, remove, and reorder cards before dispatching
- Default text message card pre-loaded on page open