Skip to main content

Changelog

1.4.0 (2026-09-22)

Features

  • Products that leave your catalog now leave the chatbot's knowledge base. The sync only ever added and updated, so a product that went out of stock, was disabled, hidden or deleted kept its knowledge base document indefinitely and the assistant carried on recommending it, quoting its price and linking to a page that no longer sells it. Each sync now also removes the product documents it no longer collects. Nothing else is touched: other content types are left alone, and so is anything you added yourself in the Knowledge Base screen
  • A run only removes documents when it is sure it collected the whole catalog. It removes nothing, and says why, when it was stopped by --limit, when any document failed to upload, or when it collected nothing at all - a partial run cannot be told apart from a catalog that genuinely shrank, so it is treated as the first. If a run would still remove most of what is there, eChat refuses it and shows a banner in the backend explaining what was about to go and how to proceed

Fixed

  • The knowledge base category no longer splits in two when the admin language changes. The category was looked up by its display name, which is translated, so switching the admin language stopped matching it and the sync quietly started a second category - leaving half the catalog in one and half in the other, and the assistant searching only one of them. It is now matched by a fixed identifier, and the category name you set in the eChat backend is left alone
  • ⚠️ For developers: sync providers gain getCategoryIdentifier() and isReconcilable(). Providers extending Mirasvit\EChat\Provider\AbstractSyncProvider need no change - they inherit both, and removal stays off unless a provider opts in. A provider implementing Mirasvit\EChat\Api\SyncProviderInterface directly must add them

1.3.0 (2026-09-18)

Improvements

  • Busy stores no longer throttle themselves — order lookups, invoice downloads and verification codes are limited to 30 requests a minute per visitor, but requests the eChat service makes on a shopper's behalf all arrive from the same few addresses, so on a store with several chats running at once they were counted as one visitor and shoppers started seeing "Too many requests. Please try again in a minute." Each conversation now gets its own allowance; requests coming straight from a shopper's browser are counted per visitor exactly as before
  • ⚠️ For developers: custom chat tools move to a shared pool. The tools array argument on Mirasvit\EChat\Controller\Tool\Execute and Mirasvit\EChat\Block\Widget is gone — register tools as items of Mirasvit\EChat\Tool\ToolPool in di.xml instead, and they are picked up by the widget, the executor and the new discovery endpoint at once. The five built-in tools are unaffected

Fixed

  • The chatbot can look up orders, send invoices and email verification codes again in conversations that start without a storefront page being opened — for example a chat resumed from an email link or opened on a page served fully from cache. The list of available actions used to be published only by the storefront page itself, so with no page load the assistant was told the store could do nothing. The eChat service now asks the store directly at the start of every conversation, and the answer names the store view it came from, so multi-store installations can tell which one replied

1.2.4 (2026-09-15)

Improvements

  • The store is no longer asked who the visitor is on every page view — the widget used to request the shopper's account details, cart contents and recent orders as soon as any page loaded. That answer differs for every visitor, so no cache could serve it: each page view woke PHP, opened the session and looked up the customer's orders, on a store where most visitors never open the chat. The chat now asks only when a visitor opens it, once per page, so a page nobody chats on costs the store nothing. Nothing else changes — the widget still loads everywhere, the launcher, the unread popover and conversation restore behave as before, there is no new setting, and the chatbot receives exactly the same details

Fixed

  • Signed-in customers are now recognized in the chat — their name and email were sent before the widget had finished loading, so the identification was lost and every conversation looked like it came from an anonymous visitor

1.2.3 (2026-08-31)

Improvements

  • Attributes that cannot help a conversation are no longer synced — the knowledge base now receives only the product data the assistant can answer from, which lowers the cost of each conversation and makes knowledge-base search faster

Fixed

  • CMS pages sync again on stores where a page contains a directive that can no longer be rendered — for example a widget pointing at a deleted page or product. A single broken page used to stop the whole CMS page sync for that store on every run, leaving the chatbot without any of the store's pages; such a page now syncs with the unresolved directive removed and the rest of the pages go through normally

