MoonPress Chat

Description

MoonPress Chat adds an AI-powered chat assistant to your WordPress site. You connect your own LLM provider API key, teach the assistant about your business in the knowledge base, and the widget answers visitors’ questions grounded in that knowledge — it does not invent facts you never gave it.

Features

  • Bring your own key — works with Anthropic (Claude), OpenAI, Google Gemini, and OpenRouter. Pick the active provider and model in Settings; keys are stored encrypted with your site’s security keys, write-only, and never displayed or sent back to the browser.
  • Knowledge base — describe your business, services and FAQs in wp-admin; the assistant answers only from what you provided.
  • Conversations inbox — read every dialog, filter leads, and take over a conversation as a human operator when needed.
  • Lead capture — the assistant collects contact details into a lead list you can process from wp-admin.
  • Templates and reports — reusable answer templates and usage statistics.
  • Honest fallback — with no key configured (or the provider unreachable) the widget says so and offers your contact channels instead of hallucinating.

Privacy

Visitor conversations are stored in your own WordPress database. No data is sent anywhere except to the LLM provider you explicitly configured (see External services below). The plugin sends nothing to the plugin authors. The widget also records interaction events — which button a visitor pressed, and when (a topic, the call or request buttons, opening the widget, switching language) — with no message text and no page address; they are stored in your database with the same anonymous retention as the transcripts and are deleted by the same setting. Weekly totals — counts only, no transcripts and no visitor identifiers — are kept indefinitely by default so that reports stay comparable over time; a setting under Anonymous conversations can limit them to one, two or five years.

External services

This plugin connects to the API of the LLM provider you select and configure in its settings. It sends the visitor’s chat messages, the conversation history of the current session, and the knowledge-base context you authored to that provider in order to generate the assistant’s replies. No request carrying visitor data is made until you enter an API key and enable the widget.

Depending on which provider you choose, data is sent to exactly one of:

Separately, and unrelated to the widget: whenever OpenRouter is your active provider, this plugin also fetches OpenRouter’s public model list — https://openrouter.ai/api/v1/models — from your WordPress admin area, so Settings can offer you a current, real list of models to choose from instead of a hardcoded few. This request carries no site data and no API key (it is a plain, unauthenticated GET); it fires when you open Settings, is cached for 12 hours so it does not repeat on every load, and backs off for 5 minutes if OpenRouter is unreachable. It never runs on the front end and never involves a visitor.

You are responsible for ensuring that sending visitor messages to your chosen provider complies with the privacy regulations that apply to your site, and for disclosing it in your site’s privacy policy.

Source code and build

The plugin ships two separate codebases, built two different ways:

  • The visitor-facing widget (assets/widget.js, assets/widget.css) is hand-written, plain JavaScript and CSS. There is no build step: the file in the zip is exactly the file your visitors’ browsers download.
  • The admin interface (Settings, Conversations, Knowledge base, Templates, Reports) is a React app built with Vite. Its full source ships in the zip under admin-ui/src; admin-ui/dist, also in the zip, is the compiled output WordPress actually enqueues — the release workflow builds it on Linux (Node 20) from that same source. To rebuild it yourself: cd admin-ui && npm ci && npm run build.

Screenshots

Installation

  1. Upload the plugin to /wp-content/plugins/moonpresschat/, or install it through the WordPress plugins screen.
  2. Activate the plugin through the Plugins screen.
  3. Open MoonPress Chat Settings, pick your LLM provider, and paste your API key (the Test button verifies it with a real minimal request).
  4. Fill in the knowledge base so the assistant has something to answer from.
  5. Toggle Show on site — or preview first on any page with ?chatbot=1.

FAQ-e

Do I need my own API key?

Yes. The plugin is bring-your-own-key: you create a key with Anthropic, OpenAI, Google, or OpenRouter and paste it into the settings. You pay the provider directly for usage; the plugin adds no markup and has no subscription.

Where are my keys stored?

