Common questions about MxChat. Updated daily based on real customer questions. If you can’t find an answer here, check the documentation or open the chatbot on this page.

Getting started

I bought MxChat Pro — do I have to install all the add-ons, and which one should I start with?

None of them, to start. Core is a complete chatbot on its own, and the six-step setup wizard at MxChat → Onboarding (chat model → behaviour → embedding model → knowledge base → actions → done) never asks for an add-on, so work through that first and you have a working bot. MxChat → Pro & Extensions then lists all fifteen add-ons with a status dot on each — that screen is a catalogue, not an installer, and each card’s button tells you where that add-on stands: Download Add-on when your licence is active but the plugin isn’t installed (it opens the add-on’s page on mxchat.ai; the installable ZIPs live under My Account → Downloads, uploaded via Plugins → Add New → Upload Plugin), Activate Extension once the ZIP is installed, and Configure Extension once it is running. Pick by the job you actually have — Multi-Bot for running more than one bot, WooCommerce for a store, Forms for lead capture and support tickets — and leave the rest uninstalled; every card carries its own description and a Documentation link, and an add-on you skip today can be added later without disturbing the ones already running. Available in MxChat core (the free plugin); each Pro add-on installs as its own plugin.

If I install MxChat on my own site, will the chatbot work the same as the one here on mxchat.ai?

It is the same plugin, so the capability is the same — what differs is configuration, and a fresh install starts with almost none of it. Three things decide how a bot behaves: the AI Instructions under MxChat → Settings → Behavior set its tone and its rules, the content you import under MxChat → Knowledge decides what it actually knows about your business, and the model you choose decides how well it reasons over both. Until those are filled in, a new install answers from the model’s general knowledge rather than from your site, which is why it will not sound like this one on day one. Some of what you see in the chat here is also not core: the forms it drops into the conversation and the product cards it shows come from add-ons, while the scripted offers and quick-reply buttons that trigger them are Actions, which ships with the free plugin. Available in MxChat core (the free plugin); the in-chat forms come from the Forms add-on and the product cards from the WooCommerce add-on.

How much does MxChat cost to run on a WooCommerce store with 1,000+ products?

The licence does not scale with catalogue size — it is a one-time price and every plan already includes the WooCommerce add-on, so 1,000 products cost the same to licence as 10. What scales is your AI provider bill, and the part specific to a big catalogue is indexing: the add-on re-embeds a product every time it is saved while published, with no check for whether anything meaningful changed. A first pass over 1,000 products is 1,000 embedding calls, and any bulk edit that re-saves them — a price sweep, a description tidy-up, a CSV re-import — is another 1,000. On Text-Embedding-3 Small that is cents rather than dollars, but the repeat billing on bulk edits is the part nobody budgets for. Ongoing chat spend is the normal per-message cost; estimate it here and cap it under Rate Limits. Available in MxChat core; the WooCommerce add-on adds the product sync described here.

Where do I see what changed in the latest MxChat update?

In WordPress go to Plugins → Installed Plugins, find MxChat (or any MxChat add-on) and click View details — the Changelog tab lists the release notes for every version. Core’s notes come from its WordPress.org page; each Pro add-on sends its own through the MxChat update service, and those same notes are published in the Changelog section of that add-on’s page under mxchat.ai/add-ons. Note that MxChat → Transcripts is the chat log — a record of visitor conversations — not the update log. Available in MxChat core (the free plugin); each Pro add-on publishes its own changelog to the same screen.

Can I use my ChatGPT Plus subscription with MxChat, or do I need a separate API key?

ChatGPT Plus and the OpenAI API are separate products: a Plus subscription gives you the chat website, not an API key and not API credit, so MxChat cannot run on it. Open a developer account at platform.openai.com, add a payment method, create a key, and paste it under MxChat → Settings → API Keys — OpenAI then bills you per token, separately from the Plus fee. If you’d rather not use OpenAI at all, MxChat also runs on Anthropic, Google Gemini, xAI Grok, DeepSeek, a single OpenRouter key, or any OpenAI-compatible endpoint you host yourself. To keep spend predictable, set a hard usage limit in your provider’s own dashboard and cap conversations under MxChat → Settings → Rate Limits. Available in MxChat core (the free plugin).

Where are MxChat’s settings in the WordPress admin? I can’t find the screen I was told to open.

The MxChat item in the WordPress sidebar has exactly eight screens: Onboarding, Settings, Knowledge, Transcripts, Actions, Content, API Access and Pro & Extensions — anything else you see was added by an add-on. Nearly every option lives inside Settings, which has its own sidebar: Chatbot (AI Models, Behavior, Display, Lead Capture, Quick Questions, Rate Limits), API Keys, Optimization, Testing, then Integrations (Toolbar, Loops, Brave Search, Slack, Telegram) and Tutorials. So Telegram is Settings → Integrations → Telegram, the pre-chat email form is Settings → Chatbot → Lead Capture, and the switch that puts the floating widget on your site is Auto-Display Chatbot under Settings → Chatbot → Display. There is no “General” section and no top-level Telegram, License or Intents page: licence activation is Pro & Extensions, and trigger phrases are Actions → Trigger Phrases. If a guide or a chatbot sends you to a path that isn’t in that list, it is out of date — check this map first. Available in MxChat core (the free plugin).

How much of MxChat can I use for free — is the free version a trial?

It is not a trial and it does not expire. The free plugin on WordPress.org (mxchat-basic) is the whole core product: the chat widget, the knowledge base and its importers, every supported AI provider, Quick Questions, and the Slack and Telegram live-agent handoff — with no licence key, no time limit and no message cap from us (the rate limits under Settings default to Unlimited and exist so you can cap your own API spend). A Pro licence buys the add-ons, each of which installs as its own plugin from My Account → Downloads. You bring your own AI API key either way, and the provider bills you directly for usage. Available in MxChat core (the free plugin); a Pro licence unlocks the add-ons.

I have a licence but My Account → Downloads only lists add-ons — where do I download the main MxChat plugin?

The core MxChat plugin is free, so it is not a paid download and never appears on your Downloads page — that page lists only the Pro add-ons your licence unlocks. Install core from your own site first: Plugins → Add New, search MxChat, then Install and Activate; the direct listing is wordpress.org/plugins/mxchat-basic. Then activate your key under MxChat → Pro & Extensions and upload each add-on ZIP from My Account → Downloads via Plugins → Add New → Upload Plugin. The add-ons do nothing until the core plugin is active, so always install core first. Available in MxChat core (the free plugin); each Pro add-on installs as its own plugin.

What payment methods does mxchat.ai accept — can I pay by credit card, or is it PayPal only?

Card is fine; you do not need a PayPal account. Checkout offers Card and Debit & Credit Cards alongside PayPal itself, plus a set of European bank methods: iDEAL, Bancontact, Blik, EPS, MyBank, Przelewy24, Trustly and Multibanco. Add the plan to your cart, click Proceed to Checkout, and choose there — the exact list can vary a little by country and currency. This is about buying on mxchat.ai; the MxChat plugin itself never processes payments.

How much will the OpenAI (or other AI provider) API cost me, and how do I estimate it before buying?

MxChat is bring-your-own-keys, so apart from the one-time plugin price you pay only your AI provider, billed directly with no MxChat metering or markup. Your usage cost has two parts: a mostly one-time embedding charge to index your content (re-billed only when you re-index or switch embedding models, and usually small on Text-Embedding-3 Small even for a few thousand pages), plus an ongoing per-message chat charge that scales with traffic, since MxChat sets no message cap by default. To ballpark the chat spend, multiply your expected monthly messages by your chat model’s price per token from the provider’s own pricing page — each reply is capped at 1000 output tokens server-side, plus the input and context tokens — and pick a cheaper, smaller model to bring it down. Keep spend predictable by setting the Total chatbot message limit under Rate Limits, shortening replies with an AI Instructions behavior rule, and setting a hard spend cap on the key in your provider’s dashboard; for a fuller walkthrough see our cost guide. Available in MxChat core (the free plugin).

How do I uninstall MxChat from my WordPress site?

Remove it the standard WordPress way: go to Plugins, click Deactivate under MxChat (and under any MxChat add-ons you installed separately), then click Delete. That removes the plugin files. One thing to know: MxChat ships no uninstall routine, so deleting the plugin does not erase your data — your settings and its database tables (chat transcripts, the knowledge-base content, ratings, and a few others, each named with an mxchat_ segment such as wp_mxchat_chat_transcripts) stay in the database. If you want a clean wipe, clear your chat history first (or use the REST API), then — if you’re comfortable in the database — drop the mxchat_ tables and delete the mxchat_ options; if you plan to reinstall later, leaving them preserves your configuration and knowledge base. Available in MxChat core (the free plugin).

I bought MxChat Pro and activated my license, but an add-on (like the Theme Customizer / “Theme Settings”) doesn’t appear — how do I install it?

Buying Pro or Agency and activating your license unlocks the add-ons, but it does not install them for you — each add-on (Theme Customizer, Forms, Multi-Bot, WooCommerce, and so on) is a separate plugin you install yourself. Get it in three steps: (1) sign in at mxchat.ai and open My Account → Downloads, then download the add-on’s ZIP (the theme add-on is listed as MxChat Chatbot Themes); (2) in WordPress go to Plugins → Add New → Upload Plugin, choose the ZIP, install, and Activate; (3) its menu then appears — for the Theme Customizer that is MxChat → Theme Settings, which only shows once the add-on plugin is active and your Pro license is active. If the menu still doesn’t show, confirm your license reads active under MxChat → Pro & Extensions (see activating your license). If your Downloads page is empty or the add-on isn’t listed there at all, that’s an account/entitlement issue rather than a setting — email maxwell@mxchat.ai with your order number. Available in MxChat core (the free plugin); each Pro add-on installs as its own plugin.

Activating my license fails with “Exceeded maximum number of activations” — how do I free a slot?

That error means every activation slot on your license key is already in use. The usual cause is a previous install, site move, migration, or reinstall that still holds an activation — so even the same domain and email are refused until a slot is freed. Free one yourself from the site that still holds it: go to MxChat → Pro & Extensions and click Deactivate License — it calls home to release the slot (you’ll see “Activation slot has been freed up”) — then activate on the site you want, or release slots from the Manage Account link on that same screen. If you’ve lost access to the old install and can’t deactivate it, email maxwell@mxchat.ai with your order number and we’ll reset the activation count. See also moving a license to a new site. Available in MxChat core (the free plugin) — Pro & Extensions is always the bottom item in the MxChat menu, whether or not an add-on is installed.

How do I copy my chatbot’s settings and knowledge base to another WordPress site (e.g. a second Agency site)?

There’s no one-click “clone this bot” button, but each piece moves over cleanly. Settings: MxChat → Settings → Optimization & Diagnostics → Export Settings downloads a JSON of your configuration (API keys are masked for security). There’s no import counterpart, so use that file as a reference and re-enter the settings on the new site. Knowledge base: the simplest reliable path is to re-run your original imports (URL/sitemap, PDFs, Direct Content) on the new site — the KB is just embeddings of that content; alternatively, point both sites at the same Pinecone index so they share one knowledge base, or use the Migration add-on to export and migrate the vectors in bulk. License: on an Agency license you have several activation slots, so just activate the new site with one of your spare keys — you don’t need to contact support (for a single-key move, deactivate on the old site first — see moving a license to a new site). Available in MxChat core; the Migration add-on (Pro) handles bulk knowledge-base export and vector migration.

How do I move my MxChat Pro license to a different site or a new domain?

Deactivate it on the old site, then activate it on the new one. Activation checks only your purchase email and activation key — the domain is simply recorded against the license, and nothing requires it to be publicly reachable — so a local install (localhost, mysite.test, Local/MAMP/XAMPP, or a staging URL) activates like any other site. The only requirement is that the machine can reach mxchat.ai over HTTPS, since activation and add-on updates are remote calls. Each activation occupies a slot, so to move one: on the old site open MxChat → Pro & Extensions and click Deactivate License to free the slot; then on the new site enter the same email and activation key, activate, and use Link Domain to bind the key to the new URL. The same screen has a Manage Account link to your license dashboard if you would rather manage activations there. Available in MxChat core (the free plugin).

Can I use one license key on more than one site, and how many sites does each plan cover?

No — each license key activates a single site. Activation binds the key to one domain (along with the email you bought it with), so the same key can’t be reused on a second site. The plans differ only in how many keys you get: MxChat Pro includes 1 key (1 site), Agency includes 5 keys, and Agency Plus includes 10 keys — every tier unlocks the same Pro features and add-ons. Activate each site separately under MxChat → Pro & Extensions with its own key (your Agency keys may be labelled “MxChatPRO Version 1” — that’s normal). If you bought a multi-site plan but didn’t receive all your keys, retrieve them from the lost-license page or open a Support Ticket. Available in MxChat core (the free plugin) — Pro & Extensions is always the bottom item in the MxChat menu, whether or not an add-on is installed.

What is the MxChat onboarding wizard, and do I have to complete it?

When you first open MxChat in your WordPress admin you land on a six-step setup wizard that walks you through it one step at a time: pick a chat model and paste its API key, set the bot’s behavior, choose an embedding model for the knowledge base, optionally seed your first content, optionally enable Actions, and a final “you’re set up” step to test the bot and turn it on. Only the first step (a chat model + key) is essential — behavior, knowledge base, and Actions are all skippable and can be set later. You can reopen the guide any time from MxChat → Settings → Tutorials. Available in MxChat core (the free plugin).

What privacy disclaimer should I add to my site if I use MxChat?

You mostly do not have to write one any more. MxChat contributes ready-made wording to WordPress’s own Settings → Privacy → Privacy Policy Guide — four paragraphs covering what is stored and where, that conversations are kept for whatever retention period you configured, that clicked links are recorded and later anonymised, and that chat data is included in personal-data export and erasure requests — so open that guide and copy the MxChat section into your policy page. Two things it deliberately leaves to you, because only you know them: which AI provider you configured (OpenAI, Anthropic, Google and the rest each see message text in transit under their own terms), and any provider-specific terms you want to cite. Separately, switch on Privacy Notice under MxChat → Settings → Chatbot → Lead Capture to show a short line in the chat window linking to that policy page. If you would rather write the clause yourself, the facts to disclose are that transcripts live in your own WordPress database (table {prefix}mxchat_transcripts) and not on MxChat servers, that messages are forwarded to your chosen AI provider, and that each chat records the visitor’s IP address and the page it started on. Available in MxChat core (the free plugin).

How do I activate my MxChat Pro license?

Go to MxChat → Pro & Extensions in your WordPress admin (this screen was called “License” in older releases) and enter both your license key and the exact email address you used to buy the license. Activation calls the WooCommerce Software API at mxchat.ai with your domain, your key, and that email; if any of the three don’t match the original order, the response is “Invalid license”. If you mistyped the purchase email at checkout, the only fix is to email maxwell@mxchat.ai with the order number so it can be corrected on the order. Available in MxChat core (the free plugin) — Pro & Extensions is always the bottom item in the MxChat menu, whether or not an add-on is installed.

How do I add the chatbot to a specific page or post? What shortcode does MxChat use?

MxChat registers one shortcode: [mxchat_chatbot]. Drop it into any page or post from the editor content (there’s no separate admin menu for it) and the floating chat widget renders on that page. To embed the chatbot inline at that exact spot in the content instead of as a floating bubble, add floating="no"[mxchat_chatbot floating="no"] renders in place at a fixed 500 px height. If you run the Multi-Bot add-on, add bot_id="your-bot-slug" to choose which bot appears, e.g. [mxchat_chatbot bot_id="support"]. If you’d rather the chatbot appear on every page automatically with no shortcode, turn on Auto-Display Chatbot under MxChat → Settings → Chatbot instead. There is no dedicated Elementor widget, Gutenberg block or WordPress sidebar widget — the shortcode is the single insertion point, so in Elementor drop it into a Shortcode widget, in Divi a Code or Text module, and in the block editor a Shortcode block. Available in MxChat core (the free plugin).

Where are my API keys stored — locally or in the cloud? Does MxChat see them?

Locally, on your own server. Every API key you paste under MxChat → Settings → API Keys (OpenAI, Anthropic Claude, Google Gemini, xAI Grok, DeepSeek, OpenRouter, Voyage, Loops, Brave) is saved as a field inside the mxchat_options row of your WordPress wp_options table — the same database that holds the rest of your site’s settings. The keys never leave your server except when MxChat uses them to call the provider you configured them for (e.g. the OpenAI key is sent to api.openai.com when generating a reply); they are not transmitted to mxchat.ai, not synced to any MxChat-hosted service, and not visible to MxChat staff. If you want extra defense-in-depth, restrict database access at the host level and use the providers’ own usage-limit / IP-allowlist controls — those run on the provider side, not in MxChat. Available in MxChat core (the free plugin).

Do I need my own AI API keys, or are language models included with MxChat?

MxChat is bring-your-own-keys — the plugin doesn’t bundle access to any AI provider. Open accounts at the providers you want to use (OpenAI, Anthropic, Google Gemini, xAI Grok, DeepSeek, or OpenRouter), then paste each key under MxChat → Settings → API Keys; without a key, that provider’s models won’t load and you’ll see a “No API key detected” warning on the model picker. The provider bills you directly for usage — MxChat doesn’t proxy, meter, or mark up the API calls. If you only want to manage one account, OpenRouter gives you a single key that unlocks 100+ models from many providers. Available in MxChat core (the free plugin).

AI models & providers

Is the retrieved knowledge-base context passed to every chat model identically, or is there model-specific grounding logic?

It is identical. Retrieval happens before the provider is chosen: MxChat embeds the question, finds the matching chunks and assembles them into one context string, and only then hands that same string to whichever provider the switch dispatches — OpenAI, Claude, Gemini, Grok, DeepSeek, OpenRouter or a custom endpoint. What differs per provider is purely the envelope its API demands (message-array shape, streaming flag); there is no per-model prompt variant, re-ranking or extra grounding step. That is also why your embedding model and chat model are genuinely independent — a Gemini-embedded knowledge base behaves the same whether an OpenRouter, OpenAI or DeepSeek model reads it. So if one model grounds noticeably worse than another on the same knowledge base, that is the model’s instruction-following, not a different retrieval; to confirm it, open MxChat → Transcripts, select the conversation and read the Sources tab in Message Context, which lists the documents and similarity scores actually sent for that specific reply. Available in MxChat core (the free plugin).

Does Enable Streaming work with Google Gemini, or do I have to change my chat model to get word-by-word replies?

