{"id":365982,"date":"2026-09-18T19:16:18","date_gmt":"2026-09-18T19:16:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/mwd-ai-assistant-local-lead-generation\/"},"modified":"2026-10-06T18:49:50","modified_gmt":"2026-10-06T18:49:50","slug":"mwd-ai-assistant-local-lead-generation","status":"publish","type":"plugin","link":"https:\/\/ky.wordpress.org\/plugins\/mwd-ai-assistant-local-lead-generation\/","author":22045223,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"2.11.2","stable_tag":"2.11.2","tested":"7.1.3","requires":"6.5","requires_php":"7.4","requires_plugins":null,"header_name":"MWD AI Assistant - Local Lead Generation","header_author":"Maple Web Design","header_description":"A lightweight BYOK assistant for local businesses with a chat widget, shortcode, manual training, and recent conversation history.","assets_banners_color":"32597e","last_updated":"2026-10-06 18:49:50","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/maplewebdesign.ca\/mwd-ai-assistant-pro\/","header_author_uri":"https:\/\/maplewebdesign.ca\/","rating":5,"author_block_rating":0,"active_installs":0,"downloads":460,"num_ratings":1,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.2.9":{"tag":"1.2.9","author":"arashkhalaj","date":"2026-09-20 03:24:08","revision":3703829},"2.11.0":{"tag":"2.11.0","author":"arashkhalaj","date":"2026-09-25 23:17:43","revision":3713686},"2.11.1":{"tag":"2.11.1","author":"arashkhalaj","date":"2026-10-02 21:17:01","revision":3725513},"2.11.2":{"tag":"2.11.2","author":"arashkhalaj","date":"2026-10-06 18:49:50","revision":3731412},"2.2.1":{"tag":"2.2.1","author":"arashkhalaj","date":"2026-09-22 18:45:15","revision":3707962}},"upgrade_notice":{"2.11.2":"<p>Fixes the chat on phones: the keyboard no longer opens by itself, and the chat header and close button stay visible while typing.<\/p>","2.11.1":"<p>Fixes the chat header layout on page-builder sites, removes message bubble borders and keeps the admin menu icon small on Gravity Forms pages.<\/p>","2.11.0":"<p>More reliable chat on protected, cached and proxied sites, a setup checklist, and better knowledge matching.<\/p>"},"ratings":{"1":0,"2":0,"3":0,"4":0,"5":1},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3703829,"resolution":"128x128","location":"assets","locale":"","width":134,"height":134},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3703829,"resolution":"256x256","location":"assets","locale":"","width":264,"height":264}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3703829,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3703829,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.2.9","2.11.0","2.11.1","2.11.2","2.2.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3703829,"resolution":"1","location":"assets","locale":"","width":1600,"height":1000},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3703829,"resolution":"2","location":"assets","locale":"","width":1600,"height":1000},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3703829,"resolution":"3","location":"assets","locale":"","width":1600,"height":1000},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3703829,"resolution":"4","location":"assets","locale":"","width":1600,"height":1000},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3703829,"resolution":"5","location":"assets","locale":"","width":1600,"height":1000},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3703829,"resolution":"6","location":"assets","locale":"","width":1600,"height":1000},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3703829,"resolution":"7","location":"assets","locale":"","width":1600,"height":1000}},"screenshots":[]},"plugin_section":[],"plugin_tags":[191735,2364,2369,37556,194533],"plugin_category":[],"plugin_contributors":[281525],"plugin_business_model":[],"class_list":["post-365982","plugin","type-plugin","status-publish","hentry","plugin_tags-ai-chatbot","plugin_tags-chatbot","plugin_tags-customer-support","plugin_tags-local-business","plugin_tags-openai","plugin_contributors-arashkhalaj","plugin_committers-arashkhalaj"],"banners":{"banner":"https:\/\/ps.w.org\/mwd-ai-assistant-local-lead-generation\/assets\/banner-772x250.png?rev=3703829","banner_2x":"https:\/\/ps.w.org\/mwd-ai-assistant-local-lead-generation\/assets\/banner-1544x500.png?rev=3703829","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/mwd-ai-assistant-local-lead-generation\/assets\/icon-128x128.png?rev=3703829","icon_2x":"https:\/\/ps.w.org\/mwd-ai-assistant-local-lead-generation\/assets\/icon-256x256.png?rev=3703829","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/mwd-ai-assistant-local-lead-generation\/assets\/screenshot-1.png?rev=3703829","caption":""},{"src":"https:\/\/ps.w.org\/mwd-ai-assistant-local-lead-generation\/assets\/screenshot-2.png?rev=3703829","caption":""},{"src":"https:\/\/ps.w.org\/mwd-ai-assistant-local-lead-generation\/assets\/screenshot-3.png?rev=3703829","caption":""},{"src":"https:\/\/ps.w.org\/mwd-ai-assistant-local-lead-generation\/assets\/screenshot-4.png?rev=3703829","caption":""},{"src":"https:\/\/ps.w.org\/mwd-ai-assistant-local-lead-generation\/assets\/screenshot-5.png?rev=3703829","caption":""},{"src":"https:\/\/ps.w.org\/mwd-ai-assistant-local-lead-generation\/assets\/screenshot-6.png?rev=3703829","caption":""},{"src":"https:\/\/ps.w.org\/mwd-ai-assistant-local-lead-generation\/assets\/screenshot-7.png?rev=3703829","caption":""}],"raw_content":"<!--section=description-->\n<p>Help visitors find answers about your business while they are still on your site. MWD AI Assistant uses the instructions, business details and answers you provide to respond through your own OpenAI API account. You decide what information it can use, where the chat appears and how it looks.<\/p>\n\n<p>The free plugin is a complete assistant for answering visitor questions. It does not require an MWD account, license key or subscription. OpenAI charges separately for API usage on your own account.<\/p>\n\n<h4>Give visitors useful business answers<\/h4>\n\n<ul>\n<li>Add your business name, phone number, email, contact page, address, map link and weekly opening hours.<\/li>\n<li>Write approved questions and answers about your services, policies and common enquiries. Each answer can include a public link.<\/li>\n<li>Set business instructions for the assistant's tone and scope.<\/li>\n<li>Let the assistant reply in the visitor's language, match the site's language or use a language you choose.<\/li>\n<li>Show one assistant as a floating chat widget, place it inline with <code>[mwd_ai_assistant]<\/code>, or use both.<\/li>\n<\/ul>\n\n<p>Visitors can ask about opening hours, location, contact options and the topics you have covered in Manual Knowledge. The assistant can share your business contact details and approved public links. Core does not collect quote requests or submit forms; use an extension for those workflows.<\/p>\n\n<h4>Make the chat fit your site<\/h4>\n\n<p>Set the widget's colors, text sizes, width, height and position. It inherits your site's font and supports right-to-left languages with automatic text direction. On phones, opening the chat leaves the keyboard closed until the visitor taps the message field. The chat stays usable when the keyboard is open, and the page returns to its place after the chat closes.<\/p>\n\n<h4>Manage usage and privacy<\/h4>\n\n<ul>\n<li>Test your OpenAI connection and follow the setup checklist before enabling the assistant.<\/li>\n<li>Set a daily token safety limit and message rate limits for visitors and IP addresses.<\/li>\n<li>Review recent conversations in your WordPress dashboard. Visitors can start a new chat or erase their conversation.<\/li>\n<li>Store your OpenAI API key encrypted on your server, with an option to define it in <code>wp-config.php<\/code>.<\/li>\n<li>Choose a conversation retention period from one to seven days. Expired chats are removed by scheduled cleanup.<\/li>\n<li>Use WordPress privacy export and erasure tools for visitor data.<\/li>\n<\/ul>\n\n<p>Common contact details in visitor messages are masked before storage and AI requests, but masking is not complete anonymization. The plugin sends chat requests to OpenAI as described under External services. It does not load third-party tracking scripts, fonts or marketing assets.<\/p>\n\n<h4>Extend it when you need more<\/h4>\n\n<p>MWD AI Assistant Pro is an optional, separate plugin. It adds website and PDF knowledge, lead request forms and an inbox, email delivery, analytics, more AI providers, multiple assistants and Hero Chat for a one-line field in a page's hero section. Features depend on the Pro plan. The free assistant works on its own.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin connects to the following services only in the situations described.<\/p>\n\n<h4>OpenAI API<\/h4>\n\n<p>Used to generate chat replies. Requests go to https:\/\/api.openai.com\/v1\/responses only after you save an API key and enable the assistant, when a visitor sends a message, or when you click Test saved provider connection. Each request contains your business instructions, your site name and address, the business details and primary location you entered (such as phone, email, address and opening hours), up to five relevant approved answers, up to twelve recent messages of that conversation (with common contact details masked), the visitor's message, and the definitions and results of available tools. The API key is sent as an authorization header from your server. Requests set <code>store: false<\/code>; OpenAI's own abuse-monitoring retention may still apply. You are responsible for your OpenAI account, billing, and any notice or consent your visitors need.<\/p>\n\n<ul>\n<li>Terms of use: https:\/\/openai.com\/policies\/services-agreement\/<\/li>\n<li>Privacy policy: https:\/\/openai.com\/policies\/privacy-policy\/<\/li>\n<li>API data controls: https:\/\/developers.openai.com\/api\/docs\/guides\/your-data<\/li>\n<\/ul>\n\n<h4>Freemius (optional price lookup)<\/h4>\n\n<p>The Upgrade page can show current Pro add-on prices. Only when an administrator clicks View current Pro prices, the server sends one request to https:\/\/api.freemius.com\/v1\/plugins\/38266\/pricing.json using the product's public key. No API key, conversation, email address, site account or license is sent; Freemius receives your server IP address and standard request details. Choosing an offer opens the Freemius checkout in a new tab.<\/p>\n\n<ul>\n<li>Terms of use: https:\/\/freemius.com\/terms\/<\/li>\n<li>Privacy policy: https:\/\/freemius.com\/privacy\/<\/li>\n<\/ul>\n\n<h4>Maple Web Design support email<\/h4>\n\n<p>Only when an administrator submits the Help &amp; Support form and ticks the consent box, WordPress sends an email to info@maplewebdesign.ca containing the reply address, site URL, WordPress and plugin versions, subject and message. Ordinary chat never contacts Maple Web Design.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate the plugin from Plugins &gt; Add New, or upload the ZIP file.<\/li>\n<li>Open MWD AI Assistant &gt; Setup and paste your OpenAI API key. You can create one at https:\/\/platform.openai.com\/api-keys. A ChatGPT subscription does not include API credits.<\/li>\n<li>Click Test saved provider connection to confirm your key and model work.<\/li>\n<li>Write your business instructions under Assistant and add your business details, location and approved answers under Manual Knowledge.<\/li>\n<li>Turn on Enable assistant and choose Floating widget, Shortcode only, or both.<\/li>\n<li>For inline placement, add <code>[mwd_ai_assistant]<\/code> to a Shortcode block or a page builder shortcode widget.<\/li>\n<li>Review Privacy &amp; Usage, then clear any page cache so visitors see the assistant.<\/li>\n<\/ol>\n\n<p>Network-wide activation on multisite is not supported; activate the plugin on each site separately.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20an%20account%20with%20mwd%3F\"><h3>Do I need an account with MWD?<\/h3><\/dt>\n<dd><p>No. You only need your own OpenAI API key. The plugin never contacts MWD during normal use.<\/p><\/dd>\n<dt id=\"how%20much%20does%20it%20cost%20to%20run%3F\"><h3>How much does it cost to run?<\/h3><\/dt>\n<dd><p>The plugin is free. OpenAI charges your API account for each reply. The daily token safety limit (500,000 tokens by default) caps how much the assistant can use per day. Provider invoices are the authoritative record of your usage.<\/p><\/dd>\n<dt id=\"why%20does%20the%20chat%20say%20it%20is%20unavailable%3F\"><h3>Why does the chat say it is unavailable?<\/h3><\/dt>\n<dd><p>Check that the assistant is enabled, that a readable API key is saved, that your OpenAI account has billing and access to the selected model, and that today's safety limit has not been reached. The Diagnostics page shows the last provider status without exposing the key.<\/p><\/dd>\n<dt id=\"how%20is%20my%20api%20key%20stored%3F\"><h3>How is my API key stored?<\/h3><\/dt>\n<dd><p>It is encrypted with AES-256-GCM using keys derived from your WordPress salts. Leaving the field blank keeps the saved key; Clear saved key removes it. If your salts change, enter the key again. You can also define <code>MWDAI_CORE_OPENAI_API_KEY<\/code> in wp-config.php to manage the key outside the dashboard.<\/p><\/dd>\n<dt id=\"how%20long%20are%20conversations%20kept%3F\"><h3>How long are conversations kept?<\/h3><\/dt>\n<dd><p>Seven days by default, adjustable from one to seven days. Expired conversations become inaccessible immediately, and an hourly task deletes them. Deletion can be delayed while WordPress cron is disabled or the plugin is inactive, and your backups may keep older copies.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20page%20caching%3F\"><h3>Does it work with page caching?<\/h3><\/dt>\n<dd><p>Yes. The widget loads its settings and a fresh session from the server, so cached pages stay correct. After changing appearance or display mode, clear your page cache.<\/p><\/dd>\n<dt id=\"why%20does%20the%20keyboard%20stay%20closed%20when%20i%20open%20the%20chat%20on%20my%20phone%3F\"><h3>Why does the keyboard stay closed when I open the chat on my phone?<\/h3><\/dt>\n<dd><p>This is intentional. Tap the message field when you are ready to type. When the keyboard reduces the available space, the chat adjusts so its header and close button remain visible.<\/p><\/dd>\n<dt id=\"my%20site%20is%20behind%20a%20cdn%20or%20reverse%20proxy.%20are%20rate%20limits%20shared%3F\"><h3>My site is behind a CDN or reverse proxy. Are rate limits shared?<\/h3><\/dt>\n<dd><p>Core uses the address PHP receives and does not trust forwarding headers, so visitors can share a per-IP limit behind a proxy. If you control the proxy, return the verified visitor address with the <code>mwdai_core_client_ip<\/code> filter, or raise the per-IP limit.<\/p><\/dd>\n<dt id=\"can%20the%20assistant%20take%20actions%20or%20submit%20forms%3F\"><h3>Can the assistant take actions or submit forms?<\/h3><\/dt>\n<dd><p>Core answers questions and can show approved public links. It cannot submit forms or perform actions on its own. Extensions such as the Pro add-on can register confirmed actions, which always require the visitor to confirm first.<\/p><\/dd>\n<dt id=\"what%20happens%20when%20i%20uninstall%3F\"><h3>What happens when I uninstall?<\/h3><\/dt>\n<dd><p>By default all data is kept. If you tick Permanently delete Core data on uninstall under Privacy &amp; Usage, uninstalling removes this plugin's tables and settings on a single-site installation. On multisite, data is always kept. Other plugins, including the Pro add-on and its license, are not changed. Deactivating only stops the scheduled cleanup.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.11.2<\/h4>\n\n<ul>\n<li>On phones and tablets, opening the chat no longer opens the keyboard by itself; the keyboard opens when the visitor taps the message field.<\/li>\n<li>On phones the open chat keeps its usual size and place, and when the keyboard leaves too little room it fills the visible part of the screen, so the chat's name and the close button always stay in view.<\/li>\n<li>The page behind the open chat no longer scrolls on phones, and it returns to the same place when the chat is closed.<\/li>\n<\/ul>\n\n<h4>2.11.1<\/h4>\n\n<ul>\n<li>The chat header keeps its layout (logo, name and buttons) on pages built with Elementor and other page builders or themes that style images, in both the floating chat and the shortcode.<\/li>\n<li>The close button is hidden when the chat is placed on a page with the shortcode.<\/li>\n<li>Message bubbles no longer have a border; the assistant's bubble is slightly darker so it stays distinct.<\/li>\n<li>When an add-on provides a request form, the assistant opens it as soon as a visitor asks for a quote, order, booking or to be contacted, instead of asking for contact details in the chat.<\/li>\n<li>Admin pages show saved values right away: the Getting started checklist and the location count update after a save without reloading the page.<\/li>\n<li>The admin menu icon keeps its size on pages of plugins that remove other plugins' styles, such as Gravity Forms in No-Conflict Mode.<\/li>\n<\/ul>\n\n<h4>2.11.0<\/h4>\n\n<ul>\n<li>New Business details and Location sections in Manual Knowledge, with weekly opening hours: the assistant always knows your contact details and shares them with visitors who want to visit, order, book or get in touch.<\/li>\n<li>The assistant no longer offers a request form this chat cannot send. It says so and points visitors to your contact details, and it uses your site name instead of placeholders.<\/li>\n<li>Setup now shows a Getting started checklist and a direct link to create an OpenAI API key.<\/li>\n<li>The floating chat keeps the same conversation while a visitor moves between pages.<\/li>\n<li>The widget sends its session token in its own header, so it works on sites that use HTTP Basic authentication, JWT or OAuth plugins, or hosts that strip the Authorization header.<\/li>\n<li>Expired login nonces in long-open tabs are refreshed automatically instead of failing.<\/li>\n<li>Network errors, timeouts and server error pages now show a clear message instead of technical text.<\/li>\n<li>Fixed the chat script failing to start on older Safari versions.<\/li>\n<li>A visitor can send a new message after an interrupted request without reloading the page.<\/li>\n<li>A reply that reaches the maximum output length is shown instead of reported as an error.<\/li>\n<li>Manual Knowledge now ranks the best matching answers in the database, ignoring common filler words.<\/li>\n<li>Shortcode-only mode loads the chat assets only on pages that show the assistant, and the page no longer makes a background request until a visitor chats.<\/li>\n<li>Added GPT-4.1 and GPT-4.1 nano model choices.<\/li>\n<li>Added the <code>mwdai_core_client_ip<\/code> filter for sites behind a trusted proxy.<\/li>\n<li>Updated the Upgrade page for the Pro add-on and refreshed the bundled documentation.<\/li>\n<\/ul>\n\n<h4>2.10.0<\/h4>\n\n<ul>\n<li>Extension API 1.9 for the Pro add-on: settings validation, conversation erase and bounded cleanup helpers.<\/li>\n<\/ul>\n\n<h4>2.0.0<\/h4>\n\n<ul>\n<li>Rebuilt as an independent free Core with its own storage, one chat engine and a versioned extension API.<\/li>\n<\/ul>","raw_excerpt":"A free AI chatbot for WordPress that answers questions using your approved business information and your own OpenAI API key.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/365982","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=365982"}],"author":[{"embeddable":true,"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/arashkhalaj"}],"wp:attachment":[{"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=365982"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=365982"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=365982"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=365982"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=365982"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=365982"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}