In your WordPress database (wp_options), encrypted with your site’s security keys (the salts in wp-config.php) and write-only: the admin UI never displays a stored key and the REST API never returns one. Keys are decrypted only server-side, at the moment the plugin calls the provider you configured. A database backup or export alone does not reveal them. If you regenerate the security keys, or restore the database under a different wp-config.php, the stored keys can no longer be read: Settings Connections tells you which provider is affected and you paste the key again. Nothing is deleted automatically.

What happens if the key is missing or the provider is down?

The widget stays functional and honest: it tells the visitor a human will follow up and offers your configured contact channels. It never fabricates answers. When the provider refuses your key, reports that the account is out of credit, or no longer offers the chosen model, the assistant switches itself off after the first such failure: visitors see the offline text, you receive one e-mail, and Settings shows a banner naming the cause. It never switches to another provider or spends from another account on its own. Fix the key and press “Test this model”, or pick another provider or model, and it comes back.

Does the plugin send any data to the plugin authors?

No. The only external traffic is to the LLM provider you configured.

Reviews

There are no reviews for this plugin.

Contributors & Developers

“MoonPress Chat” is open source software. The following people have contributed to this plugin.

Contributors

Translate “MoonPress Chat” into your language.

Interested in development?

Browse the code, check out the SVN repository, or subscribe to the development log by RSS.

Changelog

5.5.0

  • Activating the plugin now opens a setup wizard by itself, on its own full screen. Four steps: what the assistant may read, connect an AI provider, read your site, then ask it a real question on your own site before anyone else can see it. Nothing was wrong with the old settings pages — they were just settings pages, and a new install had no way to know which of them mattered first.
  • Every step says what to do next, and only ever one thing. When something is finished, the screen says so rather than going quiet; when something is waiting, it says which button and offers to take you there. A site reading that finished but was never applied is called out on its own, because that is work already paid for sitting one press from being used.
  • “Assistant setup” in the menu holds the same questions afterwards, all on one page, and says out loud that these are the ones the wizard asked. Nothing is hidden behind a “run the wizard again”.
  • Restore the previous version. Applying an industry preset or a site reading has always saved the state it replaced; nothing could get it back. There is a button for it now, in the Knowledge base and beside Apply, and it names the version it would restore — when it was taken, its topics, its opening line. Restoring saves the current state on the way past, so pressing it twice returns you to where you started.
  • An industry preset no longer overwrites what you wrote. The confirmation offers two outcomes instead of one: fill only what is empty, or replace everything. Filling leaves every field and topic you authored alone. On a site that has already been read, a preset no longer drops its blank template over the sentences the reading produced.
  • The industry picker is a dropdown that lists the topics it would create, by name. It used to be thirteen cards with thirteen Apply buttons and a count, so choosing an industry meant choosing blind and a stray click could overwrite a configured site.
  • An unanswered setup question is never stated as a fact. Presets ship bracketed prompts like [opening hours] for the interview to fill in, and until now an unfinished one went to the model as if it were true — an assistant could tell a visitor the business was called “[your business name]”.
  • “About the business” arrives empty on a new install instead of pre-filled with instructions to the model. The box asks for your name, address and phone; it used to contain answer rules, so nobody ever filled it in. Installs that already carry that text have it moved to the rules box, where it belongs, on the next admin page load.
  • Content sources tells the truth about groupings. A category or tag set with nothing in it can no longer be ticked — there is nothing for the assistant to read — and one that groups only content you are not reading says so instead of being suggested. Topic names from a site reading are shown as names, not as internal keys.
  • The contact question no longer has a “decide for me” option. It was the default, and it changed on its own: adding a phone number in Settings silently switched the assistant from asking visitors for an email address to asking for a phone number. The three real choices remain, with a line saying which one matches what the assistant does today.
  • “Read the site” stops being ticked by an industry preset. The two were sharing one signal, so applying a preset marked the site as read when nothing had been read. The date of the last reading is recorded now.
  • Connecting a provider says when the key was last proven, and which model — the Test button used to go silent on success, which reads the same as doing nothing.
  • The plugin menu follows the work: conversations, knowledge, templates, reports, notifications, then setup and settings. A fresh install still lands on setup.

