Skip to content

Releases: LiveHelperChat/livehelperchat

4.96v Online reasons && Security Updates

Choose a tag to compare

@github-actions github-actions released this 14 Oct 11:09
  1. Notable changes since 4.95v

    • Offline reason modes: offline reasons gained a mode field ("Offline Mode" by default, "Online mode"), so an operator can pick a reason such as "Training" and stay online instead of going offline. Selecting an online mode reason keeps hide_online = 0, stores the reason on the operator and, when the operator was offline, creates a new online record in lh_users_online_session; the reason is stored in the new online_reason_id column so the offline reason value is not overwritten, and online hours statistics show both the offline and the online reason. Switching reason while the operator is already online also starts a new online record, but the previous record is closed exactly at the new record start so online hours shows no bogus "sync timeout" gap (and a zero length gap is not rendered at all). Switching back to plain online clears the reason. The status control and the "Set online status" modal list the available reasons with their mode.
    • Reason enforced restrictions: reasons gained "Disable auto assigned" and "Disable transferring chats/mails to me manually if I am in this mode"; both apply only to "Online mode" reasons (an offline reason already keeps the operator out of the online assignment). While an operator is online with such a reason his exclude_autoasign / exclude_autoasign_mails flags are set on the department assignments so the chat and mail auto assignment workflows skip him, and the operator's own preference is restored when he switches away; "Disable transferring..." blocks manual chat/mail transfer and owner change to that operator.
    • Private group chats: messages and history of a private group chat are now accepted only from its own members.
    • Chat e-mail hardening: the chat e-mail is now escaped inside the mailto: link of the operator information row, so a value stored by an earlier version can no longer break out of the attribute; an invalid e-mail submitted while the pre-chat form "E-mail" field is optional is no longer persisted, the value stays empty until a valid address is provided, and the offline request path only copies the e-mail into the chat after FILTER_VALIDATE_EMAIL accepts it.
    • Demo chat endpoint access: the publicly reachable chat/demo endpoint is now gated behind a logged in operator holding the lhchat/use permission or an anonymous request presenting an e2e_secret parameter matching the E2E_SECRET environment variable (compared with hash_equals to avoid timing leaks); unauthenticated visitors are redirected to the login page and logged in users without the permission get the no-permission page, preserving the previous behaviour.
    • Widget: fixed the mobile widget message input and send button being covered by the Firefox for Android 132+ toolbar and keyboard - while the full screen mobile widget is open interactive-widget=resizes-content is appended to the host page viewport meta (pages that set interactive-widget themselves are left untouched) and the original value is restored when the widget is closed (wrapper version 279); the initial scroll position is now applied before the messages become visible, so the visitor no longer briefly sees the messages at the top, and scrolling is done instantly inside the widget's own messages container instead of scrolling the parent page (React app version 428).
    • Notifications: replaced the dead VAPID key generator link in the notification settings (web-push-codelab.glitch.me now returns 410 Gone) with pwastack.com/tools/vapid-key-generator.
    • Miscellaneous: updated install scripts, structure.json and db.dbml for the three new lh_abstract_offline_reason columns and the lh_users_online_session.online_reason_id column; bumped version to 4.96v.
  2. Summary

    • This release adds operator "online mode" offline reasons: an operator can pick a reason such as "Training" and stay online instead of going offline, the reason is recorded in the new online_reason_id column and shown together with the offline reason in online hours statistics, and a reason can disable auto assignment and manual chat/mail transfer to that operator while it is active.
    • Security and input hardening: the chat e-mail is escaped in the operator mailto: link and invalid e-mail input is rejected, the public demo endpoint requires an operator or the E2E secret, and private group chat messages and history are limited to their members.
    • Widget and UX fixes: the mobile widget works with the Firefox for Android keyboard, opens at the correct scroll position without scrolling the parent page, and the notification settings point to a working VAPID key generator.

execute doc/update_db/update_361.sql for update

What's Changed

  • Replace dead VAPID key generator link in notification settings by @pwastack in #2421
  • Fix mobile widget input covered by Firefox for Android toolbar when keyboard opens by @mysubcult in #2422

New Contributors

Full Changelog: 4.95v...4.96v

4.95v Security updates

Choose a tag to compare