1.2.2 (2026-08-12)

Fixed

  • Compatibility with PHP 8.5 — cURL handles are no longer closed with the deprecated curl_close() function, which PHP 8.5 reports on every API request.

1.2.1 (2026-08-06)

Fixed

  • Customers can submit a helpdesk ticket from the chat again — the emailed verification code was rejected as "Invalid verification code" for every visitor, no matter how many times they requested a new one, so the chatbot could never create a ticket. The code is now kept where every chat request can read it, instead of in a browser session the widget's requests did not reliably share
  • Asking for a verification code a second time in the same conversation no longer breaks the code already sent — the chatbot now repeats that the code was sent and the one in the customer's inbox keeps working, instead of quietly replacing it with a new one the customer never receives
  • Verification codes now expire 10 minutes after they are sent, and a customer entering an old code is told it expired rather than that it is invalid. A code that has been used once can no longer be reused
  • A customer who confirmed their email is now genuinely remembered for the rest of the conversation — looking up an order and then submitting a return or exchange no longer asks for a new code at each step
  • Two visitors verifying different email addresses at the same time no longer cancel each other's codes — each address now has its own

1.2.0 (2026-08-05)

Features

  • Connect to eChat without an OpenAI key — the eChat account page (Stores → Configuration → Mirasvit Extensions → eChat) now has a single "Connect with eChat" button instead of an OpenAI key form. It opens the eChat consent screen in a new tab, where you choose whether to create a new workspace, add this store to your existing eChat account, or restore a workspace you set up earlier; after you confirm, you land straight in the eChat backend to pick and configure the AI provider. Connecting by hand with an Instance ID and Secret Key is still available on the "Restore with credentials" tab, for moving a store to a new domain
  • Choose your AI provider and model — the eChat backend now supports OpenAI (GPT), Anthropic (Claude), Google (Gemini), and xAI (Grok), each with a curated list of vetted models, rather than OpenAI only. You pick the provider and model in the eChat backend after connecting, and can configure several providers as a fallback chain: if one is unavailable or out of quota, eChat switches to the next automatically and emails you if the assistant ends up disabled
  • All the stores of one Magento installation now share one eChat account — every connection reports the store name, storefront URL, Magento admin URL, and the extension license, so each store view you connect appears under one account with a recognizable name instead of as an unrelated workspace. Stores connected before this update join their account automatically on the next sync — no reconnect needed — and a change of domain is picked up the same way
  • Do not load the widget on selected pages — a new setting under Stores → Configuration → Mirasvit Extensions → eChat → Widget takes one pattern per line: either a URL fragment (/checkout/ excludes the whole checkout flow) or a Magento page type (checkout_cart_index, catalog_product_view). On a matching page no chat script is injected and no request is made to the eChat service at all. Leave it empty to keep the widget on every page
  • Other extensions can feed the chatbot — the knowledge-base sync is now an open list of content sources rather than the five built into eChat, so another module can add its own content (and eChat itself no longer has to be changed to make that possible). Products, categories, CMS pages, store information, and knowledge base articles continue to sync exactly as before
  • Preview what the chatbot will be sent — bin/magento mirasvit:echat:sync --dry-run lists every content source and the documents it would send without contacting the eChat service, so you can check what will be shared even on a store whose credentials aren't set up yet. --limit N caps how many documents per source are shown