5.4.2

  • Every conversation can be marked, not just the ones that became a request. The conversations list has a “Handled?” column — New, In progress, Reviewed, Test — so you can see at a glance which ones you have dealt with and which are your own testing. Before this the status lived on the request record, so a visitor who chatted and left could not be marked at all.
  • Next to it, an automatic one: a conversation nobody has written in for 24 hours shows as finished, and one that is still moving shows as active. Nobody sets it and nobody can — it is the clock. The two are separate columns because they answer different questions.
  • The name is captured again. When a visitor leaves their contact details in the chat, their name is saved with them; it was being dropped, which is why the Name column was empty on every request captured that way. A signed-in visitor’s name comes from their WordPress account. When the message is a paragraph rather than a name, the field stays empty rather than guessing — a wrong name is worse than none, because it gets used to greet somebody.
  • The chat header no longer clips the business name. The widget now sets its own line spacing, so a theme’s does not reach inside it — one whose body line-height was written in em computed to a fixed pixel value, ignored the small print’s own size, and pushed the name up out of the header. The header can also grow now, and a long name or status line ends in an ellipsis instead of overflowing.
  • A request’s Description column shows the first twenty words instead of the whole conversation. One request used to fill the screen; the full thread is still one click away under Open.
  • The requests table no longer prints the status twice — the badge beside the dropdown said the same word the dropdown did.
  • In the conversations list, “Still going?” is its own column with a heading. The automatic active/finished state used to sit unlabelled next to the “lead” marker, so a row read “lead active” with nothing saying which was which or who decided.
  • The assistant no longer reads its own procedure out loud. It used to answer things like “tell me what happened and when, and after that we will take your name and phone”, which turns a conversation into a form and makes the visitor wait to be allowed to answer. It asks the one question it needs, and asks for contact details when it is their turn.

5.4.1

  • The setup screen now asks what the assistant should ask a visitor for — their name and a phone number, or their name and an email address, or either. It used to decide silently from whether you had filled in the phone field, so a site with a phone number on file had the assistant asking every visitor for one, with nothing anywhere saying so. It always asks for the name.
  • Stores get a catalogue. There is a new “What you sell” box in the Knowledge base, filled from your own product categories, and the assistant is told to answer from that list rather than invent a product. Before this, the whole catalogue was invisible to it.
  • Prices, discounts and delivery thresholds no longer sit in “Useful background facts”. The site analysis used to read a shipping page and write the exact figure there, where it stayed after the page changed and nothing could notice. Those lines are kept separately with the date they were read, and the assistant is told to say what the page said, that it may have changed, and to point the visitor at the page.
  • The assistant can answer about stock and price. When a visitor names a product, the plugin reads that product from your store at that moment and hands the answer over as current. It used to say it had no access to real-time stock, which was true.
  • Setup reads in one order now, and says which parts need an AI key: the first five steps are your own answers and read only your WordPress, and everything after them needs a provider connected. Picking your industry is back on the screen as step 1, and the whole site analysis runs in place instead of sending you to another page.
  • Every step links to where its result lives — the Knowledge base for the text, Settings for the key and the model.