@github-actions github-actions released this 12 Oct 06:40

Bump LHC_RELEASE from 494 to 495 and document the 4.95v release in the changelog.

🔒 Security (primary focus):

  • 🌐 Pin resolved IPs via CURLOPT_RESOLVE for outbound bot REST API requests to defeat DNS rebinding; reject loopback/private/reserved ranges and redirects; add rest_api_limit config (deny_local default true, allow_host).
  • 🖼️ Require authenticated operator session for external image zoom and reject non http/https and private/reserved destinations; harden file downloads against SSRF.
  • ⏳ Bound REST API session token lifetime (session_token_expire, default 30 days) with isExpired(), expires_on stamping, revocation on use, and stricter loginbytoken/notifications token validation.
  • 🔑 Bind sessions and remember-me cookies to password hash via hash_equals() so password changes invalidate all sessions/tokens.
  • 🛡️ Restrict cron.php to CLI, whitelist cronjob/extension options with realpath confinement; whitelist user import field mapping; validate theme import attributes and image uploads.
  • 💉 Use var_export() for inlined translations/config and skip values that could form <? tags to prevent PHP code injection via stored config.
  • ✅ Add CSRF/permission checks to lhwebhooks dispatch, copyautoresponder, transferuser, canned message subject, saveonlinenotes, addonlineoperation, addsubjectbytemplate, changemailbox, apifetchmails, deleteconversation and loadview; limit group chat invites to private-group members; enforce assignment permissions and self-edit restrictions.
  • 🧼 Sanitize referrer/session referrer/footprint/current page URLs to block unsafe schemes; add getSafeReferer() to prevent open redirects.
  • 🧱 Strip visitor [html_snippet]/[html] blocks, cast snippet/message IDs to int, validate ID arrays before SQL IN clauses, and use bound values in abstract filters.
  • 🗂️ Cast archive/chat/role/user IDs to int and validate fetched objects before use; guard preview/print/sendmail with is_object; render explicit permission error in abstract/edit; validate react-to-message id and require write access.

✨ Functional improvements:

  • 🤖 Expose latest matched condition as {bot_condition.*} via new MatchedConditions helper with "Expose matching variables" checkbox; clearer condition debug; bot closechat/setdepartment also update related mail conversation; extend bot detection list with Meta crawlers and make matching case-insensitive; log PHPMailer send failures.
  • 🎨 Render admin widget theme preview in Shadow DOM using real widget CSS bundle for accurate parity with live widget; use resolved theme id for single-message re-render.
  • 📧 Add in-context help texts and grouping for mailbox follow-up/re-open/default operator/department options; remove tracking pixel URLs from HTML and plain text on import.
  • 🔎 Add User ID filter to user list search; fix proactive invitation "Any" department selection with validated multi-dropdown; clarify standard queue priority labels with hints.

ℹ️ No new DB migration script required for this release.

What's Changed

  • fix(widgetrestapi): use the resolved theme id when re-rendering a single message by @VincentBorgers in #2418

New Contributors

Full Changelog: 4.94v...4.95v

Standard queue chat priority range for operators

Choose a tag to compare

@github-actions github-actions released this 30 Sep 11:02

What's Changed

  • Added a standard queue chat priority range for operators. The new chat_min_priority_std and chat_max_priority_std attributes limit which chats the regular auto assignment queue can assign to an operator; they mirror chat_min_priority / chat_max_priority, which only apply to the chat priority queue. Both values are editable in the department assignment window (individual departments and department groups), 0 means no limit and the values are inclusive.
  • fix(mailconv): guard against failed fetchAndLock returning false in mail parser and mailing worker by @mysubcult in #2415

Full Changelog: 4.93v...4.94v

Team lead

Choose a tag to compare

@github-actions github-actions released this 18 Sep 10:51
  1. Added team_lead_user_id attribute for operators. Team lead can be assigned in the new/edit user window under the user groups section. The team lead is shown read-only above the username in the operator account page. User list now has a team lead column and a multi-select team lead filter.

execute doc/update_db/update_359.sql for update

Full Changelog: 4.92v...4.93v

MCP Support

Choose a tag to compare

@github-actions github-actions released this 16 Sep 12:56

What's Changed

