{"id":311274,"date":"2026-06-01T08:40:19","date_gmt":"2026-06-01T08:40:19","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/kwiro-ai-sales-agent-chatbot-for-woocommerce\/"},"modified":"2026-06-01T11:06:31","modified_gmt":"2026-06-01T11:06:31","slug":"kwiro-ai-sales-agent","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/kwiro-ai-sales-agent\/","author":23495219,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.2.14","stable_tag":"1.2.14","tested":"7.0","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"Kwiro \u2014 AI Sales Agent & Chatbot for WooCommerce","header_author":"Kwiro","header_description":"The AI sales agent for WooCommerce \u2014 not another support chatbot. Learns your catalog, recommends products, answers buying questions, and closes sales 24\/7. One click connects your store to the Kwiro dashboard.","assets_banners_color":"413933","last_updated":"2026-06-01 11:06:31","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/kwiro.ai","rating":0,"author_block_rating":0,"active_installs":0,"downloads":34,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.2.13":{"tag":"1.2.13","author":"kwiro","date":"2026-06-01 08:39:41"},"1.2.14":{"tag":"1.2.14","author":"kwiro","date":"2026-06-01 11:06:31"}},"upgrade_notice":{"1.2.13":"<p>WordPress.org review fix \u2014 every inline `` block moved out into a static asset and enqueued via <code>wp_enqueue_script<\/code> per directory guidelines. Bundles the tilde copy fix from 1.2.12. No behavior change for merchants.<\/p>","1.2.12":"<p>Copy fix in the Short Description \u2014 &quot;0% hallucination&quot; \u2192 &quot;~0% hallucination&quot; to match the body of the readme and stay honest about model behavior. No code changes. <em>This version was built but never uploaded to wp.org; the copy change ships in 1.2.13.<\/em><\/p>","1.2.11":"<p>WordPress.org submission cleanup \u2014 removes the temporary debug log written under <code>wp-content\/uploads\/<\/code> and tightens diagnostic output. No functional change for working installs. Safe drop-in.<\/p>","1.2.10":"<p>Adds temporary diagnostic logging that helped pin the last Block Checkout attribution bug. Removed cleanly in 1.2.11; recommend skipping straight to 1.2.11 from 1.2.9.<\/p>","1.2.9":"<p>Adds a redundant cookie-only attribution-save hook for the Block Checkout edge cases that 1.2.8 still couldn&#039;t catch + diagnostic logging so future regressions are debuggable. Required for accurate Sales reporting on Block Checkout. Safe drop-in.<\/p>","1.2.8":"<p>Required if you&#039;re on Block Checkout \u2014 registers <code>kwiro_attribution<\/code> as a Store API extension namespace so WC stops stripping it from the request, plus a cookie fallback. Order-attribution will be empty on Block Checkout until you upgrade.<\/p>","1.2.7":"<p>Fixes Block Checkout AI-attribution being silently dropped (wrong Store API hook + ms-vs-seconds timestamp mismatch). Required for accurate Sales reporting on any store running the default WC Block Checkout. Safe drop-in upgrade.<\/p>","1.2.6":"<p>Declares compatibility with WooCommerce HPOS (custom_order_tables) and Block Checkout (cart_checkout_blocks) so the WC admin &quot;incompatible plugins&quot; notice stops firing. No behavior change. Safe drop-in upgrade.<\/p>","1.2.5":"<p>Fixes Cash-on-Delivery \/ Bank Transfer orders not appearing on the Sales dashboard \u2014 the tracker now fires on <code>processing<\/code> \/ <code>on-hold<\/code> status transitions in addition to <code>payment_complete<\/code> and <code>completed<\/code>. Safe drop-in upgrade.<\/p>","1.2.4":"<p>Restores the post-sync finalize call so the widget&#039;s &quot;I know all N products&quot; greeting renders correctly after a fresh sync. Drop-in upgrade.<\/p>","1.2.3":"<p>Sync no longer depends on WP-CRON \u2014 <em>Sync Now<\/em> finishes typical catalogs in a single click and resumes from the last saved offset on retry, fixing the &quot;Syncing\u2026 50\/107&quot; stall on dev VPS \/ cron-disabled hosts. Safe drop-in upgrade.<\/p>","1.2.2":"<p>Fixes the &quot;domain already registered&quot; dead-end on plugin re-installs. Adds app.kwiro.ai disclosure to External services, and a widget that handles both v1.1 and v1.2 postMessage prefixes so resize + add-to-cart fire correctly. Safe drop-in upgrade.<\/p>","1.2.1":"<p>Plugin slug rename + display-name clarification (&quot;Kwiro \u2014 AI Sales Agent &amp; Chatbot for WooCommerce&quot;). Existing installs are migrated automatically \u2014 your API key, sync state, and consent stay in place, no reconfiguration needed.<\/p>","1.1.4":"<p>WordPress.org submission readiness \u2014 adds explicit consent before first connection, &quot;Disconnect this store&quot; button, External Services disclosure, and current WP 6.9 compatibility. No data behavior changes for already-connected stores.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3556415,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3556415,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3556415,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3556415,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.2.13","1.2.14"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3556415,"resolution":"1","location":"assets","locale":"","width":736,"height":592},"screenshot-10.png":{"filename":"screenshot-10.png","revision":3556415,"resolution":"10","location":"assets","locale":"","width":1440,"height":700},"screenshot-11.png":{"filename":"screenshot-11.png","revision":3556415,"resolution":"11","location":"assets","locale":"","width":1440,"height":760},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3556415,"resolution":"2","location":"assets","locale":"","width":960,"height":1440},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3556415,"resolution":"3","location":"assets","locale":"","width":960,"height":1440},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3556415,"resolution":"4","location":"assets","locale":"","width":828,"height":1792},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3556415,"resolution":"5","location":"assets","locale":"","width":960,"height":1440},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3556415,"resolution":"6","location":"assets","locale":"","width":960,"height":1440},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3556415,"resolution":"7","location":"assets","locale":"","width":960,"height":1440},"screenshot-8.png":{"filename":"screenshot-8.png","revision":3556415,"resolution":"8","location":"assets","locale":"","width":960,"height":1440},"screenshot-9.png":{"filename":"screenshot-9.png","revision":3556415,"resolution":"9","location":"assets","locale":"","width":960,"height":1440}},"screenshots":{"1":"The first thing your shoppers see \u2014 a friendly greeting bubble with two starter chips. Catalog-aware suggestion plus a \"Help me find something\" handoff to Guided Discovery.","2":"The first-open hero \u2014 a personalised \"Hey, I'm Marcus at FitGear Pro\" greeting, four catalog-aware suggestion cards, the multilingual hint (<em>\"Talk in your language \u2014 I speak 57\"<\/em>), and Guided Discovery primed below.","3":"AI Sales Agent in conversation \u2014 recommending specific SKUs from the live WooCommerce catalog with sale-aware product cards and add-to-bag.","4":"Same widget on mobile. 3 KB iframe, no theme CSS conflicts, fluid on every screen size.","5":"Guided Discovery \u2014 the live 3-step tap-friendly quiz that turns \"I don't know what to type\" into a real product recommendation. Unique to Kwiro.","6":"Dark mode \u2014 the widget adapts to your shopper's preferred colour scheme automatically.","7":"Multi-turn conversation \u2014 the AI keeps full catalog context across follow-ups. Ask for something cheaper or compare two products; recommendations update live with new SKUs.","8":"Multilingual \u2014 same widget, Spanish question, full Spanish reply with the same product context. 58 languages tested at 95%+ pass rate (<a href=\"https:\/\/kwiro.ai\/proof\">kwiro.ai\/proof<\/a>). Available on Pro and above.","9":"Customisation per store \u2014 different bot persona (\"Dex at TechZone\"), different brand accent (slate blue vs the FitGear terracotta), different starter cards from a different catalog. Same plugin, configured per-store from the Kwiro dashboard. Bot name, welcome copy, accent colour, starter chips and brand voice are all dashboard-managed so changes propagate live.","10":"WordPress plugin settings page with the explicit-consent disclosure (Plugin Directory Guideline 7). No data leaves your store until you click <em>Connect to Kwiro<\/em>.","11":"After consenting \u2014 the full customisation surface in WP admin. Connect to your Kwiro dashboard, paste an API key manually, manage widget appearance from the dashboard, run a sync, toggle the widget on or off."}},"plugin_section":[],"plugin_tags":[191735,282,2379,36992,286],"plugin_category":[45],"plugin_contributors":[265296],"plugin_business_model":[],"class_list":["post-311274","plugin","type-plugin","status-publish","hentry","plugin_tags-ai-chatbot","plugin_tags-ecommerce","plugin_tags-live-chat","plugin_tags-sales-agent","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-kwiro","plugin_committers-kwiro"],"banners":{"banner":"https:\/\/ps.w.org\/kwiro-ai-sales-agent\/assets\/banner-772x250.png?rev=3556415","banner_2x":"https:\/\/ps.w.org\/kwiro-ai-sales-agent\/assets\/banner-1544x500.png?rev=3556415","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/kwiro-ai-sales-agent\/assets\/icon-128x128.png?rev=3556415","icon_2x":"https:\/\/ps.w.org\/kwiro-ai-sales-agent\/assets\/icon-256x256.png?rev=3556415","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/kwiro-ai-sales-agent\/assets\/screenshot-1.png?rev=3556415","caption":"The first thing your shoppers see \u2014 a friendly greeting bubble with two starter chips. Catalog-aware suggestion plus a \"Help me find something\" handoff to Guided Discovery."},{"src":"https:\/\/ps.w.org\/kwiro-ai-sales-agent\/assets\/screenshot-2.png?rev=3556415","caption":"The first-open hero \u2014 a personalised \"Hey, I'm Marcus at FitGear Pro\" greeting, four catalog-aware suggestion cards, the multilingual hint (<em>\"Talk in your language \u2014 I speak 57\"<\/em>), and Guided Discovery primed below."},{"src":"https:\/\/ps.w.org\/kwiro-ai-sales-agent\/assets\/screenshot-3.png?rev=3556415","caption":"AI Sales Agent in conversation \u2014 recommending specific SKUs from the live WooCommerce catalog with sale-aware product cards and add-to-bag."},{"src":"https:\/\/ps.w.org\/kwiro-ai-sales-agent\/assets\/screenshot-4.png?rev=3556415","caption":"Same widget on mobile. 3 KB iframe, no theme CSS conflicts, fluid on every screen size."},{"src":"https:\/\/ps.w.org\/kwiro-ai-sales-agent\/assets\/screenshot-5.png?rev=3556415","caption":"Guided Discovery \u2014 the live 3-step tap-friendly quiz that turns \"I don't know what to type\" into a real product recommendation. Unique to Kwiro."},{"src":"https:\/\/ps.w.org\/kwiro-ai-sales-agent\/assets\/screenshot-6.png?rev=3556415","caption":"Dark mode \u2014 the widget adapts to your shopper's preferred colour scheme automatically."},{"src":"https:\/\/ps.w.org\/kwiro-ai-sales-agent\/assets\/screenshot-7.png?rev=3556415","caption":"Multi-turn conversation \u2014 the AI keeps full catalog context across follow-ups. Ask for something cheaper or compare two products; recommendations update live with new SKUs."},{"src":"https:\/\/ps.w.org\/kwiro-ai-sales-agent\/assets\/screenshot-8.png?rev=3556415","caption":"Multilingual \u2014 same widget, Spanish question, full Spanish reply with the same product context. 58 languages tested at 95%+ pass rate (<a href=\"https:\/\/kwiro.ai\/proof\">kwiro.ai\/proof<\/a>). Available on Pro and above."},{"src":"https:\/\/ps.w.org\/kwiro-ai-sales-agent\/assets\/screenshot-9.png?rev=3556415","caption":"Customisation per store \u2014 different bot persona (\"Dex at TechZone\"), different brand accent (slate blue vs the FitGear terracotta), different starter cards from a different catalog. Same plugin, configured per-store from the Kwiro dashboard. Bot name, welcome copy, accent colour, starter chips and brand voice are all dashboard-managed so changes propagate live."},{"src":"https:\/\/ps.w.org\/kwiro-ai-sales-agent\/assets\/screenshot-10.png?rev=3556415","caption":"WordPress plugin settings page with the explicit-consent disclosure (Plugin Directory Guideline 7). No data leaves your store until you click <em>Connect to Kwiro<\/em>."},{"src":"https:\/\/ps.w.org\/kwiro-ai-sales-agent\/assets\/screenshot-11.png?rev=3556415","caption":"After consenting \u2014 the full customisation surface in WP admin. Connect to your Kwiro dashboard, paste an API key manually, manage widget appearance from the dashboard, run a sync, toggle the widget on or off."}],"raw_content":"<!--section=description-->\n<h4>AI SALES AGENT FOR WOOCOMMERCE \u2014 TRAINED ON YOUR CATALOG, MEASURED IN REVENUE.<\/h4>\n\n<p>Your store gets visitors at 11 PM. They land with buying questions \u2014 <em>\"Will this fit a 5'8 frame?\"<\/em>, <em>\"What's the difference between these two?\"<\/em>, <em>\"Do you have it in red?\"<\/em> \u2014 and there's no one to answer. Cart abandoned. Sale lost. Tomorrow morning your conversion report shows the gap, but you can't see how big it really was.<\/p>\n\n<p>Kwiro is the first AI Sales Agent built specifically for WooCommerce. It reads your entire catalog, answers shoppers in 58 languages, and converts visitors into buyers \u2014 even at 3 AM. Independently tested at <strong>~0% hallucination across 887 real shopper scenarios<\/strong> (full results published at <a href=\"https:\/\/kwiro.ai\/proof\">kwiro.ai\/proof<\/a>). Not another live-chat plugin retrofitted with AI; built from the first line of code to <strong>recommend, qualify, and close<\/strong>.<\/p>\n\n<h4>KWIRO VS A GENERIC AI CHATBOT<\/h4>\n\n<p>Generic live-chat and chatbot plugins were built for <strong>support<\/strong> \u2014 answering tickets, deflecting questions, freeing up human agents. They got \"AI\" bolted on later. Kwiro inverts the design:<\/p>\n\n<ul>\n<li><strong>Catalog-grounded answers<\/strong> \u2014 every reply is anchored to retrieved products from your live WooCommerce catalog. Hallucinations don't just degrade UX, they kill trust. We test for them on every release.<\/li>\n<li><strong>Recommends specific SKUs<\/strong> \u2014 not <em>\"you might like our jewellery\"<\/em> but <em>\"the Gold Chain Bracelet, $129, in stock \u2014 add to bag\"<\/em>. Sale-aware, in-stock-aware, currency-correct.<\/li>\n<li><strong>Handles objections<\/strong> \u2014 <em>\"Is this good quality?\"<\/em>, <em>\"Will it fit?\"<\/em>, <em>\"What's your return policy?\"<\/em> \u2014 answered with your store's voice, not boilerplate.<\/li>\n<li><strong>Closes at 2 AM<\/strong> \u2014 first-token response in ~1.5 s, full reply in ~2.5 s, in any of 58 tested languages.<\/li>\n<li><strong>Measured in revenue, not tickets<\/strong> \u2014 direct attribution within 30 minutes of the chat, assisted attribution within 24 hours. Every dollar earned through chat shows up on your dashboard.<\/li>\n<\/ul>\n\n<h4>KEY FEATURES<\/h4>\n\n<ul>\n<li><strong>One-click connect<\/strong> \u2013 click <em>Connect to Kwiro<\/em> on the plugin settings page, sign in via magic link, products sync automatically. No API-key copy-paste, no CSV uploads, no manual setup.<\/li>\n<li><strong>Trained on your live catalog<\/strong> \u2013 every product, variant, price, and attribute syncs in 1\u20135 minutes for a typical store. New products and edits appear in seconds via WooCommerce hooks.<\/li>\n<li><strong>~0% hallucination on product data<\/strong> \u2013 887 scenarios tested across 33 categories and 58 languages, audited monthly. We won't pretend it'll always stay there \u2014 no AI is perfect \u2014 but every uncertain answer surfaces in your dashboard's Knowledge Gaps so you can review and teach. Full receipts at <a href=\"https:\/\/kwiro.ai\/proof\">kwiro.ai\/proof<\/a>.<\/li>\n<li><strong>Guided Selling<\/strong> \u2013 tap-friendly multiple-choice quiz for shoppers who don't know what to type. Hands off to chat with real product cards in 2\u20134 taps. No other WooCommerce chatbot does this.<\/li>\n<li><strong>5-layer memory that learns what converts<\/strong> [Growth] \u2013 product intelligence + store memory + winning conversations + cross-store network + outcome scoring. Each store grows its own playbook.<\/li>\n<li><strong>ROI Dashboard<\/strong> [Pro] \u2013 AI-attributed revenue, conversion rate, top questions, top recommended products. Direct + assisted attribution windows.<\/li>\n<li><strong>Memory Inspector<\/strong> [Growth] \u2013 pin, edit, or delete what the AI has learned. Knowledge Gaps surface unanswered questions so you can teach the AI in two clicks.<\/li>\n<li><strong>Forbidden Topics<\/strong> [Growth] \u2013 exclude product categories, brands, or topics from the AI. Default list already deflects support questions (refunds, order tracking, warranties) to your existing helpdesk.<\/li>\n<li><strong>58 languages, native quality<\/strong> \u2013 English (US, UK, Australian variants), Spanish, French, German, Italian, Portuguese, Dutch, plus 50 more. 95%+ pass rate on multilingual scenarios.<\/li>\n<li><strong>3 KB iframe widget<\/strong> \u2013 loads asynchronously, no theme CSS conflicts, no impact on Core Web Vitals. Mobile-first by default.<\/li>\n<li><strong>Clean uninstall<\/strong> \u2013 Disconnect button purges every locally stored credential in one click. Uninstall removes every option, transient, and cron event.<\/li>\n<\/ul>\n\n<h4>BUILT FOR WOOCOMMERCE, NOT BOLTED ON<\/h4>\n\n<ul>\n<li><strong>All product types supported<\/strong> \u2013 simple, variable, grouped, and external\/affiliate products with attributes (size, colour, etc.), categories, tags, sale prices, and stock status.<\/li>\n<li><strong>Cart-aware widget<\/strong> \u2013 knows what's in the shopper's basket and recommends complementary products that ship from your inventory.<\/li>\n<li><strong>Order webhooks<\/strong> \u2013 paid orders fire attribution lookups that link the conversation, the recommendation, and the sale.<\/li>\n<li><strong>Adaptive batch sync<\/strong> \u2013 auto-tunes batch size based on your host's response time, so even slow shared hosts complete a full catalog sync without timeouts.<\/li>\n<li><strong>Theme-agnostic<\/strong> \u2013 tested with Storefront, Astra, GeneratePress, OceanWP, Flatsome, Kadence, Divi, and more. The widget is an isolated iframe; your theme's CSS can't break it.<\/li>\n<\/ul>\n\n<h4>YOUR DATA, YOUR CHOICE<\/h4>\n\n<p>Kwiro is fully <strong>GDPR + CCPA + CPRA compliant<\/strong>. Customer chats are encrypted in transit (TLS 1.2+) and at rest (AES-256). Conversation data is hosted on AWS us-west-2 (Oregon), never sold, never used to train third-party models. <strong>No customer PII<\/strong> (name, email, address, payment) is ever sent to Kwiro.<\/p>\n\n<p>You can export every conversation to CSV, or delete a visitor's data on request, in a single click. Cancel and you keep everything.<\/p>\n\n<p>The plugin makes <strong>no network requests until you click <em>Connect to Kwiro<\/em><\/strong> \u2014 explicit user opt-in by design. Full disclosure of every endpoint and the data sent to each is in the <strong>External services<\/strong> section below.<\/p>\n\n<h4>PRICING \u2014 FOUNDING-MEMBER LAUNCH RATES<\/h4>\n\n<p>Plans differ by monthly conversation cap, language coverage, and advanced memory features. <strong>Subscribe at the launch rate and lock it forever, even after the public price increases.<\/strong><\/p>\n\n<ul>\n<li><strong>Free<\/strong> \u2013 $0\/mo, <strong>200 conversations\/month<\/strong>, English only, \"Powered by Kwiro\" badge, full conversation transcripts, community support.<\/li>\n<li><strong>Pro<\/strong> \u2013 launch <strong>$39\/mo<\/strong> (regular $79), <strong>2,000 conversations<\/strong>, all 58 languages, ROI dashboard, AI-attributed sales, Missing Products report, email support.<\/li>\n<li><strong>Growth (most popular)<\/strong> \u2013 launch <strong>$99\/mo<\/strong> (regular $199), <strong>5,000 conversations<\/strong>, Memory Inspector, Knowledge Gaps, custom prompts, priority queue, API access, 3 team seats.<\/li>\n<li><strong>Scale<\/strong> \u2013 launch <strong>$299\/mo<\/strong> (regular $599), <strong>25,000 conversations<\/strong>, white-label widget, multi-store management, priority infrastructure, 10 team seats, dedicated CSM.<\/li>\n<\/ul>\n\n<p>Overage on paid plans: <strong>$10 per extra 1,000 conversations<\/strong> \u2014 billed metered, never surprises. By default (1\u00d7 cap), your bill <strong>never exceeds your plan price<\/strong> even past your limit; the AI shifts to short, polite degrade-mode replies. Raise the cap to 2\u00d7\/3\u00d7\/5\u00d7 if you'd rather pay for full-quality replies past the limit. <strong>Kwiro never stops mid-chat.<\/strong><\/p>\n\n<h4>TRY IT WITHOUT INSTALLING<\/h4>\n\n<p>Open the <a href=\"https:\/\/kwiro.ai\">live demo at kwiro.ai<\/a> \u2014 chat with the AI Sales Agent on a real WooCommerce store, then read all 887 test scenarios at <a href=\"https:\/\/kwiro.ai\/proof\">kwiro.ai\/proof<\/a>. No signup. No card. 30 seconds.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin connects to Kwiro, a third-party SaaS service operated by Inteliweave (https:\/\/kwiro.ai), to deliver the AI sales agent functionality. Connection happens only after you click <strong>Connect to Kwiro<\/strong> on the plugin settings page \u2014 nothing is sent on activation.<\/p>\n\n<p>Once connected, the plugin communicates with the following endpoints on Kwiro's servers:<\/p>\n\n<ul>\n<li><strong><code>https:\/\/api.kwiro.ai\/api\/auth\/register<\/code><\/strong> \u2014 sent on first connect: your store domain, store name, and currency code. Used to create your Kwiro account and issue an API key.<\/li>\n<li><strong><code>https:\/\/api.kwiro.ai\/api\/auth\/verify<\/code><\/strong> \u2014 sent before each authenticated request: your API key. Used to issue a short-lived JWT.<\/li>\n<li><strong><code>https:\/\/api.kwiro.ai\/api\/auth\/link-status<\/code><\/strong> \u2014 sent every few minutes while the settings page is open: your API key. Used to flip the \"Connect to Kwiro\" panel to \"Connected\" once linking is complete in the dashboard.<\/li>\n<li><strong><code>https:\/\/api.kwiro.ai\/api\/auth\/begin-link<\/code><\/strong> \u2014 sent when you click <em>Connect to Kwiro<\/em>: a short-lived signed token used to sign you into the Kwiro dashboard and link this store to your account.<\/li>\n<li><strong><code>https:\/\/api.kwiro.ai\/api\/health<\/code><\/strong> \u2014 sent when you click <em>Test Connection<\/em>: confirms the API is reachable.<\/li>\n<li><strong><code>https:\/\/api.kwiro.ai\/api\/sync\/batch<\/code><\/strong> \u2014 sent when you click <em>Sync Now<\/em> and on every WP-CRON sync batch: product names, descriptions, prices, sale prices, stock status, categories, tags, attributes, and image URLs. Used to teach the AI what your store sells. <strong>No customer PII is ever included.<\/strong><\/li>\n<li><strong><code>https:\/\/api.kwiro.ai\/api\/sync\/product\/{id}<\/code><\/strong> \u2014 sent when you delete or trash a product in WooCommerce: just the product ID. Used to remove that product from your Kwiro catalog so the AI stops recommending it.<\/li>\n<li><strong><code>https:\/\/api.kwiro.ai\/api\/sync\/finalize<\/code><\/strong> \u2014 sent at the end of a full sync: the store's free-shipping threshold (if any). Used to trigger the final embedding pass and let the widget's MiniCart render the \"X away from free shipping\" nudge.<\/li>\n<li><strong><code>https:\/\/api.kwiro.ai\/api\/sync\/status<\/code><\/strong> \u2014 sent on demand: empty body. Used by the admin to read sync status from the cloud's authoritative copy.<\/li>\n<li><strong><code>https:\/\/api.kwiro.ai\/api\/sync\/event<\/code><\/strong> \u2014 sent on plugin activation, sync starts, batch completion, manual sync clicks, and sync errors: a structured event payload. Used by the Sync History page in the Kwiro dashboard.<\/li>\n<li><strong><code>https:\/\/api.kwiro.ai\/api\/sync\/sales-event<\/code><\/strong> \u2014 sent when an order moves to a paid status (<code>processing<\/code>, <code>on-hold<\/code>, <code>payment_complete<\/code>, or <code>completed<\/code>) and has an associated chat attribution: order ID, total, currency, the products in the order, the conversation ID, and the attribution type (direct or assisted). Used for the ROI \/ attribution dashboard. <strong>No customer name, email, address, or payment data is sent.<\/strong><\/li>\n<li><strong><code>https:\/\/widget.kwiro.ai\/<\/code><\/strong> \u2014 loaded as an iframe in your store's frontend (only when the widget is enabled and the visitor arrives on a non-checkout page). Carries the chat conversation between the visitor and the AI; chat messages are processed on Kwiro's servers and not stored locally on your WordPress install.<\/li>\n<li><strong><code>https:\/\/app.kwiro.ai\/<\/code><\/strong> \u2014 opened in a new browser tab when a connected store owner clicks the <strong>Open Kwiro dashboard \u2192<\/strong> button on the plugin settings page, or on the <em>Open Kwiro<\/em> link added to the WordPress Plugins list row. The plugin passes a short-lived signed link token in the URL (see <code>\/api\/auth\/begin-link<\/code> above) so the dashboard can finish linking this store to your Kwiro account. No customer PII is sent.<\/li>\n<\/ul>\n\n<p>Kwiro's terms of service and privacy policy describe how Kwiro handles the data above:<\/p>\n\n<ul>\n<li>Terms of Service: https:\/\/kwiro.ai\/terms<\/li>\n<li>Privacy Policy: https:\/\/kwiro.ai\/privacy<\/li>\n<li>Refund Policy: https:\/\/kwiro.ai\/refund-policy<\/li>\n<\/ul>\n\n<p>You can disconnect at any time using the <em>Disconnect this store<\/em> button on the plugin settings page. Disconnecting purges the locally stored API key and revokes the link with your Kwiro account.<\/p>\n\n<!--section=installation-->\n<p><strong>The fastest path \u2014 install from inside WordPress:<\/strong><\/p>\n\n<ol>\n<li>In WP admin go to <strong>Plugins \u2192 Add New<\/strong> and search for <em>Kwiro<\/em>.<\/li>\n<li>On the <em>Kwiro \u2014 AI Sales Agent &amp; Chatbot for WooCommerce<\/em> card, click <strong>Install Now<\/strong>, then <strong>Activate<\/strong>.<\/li>\n<li>Open <strong>WooCommerce \u2192 Kwiro<\/strong> in the sidebar.<\/li>\n<li>Click the orange <strong>Connect to Kwiro \u2192<\/strong> button on the consent panel and sign in via magic link (no password).<\/li>\n<li>Products sync automatically in the background \u2014 a typical 100-product catalog finishes in 1\u20135 minutes.<\/li>\n<\/ol>\n\n<p><strong>Alternative \u2014 manual upload:<\/strong> Download the ZIP from <a href=\"https:\/\/wordpress.org\/plugins\/kwiro-ai-sales-agent\/\">wordpress.org\/plugins\/kwiro-ai-sales-agent<\/a>, then in WP admin go to <strong>Plugins \u2192 Add New \u2192 Upload Plugin<\/strong> and choose the ZIP. Continue from step 3 above.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"is%20this%20a%20chatbot%20or%20a%20sales%20agent%3F\"><h3>Is this a chatbot or a sales agent?<\/h3><\/dt>\n<dd><p>A sales agent. Chatbots are built around FAQ\/ticket deflection; Kwiro is built around \"find me the right product, recommend a better one, close the sale\". Different prompts, different memory, different metrics.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20any%20woocommerce%20theme%3F\"><h3>Does it work with any WooCommerce theme?<\/h3><\/dt>\n<dd><p>Yes. The widget is an iframe so it can't be broken by your theme's CSS, and it ships responsive defaults for every screen size.<\/p><\/dd>\n<dt id=\"do%20i%20need%20to%20copy%20an%20api%20key%3F\"><h3>Do I need to copy an API key?<\/h3><\/dt>\n<dd><p>No. The <strong>Connect to Kwiro<\/strong> button does the linking automatically in one click. The API-key paste flow still exists for users who prefer it or are linking a store behind a VPN.<\/p><\/dd>\n<dt id=\"how%20does%20product%20sync%20work%3F\"><h3>How does product sync work?<\/h3><\/dt>\n<dd><p>The first sync runs in the foreground when you click <strong>Sync Now<\/strong> (so you see progress immediately), and subsequent batches run via WP CRON. Simple, variable, grouped, and external products all supported \u2014 including attributes, categories, images, and sale prices.<\/p><\/dd>\n<dt id=\"will%20this%20slow%20down%20my%20store%3F\"><h3>Will this slow down my store?<\/h3><\/dt>\n<dd><p>No. AI runs in the cloud, the widget is a lightweight iframe loaded asynchronously, and sync batches are small and throttled so they never hold up a page load.<\/p><\/dd>\n<dt id=\"what%20data%20leaves%20my%20server%3F\"><h3>What data leaves my server?<\/h3><\/dt>\n<dd><p>Product catalog only (names, descriptions, prices, images, categories, attributes) plus chat messages during an active conversation. No customer PII (name, email, address) is ever sent to Kwiro.<\/p><\/dd>\n<dt id=\"is%20it%20gdpr%20compliant%3F\"><h3>Is it GDPR compliant?<\/h3><\/dt>\n<dd><p>Yes. The widget sets one strictly-necessary functional cookie called <code>kwiro_conv<\/code> (24-hour TTL) that links a chat conversation to a checkout \u2014 without it the ROI\/attribution dashboard can't tell which conversations drove which sales. Strictly-necessary cookies are exempt from the consent-banner requirement under GDPR Article 5(3) of the ePrivacy Directive. No third-party advertising or tracking cookies are set. Conversation context also lives in sessionStorage (cleared when the tab closes) so the same data flows through the Block Checkout path. Store owners can export or delete all data via the Kwiro dashboard.<\/p><\/dd>\n<dt id=\"can%20i%20track%20revenue%20from%20ai%20conversations%3F\"><h3>Can I track revenue from AI conversations?<\/h3><\/dt>\n<dd><p>Yes. The ROI Dashboard tracks direct attribution (customer bought within 30 min of chatting) and assisted attribution (bought within 24h). Revenue, conversion rate, top products, top questions \u2014 all visible on the overview.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20my%20data%20if%20i%20disconnect%20or%20uninstall%20the%20plugin%3F\"><h3>What happens to my data if I disconnect or uninstall the plugin?<\/h3><\/dt>\n<dd><ul>\n<li><strong>Disconnect<\/strong> (the <em>Disconnect this store<\/em> button on the plugin settings page) \u2014 purges your locally stored API key, store ID, and consent flag. The chat widget stops appearing. Your Kwiro account, chat logs, and ROI history remain in the Kwiro dashboard so you can reconnect later without losing data.<\/li>\n<li><strong>Uninstall<\/strong> (Plugins \u2192 Delete in WP admin) \u2014 runs <code>uninstall.php<\/code>, which wipes every plugin option, transient, and scheduled cron event from your WordPress database. Same as Disconnect: server-side data in your Kwiro account is untouched.<\/li>\n<li><strong>Permanently delete everything<\/strong> (including server-side data) \u2014 open the Kwiro dashboard, go to Account \u2192 Delete account, or email <a href=\"mailto:support@kwiro.ai\">&#115;&#x75;&#x70;&#112;&#111;&#x72;t&#064;&#x6b;&#x77;&#105;&#114;&#x6f;.&#097;&#x69;<\/a>. We honour deletion requests within 7 days per our <a href=\"https:\/\/kwiro.ai\/privacy\">Privacy Policy<\/a>.<\/li>\n<\/ul><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.2.14<\/h4>\n\n<ul>\n<li><strong>Compat \u2014 tested with WordPress 7.0.<\/strong> WP 7.0 became the current stable shortly after 1.2.13 shipped, which made the directory show an \"Untested with your version of WordPress\" warning on the listing for every WP 7.0 shopper \u2014 a measurable drag on install conversion. Smoke-tested 1.2.13 against WP 7.0 (clean install, WP_DEBUG=true): activation clean, no deprecation notices in debug.log, Connect-to-Kwiro one-click link OK, settings page renders, widget injects on the storefront, full sync completes. No code changes \u2014 only the <code>Tested up to<\/code> field and Stable tag advance. Drop-in upgrade.<\/li>\n<\/ul>\n\n<h4>1.2.13<\/h4>\n\n<ul>\n<li><strong>WordPress.org review fix \u2014 enqueue all JavaScript via <code>wp_enqueue_script<\/code>.<\/strong> The plugin previously printed six inline <code>&lt;script&gt;<\/code> blocks via PHP (admin settings UI: grant-consent \/ disconnect \/ begin-link buttons and the API-key Show \/ Copy field; frontend: attribution capture and the widget iframe controller). The WordPress.org Plugins team flagged this in their R kwiro-ai-sales-agent\/kwiro\/11May26\/T2 review because the directory guidelines require all JS to be registered\/enqueued via <code>wp_register_script<\/code> + <code>wp_enqueue_script<\/code>. Moved every inline block into a standalone file under <code>assets\/js\/<\/code> (<code>admin-connect.js<\/code>, <code>sales-tracker.js<\/code>, <code>widget-injector.js<\/code>), enqueued via the appropriate <code>admin_enqueue_scripts<\/code> or <code>wp_enqueue_scripts<\/code> hook, with dynamic config (ajax URL, nonces, widget origin, position side, i18n strings) attached via <code>wp_add_inline_script<\/code> \u2014 the documented best practice for non-string data and the function the reviewer's email cited. No behavior change for merchants. Drop-in upgrade.<\/li>\n<li><strong>Pre-submission audit pass \u2014 readme accuracy.<\/strong> Did a full audit against the wp.org guidelines + common-issues list before re-submission. Fixed the External services section: corrected endpoint names that no longer matched the code (<code>api\/sync\/products<\/code> \u2192 <code>api\/sync\/batch<\/code>, <code>api\/sync\/orders<\/code> \u2192 <code>api\/sync\/sales-event<\/code>, <code>api\/sync\/log-event<\/code> \u2192 <code>api\/sync\/event<\/code>, <code>api\/auth\/connect-link<\/code> \u2192 <code>api\/auth\/begin-link<\/code>); added the four endpoints that were missing (<code>api\/sync\/finalize<\/code>, <code>api\/sync\/status<\/code>, <code>api\/sync\/product\/{id}<\/code> for product deletes, <code>api\/health<\/code> for connection testing, <code>api\/auth\/link-status<\/code>); corrected the <code>app.kwiro.ai<\/code> description (the plugin opens it in a new tab on click \u2014 it does <strong>not<\/strong> embed it as a WP admin iframe; the legacy AI Sales Dashboard submenu was a v1.0 attempt that never had a working cross-origin session and was already disabled in v1.1). Also fixed the GDPR FAQ \u2014 clarified that the plugin sets one strictly-necessary <code>kwiro_conv<\/code> cookie (24h TTL) for chat\u2192order attribution, which falls under the GDPR Article 5(3) ePrivacy strict-necessity exemption from the consent-banner requirement.<\/li>\n<li><strong>Dead code removal<\/strong> \u2014 deleted <code>includes\/class-dashboard-embed.php<\/code> (the in-admin iframe class referenced above). It was loaded by the autoloader but never instantiated; deleting it keeps the runtime surface tight and aligns the code with the readme description.<\/li>\n<li><strong>Minor i18n<\/strong> \u2014 wp_die() page titles in the activation requirements check are now translatable via <code>esc_html__<\/code> (PHP \/ WP \/ WC minimum version messages).<\/li>\n<li><strong>PHPCS + WPCS clean pass.<\/strong> The reviewer's checklist names PHPCS + WordPress Coding Standards alongside Plugin Check. Ran <code>phpcs --standard=WordPress<\/code> plus PHPCompatibilityWP (PHP 7.4+) over every PHP file: phpcbf auto-fixed 156 formatting violations (alignment, function-call signature whitespace, inline control structures), then I hand-fixed the remaining 22 (Yoda condition, short ternaries \u2192 full ternaries, empty catch blocks with explicit <code>unset($e)<\/code>, missing PHPDoc <code>@param<\/code> tags, inline comment end-chars). The two unavoidable false positives (file naming <code>class-{name}.php<\/code> vs <code>class-{full-prefixed-name}.php<\/code>, and WPCS not knowing about the WC capability <code>manage_woocommerce<\/code>) are documented + suppressed in a repo-only <code>.phpcs.xml.dist<\/code> config that ships in the repo but not in the wp.org zip (added to <code>.distignore<\/code>). Final state: zero errors, zero warnings across all 11 PHP files under both <code>WordPress<\/code> (full) and <code>PHPCompatibilityWP<\/code> standards.<\/li>\n<li><strong>Copy fix<\/strong> \u2014 Short Description now reads \"~0% hallucination\" instead of \"0% hallucination\" (carried forward from the held 1.2.12). No AI hits absolute zero across non-trivial test sets; the tilde makes the claim honest and defensible. Body of the readme (which already used \"~0%\") is unchanged.<\/li>\n<\/ul>\n\n<h4>1.2.12<\/h4>\n\n<ul>\n<li><strong>Copy fix<\/strong> \u2014 Short Description now reads \"~0% hallucination\" instead of \"0% hallucination\". No AI hits absolute zero across non-trivial test sets; the tilde makes the claim honest and defensible. Body of the readme (which already used \"~0%\") is unchanged. No behavior or functional changes. <em>Note: this version was built but never uploaded to wp.org; the copy change is included in 1.2.13.<\/em><\/li>\n<\/ul>\n\n<h4>1.2.11<\/h4>\n\n<ul>\n<li><strong>WordPress.org submission cleanup \u2014 strip diagnostic logging.<\/strong> Removed the temporary <code>kwiro-debug.log<\/code> file write under <code>wp-content\/uploads\/<\/code>, the <code>rest_api_init<\/code> request-tracker hook, and every <code>[kwiro] \u2026<\/code> diagnostic line that was added in 1.2.10 to chase the Block Checkout attribution bug. The bug is fixed (1.2.7 + 1.2.8 + 1.2.9), so the diagnostic surface is no longer needed in production. Kept one <code>error_log()<\/code> call gated behind <code>WP_DEBUG<\/code> \u2014 only fires on actual cloud-POST failures, so support can still see the underlying error message when something goes wrong without writing to a publicly-readable log file. Drop-in upgrade, no behaviour change for working installs.<\/li>\n<\/ul>\n\n<h4>1.2.10<\/h4>\n\n<ul>\n<li><strong>Diagnostic logging for Block Checkout attribution debugging.<\/strong> Added a temporary <code>wp-content\/uploads\/kwiro-debug.log<\/code> file + <code>rest_api_init<\/code> checkout-request tracker so we could pin down where Store API attribution was getting lost on real merchant traffic. Helped catch the <code>_update_order_from_request<\/code> hook firing without extensions populated \u2014 fix shipped in 1.2.9. Diagnostic surface is removed in 1.2.11; if you're upgrading from &lt; 1.2.10 you can skip this version.<\/li>\n<\/ul>\n\n<h4>1.2.9<\/h4>\n\n<ul>\n<li><strong>Belt-and-suspenders: cookie-only attribution save on <code>_order_processed<\/code>.<\/strong> 1.2.8 registered the Store API extension schema and added a cookie fallback inside <code>_update_order_from_request<\/code>, but headless-Chrome end-to-end testing showed the meta still wasn't sticking on some WC builds \u2014 likely because the order is reconstructed between hook fires on certain stacks. Added a redundant <code>woocommerce_store_api_checkout_order_processed<\/code> handler that runs cookie-only (doesn't need <code>$request<\/code>) and only acts if the upstream handler didn't already write the meta. Also added <code>error_log()<\/code> diagnostic lines on every code path so when this is reported next we have a paper trail in <code>wp-content\/debug.log<\/code> (or PHP error log) instead of guessing. Drop-in upgrade.<\/li>\n<\/ul>\n\n<h4>1.2.8<\/h4>\n\n<ul>\n<li><strong>Register <code>kwiro_attribution<\/code> as a Store API extension + add cookie fallback.<\/strong> End-to-end repro showed the storefront fetch interceptor was correctly attaching <code>extensions.kwiro_attribution.conversation_id<\/code> to the <code>\/wc\/store\/v1\/checkout<\/code> POST body \u2014 the JSON sent by the browser had it \u2014 but the <code>_kwiro_conversation_id<\/code> order meta was still empty after place-order. Root cause: WC's <code>CheckoutSchema<\/code> strips unregistered extension namespaces from <code>$request['extensions']<\/code> <em>before<\/em> <code>woocommerce_store_api_checkout_update_order_from_request<\/code> fires, so 1.2.7's hook saw an empty extensions array and returned early. We now register the namespace via <code>ExtendSchema::register_endpoint_data<\/code> on <code>woocommerce_blocks_loaded<\/code>. As a belt-and-suspenders safety net (some WC + caching combinations still drop the data even with the schema registered) the hook now also reads the <code>kwiro_conv<\/code> cookie out of <code>$_COOKIE<\/code> server-side when the extensions array comes up empty \u2014 same UUID validation as the JS write side. Drop-in upgrade.<\/li>\n<\/ul>\n\n<h4>1.2.7<\/h4>\n\n<ul>\n<li><strong>Block Checkout attribution actually reaches the order now.<\/strong> Two compounding bugs were swallowing AI-attribution on stores running the WC Block Checkout (the default since WC 8.3): (1) the plugin hooked <code>woocommerce_store_api_checkout_order_processed<\/code>, which only passes <code>$order<\/code> \u2014 so we had to re-parse <code>php:\/\/input<\/code> to read the request extensions, and that buffer was already consumed on a number of PHP\/WC stacks; and (2) the JS captured <code>Date.now()<\/code> (milliseconds) but PHP compared with <code>time()<\/code> (seconds), so the attribution window check was working by accident on direct orders and never firing for assisted orders. Switched to <code>woocommerce_store_api_checkout_update_order_from_request<\/code> (the hook that passes both <code>$order<\/code> and the <code>WP_REST_Request<\/code> \u2014 clean access to <code>extensions.kwiro_attribution<\/code>), normalized the JS write to seconds-since-epoch, and added a defensive ms\u2192seconds rescale in PHP for any orders that have legacy values stored. Drop-in upgrade.<\/li>\n<\/ul>\n\n<h4>1.2.6<\/h4>\n\n<ul>\n<li><strong>Declare HPOS + Block Checkout compatibility<\/strong> \u2014 clears the WooCommerce admin notice \"Kwiro is incompatible with currently enabled WooCommerce features.\" The plugin only touches orders through the WC CRUD API (<code>wc_get_order<\/code>, meta accessors, status hooks) and the Block Checkout's Store API hook is already wired for attribution, so this is purely a declaration \u2014 no behavior change. Drop-in upgrade.<\/li>\n<\/ul>\n\n<h4>1.2.5<\/h4>\n\n<ul>\n<li><strong>Cash-on-Delivery \/ Bank Transfer orders now report to Kwiro<\/strong> \u2014 sales attribution previously only fired on <code>woocommerce_payment_complete<\/code> (Stripe \/ PayPal) or on a manual transition to <code>completed<\/code>, so COD and BACS orders never reached the dashboard's Sales page until an admin marked them complete by hand. The tracker now also hooks <code>processing<\/code> and <code>on-hold<\/code> status transitions, with the existing <code>_kwiro_tracked<\/code> order-meta dedup ensuring online-paid orders don't double-fire. Drop-in upgrade.<\/li>\n<\/ul>\n\n<h4>1.2.4<\/h4>\n\n<ul>\n<li><strong>Sync correctly fires <code>sync\/finalize<\/code> on completion<\/strong> \u2014 restores the cloud-side hook that builds <code>store_intelligence<\/code> (which feeds the widget's \"I know all N products\" contextual greeting) and runs the final embedding pass. The 1.2.3 inline-loop refactor inadvertently dropped the call to the finalize handler, so freshly-synced stores rendered \"I know all 0 products here\" on the storefront until the cloud's hourly enrichment cron caught up. Drop-in upgrade \u2014 no DB or credential changes.<\/li>\n<\/ul>\n\n<h4>1.2.3<\/h4>\n\n<ul>\n<li><strong>Sync no longer depends on WP-CRON.<\/strong> Manual <em>Sync Now<\/em> now loops batches inline up to a 25-second AJAX budget, so a typical 100\u2013250 product catalog finishes in a single click without relying on the host's cron loop. Catalogs larger than the budget still hand off to <code>kwiro_batch_sync<\/code> for the rest, but if cron never fires the merchant can simply hit <em>Sync Now<\/em> again \u2014 the plugin resumes from the saved offset instead of restarting from zero. Fixes the \"Syncing\u2026 50\/107\" stall reported on dev VPS hosts and any prod host with WP-CRON disabled or rate-limited.<\/li>\n<\/ul>\n\n<h4>1.2.2<\/h4>\n\n<ul>\n<li><strong>Recoverable \"domain already linked\" error<\/strong> \u2014 when a domain that was previously connected to Kwiro is re-installing the plugin, the WP admin now shows a clear path forward instead of a dead-end. Fresh installs on a domain that was registered but never claimed by a Kwiro user now succeed automatically (no manual intervention). Domains that <em>are<\/em> claimed by a Kwiro account show a recoverable warning with the redacted email hint, \"Open Kwiro dashboard\" \/ \"Try again\" \/ \"Contact support\" actions, and clear copy guiding the merchant to retrieve their existing API key from Settings \u2192 API.<\/li>\n<li><strong>External Services disclosure<\/strong> \u2014 added <code>app.kwiro.ai<\/code> (the dashboard iframe loaded inside WP admin's <em>AI Sales Dashboard<\/em> submenu) so every external host the plugin connects to is listed in the readme's External services section, per Plugin Directory Guideline 7.<\/li>\n<li><strong>Widget \u2194 plugin postMessage compatibility<\/strong> \u2014 bundled widget now dispatches both the v1.2 <code>kwiro_*<\/code> and legacy v1.1 <code>aisales_*<\/code> prefixes for resize \/ add-to-cart \/ navigate \/ viewport events. Resolves a real-customer interop bug where opening the widget left the iframe wrapper at the closed-launcher size (chips invisible under the input bar) and add-to-cart silently no-op'd on v1.2 plugin installs.<\/li>\n<\/ul>\n\n<h4>1.2.1<\/h4>\n\n<ul>\n<li><strong>Plugin slug rename<\/strong> \u2014 <code>ai-sales-assistant<\/code> \u2192 <code>kwiro-ai-sales-agent<\/code> to match the product name on WordPress.org. Existing v1.1.x installs are migrated automatically on first activation: API key, store ID, public key, sync status, settings, and consent flag carry over without reconfiguration. CRON hooks (<code>aisales_batch_sync<\/code> \u2192 <code>kwiro_batch_sync<\/code>, weekly sync) are rescheduled in place.<\/li>\n<li><strong>Internal prefix alignment<\/strong> \u2014 <code>aisales_*<\/code> \u2192 <code>kwiro_*<\/code> across all options, transients, hooks, classes, AJAX action names, JS handles, and HTML element IDs. No user-visible change for fresh installs; v1.1.x upgrades are handled by the migration above.<\/li>\n<li><strong>Display name<\/strong> \u2014 \"Kwiro \u2014 AI Sales Agent &amp; Chatbot for WooCommerce\" (clarifies the product category in the WP admin Plugins list and the wp.org listing).<\/li>\n<\/ul>\n\n<h4>1.1.4<\/h4>\n\n<ul>\n<li><strong>WordPress.org submission readiness<\/strong> \u2014 explicit user-consent gate before the first connection to api.kwiro.ai (was: silent registration on settings-page open). Plugin now ships with no application\/test files, an up-to-date \"Tested up to\" header, the new <code>Requires Plugins: woocommerce<\/code> declaration (WP 6.5+), and the External Services disclosure required by Plugin Directory Guideline 7.<\/li>\n<li><strong>Privacy\/Terms links<\/strong> surfaced on the plugin settings screen.<\/li>\n<li><strong>Disconnect button<\/strong> added \u2014 purges the locally stored API key with a single click.<\/li>\n<\/ul>\n\n<h4>1.1.x and earlier<\/h4>\n\n<p>Pre-publication development versions. Highlights: One-click Connect flow (1.1.0), foreground first-sync (1.1.0), sync history logging (1.1.2), sync pagination + indexing fixes (1.1.1\u20131.1.3). Full notes available in the GitHub repository.<\/p>","raw_excerpt":"AI Sales Agent for WooCommerce \u2014 recommends products, answers shoppers, recovers carts. 58 languages, ~0% hallucination, 30-minute setup.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/311274","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=311274"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/kwiro"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=311274"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=311274"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=311274"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=311274"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=311274"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=311274"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}