5.4.0

  • Setting the plugin up is one screen now, called “Set up your assistant”, and it opens by itself the first time you activate the plugin. Everything you need to answer is on it, numbered, and each answer saves on its own. “Start here”, “Setup” and “Content sources” are gone from the menu — their pages still work if you have them bookmarked.
  • You choose what the assistant reads, with checkboxes: which content types, which categories and groupings, and where the daily report goes. The list and the counts come from WordPress itself — nothing is read or sent anywhere until you run the site analysis.
  • On a site with a catalogue — products, courses, anything beyond posts and pages — the blog now starts unticked. It was crowding the catalogue out: the analysis reads a fixed number of pages, newest first, so a few hundred recent articles could leave no room for what the site actually sells. A site whose content is its writing keeps its blog ticked, and either way one checkbox changes it.
  • New questions you answer by ticking rather than typing: which of the facts we wrote from your pages are wrong, which pages the assistant may link to, which it must never mention, and which of the e-mail addresses found on your site it may give a visitor. The interview is grouped into five short sections instead of one long list.
  • The review before applying is a list of what the assistant will be told, section by section, with the full text behind a toggle — rather than several thousand characters printed on the page.
  • The assistant cannot be switched on until it has a provider key and something to know. The switch says what is still missing instead of turning on an assistant that would answer nothing.
  • Pages can now be unticked like any other content type. The plugin says what you lose rather than deciding for you.

5.3.1

  • The author link in the Plugins list now opens moonpresschat.com.

5.3.0

  • Cheaper answers with Claude, in every language: the part of the prompt that never changes between questions (your knowledge base, rules and answer format) is now cached once for the whole site, and the visitor’s language is added after it. Before, every language your widget serves kept its own cache. This applies to Anthropic directly and to Claude models through OpenRouter, which now also keeps your site on one upstream so the cache is not lost between requests.
  • Settings AI providers shows what the last answer cost in tokens and how much of it the provider served from its cache, plus today’s share, so the discount is visible rather than assumed. When a Claude model shows no cache, the note names the model’s minimum prompt length.
  • The assembled prompt changed order: the “Reply language” block now comes last. Your knowledge base and rules are untouched; the preview shows the new order.

5.2.0

  • When the active provider refuses your key, reports that the account is out of credit, or no longer offers the chosen model, the assistant now switches itself off instead of failing on every message: visitors see the offline text with your contact channels, you receive one e-mail, and Settings shows a banner naming the cause. It comes back the moment “Test this model” succeeds again or you save another provider, model, or key. It never switches to another provider on its own.
  • Provider API keys are now stored encrypted with your site’s security keys (the salts in wp-config.php), so a database backup or export alone no longer reveals them. Existing keys are converted on the first use after the update; nothing to do.
  • If your security keys are ever regenerated, the stored keys can no longer be decrypted: Settings Connections says so for the affected provider and you paste the key again. Nothing is deleted automatically.

5.1.2

  • Cheaper answers through OpenRouter with Claude models: the plugin now asks OpenRouter for Anthropic’s prompt-cache discount on the knowledge block, the same discount the direct Anthropic connection has always used. In our measurement the same conversation cost about half of what it did before.
  • Models that only work through a provider’s batch API (OpenRouter’s “:batch” entries) no longer appear in the model list — choosing one returned an error on every message.
  • Reasoning models (GPT-5 family, Gemini Pro) no longer fall silent: the answer budget was too small for them to finish thinking, so visitors saw the fallback text while the tokens were still billed. The budget is now large enough for them to answer; short-answer models are unaffected.

5.1.1

  • The model picker is now a searchable dropdown: one field that shows your current model, opens a list when you click or type, and filters by model name or id as you go — recommended models first, then the newest. Your selection only changes when you pick a row, so typing to look around never touches the saved model or the Test button.
  • Long lists show the first fifty rows with a count and a hint to keep typing; each row shows the model’s name with its id underneath.
  • The note under Refresh says which list you are looking at — fetched with your key, the public OpenRouter list, or the last one fetched.

5.1.0

  • The model list under Settings Providers now comes from your provider’s own API once a key is saved — Claude, OpenAI, Gemini and OpenRouter alike — so new models appear without a plugin update and models your key cannot use are not offered. Newest models are listed first; with more than ten, a search box appears and matches ids as well as display names. OpenRouter’s recommended picks stay pinned at the top.
  • If a provider cannot be reached or refuses the key, the built-in list is shown with a one-line reason and Refresh retries; a refused key is named as such, including the way Gemini reports it.
  • The built-in Gemini list was out of date for new API keys — Google closed the 2.5 models to new users and two of the listed ids never existed. It now offers gemini-3.8-flash, gemini-3.6-flash and the “latest” aliases.
  • This is the first version published on wordpress.org; 5.0.0 was the reviewed submission.