Related video manual about MCP setup - https://www.youtube.com/watch?v=PfcDh0JekIk

  1. Notable changes since 4.91v

    • AI MCP server: added a Model Context Protocol endpoint so external AI clients (ChatGPT custom connectors, Claude, and other MCP hosts) can inspect a Live Helper Chat installation; the endpoint aimcp/mcp speaks Streamable HTTP through the official mcp/sdk PHP SDK and is a thin bridge that only authenticates the caller and forwards the request, while the protocol itself (handshake, protocol revisions, sessions, tools/list, tools/call, JSON-RPC framing, CORS) is handled by the SDK; a new "MCP Setup" screen (aimcp/key, linked from the Rest API page and protected by the new lhaimcp/use permission) stores the server name and the access token, shows the endpoint URL and the list of exposed tools read directly from the tool attributes so the page cannot drift from tools/list; the endpoint stays disabled until a token is generated and accepts it either as an Authorization: Bearer <token> header or as a ?token= parameter (a generated token uses random_bytes and comparisons use hash_equals), and allowed CORS origins plus an optional host allowlist for the SDK DNS rebinding protection can be configured through the ai_mcp_options chat configuration.
    • MCP tools and helpers: eight read-only tools are exposed - get_user_id_by_email, get_user_id_by_username, get_user_permissions, get_url_permissions, check_user_object_access, explain_chat_access, get_department_auto_assign_settings and explain_chat_auto_assign; LiveHelperChat\Mcp\Access resolves a back office URL into module/view and the permissions it requires with the same logic as the permission explorer (absolute URL, plain path, with/without index.php, with/without siteaccess) and evaluates permissions grouped so that checks in the same group are OR-ed and different groups are AND-ed; LiveHelperChat\Mcp\Rules diagnoses object level access for departments, users, chats and canned message replace variables, reporting only identifiers, booleans and generic placeholders (no names, e-mail addresses, chat nicks or message bodies) and can be extended by extensions with the new ai_mcp.object_access_rules event; LiveHelperChat\Mcp\AutoAssign is a read-only port of erLhcoreClassChatWorkflow::autoAssign() which replays the candidate and gate checks without any write or lock, so it can be run safely against a live installation to answer "would chat X be auto assigned?" or "why was operator Y not auto assigned to chat X?".
    • MCP sessions and dependencies: handshake sessions are stored in the new lh_mcp_session table instead of per-request or per-node state, so the endpoint also works on load balanced installations; sessions expire one hour after the last write (the SDK default), a failing query is reported as a missing session instead of turning the endpoint into a PHP error page, and expired sessions are purged by the regular chat cleanup cron so the table stays small; composer.json gained the mcp/sdk and symfony/finder dependencies, erLhcoreClassSystem::$QueryString is now a declared property, ezcUrl::parsePathElement() no longer warns when a path element is null, and the new table is created by the regular database update.
    • Audit log size protection: audit records larger than the MySQL max_allowed_packet no longer break the operation being logged - oversized audit messages are truncated to a safe size (16 MB minus a 1 MB reserve for the rest of the query) with UTF-8 safe truncation and a marker showing the original size, and a failing log write is reported through error_log() instead of propagating up, unless debug_output is enabled so developers still see the error.
    • Chat transfer to human: chat/transfertohuman now runs inside a database transaction, loads the chat with fetchAndLock() and locks the department before changing the state, re-validates the chat hash and status after the lock was acquired, and returns a JSON error instead of failing when the chat does not exist or was closed/transferred in the meantime; a missing chat is also handled safely when grouping canned message items, and incomplete canned message replace conditions (missing field, comparator or value) are skipped instead of raising warnings.
    • Assignment and SQL mode fixes: editing a department operator assignment returns "Assignment record was not found" instead of failing when the assignment record is missing; aggregate queries in the department operator lists (operators, operators group) and in collected survey results set sql_mode='' so installations with ONLY_FULL_GROUP_BY enabled can still list operators and survey results; the operator assignment priority field gained an explanation that it is only taken into account when the department enables assignment by operator priority, otherwise auto-assignment sorts by lowest workload / least recently accepted first.
    • Bot: the "Update message" bot command can now update the del_st (deleted status) field of a message, and the bot workflow translation/replace helper guards against a non-object chat.
    • Widget and operator profile: relative URIs in chat responses are treated as same site links, so they open inside the embedded chat instead of a new browser window; send button and in-progress icons received small padding and alignment fixes; new --lhc-message-spacing and --lhc-message-group-spacing CSS variables let a theme control the spacing between message bubbles and between message groups without overriding the whole stylesheet; the "job title in new row" theme option is now implemented with CSS classes (op-job-title-sep, operator-profile-content, op-photo) instead of duplicated template markup; the widget React app version was bumped.
    • Miscellaneous: updated install scripts, structure.json and db.dbml for the new lh_mcp_session table; bumped version to 4.92v.
  2. Summary

    • This release focuses on AI tooling for administrators, plus reliability and compatibility fixes.
    • A Model Context Protocol endpoint lets AI clients read permission, access and auto-assignment information from an installation through eight read-only tools, protected by an access token and a dedicated lhaimcp/use permission.
    • MCP sessions live in the new lh_mcp_session table, making the endpoint safe for load balanced setups, with automatic expiry and cleanup.
    • Oversized audit records are truncated instead of breaking the logged operation, and a failing log write no longer interrupts the request flow.
    • Chat transfer to human, department assignments and SQL mode sensitive queries are hardened, and incomplete canned message replace conditions are handled safely.
    • Widget links, message spacing and operator profile job titles were polished.

