{"id":298319,"date":"2026-06-01T07:51:17","date_gmt":"2026-06-01T07:51:17","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/ai-salesman-chat-pro\/"},"modified":"2026-09-15T01:22:42","modified_gmt":"2026-09-15T01:22:42","slug":"winaltchat-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/es-ar.wordpress.org\/plugins\/winaltchat-for-woocommerce\/","author":23514820,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.41.0","stable_tag":"1.41.0","tested":"7.1.1","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"WinaltChat for WooCommerce","header_author":"Winalt Technologies","header_description":"WinaltChat adds an AI-powered chat widget to your WooCommerce store to help customers find products, answer questions, and boost sales.","assets_banners_color":"cececc","last_updated":"2026-09-15 01:22:42","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/winaltchat-for-woocommerce\/","header_author_uri":"https:\/\/winalttechnologies.com\/","rating":5,"author_block_rating":0,"active_installs":0,"downloads":1701,"num_ratings":1,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.92":{"tag":"1.0.92","author":"fahadali158","date":"2026-06-01 07:50:40","revision":3556342},"1.0.93":{"tag":"1.0.93","author":"fahadali158","date":"2026-06-01 08:56:30","revision":3556447},"1.0.95":{"tag":"1.0.95","author":"fahadali158","date":"2026-06-01 14:48:58","revision":3556917},"1.1.01":{"tag":"1.1.01","author":"fahadali158","date":"2026-06-01 20:02:49","revision":3557212},"1.1.14":{"tag":"1.1.14","author":"fahadali158","date":"2026-06-03 20:16:06","revision":3559975},"1.10.4":{"tag":"1.10.4","author":"fahadali158","date":"2026-07-17 14:59:28","revision":3611669},"1.10.5":{"tag":"1.10.5","author":"fahadali158","date":"2026-07-17 15:35:52","revision":3611739},"1.13.7":{"tag":"1.13.7","author":"fahadali158","date":"2026-07-19 18:43:49","revision":3613832},"1.14.12":{"tag":"1.14.12","author":"fahadali158","date":"2026-07-27 18:03:42","revision":3625000},"1.14.13":{"tag":"1.14.13","author":"fahadali158","date":"2026-07-28 03:14:50","revision":3625309},"1.14.16":{"tag":"1.14.16","author":"fahadali158","date":"2026-07-28 13:39:13","revision":3625985},"1.14.6":{"tag":"1.14.6","author":"fahadali158","date":"2026-07-21 07:01:02","revision":3616588},"1.14.8":{"tag":"1.14.8","author":"fahadali158","date":"2026-07-24 18:18:32","revision":3621790},"1.14.9":{"tag":"1.14.9","author":"fahadali158","date":"2026-07-24 18:25:51","revision":3621793},"1.15.12":{"tag":"1.15.12","author":"fahadali158","date":"2026-07-30 17:49:38","revision":3628983},"1.15.17":{"tag":"1.15.17","author":"fahadali158","date":"2026-08-01 18:22:42","revision":3631213},"1.15.19":{"tag":"1.15.19","author":"fahadali158","date":"2026-08-01 18:55:20","revision":3631232},"1.15.20":{"tag":"1.15.20","author":"fahadali158","date":"2026-08-03 18:37:36","revision":3633329},"1.15.7":{"tag":"1.15.7","author":"fahadali158","date":"2026-07-29 13:51:01","revision":3627328},"1.17.2":{"tag":"1.17.2","author":"fahadali158","date":"2026-08-04 16:56:06","revision":3634401},"1.17.9":{"tag":"1.17.9","author":"fahadali158","date":"2026-08-06 03:44:13","revision":3636020},"1.18.1":{"tag":"1.18.1","author":"fahadali158","date":"2026-08-11 15:11:14","revision":3642188},"1.20.5":{"tag":"1.20.5","author":"fahadali158","date":"2026-08-22 17:49:32","revision":3660996},"1.23.4":{"tag":"1.23.4","author":"fahadali158","date":"2026-08-25 18:19:03","revision":3665830},"1.23.6":{"tag":"1.23.6","author":"fahadali158","date":"2026-09-02 17:34:39","revision":3678458},"1.24.1":{"tag":"1.24.1","author":"fahadali158","date":"2026-09-06 07:38:46","revision":3683102},"1.3.10":{"tag":"1.3.10","author":"fahadali158","date":"2026-06-12 18:29:59","revision":3570421},"1.3.32":{"tag":"1.3.32","author":"fahadali158","date":"2026-06-22 17:58:35","revision":3582152},"1.3.7":{"tag":"1.3.7","author":"fahadali158","date":"2026-06-07 07:41:59","revision":3563510},"1.3.8":{"tag":"1.3.8","author":"fahadali158","date":"2026-06-07 08:08:03","revision":3563518},"1.3.9":{"tag":"1.3.9","author":"fahadali158","date":"2026-06-09 11:02:14","revision":3565855},"1.41.0":{"tag":"1.41.0","author":"fahadali158","date":"2026-09-15 01:22:42","revision":3696088}},"upgrade_notice":{"1.2.0":"<p>Major feature release: Live Human Chat. Two new database tables\nare created automatically on first admin page load after upgrade.\nNo breaking changes to existing AI chat functionality.<\/p>"},"ratings":{"1":0,"2":0,"3":0,"4":0,"5":1},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3613832,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3613832,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3613832,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3613832,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.92","1.0.93","1.0.95","1.1.01","1.1.14","1.10.4","1.10.5","1.13.7","1.14.12","1.14.13","1.14.16","1.14.6","1.14.8","1.14.9","1.15.12","1.15.17","1.15.19","1.15.20","1.15.7","1.17.2","1.17.9","1.18.1","1.20.5","1.23.4","1.23.6","1.24.1","1.3.10","1.3.32","1.3.7","1.3.8","1.3.9","1.41.0"],"block_files":[],"assets_screenshots":{"Screenshot-1.png":{"filename":"Screenshot-1.png","revision":3613832,"resolution":"1","location":"assets","locale":"","width":1920,"height":910},"Screenshot-2.png":{"filename":"Screenshot-2.png","revision":3613832,"resolution":"2","location":"assets","locale":"","width":1920,"height":911},"Screenshot-3.png":{"filename":"Screenshot-3.png","revision":3621790,"resolution":"3","location":"assets","locale":"","width":1920,"height":910},"Screenshot-4.png":{"filename":"Screenshot-4.png","revision":3616588,"resolution":"4","location":"assets","locale":"","width":2400,"height":1138},"Screenshot-5.png":{"filename":"Screenshot-5.png","revision":3621790,"resolution":"5","location":"assets","locale":"","width":1920,"height":910},"Screenshot-6.png":{"filename":"Screenshot-6.png","revision":3613832,"resolution":"6","location":"assets","locale":"","width":1920,"height":910}},"screenshots":{"1":"General Settings \u2014 configure your AI provider, API key, and core preferences.","2":"Chat Appearance \u2014 customize colors, icons, welcome message, and branding to match your store.","3":"Live Chat Management \u2014 the admin console for handling active conversations and agents.","4":"AI Conversation \u2014 the assistant answering a customer's question live on the storefront.","5":"Product Recommendations \u2014 the AI surfacing matching products in real time during a chat.","6":"Knowledge Base Mapping \u2014 configure which store pages (Shipping, Returns, About) the AI reads from."}},"plugin_section":[],"plugin_tags":[2353,2364,2369,2379,286],"plugin_category":[45],"plugin_contributors":[265289,266869],"plugin_business_model":[],"class_list":["post-298319","plugin","type-plugin","status-publish","hentry","plugin_tags-ai","plugin_tags-chatbot","plugin_tags-customer-support","plugin_tags-live-chat","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-fahadali158","plugin_contributors-winalttechnologies","plugin_committers-fahadali158","plugin_committers-winalttechnologies","plugin_support_reps-fahadali158"],"banners":{"banner":"https:\/\/ps.w.org\/winaltchat-for-woocommerce\/assets\/banner-772x250.png?rev=3613832","banner_2x":"https:\/\/ps.w.org\/winaltchat-for-woocommerce\/assets\/banner-1544x500.png?rev=3613832","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/winaltchat-for-woocommerce\/assets\/icon-128x128.png?rev=3613832","icon_2x":"https:\/\/ps.w.org\/winaltchat-for-woocommerce\/assets\/icon-256x256.png?rev=3613832","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/winaltchat-for-woocommerce\/assets\/Screenshot-1.png?rev=3613832","caption":"General Settings \u2014 configure your AI provider, API key, and core preferences."},{"src":"https:\/\/ps.w.org\/winaltchat-for-woocommerce\/assets\/Screenshot-2.png?rev=3613832","caption":"Chat Appearance \u2014 customize colors, icons, welcome message, and branding to match your store."},{"src":"https:\/\/ps.w.org\/winaltchat-for-woocommerce\/assets\/Screenshot-3.png?rev=3621790","caption":"Live Chat Management \u2014 the admin console for handling active conversations and agents."},{"src":"https:\/\/ps.w.org\/winaltchat-for-woocommerce\/assets\/Screenshot-4.png?rev=3616588","caption":"AI Conversation \u2014 the assistant answering a customer's question live on the storefront."},{"src":"https:\/\/ps.w.org\/winaltchat-for-woocommerce\/assets\/Screenshot-5.png?rev=3621790","caption":"Product Recommendations \u2014 the AI surfacing matching products in real time during a chat."},{"src":"https:\/\/ps.w.org\/winaltchat-for-woocommerce\/assets\/Screenshot-6.png?rev=3613832","caption":"Knowledge Base Mapping \u2014 configure which store pages (Shipping, Returns, About) the AI reads from."}],"raw_content":"<!--section=description-->\n<p><strong>WinaltChat<\/strong> adds a fast, intelligent chat widget to your\nWooCommerce store. Customers can search your product catalogue,\nget instant answers about shipping and returns, and \u2014 when they\nneed a real person \u2014 connect to your support team through a built-in\nlive chat system, all without leaving your store.<\/p>\n\n<h4>AI Shopping Assistant<\/h4>\n\n<ul>\n<li><strong>Dual AI Modes<\/strong> \u2014 Use your own API key from Groq \u2014 LLaMA\n(Free Tier), ChatGPT (OpenAI), Claude (Anthropic), or Gemini\n(Google) for full conversational AI. No key? The built-in\n<em>Basic AI<\/em> mode runs entirely on your server with zero external\ncalls and zero ongoing cost.<\/li>\n<li><strong>Smart Product Search<\/strong> \u2014 Intent-aware search across your\nWooCommerce catalogue. Handles typos, synonyms, multilingual and mixed-language\nqueries, and follow-up questions naturally.<\/li>\n<li><strong>Product Comparisons<\/strong> \u2014 Customers can ask \"which is better, the Sony or the\nSamsung?\" and get a clear side-by-side comparison\nwith prices and key specs from your own catalogue.<\/li>\n<li><strong>Store Knowledge Base<\/strong> \u2014 Reads your shipping, returns, contact,\nand about pages to answer policy questions accurately and\ndynamically \u2014 no hardcoded answers that break for other stores.<\/li>\n<li><strong>Conversation Context<\/strong> \u2014 Remembers context within a session so\nfollow-up questions (\"does it come in blue?\") work naturally.<\/li>\n<li><strong>Amazon Affiliate Fallback<\/strong> \u2014 When a product is out of stock,\noptionally suggest an Amazon affiliate link so you still earn a\ncommission.<\/li>\n<\/ul>\n\n<h4>Live Human Chat<\/h4>\n\n<ul>\n<li><strong>Human Handoff<\/strong> \u2014 When a customer types phrases like \"I want\nto talk to a human\", \"customer service\", \"live agent\", or dozens\nof natural variants, the plugin detects the request and connects\nthem to a real person on your team.<\/li>\n<li><strong>Admin Live Chats Dashboard<\/strong> \u2014 A dedicated <strong>Live Chats<\/strong> screen\nin your WordPress admin shows all active, waiting, and closed\nconversations in a two-panel interface. Every handoff request is\nqueued here as soon as it happens \u2014 keep the tab open to also show\nas instantly online to visitors and connect in real time.<\/li>\n<li><strong>Visitor Name Prompt<\/strong> \u2014 Before connecting, the visitor is\noptionally asked for their name. If skipped, they are identified\nas \"Visitor #ID\" so you can tell conversations apart.<\/li>\n<li><strong>Full Conversation Context for Agents<\/strong> \u2014 When a customer is\nhanded off, the admin sees the complete prior AI conversation so\nthere is no need to ask \"how can I help?\" twice.<\/li>\n<li><strong>Visitor Presence Dot<\/strong> \u2014 A green dot shows the visitor is\nactive. It turns grey within 30 seconds if they close the tab.<\/li>\n<li><strong>Two-Tier Timeout<\/strong> \u2014 If your team does not respond within\n90 seconds, the visitor sees a friendly patience message. After\n5 minutes of no reply, the chat gracefully falls back to the AI\nassistant with an optional email capture.<\/li>\n<li><strong>Intelligent Offline Handling<\/strong> \u2014 When no admin is online the AI\nkeeps helping, and the handoff request is still queued in the\nbackground so it's waiting in your Live Chats list whenever you\nnext check \u2014 no need to have caught it live. Visitors can also\noptionally leave their email for a follow-up; leads appear with a\ndedicated Leads section and unread badge.<\/li>\n<li><strong>Session Management<\/strong> \u2014 Close chats when resolved, or delete\nthem permanently. Closed and lead sessions stay visible in\ntheir own sections until manually removed.<\/li>\n<li><strong>Zero External Dependencies<\/strong> \u2014 Live chat runs entirely within\nyour WordPress site using secure AJAX polling over the REST API.\nNo Pusher, no third-party service, no extra cost.<\/li>\n<li><strong>Email Notifications<\/strong> \u2014 Get an email when a customer starts a\nlive chat or leaves their contact details while you are offline.<\/li>\n<\/ul>\n\n<h4>Privacy &amp; Security<\/h4>\n\n<ul>\n<li>All live chat data is stored in your own WordPress database.\nNothing is sent to an external service.<\/li>\n<li>Session tokens are 32-character cryptographically random strings\n\u2014 not sequential IDs \u2014 so sessions cannot be enumerated.<\/li>\n<li>All endpoints enforce nonces, capability checks, input\nsanitization, output escaping, and rate limiting.<\/li>\n<li>Message content is sanitized server-side, and rich chat HTML\n(product cards, links, images) is additionally sanitized\nclient-side via a bundled copy of DOMPurify before being\nrendered \u2014 see \"Bundled Libraries\" below.<\/li>\n<\/ul>\n\n<h4>Bundled Libraries<\/h4>\n\n<ul>\n<li><strong>DOMPurify 3.1.6<\/strong> \u2014 client-side HTML sanitizer, used to safely\nrender rich chat content (product cards, links, images).\nVendored locally at <code>assets\/js\/vendor\/purify.min.js<\/code>; not loaded\nfrom a CDN. \u00a9 Cure53 and other contributors. Dual-licensed under\nthe Apache License 2.0 and Mozilla Public License 2.0, both\nGPL-compatible. <a href=\"https:\/\/github.com\/cure53\/DOMPurify\">github.com\/cure53\/DOMPurify<\/a><\/li>\n<\/ul>\n\n<h4>Requirements<\/h4>\n\n<ul>\n<li>WordPress 6.2 or later<\/li>\n<li>WooCommerce 7.0 or later (must be installed and active)<\/li>\n<li>PHP 7.4 or later<\/li>\n<li>An API key from Groq, OpenAI, Anthropic, or Google <em>(optional \u2014\nBasic AI and Live Chat both work without one)<\/em><\/li>\n<\/ul>\n\n<h4>Support<\/h4>\n\n<ul>\n<li><strong>Support Forum:<\/strong> <a href=\"https:\/\/wordpress.org\/support\/plugin\/winaltchat-for-woocommerce\/\">wordpress.org\/support\/plugin\/winaltchat-for-woocommerce<\/a><\/li>\n<li><strong>Email:<\/strong> support@winalttechnologies.com<\/li>\n<\/ul>\n\n<p>We aim to respond to all support requests within 48 hours.<\/p>\n\n<h3>External Services<\/h3>\n\n<p>This plugin connects to third-party AI providers only when you\nconfigure an external AI mode and enter your own API key. In Basic\nAI mode and during live human chat, no external AI service is used.<\/p>\n\n<p><strong>AI Providers (optional \u2014 only when an API key is configured)<\/strong><\/p>\n\n<p>Customer messages, recent conversation context, and relevant store\nand product context are sent to the AI provider you select so it\ncan generate a response. No data is sent to these providers when\nusing Basic AI mode.<\/p>\n\n<ul>\n<li><strong>Groq<\/strong> \u2014 <a href=\"https:\/\/groq.com\">groq.com<\/a> | <a href=\"https:\/\/groq.com\/privacy-policy\/\">Privacy Policy<\/a> | <a href=\"https:\/\/groq.com\/terms-of-service\/\">Terms of Service<\/a><\/li>\n<li><strong>OpenAI<\/strong> \u2014 <a href=\"https:\/\/openai.com\">openai.com<\/a> | <a href=\"https:\/\/openai.com\/policies\/privacy-policy\/\">Privacy Policy<\/a> | <a href=\"https:\/\/openai.com\/policies\/usage-policies\/\">Terms of Use<\/a><\/li>\n<li><strong>Anthropic Claude<\/strong> \u2014 <a href=\"https:\/\/anthropic.com\">anthropic.com<\/a> | <a href=\"https:\/\/www.anthropic.com\/privacy\">Privacy Policy<\/a> | <a href=\"https:\/\/www.anthropic.com\/legal\/consumer-terms\">Terms of Service<\/a><\/li>\n<li><strong>Google Gemini<\/strong> \u2014 <a href=\"https:\/\/ai.google.dev\">ai.google.dev<\/a> | <a href=\"https:\/\/policies.google.com\/privacy\">Privacy Policy<\/a> | <a href=\"https:\/\/policies.google.com\/terms\">Terms of Service<\/a><\/li>\n<\/ul>\n\n<p><strong>Amazon Associate Program (optional \u2014 only when a tag is configured)<\/strong><\/p>\n\n<p>When the Amazon fallback is enabled and no matching product is\nfound in your store, the plugin generates an Amazon search link\nwith your Associate tag. No customer data is transmitted to Amazon\nby the plugin \u2014 the link simply directs the visitor's browser.<\/p>\n\n<ul>\n<li><strong>Amazon<\/strong> \u2014 <a href=\"https:\/\/www.amazon.com\">amazon.com<\/a> | <a href=\"https:\/\/www.amazon.com\/gp\/help\/customer\/display.html?nodeId=GX7NJQ4ZB8MHFRNJ\">Privacy Notice<\/a><\/li>\n<\/ul>\n\n<p><strong>Deactivation Feedback (sent on deactivation \u2014 full survey response, or a bare anonymous count if skipped)<\/strong><\/p>\n\n<p>When you deactivate this plugin, an optional short survey asks why.\nIf you respond, your site URL, the plugin\/WordPress\/PHP version, and\nwhatever you entered in the survey are sent to Winalt Technologies to\nhelp improve the plugin. If you skip the survey instead, a bare\ndeactivation count (just the plugin version \u2014 no site URL, WordPress\nversion, or PHP version) is still sent so skipped deactivations aren't\ninvisible in aggregate. No personal data is collected beyond this\nunless you choose to type it into the free-text field yourself.<\/p>\n\n<ul>\n<li><strong>Winalt Technologies<\/strong> \u2014 <a href=\"https:\/\/aisalesmanchatpro.com\">aisalesmanchatpro.com<\/a> | <a href=\"https:\/\/aisalesmanchatpro.com\/privacy-policy.html\">Privacy Policy<\/a><\/li>\n<\/ul>\n\n<p><strong>Anonymous Usage Tracking (optional \u2014 off by default, only sent if you click \"Allow\")<\/strong><\/p>\n\n<p>On first use, a notice asks permission to send anonymous \"still\nactive\" pings to help us understand real-world installs. Nothing is\nsent unless you click \"Allow\" \u2014 you can also decline, or change your\nchoice later from the plugin's General Settings tab. When enabled,\nyour site URL and the plugin\/WordPress\/PHP version are sent to Winalt\nTechnologies once immediately and then roughly once a day for as long\nas it stays enabled. No personal or customer data is ever included.<\/p>\n\n<ul>\n<li><strong>Winalt Technologies<\/strong> \u2014 <a href=\"https:\/\/aisalesmanchatpro.com\">aisalesmanchatpro.com<\/a> | <a href=\"https:\/\/aisalesmanchatpro.com\/privacy-policy.html\">Privacy Policy<\/a><\/li>\n<\/ul>\n\n<p><strong>Support Contact Form (optional \u2014 only sent if you use \"Contact us directly\")<\/strong><\/p>\n\n<p>The settings page includes a \"Contact us directly\" form. If you use it,\nyour message and the plugin version are sent to Winalt Technologies so\nwe can respond; your email address is included only if you choose to\nenter one. Nothing is sent unless you submit this form yourself.<\/p>\n\n<ul>\n<li><strong>Winalt Technologies<\/strong> \u2014 <a href=\"https:\/\/aisalesmanchatpro.com\">aisalesmanchatpro.com<\/a> | <a href=\"https:\/\/aisalesmanchatpro.com\/privacy-policy.html\">Privacy Policy<\/a><\/li>\n<\/ul>\n\n<p><strong>Basic AI Pattern Sync (automatic \u2014 runs roughly once a day, plus once shortly after activation)<\/strong><\/p>\n\n<p>Basic AI mode periodically pulls an updated set of intents, patterns,\nand responses from Winalt Technologies so its built-in conversational\nreplies can improve and cover more languages over time. Only your\nsite's detected language and the version number of the pattern set\nyou already have cached are sent \u2014 nothing else. Your customer\nmessages, conversation content, and product data are never sent as\npart of this sync, and never leave your site for this feature. If the\nsync ever fails (network error, timeout, or Winalt Technologies is\nunreachable), Basic AI mode silently keeps using whatever it already\nhas cached, or its original built-in patterns if it has never synced\nsuccessfully \u2014 nothing breaks and no data is lost.<\/p>\n\n<ul>\n<li><strong>Winalt Technologies<\/strong> \u2014 <a href=\"https:\/\/aisalesmanchatpro.com\">aisalesmanchatpro.com<\/a> | <a href=\"https:\/\/aisalesmanchatpro.com\/privacy-policy.html\">Privacy Policy<\/a><\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>winaltchat-for-woocommerce<\/code> folder to\n   \/wp-content\/plugins\/, or install directly via the WordPress\nPlugins screen.<\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> screen in WordPress.<\/li>\n<li>Make sure <strong>WooCommerce<\/strong> is installed and active.<\/li>\n<li>Navigate to <strong>WinaltChat \u2192 Settings<\/strong> in the WordPress admin.<\/li>\n<li><strong>AI Mode (optional):<\/strong> Choose your preferred AI provider and\nenter your API key, or leave blank to use the built-in Basic AI\nmode at zero cost.<\/li>\n<li><strong>Live Human Chat (optional):<\/strong> Scroll to the Live Human Chat\nsection, enable the toggle, set a notification email and agent\ndisplay name. A <strong>Live Chats<\/strong> item will appear in the sidebar.<\/li>\n<li>Every handoff request is queued to this screen even when you're\naway, so you'll never miss one \u2014 keep the tab open while you work\nif you'd also like to appear instantly online and connect live.<\/li>\n<li>Customise the chat appearance under the <strong>Chat Appearance<\/strong> tab.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20an%20api%20key%20to%20use%20this%20plugin%3F\"><h3>Do I need an API key to use this plugin?<\/h3><\/dt>\n<dd><p>No. The built-in Basic AI mode handles product search, comparisons,\npolicy questions, and conversation without any API key or external\nservice. Real AI mode (Groq, OpenAI, Claude, Gemini) is optional\nand improves response quality for complex queries.<\/p><\/dd>\n<dt id=\"does%20live%20human%20chat%20require%20any%20external%20service%3F\"><h3>Does Live Human Chat require any external service?<\/h3><\/dt>\n<dd><p>No. It runs entirely within your WordPress site using the WordPress\nREST API. No Pusher, no LiveChat subscription, no third-party\naccounts needed.<\/p><\/dd>\n<dt id=\"how%20does%20the%20admin%20know%20a%20customer%20is%20waiting%3F\"><h3>How does the admin know a customer is waiting?<\/h3><\/dt>\n<dd><p>Every handoff request is queued in the Live Chats screen the moment\nit happens, so you'll see it whenever you next check \u2014 no need to\nhave been watching at the time. You'll also get an email at your\nconfigured notify address, and a browser notification fires in the\ntab itself (if you grant notification permission) when it's open.\nKeep the tab open while you work to additionally show as instantly\nonline, so a visitor connects to you live instead of waiting.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20no%20admin%20is%20online%20when%20a%20customer%20asks%20for%20help%3F\"><h3>What happens if no admin is online when a customer asks for help?<\/h3><\/dt>\n<dd><p>The AI assistant keeps helping the customer seamlessly. A message\nexplains the team is unavailable, and the customer is offered an\noptional email field so you can follow up. No dead ends.<\/p><\/dd>\n<dt id=\"how%20long%20before%20an%20unanswered%20live%20chat%20falls%20back%20to%20the%20ai%3F\"><h3>How long before an unanswered live chat falls back to the AI?<\/h3><\/dt>\n<dd><p>At 90 seconds of no response, the visitor sees a friendly\n\"thanks for your patience\" message. At 5 minutes, the chat\ngracefully returns to AI mode with an email capture option. Both\nthresholds are configurable in the Live Human Chat settings.<\/p><\/dd>\n<dt id=\"can%20multiple%20admins%20handle%20chats%20at%20the%20same%20time%3F\"><h3>Can multiple admins handle chats at the same time?<\/h3><\/dt>\n<dd><p>Currently any admin with the manage_options capability can see and\nreply to all live chats. Multi-agent role management is planned for\na future release.<\/p><\/dd>\n<dt id=\"how%20do%20i%20remove%20all%20plugin%20data%20on%20uninstall%3F\"><h3>How do I remove all plugin data on uninstall?<\/h3><\/dt>\n<dd><p>Deleting the plugin via the WordPress Plugins screen automatically\nremoves all WinaltChat settings, options, and live chat database\ntables from your site.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20my%20theme%3F\"><h3>Does it work with my theme?<\/h3><\/dt>\n<dd><p>Yes. The chat widget is injected into the page footer and uses its\nown scoped CSS so it does not conflict with theme styles.<\/p><\/dd>\n<dt id=\"will%20it%20slow%20down%20my%20site%3F\"><h3>Will it slow down my site?<\/h3><\/dt>\n<dd><p>The AI chat widget loads asynchronously and does not block page\nrendering. Live chat polling only runs while an active live session\nis in progress \u2014 normal AI chat and idle pages make zero polling\nrequests.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.41.0<\/h4>\n\n<ul>\n<li>New: \"Agent Joined\" Text is now admin-customizable (Chat Labels &amp; Messages \u2192 Live Human Chat) \u2014 the \"joined the chat\" text shown after the agent's name when a live session connects was the one Live Human Chat string never wired into the localized <code>liveChat.strings<\/code> payload, so it stayed 100% hardcoded English even after v1.40.0's pass over the rest of that section (its Chinese-conversation override from v1.40.1 still applies on top of whatever text is configured here).<\/li>\n<\/ul>\n\n<h4>1.40.2<\/h4>\n\n<ul>\n<li>Fix: Several Chat Labels &amp; Messages fields (Email Prompt Text, Email Field Placeholder, Email Submitted Thank-You Text, and any other field in that section) could get permanently stuck showing an empty, uneditable-looking field \u2014 unselectable\/uncopyable ghost placeholder text with nothing actually there to edit. Root cause: <code>get_option()<\/code>'s fallback default only ever applies when an option row doesn't exist in the DB at all; once a save had ever written an empty string for one of these fields, every later admin page load got that stored <code>''<\/code> back instead of the hardcoded default \u2014 even though the frontend and the save handler both already treat an empty value as \"not customized, use the default.\" The admin form's own rendering was the one place not applying that same fallback. Now it does: any of these fields with a blank stored value renders with the real, editable default text pre-filled, exactly like a field that was never touched.<\/li>\n<\/ul>\n\n<h4>1.40.1<\/h4>\n\n<ul>\n<li>Fix: v1.40.0 made the Live Human Chat name-prompt\/placeholder text admin-customizable, but that only changes the SITE's default (still WP-locale-bound) \u2014 a Chinese-language conversation on an English-locale site still got the English default, since the client-side form is rendered before any per-message language signal reaches it. Added a client-side CJK check (<code>isChineseConversation()<\/code> in chat-live.js, checking the visitor's own typed messages, not the site locale) so the name prompt\/placeholder switch to Chinese mid-conversation when the visitor is writing in Chinese, same as the server-side cart-query fix in v1.40.0.<\/li>\n<li>Fix: \" joined the chat\" (shown when a live agent connects) had the identical site-locale-bound issue \u2014 now uses the same Chinese-conversation detection.<\/li>\n<\/ul>\n\n<h4>1.40.0<\/h4>\n\n<ul>\n<li>Fix: Live Human Chat's name-prompt and name-placeholder text were 100% hardcoded English strings never wired into the localized <code>liveChat.strings<\/code> payload \u2014 the only two survivors after last round's pass over emailPrompt\/emailPlaceholder\/emailThanks. On a non-English site these showed up as stray English sentences inside an otherwise all-Chinese (or other-language) handoff conversation. Now admin-customizable (Name Prompt Text \/ Name Field Placeholder, under Chat Labels &amp; Messages \u2192 Live Human Chat) with the same fallback text as before, exactly like the other Live Human Chat strings.<\/li>\n<li>Fix: A cart-contents question asked in Chinese (\"\u6211\u7684\u8d2d\u7269\u8f66\u91cc\u6709\u4ec0\u4e48\uff1f\") returned a fully English reply \u2014 product names, \"Subtotal: $X\", the works \u2014 because handle_cart_query()'s response text is built with <code>__()<\/code>, which translates by the SITE's configured WordPress locale, not by the individual visitor's message language. Added a narrow, additive CJK detector (<code>is_chinese_message()<\/code>) so a Chinese-language cart question now gets a Chinese-language answer (contents, empty-cart, and unavailable-cart replies) regardless of site locale, without changing behavior for any other language.<\/li>\n<li>Note: order-status and other dynamically-built Basic AI replies remain locale-bound (site WP locale, not per-message language) \u2014 this fix is scoped to Live Human Chat's two prompt strings and cart-query replies, the specific regressions confirmed this round.<\/li>\n<\/ul>\n\n<h4>1.39.0<\/h4>\n\n<ul>\n<li>New: Human-handoff, order-status, and cart-contents detection now also check the admin-managed pattern dataset synced from aisalesmanchatpro.com (Winalt_Pattern_Sync::find_response(), scoped to each intent) before falling back to hardcoded regex \u2014 patterns for additional languages can be added from that site's panel with no plugin update, once get_intent_for_routing() actually reaches them (previously these three intents were only checked deep inside the full Basic AI pipeline, which non-passthrough intents like these skip straight past).<\/li>\n<li>New: Real AI now has a language-agnostic human-handoff fallback \u2014 if a customer's message is a genuine request to speak with a human, in a language neither the regex nor synced patterns cover yet, the model is instructed to reply with a sentinel token that gets converted into the same Live Human Chat flow (name prompt, connect\/skip, timeout) instead of a generic text reply.<\/li>\n<\/ul>\n\n<h4>1.38.0<\/h4>\n\n<ul>\n<li>Fix: The Real AI system prompt told the model to literally say \"[store email]\" as a fallback contact address instead of a real one \u2014 it now gets the site's actual admin email (or the CONTACT DETAILS block, if present) instead of an ambiguous placeholder.<\/li>\n<li>Fix: Human-handoff phrase detection (\"\u6211\u60f3\u548c\u771f\u4eba\u5ba2\u670d\u8bf4\u8bdd\", \"\u8bf7\u5e2e\u6211\u8f6c\u63a5\u4eba\u5de5\u5ba2\u670d\", etc.) had no Chinese matching at all, so it fell through to a generic Contact Us response instead of the working Live Human Chat flow \u2014 added Chinese phrase matching alongside the existing English detection.<\/li>\n<li>Fix: Order-status detection (\"\u6211\u7684\u8ba2\u5355\u5728\u54ea\", \"\u8ba2\u5355\u72b6\u6001\", etc.) and cart-contents detection (\"\u8d2d\u7269\u8f66\u91cc\u6709\u4ec0\u4e48\", etc.) also had no Chinese matching \u2014 added it, and routed cart-contents questions in any language to Basic AI's real WooCommerce session read instead of Real AI's guesswork, which had been hallucinating (e.g. claiming a guest needs to log in to view their cart, which isn't true for WooCommerce).<\/li>\n<li>Fix: Strengthened the system prompt against fabricating products not in STORE INVENTORY \u2014 vague\/browse queries (\"cheap electronics\", \"gift ideas\") were producing invented product names and prices instead of real [product_id=ID] cards.<\/li>\n<li>New: Added 3 more customizable Live Human Chat strings (Chat Labels &amp; Messages card): \"Email Prompt Text\", \"Email Field Placeholder\", and \"Email Submitted Thank-You Text\" \u2014 previously hardcoded, these were the last hardcoded strings in the handoff flow.<\/li>\n<\/ul>\n\n<h4>1.37.0<\/h4>\n\n<ul>\n<li>New: Added 3 more customizable Live Human Chat strings (Chat Labels &amp; Messages card): \"Connecting Text\", \"Waiting-for-Agent Text\" (shown after 90s if no agent has joined), and \"Email Dismissed Acknowledgement Text\" \u2014 previously hardcoded.<\/li>\n<li>Improve: Removed the Dev Mode field hint entirely (General Settings tab).<\/li>\n<li>Improve: Renamed the Dev Mode audience option \"Everyone on WordPress\" to \"All WordPress Users\".<\/li>\n<\/ul>\n\n<h4>1.36.1<\/h4>\n\n<ul>\n<li>Improve: Dev Mode (General Settings tab) is now a toggle plus a 2-option audience dropdown (\"Only Admin\" \/ \"Everyone on WordPress\") instead of a single 3-option select \u2014 off by default, same as before.<\/li>\n<li>Improve: Shortened the Dev Mode and Widget Offset field hints.<\/li>\n<li>Improve: Split \"Chat Window Controls\" (header icon tooltips, End Chat dialog) out of the Chat Labels &amp; Messages card into its own card.<\/li>\n<\/ul>\n\n<h4>1.36.0<\/h4>\n\n<ul>\n<li>New: Added a \"Chat Window Controls\" subsection to Chat Labels &amp; Messages (Chat Appearance tab) \u2014 the minimize\/download\/end-chat header icon tooltips and the entire \"End this chat?\" confirmation dialog (title, description, \"Keep Chat\" and \"End Chat\" buttons) are now admin-customizable, matching every other chat-widget string. These were previously hardcoded and not exposed anywhere in settings.<\/li>\n<\/ul>\n\n<h4>1.35.1<\/h4>\n\n<ul>\n<li>Improve: Replaced the \"Widget Position\" Bottom Right\/Bottom Left dropdown (Chat Appearance tab) with precise \"Horizontal Offset (X axis)\" and \"Vertical Offset (Y axis)\" pixel fields, so the chat icon can be nudged anywhere near its default corner instead of only flipping to the opposite one. Both default to 20px, matching where the icon already sits \u2014 no visual change until adjusted.<\/li>\n<\/ul>\n\n<h4>1.35.0<\/h4>\n\n<ul>\n<li>New: \"Dev Mode\" setting (General Settings tab). Lets an admin test a change on the live site without every visitor seeing it \u2014 set \"Who can see the chat widget\" to Administrators Only or Any Logged-In User to hide it from anonymous customers. Defaults to \"Everyone (live)\" so this update never silently hides the widget on an already-live site; switch it back once testing is done.<\/li>\n<\/ul>\n\n<h4>1.34.0<\/h4>\n\n<ul>\n<li>New: \"Widget Position\" setting (Chat Appearance tab, Floating Bubble mode). If a site already has its own fixed element in the bottom-right corner \u2014 a \"back to top\" button, another chat widget, etc. \u2014 the WinaltChat launcher, chat window, and welcome popup can now be moved to the bottom-left instead so the two don't overlap. Bottom-right stays the default.<\/li>\n<\/ul>\n\n<h4>1.33.1<\/h4>\n\n<ul>\n<li>Fix: The AI-health attention banner had no way to dismiss it, so it stayed on screen even after saving a new API key. Added a \"\u00d7\" dismiss button \u2014 it hides the banner for the current incident, but a subsequent Real AI failure brings it back automatically so a still-broken key can't go unnoticed.<\/li>\n<li>Fix: Moved the bot\/agent avatar back to the top corner of the message card (next to a sharp top-left bubble corner instead of a rounded one) \u2014 the bottom-aligned layout from the previous release didn't read as clearly as the original top alignment.<\/li>\n<\/ul>\n\n<h4>1.33.0<\/h4>\n\n<ul>\n<li>New: AI provider health monitoring. When the Real AI API starts failing (exhausted credit\/quota, invalid key, outage, etc.) for 2 consecutive messages, the admin email gets a one-time \"AI replies are failing\" notification with the error code, and a red attention banner appears at the top of the WinaltChat settings screen until it's resolved. Once the AI answers successfully again, a follow-up \"AI replies are working again\" email is sent automatically and the banner clears \u2014 no more emails until the next new incident.<\/li>\n<\/ul>\n\n<h4>1.32.9<\/h4>\n\n<ul>\n<li>Fix: The typing-indicator dots were larger than the surrounding chat text; shrunk to match the rest of the chat card's proportions.<\/li>\n<li>Fix: A non-Latin-script message (Chinese, Traditional Chinese, etc.) makes an extra API call to translate product-search keywords before the main reply call \u2014 on a provider with a tight per-minute request quota, the two calls landing back-to-back could trip the same rate-limit window and silently drop the real reply to a generic English \"could you clarify?\" fallback, most visible on comparison questions and Traditional Chinese script. Added a single short retry when the main reply call itself hits a rate limit, giving the window a moment to clear before falling back.<\/li>\n<\/ul>\n\n<h4>1.32.8<\/h4>\n\n<ul>\n<li>Improve: The bot\/agent avatar next to each assistant message now aligns with the bottom of its message card instead of the top, so it stays level with the reply itself even when a card grows tall (product cards, feedback buttons, etc).<\/li>\n<\/ul>\n\n<h4>1.32.7<\/h4>\n\n<ul>\n<li>Fix: Reverted the previous release's download-chat icon flip \u2014 the arrow was already correct, the earlier feedback was actually about the bot avatar icon's rounded corner, not this arrow.<\/li>\n<\/ul>\n\n<h4>1.32.6<\/h4>\n\n<ul>\n<li>Fix: The chat header's download-chat icon was a downward arrow into a tray, which read as pointing away from the assistant above it. Flipped to an upward arrow so it points up toward the bot\/title bar; the button still downloads the chat transcript.<\/li>\n<\/ul>\n\n<h4>1.32.5<\/h4>\n\n<ul>\n<li>Fix: The newly-animated typing indicator was missing the bot avatar icon every real assistant message shows, and rendered wider\/misaligned as a result \u2014 it was missing the avatar span and column wrapper real messages use to indent the bubble. Now matches a real assistant message's layout exactly.<\/li>\n<\/ul>\n\n<h4>1.32.4<\/h4>\n\n<ul>\n<li>Fix: The \"assistant is replying\" indicator rendered as static \"...\" text with no motion, even though a fully-built pulsing 3-dot animation already existed in the CSS but was never wired up. It now shows the animated dots, so customers can see a reply is actively being generated instead of a flat, static ellipsis.<\/li>\n<\/ul>\n\n<h4>1.32.3<\/h4>\n\n<ul>\n<li>Improve: The extra AI call that translates a non-Latin-script message into English search keywords is now cached for 10 minutes per exact message text. Re-asking the same non-English question repeatedly (e.g. during testing) no longer doubles the API calls made to the AI provider each time \u2014 likely contributor to intermittent rate-limit-driven failures\/truncated responses seen on repeated identical Chinese queries.<\/li>\n<\/ul>\n\n<h4>1.32.2<\/h4>\n\n<ul>\n<li>Improve: Removed the arrow from the default \"View Product\" button\/link label (was \"View Product \u2192\").<\/li>\n<\/ul>\n\n<h4>1.32.1<\/h4>\n\n<ul>\n<li>Fix (high priority): When the Real AI call itself failed and the plugin fell back to Basic AI, any message Basic AI couldn't classify \u2014 a cart question, a discount question, an off-topic question, a human-handoff request, or any non-English message \u2014 got its entire raw text echoed back inside an English \"we don't currently carry [X] at [Store]\" template, as if the whole sentence were a searched-for product name. That template is now only used when the message actually looks like a product request; everything else uses Basic AI's own response instead.<\/li>\n<\/ul>\n\n<h4>1.32.0<\/h4>\n\n<ul>\n<li>Add: New \"Chat Labels &amp; Messages\" card on the Chat Appearance tab makes the privacy notice text, the Privacy Policy link text, the \"View Product\"\/\"Add to Cart\"\/\"Select Options\" product-card button labels, and eight Live Human Chat handoff strings (Connect, Skip, email Send\/No thanks, \"checking for availability\", \"chat has ended\", invalid-email error, and the \"Delivered\" read-receipt label) all editable, matching the existing Quick Reply Buttons pattern \u2014 leave a field blank to keep the default.<\/li>\n<li>Fix: The privacy notice text and Privacy Policy link text were already localized in <code>cfg.strings<\/code> but chat-ui.js rendered hardcoded literal English instead of reading them \u2014 now wired up correctly (and both are admin-editable as of this version).<\/li>\n<li>Fix: The Download\/Minimize\/End Chat buttons' hover tooltips (<code>title<\/code> attribute) were hardcoded English regardless of site language, while their (visually hidden) <code>aria-label<\/code> was already correctly localized \u2014 tooltips now show the same, correctly localized text.<\/li>\n<\/ul>\n\n<h4>1.31.0<\/h4>\n\n<ul>\n<li>Fix (high priority): Real AI mode would falsely claim a real, in-stock product wasn't sold when asked about in a non-Latin-script language (e.g. Chinese) \u2014 the same question in English correctly found the product. Cause: keyword extraction for the catalog search used PHP's str_word_count(), which has no Unicode support and returns nothing for non-Latin text, so the product search silently came up empty and the AI was handed an unrelated 8-item alphabetical sample instead of the real match. Now, when local extraction finds nothing for a message containing non-ASCII characters, one small extra call to the configured Real AI provider translates it into English search keywords first, so the catalog search can find the right product regardless of the customer's language.<\/li>\n<\/ul>\n\n<h4>1.30.7<\/h4>\n\n<ul>\n<li>Fix (critical): Real AI mode could silently never actually run, even with a valid, connectivity-tested API key. <code>should_use_basic_ai()<\/code> gated every live chat request behind a hardcoded key-prefix\/length guess (e.g. Gemini keys must start with \"AIza\") that had nothing to do with whether the key actually works \u2014 a key in a format that guess didn't recognize sent every single message to Basic AI instead, while the admin screen still showed \"Running: \" the whole time. Removed that local format gate; a stored key now always gets a real API call, exactly like \"Test Key\" already does, with the existing graceful Basic-AI fallback still covering an actual API failure.<\/li>\n<\/ul>\n\n<h4>1.30.6<\/h4>\n\n<ul>\n<li>Fix: On mobile, scrolling down left a dead ~46px gap above the sticky WinaltChat header. WordPress core switches its own admin bar from fixed to absolute positioning at the same 782px breakpoint, so it scrolls away with the page \u2014 our header was still reserving space to sit below it as if it were still pinned. Now sticks flush at the top on mobile.<\/li>\n<\/ul>\n\n<h4>1.30.5<\/h4>\n\n<ul>\n<li>Improve: The support footer's \"Chat with us on WhatsApp\" link now uses a real WhatsApp icon instead of a generic phone emoji.<\/li>\n<li>Fix: On mobile, the \"Upgrade to Pro\" badge was wrapping onto its own line below the tabs instead of staying next to the WinaltChat logo. It now stays inline with the logo on the first row, with the tabs on their own row below.<\/li>\n<\/ul>\n\n<h4>1.30.4<\/h4>\n\n<ul>\n<li>Improve: Added an explicit instruction to the AI system prompt so Real AI mode always replies in the same language the customer writes in (e.g. Chinese in, Chinese out), regardless of what language the prompt or store's knowledge base is written in \u2014 previously this relied on the model's own default behavior rather than being guaranteed.<\/li>\n<\/ul>\n\n<h4>1.30.3<\/h4>\n\n<ul>\n<li>Fix: The \"Basic AI Pattern Sync\" card had an odd, oversized gap above its \"Last synced...\" line \u2014 it was a bare <code>&lt;p&gt;<\/code> with no CSS of its own, so the browser's default ~16px paragraph margin was the only spacing it had. Moved \"Sync Now\" above the status line and gave the line a proper, deliberate 10px top margin matching the rest of the design.<\/li>\n<\/ul>\n\n<h4>1.30.2<\/h4>\n\n<ul>\n<li>Improve: The API key field now locks (read-only) as soon as a key is saved, so it can't be accidentally typed\/pasted over \u2014 Show, Test Key, and Remove remain fully usable. It unlocks again after Remove, ready for a new key.<\/li>\n<\/ul>\n\n<h4>1.30.1<\/h4>\n\n<ul>\n<li>Improve: Switched OpenAI from <code>gpt-4o<\/code> to <code>gpt-4o-mini<\/code> and Groq from <code>openai\/gpt-oss-120b<\/code> to <code>openai\/gpt-oss-20b<\/code> \u2014 lighter, cheaper, faster models that are plenty capable for store chat support. Claude (<code>claude-haiku-4-5<\/code>, already Anthropic's lightest tier) and Gemini (<code>gemini-3.6-flash<\/code>, already Google's fast\/light tier) were already on light models and are unchanged.<\/li>\n<\/ul>\n\n<h4>1.30.0<\/h4>\n\n<ul>\n<li>Add: Each AI provider card on the General Settings tab now shows the exact model it uses for live chat (e.g. <code>gemini-3.6-flash<\/code>, <code>openai\/gpt-oss-120b<\/code>), in small monospace text under the Free tier\/Paid badge \u2014 so a store owner can see at a glance what's actually running without digging through code.<\/li>\n<\/ul>\n\n<h4>1.29.11<\/h4>\n\n<ul>\n<li>Fix: Groq deprecated <code>llama-3.3-70b-versatile<\/code> (June 2026) for free\/developer-tier keys shortly after we switched to it, so Groq connections kept failing with a 404. Switched to <code>openai\/gpt-oss-120b<\/code>, Groq's own recommended replacement.<\/li>\n<li>Fix: Live Preview's header was rendering ~28px taller than intended \u2014 <code>min-height<\/code> wasn't set to <code>border-box<\/code>, so the 14px top+bottom padding was adding on top of it instead of being included in it. Now sized correctly.<\/li>\n<li>Fix: The \"Ask about products...\" preview input was losing its rounded-pill shape to WP core's own <code>input[type=\"text\"]<\/code> styling, which technically outranks a plain class selector in specificity. Prefixed the rule with <code>#winalt-admin-root<\/code> (the same fix already used for the color picker) so it reliably wins.<\/li>\n<\/ul>\n\n<h4>1.29.10<\/h4>\n\n<ul>\n<li>Fix: The Groq API key test request used a retired model (<code>llama-3.1-8b-instant<\/code>), causing a 404 \"model does not exist\" error when adding a Groq key even though the key itself was valid. Updated the test to use <code>llama-3.3-70b-versatile<\/code> \u2014 the same model actually used for live chat.<\/li>\n<li>Improve: Live Preview's chat body area is now taller (110px to 140px minimum) to match the header's own recent height increase, so the header no longer looks oversized relative to the rest of the widget.<\/li>\n<\/ul>\n\n<h4>1.29.9<\/h4>\n\n<ul>\n<li>Fix: Nudged the Live Preview's download icon up by 1px inside its circle \u2014 it's geometrically centered in its own viewBox, but the solid tray shape at the bottom made it visually read as sitting slightly too low.<\/li>\n<li>Improve: Increased the Live Preview header's height and the size\/opacity of its \"Powered by AI\" subtitle text (9px to 10.5px, .9 to full opacity) so it's no longer a blurry smudge at the widget's small scale.<\/li>\n<\/ul>\n\n<h4>1.29.8<\/h4>\n\n<ul>\n<li>Improve: Live Preview's assistant message now shows the same circular bot avatar the real chat widget displays beside every AI reply \u2014 it was missing from the preview entirely, so the preview couldn't be compared 1:1 against the live widget. Uses the same icon and background colour (the theme colour) as the real widget's avatar, and updates live as you change the theme colour.<\/li>\n<\/ul>\n\n<h4>1.29.7<\/h4>\n\n<ul>\n<li>Fix: The \"Don't have a key? Get a [Provider] API key\" hint no longer stays visible after a key is successfully added \u2014 it was referencing a CSS class (<code>winaltchat-key-help-text<\/code>) that didn't actually exist on the element, so the JS that was supposed to hide it silently did nothing. Also now hidden on initial page load for a provider that already has a key saved.<\/li>\n<li>Improve: Live Preview's minimize and close header buttons now use the same SVG icons as the real chat widget (a horizontal line and an X) instead of plain text glyphs, matching the download button which already used a real icon.<\/li>\n<\/ul>\n\n<h4>1.29.6<\/h4>\n\n<ul>\n<li>Fix: Updated the hardcoded Gemini model from <code>gemini-2.5-flash<\/code> to <code>gemini-3.6-flash<\/code> \u2014 Google retired 2.5-flash for new users, so connecting a Gemini API key was failing with a 404 \"model no longer available\" error.<\/li>\n<\/ul>\n\n<h4>1.29.5<\/h4>\n\n<ul>\n<li>Fix: The \"Need help with the WinaltChat plugin?\" footer card now uses square corners instead of rounded ones, since it sits flush against the bottom of the page and rounded corners made it look like a floating panel rather than a footer.<\/li>\n<li>Fix: Evened out the spacing above the Quick Reply Buttons card on the Chat Appearance tab \u2014 it previously had more gap above it (30px) than every other card-to-card gap on the page (18px), caused by the Typography\/Engagement row's internal field-spacing margin stacking on top of the next card's own top margin.<\/li>\n<\/ul>\n\n<h4>1.29.4<\/h4>\n\n<ul>\n<li>Fix: Removed the ~65px of bottom padding WordPress core reserves on the admin page body for its own footer text \u2014 since WinaltChat already clears that text on its own screens, the reserved space was left over as a bare gap below the \"Need help with the WinaltChat plugin?\" footer even after the footer itself was pinned to the bottom of the page.<\/li>\n<\/ul>\n\n<h4>1.29.3<\/h4>\n\n<ul>\n<li>Improve: On a settings tab short enough to leave empty space below the page content, the \"Need help with the WinaltChat plugin?\" footer now sits flush against the bottom of the browser window instead of leaving a block of bare background beneath it. No change on a tab tall enough to scroll \u2014 the footer stays right after the content, same as before.<\/li>\n<\/ul>\n\n<h4>1.29.2<\/h4>\n\n<ul>\n<li>Improve: WinaltChat's own admin screens no longer show any generic WordPress admin footer text (\"Thank you for creating with WordPress.\" \/ \"Version X.X\") \u2014 the plugin's own \"Need help with the WinaltChat plugin?\" support section already covers that role there. Every other wp-admin screen is unaffected.<\/li>\n<\/ul>\n\n<h4>1.29.1<\/h4>\n\n<ul>\n<li>Improve: The Live Preview panel on Chat Appearance now shows the Header Subtitle and Input Placeholder text, and a Quick Reply Buttons preview row, updating live as you type \u2014 matching how every other appearance field already previews.<\/li>\n<li>Fix: The Quick Reply Buttons card had a slightly larger top margin (20px) than every other card on the page (16px), an inconsistency now corrected.<\/li>\n<\/ul>\n\n<h4>1.29.0<\/h4>\n\n<ul>\n<li>New: The chat header subtitle (\"Powered by AI\") and the input box placeholder text (\"Ask about products...\") are now customizable from the Chat Appearance tab, alongside the Quick Reply Buttons added in v1.28.0.<\/li>\n<li>Improve: The Quick Reply Buttons list is now a compact, collapsible accordion (one line per button, click to expand) instead of a long stacked list of fields.<\/li>\n<li>Fix: WinaltChat's own admin screens now show plugin-branded footer text instead of the generic \"Thank you for creating with WordPress.\" message.<\/li>\n<\/ul>\n\n<h4>1.28.0<\/h4>\n\n<ul>\n<li>New: Quick Reply Buttons customization \u2014 the chat starter chips shown above the input (e.g. \"Popular products,\" \"Shipping,\" \"Browse all products\") can now be edited on the Chat Appearance tab, both the button label and the question it sends when clicked, without a code change or translation file. Existing stores keep the original English text until an owner actively edits a field.<\/li>\n<\/ul>\n\n<h4>1.27.11<\/h4>\n\n<ul>\n<li>Fix: Google fully retired the \"gemini-2.0-flash\" model. Updated every hardcoded reference (the default Gemini model used for chat, and the Gemini API key test request) to \"gemini-2.5-flash\".<\/li>\n<li>Fix: Every live chat notification email (new message, new lead, customer waiting) linked to \"admin.php?page=winalt-live-chats\" \u2014 an outdated page slug from before the admin dashboard was consolidated into tabs \u2014 breaking the \"Open Live Chats\" link in every notification email a store owner receives. Updated all three notification functions to the correct current slug, \"winaltchat\".<\/li>\n<\/ul>\n\n<h4>1.27.10<\/h4>\n\n<ul>\n<li>Fix: A rambling preamble joined to the real question with NO punctuation at all (not even a comma or ellipsis \u2014 one continuous run-on sentence, e.g. \"hey so I was walking through the mall thinking about getting into fitness do you have any adjustable dumbbells\") still produced a garbled search term with the actual product missing, after three prior fixes (v1.27.4, v1.27.8, v1.27.9) each only covered a message that had some specific separator present. Keyword extraction now finds the real question by its own opening phrase (\"do you\", \"is there\", etc.) wherever it falls in the message, instead of requiring a specific punctuation mark to isolate it \u2014 replacing the narrower comma-specific fallback with one that covers the comma case, the no-separator case, and everything in between.<\/li>\n<\/ul>\n\n<h4>1.27.9<\/h4>\n\n<ul>\n<li>Fix: The rambling-preamble fix in v1.27.4 only recognized an ellipsis typed as three-or-more literal ASCII periods (\"...\"). Phone keyboards and browsers routinely autocorrect that into the single real Unicode ellipsis character (\"\u2026\") instead \u2014 a message using that character (e.g. \"Hey so I was walking through the mall\u2026 do you have any adjustable dumbbells?\") still fell straight through as one clause and produced a garbled search term with the actual product missing, exactly as if the earlier fix didn't exist. Keyword extraction now also recognizes the real ellipsis character as a clause boundary, not just three literal dots.<\/li>\n<\/ul>\n\n<h4>1.27.8<\/h4>\n\n<ul>\n<li>Fix: v1.27.4's fix for a rambling preamble before the real question only covered the case where a sentence-ending punctuation mark (.\/!\/?) separated the two \u2014 a preamble joined to the question by a comma alone (e.g. \"hey so I was walking through the mall thinking about getting into fitness, do you have any adjustable dumbbells?\") still produced a garbled search term (\"fitnes hey so walking through mall\") with the actual product missing from the search entirely. Keyword extraction now also recognizes a comma directly followed by a question-opening phrase (\"do you\", \"is there\", etc.) as a clause boundary, isolating the real question the same way sentence punctuation already did.<\/li>\n<li>Fix: A word ending in a double \"s\" (\"fitness\", \"business\", \"glass\") was being mangled by the plural-stemming logic into a nonsense stem (\"fitness\" \u2192 \"fitnes\") that matched nothing in the catalog \u2014 the same class of bug \"wireless\" was already hand-fixed for, now fixed generally for any double-s word instead of one at a time.<\/li>\n<\/ul>\n\n<h4>1.27.7<\/h4>\n\n<ul>\n<li>Fix: \"this is too expensive, do you have a gaming headset?\" correctly found and searched for the Gaming Headset, but the sales-tactics layer then unconditionally overwrote that correct, product-specific answer with generic \"About the Price\" objection boilerplate (including the unverified claim \"Great reviews from other customers\", shown even for a product with zero reviews) purely because the message also contained \"expensive\". Objection handling is now skipped whenever the same message also explicitly asks about a product \u2014 it was only ever meant for a bare complaint continuing a conversation about a product already shown (e.g. \"that's too expensive\" with no new product asked for in the same breath).<\/li>\n<\/ul>\n\n<h4>1.27.6<\/h4>\n\n<ul>\n<li>Fix: v1.27.5's fix for the \"Can I buy 50 yoga mats at once? Do you have that many in stock?\" combo only addressed part of the bug \u2014 a purchase question immediately followed by a stock-check question (\"Do you have it\/that many in stock?\") could still fall to the generic \"which product?\" fallback, or (for messages like \"Can I buy a Countertop Dishwasher? Do you have it in stock?\") get misrouted into a color\/variant-availability response instead. Two separate causes: the stock-check phrasing was being misclassified as a color\/size \"variant\" question, stealing the message before purchase-intent handling ever ran; and the purchase flow's own product lookup matched the extracted product name as one exact phrase instead of matching each word individually, so a plural query like \"yoga mats\" never matched a singular title like \"Yoga Mat with Carrying Strap\".<\/li>\n<li>Fix: General two-question messages (e.g. \"Do you have any dishwashers? How much do they cost?\") were already unaffected by the above and remain unaffected.<\/li>\n<\/ul>\n\n<h4>1.27.5<\/h4>\n\n<ul>\n<li>Fix: A two-question message like \"Can I buy 50 yoga mats at once? Do you have that many in stock?\" fell through to a generic \"which product would you like?\" fallback \u2014 the trailing stock-availability question left leftover words merged into the product name query. The whole trailing question is now recognized and stripped as a unit.<\/li>\n<li>Fix: A long, rambling message before the real question (e.g. \"Hey so I was walking through the mall yesterday... do you have any adjustable dumbbells?\") could show the shopper a garbled, nonsensical search term. Product-name extraction now isolates the final sentence\/clause of a multi-sentence message instead of pulling keywords from the entire raw text \u2014 a more general fix than continuing to list individual filler words as they turn up.<\/li>\n<li>Fix: A variant\/color\/size question that named its own product (\"Does the Yoga Mat with Carrying Strap come in different colors?\") ignored the named product entirely and only ever looked at prior conversation history, sometimes answering about a stale, unrelated product or falling back to \"which product are you asking about?\" despite one being named. The message itself is now checked first.<\/li>\n<\/ul>\n\n<h4>1.27.4<\/h4>\n\n<ul>\n<li>Fix: \"thanks, one more thing - do you have any yoga mats?\" was still incorrectly reported as unavailable on stores where \"Yoga\" (or similar) is an actual product category\/tag \u2014 v1.27.3's fix only covered one of two places a message's keywords get extracted; this store's real catalog hit the other one, which was still missing \"thanks\"\/\"one\"\/\"more\"\/\"thing\" from its own separate stopword list. Also fixed a related, more general issue found in the same pass: a standalone hyphen in a message (e.g. \"...thing - do you...\") was tokenized as its own one-character keyword and could leak into any search, not just this one.<\/li>\n<\/ul>\n\n<h4>1.27.3<\/h4>\n\n<ul>\n<li>Fix: Re-testing v1.27.2's fix found \"do you have any yoga mats?\"-style questions (with \"any\") wrongly reported a real, in-stock product as unavailable \u2014 the word \"any\" survived into the extracted search keywords, and since a match requires every keyword to be found, nothing matched. \"any\" is now stripped, along with a couple of other filler words (\"one\", \"thing\", \"else\") in a related fallback path that could leak into the same user-facing message in other phrasings.<\/li>\n<\/ul>\n\n<h4>1.27.2<\/h4>\n\n<ul>\n<li>Fix: A message combining small talk or a  &hellip;<\/li>\n<\/ul>","raw_excerpt":"WinaltChat \u2013 AI chatbot and live human chat for WooCommerce. Find products, answer questions, connect customers to your support team.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/es-ar.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/298319","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/es-ar.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/es-ar.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/es-ar.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=298319"}],"author":[{"embeddable":true,"href":"https:\/\/es-ar.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/winalttechnologies"}],"wp:attachment":[{"href":"https:\/\/es-ar.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=298319"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/es-ar.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=298319"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/es-ar.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=298319"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/es-ar.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=298319"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/es-ar.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=298319"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/es-ar.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=298319"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}