5.0.0

  • The plugin is now called MoonPress Chat. Its folder, main file and text domain changed to moonpresschat (moonpresschat/moonpresschat.php), so WordPress sees this version as a new plugin: install it next to the old one, deactivate the old copy, activate MoonPress Chat, then delete the old folder. Settings, knowledge base, conversations, requests, ratings and reports are all kept: the internal data names (options, tables, scheduled events) now carry the moonpresschat_ prefix and are migrated automatically the first time the new plugin runs — nothing to do. Visitors’ browser-side conversation state starts fresh after the update, so the consent notice shows once more.
  • The admin menu is labelled MoonPress Chat (it was the generic “Chatbot”). Everything else that used to carry the old name follows: the REST namespace is moonpresschat/v1, admin menu addresses are admin.php?page=moonpresschat… (old bookmarks need updating), widget and admin CSS classes are moonpresschat-*.
  • If you use the paid add-on, update it to 0.3.0 or newer before switching — earlier versions look for the old folder.
  • The setup API additionally reports a stable plugin_slug next to the display name, and the temporary setup credential is now labelled “MoonPress Chat setup”.

4.8.0

  • A weekly summary e-mail. Every Monday at 08:00 in your site’s time zone you get last week’s numbers — conversations and how many of them asked a question, requests left, helpful and wrong answers, failed replies, who took over, the busiest day, and what visitors pressed most — with the change against the week before. Numbers only, never transcripts; the daily transcript e-mail is unchanged.
  • It is on by default and goes to the same address as the daily e-mail. Turn it off under Chatbot Notifications, where the new switch sits next to the daily one; Reports says who gets it and when the next one goes out.
  • A quiet week is still reported, with zeros, so a missing e-mail always means something is wrong rather than “nothing happened”. Weeks counted after some transcripts were already deleted say so in the e-mail.
  • Note: the send time is fixed when the schedule is created, so after a daylight-saving change it arrives an hour earlier or later until the plugin is deactivated and activated again.

4.7.0

  • Reports gain a “By week” table: the last twelve weeks and the week in progress — conversations, how many of them asked a question, requests left, the share of helpful answers and failed replies. A week is counted the moment it closes and then never changes, so the numbers you sent a client last quarter still say the same thing after old conversations have been deleted under the retention setting. Weeks counted after some of their transcripts were already gone are marked as incomplete.
  • History is filled in from the conversations, requests and ratings already in your database within minutes of updating; a short notice shows on Reports while that runs.
  • New setting under Anonymous conversations: how long to keep the weekly totals — forever by default; they hold counts only, no transcripts.
  • Updating creates one new table (the weekly totals); as before, if the database cannot create it the plugin keeps retrying on later visits instead of silently giving up.

4.6.0

  • Reports now show what visitors actually press. Every topic button, the “Leave a request” and call buttons, the home-screen cards, help topics, opening the widget, starting a new chat, switching language and dictating a message are counted by the button — not by the text on it — so renaming a topic no longer splits its numbers, and buttons that were never counted before now are. “What visitors used” lists them with the name your visitors saw.
  • These interaction events hold no message text and no page address, are stored in your own database, and are removed by the same anonymous-conversation retention setting as the transcripts (the retention note now reads “… messages, … events”). Nothing is recorded before a visitor accepts the AI notice, when one is shown.
  • Updating creates one new table; if the database cannot create it, the plugin keeps retrying on later visits instead of silently giving up.

4.5.1

  • You can rate answers again — the thumbs had stopped appearing after the multi-provider update; a “not helpful” with a comment is now counted once.