No — Gemini is the one built-in provider MxChat has no streaming path for, and it is the only one: OpenAI, Claude, Grok, DeepSeek, OpenRouter and a Custom Provider endpoint all stream, while the Gemini branch calls the ordinary response function only. Nothing warns you about it either — with Enable Streaming on and a Gemini model selected, the request quietly falls back and the answer arrives in one piece, with no error. Enable Streaming and Chat Model sit on the same screen at MxChat → Settings → Chatbot → AI Models; both are single site-wide settings, and streaming ships off on a fresh install. If you want Google’s models and streaming, keep the model and change the route: select OpenRouter as the provider and pick a Google model from its list, which MxChat fetches live from OpenRouter’s API (see OpenRouter models). Slow replies have other causes too — see why the chatbot is slow. Available in MxChat core (the free plugin); the Multi-Bot add-on is what makes the chat model a per-bot choice.

Does MxChat support Brave Search?

Yes — Brave is the search provider built into the free core plugin, as two Actions: Brave Web Search and Brave Image Search, both listed under the “Search Features” group and neither of them Pro-only. Switch them on under MxChat → Actions, and add a Brave Search API key at Settings → API Keys → Brave API Key; enabling either Action without that key raises an admin warning, because the tool is registered but every call will fail. The tuning options — number of images returned, Safe Search, number of news articles, and country — live separately at Settings → Integrations → Brave Search. Brave is a different thing from the Enable Web Search toggle, which grounds OpenAI and Gemini models through their own native search, and from the Perplexity add-on — see the comparison of the three. Available in MxChat core (the free plugin).

Can I use Mistral (or another provider that isn’t in the model dropdown) with MxChat?

Yes, but not as a direct integration — there is no native Mistral provider in MxChat, no Mistral entry in the model picker, and no separate “provider” dropdown to change, because you choose a model and the provider follows. Both working routes reach Mistral through a gateway rather than through Mistral’s own API, and both are supported. The first route is OpenRouter: paste your key under MxChat → Settings → API Keys → OpenRouter API Key, click the button to load the model list, then pick a Mistral model in Settings → Chatbot → AI Models. The second is Custom Provider (OpenAI-compatible), on that same API Keys tab — point Base URL at any endpoint that speaks OpenAI’s /v1/chat/completions, add the key, and type the model identifier the server expects in Model Name (the field’s own examples are llama3.2, mistral, gpt-oss), leave Auth Scheme on Bearer, then select “Custom (OpenAI-compatible)” in the model picker and press Test Connection. That second route is how you run Mistral locally through Ollama, LM Studio or vLLM, and it is the same mechanism behind Azure OpenAI support. Available in MxChat core (the free plugin).

Can I use DeepSeek with MxChat, and can DeepSeek handle embeddings too?

For chat, yes; for embeddings, no. Paste your DeepSeek key under MxChat → Settings → API Keys, then open the Chat Model selector under Settings → Chatbot → AI Models and pick DeepSeek V4 Flash or V4 Pro; streaming works with both. DeepSeek publishes no embedding model, so the Embedding Model field on that same screen has to stay on OpenAI, Voyage AI or Google Gemini — or a custom OpenAI-compatible endpoint. Those two fields are the only model settings MxChat has: Chat Model and Embedding Model. If you had saved the older deepseek-chat or deepseek-reasoner, MxChat moved you to DeepSeek V4 Flash by itself when DeepSeek retired those names on 24 July 2026. Available in MxChat core (the free plugin).

Can I use a local or open-source embedding model — Ollama, LM Studio, vLLM — instead of OpenAI, Voyage or Gemini?

