{"id":298498,"date":"2026-04-17T11:34:15","date_gmt":"2026-04-17T11:34:15","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/twwim-ai\/"},"modified":"2026-05-06T22:46:00","modified_gmt":"2026-05-06T22:46:00","slug":"twwim-ai","status":"publish","type":"plugin","link":"https:\/\/ru.wordpress.org\/plugins\/twwim-ai\/","author":23477641,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"1.4.5","stable_tag":"1.4.5","tested":"6.9.4","requires":"6.0","requires_php":"8.0","requires_plugins":null,"header_name":"TWWIM AI: Voice-to-Action AI Agent for WooCommerce and WordPress","header_author":"TWWIM UG","header_description":"TWWIM AI-powered voice assistant for your WordPress site.","assets_banners_color":"5e80ac","last_updated":"2026-05-06 22:46:00","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/twwim.ai","header_author_uri":"https:\/\/www.twwim.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":280,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.2.1":{"tag":"1.2.1","author":"twwimai","date":"2026-04-17 11:33:55"},"1.2.2":{"tag":"1.2.2","author":"twwimai","date":"2026-04-18 21:52:50"},"1.3.0":{"tag":"1.3.0","author":"twwimai","date":"2026-04-21 19:18:12"},"1.3.1":{"tag":"1.3.1","author":"twwimai","date":"2026-04-21 21:03:19"},"1.3.2":{"tag":"1.3.2","author":"twwimai","date":"2026-04-22 09:15:16"},"1.4.0":{"tag":"1.4.0","author":"twwimai","date":"2026-04-28 09:38:16"},"1.4.5":{"tag":"1.4.5","author":"twwimai","date":"2026-05-06 22:46:00"}},"upgrade_notice":{"1.4.5":"<p>Resolves a wp-admin white-screen on sites running other React-based plugins, stabilises the embedded admin session, replaces the WooCommerce sync modal with an inline tab on the Knowledge page, and makes subscription cards theme-resilient. Safe upgrade, no data changes.<\/p>","1.4.0":"<p>Adds an in-product Legal Center (AGB \/ Privacy \/ AVV \/ Imprint \/ Cookie) with PDF download and a non-blocking re-acceptance banner, a profile-completeness gate with structured legal fields for valid invoices, an email-verification nag, automated invoice email delivery (Lexoffice PDF), pay-pending readiness modal, and multicurrency (EUR\/USD) pricing. Safe upgrade \u2014 no data loss; the dashboard backfills the profile prompt on first login after upgrade.<\/p>","1.3.2":"<p>Fixes the frontend widget being invisible on sites running caching or minification plugins that self-host external scripts. No settings change required. Safe upgrade.<\/p>","1.3.1":"<p>Fixes an invisible Terms\/Privacy consent checkbox on the registration form. Safe upgrade.<\/p>","1.3.0":"<p>Adds WooCommerce feature compatibility headers, an explicit Terms\/Privacy consent step on registration, and layout fixes for the embedded admin dashboard. Safe upgrade \u2014 no data changes.<\/p>","1.2.2":"<p>Listing text refresh only. No functional code changes. Safe upgrade.<\/p>","1.2.1":"<p>Plugin Check compliance: slug\/text domain aligned, input validation hardened, internal rename to Twwim_* prefix. Safe upgrade \u2014 no data changes.<\/p>","1.2.0":"<p>WordPress.org compliance release: CSS enqueued properly, source code bundled, external services fully documented.<\/p>","0.1.0":"<p>Initial release of TWWIM AI for WordPress.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3508836,"resolution":"128x128","location":"assets","locale":""},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3508836,"resolution":"256x256","location":"assets","locale":""}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3508836,"resolution":"1544x500","location":"assets","locale":""},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3508836,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.2.1","1.2.2","1.3.0","1.3.1","1.3.2","1.4.0","1.4.5"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3508836,"resolution":"1","location":"assets","locale":""},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3508836,"resolution":"2","location":"assets","locale":""},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3508836,"resolution":"3","location":"assets","locale":""},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3508836,"resolution":"4","location":"assets","locale":""},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3508836,"resolution":"5","location":"assets","locale":""},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3508836,"resolution":"6","location":"assets","locale":""}},"screenshots":{"1":"Login \u2014 sign in to your TWWIM AI account from inside the WordPress admin.","2":"Registration \u2014 create a TWWIM AI account directly from WordPress admin, no separate signup.","3":"Dashboard \u2014 command usage stats and plan overview, embedded in WP admin (DE\/EN).","4":"Subscription management \u2014 current plan, usage, Stripe-powered billing and payment history.","5":"Frontend on a WooCommerce shop \u2014 assistant dock bar in text-command mode.","6":"Frontend on a WooCommerce shop \u2014 full chat mode answering visitor questions in natural language."},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[2353,232494,2364,260536,286],"plugin_category":[34],"plugin_contributors":[260446],"plugin_business_model":[],"class_list":["post-298498","plugin","type-plugin","status-publish","hentry","plugin_tags-ai","plugin_tags-ai-agent","plugin_tags-chatbot","plugin_tags-voice-commands","plugin_tags-woocommerce","plugin_category-accessibility","plugin_contributors-twwimai","plugin_committers-twwimai"],"banners":{"banner":"https:\/\/ps.w.org\/twwim-ai\/assets\/banner-772x250.png?rev=3508836","banner_2x":"https:\/\/ps.w.org\/twwim-ai\/assets\/banner-1544x500.png?rev=3508836","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/twwim-ai\/assets\/icon-128x128.png?rev=3508836","icon_2x":"https:\/\/ps.w.org\/twwim-ai\/assets\/icon-256x256.png?rev=3508836","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/twwim-ai\/assets\/screenshot-1.png?rev=3508836","caption":"Login \u2014 sign in to your TWWIM AI account from inside the WordPress admin."},{"src":"https:\/\/ps.w.org\/twwim-ai\/assets\/screenshot-2.png?rev=3508836","caption":"Registration \u2014 create a TWWIM AI account directly from WordPress admin, no separate signup."},{"src":"https:\/\/ps.w.org\/twwim-ai\/assets\/screenshot-3.png?rev=3508836","caption":"Dashboard \u2014 command usage stats and plan overview, embedded in WP admin (DE\/EN)."},{"src":"https:\/\/ps.w.org\/twwim-ai\/assets\/screenshot-4.png?rev=3508836","caption":"Subscription management \u2014 current plan, usage, Stripe-powered billing and payment history."},{"src":"https:\/\/ps.w.org\/twwim-ai\/assets\/screenshot-5.png?rev=3508836","caption":"Frontend on a WooCommerce shop \u2014 assistant dock bar in text-command mode."},{"src":"https:\/\/ps.w.org\/twwim-ai\/assets\/screenshot-6.png?rev=3508836","caption":"Frontend on a WooCommerce shop \u2014 full chat mode answering visitor questions in natural language."}],"raw_content":"<!--section=description-->\n<p>TWWIM AI is an AI assistant for WordPress and WooCommerce sites. Visitors type or speak what they want, and the plugin does it on the page. It navigates to the right category, filters products, opens an article, adds a product to the cart, or answers a question about your catalogue in the language the visitor used.<\/p>\n\n<p>A normal chatbot replies with text. TWWIM AI replies with text and also performs the action the visitor asked for.<\/p>\n\n<p><strong>What a visitor can do<\/strong><\/p>\n\n<ul>\n<li>Say or type \"show me red running shoes under 80 euros\" and land on the filtered product list.<\/li>\n<li>Say \"add the black one to my cart\" on a product page. The plugin picks the right variation and adds it.<\/li>\n<li>Ask about products, shipping, returns, or policies. The answers come from your own site content.<\/li>\n<li>Navigate hands-free: \"go to checkout\", \"open the FAQ\", \"scroll to reviews\". Useful for touchscreens, kiosks, and visitors who can't type easily.<\/li>\n<li>Skip filter menus on a phone. Speaking a request replaces the dropdowns, sliders, and filter chips that are awkward to use on a small screen.<\/li>\n<li>Use whatever language they prefer. The reply comes back in the same language.<\/li>\n<\/ul>\n\n<p><strong>On mobile<\/strong><\/p>\n\n<p>Mobile shopping is where filters and faceted search get painful. Dropdowns cover half the screen, tap targets are small, typing a precise query on a soft keyboard is slow, and opening filters, picking values, and closing them again takes five or six taps. A visitor on their phone can instead say \"black kitchen aprons under 25 euros, organic cotton\" and land on the filtered list. One sentence replaces a handful of tap-throughs, which matters most on long-tail catalogues where the right product is buried four filters deep.<\/p>\n\n<p><strong>How it differs from a normal chatbot<\/strong><\/p>\n\n<ul>\n<li>It maps a spoken or typed request to a concrete on-page action, instead of stopping at a text reply.<\/li>\n<li>It reads from your own catalogue and pages, so it does not invent information.<\/li>\n<li>Input can be voice or text. Output is text. There is no synthesised voice talking back.<\/li>\n<\/ul>\n\n<p><strong>WooCommerce integration<\/strong><\/p>\n\n<p>When WooCommerce is active, the plugin adds:<\/p>\n\n<ul>\n<li>Automatic catalogue sync. On activation and on every product create, update or delete, the plugin sends product data (title, description, price, stock, SKU, categories, attributes, variations, images, URL) to your TWWIM AI knowledge base. No customer data and no order data is sent.<\/li>\n<li>Product-aware answers. Questions like \"do you have this in size 42\" or \"is this vegan\" are answered against the products you have synced.<\/li>\n<li>Variation handling. Variable products (colour, size, plan length) are resolved before a cart action.<\/li>\n<li>Category and filter navigation. A spoken request maps to the correct WooCommerce category URL with the right attribute filters applied.<\/li>\n<li>Stock awareness. If an item is out of stock, the reply says so and points to alternatives from the same category.<\/li>\n<\/ul>\n\n<p><strong>What you get as a store owner<\/strong><\/p>\n\n<ul>\n<li>Visitors who don't know the exact search term still land on the right product.<\/li>\n<li>Routine questions about shipping, returns, sizing and availability are handled from your own content, without a support ticket.<\/li>\n<li>Voice input and text output help visitors who can't type or prefer not to.<\/li>\n<li>A mobile shopping flow that does not rely on cramped filter UIs. Visitors describe what they want in one sentence instead of tapping through a filter drawer.<\/li>\n<li>One storefront that serves visitors in their own language, without a separate FAQ per locale.<\/li>\n<li>An admin dashboard embedded in WP admin for account, subscription, widget settings, and catalogue sync status.<\/li>\n<\/ul>\n\n<p><strong>Plugin features<\/strong><\/p>\n\n<ul>\n<li>Voice and text input. Text replies. Floating widget on public pages.<\/li>\n<li>Automatic DOM and catalogue understanding. No manual content mapping.<\/li>\n<li>Widget position configurable (bottom-right, bottom-left, top-right, top-left).<\/li>\n<li>Per-page exclusion by page or post ID.<\/li>\n<li>WooCommerce product sync on create, update, delete.<\/li>\n<li>Admin dashboard embedded in WP admin (account, subscription, settings, sync status).<\/li>\n<li>One-click enable and disable.<\/li>\n<li>Custom CDN URL for enterprise setups.<\/li>\n<\/ul>\n\n<p><strong>How it works<\/strong><\/p>\n\n<ol>\n<li>Install and activate the plugin.<\/li>\n<li>Open TWWIM AI in the WordPress admin sidebar, register or sign in, and create a tenant for this website. Creating the tenant generates the integration keys.<\/li>\n<li>The plugin picks up the keys and injects a small script into your site's <code>&lt;head&gt;<\/code> automatically. If WooCommerce is active, it also starts syncing your products to your TWWIM AI knowledge base.<\/li>\n<li>Visitors see a floating widget. They speak or type what they want.<\/li>\n<li>The plugin works out the intent, reads from your catalogue and pages, and either replies in text or performs the action on the current page.<\/li>\n<\/ol>\n\n<p><strong>Requirements<\/strong><\/p>\n\n<ul>\n<li>WordPress 6.0 or higher.<\/li>\n<li>PHP 8.0 or higher.<\/li>\n<li>WooCommerce 8.0 or higher for catalogue sync and cart actions. Optional. The widget works on any WordPress site.<\/li>\n<\/ul>\n\n<p>You do not need a TWWIM AI account before installing. After activation, open TWWIM AI in the WordPress admin, register or sign in, and create a tenant for this website. Creating the tenant generates your integration keys and the plugin starts injecting the assistant script on your frontend automatically.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin connects to the following services when the described features are used. By installing and configuring the plugin you acknowledge that data may be transmitted to these services under the conditions below.<\/p>\n\n<p><strong>TWWIM AI (<a href=\"https:\/\/www.twwim.ai\">twwim.ai<\/a>)<\/strong><\/p>\n\n<ul>\n<li><strong>When an administrator saves plugin settings<\/strong> \u2014 the plugin sends your integration key and saved settings (widget toggle, dock position, widget delivery URL, excluded page IDs) to your TWWIM AI account.<\/li>\n<li><strong>When a visitor interacts with the assistant widget<\/strong> \u2014 the plugin sends the visitor's query and the current page context to TWWIM AI for processing.<\/li>\n<li><strong>When WooCommerce product sync is enabled<\/strong> \u2014 on product create \/ update \/ delete, the plugin sends the affected product data (title, description, price, stock status, SKU, categories, images, URL) to TWWIM AI. No customer or order data is sent.<\/li>\n<li><strong>When any page with the assistant is loaded<\/strong> \u2014 the visitor's browser downloads the widget JavaScript from TWWIM AI.<\/li>\n<li>Terms of Service: <a href=\"https:\/\/www.twwim.ai\/en\/terms-of-service\">https:\/\/www.twwim.ai\/en\/terms-of-service<\/a><\/li>\n<li>Privacy Policy: <a href=\"https:\/\/www.twwim.ai\/en\/privacy-policy\">https:\/\/www.twwim.ai\/en\/privacy-policy<\/a><\/li>\n<li>GDPR notice: <a href=\"https:\/\/www.twwim.ai\/en\/gdpr\">https:\/\/www.twwim.ai\/en\/gdpr<\/a><\/li>\n<\/ul>\n\n<p><strong>Stripe (<a href=\"https:\/\/stripe.com\">stripe.com<\/a>)<\/strong><\/p>\n\n<ul>\n<li><strong>When an administrator opens the Billing \/ Subscription screen inside the TWWIM AI admin dashboard<\/strong> \u2014 <code>js.stripe.com<\/code> is loaded to securely tokenise payment card details. Card data goes directly from the browser to Stripe; it never passes through this plugin or TWWIM AI.<\/li>\n<li>Terms of Service: <a href=\"https:\/\/stripe.com\/legal\/ssa\">https:\/\/stripe.com\/legal\/ssa<\/a><\/li>\n<li>Privacy Policy: <a href=\"https:\/\/stripe.com\/privacy\">https:\/\/stripe.com\/privacy<\/a><\/li>\n<\/ul>\n\n<h3>Source code<\/h3>\n\n<p>The compiled JavaScript in <code>dist\/assets\/<\/code> is produced from the React\/TypeScript\ndashboard source bundled with this plugin under the <code>source\/<\/code> directory (Vite\n7 + React 19 + TanStack Router + Tailwind CSS 4).<\/p>\n\n<pre><code>source\/SOURCE.md documents the build toolchain and build-time environment\n<\/code><\/pre>\n\n<p>variables. All sources are licensed under GPLv2 or later. No obfuscation or\ncustom minification is used \u2014 the compiled assets are the default Vite\nproduction output.<\/p>\n\n<p>The dashboard imports three private workspace packages (shared API schemas,\ndomain entities, and UI components) that are maintained in the TWWIM internal\nmonorepo and reused across multiple products. Their sources are available on\nrequest \u2014 contact support@twwim.com.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>In WordPress admin, go to <strong>Plugins \u2192 Add New<\/strong>, search for <strong>TWWIM AI<\/strong>, click <strong>Install Now<\/strong>, then click <strong>Activate<\/strong>.<\/li>\n<li>A <strong>TWWIM AI<\/strong> menu item appears in the WordPress admin sidebar.<\/li>\n<li>Open <strong>TWWIM AI<\/strong> in the sidebar. Register a new account or sign in if you already have one.<\/li>\n<li>From the embedded dashboard, create a tenant for this website. Creating the tenant generates your integration keys. The plugin picks them up and starts injecting the assistant script on your frontend automatically.<\/li>\n<\/ol>\n\n<p><strong>Adjusting the widget<\/strong><\/p>\n\n<p>From the Settings screen you can toggle the widget on\/off, change its dock position, or hide it on specific pages by entering comma-separated page or post IDs in the \"Exclude Pages\" field.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"where%20do%20i%20get%20an%20integration%20key%3F\"><h3>Where do I get an integration key?<\/h3><\/dt>\n<dd><p>You don't need to visit a separate site. Open the TWWIM AI menu in your WordPress admin, register a new account (or sign in if you already have one), then create a tenant for this website from the embedded dashboard. Creating the tenant generates the integration keys and the plugin picks them up automatically.<\/p><\/dd>\n<dt id=\"can%20i%20control%20where%20the%20widget%20appears%3F\"><h3>Can I control where the widget appears?<\/h3><\/dt>\n<dd><p>Yes. You can set the dock position (bottom-right, bottom-left, top-right, top-left) and exclude specific pages or posts by their IDs.<\/p><\/dd>\n<dt id=\"does%20the%20widget%20work%20with%20woocommerce%3F\"><h3>Does the widget work with WooCommerce?<\/h3><\/dt>\n<dd><p>Yes. The DOM indexer reads your page content regardless of how it is generated, including WooCommerce product pages and shop listings. If WooCommerce is active, the plugin also offers optional product catalogue sync into the TWWIM AI knowledge base.<\/p><\/dd>\n<dt id=\"does%20it%20support%20multiple%20languages%3F\"><h3>Does it support multiple languages?<\/h3><\/dt>\n<dd><p>Yes. The AI assistant supports multiple languages and responds in the language the visitor uses.<\/p><\/dd>\n<dt id=\"what%20data%20is%20sent%20to%20twwim%20ai%20servers%3F\"><h3>What data is sent to TWWIM AI servers?<\/h3><\/dt>\n<dd><p>The widget sends visitor queries and page context to TWWIM AI for processing. No personally identifiable visitor information is collected or stored. See the <a href=\"https:\/\/www.twwim.ai\/en\/privacy-policy\">Privacy Policy<\/a> for details.<\/p><\/dd>\n<dt id=\"can%20i%20use%20a%20custom%20cdn%3F\"><h3>Can I use a custom CDN?<\/h3><\/dt>\n<dd><p>Yes. Enterprise customers can configure a custom CDN URL in the plugin settings to serve the widget script from their own domain.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.4.5<\/h4>\n\n<ul>\n<li>Fix: resolved a \"white screen\" regression on wp-admin pages where another active plugin loads its own copy of React (WPBakery, Slider Revolution, and several page builders). The TWWIM embedded admin is now isolated from the host page's React instance and renders correctly regardless of which other plugins are active.<\/li>\n<li>Improvement: more stable admin session inside wp-admin \u2014 when the embedded dashboard refreshes its token (long-lived sessions, sleep\/resume), it no longer briefly flips to the standalone website UI shape and can never lose its WordPress mode mid-session.<\/li>\n<li>Improvement: WooCommerce product sync controls now live inline as a tab on the Knowledge page in wp-admin, replacing the previous separate modal.<\/li>\n<li>Fix: subscription cards inside the embedded admin no longer pick up the active WordPress theme's button skin. Buttons render in TWWIM's brand colours and pill shape on every theme (verified against XStore, WPBakery, Slider Revolution).<\/li>\n<\/ul>\n\n<h4>1.4.0<\/h4>\n\n<ul>\n<li>New: in-product Legal Center inside the embedded admin dashboard \u2014 Terms (AGB), Privacy, Data-Processing Agreement (AVV), Imprint and Cookie Policy each available in German and English with one-click PDF download. A non-blocking banner surfaces any document that needs (re-)acceptance after a content update; per-document accept replaces the old bulk modal.<\/li>\n<li>New: profile-completeness gate inside the dashboard. After login the user is asked once to complete the company profile with structured legal fields (commercial register court \/ number split, VAT ID, tax number, managing director). The dashboard refuses to issue paid plans until the profile is complete so generated invoices stay legally valid.<\/li>\n<li>New: PERSONAL \u2192 Business upgrade flow inside the company settings \u2014 private accounts that grow into a business can convert without recreating the account.<\/li>\n<li>New: email-verification gate after registration with a persistent verify-nag and one-click \"Resend verification email\" action surfaced in the dashboard header.<\/li>\n<li>New: bilingual transition emails (legal-update and pay-pending readiness) are sent automatically when a relevant state change happens.<\/li>\n<li>New: Lexoffice invoice PDFs are emailed to the company's billing address as an attachment when <code>Company.billingEmail<\/code> is set.<\/li>\n<li>New: pay-pending readiness modal \u2014 when the user clicks a paid plan with an incomplete profile we now warn before navigating away rather than silently blocking the flow.<\/li>\n<li>Improved: multicurrency pricing (EUR\/USD) end-to-end in the Plans page, ROI calculator and checkout summary.<\/li>\n<li>Improved: structured German legal-form support (UG\/GmbH\/AG\/GbR\/KG\/OHG\/Einzelunternehmer) with channel-aware presentation in the WP build.<\/li>\n<li>Fixed: PDF download race in Chromium 147+ (the active object URL is now revoked after a short deferral so the browser does not abort the download).<\/li>\n<\/ul>\n\n<h4>1.3.2<\/h4>\n\n<ul>\n<li>Fixed: the frontend widget was invisible on sites using caching or minification plugins that self-host external JavaScript (WP-Optimize \"Include external files\", WP Rocket, Autoptimize, LiteSpeed Cache, Cloudflare Rocket Loader, etc.). Those plugins rewrote the widget script URL to a local cached copy without copying the widget's code-split chunks, so the loader 404'd on first import and the widget never rendered. The widget is now injected into the DOM at runtime via a tiny inline bootstrap, which HTML-scanning optimizers cannot see or rewrite. No settings change is needed \u2014 the fix is automatic on upgrade.<\/li>\n<\/ul>\n\n<h4>1.3.1<\/h4>\n\n<ul>\n<li>Fixed: the Terms of Service \/ Privacy Policy consent checkbox on the in-plugin registration form was rendered with an almost-invisible border on some admin colour schemes. Now uses an explicit visible border and the native accent colour for the checked state.<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>WooCommerce feature compatibility declared (custom_order_tables \/ cart_checkout_blocks \/ product_block_editor) \u2014 silences the \"incompatible plugins\" admin notice on modern WooCommerce setups. Plugin reads product data only; no order, cart\/checkout or product-editor surfaces are touched.<\/li>\n<li>Registration form now requires explicit acceptance of Terms of Service and Privacy Policy via an inline checkbox with localised legal links (EN\/DE).<\/li>\n<li>Admin notices (WooCommerce warnings, theme messages, updates nags) no longer push the embedded dashboard out of the viewport \u2014 they stack as toasts at the top-right of the TWWIM AI admin page so the SPA keeps its full height.<\/li>\n<li>Sidebar user profile and language switcher are no longer clipped below the WP admin bar \u2014 layout now correctly caps the embedded SPA inside the available viewport regardless of Tailwind <code>min-h-screen<\/code> rules.<\/li>\n<li>Admin stylesheet (<code>admin-layout.css<\/code>) is now cache-busted by file modification time so iterative CSS updates are picked up without manual browser cache-busting.<\/li>\n<li>Knowledge page no longer crashes when the URL carries a stale or malformed tenant id \u2014 the route self-heals by falling back to the first available tenant.<\/li>\n<\/ul>\n\n<h4>1.2.2<\/h4>\n\n<ul>\n<li>Plugin listing refreshed: positioned as a Voice-to-Action AI agent for WooCommerce and WordPress. Expanded Description with WooCommerce integration details, mobile-first benefit section, and what store owners gain.<\/li>\n<li>Installation instructions updated to reflect the in-plugin registration and tenant-creation flow. No external sign-up step. Integration key is generated when the tenant is created and picked up by the plugin automatically.<\/li>\n<li>External services disclosures tightened: removed internal service-name labels, consolidated to TWWIM AI and Stripe entries.<\/li>\n<li>No functional code changes.<\/li>\n<\/ul>\n\n<h4>1.2.1<\/h4>\n\n<ul>\n<li>Plugin slug aligned with text domain (<code>twwim-ai<\/code>) \u2014 resolves Plugin Check <code>TextDomainMismatch<\/code> errors.<\/li>\n<li>Renamed all internal PHP classes, constants, and helper functions to the <code>Twwim_<\/code> \/ <code>TWWIM_AI_<\/code> \/ <code>twwim_ai_<\/code> prefix. Legacy <code>Archer_<\/code> identifiers removed.<\/li>\n<li>Frontend widget now emits <code>&lt;script id=\"twwim-config\"&gt;<\/code> (legacy <code>#archer-config<\/code> still accepted by the CDN bundle for backward compatibility).<\/li>\n<li>Admin dashboard JS global renamed to <code>window.twwimAi<\/code> (legacy <code>window.archerAi<\/code> alias emitted for bundles predating the rename).<\/li>\n<li>Hardened REST <code>POST \/twwim\/v1\/settings<\/code> with per-field validation (URL validation via <code>esc_url_raw<\/code>, enum whitelist for dock position, boolean\/CSV-ID validation) and <code>is_array()<\/code> guard on the request body.<\/li>\n<li>Sanitized <code>$_SERVER<\/code> and <code>apache_request_headers()<\/code> fallbacks in the sync-secret auth path (<code>sanitize_text_field( wp_unslash(...) )<\/code>).<\/li>\n<li><code>uninstall.php<\/code> now cleans up four previously-missed options (<code>twwim_api_url<\/code>, <code>twwim_tenant_id<\/code>, <code>twwim_sync_secret<\/code>, <code>twwim_wc_missing<\/code>) and uses prefixed globals (<code>$twwim_options<\/code>, <code>$twwim_option<\/code>).<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Admin stylesheets moved to external CSS files (<code>assets\/admin-menu.css<\/code>, <code>assets\/admin-layout.css<\/code>) and enqueued via <code>wp_enqueue_style()<\/code> \/ <code>wp_add_inline_style()<\/code> \u2014 no more raw <code>&lt;style&gt;<\/code> tags.<\/li>\n<li>Full dashboard source code bundled under <code>source\/<\/code> for GPL compliance and WP.org reviewability.<\/li>\n<li>Expanded <code>== External services ==<\/code> documentation to cover TWWIM AI and Stripe.<\/li>\n<li>Updated legal URLs to their current locations on twwim.ai (Terms of Service, Privacy Policy, GDPR).<\/li>\n<li>Contributor handle corrected to the WordPress.org account owning this plugin.<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<li>AI voice and text assistant widget injection on frontend pages<\/li>\n<li>Admin dashboard (React SPA) embedded in WordPress admin panel<\/li>\n<li>REST API for plugin settings (integration key, CDN URL, dock position, DOM indexer, widget toggle, page exclusions)<\/li>\n<li>Configurable widget dock position<\/li>\n<li>Per-page widget exclusion by page\/post ID<\/li>\n<li>DOM indexer toggle for automatic page content understanding<\/li>\n<li>Custom CDN URL support<\/li>\n<\/ul>","raw_excerpt":"AI assistant for WordPress and WooCommerce. Visitors type or speak what they want, and the plugin does it on the page: navigate, filter, add to cart.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/298498","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=298498"}],"author":[{"embeddable":true,"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/twwimai"}],"wp:attachment":[{"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=298498"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=298498"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=298498"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=298498"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=298498"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=298498"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}