4.5.0

  • Notifications and contact settings now have their own page: the daily transcript e-mail, the lead notification e-mail, the contact phones and what the assistant asks visitors for live under Chatbot Notifications, with their own Save button. Settings keeps everything about how the assistant behaves and looks.
  • The WordPress menu and the plugin’s own sidebar list the pages in the same order: Start here, Conversations & leads, Setup, Knowledge base, Templates, Reports, Settings, Notifications. Start here still appears only until the install is configured.

4.4.1

  • Reasoning models (for example Kimi or DeepSeek through OpenRouter) no longer fail the connection test with “Empty answer from the provider”. The test gave them too little room to think before answering; it now leaves room, and a reply that is cut short is reported as cut short rather than as a broken key.
  • Each provider row now has its own Save key button, right where you typed the key. Saving one row no longer clears a key you were still typing in another, and the hints in a row point at that row’s own button.
  • Test connection on a provider whose key comes from wp-config.php now says so: the constant in wp-config.php still wins over anything saved on this page.
  • The plugin no longer queries its own tables before checking they exist, so a site that loads the plugin without activating it (staging copies, the plugin directory’s own checks) gets no database errors in its logs.
  • Internal: the conversations query is written so that the plugin directory’s automated review can verify it is prepared. No change in behaviour.

4.4.0

  • A provider can only be made active once you have connected a key to it, so you no longer pick one and find out afterwards that it cannot answer.
  • The model list is real. Anthropic, OpenAI and Google show their current generation with the older ones one click away; OpenRouter’s list is fetched from its own catalogue, searchable, with a short recommended set on top. If that catalogue cannot be reached the plugin offers its built-in list and says so rather than showing you nothing.
  • Test now checks the model you actually chose, and sits next to it. The result is remembered, so changing the model honestly stops the plugin calling that combination verified.
  • Each provider row says which provider it is and whether its key is saved, and the removal hint appears only where there is a saved key to remove.
  • The settings page tells you when you have unsaved changes, and a key you have typed but not yet saved says so instead of looking connected.
  • Removing the key from the provider currently in use is reported to you instead of the site being quietly switched to another provider. This also applies to the setup assistant, where clearing a key used to hand the site to whichever provider is configured by default.

4.3.0

  • New: a setup assistant can now configure the plugin for you without ever being told your WordPress password. You approve a named, temporary connection in WordPress itself, and it can reach nothing on your site except the plugin’s own setup steps.
  • That connection really is temporary. It stops working after two hours, or after thirty minutes of silence, or the moment setup finishes — whichever comes first — and the plugin cleans it up for you rather than leaving it in your account. You can also revoke it yourself at any time from Users Profile.
  • Nothing goes live without you. Changes are checked and shown to you before anything is written, the last set of changes can be undone in one step, and the widget only starts appearing to visitors after you explicitly say go.
  • Your provider API key stays where you put it: the setup steps can set it, but never read it back, never copy it anywhere else, and never include it in the undo history.
  • On a WordPress multisite network the assisted setup is switched off and says so, because WordPress shares application passwords across the whole network and the temporary connection could not be kept to one site. Configure the plugin from the admin screens there instead.
  • Deactivating the plugin now clears the last of its scheduled background jobs instead of leaving one behind.

4.2.3

  • Every database query now binds its table name through WordPress’s own identifier placeholder instead of building the name into the query text.
  • The visitor widget script ships formatted for reading, and the readme now says where each part of the source lives and how the admin interface is built.

4.2.2

  • The admin menu no longer offers editors pages they cannot open.
  • A request left as a longer sentence now has the phone number picked out of it instead of being dropped, and a mistyped e-mail address is never quietly corrected into a different working one.
  • Applying a preset or an AI draft clears leftover knowledge fields from earlier versions of the plugin.

4.2.1

  • Fixed: a site that deliberately turns the AI disclosure notice off is no longer treated as unfinished — it stays configured, keeps its normal menu, and is not sent back to the “Start here” setup page.