Improvements

  • Chat widget scripts now load in the background after the page has rendered, instead of competing with it for resources — a noticeable mobile page-speed and Core Web Vitals gain. The chat still loads on every page, so the live connection, proactive messages, and unread popover keep working; and if a visitor left the chat window open, it reopens immediately as they move between pages
  • "Configure Chat" now verifies the connection before opening anything: if eChat can't be reached it shows a retry message and leaves your credentials untouched (previously an unreachable server could clear them), and if the workspace was deleted on the eChat side the stale credentials are cleared and you are prompted to register a new one. Every button on the page — the global one and each store-level override — checks its own store, and no blank tab is opened while the check runs. The separate "Check connection" action is gone; it is part of this button now
  • Clicking "Connect with eChat" on a store that is already connected (for example, registered in another browser tab) now opens that workspace's eChat backend instead of starting a second registration, and the consent screen opens in a new tab so the Magento configuration page you were on stays open
  • Resetting the registration now also removes the workspace on the eChat side, so it no longer lingers there after you disconnect
  • The account page and its buttons at website or store-view scope now read and act on the credentials of the scope you are actually editing — previously the default-scope screen could pick up a store view's override and show or configure the wrong workspace
  • Knowledge-base sync is more resilient: one failing content source (for example, a knowledge base that isn't installed) is logged and skipped instead of stopping the whole run, content is streamed so memory stays flat on large catalogs, and the HTML/CMS-directive cleanup plus the rate-limit pause now apply to every content type rather than only some
  • The admin eChat account page and the invoice-download error messages are now translatable, with ready-made translations for 15 languages: Arabic, Czech, German, Spanish, French, Italian, Japanese, Dutch, Polish, Brazilian and European Portuguese, Swedish, Turkish, Ukrainian, and Simplified Chinese
  • ⚠️ The storefront chat widget now also requires an active Mirasvit license: with no active license no widget is served (development domains are unaffected, as elsewhere in Mirasvit extensions)
  • ⚠️ For developers: the content exporters were replaced. Mirasvit\EChat\Exporter\ExporterInterface and the Mirasvit\EChat\Exporter\* classes have been removed — a sync source now implements Mirasvit\EChat\Api\SyncProviderInterface and is registered as an item of the Mirasvit\EChat\Model\ProviderPool pool in di.xml. Custom exporters have to be reworked as providers

Fixed

  • Invoices the chatbot offers for download now go through the store's own invoice extension, so the customer gets the branded PDF instead of the plain Magento template — third-party invoice extensions that render PDFs through their own mechanism were previously bypassed
  • A guest who confirmed their email with a one-time code is now remembered for the rest of the conversation — looking up an order and then submitting a return or exchange ticket no longer asks for a new code at every step
  • Syncing no longer leaves an empty category behind in the knowledge base when a content source has nothing to send — for example, a "Knowledge Base" category on a store without the Mirasvit Knowledge Base installed, or a "CMS Pages" category on a store with no pages
  • Category links shared by the chatbot now use the store's real category URL instead of always appending .html, so recommendations no longer point to broken pages on stores that use a different (or empty) category URL suffix

1.1.4 (2026-06-05)

Fixed

  • Chat widget no longer fails to load on stores with Content Security Policy in restrict mode — the module now ships a CSP whitelist allowing the eChat service host for scripts, styles, API calls, WebSocket connection, images, and notification sounds

1.1.3 (2026-05-27)

Improvements

  • Store registration now sends the store's General Contact email (Stores → Configuration → General → Store Email Addresses → General Contact) to the eChat service, so the chatbot platform can associate each registered instance with a real contact address for account notifications

1.1.2 (2026-05-12)

Improvements

  • Product sync now exports multiselect attribute values (such as material, climate, or eco collection) so the chatbot can answer questions and make recommendations based on these characteristics — previously only single-value attributes were sent and multiselect values were silently skipped

1.1.1 (2026-05-12)

Improvements

  • Rich-text content shared with the chatbot is now properly cleaned up before being indexed — Page Builder pages whose body consists of widget, block, or store url directives are now expanded into their actual text (previously such pages reached the chatbot empty), embedded style and script blocks no longer leak CSS or JavaScript into AI responses, and encoded entities like   or & are decoded to plain characters. Applies to product descriptions, product attribute values, category descriptions, CMS pages, knowledge base articles, and the configured store hours
  • Category sync now also exports meta_title and meta_description as document attributes, giving the chatbot richer context to draw on when recommending categories

1.1.0 (2026-05-11)

Features

  • Sale prices and price ranges in chat — for configurable, grouped, and bundle products the chatbot now shares the cheapest variant's price, the "from/to" price range, and strikethrough regular prices, matching how variants and discounts are presented on the storefront product card
  • Product images shared by the chatbot — each synced product now exports an image URL so the chatbot can show shoppers a picture of the product it is recommending

Improvements

  • Verification code is now required before the chatbot can return order details, generate invoice download links, or read helpdesk tickets for guest visitors; logged-in customers looking up their own orders or tickets continue to skip this step
  • The chatbot tool execution endpoint is now rate-limited to 30 calls per minute per IP address, returning a friendly "Too many requests" response when the limit is reached — abusive scripts and accidental client-side loops no longer hammer the store
  • Store information sync now includes the store's currency code, currency symbol, and locale code, so the chatbot can format prices and respond in the conventions of each store view
  • ⚠️ When several Magento store views are configured with the same eChat Instance ID, sync now picks the website's default store as the source of documents and skips the rest (logged to the console and cron log). To index multiple storefronts independently, configure a distinct Instance ID per store view — previously the stores overwrote each other's knowledge base documents

Fixed

  • Fixed bin/magento setup:install failing with "The default website isn't defined. Set the website and try again." after this module was installed — caused by eagerly loading a configurable product service before Magento's stores were ready
  • Fixed product price missing from chat exports for simple products due to a typo that wrote the value into the wrong variable
  • Admin registration, reset, and restore actions now accept POST requests only, closing a way to trigger these operations through crafted GET links

1.0.14 (2026-04-22)

Improvements

  • Product sync now includes special_price, final_price, and msrp attributes so the AI assistant can recognize sales and discounts
  • Added Store Information sync — general store contact details (name, phone, hours, address, VAT, emails, website) from Magento configuration are now exported to the eChat Knowledge Base as a dedicated document per store

1.0.13 (2026-04-21)

Fixed

  • Fixed product URLs in chat exports — exported products now use the store's SEO-friendly URLs (with URL rewrites applied) instead of raw catalog paths, so links the chatbot shares with customers match what the storefront actually uses

1.0.12 (2026-04-21)

Improvements

  • CMS page export now includes URL and meta fields (title, keywords, description, content heading) as document attributes

1.0.11 (2026-04-09)

Fixed

  • Fixed product sync failing with "Item with the same ID already exists" error when stock filters produce duplicate products

1.0.10 (2026-03-27)

Improvements

  • Switched API client to cURL with persistent connection for faster sync operations
  • Product sync now pauses briefly every 100 items to avoid API rate limits
  • Improved error logging during product export with detailed exception info

Fixed

  • Fixed sync command failing with HTTP 100 status due to Expect: 100-continue header handling

1.0.9 (2026-03-19)

Improvements

  • ⚠️ Renamed OtpService to EmailVerificationService, SendOtp tool to SendVerificationCode, and related email template identifiers — clear generated data if upgrading
  • Increased email verification rate limit to allow more requests per session
  • Removed unnecessary cooldown between verification code requests

1.0.8 (2026-03-18)

Features

  • Multi-store support — register, configure, and sync each store view independently with its own chat instance
  • AI tools for the chat widget — the chatbot can now look up order details, generate invoice PDFs, view helpdesk tickets, and submit new tickets on behalf of customers
  • Email verification for ticket submission — customers verify their email with a one-time code before the chatbot can create a helpdesk ticket
  • Knowledge Base article sync — Mirasvit KB articles are now exported to the chat knowledge base
  • CMS page sync — CMS pages are now exported to the chat knowledge base

Improvements

  • Sync command and cron now iterate over all active store views automatically
  • Added --store option to the sync CLI command to sync a specific store
  • Admin account panel is now scope-aware and shows per-store instance overrides
  • ⚠️ New ACL resource Mirasvit_EChat::echat_manage controls access to registration and credentials
  • ⚠️ Exporters moved from Mirasvit\EChat\Api namespace to Mirasvit\EChat\Exporter — update any custom exporters

1.0.7 (2026-03-13)

Improvements

  • Improved product data export with better attribute handling

1.0.6 (2026-03-12)

Features

  • Initial stable release