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
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 (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 [email protected] 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, find your License Status, 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 [email protected] 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); the Pro/License screen appears once a Pro or Agency 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.
Can I activate my license on a dev or staging site and then move it to my live URL?
Yes — and you don’t need to contact support to do it. Each license is tied to one domain at a time, but you can move it yourself: on the dev/staging site go to MxChat → Pro, find your License Status, and click Deactivate License to free the activation slot on your account. Then on your live 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’d 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 → License 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); the License screen appears once a Pro/Agency 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?
MxChat ships with a built-in privacy notice you can enable at MxChat → Settings → Privacy Notice: toggle it on and edit the textarea (default: “By chatting, you agree to our privacy policy.”). Update your own privacy policy page to disclose three things grounded in how MxChat actually behaves: (1) chat transcripts are stored in your WordPress database (table {prefix}mxchat_transcripts), not on MxChat servers; (2) chat messages are sent to whichever LLM provider you configured (OpenAI, Anthropic, Google, etc.) for response generation, subject to that provider’s terms; (3) the IP address and page URL of each chat are recorded for analytics. Linking your standard privacy page from the Privacy Notice setting is enough — no special MxChat-only clause is required. Available in MxChat core (the free plugin).
How do I activate my MxChat Pro license?
Go to MxChat → License in your WordPress admin 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 [email protected] with the order number so it can be corrected on the order. Available in MxChat core (the free plugin); the License screen is only shown after a Pro/Agency add-on is installed.
Can I open the chatbot from a custom link or button instead of the floating bubble?
Yes. The cleanest way is the Trigger add-on, which turns any element on your page into a chat opener via two data attributes: add data-mxchat-open to a button or link to open the widget on click, or add data-mxchat-trigger="Your prefilled message" to open the widget AND auto-send that message — perfect for CTAs like “Ask about pricing” or “Get a quote”. With Multi-Bot active, add data-mxchat-bot-id="support" to target a specific bot. Without the add-on, you can still trigger the widget from JavaScript by simulating a click on the rendered floating button: document.querySelector('.floating-chatbot-button').click() — wire that to any element’s onclick handler. For an anchor element, remember to call event.preventDefault() first so the browser doesn’t follow the # href and scroll the page to the top. Available in MxChat core (the free plugin); the Trigger add-on adds the simple data-attribute API plus built-in button styles, hover animations (shake, pulse, bounce), and Multi-Bot targeting.
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. 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
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.
Which embedding model should I choose, and what does embedding cost?
For most sites, OpenAI Text-Embedding-3 Small (TE3 Small) is the sensible default — it’s the fastest and most cost-effective option, uses 1536-dimension vectors, and is what new installs start on. Step up to Text-Embedding-3 Large (3072 dimensions) only if you need maximum retrieval accuracy and accept a higher per-token cost; Ada 2 is a balanced middle option, and Voyage-3 Large or Gemini Embedding are available if you prefer those providers. Set it under Chatbot Setting #6 (Embedding Model). Embedding is billed by your AI provider (not by MxChat) and is a one-time charge per item — content is only re-embedded when you re-index it or switch models, so even a few thousand articles is usually a small one-time cost. One catch: if you use Pinecone, the index must be created with the same dimension count as your chosen model, or storing vectors will fail. Available in MxChat core (the free plugin).
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 (Chatbot Setting #6) 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. 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?
MxChat supports 100+ models across six providers: OpenAI (GPT-5.2, 5.1, 5, 5 Mini), Anthropic (Claude Opus 4.6/4.5, Sonnet 4.6/4.5, Haiku 4.5), Google Gemini (2.0 Flash, 1.5 Pro), xAI Grok (4 and 3), DeepSeek, and OpenRouter. Add the OpenRouter API key under MxChat → Settings → API Keys to access models from Meta, Mistral, and others through a single key. Qwen is reachable via OpenRouter; native Qwen support is not built in.
Knowledge base & training
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).
Why does the chatbot keep linking to (or pointing me at) my pages instead of answering directly from the knowledge base?
By default MxChat attaches source links to its answers, so the bot cites the page a knowledge-base match came from instead of only giving the answer — it is reading your knowledge base, it’s just adding “see this page” links. That behavior is the Citation Links toggle at MxChat → Settings → Behavior, which ships turned on. Switch it off to get direct answers with no page links — the bot is then instructed to “provide helpful answers based on the reference information without citing sources.” One caveat, straight from the setting’s own note: if you disable Citation Links, make sure your AI Instructions (Behavior) don’t tell the bot to link or cite, or it may fabricate URLs. If instead the bot ignores your content and answers from general knowledge, that’s a different issue — see why the chatbot ignores my knowledge base. 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 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 (Chatbot Setting #6): existing content keeps its old embeddings until you re-import it. 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 (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 (the vector index) — in free, unlimited local vector storage inside your WordPress database, which is sufficient for most sites and keeps the vectors on your own server. Pinecone is optional and only recommended for enterprise-scale knowledge bases with thousands of entries that need faster search; if you do connect it, the embeddings live in Pinecone instead — configure it under MxChat → Settings → Pinecone. Available in MxChat core (the free plugin).
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?
MxChat trains via RAG on WordPress pages, posts, WooCommerce products, custom post types, PDFs, Word documents, plain text files, XML sitemaps (including PDF URLs in sitemaps), and manual Q&A entries. Imports are unlimited. Enable auto-sync per content type so updates propagate without manual re-importing.
Customization & themes
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 no wpml-config.xml, so add the strings there manually). 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).
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 → Chatbot and turn off “Require Email to Chat” (Setting #10) — 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 → AI Theme Customizer → 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 — but uploading a multi‐MB photo just to display it at 48 px wastes bandwidth on every page load. Use a transparent PNG sized to the recommendation 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?
There’s no admin field for the chat window’s width or height today, but every visual layer has a stable class hook you can override from your theme’s Customize → Additional CSS. Useful selectors: .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: 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. To resize the floating window, target .mxchat-chatbot-wrapper { width: …; height: …; }. Available in MxChat core (the free plugin).
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. Available in MxChat core (the free plugin).
Can I stop the chatbot from answering certain topics (legal, medical, etc.) and have it return a link instead?
Yes, via the system prompt. Go to MxChat → Settings → Chatbot tab → AI Instructions (Behavior) and add a directive such as Do not provide legal advice. If asked about legal matters, respond only with a link to https://example.com/legal-disclaimer. The model treats AI Instructions as a hard rule on top of the default behavior, so it will redirect the user rather than answer. This is the right tool for topic-level steering — the Moderation add-on is for banning specific users by email or IP, not for restricting subjects. 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
Can the chatbot show images or play videos in the chat window?
Images yes, video no. The chat can render 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 include 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; visitors can also upload an image for the bot to read if you run the Image Analysis add-on. There is no video support — the chat does not embed YouTube or any other player, and a pasted video link renders as a plain clickable link with no thumbnail preview, so the practical way to answer “show me a product video” is to link it. Available in MxChat core; the WooCommerce add-on extends it with product cards that include product images.
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?
There is no dedicated MxChat filter for this, 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 under MxChat → Toolbar & Components → Live Agent Settings 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) — for example from a cron that closes the desk after hours — 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 → Toolbar & Components → Live Agent Settings, 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?
When a conversation is handed to Slack, MxChat 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 that same channel for the rest of their conversation. Three things are fixed in the current core handoff and have no setting: the channels are created public (anyone in the workspace can join), every chat gets its own channel rather than routing into one shared channel, and the chat- name prefix can’t be changed. Achieving private channels, a single shared channel, or a custom prefix would require a code customization today. 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 (Setting #10), 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).
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 in the current release. 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. A native WhatsApp channel is on the product roadmap; track contact us for status. 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
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. Streaming is on by default (MxChat → Settings → Enable Streaming) for OpenAI, Claude, DeepSeek and Grok, so replies appear word-by-word as they are generated and feel near-instant. Providers and models that do not stream — including Google Gemini and many free OpenRouter models — make the visitor wait for the whole answer, and large or free models are simply slower to compute. If responses drag, switch to a faster, lighter model on a streaming-capable provider and confirm Enable Streaming is on; shortening replies also helps (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 (and Slack won’t verify my Event Subscription URL) — how do I fix it?
Almost always the wrong Event Subscription URL. Agent replies flow back to the widget through Slack’s Events API, and the endpoint MxChat exposes for that is /wp-json/mxchat/v1/slack-messages — not /slack-interaction (that route only handles interactive button payloads and doesn’t answer Slack’s URL-verification challenge, which is exactly why verification fails or returns 404). Fix it in your Slack app: under Event Subscriptions, set the Request URL to https://YOURSITE/wp-json/mxchat/v1/slack-messages, wait for the green Verified, then under Subscribe to bot events add message.channels and reinstall the app so the new scope takes effect. The bot also has to be a member of the channel it posts into (the agent IDs you list are invited automatically). Finally confirm the Slack Webhook URL, Slack Secret Key, and Slack Bot OAuth Token are all set under MxChat → Settings → Toolbar & Components → Live Agent Settings, and that WordPress permalinks aren’t set to “Plain” (Settings → Permalinks) or REST routes 404. 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 do I get “Storage failed: Failed to generate embedding” or “Failed to store any chunks” when importing or syncing content?
That error is from the indexing step, not the chat itself: for each chunk of content MxChat creates a vector embedding and then stores it, and one of those two steps failed. “Failed to generate embedding” means the embedding API call was rejected — almost always an invalid embedding-provider key or an account with no remaining credit, so check the key and billing for the provider that matches your selected model (OpenAI models use your OpenAI key, Voyage models the Voyage key, Gemini models the Gemini key, all under MxChat → Settings; a key being “detected” only means it’s present, not that it’s funded). “Failed to store any chunks” means every chunk failed to save; on a Pinecone install the usual cause is an index whose dimensions don’t match your embedding model (e.g. you switched to Text-Embedding-3 Large at 3072 dimensions but the index was created at 1536), which makes Pinecone reject every upsert — recreate the index at the matching dimension or switch back to a 1536-dimension model. Fix the key or index, then re-import the content. 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 (MxChat → Chatbot, Setting #17): 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), and the session also resets automatically if the visitor’s IP changes mid-conversation. 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. If you turned on “Use custom provider for embeddings,” switch back to a built-in model for now — custom OpenAI-compatible endpoints are not yet used when indexing the knowledge base, so your stored content and live queries get embedded by different models and never match. 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 WordPress database; nothing is sent to MxChat servers. Each user message is forwarded to the AI provider you configured (OpenAI, Anthropic, Google, xAI, DeepSeek, or OpenRouter) so it can generate a response — those providers see the message in transit and apply their own privacy policies. MxChat is GDPR-friendly: you control retention, can export transcripts, and can delete conversations from the Transcripts dashboard.
Can I export chat transcripts?
Yes. Open MxChat → Transcripts in WP admin to view all conversations with full context (user messages, AI responses, RAG sources used, timestamps). Transcripts can be exported and individual conversations or leads can be deleted from the same screen.