4.2.0

  • New: a “Start here” page greets a fresh install with three ways to set the assistant up — the setup skill, your own provider key, or letting the AI fill the knowledge base — and a checklist of what is still missing before you go live.
  • The old onboarding notices are gone: the page reads your actual settings instead, so it never nags a site that is already configured.
  • Providers now remember a successful connection test, and stop claiming success once the key, provider or model changes.

4.1.1

  • The consent notice greets first-time visitors in their own language whenever the site has it configured — a warning nobody can read is not a disclosure. Detected from the browser; only languages you actually serve are used, and a visitor’s saved choice always wins.

4.1.0

  • The assistant now asks for whichever contact detail your business actually uses. A site with no phone number on file asks for an e-mail address instead of a phone, and the widget notices an e-mail the same way it used to notice a phone number.
  • Visitor e-mails are stored with requests and shown in the admin panel alongside phone numbers.
  • Fixed: requests left in the chat were silently dropped. A request now needs just one valid contact detail, and the name is optional.
  • The public request endpoint is rate-limited per IP.
  • The daily digest and the new-request notification are sent in your site’s language. Both were previously sent in Russian regardless of the site.
  • The daily digest now counts its 24 hours in your site’s time zone, so conversations are no longer reported twice or missed near midnight.
  • Accepting the AI notice is remembered: it no longer reappears in a new browser tab or when you start a new chat. Editing the notice text asks visitors again, on purpose.

4.0.1

  • Compatibility: tested up to WordPress 7.1.

4.0.0

  • The widget’s styles and scripts now load through WordPress’s standard asset system (enqueued files instead of inline code), so caching and optimization plugins can handle them like any other asset.
  • All internal names now carry the plugin’s own prefix; your existing settings, knowledge base and conversations are migrated automatically on update — nothing to do.
  • Hardened the public chat endpoints: stricter validation of what the widget may write, rate limits per visitor and per address, and chat session ids are now 128-bit cryptographically random.

3.11.0

  • The widget can start a new conversation: the launcher now lands on your conversation list whenever you have one, anonymous visitors get their own conversation as a single-item list, and starting a new chat keeps your earlier consent — you’re never asked to accept the notice twice.

3.10.0

  • The whole admin panel now runs on the new React interface: Knowledge base, Templates and Reports join Conversations and Settings in the same fast app with a shared sidebar. The old page renderers are removed; apart from the refreshed look of those three pages, nothing changes in how the plugin works.

3.9.1

  • The chat avatar now uses your own logo — your theme logo or site icon — instead of a bundled image, and falls back to a neutral icon that follows your header colours.
  • Header text stays readable: pick any header colour and the title, status line and controls switch between light and dark automatically.
  • “Analyze my site” no longer times out on larger sites: it reads your pages in short batches and picks up where it left off, and skips login, cart and legal pages instead of loading them.
  • The consent notice for regulated industries no longer repeats the same sentence twice.
  • Security hardening: the plugin no longer runs any system command to look up an API key. Keys come from Settings, a wp-config constant or an environment variable, as before.

3.9.0

  • The assistant’s safety rules are now visible and editable in the Knowledge base as a pre-filled “Hard rules” field — with the built-in floor still guaranteed even if the field is cleared.

3.8.2

  • The assistant’s boundaries now follow your configured topics exactly: adjacent-industry questions your knowledge doesn’t cover are deflected to your team instead of improvised.

3.8.1

  • The assistant now firmly stays on topic: unrelated requests (code, homework, general knowledge) are politely declined instead of answered.

3.8.0

  • Developer hooks: filters and actions so add-ons can extend the Q&A bank, language resolution and get notified of new messages and leads.

3.7.0

  • Multilingual widget: add languages in Settings, the widget follows the page language, and visitors can switch languages on the fly.

3.6.1

  • Directory-review readiness: hardened output escaping in the admin screens and safer database queries throughout.

3.6.0

  • Widget appearance settings: pick your accent …