Yes, since MxChat 3.2.8. Point MxChat at your endpoint under MxChat → Settings → API Keys → Custom Provider (Base URL, for example http://localhost:11434/v1 for Ollama), then under Extended routing (opt-in) tick “Use custom provider for embeddings” and enter the embedding model’s name — nomic-embed-text or mxbai-embed-large, not a chat model like llama3.2 — in the Custom Embedding Model field. Two things catch people out. The checkbox is off by default, so a local chat model still sends its embeddings to OpenAI until you tick it; and if you leave Custom Embedding Model blank, MxChat falls back to your chat model name, which most servers reject at /embeddings and which surfaces on import as “Failed to store any chunks”. With the box ticked, indexing and live queries both run through your endpoint, so re-index your whole knowledge base after switching — vectors made by two different models never match. Available in MxChat core (the free plugin).

Do I need the Perplexity add-on for web search with Gemini?

No. MxChat has built-in web search: go to Settings → AI Models and turn on Enable Web Search. With a Google Gemini model selected, the bot then grounds its answers with Google Search using your own Gemini API key — no Perplexity required. The same toggle also grounds OpenAI models (every one except gpt-4.1-nano) through their native web search. The Perplexity add-on is a separate, optional integration that answers via Perplexity’s own web search; you only need it if you specifically want Perplexity as the search provider. Available in MxChat core (the free plugin); the Perplexity add-on adds a separate web-search option.

Does MxChat support Azure OpenAI?

Yes — as of MxChat 3.2.8, through the Custom (OpenAI-compatible) provider. In MxChat → Settings, open the Custom Provider (OpenAI-compatible) section and set the Base URL to your Azure resource endpoint (https://<resource>.openai.azure.com/openai/deployments/<deployment>), paste your Azure API Key, switch Auth Scheme to api-key header (Azure OpenAI), and fill API Version (required for Azure, e.g. 2024-08-01-preview). Then pick “Custom (OpenAI-compatible)” in the model picker and use Test Connection to confirm. The same provider also connects Ollama, LM Studio, vLLM, and other OpenAI-compatible endpoints. Available in MxChat core (the free plugin).

Which embedding models can I use, and why isn’t Claude an option for embeddings?

Your chat model and your embedding model are two separate settings, so the embedding step in setup only lists providers that actually offer embeddings: OpenAI (Ada 2, Text-Embedding-3 Small, Text-Embedding-3 Large), Voyage AI (Voyage-3 Large), and Google Gemini. Anthropic (Claude) doesn’t publish an embedding model, which is why it never appears at that step — but you can still use Claude as your chat model. The catch: picking Claude for chat doesn’t cover embeddings. If your knowledge base is set to a Voyage or Gemini embedding model, the bot will fail with an error like “Voyage AI API key is not configured” (or “Google Gemini API key is not configured”) until you add that provider’s key under MxChat → Settings → API Keys — or switch the embedding model (Settings → Chatbot → AI Models) to a provider whose key you already have. When the chat and embedding providers match (for example, both OpenAI), MxChat reuses the same key automatically. Those three are the built-in choices in the dropdown, but they are not the whole list — you can also send embeddings to any OpenAI-compatible /embeddings endpoint (Ollama, LM Studio, vLLM, Azure OpenAI) by enabling the custom embedding provider. Available in MxChat core (the free plugin).

Why isn’t GPT-4.1 in the model dropdown anymore?

OpenAI deprecated the GPT-4.1, GPT-4o, GPT-4-turbo and GPT-3.5-turbo families on 2026-02-17, so MxChat removed them from the model picker. MxChat 3.0.55+ migrates any saved chat-model setting on those families to GPT-5.1 Chat Latest (or GPT-5 Mini for the mini variants) the next time the plugin loads, and shows a one-time admin notice describing the swap. The list you see now (GPT-5, 5 Mini, 5 Nano, 5.1, 5.1 Chat, 5.2, 5.3 Chat, 5.4, 5.4 Mini, 5.4 Nano) is OpenAI’s current GPT-5 lineup; pick any of those under MxChat → Settings → Chat Model. Available in MxChat core (the free plugin).

Which OpenRouter models can I use with MxChat — including the free ones?

The full OpenRouter catalog. Paste your OpenRouter API key under MxChat → Settings → Configuration → API Keys, then go to Configuration → Chatbot, open the Chat Model selector and pick the OpenRouter card — choosing that card is what fetches the catalog, there is no separate “load models” button; MxChat pulls the live list directly from OpenRouter’s /api/v1/models endpoint and shows every model OpenRouter exposes — paid and free — as a selectable card with pricing and context length. Free models (the ones OpenRouter suffixes with :free, e.g. deepseek/deepseek-chat-v3-0324:free) work the same as any paid model; pick one and save. There is no curated allow-list inside MxChat. Available in MxChat core (the free plugin).

What AI models does MxChat support?

The Chat Model selector (MxChat → Settings → Chatbot → AI Models) currently offers GPT-5.6 Sol, Claude Fable 5, Claude Opus 5, Claude Opus 4.8, Claude Opus 4.7, Gemini 3.5 Flash, Grok 4, and DeepSeek V4 Flash and V4 Pro — plus two gateways: OpenRouter, which unlocks 100+ models from Meta, Mistral, Qwen and others behind one key, and Custom Provider for any OpenAI-compatible endpoint you host yourself. The list moves with the providers: when a vendor retires a model, MxChat drops it from the picker and switches sites that were using it to the successor automatically, so a saved model that disappears is a retirement, not a bug. Native Qwen support is not built in — reach it through OpenRouter. Embedding models are a separate setting on the same screen and a shorter list (see the embedding-model entry). Available in MxChat core (the free plugin).

Knowledge base & training

Can I turn knowledge base retrieval off completely, so no embedding call is made on every message?

No — there is no setting for that, and emptying the knowledge base does not achieve it either. MxChat generates a query embedding for every chat message before the search runs, and that call is load-bearing rather than optional: if it errors or comes back empty, the visitor sees “Unable to process your message. The embedding service is not responding correctly” instead of an answer written without context. Changing the backend does not skip it — Pinecone and OpenAI Vector Store change where the search happens, not whether it happens, and the Vector Store path still pays for a query embedding it never uses, because OpenAI runs the search server-side. If the real problem is latency, the embedding call is rarely the expensive part: start with why replies are slow, and on a WordPress-database knowledge base past a few hundred entries with the similarity scan that runs after it. Available in MxChat core (the free plugin).

How do I delete knowledge base entries or clear the whole knowledge base? I don’t see a delete icon.

The delete controls exist, but not on the screen MxChat → Knowledge opens on — that lands on Import Options, and you have to click Knowledge Base in its left sidebar (the item carrying your entry count) before any of them appear. On that screen, Delete All sits at the top right of the Knowledge Entries card and clears the base after a confirmation prompt; tick one or more row checkboxes and the same button becomes Delete Selected, and every row has its own trash icon in the Actions column that removes that source together with every chunk it was split into. One trap worth knowing before you press it: choosing a type from the All Types filter really does narrow the button — it reads Delete All PDFs, Delete All Pages and so on, and removes only that type — but a term typed into the search box does not, so Delete All still clears everything while search results are on screen. Deletion is permanent and there is no export or backup of knowledge entries, so anything you remove has to be re-imported from its original source. Available in MxChat core (the free plugin).

With OpenAI Vector Store, can the chat model read my data directly instead of a separate retrieval call?

No — it is still two calls, but not the two you would expect. On this path MxChat does not embed the question itself: it POSTs the visitor’s raw text to OpenAI’s Responses API with the file_search tool pointed at your Vector Store IDs, so OpenAI does the embedding and the search server-side, and you never configure an embedding provider for it. MxChat then keeps only the retrieved chunks from that response and sends them as context in the ordinary chat call that actually answers your visitor. Two things follow that catch people out: MxChat never uploads anything to the store — you create and fill it in OpenAI’s own dashboard — and retrieval silently stops working if your chat model is not an OpenAI model, since the tool call requires one. See also how the three retrieval backends rank against each other. Available in MxChat core (the free plugin).

Does MxChat index what a dynamic page-builder widget outputs (like an Elementor Posts widget), and can a URL import re-run on a schedule?

No to both, and the two facts compound. WordPress Content import and Auto-Sync read the stored post_content straight from the database, remove shortcode tags and then strip HTML — they deliberately never run WordPress’s the_content filter, so a widget that queries posts at render time contributes only its builder markup and its actual output is never indexed. Direct URL and Sitemap Import do fetch the live rendered HTML (with dedicated Elementor handling) and so capture that output — but only at the moment you run them, and MxChat registers no periodic re-fetch anywhere: the only scheduled jobs core creates are rate-limit resets, transcript cleanup, session cleanup and model-liveness checks. Two consequences worth planning around: a dynamic listing silently goes stale whenever the posts it queries change, because nothing ever edits the host page; and if Auto-Sync is enabled for that page’s post type, saving the page re-indexes it under the same permalink and replaces the good rendered version with the raw-post_content one. Re-run the sitemap import after the underlying content changes, and consider leaving Auto-Sync off for builder pages you maintain by URL. See also page-builder pages that index incompletely and how Sitemap-imported content refreshes. Available in MxChat core (the free plugin).

Do I need BetterDocs or another documentation plugin for MxChat to read my content?

No. MxChat’s knowledge base is its own store — imported content lives in a dedicated MxChat database table, not as posts or pages, and visitors never browse it directly — so nothing has to be published on your site before the bot can answer from it. MxChat → Knowledge → Import Options offers seven methods: WordPress Content, Sitemap Import, Direct URL, Direct Content for pasted text and manual Q&A, PDF Import from a URL, PDF Upload from your computer, and YouTube. Two limits to plan a workflow around: PDF is the only file type you can upload — there is no .txt, .md or .docx importer, so Markdown notes exported from Obsidian, Notion or similar have to be pasted through Direct Content or saved as PDF first — and PDF Upload takes one file per submission, so a large document set is a manual job (see what you can upload to train the chatbot). A documentation plugin is still worth having if you want human-readable, search-indexable help pages alongside the chat; it just is not a prerequisite for MxChat. Available in MxChat core (the free plugin).

Can I use a self-hosted vector database like Qdrant, Chroma or Weaviate instead of Pinecone?

No — core ships exactly three retrieval backends and no plug-in point for a fourth: your WordPress database (the default, and the self-hosted one — those vectors sit in a table on your own server), Pinecone, and OpenAI Vector Store, the last two under MxChat → Knowledge in the Integrations group. When more than one is switched on, OpenAI Vector Store wins, then Pinecone, then the local table. The OpenAI option carries two conditions worth knowing before you pick it: it works only while your chat model is an OpenAI model, and MxChat only searches it — you upload the documents in OpenAI’s own dashboard, and your local knowledge-base entries stop being searched while it is active. Qdrant, Chroma, Weaviate and pgvector are not supported. If what you wanted was your vectors on your own infrastructure, the WordPress database already is that — see what it costs as it grows. Available in MxChat core (the free plugin).

Does keeping the knowledge base in the WordPress database slow my site down?

Not your pages. The knowledge search runs only when a visitor sends a chat message — ordinary page loads never touch it, and the widget’s own effect on load time is a separate question. The cost lands inside that one chat request: MxChat reads every stored chunk in batches of 250 and computes cosine similarity in PHP for each one, so the work grows in a straight line with the size of your knowledge base — there is no vector index to short-circuit it. That pass reads only the embeddings, and the full text of the winning entries afterwards, which keeps memory flat but does not shorten the scan. MxChat’s own Knowledge screen draws the line at more than 500 entries and recommends Pinecone past that; below it, the local table is the simpler choice. Available in MxChat core (the free plugin).

Does content I added with Sitemap Import update itself when I edit the page, or do I have to re-import it?

Auto-sync keys on the post type, not on the importer that created the entry. With a type switched on under MxChat → Knowledge → Auto-Sync, publishing or updating an item re-indexes it under its permalink and replaces whatever entry already sits at that URL — so a page or product originally pulled in by Sitemap Import does refresh when you edit it, provided the sitemap listed the same address the permalink resolves to (a trailing slash, or http against https, makes it a second entry instead). What never refreshes on its own is a sitemap URL with no WordPress post behind it — a category or other taxonomy archive, or a page on another site — because there is no save for MxChat to hook; re-run the sitemap import to update those. Re-running it is safe either way: MxChat deletes the existing chunks for a URL before writing the new ones, so a second pass replaces rather than duplicates (more on that here). Available in MxChat core (the free plugin).

My knowledge base is one long list — how do I find a single entry, and can I export them all as a backup?

The list under MxChat → Knowledge → Knowledge Base has a search box and an All Types filter above it (every public post type, plus PDFs and URLs), and shows 25 entries per page. Entries are grouped by source URL, so one page counts as a single row however many chunks it was split into — which is why the number on screen is smaller than the number of rows actually stored. Worth knowing before you go looking: the search matches the entry’s text, not its URL, so a slug or an address turns up nothing unless those words appear in the content itself. There is no export or backup of knowledge-base entries — the Export Settings button on the Settings screen covers your options, not your content — so treat a deletion as permanent and re-import from the original source if you lose one. Available in MxChat core (the free plugin).

What does the “Hybrid keyword boost” setting do, and what changes if I turn it off?

It runs a ranked keyword query alongside the normal vector scan and fuses the two result lists by reciprocal rank, so exact tokens — SKUs, part numbers, error codes, proper names — can surface even when their embedding similarity is weak. It is off by default and lives at MxChat → Knowledge → Chunking & Retrieval in the Retrieval card; it used to sit under Settings → Behavior, which now only points at the new location. Switch it off and retrieval goes back to pure cosine similarity — marginally faster, but an exact-token question then ranks only as well as its semantic match. Two caveats before you toggle it: it affects the WordPress-database knowledge base only, so a Pinecone-backed site sees no change from it, and the keyword leg wants a MySQL FULLTEXT index, which MxChat adds to its content table on first use and quietly falls back to a LIKE query on hosts that refuse the ALTER. Because it changes which sources get retrieved on an existing install, re-run a few real questions after enabling — while it is on, the sources panel in Transcripts labels how each match was found. Available in MxChat core (the free plugin).

I imported my pages with “WordPress Content” and then again with Sitemap Import — did that create duplicates?

No. Every importer stores content against its source_url, and MxChat deletes any existing chunks for that URL before writing the new ones, so importing the same address a second time replaces the first copy rather than stacking on it — which is why your knowledge-base count did not move. That also answers whether the second pass was worth running: re-importing the same URLs only refreshes them, so reach for Sitemap Import to cover pages the content picker cannot see, not as a top-up for pages it already imported. Two cases do slip past the match, because it compares the URL exactly: the same page imported once with a trailing slash and once without (or once over http and once over https) lands as two entries, and anything pasted into the manual importer is stored under an internal mxchat://manual-content/ identifier, so importing that same page by URL adds a second copy instead of replacing it. Available in MxChat core (the free plugin).

If I move a post to draft, does it stop being used by the chatbot?

Yes — as long as Auto-Sync is switched on for that post type under MxChat → Knowledge → Auto-Sync. MxChat watches WordPress status changes, and when a published item moves to draft, pending, private or scheduled it deletes that item’s knowledge-base chunks, matching on the permalink the post had while it was published; trashing or permanently deleting a post does the same through a separate handler. If Auto-Sync is off for that post type nothing is removed and the old text keeps answering questions — switch the toggle on, then run wp mxchat prune-unpublished once from WP-CLI to clear entries left behind by anything you unpublished earlier. See also what “Sync Post Types” does for the re-indexing side of the same setting. Available in MxChat core (the free plugin).

What is Contextual Awareness, and do I need to mention it in my AI Instructions?

Contextual Awareness lets the bot read the page the visitor is standing on, which is a different thing from your knowledge base: the knowledge base is indexed content it can search in any conversation, this is the live page in front of the visitor right now. Turn it on under MxChat → Settings → Behavior — it ships off. With it on, the browser collects the page URL, the page title and the main body text on every message, and MxChat hands the model a labelled Current Page Context block, so you do not need to reference it in your AI Instructions; adding instructions about it changes nothing. Two limits are worth knowing: the text is trimmed to the first 3,000 characters, and it is taken from the first matching content area on the page (main, article, .entry-content, #content and similar), falling back to the whole body with header, footer, nav, sidebar and widgets stripped out. On a page with an unusual layout, add data-mxchat-context="…" to an element and its value is appended to what the bot sees. Available in MxChat core (the free plugin).

My store’s base currency is INR (or EUR) but the chatbot quotes product prices in USD — why?

Your products were indexed before MxChat core 3.2.19. The importer used to write each price with whatever currency symbol was active at the moment the import ran, and multi-currency plugins change that per request — so if the store happened to be serving USD when you imported, a “$” was frozen into every indexed product and stayed there. From 3.2.19 prices are indexed in the store’s base currency, with the currency code, and the bot no longer mixes two currencies in one reply. Existing entries keep the old text until you re-run the WordPress Content import for your products, so do that after updating. This is also why a product card can disagree with the bot’s typed answer: cards build their price live from WooCommerce, which multi-currency plugins do convert, while the sentence above the card is read from the indexed text. Available in MxChat core; the WooCommerce add-on extends it with product cards that price from WooCommerce live.

How do I import a Word (.docx) document into the knowledge base?

There is no Word importer — MxChat → Knowledge → Import Options offers WordPress Content, Sitemap Import, Direct URL, Direct Content, PDF Import, PDF Upload and YouTube, and PDF is the only file type you can upload. Three ways to get the document in, all equivalent once indexed: paste its text into Direct Content; publish it as a page or post and import it with WordPress Content (best if you want auto-sync to pick up later edits); or save it as a PDF and use PDF Upload. Don’t confuse this with the Word document upload button in the chat toolbar — that lets a visitor attach their own .docx to their own conversation, and the extracted text is held in a one-hour session transient, so it never enters your knowledge base and no other visitor can see it (see where the Toolbar settings are). Available in MxChat core (the free plugin).

There are two screens where I can enter a Pinecone Host — which one do I use?

Both, and they do different jobs. MxChat → Knowledge → Pinecone is the account-level screen holding API Key, Region, Index Name and Host; it is what the default bot queries, and its API Key is the one every bot uses. The second screen exists only if you run Multi-Bot: the Pinecone Host field on an individual bot overrides the host for that bot alone — key, region and index name are never per-bot. So fill in the core screen first, then set a per-bot Host only for bots that should query a different index. There is no Namespace field in the settings UI, so bots are separated by index, not by namespace. Available in MxChat core; the Multi-Bot add-on adds the per-bot Pinecone Host field.

Can each chatbot have its own Pinecone index, and how do I add content to a specific bot’s index?

Yes. With the Multi-Bot add-on active, every bot has its own Pinecone Host field on its edit screen in the Multi-Bot Manager — point each bot at a different index host and their knowledge stays completely separate. The API key is not per-bot: it is read from the single core field under MxChat → Knowledge → Pinecone, so all your indexes must sit in the same Pinecone account, and a bot that has a Host but no API key saved on that core screen quietly falls back to WordPress-database storage instead of erroring. To load content into a particular bot’s index, use the Select Bot Database dropdown at the top of MxChat → Knowledge — every import you run on that screen goes to the bot selected there, so switch the dropdown and import again for the second bot. Per bot you use either Pinecone or an OpenAI Vector Store, not both; if both are filled in, the Vector Store wins. Available in MxChat core; the Multi-Bot add-on extends it with the per-bot Pinecone Host and the bot picker on the Knowledge screen.

How does the chatbot decide whether to answer from my knowledge base or from the AI model’s general knowledge, and which setting controls it?

Every visitor message is turned into an embedding and scored for similarity against your indexed content; anything scoring above the Similarity Threshold is passed to the model as context, and when nothing clears the bar the model answers from its own general knowledge instead. There is no separate on/off “fallback” switch — that threshold is the control. Find it at MxChat → Settings → Similarity Threshold: a slider from 20 to 85 that defaults to 35 — lower it so the bot leans on your own content more often, raise it for stricter matching. How much of what matched actually reaches the model is set separately by RAG Sources Limit and RAG Chunks Limit, and if the bot skips content that clearly should match, the cause is usually an embedding-model mismatch rather than the threshold. Available in MxChat core (the free plugin).

The chatbot doesn’t fully read my Divi or Elementor (page builder) pages — some text like pricing is missing. How do I index them?

MxChat’s two import methods read different things, and that’s usually the cause. The WordPress Content import pulls a page’s stored post content and strips shortcode tags — but page builders like Divi, Elementor, and WPBakery keep the visible text inside builder modules and markup, so what the importer extracts can be incomplete or noisy (the bot then “sees” the page but misses details such as a price, and links to the page instead of answering). For builder pages, re-import with Direct URL (one page) or Sitemap Import (many) at MxChat → Knowledge → Import Options — those fetch the live rendered HTML a visitor actually sees and pull the main content area (with dedicated Elementor handling), so the real page text is captured. One caveat: text injected purely by JavaScript after the page loads isn’t in the fetched HTML, so make sure key info like pricing is real on-page text, then re-index. See also Direct URL import and why the bot links to pages instead of answering. Available in MxChat core (the free plugin).

Why does my Knowledge Base show a “Not in use” label on my entries?

The amber “Not in use” badge next to your Knowledge Entries means the OpenAI Vector Store integration is switched on, so the chatbot is retrieving answers from OpenAI’s hosted vector store instead of the entries stored in your WordPress database — those local entries are simply sitting there, not being searched. To make them active again, open MxChat → Settings → OpenAI Vector Store (in the Integrations area) and turn off Enable OpenAI Vector Store; the badge then switches back to “WordPress DB” (or “Pinecone” if you use Pinecone). Note that the Vector Store only works when your chat model is an OpenAI model in the first place. Available in MxChat core (the free plugin).

Why don’t my WPML or Polylang translated pages show up when I import with the “WordPress Content” method?

MxChat’s WordPress Content picker runs a standard post query with no language override, and its multilingual config file only registers the widget’s display strings for translation — it adds no language awareness to content indexing. So with WPML or Polylang active, the list shows only the posts for the language that is currently active in wp-admin, and your other-language pages are filtered out. Two reliable fixes: switch the admin language (the WPML/Polylang selector) to each language and import that language’s pages one language at a time; or skip the picker and use Direct URL or Sitemap Import with the translated page URLs, which indexes each language variant as its own knowledge-base entry — also the better setup, since it lets the bot return the right-language page. Available in MxChat core (the free plugin).

Pinecone says my model “does not support integrated inference” or to “manage your own embeddings” — can MxChat still index automatically?

Yes — that message is expected, and “manage your own embeddings” is exactly the mode MxChat needs. MxChat generates each embedding itself by calling your chosen provider (OpenAI, Voyage, or Gemini) and then upserts the finished vector into your Pinecone index, so it never uses Pinecone’s built-in “integrated inference” embedding service. Create a plain vector index (not a Pinecone-hosted-embedding one), set its dimensions to match your embedding model (1536 for Ada 2 / TE3 Small / Gemini, 3072 for TE3 Large, 2048 for Voyage-3 Large), make sure that provider’s API key is set, and automatic indexing on publish/update works normally. Available in MxChat core (the free plugin).

What do I enter in Knowledge → Role Restrictions, and why do I get “Tag does not exist in WordPress”?

MxChat → Knowledge → Role Restrictions (“Role-Based Content Restrictions”) lets you limit which indexed content the chatbot will surface based on a visitor’s logged-in WordPress role. You add a Tag–Role mapping — a WordPress post tag plus a Required Role (Public, Logged In Users, Subscribers & Above, Contributors & Above, Authors & Above, Editors & Above, or Administrators Only) — then click Update All Existing Content to apply it to posts you’ve already indexed. The “Tag does not exist in WordPress” error means the tag you typed isn’t a real tag on your site: despite the “Tag Name” label, the field is matched against an existing post tag’s slug (lowercase and hyphenated — e.g. members-only, not “Members Only”). Create the tag first under Posts → Tags, assign it to the posts you want to gate, then enter its slug. Available in MxChat core (the free plugin).

What is “Direct URL” import and where do I find it?

Direct URL pulls the content of a single web page into your knowledge base by its address. Find it at MxChat → Knowledge → Import Options → Direct URL — it’s one of the import cards there, alongside Sitemap Import and Direct Content (it is not under a tab called “Knowledge Import,” a common mislabel). Use Direct URL for one page, Sitemap Import to pull many pages at once, and Direct Content to paste text you don’t have a URL for. Available in MxChat core (the free plugin).

Can I index only a small set of content (or a JSON file) instead of my whole site?

Yes — you decide exactly what goes into the knowledge base and are never forced to index every post. Post-type syncing is opt-in per content type, so leave it off and add only what you want through MxChat → Knowledge → Import Options: Direct Content to paste a limited block of text, Direct URL for a single page, or a PDF / sitemap. There’s no JSON-file import type, so to load structured data, paste it as text via Direct Content. See also what you can use to train the chatbot. Available in MxChat core (the free plugin).

Can the chatbot read content inside accordions, tabs, popups, or hidden/toggled sections (e.g. in Elementor)?

For the knowledge base, yes — as long as the text is in the page’s HTML. When you index a page by its URL, MxChat fetches the server-rendered HTML and pulls the body content (it has dedicated handling for Elementor widgets), so text inside accordions, tabs, and toggle sections is captured even though it renders collapsed — it’s still present in the page markup. What it won’t pick up: content injected by JavaScript after load, and Elementor popups (separate templates that aren’t part of the page’s HTML) — index those on their own, for example by pasting the text via Knowledge → Import Options → Direct Content. This is separate from the live page scan (Contextual Awareness), which only reads what is currently visible, so collapsed content can be missed there. Available in MxChat core (the free plugin).

How do I re-index or rebuild my knowledge base embeddings without the Pro Migration tool?

The free version has no one-click rebuild button — bulk re-embedding (for switching embedding models or vector databases) is what the Migration add-on does. To re-index in free, re-import the content: submit the same URL or text again and MxChat replaces that source in place — it deletes the old vectors for that URL and re-embeds with your current embedding model. You can also delete an entry from the Knowledge Database table and add it back, and any post type you’ve enabled under Sync Post Types re-embeds automatically when you edit and update the post. This is the fix after changing your Embedding Model (Settings → Chatbot → AI Models): existing content keeps its old embeddings until you re-import it. If you have Pro and are looking for the Migration add-on itself, it installs as its own plugin and lands at MxChat → Migration Tool — see where to find the Migration Tool. Available in MxChat core; the Migration add-on extends it with one-click bulk re-indexing across models and vector DBs.

Does MxChat index Toolset Types fields (or other non-ACF custom fields) in the knowledge base?

Yes. ACF fields are pulled in automatically, but Toolset Types stores its custom field values as ordinary post meta (keys prefixed wpcf-), which ACF does not manage — so add those keys to the whitelist at MxChat → Knowledge → Custom Meta, in the Meta Key Whitelist box, one meta key per line (for example wpcf-price). Each whitelisted field value is appended to the post text when it is embedded, and only plain string values are included, so re-index the post after adding keys. The same whitelist also covers other non-ACF post meta, such as OptionTree fields or theme meta boxes. Available in MxChat core (the free plugin).

How do I teach the chatbot the correct answer to a question it got wrong?

Add the corrected question and answer to your knowledge base as plain text. Go to MxChat → Knowledge → Import Options, click the Direct Content box (“Submit content to be vectorized”), paste the question and the right answer, then submit — the bot pulls it in the next time someone asks something similar. There is no separate “Add New” or “Add Content” button; Direct Content is the manual-entry method, and it works in the free version (it is not Pro-only). Available in MxChat core (the free plugin).

What do the RAG Sources Limit and RAG Chunks Limit settings do?

They cap how much of your knowledge base is fed to the AI on each reply. RAG Sources Limit (in Chatbot settings; default 3, range 3–10) is the maximum number of distinct source documents the bot draws from for one answer. RAG Chunks Limit (default 15, range 8–20) is the maximum number of individual text passages (chunks) injected into the prompt across those sources. Raise them if answers miss details that exist in your content; lower them to cut token cost and keep replies tighter. Both behave the same whether your vectors live in the WordPress database or Pinecone. Available in MxChat core (the free plugin).

What does “Sync Post Types” mean, and will MxChat re-index a page automatically after I edit it?

In MxChat → Knowledge → Auto-Sync you can switch on automatic syncing per content type — Posts, Pages, and any public custom post type — a CPT (WooCommerce products sync when the WooCommerce integration is enabled). With a type’s toggle on, MxChat re-indexes that content into the knowledge base every time you publish or update an item of that type, so you don’t have to re-import it by hand. Turning a toggle on only affects content you publish or update afterward — it does not back-fill posts that already exist, so the first time you set it up, bulk-import your current published content from MxChat → Knowledge → Import Options (the content selector lets you filter by post type and import all published items at once). One exception for re-syncing: anything you added by pasting a URL into the manual importer is stored under an internal mxchat://manual-content/ identifier rather than the page’s URL, so editing the live page won’t re-sync it — re-import that URL to refresh the entry. Available in MxChat core (the free plugin).

Can MxChat automatically sync course content from LMS plugins like LearnDash, LifterLMS, or Tutor LMS?

Yes. MxChat auto-syncs any public custom post type, which includes courses, lessons, and quizzes from the major LMS plugins as long as they’re registered as public CPTs. Open MxChat → Knowledge, expand Sync Custom Post Types, and toggle on the post types you want indexed (e.g. sfwd-courses for LearnDash, course for LifterLMS, courses for Tutor LMS). Whenever a course is published or updated — including ones added by users on the front end — the content is re-indexed automatically. Available in MxChat core (the free plugin).

How do I set up Pinecone for MxChat?

Create the index in your Pinecone dashboard first at app.pinecone.io, then connect it under MxChat → Knowledge → Pinecone. When you create the index, set its dimensions to match your embedding model — 1536 for Ada 2, Text-Embedding-3 Small, or Gemini; 3072 for Text-Embedding-3 Large; 2048 for Voyage-3 Large — and use the cosine metric; a dimension mismatch makes every upsert fail with “Failed to store any chunks.” You’ll need four values to connect: API Key, Region (e.g. gcp-starter), Index Name, and Host (the hostname from your index URL, without https://). Toggle Enable Pinecone Database on, paste the values, and save — new knowledge entries will then be stored in Pinecone instead of the WordPress database. Available in MxChat core (the free plugin).

Is Pinecone required? Where are the chatbot’s embeddings and knowledge chunks stored?

No. By default MxChat stores your knowledge base — the text chunks and their embeddings — in free, unlimited local vector storage inside your WordPress database, which keeps the vectors on your own server. MxChat’s own Knowledge screen draws the line at more than 500 knowledge entries: past that it recommends Pinecone, because the WordPress database isn’t built for vector search at that size. Below 500 entries, local storage is the simpler choice and there is nothing to gain by switching. Turn Pinecone on under MxChat → Knowledge → Pinecone and new entries are stored there instead. A third backend, OpenAI Vector Store, sits in the same Integrations group and takes priority over both when it is on — the three are compared here. The AI Search add-on used to be the one feature that couldn’t follow you across — it read the local table only, so a Pinecone site quietly got no AI overview; AI Search 1.0.3 closes that, so make sure you are on it before switching. Available in MxChat core; the AI Search add-on needs 1.0.3 or newer to read a Pinecone knowledge base.

Can I include ACF fields, custom taxonomy terms, or other custom data in the knowledge base?

Yes. When MxChat indexes a post it always pulls the title, excerpt, and body; ACF field data is included automatically (use ACF Field Settings to choose which fields are exposed), any post meta you add to the Knowledge → Custom Meta whitelist is included, and WooCommerce products also index their price, SKU, and product categories. Custom taxonomy terms aren’t pulled in on their own. To add them, use the mxchat_before_process_post filter: it passes the WP_Post object and the bot ID before indexing, so you append your terms (for example the output of wp_get_post_terms()) to the post content and return the post. The filter runs when you index through Knowledge → Import WordPress Content; see the developer hooks & filters docs for a full code example. Available in MxChat core (the free plugin).

What can I upload to train the chatbot?

The Knowledge screen has seven import methods: WordPress Content (posts, pages, WooCommerce products and any public custom post type), Sitemap Import, Direct URL, Direct Content for pasted text and manual Q&A, PDF Import from a URL, PDF Upload from your computer, and YouTube. PDF is the only file type you can upload — there is no Word (.docx) or plain-text importer, so paste that text through Direct Content or save the document as a PDF first (see importing a Word document). Imports are unlimited, and auto-sync can be turned on per content type so later edits propagate without a manual re-import. Available in MxChat core (the free plugin).

Customization & themes

How do I change the color of the default chat icon instead of uploading my own?

The launcher is two separately‐colored layers — the round button and the icon glyph sitting inside it — and they have their own settings. With the Theme Customizer add‐on both are color pickers in the Chatbot Colors card at MxChat → Theme Settings → Color Settings: Floating Widget Background for the circle (default #212121) and Chatbot Icon Color for the glyph (default #ffffff). There is a picker for the icon itself, so you do not have to replace the image just to recolor it. Without the add‐on, core writes both colors as inline style attributes, so rules added under Appearance → Customize → Additional CSS need !important to win: .floating-chatbot-button { background-color: #162C6B !important; } for the circle and .floating-chatbot-button svg { fill: #162C6B !important; } for the glyph. One catch worth knowing before you go looking: if you have uploaded a launcher image under Custom Icons, neither the picker nor the fill rule will recolor it — the widget renders your upload as a plain <img>, and nothing can repaint a flat image, so swap in a recolored file instead. Available in MxChat core; the Theme Customizer add‐on extends it with the Floating Widget Background and Chatbot Icon Color pickers.

How long can the chatbot’s welcome message be — is there a character limit?

There is no limit. Introductory Message and Chat Teaser Pop-up (both under MxChat → Settings → Chatbot → Display) are plain textareas with no maximum length, nothing caps them on save, and nothing truncates them when they render — so length is a layout question, not a limit. The welcome message appears as an ordinary bot bubble capped at 85% of the widget width (95% on screens under 550px), so it wraps rather than clipping, but a long one pushes your Quick Questions and the visitor’s first reply below the fold. The teaser pop-up is the tighter of the two: it is fixed at 325px wide beside the launcher and simply grows taller as you add text, so keep that one to a line or two. The welcome message also accepts HTML, so two short lines split with a <br> usually reads better than one long paragraph. Available in MxChat core (the free plugin).

Do I have to keep the “AI Agent” label in the chat header? How do I remove or rename it?

No — and it is a different field from the window title. Clear AI Agent Text under MxChat → Settings → Chatbot → Display (the Text & Labels card) and the badge stops rendering altogether, because the widget only draws it when that field is non-empty; type something else there to rename it instead. The Top Bar Title field directly above controls the header title, which is separate text, so blanking that one leaves the badge exactly where it was. There is no Title Bar section under Theme Settings to look in: the add-on owns the badge’s colours (Color Settings → Mode Indicator Background / Font Color) and a Title Bar Icon (PNG) field under Custom Icons, but the wording itself is core. Available in MxChat core; the Theme Customizer add-on extends it with colour control over the badge and a title-bar icon.

What is the “AI Tools” tab under Actions, and how is it different from Trigger Phrases?

AI Tools is MxChat’s function-calling mode: instead of matching a visitor’s wording against phrases you wrote, the model decides for itself when to run one of the capabilities you have ticked. You will find it at MxChat → Actions → AI Tools, listing core capabilities — web search, image generation, PDF search, live-agent handoff, email capture — plus whatever your active add-ons contribute, grouped by add-on. There is no master on/off switch: ticking a tool is the switch, an empty list means the function-calling loop never runs at all, and the screen autosaves on every change rather than waiting for a Save button. It needs a tool-capable chat model — if yours is not, the page names your current model and warns that tools will not fire until you pick a different one under MxChat → Settings → AI Models. Anything that spends money, changes a cart, exposes customer data, hands the conversation to a human or starts a data-collection flow stays off by default even then, each tool takes an optional “when to use” hint for when the model reaches for it at the wrong moment, and Trigger Phrases keeps working alongside it if you prefer explicit phrase matching for some actions. Available in MxChat core (the free plugin).

Can I build my own AI tool (custom function call) for the chatbot?

Yes, in PHP — there is no admin screen for it, but the hooks add-ons use for exactly this ship in the free core. mxchat_function_calling_extra_tools adds your tool to the list, keyed by the name of the callback you want run, carrying a label, an fc_description telling the model when to use it, an optional fc_parameters JSON-schema array for its arguments, and emits_ui if the callback returns HTML; omit group and it files under “Add-ons”. Then hook a filter named after that callback with six accepted arguments — add_filter('my_tool', 'my_handler', 10, 6) — and your handler receives false, the model’s query, the user ID, the session ID, a synthetic intent object, and the model’s full argument array. Your tool then appears under MxChat → Actions → AI Tools and has to be ticked there before it can fire, exactly like the built-in ones, and any HTML it returns is rendered as a real bot message rather than handed back to the model to paraphrase. The same callback can also back a Trigger Phrases intent through the mxchat_available_callbacks filter if you want phrase matching as well as, or instead of, the model deciding. Available in MxChat core (the free plugin).

I uploaded a 48×48 custom chatbot icon but it still looks small inside the floating button — how do I make it fill the bubble?

That gap is the design, not a failed upload. The floating launcher is a 60 px circle and MxChat renders your icon inside it at a hard-coded 48×48 px with object-fit: contain, written as an inline style on the <img> — so roughly 6 px of button shows on every side, and uploading a larger file cannot change that (anything bigger is scaled back down to 48). If it looks smaller than 48 px still, the cause is almost always transparent padding baked into the PNG: contain fits the whole canvas including the empty margin, so crop the file tight to the glyph before uploading. To change the ratio yourself, add .floating-chatbot-button img { width: 100% !important; height: 100% !important; } in Appearance → Customize → Additional CSS — the !important is required because MxChat’s 48 px is inline and would otherwise win. With the Theme Customizer add-on you can instead raise Launcher Button Size under MxChat → Theme Settings → Sizing (40–120 px), which scales the icon to 80% of the diameter you pick — note that this CSS is emitted only when the size differs from the default 60, so leaving the slider at 60 changes nothing. Available in MxChat core; the Theme Customizer add-on extends it with a Launcher Button Size slider.

Can I make the chat toolbar icons bigger, or center them instead of left-aligned?

Both, but with CSS — there is no setting for either, and both are a one-rule override. Each button is .mxchat-chatbot .toolbar-btn at a hard 16×16 px, and its SVG is set to width: 100%; height: 100%, so resizing the button resizes the icon with it and you never touch the SVG. The row is .mxchat-chatbot .chat-toolbardisplay: flex with gap: 10px and no justify-content at all, which is the only reason the icons sit left. Add both rules in Appearance → Customize → Additional CSS: .mxchat-chatbot .toolbar-btn { width: 22px !important; height: 22px !important; } .mxchat-chatbot .chat-toolbar { justify-content: center !important; }. The toolbar is hidden until you switch it on — see where the Toolbar settings live. Available in MxChat core (the free plugin); the Theme Customizer add-on gives you a built-in editor for the same CSS.

Does the MxChat widget run inside an iframe or a shadow DOM — will my translation plugin, CSS or analytics reach it?

Neither, and that is the answer that decides whether a translation plugin can touch it. MxChat prints the whole widget into your page’s own HTML on wp_footer as ordinary markup in the main document — no iframe wrapper, no shadow root — so anything that works on the rest of the page works on the chat: your theme’s stylesheet or a rule in Appearance → Customize → Additional CSS styles it, and a DOM-level translator such as GTranslate, Weglot or TranslatePress can see and translate the visible text. The interface strings you set under MxChat → Chatbot — top bar title, introductory message, input placeholder, chat teaser — are printed server-side into that HTML rather than assembled later in JavaScript, so they are already in the markup those tools scan; MxChat also ships a wpml-config.xml registering them for WPML and Polylang String Translation. The only iframe MxChat creates on the front end is the YouTube player, and only after a visitor clicks a video card. Available in MxChat core (the free plugin).

Can the chat window open automatically when the page loads, instead of starting as a closed bubble?

No — there is no setting for it. The floating panel is printed hidden on every page load and only opens when the visitor clicks the launcher, so a site-wide “start open” option exists neither in core nor in any add-on. Three things get you close. Embed the chatbot inline with [mxchat_chatbot floating="no"], which renders an always-visible chat box in the content instead of a bubble — the usual answer for a dedicated “Ask us” page. Fill in Chat Teaser Pop-up under MxChat → Settings → Chatbot → Display → Text & Labels to show a small message bubble beside the closed launcher; the visitor can dismiss it and it returns after 24 hours. Or open the widget from your own button using the Trigger add-on’s data-mxchat-open attribute — see opening the chatbot from a custom link and the shortcode options. Available in MxChat core (the free plugin); the Trigger add-on adds the data-attribute openers.

How do I make the chat window truly full-screen (edge to edge) on a phone?

With CSS — there is no setting for it, and the panel is not quite full-screen out of the box. Below 550 px core insets it by 8 px on all four sides: width: calc(100vw - 16px), height: calc(100dvh - 16px), top: auto; bottom: 8px; left: 8px; right: 8px and a 16 px corner radius. The part that traps people is the max-height: calc(100dvh - 16px) on that same rule: set bottom: 0 or a taller height and the panel still stops 16 px short, leaving a strip of page visible under it, because the cap is never lifted. Override all of it together in Appearance → Customize → Additional CSS@media (max-width: 550px) { .floating-chatbot { inset: 0 !important; width: 100vw !important; height: 100dvh !important; max-height: 100dvh !important; border-radius: 0 !important; } .floating-chatbot .mxchat-chatbot-wrapper, .mxchat-chatbot-wrapper .chatbot-top-bar { border-radius: 0 !important; } } — and note the breakpoint is 550 px, not 500 px, so a rule written at 500 will miss the larger phones. Available in MxChat core (the free plugin).

Can I change the chat widget’s colors without the Theme Customizer add-on?

Only with CSS — MxChat core stores the widget’s colors but ships no color pickers for them, so a free install always renders the defaults (dark #212121 bot bubbles with white text, white user bubbles, dark top bar). The screen that edits them by hand is the add-on’s MxChat → Theme Settings → Color Settings tab. To restyle without it, add rules under Appearance → Customize → Additional CSS targeting .bot-message, .user-message, .chatbot-top-bar and .mxchat-chatbot — and mark them !important, because core writes those colors as inline style attributes (PHP for the widget shell, JavaScript for each new message bubble) and inline styles outrank stylesheet rules. The exception is when a generated AI theme is active or a saved theme is assigned to that bot: MxChat skips the inline colors entirely in that case, and ordinary CSS wins without !important. Available in MxChat core; the Theme Customizer add-on extends it with the Color Settings pickers and the AI Theme Generator.

The chat widget is too big on mobile — how do I make it smaller?

The floating launcher button has its own mobile size: open MxChat → Theme Settings → Sizing and use Launcher Button Size (Mobile), which accepts 40–120 px (default 60) and applies at 500 px wide and below; the icon inside scales with it automatically. The open chat panel is a different story — it is meant to fill the screen on a phone, so the Chat Window Width and Height sliders on that same screen are labelled (Desktop) and only take effect from 501 px up. That is why a phone-sized panel looks unchanged after you move them: nothing is broken and no setting is missing, the mobile layout is deliberately near-full-screen — core insets it by 8 px on every side below 550 px, which is also why it stops short of the screen edges (how to remove that inset). If you genuinely need a smaller panel on phones too, that is a CSS job — add your own @media (max-width: 550px) rule targeting .mxchat-chatbot-wrapper (550 px is the breakpoint core itself uses for the panel; a rule written at 500 misses the larger phones) under Appearance → Customize → Additional CSS. Available in MxChat core; the Theme Customizer add-on extends it with the Sizing screen, including the separate mobile launcher slider.

What is the menu of clickable buttons shown when the chat opens (for example “MxChat Price?”), and is it a Pro feature?

Those tappable buttons above the chat input are the Quick Questions feature (called “popular questions” internally). You set them at MxChat → Settings → Quick Questions: fill in Quick Question 1–3 and add more under Additional Quick Questions — each one becomes a button that sends its text to the bot when clicked. It is part of MxChat core, so you do not need Pro to use it. What a given button does next (show pricing, offer a discount, and so on) depends on that site’s own knowledge base and Actions, not on the Quick Questions feature itself. Available in MxChat core (the free plugin).

Is there a developer filter to change the chatbot’s answers or system prompt in code?

For no-code control, use MxChat → Settings → Chatbot tab → AI Instructions (Behavior) to add plain-language rules (see the topic-restriction and response-length entries below). To shape answers programmatically, MxChat core exposes the mxchat_system_instructions filter — it runs on the system prompt before every reply and receives three arguments: the instructions text, the bot ID, and the session ID (applied in class-mxchat-integrator.php). Use it to inject live data at runtime, such as business hours, stock levels, or per-user context. Two conveniences are built in without writing a filter: any registered WordPress shortcode you place in the AI Instructions field is expanded before the prompt is sent, and the {visitor_name} placeholder is replaced with the name captured in the pre-chat form. Full code examples are in the developer hooks & filters docs. Available in MxChat core (the free plugin).

Where is the CSS editor in the Theme Customizer add-on, and why can’t I see the CSS code viewer?

The Theme Customizer does include a built-in CSS viewer and editor, but it lives inside the AI Theme Generator and only appears after you generate (or load a saved) theme — before a theme exists there’s no CSS to show, which is usually why it looks missing. Open MxChat → Theme Settings → AI Theme Generator, describe the look you want and click Generate; once a theme is generated, View CSS reveals the generated CSS (with a Copy button) and Edit CSS opens an editor where you can hand-tune it and save (Ctrl/Cmd+S). If you’d rather write your own CSS without generating a theme at all, add it to your WordPress theme’s Appearance → Customize → Additional CSS using MxChat’s widget selectors — see resizing or restyling the chat widget. Requires the Theme Customizer add-on.

Can I set a maximum input length or character limit on the chat box?

Yes. Set Max Input Length (characters) under MxChat → Settings → Chatbot → Display — enter any number and the chat box enforces it as a real maxlength on the input, so a visitor cannot type or paste past the cap, and a live character counter appears under the box showing how much room is left. Leave it at 0, the default, for no limit. This is separate from the per-visitor message limit under Rate Limits, which caps how many messages someone can send rather than how long each one is (see how rate limits are counted). Available in MxChat core (the free plugin).

How do I add or apply a theme to my chatbot?

After activating the Theme Customizer add-on (Pro), open MxChat → Theme Settings. The default AI Theme Generator tab lets you describe the look you want in plain language, generate a full color theme, save it, and apply it to your chatbot — and if you run Multi-Bot you can assign different saved themes to individual bots. Prefer to set things by hand? The Color Settings, Position Settings, and Custom Icons tabs on the same screen control roughly 20 individual colors (message bubbles, top bar, input, icons, links), the widget’s on-screen position, and your launcher and title-bar PNG icons. Themes are built and applied inside this screen — there are no theme files to download or upload. Requires the Theme Customizer add-on.

How do I change or translate the chat widget’s interface text (welcome message, placeholder, buttons) into my language, or into several languages on a WPML / Polylang site?

The bot’s replies already match the visitor’s language automatically, but the widget’s fixed text comes from settings you type in — so set each one in your language under MxChat → Chatbot: Top Bar Title, Introductory Message (the “Hello! How can I assist you today?” greeting), Input Placeholder, AI Agent Text, Chat Teaser Pop-up, the Satisfaction Rating Prompt, the email/name gate fields (Email Form Content, Submit Button Text, Name Field Placeholder), and the Rate Limit Message. Each field stores one value, so there are no separate per-language fields — that is why the settings only let you enter a single language. On a multilingual site (WPML, Polylang, TranslatePress) you have two paths: translate the plugin’s built-in strings with a .mo language pack (see translating MxChat), which WordPress loads per active locale as your multilingual plugin switches language; and for any field you have overwritten with your own text, register that value in your multilingual plugin’s string-translation tool — MxChat ships a wpml-config.xml, so WPML and Polylang pick up the widget’s 14 visitor-facing strings automatically and list them under String Translation in the admin_texts_mxchat_options domain (other multilingual plugins still need them registered by hand). The widget is plain markup in your page rather than an iframe or shadow DOM, so DOM-level translators like GTranslate can reach that text as well — see whether the widget runs in an iframe. Available in MxChat core (the free plugin).

Can I customize the chatbot’s satisfaction rating prompt (the 👍/👎 “Was this helpful?” survey)?

Yes. Go to MxChat → Settings → Chatbot → Behavior and switch on Satisfaction Rating Prompt — it shows a 👍/👎 prompt after the conversation has had a couple of bot replies and the visitor has gone idle (it’s off by default, and turning it off hides the prompt site-wide). With it on, the “Customize the prompt (optional)” panel lets you set the Idle Timeout (5–600 seconds of inactivity before it appears, default 60), the Prompt Question (default “Was this helpful?”), the Thank-You Message, the Feedback Placeholder, and the Saved Confirmation text — leave any field blank to keep its default. Ratings and any written feedback are stored per session and rolled up in the Satisfaction card under MxChat → Transcripts. Available in MxChat core (the free plugin).

How do I hide or disable the “Download Transcript” button in the chat window?

As of v3.2.9 there is a built-in toggle. Go to MxChat → Settings → Chatbot → Display, and in the Visibility card uncheck Show Download Transcript Button — it controls the “Download Transcript” item in the chat window menu and is on by default. Save, and the button disappears for visitors. On older versions that lack the toggle, the same option (print_button_enabled) can be forced off in code with a filter on option_mxchat_options. Available in MxChat core (the free plugin).

Does MxChat support Hebrew, Arabic, or other right-to-left (RTL) languages?

Yes. The chatbot automatically replies in whatever language a visitor writes in — the AI model translates on the fly, with nothing to configure. For right-to-left scripts like Hebrew and Arabic, every chat bubble is rendered with automatic text-direction detection (dir="auto"), so the text lays out right-to-left correctly, and the widget ships RTL-aware styling for its header menu. Just write to the bot in Hebrew or Arabic and it answers in the same language, properly aligned — there is no language or direction setting to flip. Available in MxChat core (the free plugin).

Where are the Toolbar settings? I can’t find where to turn on the PDF or Word upload buttons.

Open MxChat → Settings, then in the settings sidebar expand Integrations and click Toolbar — the screen is titled “Toolbar Settings.” The chat toolbar is hidden by default, so enable it there first; that adds a row of buttons below the chat input where you can then toggle the PDF upload and Word document upload buttons on or off. If a guide or the chatbot pointed you to a “Toolbar & Components” tab, that’s just the old name for this same screen (the Live Agent, Brave Search, and Perplexity buttons live here too). Available in MxChat core (the free plugin).

How do I hide (or force-show) the chatbot on one specific page or post?

Edit the page or post and find the MxChat Settings box in the editor sidebar. Under Chatbot Visibility, choose Hide Chatbot on this page to switch it off there, Show Chatbot on this page to force it on even when the site-wide auto-show is off, or leave it on Use Global Setting to follow your default. Save or update the page for the change to take effect — the setting is per-page and doesn’t change the chatbot anywhere else. Available in MxChat core (the free plugin).

How do I stop the chatbot from asking visitors for their name and email before they can chat?

MxChat can gate the conversation behind an email-capture form, but it’s a single toggle you can switch off. Go to MxChat → Settings → Chatbot → Lead Capture and turn off “Require Email to Chat” — visitors can then start chatting immediately without entering a name or email. The same setting controls the prompt wording shown when the gate is left on. Available in MxChat core (the free plugin).

Are there size limits for the custom chatbot icon or title icon?

There’s no hard size cap inside MxChat — the two icon fields under MxChat → Theme Settings → Custom Icons just store an image URL, so any image WordPress’s Media Library accepts (limited by your host’s PHP upload_max_filesize, typically 2–64 MB) will work. The recommended uploads are a 48×48 px PNG for the floating launcher (the custom_icon field) and a 24×24 px PNG for the header badge (the title_icon field). The widget renders both at those exact pixel dimensions with object-fit: contain, so larger images scale down without distortion — and because the launcher’s 48 px is applied as an inline style, a bigger upload cannot make it render bigger; 48-inside-a-60 px-button is the intended ratio (why your icon looks small, and how to change it). Uploading a multi‐MB photo just to display it at 48 px wastes bandwidth on every page load, so use a transparent PNG cropped tight to the recommended size for the sharpest result. Requires the Theme Customizer add-on.

How do I resize or restyle the chat widget? What CSS selectors and default dimensions does it use?

Resizing no longer needs CSS. MxChat → Theme Settings → Sizing gives you four sliders that autosave: Launcher Button Size and Launcher Button Size (Mobile) (both 40–120 px, default 60), Chat Window Width (Desktop) (300–600 px, default 375) and Chat Window Height (Desktop) (400–900 px, default 625) — the two window sliders apply from 501 px up, because the panel is full-width on phones by design. For restyling, or for resizing without the add-on, every visual layer has a stable class hook you can override from Appearance → Customize → Additional CSS: .mxchat-chatbot-wrapper (outer floating shell), .mxchat-chatbot (main container), .chat-container (flex interior), .chat-box (scrollable message area), .bot-message / .user-message / .agent-message (bubbles), .chatbot-top-bar, and .chatbot-footer. Defaults in chat-style.css: the floating widget is 375×625 px (capped to 100vh − 50px on short screens); the embedded shortcode [mxchat_chatbot floating="no"] renders at a fixed 500 px height, and the Height slider is honored there too. Available in MxChat core; the Theme Customizer add-on extends it with the Sizing sliders, so no CSS is needed just to change dimensions.

How do I shorten the bot’s responses or set a lower max-tokens?

There is no max-tokens slider in the admin UI; the chat-reply path hard-caps each response at 1000 output tokens server-side, and the model can return fewer. This 1000-token cap is global and isn’t adjustable per bot, even with the Multi-Bot add-on. The supported way to make answers shorter is to add a behavior rule under MxChat → Settings → AI Instructions (Behavior) — for example, Answer in 1–2 sentences. or Keep responses under 60 words. That works across every provider without code changes. Available in MxChat core (the free plugin).

Does MxChat have a REST API I can use from external tools?

Yes — MxChat exposes a bearer-token-authenticated REST API at /wp-json/mxchat/v1/ with three endpoints: GET /health for a connectivity check, GET /transcripts (and DELETE) for reading or pruning chat history with filters for date range, role, session, and whether the answer used RAG context, and POST /knowledge for pushing content into the knowledge base from external tools like n8n, Zapier, Make, custom dashboards, or your own agents. The API is disabled by default — generate a token from MxChat → API Access, then send it on each request as Authorization: Bearer <token>. This is separate from the chat widget itself, which still uses WordPress’s admin-ajax.php path internally. Those three endpoints are the whole of the core API: there is no core endpoint that returns WooCommerce product or order data, and none that reads back indexed knowledge. If that is what you need, the MCP Server add-on covers it — it reuses the same token and adds live product, order and customer lookups plus knowledge listing, exposed as Model Context Protocol tools an AI agent can call directly. Available in MxChat core (the free plugin); the MCP Server add-on extends it with an agent-facing Model Context Protocol endpoint.

Can I stop the chatbot from answering certain topics (legal, medical, etc.) and have it return a link instead?

Yes — but it is a system-prompt instruction rather than an enforced filter, and the difference matters if the topic is high-stakes. Go to MxChat → Settings → Chatbot → Behavior and add a directive to AI Instructions (Behavior) such as Do not provide legal advice. If asked about legal matters, respond only with a link to https://example.com/legal-disclaimer. Whatever you write there is sent as part of the system message on every request, so the model follows it the way it follows any system instruction — dependable in practice, with nothing in the product that enforces it. There is no deterministic alternative: Actions map trigger phrases to a fixed set of built-in callbacks and have no “always reply with this exact text” option, and the Moderation add-on bans individual visitors by email or IP rather than restricting subjects. For safety-critical signposting — medical, crisis or emergency — treat the instruction as one layer and also put the number or link somewhere the model cannot omit it, such as the Quick Questions shown above the chat input (Settings → Chatbot → Quick Questions). Available in MxChat core (the free plugin).

How do I hide or unpublish the chatbot? It went live before I tested it.

Three layers of visibility control, broadest to narrowest. Site-wide: MxChat → Settings → Chatbot tab → toggle off Auto-Display Chatbot; the widget disappears from every page, and you can still embed it manually with the [mxchat_chatbot] shortcode when you’re ready to test. Per post type: under the same Chatbot tab, Post Type Visibility lets you switch to Include or Exclude mode and pick which post types (pages, products, posts, custom) get the widget. Per page: open the post in the editor, find the MxChat Visibility meta box in the sidebar, and choose Hide. Available in MxChat core (the free plugin).

Does MxChat offer a white-label option? Can I remove the MxChat branding from the chatbot?

The chat widget is effectively white-label out of the box — visitors never see the MxChat name. You set your own bot name, avatar, welcome message, theme colors, and (optional) custom CSS under MxChat → Chatbot, and that’s what visitors see. There is no “Powered by MxChat” footer to remove, no MxChat logo embedded in the widget, and no required outbound link. What MxChat does not offer is reseller white-labelling of the plugin itself — the WordPress admin pages still read “MxChat”, and the Pro / Agency / Agency Plus licenses are for using the plugin on multiple sites you control, not for rebranding and selling it as your own product. If full plugin-level white-label or reseller licensing is what you need, that’s a conversation for support, not a built-in feature. Available in MxChat core (the free plugin).

Is MxChat translated into other languages? How do I translate it into Polish, Spanish, etc., or make a .mo file from the .pot?

The chatbot itself already replies in the visitor’s language automatically — the underlying AI model translates on the fly with no configuration. The plugin’s admin UI is translation-ready (text domain mxchat, .pot file under /languages/) and registered on translate.wordpress.org, so any locale the community has translated will load automatically once your WordPress site language is set under Settings → General. To contribute a translation (Polish, Spanish, or anything else), sign in at translate.wordpress.org and submit strings; once approved, they ship as a language pack to every MxChat install. For a private translation, compile your own .mo from the bundled mxchat.pot using the free Loco Translate plugin (edit and compile right in the WordPress dashboard) or the free desktop app Poedit, then save it as mxchat-<locale>.mo (for example mxchat-uk.mo or mxchat-pl_PL.mo) in /wp-content/languages/plugins/ — WordPress picks it up automatically for that locale. Available in MxChat core (the free plugin).

What’s the difference between AI Theme Customizer and AI Theme Generator?

They’re the same product. “AI Theme Customizer” is the marketing name (the page at mxchat.ai/ai-theme-customizer and the WordPress plugin slug); “AI Theme Generator” is the in-admin UI label you see at MxChat → AI Theme Generator after activating the plugin. There’s no separate download — a Pro license unlocks the Theme Customizer plugin, and chatbot themes are created inside the AI Theme Generator screen rather than downloaded as files. Requires the Theme Customizer add-on.

Add-ons & integrations

Where is the Migration Tool? I can’t find it in WordPress or in the add-ons list

It is a separate plugin rather than a screen inside core, so nothing appears anywhere until you install it — it is not a tab under Knowledge or Settings, and MxChat → Pro & Extensions only shows its catalogue card. Install the ZIP your Pro licence unlocks the same way as any other add-on, via Plugins → Add New → Upload Plugin (see where add-on ZIPs live); if the Migration Tool is not listed on your Downloads page, email maxwell@mxchat.ai with your order number rather than hunting for it in the add-ons grid. Once it is active it registers its own submenu at MxChat → Migration Tool, headed Database Migration, and that is the only place it lives. From there you can move the knowledge base between the WordPress database and Pinecone in either direction, re-embed your Actions for a new embedding model (action similarity thresholds are adjusted for you), and export the knowledge base as Text or JSON — a JSON backup being the one format you can import again. Its own pages on this site are the Migration Tool page and the Migration Tool docs. Requires the Migration Tool add-on.

Can the chatbot open a support ticket by email from inside the chat?

Yes — that is what a Forms add-on form does, and it is how the widget on this page works. Build a form under MxChat → Form Collection, fill in its Notification Email and optional Email Subject Line, and give it a trigger phrase such as “support ticket” so the bot offers it mid-conversation instead of sending people to a contact page. On submit, MxChat emails that address every field under its own label, sets Reply-To to the email address the visitor typed, and attaches the whole conversation as a .txt transcript — so you can answer straight from your inbox with the context already in front of you; leave the field blank and it falls back to your WordPress admin email. Each submission is also stored under Form Collection → Submissions with CSV export, and a multi-step Wizard can email a completion summary the same way. If you want tickets landing in a real helpdesk rather than an inbox, point the form’s Webhook URL at Zapier, Make or n8n instead. Requires the Forms add-on.

Do product tags affect which product cards the chatbot shows?

Not on the card-lookup path. Show Product Card and Add to Cart identify a product from a catalog snippet that carries each product’s ID, name, SKU, price and categories — tags are not in it — and when that stage comes up empty the fallback scores candidates on name and SKU only, so a tag can never steer either action. Filtered Product Search does read a tag as a real filter, but not the way it reads categories: your store’s actual category terms are handed to the extractor as a checked list, while no tag list is ever sent, so the model infers the tag from the shopper’s own wording — and if that guess doesn’t resolve to a real tag on your store, the filter is dropped silently and the search runs as though no tag had been asked for. Tags do influence the written answer, because they are part of the indexed product text. Practical upshot: name your tags the way customers actually say them, and don’t expect tagging a product to make it easier for the bot to pull up its card. Requires the WooCommerce add-on.

Where does the Form Collection CSV export go — can it save to Google Drive?

It goes to your browser, and no. Export CSV on MxChat → Form Collection → Submissions streams the file straight down as a download, so it lands wherever your browser puts downloads; nothing is written to disk on your server, no copy is kept, and there is no Google Drive, Dropbox or other cloud-storage integration to point it at. If what you want is submissions arriving somewhere automatically rather than exported by hand, use the per-form Webhook URL instead and let Zapier, Make or n8n write each one into Drive, Google Sheets or your CRM as it comes in. Requires the Forms add-on.

When a chat is handed to Slack, does the agent see the conversation so far?

Yes — the New Live Agent Request that lands in Slack carries the last five messages of the conversation as a quoted Recent Conversation block, followed by the visitor’s current message, so your agent picks the thread up mid-flow instead of asking them to start again. Above that it shows the session ID, the WordPress user ID, and the visitor’s name and email if either was captured. It is the last five turns and not the whole transcript, so for the full conversation open MxChat → Transcripts and search for the session ID printed in the Slack message. Replies typed in the Slack channel, or in the thread when you use a shared handoff channel, go straight back to the visitor. Available in MxChat core (the free plugin).

The chatbot recommends products that aren’t in my store, or links that 404 — can I force it to use only real WooCommerce products?

The product cards already are forced, and they are the part you can trust: candidates come straight out of wc_get_products() filtered to published, purchasable, in-stock items, and every card is re-resolved through wc_get_product() before it renders and dropped if it doesn’t resolve — an unpublished or non-existent product cannot get a card. What has no validation step is prose. The sentence introducing the cards is its own model call, given product names only and told not to list products or write links, so an invented name or a 404 URL is almost always coming from an ordinary chat answer rather than from the product tools — the model filling a gap when nothing cleared the Similarity Threshold, which is the setting to lower first. One behaviour worth knowing before you call it a hallucination: when the search finds fewer than four matches, MxChat pads the set with featured then best-selling products, so an off-topic card is padding, and those products are real. Requires the WooCommerce add-on; the Similarity Threshold that governs the written answer is in MxChat core.

Can MxChat hand off to a live agent automatically when it can’t answer, instead of waiting for a trigger phrase?

Yes, but it’s the AI Tools path rather than Trigger Phrases. Under MxChat → Actions → AI Tools, switch on Hand Off to Live Agent (Slack) or Hand Off to Live Agent (Telegram) — both ship off, because every AI Tool stays off until you enable it. Once one is on the model decides for itself when to call it; there is no confidence score or “no knowledge-base match” rule anywhere in the plugin, so what actually decides is the description the model reads. From MxChat core 3.2.19 both handoff tools arrive with that note prefilled — use this when the visitor has asked something you cannot answer from the knowledge base, or has asked twice about the same unresolved problem — so switching the tool on is now enough on its own. Reword or clear it in the tool’s “When should the assistant use this?” box, which MxChat appends to the model-facing description as “When to use: …”. Available in MxChat core (the free plugin).

Can I remove or restyle the size/colour dropdowns that appear on WooCommerce product cards in chat?

Both, from WooCommerce add-on 1.7.8 onward. To remove them, turn off Show Variation Dropdowns under Product Display in the add-on’s settings; because adding to cart requires choosing options, a variable product with its dropdowns hidden shows a View options button through to the product page instead of an Add to Cart button that couldn’t work. Simple products are unaffected. Don’t reach for display:none instead — the selections are read when resolving which variation to add, so the button stays visible and the add silently fails. For styling, the markup is stable: .mxchat-product-card wraps .mxchat-product-image, .mxchat-product-name, .mxchat-product-price and .mxchat-variation-selectors (one .mxchat-variation-select per attribute); for anything beyond CSS, the mxchat_woo_product_card_html filter hands your theme or plugin the finished card markup and the product before the card reaches the chat window. Requires the WooCommerce add-on (1.7.8 or newer for the toggle and the filter).

Can the chatbot tell a customer whether we ship to their country?

Yes, from WooCommerce add-on 1.7.8 onward — switch on Shipping Destination Check under MxChat → Actions → AI Tools and the bot answers from your real WooCommerce shipping zones instead of guessing. It says whether you deliver to that destination and which shipping options exist, but never quotes a price, because postage depends on the cart and is worked out at checkout. Zones that only offer local pickup are described as pickup rather than delivery; if you restrict a country by postcode and the shopper hasn’t given theirs, it asks for it instead of guessing either way; and if you haven’t set up shipping zones at all it says so rather than telling shoppers you don’t ship to them. Before 1.7.8 nothing read your zones, so the bot would often reassure a shopper that postage could be checked at checkout for a country you don’t serve — if you still see that, update the add-on and enable the tool. Requires the WooCommerce add-on (1.7.8 or newer).

What does the AI Search overview answer from — will it show my WooCommerce products?

The AI Overview above your search results is generated from your MxChat knowledge base, never from live WooCommerce data: it does not read prices, stock or inventory at search time. Products appear in it only if you have indexed them — Knowledge → WordPress Content, selecting your Products post type — and then only as the text that was indexed, so the overview is as current as your last import unless auto-sync is on. From AI Search 1.0.3 it reads whichever knowledge base your site actually uses, Pinecone included; on 1.0.2 and earlier it read only the WordPress-database copy, so a Pinecone site showed no overview at all and warned you nowhere. The same release adds an Include external source links toggle, for listing only sources from your own site, and an optional footer note under the overview. Your theme’s own product results still render underneath either way. Requires the AI Search add-on (1.0.3 or newer if your knowledge base lives in Pinecone).

Can Claude or ChatGPT connect to my site and read my MxChat and WooCommerce data?

Yes — the MCP Server add-on exposes your WordPress install as a Model Context Protocol endpoint at /wp-json/mxchat-mcp/v1/mcp, so Claude, Claude Code, ChatGPT, or any MCP-aware agent can call twelve tools against the live site. Seven are chatbot operations (bot_info, list_transcripts, search_transcripts, get_session, list_knowledge, add_knowledge, delete_session) and five are WooCommerce (woo.list_products, woo.get_product, woo.list_orders, woo.get_order, woo.search_customers) — get_product returns price, sale price, stock status and quantity, SKU, attributes, gallery image URLs and variation IDs, read live from WooCommerce rather than from a synced copy. It reuses the bearer token you generated under MxChat → API Access instead of a second secret, and the access role defaults to read-only, so write tools such as add_knowledge and delete_session stay blocked until you switch the role to Admin on the MxChat → MCP Server screen. Three limits to design around: the WooCommerce tools need WooCommerce itself active on the site; custom post meta and ACF fields are not part of the product payload, so use WooCommerce’s own /wp-json/wc/v3/products when you need those; and it is pull-only — an agent fetches on demand, and nothing pushes a notification when a product changes. Requires the MCP Server add-on.

A customer types a product’s SKU in chat and the bot can’t find the product — why?

The Show Product Card and Add to Cart actions identify a product by handing the AI a catalog snippet built from your 100 most recently published products. Each line carries that product’s ID, name, price, categories and its SKU — but only when the product actually has a SKU set, and if the one you are searching for belongs to an older product it is never put in front of the model at all. When the model can’t name an ID, the lookup falls back to a WordPress search on its own suggested terms, and that search reads product titles, excerpts and descriptions — not the _sku field, then scores each candidate against the title alone, so a bare number has almost nothing to match on. In practice: have customers type the SKU alongside a word or two of the product name, and put the SKU into the product title or short description if SKU-only lookups matter to your store. Also check the action is switched on under MxChat → Actions — it is listed there as Show Product Card, not “Product Search”. Requires the WooCommerce add-on.

AI Filtered Product Search isn’t filtering by category — how do I make it match the right one?

Two things gate it. First, saving the Filtered Product Search settings is not enough: you also have to switch the Filtered Product Search action on under MxChat → Actions, which is where the feature is actually turned on. Second, the extractor is handed your store’s real categories — slug, name, and parent for child terms — and told to use only those, matching on meaning even when the shopper writes in another language. That list is skipped in three cases, and then category filtering falls back to guesswork: the store has no categories, every category is empty (categories with no products are never offered), or there are more than 60 category terms, where a truncated list would do more harm than none. There is no term-to-category mapping table to fill in — the category names themselves are the lever, and the list is cached for a day but clears itself the moment you add, rename or delete a category. For a descriptor that cuts across categories, such as “vegan” or “on sale”, use a product tag instead; the same extractor reads tags as a separate filter. Requires the WooCommerce add-on.

Can a real person handle chats during business hours and let the AI take over after hours?

Yes — each handoff channel has its own Availability Schedule, set under MxChat → Settings → Integrations → Slack and, separately, → Telegram, so a day team and an evening team can keep different hours. Switch the schedule on and set a start and end time per weekday; windows that cross midnight are supported, and the times are read in your WordPress site’s timezone, not the visitor’s. Inside the window the bot can hand off; outside it, the handover is withheld from the model entirely — so the bot never offers a human nobody can reach — and anyone who asks for one anyway gets your Away Message and keeps talking to the AI. The schedule is off by default, in which case availability depends only on the Live Agent Status toggle on the same screen. Either way the visitor never leaves your website’s chat widget: the header switches to “Live Agent” when a person replies, and it’s your team that answers from Slack or Telegram (see live-agent handoff for the setup). Available in MxChat core (the free plugin).

Can the chatbot show images or play videos in the chat window?

Images yes; video, partly. The chat renders images three ways: the Image Search AI Tool returns a gallery of thumbnails (powered by Brave Search, so it needs a Brave Search API key), the Generate Image AI Tool creates one from a description using OpenAI or Google Imagen, and with the WooCommerce add-on the bot’s product cards carry the product photo, price, and an Add to Cart button — both AI Tools stay off until you switch them on under MxChat → Actions → AI Tools, and visitors can upload an image for the bot to read if you run the Image Analysis add-on. For video, MxChat does embed YouTube: when the knowledge-base entry behind an answer came in through the YouTube importer, the reply carries a click-to-load video card with a thumbnail and a “Watch on YouTube” link, and no Google iframe loads until the visitor taps play. That card is automatic with no on/off setting, so a YouTube-sourced entry that wins retrieval will attach its video even when the question was about something else. Video from any other source isn’t embedded, and generating video is a different product entirely — it happens in wp-admin, not in the chat window. Available in MxChat core; the WooCommerce add-on adds product cards with images, and the Veo Video add-on generates videos from a prompt in wp-admin.

Will the chatbot still work if I deactivate the WooCommerce add-on, and what is the mxchat_woo_get_cart_count request in admin-ajax.php?

Yes, the chatbot keeps working. The widget, the knowledge base, and the answers all live in the free MxChat core plugin, which does not depend on the WooCommerce add-on — deactivating that add-on only removes the store features: product cards, add-to-cart, and order-history lookup. The mxchat_woo_get_cart_count request is the add-on’s cart script asking WooCommerce for the current cart count to fill the cart badge in the chat toolbar; it runs on pages where the chat widget loads, and it stops once the add-on is deactivated. WordPress plugins are site-wide, so there is no per-page switch for the add-on itself — but you can control which pages show the widget at all (see hiding the chatbot on specific pages) and when its script loads (see page-speed options). Available in MxChat core; the WooCommerce add-on extends it with product cards, cart, and order lookup.

Can MxChat call my own REST API during a chat and use the response in its answer?

There’s no no-code field to point the bot at an arbitrary URL, but MxChat’s chatbot supports native function calling — AI Tools — so it can decide on its own to call a tool mid-conversation and use whatever the tool returns. To reach your own endpoint, a developer registers a custom tool on the mxchat_available_callbacks filter whose callback fetches your REST API (for example with wp_remote_get()) and returns the JSON; the function-calling loop then hands that result back to the model to answer with. Enable it under MxChat → Actions → AI Tools (it needs a tool-capable model such as OpenAI, Claude, or Gemini), then turn on your custom tool and describe in plain language when it should fire — built-in tools already cover web search, image generation, uploaded-PDF answers, and WooCommerce/Perplexity actions. This outbound direction is distinct from MxChat’s own inbound REST API, which instead lets external tools read transcripts or push content in. Available in MxChat core (the free plugin).

Can I connect MxChat to Brevo, Mailchimp, or another email-marketing tool?

There’s no native Brevo, Mailchimp, or Sendinblue connector in MxChat, but you can still get chat leads into one. The cleanest path is the Forms add-on: build a form that collects the visitor’s email, set its Webhook URL, and route the submission through Zapier, Make, or n8n into your Brevo or Mailchimp list — each submission is POSTed as JSON, so any automation tool can pick it up. You can also pull captured emails and full conversations programmatically with the REST API’s GET /wp-json/mxchat/v1/transcripts endpoint and push them wherever you like. If all you need is simple list-building and you’re open to using Loops instead, core ships a native Loops email-capture Action (see sending leads to a CRM); for webhook setup see the Forms webhook. The REST API and Loops capture are in MxChat core; routing leads to Brevo or Mailchimp uses the Forms add-on’s webhook.

How does a live agent end the chat, and can the visitor go back to the AI bot afterward without losing the conversation?

On Telegram, the agent ends the handoff by typing #close, #end, #disconnect, or #done inside the visitor’s topic — those four commands are listed at the bottom of every handoff notification MxChat posts to the topic. Any of them flips the session back to the AI: the visitor sees “Live agent session ended. You’re now chatting with the AI assistant,” the Telegram topic is closed, and the visitor keeps their existing conversation and can carry on with the bot right away. To reach a human again they just request a live agent, which opens a fresh topic. A visitor can also switch back on their own during a handoff by sending your “switch to AI” trigger phrase — that switch-to-chatbot intent is the one action still evaluated while a chat is in agent mode. Two caveats: the # commands are the agent’s to type in Telegram (a visitor typing them in the web widget does nothing), and Slack handoffs have no #close command — a Slack agent simply stops replying and the visitor returns with the switch-to-AI phrase. Turn on Enable Chat Persistence (MxChat → Chatbot) so the visitor’s conversation survives a page reload or a later return within ~24h. See live-agent handoff for how the handoff is set up. Available in MxChat core (the free plugin).

Is there a WordPress filter to turn the Slack/Telegram live-agent status on or off with code?

Before reaching for code: if what you want is set hours, MxChat now ships that built in — each channel has an Availability Schedule under MxChat → Settings → Integrations → Slack (and → Telegram), which closes the desk outside your window without a line of PHP (see business-hours handoff). For anything the schedule can’t express, there is no dedicated MxChat filter, and mxchat_get_bot_options is not the one to use — that hook belongs to the Multi-Bot add-on and only returns a per-bot options array (it fires when Multi-Bot is active and the request is for a non-default bot), so it reads a bot's config rather than setting the live-agent state. The status itself lives in the main mxchat_options array as live_agent_status ('on' / 'off'), saved on that same Integrations screen and read at handover time via get_option('mxchat_options'). Because it is a standard WordPress option, control it with the normal option APIs: persist a flip with update_option('mxchat_options', $opts), or override the value at read time by hooking WordPress’s core option_mxchat_options filter and setting $value['live_agent_status']. See live-agent handoff for how the handoff itself works. Available in MxChat core (the free plugin).

Can I show the visitor’s name and email in the Slack live-agent channel?

Yes — in MxChat core 3.2.11 and newer, when a chat is handed to Slack the channel shows the visitor’s identity at the top of the New Live Agent Request message, formatted as Name <email>, so your agent sees who they’re talking to instead of just a session ID and a guest user ID of 0. It uses whatever was captured at the start of the chat — the pre-chat name/email gate, a logged-in user, or the saved transcript; if only the name was captured you’ll see just the name, and the email is added once it’s collected. If you currently see the name but not the email, update MxChat core to 3.2.11 or newer and confirm your pre-chat capture is collecting the email. Available in MxChat core (the free plugin).

How do I create a form in MxChat?

Install the Forms add-on, then go to MxChat → Form Collection and click Create New Form. Give the form a title, click Add Field for each piece of information you want to collect (text, email, dropdown, radio, checkbox, and more), and add at least one Trigger Phrase — a trigger is required, because a form only appears when a visitor’s message matches one (you can also use Trigger After X Messages instead). Save, and the form fires in-chat on a matching message; if a form never shows up, a missing or too-strict trigger is almost always why (see why a form never appears in chat). Requires the Forms add-on.

Can a guest customer check their order status in chat without logging in?

Yes, for a specific order. The WooCommerce add-on’s order tracking verifies a guest by order number + the billing email on that order, then shows the status, items, and any tracking info right in the chat — no account login required. Browsing the full order-history list (every order a customer has placed) still requires them to be logged in, or in their active WooCommerce session. So a guest can look up “where is order #1234?” by confirming the email on that order, but can’t pull a list of all their past orders without signing in. Requires the WooCommerce add-on.

Can I build a multi-step wizard form that asks questions one at a time in chat (for example, an end-of-chat survey)?

Yes. The Forms add-on includes a Wizard builder (MxChat → Forms → Wizards) that walks a visitor through questions one step at a time inside the chat, instead of showing a single form — handy for surveys, intake/qualification flows, or an end-of-conversation evaluation. You define the steps and fields, and completed responses are saved with your other form submissions (viewable and exportable the same way). Like a regular form, a wizard launches from a trigger phrase (its intent) that you configure. Requires the Forms add-on.

How do I add more than one Slack agent to live chat, and where do I find a Slack member ID?

In MxChat → Settings → Integrations → Slack, the Slack Agent User IDs field takes one Slack member ID per line — every ID you list is automatically invited to the Slack channel when a chat is handed off, so more than one teammate can cover live chats (it is not limited to a single person). To find a member ID, in Slack click the person’s name or avatar, choose View full profile, then More → Copy member ID; it looks like U0123ABCD. Paste one ID per line, and set your Slack Bot OAuth Token in the field just below. Available in MxChat core (the free plugin).

How does MxChat create Slack channels for live chats? Can I use one shared channel, make them private, or rename them?

By default each handoff creates a brand-new Slack channel for that visitor (named chat-… from their name, email, or session ID, trimmed to Slack’s 21-character channel-name limit) and reuses it for the rest of their conversation. One shared channel is now supported: set Shared Handoff Channel under Settings → Integrations → Slack to a channel ID (starts with C) or a #channel-name, invite your bot to it first with /invite @YourBot, and every handoff becomes its own thread in that one channel instead of a new channel — agents reply inside the thread, and !endchat in a thread ends just that chat. Leave it blank to keep the per-conversation channels. Two things are still fixed and have no setting: those per-conversation channels are created public (anyone in the workspace can join) and the chat- name prefix can’t be changed, so private channels or a custom prefix would still need a code customization. Available in MxChat core (the free plugin).

What field types can I use in a MxChat form — checkbox, radio, or dropdown?

The Forms add-on’s builder (MxChat → Form Collection) offers eight field types, set per field under Field Type: Static Text, Single Line Input, Message (multi-line), Email, Phone, Dropdown (single choice), Radio buttons (single choice), and Checkboxes (multiple choice). For the three choice types you supply a list of options and the visitor picks from them right in the chat instead of typing; checkboxes allow more than one selection, and every choice is validated against your option list before it’s saved. Choice values flow through to the submission email, the submissions table, and CSV export like any other field. Any field can be marked required and can reuse its label as the placeholder. Requires the Forms add-on.

Can I connect MxChat to my Facebook Page so people can ask questions through Messenger?

No — MxChat has no Facebook Page or Messenger channel. It runs as a chat widget on your own site: natively on WordPress, or on any other site (static HTML, Shopify, React, and the like) through the Anywhere add-on. There’s no way to receive or answer Facebook Messenger conversations inside MxChat; the only handoff channels are Slack and Telegram, and those route a human agent, not Facebook. To reach people coming from Facebook, embed the widget on a page you link to from your Page, or relay messages with a third-party automation. Available in MxChat core; the Anywhere add-on extends it to non-WordPress sites.

Is there a WordPress action hook fired when a visitor submits their email in the pre-chat form?

Not from the core pre-chat email gate — when a visitor submits the name/email form, MxChat stores the value in a mxchat_email_<session_id> option and writes it to the transcript row’s user_email column, then returns success without firing a do_action. To run your own code on capture from the core gate you currently have to read that option (or the transcript row), or poll the REST endpoint GET /wp-json/mxchat/v1/transcripts. If you need a real hook, collect the email through the Forms add-on instead — it fires do_action('mxchat_forms_submitted', $submission, $form) after every successful submission, passing the labeled fields plus session metadata. The pre-chat email gate is in MxChat core (it fires no hook); the Forms add-on adds the mxchat_forms_submitted action.

How do I collect a visitor’s name and email during the conversation instead of with a pre-chat form?

Use the Forms add-on. Create a form under MxChat → Form Collection with name and email fields, then give it Trigger Phrases (e.g. “contact support,” “more info”) or set Trigger After X Messages so it appears mid-chat when the visitor shows intent — not before the chat starts. To explain the form before the inputs show, add a Static Text field as the first field. Submissions are saved under Form Collection → Submissions (with CSV export) and can email an address you choose, so the data is captured without the pre-chat gate. This is different from core’s Require Email to Chat (Settings → Chatbot → Lead Capture), which forces name and email before the chat begins. Requires the Forms add-on; the pre-chat email gate is in MxChat core.

Does MxChat integrate with HubSpot or another CRM? How do I send captured leads to my CRM?

There’s no built-in HubSpot (or other CRM) connector, but three supported paths get your lead and chat data out. (1) Use the Forms add-on with a webhook or Zapier/Make on submission to post each captured lead straight into HubSpot or any CRM. (2) Pull lead and conversation data programmatically with the REST API’s GET /transcripts endpoint. (3) For plain email-list capture, the core Loops email-capture Action adds a visitor’s email to your Loops list. The REST API and Loops capture are in MxChat core; routing form submissions to a CRM requires the Forms add-on.

Can MxChat tell which orders or sales came from the chatbot?

No — MxChat does not attribute orders or revenue to the chat. With the WooCommerce add-on the bot can look up order status, order details, and a signed-in customer’s order history, but it does not tag which orders began from a chat or from a product the bot recommended. To measure chat-driven sales today, use a general analytics approach such as UTM-tagged links or your store’s analytics. Requires the WooCommerce add-on (for the order lookups the bot performs).

Can MxChat generate descriptions for custom meta boxes or inside the Classic editor?

Yes, as of Advanced Content v1.6.2. The SEO meta generator (page title, meta description, focus keyword, excerpt) still runs from the MxChat → Content screen, but the add-on now also adds an in-editor ✦ Generate with AI control: open any post or product in the Classic or block editor and you’ll get a generate button on the excerpt, on a WooCommerce product’s short and long description, and on any custom meta fields you allowlist. It drafts text into the field for you to review and edit — nothing is saved until you save the post. Turn it on and add fields under MxChat → Content → the In-Editor AI Generation card (enabled by default; list custom fields one per line as meta_key or meta_key|Label). Requires the Advanced Content add-on (Pro).

Does the WooCommerce add-on read my product categories and tags?

Both, since WooCommerce add-on v1.7.2. Each time a published product is saved the add-on rebuilds that product’s knowledge-base text and appends a Categories: line and a Tags: line to it alongside the name, price, sale price, SKU and descriptions — so tag vocabulary that exists nowhere in the product copy, like “vegan” or “clearance”, is still matched when a shopper asks for it. Correction: this entry previously said tags were the one taxonomy left out of the sync and advised copying them into the product description; that stopped being true in v1.7.2 and the duplication is no longer needed. The one thing to watch is timing — a tag only enters the vector when the product is next saved, so after a bulk re-tag, re-save the products (or re-run the sync) before expecting the bot to use it. Note this is the written answer path only; tags behave differently when the bot picks product cards. Requires the WooCommerce add-on.

Can I use MxChat on a non-WordPress site (Shopify, React, plain HTML)?

Yes — the MxChat Anywhere add-on embeds your bot on any site via a single <script> tag, no WordPress required on the host page. Configure the bot inside WordPress as usual, then open MxChat → Embed Widget, enable the embed, whitelist the domains you’ll embed on, and copy the snippet — it looks like <script src="https://yoursite.com/wp-json/mxchat-embed/v1/loader.js?key=YOUR_SITE_KEY" async></script>. Drop it into any HTML page (Shopify themes, Next.js / React / Vue apps, a static site, plain vanilla HTML) and the widget renders inside a Shadow DOM, so the host page’s CSS can’t cascade in and the widget’s styles can’t leak out. Chat requests proxy back through your WordPress REST API, so API keys and system prompts never leave your server; only the public site key plus your domain whitelist are visible client-side. One current limitation: Anywhere supports the floating widget only — the inline shortcode/embedded mode isn’t available off WordPress. Requires the Anywhere add-on.

Does MxChat work with WhatsApp Business? Can the bot reply via WhatsApp?

Not as a live-agent channel. MxChat’s built-in human-handoff channels are Telegram and Slack (configured under MxChat → Settings → Integrations) — there is no native WhatsApp Business handoff or webhook integration, and none is planned. What MxChat does handle on the WhatsApp side is smart contact detection: if a visitor types a WhatsApp-formatted phone number into the chat, MxChat recognizes it and (with “Only send if visitor provided contact info” enabled on the Auto-Email Transcript setting) will trigger the transcript email so your team can follow up on WhatsApp manually. If you need visitors to reach you on WhatsApp from your site, a click-to-chat link or button plugin sits alongside MxChat without conflict. Available in MxChat core (the free plugin).

Can MxChat book appointments or schedule meetings inside the chat?

No — MxChat doesn’t have native appointment booking or calendar integration as of v3.2.6. The Forms add-on can capture name, email, phone, and preferred-time text fields and email the submission to you, but it doesn’t talk to Google Calendar, Calendly, Acuity, or any scheduling API. For a real booking flow, embed a Calendly/Acuity widget on your contact page and have the bot deep-link to that page when a visitor asks to book — you can do this with a custom AI Instruction (“If the user asks to book an appointment, send them to /contact/”). Forms capture available with the Forms add-on; native calendar/scheduling is not in MxChat today.

Does MxChat Forms support webhooks, Zapier, or a WordPress action hook on submission?

Yes, as of the Forms add-on v1.2.8. Each form has an optional Webhook URL field — set it and every submission is POSTed as JSON to that URL, ready for Zapier, Make, n8n, Slack, or a custom endpoint. Requests are signed with HMAC-SHA256 in an X-MxChat-Signature: sha256=… header (using a per-form signing secret you can regenerate), and a Webhook Log under Form Collection shows the last 100 delivery attempts per form. For PHP integrations, the add-on also fires a WordPress action hook — do_action('mxchat_forms_submitted', $submission, $form) — after every successful submission, passing the labeled fields plus session metadata. Full details in the Forms documentation. Requires the Forms add-on.

Can the chatbot add products to the cart or place orders directly through the chat?

It can add to cart; it doesn’t place the order. With the WooCommerce add-on, the bot detects “add to cart” intent in any language, resolves which product the user means from the conversation context, and calls WC()->cart->add_to_cart() in-place — the cart icon in the chatbot toolbar updates, and the visitor can keep browsing. The visitor still completes payment through WooCommerce’s standard checkout on your site; MxChat doesn’t take credit cards, process payments, or finalize the order itself. Enable the cart icon under MxChat → Toolbar & Components after activating the add-on. Requires the WooCommerce add-on.

Does the WooCommerce integration include custom product fields and attributes in the AI’s knowledge?

Yes — three layers. WooCommerce native attributes (both taxonomy-based ones like pa_color and the custom product-level attributes you add on a product’s Attributes tab) are pulled into product context automatically when the WooCommerce add-on is active. ACF fields on products are indexed when products are synced to the knowledge base; control which fields are exposed under MxChat → Knowledge → ACF Field Settings. For arbitrary post meta that isn’t ACF, opt individual meta keys into the index using the custom-meta whitelist on the same screen. Available in MxChat core; the WooCommerce add-on extends it with attribute extraction and cart/order/customer-aware responses.

Can MxChat write blog posts or landing pages with AI?

Yes. Open MxChat → Content → Generate, choose Blog Post or Landing Page in the Type dropdown, set Status (Draft, Scheduled, or Publish), pick a layout, and run the generator. Output includes AI-generated images and SEO metadata, with inline editing before saving. Available in MxChat core; the Advanced Content add-on extends it with smart internal linking, an image manager, and a content calendar for scheduling batches.

What is the Multi-Bot add-on and when do I need it?

Multi-Bot is a Pro add-on that lets you run multiple specialized chatbots on the same site, each with its own knowledge base, system prompt, welcome message, quick questions, and per-bot action controls. Deploy a specific bot with the shortcode’s bot_id attribute ([mxchat_chatbot bot_id="your-bot-slug"]) or pick a bot per page in the post editor. Use it when one bot’s persona or content scope shouldn’t bleed into another — e.g. a sales bot on product pages and a technical-support bot in the docs section. Requires the Multi-Bot add-on.

Can MxChat hand off to a live agent?

Yes — built-in handoff is available via Slack and Telegram. Slack posts the conversation into a Slack channel; Telegram sends each visitor’s session into its own forum topic inside a Telegram supergroup (which must have Topics enabled), so your team can reply from their phone. Both are configured under MxChat → Settings → Integrations — Telegram needs a bot token from @BotFather and the webhook URL MxChat shows on that screen registered with Telegram. Direct integrations with Tawk.To, Intercom, Crisp, or LiveAgent are not built in; if you use one of those, the handoff would need a custom workflow. Available in MxChat core (the free plugin).

Troubleshooting

On a phone the keyboard pops open by itself after every bot reply and covers the answer — can I stop that?

In MxChat core 3.2.19 and earlier there is no way to stop it, and no CSS or filter fixes it: every path that finishes a reply calls enableChatInput(), which re-enables the message box by calling focus() on it unconditionally (js/chat-script.js) — and on a touch device focusing a text input is what summons the on-screen keyboard, so the answer and any product cards are half-covered the moment they render. Marking the input readonly or changing inputmode suppresses the keyboard but also breaks typing, so neither is a real workaround. The next core release (3.2.20) makes that focus conditional: the default setting auto focuses only on fine-pointer (mouse) devices, so phones and tablets keep the keyboard closed while desktop behaviour is unchanged, and a developer can override it site-wide with the mxchat_autofocus_after_reply filter returning 'on' or 'off'. Opening the widget still focuses the input either way — that focus is deliberate and is what makes the chat keyboard-accessible. Available in MxChat core (the free plugin).

I turned on Auto-Email Full Transcript and configured it correctly, but no transcript emails ever arrive. Why?

Four things stop that email, and only the last one is a mail problem. First and most common: the transcript is sent by a scheduled WordPress event, so if WP-Cron is not running on the site — DISABLE_WP_CRON is set with no system cron replacing it, or a full-page cache serves visitors without ever hitting PHP — the send is queued and never fires. Check the queue with WP Crontrol or wp cron event list and look for mxchat_send_delayed_transcript sitting in the past. Second, the delay is measured from the visitor’s last message, not the first: every new message reschedules it, so a long conversation keeps pushing the 15/30/60-minute timer back. Third, if Only send if user provided contact info is on, any session with no email address or phone number in it is skipped silently — that alone explains most “some chats arrive, some don’t.” Fourth, the transcript goes out as a .txt attachment, so an SMTP plugin or relay that strips attachments can swallow it; confirm the addresses in Notification Email and check your mail log. All of these live under MxChat → Transcripts → Notifications — see also emailing transcripts to an admin and sending to several addresses. Available in MxChat core (the free plugin).

How long does a chat session last, and what actually ends it?

With Enable Chat Persistence on (MxChat → Settings → Chatbot → Display → Visibility) the session ID is stored in the visitor’s browser twice: a mxchat_session_id_<bot> cookie with a 24-hour lifetime, plus a localStorage copy with no expiry that the cookie is rewritten from whenever it lapses. So the practical answer is that the conversation follows that browser until its site data is cleared — the 24 hours is the cookie, not the ceiling. A visitor can end it deliberately with Start new chat where you have enabled that menu item, which issues a fresh ID on the spot. Turning persistence off does not change the ID; it stops history being loaded and limits what the model is shown to messages from the current page load, so every page load reads as a fresh conversation. Server-side, per-session state untouched for 30 days is swept automatically (filterable with mxchat_session_retention_days), while saved transcripts follow their own separate schedule — see transcript retention and starting a new chat. Available in MxChat core (the free plugin).

A visitor asked me to export or delete their personal data — are their chats included?

Yes, automatically. MxChat registers itself with WordPress’s built-in privacy tools, so running Tools → Export Personal Data or Tools → Erase Personal Data covers chat conversations, captured names and email addresses, and the temporary files left behind by documents uploaded into the chat — there is no separate MxChat step, and shortcut buttons sit on the Privacy & Data Requests card at the bottom of MxChat → Transcripts. A request only supplies an email address, so MxChat matches it three ways — the stored email, plus, when that address belongs to a registered account, the account’s user ID and username — which is what stops a logged-in visitor’s conversations from being missed. Link-click records have no email column of their own and are matched through the visitor’s sessions; independently of any request, their IP and browser details are anonymised after 30 days and the rows deleted after a year. Available in MxChat core (the free plugin).

How long does MxChat keep chat transcripts, and can I auto-delete them after just one day?

Open MxChat → Transcripts → Notification Settings: the Auto-Delete Old Transcripts dropdown offers Never (Keep All), After 1 Week, After 2 Weeks and After 1 Month, and a daily cleanup job removes anything older, cascading to the translation and link-click rows so nothing is orphaned. One week is the shortest option in the dropdown, but the cleanup applies a filter to the final day count, so a tighter window is one snippet in your theme’s functions.php or a small plugin: add_filter( 'mxchat_transcript_retention_days', function () { return 1; } );. One catch worth knowing — the daily job is only scheduled while retention is switched on, so leave the dropdown on any value other than Never and let the filter narrow it; with the dropdown on Never the cleanup never runs and your filter is never consulted. The line under the dropdown shows when the next cleanup is due, which is the quickest way to confirm it is armed. Available in MxChat core (the free plugin).

Can I send chat notifications and transcripts to more than one email address?

Yes, from MxChat core 3.2.19 onward — Notification Email under MxChat → Transcripts → Notification Settings takes up to five addresses separated by commas (semicolons also work), and a repeated address is only mailed once. Validation is all-or-nothing on purpose: if any address in the list is invalid nothing is saved and the error names the one that failed, so you can’t end up believing a list is live when part of it isn’t. An empty field still falls back to your WordPress admin email. On 3.2.18 and earlier the field held one address and failed silently if you entered two: support@acme.com, sales@acme.com was stored as support@acme.comsalesacme.com, which passed WordPress’s own validity check, so alerts and transcripts went to a domain that doesn’t exist with no error anywhere — if you are on an older version, update or put a mail alias in the field. Available in MxChat core (the free plugin).

Transcripts → Message Context says “No action analysis available for this message” even though I’ve set up Actions — why?

That panel reports one thing: how your Trigger Phrases scored against the message. It stays empty unless at least one trigger-phrase action is enabled and enabled for the bot that answered. The usual cause is that you configured AI Tools instead — the native function-calling side of MxChat → Actions — which has no similarity scoring to report. From MxChat core 3.2.19 the transcript records AI Tools separately, so a firing tool is no longer invisible: each message lists which tools ran, how long each took, and the error text if one failed. Tools that handle money, customer records or a live-agent handoff log only the fact that they ran, never their arguments. Either way the record is written as the answer is generated and never backfilled, so it won’t appear on conversations from before you added the action. Available in MxChat core (the free plugin).

MxChat’s settings pages have no Save button — how do I save changes to AI Instructions and the other settings?

There is no Save button on any MxChat settings screen by design — every field saves itself the moment it changes, and a small spinner followed by a green tick appears beside that field to confirm it reached the server. The catch is when the save fires: it is bound to the field’s change event, so a text box or textarea — including AI Instructions (Behavior) under MxChat → Settings → Chatbot → Behavior — only saves when you click or tab out of it, never while you are still typing. So type your changes, click anywhere outside the box, and wait for the tick before you leave; if you close the tab or hit the browser’s Back button while the cursor is still inside the field, the edit is never sent and nothing warns you. If no tick appears at all, the save did not go through — confirm you are logged in as an administrator and check your browser console for an error. This applies across every MxChat settings page (Chatbot, Display, Knowledge, Actions, Toolbar), so “there is no Save button” is expected, not a broken page. Available in MxChat core (the free plugin).

Why don’t my Display settings show up in the chatbot inside the admin Testing tab — is it front-end only?

Most of them do show up there. MxChat → Settings → Testing renders the real chat widget through the ordinary shortcode in inline mode (the equivalent of [mxchat_chatbot floating="no"]), so Top Bar Title, Introductory Message, Input Placeholder, AI Agent Text, Show Download Transcript Button and Show Start-New-Chat Button all take effect in the Testing panel exactly as they will on your site. What cannot appear is anything that belongs to the floating bubble, because the Testing tab has no bubble to attach it to: the Chat Teaser Pop-up is only rendered in floating mode, and Auto-Display Chatbot merely decides whether the bubble is added to your pages at all. To check those, open the chatbot on the front end of your site instead. Remember also that settings save on blur, so click out of a field and wait for the green tick before reloading the Testing tab — see the no-Save-button entry. Available in MxChat core (the free plugin).

My chatbot keeps asking visitors to join our mailing list — how do I turn that off?

That prompt comes from core’s Loops email-capture action, which can be wired in two independent places, both under MxChat → Actions. Open AI Tools and disable the tool named “Collect Email”, then open Trigger Phrases and remove or disable any action whose callback is “Loops Email Capture” — trigger phrases are matched first, so a leftover phrase keeps firing even after the AI tool is switched off. Both routes run the same code and produce the same “Would you like to join our mailing list?” message, so the chat itself won’t tell you which one fired — check both places. Adding a “never ask for emails” rule to your AI Instructions will not reliably stop either one, because actions are dispatched outside the model’s reply text. This is separate from Require Email to Chat (the pre-chat gate) and from the Forms add-on’s mid-chat forms. Available in MxChat core (the free plugin).

Will a logged-in visitor see their own chat history again if they come back on another device, or after clearing cookies?

No — the visitor-facing chat window remembers a conversation per browser, not per WordPress account. MxChat stores a random session ID in a mxchat_session_id_<botId> cookie (mirrored in localStorage) that expires after 24 hours, and it is never derived from the user ID, so the same logged-in person on a laptop and a phone has two separate conversations, and clearing cookies starts a fresh one. Reloading the previous conversation into the widget at all requires Chat Persistence, which is off by default — turn it on under MxChat → Settings → Display Settings. Note this is only about what the visitor sees: on the admin side every message is already saved against the WordPress account, which is a separate thing — see are conversations stored per logged-in user. Available in MxChat core (the free plugin).

Are chat conversations stored per logged-in WordPress user, or only per session?

Both — MxChat records the WordPress account on every message it saves, and there is no setting to switch on. For a logged-in visitor each stored message carries their WordPress user ID, their username as the user identifier, and their account email; a logged-out visitor is stored against their IP address instead and shows as Guest. Open MxChat → Transcripts to see it — every conversation is labelled with the name you captured, the first part of their account email, or their username, and the Leads view collects visitors who left contact details (see seeing what visitors are asking). Available in MxChat core (the free plugin).

My chatbot replies “Sorry, I’m having trouble responding right now. Please try again in a moment.” — what’s wrong?

That is the generic message MxChat shows a visitor whenever the AI chat provider (OpenAI, Claude, Gemini, Grok, DeepSeek, or OpenRouter) rejects the request, on both streaming and non-streaming replies — the raw provider error is deliberately hidden from visitors. The two usual causes are (1) the selected chat model isn’t available on your API key (a retired or renamed model, or a key without access to it), or (2) an invalid API key, no remaining credit, or a rate limit. To see the real reason, open the chat while logged into WordPress as an administrator and resend the message — admins get the specific error instead of the generic text (for example, “The selected AI model isn’t available on your API key. Choose another model in MxChat → Settings.”), then fix the model or key under MxChat → Settings. If the message instead reads “Embedding API error — check embedding API key,” that is a different failure — see the embedding-key fix. Available in MxChat core (the free plugin).

My live-agent handoff (Slack or Telegram) shows the visitor as “Anonymous” with no name or email — how do I capture their details?

The handoff notification fills its User and Email lines from whatever identity has been captured for that session, so it reads “Anonymous” / “Not provided” when nothing was collected. Three things populate it: a logged-in WordPress user, pre-chat capture — enable Require Email to Chat and the name field under MxChat → Settings → Chatbot → Lead Capture — and, from Forms add-on 1.2.12 onward, any form the visitor fills in during the chat. The Forms path needs no setup: it takes the email from the form’s first email field and the name from the first text field whose label mentions a name, and a later non-empty answer replaces an earlier one while an empty one never blanks what you already had. On Forms 1.2.11 and older a mid-chat submission was stored on its own and did not replace the “Anonymous” label — update the add-on, or wire the mxchat_forms_submitted hook yourself. Available in MxChat core; the Forms add-on (1.2.12 or newer) also feeds mid-chat name and email into the handoff automatically.

How do I see which page a visitor was on when they asked the chatbot a question?

Every conversation records the page the visitor was viewing. Open MxChat → Transcripts and select a chat under All Chats — the conversation’s detail panel shows a clickable Page link to the exact URL the visitor was on when they started chatting. The Leads tab goes further: each captured lead has a Page column, there is a Top Pages breakdown, and you can filter leads by page URL. (The originating page is also returned with every message by the Transcripts REST API if you pull data programmatically.) This is separate from seeing what questions visitors ask — that shows the messages, this shows where they came from. Available in MxChat core (the free plugin).

Why is my chatbot slow to respond, and how do I speed it up?

Most of the wait comes from the AI model and provider you chose, not MxChat itself. Enable Streaming (MxChat → Settings → Chatbot → AI Models) makes replies appear word-by-word as they are generated, which feels far faster — it ships off on a fresh install, so turn it on first. MxChat streams OpenAI, Claude, Grok, DeepSeek, OpenRouter and Custom Provider endpoints; Google Gemini is the one built-in provider with no streaming path, so a Gemini model makes the visitor wait for the whole answer however the toggle is set (see Gemini and streaming). Large or free models are also simply slower to compute, so if replies still drag, switch to a lighter model on a streaming-capable provider; shortening replies helps as well (see limiting response length). This is about reply speed — the widget’s effect on your page-load time is covered separately under page speed. Available in MxChat core (the free plugin).

How do I see what questions visitors are actually asking my chatbot?

Open MxChat → Transcripts in WP admin — that is the record of every conversation the bot has had, and it is part of the free core, so you do not need Pro for it. The Transcripts Dashboard opens on engagement stats (Total Chats, Total Messages, Unique Users, Avg Messages/Chat and recent activity); All Chats lists each conversation in full — the visitor’s messages, the bot’s replies, the knowledge-base sources it used and timestamps — and Leads collects visitors who left a name or email. Use Export All Chats to pull everything out for offline analysis (see exporting transcripts), or have conversations delivered to you automatically under Notification Settings (see emailing transcripts to the admin). Reading the questions your bot answered badly is also the quickest way to find gaps worth adding to your knowledge base. Available in MxChat core (the free plugin).

How do I stop bots or bad actors from spamming my chatbot and running up my API costs?

MxChat has no built-in reCAPTCHA or CAPTCHA; the built-in lever is Rate Limits, under MxChat → Settings → Chatbot → Rate Limits. Set a cap and timeframe on the Logged Out Users role — that is where anonymous and scripted traffic lands, and it defaults to 10 messages per day, counted per visitor IP rather than as one shared pool. Then set the Total chatbot message limit at the top of the same screen for a single ceiling across the whole site per timeframe; it defaults to Unlimited, and it is the one setting that caps your worst-case spend no matter how many visitors turn up. Beyond MxChat, ban repeat abusers with the Moderation add-on and set a spend limit on the API key in your provider’s own dashboard, since they bill you directly. See also how rate limits are counted and prompt-injection hardening. Rate Limits are in MxChat core (the free plugin); banning abusive visitors requires the Moderation add-on.

Does MxChat use XML-RPC, and is it safe to disable XML-RPC?

No — MxChat does not use WordPress’s XML-RPC interface (xmlrpc.php) at all. It talks to your site through the WordPress REST API (its endpoints live under /wp-json/mxchat/v1/) and through admin-ajax.php for the in-page chat requests. So disabling or blocking XML-RPC as a security-hardening step won’t affect the chatbot in any way. Available in MxChat core (the free plugin).

Slack live agent: the channel is created with the conversation, but the agent’s replies never reach the website chat widget — how do I fix it?

Start with the Event Subscription URL, which is the usual cause. Agent replies come back through Slack’s Events API, and the endpoint MxChat exposes is /wp-json/mxchat/v1/slack-messagesnot /slack-interaction (that route only handles interactive button payloads and does not answer Slack’s URL‐verification challenge, which is why verification fails or 404s). Set the Request URL to https://YOURSITE/wp-json/mxchat/v1/slack-messages, wait for the green Verified, add message.channels under Subscribe to bot events, and reinstall the app so the scope takes effect. Confirm the Slack Webhook URL, Slack Secret Key and Slack Bot OAuth Token are all set under MxChat → Settings → Integrations → Slack, that the bot is a member of the channel, and that permalinks are not set to “Plain” (Settings → Permalinks) or REST routes 404.

If you have verified all of that and replies still vanish, the handler is receiving your message and dropping it on purpose. Three causes, all silent:

1. Replying in a thread when you should reply in the channel, or the reverse. This is the most common one. In the default mode MxChat opens a fresh channel per conversation and only reads messages posted in the channel — a threaded reply under the handoff message is discarded. If instead you have set a shared channel in the Slack settings, the rule inverts: every conversation lives in a thread rooted at its handoff message, and you must reply inside that thread for MxChat to know which visitor you are talking to. Replying at channel level there reaches nobody. 2. Anything Slack tags with a message subtype is ignored — that includes replies you edit after sending, and replies sent as a file, snippet or image upload rather than typed text. Type the reply as a plain message. 3. A private shared channel. Posting into one works, so the handoff still appears in Slack and everything looks healthy — but inbound events for a private channel arrive as message.groups, which is not the scope the setup asks you to subscribe to, so nothing comes back. Use a public channel, or subscribe to the private-channel event as well. See the Telegram equivalent and live-agent handoff. Available in MxChat core (the free plugin).

Why do I get a 403 (Forbidden) error when adding a PDF to the knowledge base?

A 403 on PDF import almost always comes from your host’s security layer, not from MxChat itself. When you upload a PDF file under MxChat → Knowledge Base, WordPress POSTs it to the admin handler, and hosts with an aggressive firewall/WAF (SiteGround, Cloudflare “Under Attack” mode, Wordfence) often block a binary PDF upload with a 403 before the request even reaches PHP — turning off page caching does not affect the firewall, so ask your host to whitelist the upload (the admin-post / admin-ajax request). When you import a PDF by its URL, MxChat fetches that URL server-side; if the PDF is on the same server, the box’s own hotlink or loopback rule can return a 403 to that self-request — upload the file directly, or paste the text via Direct Content, instead. If you instead see “Access denied” on the first chat message, that is the separate stale-nonce issue: confirm you are on 3.2.7+ and exclude the chat page from caching. Available in MxChat core (the free plugin).

My chatbot suddenly stopped answering anything and shows an “Embedding API error – check embedding API key” message — how do I fix it?

Before the bot replies to anything, it turns each visitor message into an embedding (a vector) so it can search your knowledge base — so if your embedding provider rejects the API key, every message fails and the bot goes silent for everyone, not just during imports. Fix it by re-checking the API key for your selected embedding model in MxChat → Settings: make sure it is valid, not expired, has billing/credit, and belongs to that embedding model’s provider. Your embedding key can be different from your chat-model key — for example, a Google “API key not valid. Please pass a valid API key.” message means the Gemini/Google embedding key is the one that’s bad. Once a working key is saved, replies resume immediately. Available in MxChat core (the free plugin).

I built a MxChat Forms form but it never appears in the chat — why?

A form only shows up when something triggers it, so a form with no trigger stays hidden. Open MxChat → Form Collection, edit the form, and make sure it has at least one trigger: trigger phrases (the form appears when a visitor’s message semantically matches them — matching is governed by the Similarity Threshold, default 0.85, which is fairly strict, so lower it or add closer phrasing if the form never fires), an after-a-set-number-of-messages count, or expose the form as an AI tool. Also confirm the form is enabled and isn’t restricted to a logged-in role the visitor doesn’t have, and that the chatbot itself is displaying on the page. Note that MxChat Forms appears inside the chat widget — it is not a standalone WordPress contact-form shortcode you place on a page. Requires the Forms add-on.

Is MxChat protected against prompt injection, and how does it handle malicious input?

MxChat applies standard WordPress hardening to every chat request: the message endpoint is nonce-verified and the incoming text is run through wp_kses so only basic code/formatting tags survive (scripts and arbitrary HTML are stripped), and replies are escaped on output. There is no dedicated prompt-injection filter that detects instruction-override attempts such as “ignore your previous instructions” — as with any LLM chatbot, resistance to that ultimately depends on the AI model you choose. You can harden behavior by adding rules under MxChat → Settings → AI Instructions (for example, telling the bot to refuse out-of-scope or override requests), filter incoming messages yourself with the mxchat_filter_message hook, and use the Moderation add-on to ban abusive visitors. The request hardening and AI Instructions are in MxChat core (the free plugin); visitor banning requires the Moderation add-on.

Why do I suddenly see “Connection error when generating embeddings: The ‘openai’ AI connector has not been approved for use by mxchat-basic”?

MxChat does not produce this error and has no “AI Services” screen of its own. It sends embedding and chat requests straight to your AI provider over HTTPS using the API key you set under MxChat → Settings. The wording “the ‘openai’ AI connector has not been approved for use by ‘mxchat-basic/mxchat-basic.php’” is added by a separate layer on your site that intercepts outbound AI calls and requires each plugin to be approved first — usually the WordPress AI Services framework/plugin or a managed-host AI gateway; MxChat only relays that message. Because it worked before and broke suddenly, a recently installed or updated plugin is now brokering the request: open that tool’s settings and approve mxchat-basic for the OpenAI connector, or turn off the interception so MxChat can reach OpenAI directly with its own key (and confirm that key is still set and funded). Available in MxChat core (the free plugin).

Why does importing content fail with “Failed to store any chunks — every chunk failed to embed”, “Failed to generate embedding for content”, or “Failed to store content in database”?

All of these come from the indexing step, not from the chat: MxChat turns each piece of content into a vector embedding and then stores it. On MxChat core 3.2.16 and later the error tells you which half failed, and why. “Failed to store any chunks” now continues with either “— every chunk failed to embed”, followed by the embedding provider’s own reason (fix the API key for the provider that matches your selected embedding model under MxChat → Settings → API Keys; a key showing as “detected” only means it is present, not that it is funded), or “— embeddings generated but storage failed”, which points at your Pinecone index or database instead; a partly-failed import reports both counts. “Failed to store content in database:” is only the wrapper an Import from URL puts around the real message, so read the part after the colon. On earlier versions that one sentence covered both causes — which is why so many imports sent people off to rebuild a Pinecone index when the real fault was the key. There, use “Failed to generate embedding for content” as your diagnostic: it is always the embedding provider, and it appears only on content shorter than your Chunk Size (chunking is on by default at 4,000 characters), so an import reporting both messages on different items is one problem and not two. Fix the key, re-import, and only then suspect storage. On Pinecone, an index whose dimensions don’t match your embedding model (3072 for Text-Embedding-3 Large, 1536 for TE3 Small, Ada 2 or Gemini, 2048 for Voyage-3 Large) makes every upsert fail. Available in MxChat core (the free plugin).

Does the chat widget slow down my site, and can I defer or delay when it loads?

MxChat’s front-end footprint is light — one stylesheet and one JavaScript file, loaded in the page footer — and you can control exactly when the script loads to protect your page-speed scores. Go to MxChat → Settings → Optimization & Diagnostics → Script Loading and pick a Script Loading Strategy: Default (loads immediately), Deferred (after the HTML finishes parsing), Delay 1/3/5 seconds, or On User Interaction (loads on the first scroll, mouse-move, or touch). On User Interaction is best for Core Web Vitals and LCP because the chat script stays out of the initial page load, at the cost of the widget appearing a moment later. MxChat doesn’t publish fixed file sizes — measure your own pages with a tool like PageSpeed Insights after picking a strategy. Available in MxChat core (the free plugin).

How can a visitor reset the chat and start a brand-new conversation?

Yes — MxChat core now has a built-in Start new chat option. Turn it on under MxChat → Settings → Display → Show Start-New-Chat Button (off by default), and a “Start new chat” item appears in the chat window’s menu; tapping it asks for a quick confirmation, then clears the current conversation and begins a fresh session. You can rename the menu item with the adjacent label field. Separately, whether a conversation carries over on its own is still governed by Enable Chat Persistence (Settings → Chatbot → Display Settings): with it off, every fresh page load already starts a new session; with it on, the chat is kept for about 24 hours in the visitor’s browser (a mxchat_session_id_<bot> localStorage key plus a cookie). A change of IP mid-conversation does not reset it — holding the session ID is what proves ownership, so MxChat simply re-records the new owner and the history continues. For what does end a session, see how long a chat session lasts. Available in MxChat core (the free plugin).

The pre-chat form shows “Failed to save email” when a visitor enters their email — how do I fix it?

The usual cause is a stale security nonce served from a full-page cache. The email/name gate submits the nonce baked into the page HTML, and — unlike the chat-send path, which fetches a fresh token per message since 3.2.7 — the gate doesn’t refresh it, so a caching plugin (WP Rocket, LiteSpeed, W3 Total Cache) or Cloudflare full-page caching can hand a visitor an expired nonce and the save is rejected. Exclude the page that hosts the chatbot from full-page caching (or flush your caches) and hard-refresh once. Note the address is stored server-side — in a WordPress option plus the chat transcript row — not in the visitor’s browser, so private/incognito mode isn’t the cause. One more thing to check: if you also enabled Require Name, the visitor must fill both fields — submitting with the name left blank is rejected. Available in MxChat core (the free plugin).

The Order History action returns “API key is not set” — how do I fix it?

First, there is no separate WooCommerce API key to set — order data is read through native WooCommerce, and the action’s reply is written by your selected chat model, so it uses that model’s key (set under MxChat → Settings → API Keys). If you run a non-OpenAI model (Claude, Gemini, Grok, or DeepSeek), this error was a bug: older WooCommerce add-on versions looked specifically for an OpenAI key in the order-checking path, so the action failed even when your model’s key was set. Update the WooCommerce add-on to 1.7.4 or newer and it uses whichever provider key your chat model runs on. If you’re on OpenAI and still see it, your chat model’s key is genuinely empty — add it and save. Also confirm the WooCommerce add-on and your Pro license are active and that the Order History action is enabled under MxChat → Actions. Requires the WooCommerce add-on; the chat-model API key lives in MxChat core.

How do I get chat transcripts (or new-chat alerts) emailed to the admin automatically?

Go to MxChat → Transcripts → Notification Settings (the settings icon on the Transcripts screen). Two separate options live there: Enable Chat Notifications emails your Notification Email whenever a new chat session starts, and Auto-Email Full Transcript sends the entire conversation to that address after the chat ends — you pick a 15-, 30-, or 60-minute delay and can choose to send only when the visitor left contact info. Both run automatically, so you don’t need the manual “Export All Chats” button for routine delivery. Available in MxChat core (the free plugin).

Why does the chatbot ignore my knowledge base and answer from general knowledge instead?

The usual cause is an embedding-model mismatch. Your knowledge base is searched by comparing each visitor question against the vectors created when you indexed your content, and both sides must come from the same embedding model. If you change the embedding model (Chatbot → Setting #6) after indexing — or index with one model and query with another — similarity scores collapse and nothing matches, so the bot falls back to its own general knowledge. Fix it by choosing one supported model (OpenAI TE3 Small/Large or Ada 2, Voyage, or Gemini) and re-indexing your entire knowledge base with it from MxChat → Knowledge. Turning “Use custom provider for embeddings” on or off is itself a model change: since 3.2.8 that toggle routes indexing and live queries through your custom endpoint, so flipping it after you have already indexed leaves your stored vectors on the old model. Re-index rather than switching back — see using a local embedding model. (On 3.2.7 and earlier the toggle affected live queries only, which did leave a permanent mismatch.) If matches are still sparse, lower the Similarity Threshold (try 20–40). Available in MxChat core (the free plugin).

The chat widget isn’t showing up on my site — what should I check?

The most common cause is that auto-display is off: the floating widget only appears when MxChat → Chatbot → Auto-Display Chatbot is turned on, and it’s off by default — a fresh install shows nothing until you enable it (or finish the onboarding wizard’s Appearance step). If auto-display is on but the widget is still missing, check three things: (1) the page’s MxChat Settings box isn’t set to Hide, (2) your cache — after changing settings, purge your full-page cache (W3 Total Cache, WP Rocket, LiteSpeed, or your host/Cloudflare), not just the MxChat toggle, and (3) a theme or other plugin isn’t suppressing the wp_footer hook MxChat uses to inject the widget. A useful tell: MxChat renders the widget server-side on wp_footer, so if you View Source on the live page and the stylesheet loads but there’s no widget container in the raw HTML, the cause is server-side — a stale full-page cache serving HTML from before you enabled the widget, a theme that never calls wp_footer(), or a page/post-type visibility rule — not the browser or JavaScript. This is also why “it works in the dashboard Testing tab but not on the live site” happens: the Testing tab renders inside wp-admin and bypasses both your cache and those front-end display gates. As an alternative to auto-display, you can drop the bot onto a specific page with the [mxchat_chatbot] shortcode. Available in MxChat core (the free plugin).

How can I see how many messages have been used, and does the rate limit reset?

The per-visitor message limit resets automatically on the timeframe you set for each role — hourly, daily, weekly, or monthly — under MxChat → Settings → Chatbot → Rate Limits; a scheduled task clears the counters as each window elapses, so a “monthly” limit gives every visitor a fresh allowance each month. Per-role counts are tracked per individual visitor rather than as one running total; if you do want a single site-wide total, set the separate Total chatbot message limit on the same screen (see setting a combined limit). For overall volume, MxChat → Transcripts shows total messages and chats for Today / Last 7 Days / Last 30 Days, and the REST API’s /transcripts endpoint accepts since and until for a custom date range. There is no in-chat counter telling a visitor how many messages they have left. Available in MxChat core (the free plugin).

Can I set a message limit above 100, share one combined limit across all visitors, or show visitors how many messages they have left?

Yes, yes, and no. Under MxChat → Settings → Chatbot → Rate Limits the Limit dropdown offers presets (1, 3, 5, 10, 15, 20, 50, 100, unlimited) plus a Custom… option that reveals a number field, so you can set any limit above 100 — on the site-wide cap and on each per-role limit. For one combined limit, use the Total chatbot message limit at the top of that screen: the plugin describes it as “a single ceiling across all users and all roles, per timeframe,” independent of the per-role limits, and when both are configured whichever is hit first stops the conversation. It defaults to Unlimited, so existing sites are unchanged until you set it. There is still no in-chat counter showing how many messages a visitor has left — your custom limit message only appears once the cap is hit, and running totals live under MxChat → Transcripts. Available in MxChat core (the free plugin).

Is the chatbot rate limit per user, or shared across everyone in a role?

The per-role limit is per individual person, not a shared pool. Under MxChat → Settings → Chatbot → Rate Limits you set a message limit and timeframe for each WordPress role, but the role only decides which limit applies — each logged-in user is counted by their own user ID and each logged-out visitor by their own IP address. So a “50 messages per day” cap on the Subscriber role means every subscriber gets 50 each, not 50 split between them all. Counters reset automatically once the chosen timeframe (hourly, daily, weekly, or monthly) elapses. If you want one ceiling shared across everybody instead, that is the separate Total chatbot message limit at the top of the same screen (see setting a combined limit). Available in MxChat core (the free plugin).

I see an “Access denied” error on the first chat message — how do I fix it?

The usual cause is a stale security nonce served by a full-page cache — a caching plugin (WP Rocket, LiteSpeed Cache, FlyingPress, W3 Total Cache) or Cloudflare APO/full-page caching hands a brand-new visitor cached HTML carrying an expired nonce, the first chat-send POST fails with 403, and the widget surfaces “Access denied: Your session may have expired.” MxChat 3.2.7 fixes this for good: the widget now fetches a fresh security token per message from /wp-json/mxchat/v1/nonce instead of trusting the value baked into cached page HTML, so it works behind full-page caches with no manual exclusion. Confirm under MxChat → About that you are on 3.2.7 or later and hard-refresh the page once. If you are on an older build and cannot update yet, exclude the page hosting the chatbot from your caching plugin’s (or Cloudflare’s) page-cache rules as a stop-gap. A second, distinct cause is the Moderation add-on — if the message reads “Access denied. Your IP address has been banned” or “Your email address has been banned,” remove the matching entry under MxChat → Moderation → Bans. Available in MxChat core; the Moderation add-on extends it with IP/email ban enforcement.

Can visitors talk to the chatbot instead of typing? Is there voice input?

Not currently. MxChat’s chat widget is text-only — the input field accepts typing, paste, and the existing emoji and file-upload buttons (when the Image Analysis add-on is active), but there is no built-in microphone button or speech-to-text capture. If you need voice input today, the workaround is a small custom snippet that uses the browser’s built-in SpeechRecognition API to populate the textarea before the visitor presses Send — outside the plugin’s shipped surface, but doable in a child-theme JS file. A native voice-input button is on the roadmap; track contact us for status. Available in MxChat core (the free plugin).

How do I get MxChat to retry automatically when the AI provider rate-limits or errors out?

MxChat does not auto-retry failed provider calls — a Gemini “model overloaded,” OpenAI 429, or Claude overload error is surfaced to the user verbatim and the chat continues with the next message. The practical workaround is to switch to a less rate-limited provider or model under MxChat → Settings → Chat Model, or paste an OpenRouter key under MxChat → Settings → API Keys so you can move between 100+ backends behind one credential when one provider is busy. Available in MxChat core (the free plugin).

Is MxChat WCAG / ADA accessible? Is the chatbot screen-reader friendly?

The chatbot ships with real accessibility primitives — but no formal audit and no claimed WCAG conformance level. What’s in the box: every interactive control in the chat header (open, close, send, copy, 3-dot menu) has an aria-label, the pre-chat form fields use sr-only labels for screen readers, all buttons are keyboard-focusable, and the 3-dot overflow menu exposes proper role="menu" / role="menuitem" semantics with Escape and arrow-key support. What’s NOT shipped: a third-party WCAG audit, an accessibility statement, or a claimed conformance level (A, AA, or AAA). Color contrast depends on the bot bubble and text colors you choose in MxChat → Chatbot — if your brand palette is low-contrast, the widget will inherit that. If you need formal WCAG-AA or ADA compliance for your site, plan to audit the chatbot in context of your theme and colors before signing off. Available in MxChat core (the free plugin).

Telegram live agent: I get customer messages in the supergroup but my replies don’t reach the customer — why?

This is almost always a webhook misconfiguration. When you reply inside a topic, Telegram POSTs the message to /wp-json/mxchat/v1/telegram-webhook on your site, and that handler routes your reply back into the visitor’s chat session. Three things to verify: (1) Open MxChat → Settings → Integrations → Telegram → Webhook Setup and click the Register Webhook URL link in your browser — you should see {"ok":true,"result":true,"description":"Webhook was set"}. A rest_no_route 404 means the URL you registered with Telegram doesn’t match what WordPress exposes (re-register from this screen). (2) Your supergroup must have Topics enabled (Group → Manage → Topics), and you must reply inside the per-visitor topic — messages posted in the General channel are ignored on purpose. (3) WordPress permalinks must be set to anything other than “Plain” (Settings → Permalinks), otherwise REST routes return 404. Available in MxChat core (the free plugin).

Where does my chat data go — does the AI provider see my visitors’ messages?

Conversation history is stored locally in your own WordPress database; nothing is sent to MxChat’s servers, and we never see your messages or your API keys. Each visitor message is forwarded to whichever AI provider you configured — OpenAI, Anthropic, Google, xAI, DeepSeek, OpenRouter, Azure OpenAI, or any OpenAI-compatible endpoint you point MxChat at — and that provider sees the message in transit under its own privacy policy. Because the custom-provider option accepts any OpenAI-compatible URL, pointing it at a model running on your own server (Ollama, LM Studio, vLLM) keeps conversations inside your infrastructure end to end. You stay in control of what is kept: set a retention period, export transcripts, or delete individual conversations from MxChat → Transcripts. Available in MxChat core (the free plugin).

Can I export chat transcripts?

Yes. Open MxChat → Transcripts in WP admin to view every conversation with full context — visitor messages, AI replies, the knowledge-base sources used for each answer, and timestamps. The Export All Chats button on that screen downloads the lot, and individual conversations or captured leads can be deleted from the same place. That screen is also where you review what visitors have been asking. Available in MxChat core (the free plugin).