execute doc/update_db/update_358.sql for update

  • Treat relative ur is as same site in chat responses by @niels-heinemann in #2410
  • Allow self-signed and unverified SSL certificates in Mailconv SMTP transport by @mysubcult in #2413

Full Changelog: 4.91v...4.92v

Restricted replaceable variables

Choose a tag to compare

@github-actions github-actions released this 07 Sep 11:29
  1. Notable changes since 4.90v

    • Chat widget CAPTCHA providers: added Google reCAPTCHA v3 and Cloudflare Turnstile support for verifying chat widget visitors through provider-based CAPTCHA validation; CAPTCHA settings gained a chat-specific enable flag and a configurable reCAPTCHA v3 score threshold; a dedicated widget CAPTCHA helper loads the provider script and resolves the token, which is now sent and verified as part of the widget online chat submission; the CAPTCHA settings screen gained a provider toggle and CAPTCHA settings are exposed through the widget online settings endpoint.
    • Canned message replaceable variables: added a configuration field to lh_canned_msg_replace storing per-variable JSON options to hide the variable value from the replaceable variables list ("Hide value in list") and to restrict management of the variable to operators holding the new use_replace_sensitive permission of the lhcannedmsg module ("Restricted access"); restricted variables show a "Restricted" badge, their value and clone/edit/delete actions are hidden from operators without the permission, and access control is enforced in the clone, edit and delete handlers.
    • Exact counts for chat and mail searches: the chat and mail conversation search panels gained an "Exact count" toggle; by default the result total is capped by counting only the first 1,000 matching rows through new limit_count support in getCount(), avoiding slow full-table scans on large result sets, and the paginator shows an approximate total ("~") whenever the count was capped; enabling "Exact count" performs a precise count of every matching row.
    • Bot REST API actions: authentication credentials used for NTLM, Bearer token and API key (header and query parameter) requests now resolve through replaceable variables; authorization headers are masked in debug logs by shortening them from both sides so secrets are not exposed; new user language dynamic variables ({{user_locale}}, {{user_site_access}}, {{user_content_language}}, {{user_content_language_name}}) were added for REST API bot actions, backed by a new user_language magic property on the chat model; streaming requests gained a configurable row start pattern so response streams that do not use the SSE data: { prefix are parsed correctly.
    • Bot trigger arguments: invisible message arguments ({message_invisible_N}) passed from the widget are now consistently forwarded to every trigger execution path, including theme-based bot trigger execution and the default trigger, by centralizing trigger argument processing early in the widget online submission flow.
    • Offline reasons for operators: the offline reasons feature now supports operator access control through a new offlinereasons_operator permission that can be granted with limitations restricting operators to specific reasons; the status (online/offline) modal shows a reason selector when an operator goes offline and stores the selection as offline_reason_id, and only the reasons an operator is allowed to use are exposed in the dashboard and status modal; the permission editor and "who grants" summary show the offline-reason limitation, specific function limitations are now respected over wildcard grants, and offline reasons can be deleted.
    • Statistics averages: agent statistics averages now include the full result set instead of trimming the highest and lowest ten percent, and preserve fractional values when computing the averages.
    • Security hardening: file downloads in incoming webhooks and online-user avatar fetching were hardened against SSRF - only HTTP/HTTPS URLs are accepted, localhost and private/reserved IP addresses are rejected, the resolved hostname is pinned to a validated IP to prevent DNS rebinding, and redirect following is disabled; message validation and the message preview modal were fixed.
    • Reliability: the bot "Close chat" command now runs inside a database transaction with row locking to prevent race conditions and partial state updates during chat closure; the mail conversation fetch API returns an error instead of failing fatally when the conversation cannot be found; mailbox syncing now limits SQL statement execution and lock-wait time and sets IMAP open/read/write/close timeouts so a slow mail server cannot stall the sync process.
    • Message masking test tool: added a chat-context simulation mode where a chat and a test message are supplied and the tool reproduces the real widget masking flow with step-by-step diagnostics (chat found, guardrails enabled, chat assigned to operator, matching masking rule, operator permission, masking result) using the chat's department, assigned operator and permissions, along with clearer explanations.
    • Miscellaneous: added RAR and other MIME type detection for downloaded webhook attachments; added Latvian (lv_LV) and Estonian (et_EE) translations and updated the translation update script; widened the widget theme custom CSS fields from text to mediumtext to prevent CSS truncation; updated install scripts and database structure definitions; bumped version to 4.91v.
  2. Summary

    • This release focuses on safeguarding sensitive data, richer chat widget CAPTCHA options, and performance tuning for large searches.
    • Chat widget visitors can now be verified with Google reCAPTCHA v3 or Cloudflare Turnstile, controlled by a chat-specific CAPTCHA switch and a configurable score threshold.
    • Canned message replaceable variables can hide their values from lists and be locked down to operators with a dedicated permission.
    • Chat and mail searches gain an "Exact count" option while default counts are capped and marked approximate for large result sets.
    • Bot REST API actions support variable-based authentication with masked secrets, user language variables, and flexible streaming row parsing, and invisible message arguments now reach all trigger workflows.
    • Offline reasons become permission-controlled, file downloads are hardened against SSRF, and mail fetching, chat closing, statistics averaging and translation coverage were improved.

execute doc/update_db/update_357.sql for update

Full Changelog: 4.90v...4.91v

4.90v Track who set user online manually

Choose a tag to compare

@github-actions github-actions released this 19 Aug 11:45
  1. Notable changes since 4.88v
    • Track who set a user online: added online_by_user_id column to lh_users_online_session recording which operator set a user online; online-hours statistics gained a "Set online by" column showing that operator.

execute doc/update_db/update_356.sql for update

Full Changelog: 4.89v...4.90v

4.89v Enhancements

Choose a tag to compare

@github-actions github-actions released this 19 Aug 10:05
  1. Notable changes since 4.88v

    • Online operators widget customization: added a new "Online operators widget settings" screen under Statistics (statistic/onlineopsettings) with a new onlineop_settings permission, letting operators choose which columns appear in the online operators dashboard widget (Name, Status, Last assignment, Live chats/free slots, Department, Reason for offline, Session duration) and their position; the widget now renders the configured columns, shows "offline since" in the name column when a dedicated column is hidden, restores expand/collapse actions, preserves passed column widths and allows controlling widget columns from the embed code.
    • Track who set a user offline: added updated_by_user_id column to lh_users_online_session recording which operator set a user offline or online; online-hours statistics gained a "Set offline by" column showing that operator, with the offline action attributed only to the operator who explicitly set the user offline; last visit is now updated when toggling the hide-online status in user edit.
    • Autoclose enhancements: all autoclose settings now accept fractional timeout values; the activity timeout supports sender-based modes by appending ,1 (close only when the visitor sent the last message) or ,2 (close only when the operator sent the last message) to the configured value; settings descriptions in the chat list configuration were clarified.
    • Chat cleanup on close: cleanupOnClose() is now executed when chats are closed via the cronjob or by changing their status (previously it only ran on manual close), removing orphaned records such as auto-responder chat links, bot repeat restrictions, bot chat events, pending bot events, voice/video sessions, transfers, group chats and temporary files; a new utility cron cron/util/cleanup_orphan_chats_data cleans orphaned chat data for chats that were closed before this fix, iterating chats from newest to oldest with an optional start chat id parameter.
    • Blocked users search: added a block type (btype) filter to the blocked users search covering all block types (IP, Nick, Nick and Department, IP + Nick, IP + Nick and Department, E-mail, Country, Online user, Sender E-mail).
    • Transfer department window: improved the transfer department window using the searchable multi-dropdown with radio selection and added on_change handler support to the multi-dropdown renderer.
    • Mail conversations: added "Expand all"/"Collapse all" actions to the mail conversation screen for quickly expanding or collapsing all message bodies.
    • Message edit history: added a new "Preview message" modal (chat/previewmsg) and an "Edited" link on edited admin messages opening the preview with the edit history.
    • Widget filters reset: "Reset widget filters" now clears widget local storage client-side instead of performing a server-side action; fixed a related typo.
    • Miscellaneous: added the Isle of Man flag icon; updated install scripts and database structure definition for the new column; bumped version to 4.89v.
  2. Summary

    • This release focuses on dashboard customization and data hygiene.
    • The online operators widget becomes fully configurable with selectable and reorderable columns, backed by a new settings screen and permission.
    • Online-hours statistics now show which operator set a user offline, recorded in a new updated_by_user_id field.
    • Autoclose rules gain finer control with fractional timeouts and sender-based activity modes, while close-time cleanup is fixed for cron/status-driven closures, with a dedicated script to purge previously orphaned data.
    • Search, transfer, mail, and message-preview UX are improved across blocked users, department transfer, mail conversations, and edited-message history.

execute doc/update_db/update_355.sql for update

Full Changelog: 4.88v...4.89v

4.88v Offline reasons

Choose a tag to compare

@github-actions github-actions released this 12 Aug 07:11

4.88v

  1. Notable changes since 4.87v

    • Offline reasons: introduced configurable offline reasons with the new lh_abstract_offline_reason model and CRUD interface; operators can select a reason (e.g. "Lunch", "Meeting") with an icon when setting themselves offline, persisted on lh_users and lh_users_online_session; offline reasons are displayed in online-hours statistics and user-box menus with a redesigned status control layout; a new offlinereasons permission controls access to this feature.
    • Forms module overhaul: added comprehensive search and filtering for collected forms, including department filter, chat operator filter, date range, creator filter, and chat-time search; introduced field change tracking for internal forms — when an operator edits a previously submitted form, field history (old/new values and modifier) is logged; added translation support and improved template variable management for forms; refactored module navigation with proper permission checks and removed deprecated index page; enhanced embed code generation with access control; clearing chat attributes when deleting collected form data now properly reverts associated chat variables and additional data entries.
    • Bot enhancements: added secondary translations group support for bots, allowing an optional second translations group in bot configuration with proper validation and item retrieval from both groups; added "Trigger on bot skip" option to proactive invitations, executing triggers when a visitor skips the bot; fixed missing last_msg_id update after sending invitation messages.
    • Security hardening: refactored CAPTCHA to use browser fingerprinting (combining multiple HTTP headers) and SHA-256 hashing for improved security across chat validation, FAQ, voting, and widget modules; added more detailed CAPTCHA error messages; added ignoreactivityglobal permission allowing individual users to opt out of activity tracking; replaced redirect with proper permission-denied page for abstract list views; added from_address emptiness check to prevent mailbox sync failures on null sender addresses.
    • Performance and stability: improved MySQL reconnect logic by removing stale connection caching and properly resetting reconnect counters; guarded compiled config caching behind database connection checks to prevent warmup/CLI failures; wrapped setinactive.php in a transaction with row locking and added syncAndLock() to setoffline.php to prevent race conditions on online status updates; added resetSession() methods across persistent session helpers for clearing cached ezcPersistentSession instances; added server info panel showing address, name, port, software, and uptime in audit configuration.
    • Admin custom fields: refactored processing to prevent duplicate field values by moving admin fields after JS variable processing and tracking processed identifiers; admin custom fields with uempty show condition are now hidden from returning visitors who already have a non-default nickname set; added support for original author re-modifying fields.
    • UI and UX: updated Bootstrap badge classes from v4 to v5 (badge-* to bg-*) across GroupChat, operators template, and mailing import templates; improved assignment configuration UX; translated theme before survey rendering in fill and fillwidget modules; adjusted naming for less confusion; added server and user timestamps to audit config and login pages.
    • Miscellaneous: fixed #2400; added support for BOM UTF format files; added avatar caching; added search attribute support for extensions; fixed installer config validation with clearer error messages; refactored addmsgadmin.php input validation to handle missing input gracefully; handled edge database reconnect cases; fixed CAPTCHA time drift validation; ensured dynamic property support.
  2. Summary

    • This release introduces a major new feature — configurable offline reasons — allowing operators to specify why they are offline with visual indicators across the UI and statistics.
    • The forms module receives a comprehensive upgrade with advanced search/filtering, field change tracking, translation support, and improved permission handling.
    • Bot capabilities expand with secondary translations groups and trigger-on-skip functionality.
    • Security is strengthened through CAPTCHA fingerprinting, SHA-256 hashing, and multiple permission/validation improvements.
    • Performance and stability are enhanced with improved MySQL reconnect handling, race condition fixes, and guarded config caching.

execute doc/update_db/update_354.sql for update

Full Changelog: 4.87v...4.88v

4.87v Forms flow improvements for Quality Assessment extension

Choose a tag to compare

@github-actions github-actions released this 10 Jul 12:06

4.87v

  1. Notable changes since 4.86v

    • Performance and caching: improved dashboard online-operator retrieval with better user-data fetching and caching; prefill departments cache for faster lookups; ensure static cache version is respected across the application even without extensions; optimized chat archive range fetching with cached range checks before database queries, plus methods for matching ranges and verifying chat existence in archives with proper overlap handling.
    • Performance statistics: added total offline time tracking to agent statistics widgets with new help modal explaining offline time; updated translations, tooltip descriptions, and column spans in the agent statistics table for improved clarity; enhanced operator performance access checks to include write permissions.
    • Webhooks and events: added support for unread-message flow in webhook conditions with checkboxes enabling unread-message handling for admin messages; updated backend logic across message types and enhanced chat update logic to reflect unread-message states for operators; dropped redundant chat_id dependency.
    • Mail conversation: enhanced Mail Conversation API and search functionality; added proper API error handling.
    • Bot: refactored bot condition evaluation to streamline logic in action buttons and text triggers; updated type casting for threshold values in bot action commands.
    • ChatML export: significantly improved ChatML export logic and configuration; fixed properties in exported ChatML; resolved edge cases and format inconsistencies; export script improvements.
    • REST API: added support for REST file captions with configurable skip extensions (#2394).
    • Template and variable system: added support for {item:path} syntax enabling nested attribute extraction in output formatting; host values now support replaceable variables; fixed item replacement logic for proper handling of non-string values in templates.
    • Debug and diagnostics: improved debug invitation logic with detailed checks for message-seen status, timeout handling, and reshown conditions; enhanced debug message view UX, API scroll behavior, spacing, and col-span variables; logs now include exception URLs; added logging for changed user groups.
    • Widget and online visitors: dedicated online visitors page now always shows visitors even when the widget is minimized.
    • Bug fixes: fixed #2391 and #2395; updated checkbox labels for clarity; trimmed whitespace from messages before saving for data consistency; updated message retrieval limits across components for better performance and consistency; avoided throwing SQL errors in edge cases.
  2. Summary

    • This release strengthens performance through improved caching strategies (departments, archive ranges, static cache, operator data) and extends performance statistics with offline-time tracking.
    • Webhook conditions gain unread-message-flow support, bot condition evaluation is streamlined, and the ChatML export pipeline receives a comprehensive overhaul.
    • Template variables now support nested {item:path} extraction, debug/invitation diagnostics are enhanced, and several stability issues are resolved.

execute doc/update_db/update_353.sql for update

What's Changed

  • Allow REST file API for single attachment with caption by @mysubcult in #2394

Full Changelog: 4.86v...4.87v