{"id":390831,"date":"2026-11-08T19:41:31","date_gmt":"2026-11-08T19:41:31","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/yazoh-ai-for-woocommerce\/"},"modified":"2026-11-08T19:40:56","modified_gmt":"2026-11-08T19:40:56","slug":"yazoh-ai-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/yazoh-ai-for-woocommerce\/","author":8919856,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.1.0","stable_tag":"0.1.0","tested":"7.1.4","requires":"6.5","requires_php":"7.4","requires_plugins":null,"header_name":"Yazoh AI for WooCommerce","header_author":"Yazoh","header_description":"Connects a WooCommerce store to Yazoh E-Commerce AI and keeps its categories, products, customers and orders in sync.","assets_banners_color":"","last_updated":"2026-11-08 19:40:56","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":113,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","changelog"],"tags":{"0.1.0":{"tag":"0.1.0","author":"bugtreat","date":"2026-11-08 19:40:56","revision":3791429}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3791463,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3791463,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.1.0"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[2353,232,1558,286],"plugin_category":[36,45],"plugin_contributors":[291541],"plugin_business_model":[],"class_list":["post-390831","plugin","type-plugin","status-publish","hentry","plugin_tags-ai","plugin_tags-analytics","plugin_tags-sync","plugin_tags-woocommerce","plugin_category-analytics","plugin_category-ecommerce","plugin_contributors-bugtreat","plugin_committers-bugtreat"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/yazoh-ai-for-woocommerce\/assets\/icon-128x128.png?rev=3791463","icon_2x":"https:\/\/ps.w.org\/yazoh-ai-for-woocommerce\/assets\/icon-256x256.png?rev=3791463","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>After connecting, the plugin sends the store's product categories, products,\ncustomers (users with the customer role) and orders - with their line items -\nto Yazoh, which uses them for its AI features.<\/p>\n\n<h4>External services<\/h4>\n\n<p>This plugin relies on one external service: Yazoh (https:\/\/www.yazoh.io), the\nAI service the store connects to. The plugin does not work without it. It\ncontacts no other service, loads no remote scripts, styles or fonts, and\nnothing is sent until an administrator chooses \"Connect to Yazoh\".<\/p>\n\n<p>All requests go from this site's server to https:\/\/www.yazoh.io (a developer\ncan point them at another Yazoh deployment with the <code>YAZOH_WC_API_BASE_URL<\/code>\nconstant, see Development). Every request carries this site's home address in\nits User-Agent header. After connecting, requests also carry the connection\ntoken Yazoh issued.<\/p>\n\n<p>What is sent, why, and when:<\/p>\n\n<ul>\n<li>Connecting (when an administrator presses \"Connect to Yazoh\"): the store's\nhome address, the address Yazoh returns to after sign-in, the plugin and\nWooCommerce versions, a random installation identifier and secret, and\none-time values that secure the sign-in (PKCE challenge, state, a hash of a\nbrowser-binding secret). The administrator's browser is then sent to Yazoh\nto sign in and choose the store; it carries the browser-binding secret in a\nform post. On return, a one-time code is exchanged for the connection token.\nPurpose: link this store to the administrator's Yazoh account.<\/li>\n<li>Connection status (when \"Refresh status\" is pressed) and disconnecting\n(when \"Disconnect\" is pressed, or the plugin is deleted while connected):\nthe connection token only. Purpose: show whether Yazoh still accepts the\nconnection, and revoke it.<\/li>\n<li>Synchronising (when \"Sync now\" or \"Full resync\" is pressed, then in the\nbackground through Action Scheduler until the run completes): the store\ncurrency, then categories, products, customers (users with the customer\nrole) and orders with their line items, as the WooCommerce REST API (v3)\nrepresents them - including customer names, email addresses, phone numbers\nand billing\/shipping addresses. Passwords, session tokens and\ncredential-like fields are removed before sending. Purpose: give Yazoh the\nstore data its AI features analyse.<\/li>\n<li>Yazoh Copilot (when a shop manager or administrator asks a question on\nWooCommerce &gt; Yazoh Copilot): the question, the conversation it continues,\nand, when given, feedback on an answer. Opening the screen lists earlier\nconversations from Yazoh. Purpose: answer questions about the store's data.<\/li>\n<li>Storefront shop assistant (when a shopper sends a message in the chat): the\ntext of the question only, sent by this site's server. No shopper identity,\ncookie, IP address or order data is sent, and Yazoh does not store the\nquestion or the answer. Purpose: answer product questions from the\nsynchronised catalogue.<\/li>\n<\/ul>\n\n<p>Yazoh is a service of Bugtreat Technologies. Its terms and privacy policy\napply to this data:<\/p>\n\n<ul>\n<li>Terms &amp; Conditions: https:\/\/www.yazoh.io\/terms<\/li>\n<li>Privacy Policy: https:\/\/www.yazoh.io\/privacy<\/li>\n<\/ul>\n\n<h4>Storefront shop assistant<\/h4>\n\n<p>Once the store is connected, a \"Chat with us\" button appears on storefront\npages. Shoppers can ask about products, prices and availability; answers come\nfrom Yazoh's shopper assistant and are grounded in this store's synchronised\ncatalogue. The browser talks only to this site (admin-ajax); the connection\ntoken never leaves the server.<\/p>\n\n<p>It is not shown while WooCommerce's \"Coming soon\" mode is on, except to shop\nmanagers and administrators. Order lookup is not part of the chat: shoppers are\nasked to contact the shop about orders. Developers can turn the widget off with\nthe <code>yazoh_wc_shop_assistant_enabled<\/code> filter.<\/p>\n\n<h4>Encryption<\/h4>\n\n<p>The connection token and installation secret are stored encrypted with\nlibsodium, from the PHP sodium extension or the sodium_compat library that\nWordPress includes. If neither is available the plugin pauses: it shows an\nadministrator notice, stores no credential, keeps any existing connection, and\ndoes not affect the storefront.<\/p>\n\n<h4>What is not synchronised<\/h4>\n\n<ul>\n<li>Product variations as separate records (a variable product lists its\nvariation ids).<\/li>\n<li>Stock per location (a product's own stock quantity and status are sent).<\/li>\n<li>Deletions: a product or order deleted in WooCommerce stays in Yazoh.<\/li>\n<\/ul>\n\n<h3>Usage<\/h3>\n\n<p>WooCommerce &gt; Yazoh AI.<\/p>\n\n<ul>\n<li>Connect to Yazoh (administrators): sign in to Yazoh and choose the store.<\/li>\n<li>Sync now: sends what changed since the last completed synchronisation.<\/li>\n<li>Full resync: sends everything again.<\/li>\n<\/ul>\n\n<p>Synchronisation runs in the background with Action Scheduler, one page at a\ntime, and resumes from where it stopped after a temporary failure. Operational\nlog lines (ids, counts and error codes only) are written to\nWooCommerce &gt; Status &gt; Logs, source \"yazoh-ai\".<\/p>\n\n<h3>Development<\/h3>\n\n<p>Set <code>define( 'YAZOH_WC_API_BASE_URL', 'https:\/\/yazoh.test' );<\/code> in wp-config.php\nto use a development Yazoh deployment. Yazoh refuses store addresses on\nloopback or private networks, so a store on localhost cannot complete a real\nconnection.<\/p>\n\n<p>Tests (PHP CLI, no Composer needed):<\/p>\n\n<ul>\n<li><code>php tests\/run.php<\/code> - unit tests with WordPress stand-ins and a scripted\nYazoh.<\/li>\n<li><code>php tests\/integration\/woocommerce.php [dump-dir]<\/code> - against the WordPress\ninstall this plugin sits in, inside one database transaction that is rolled\nback; outbound HTTP, mail and WooCommerce file logging are disabled for the\nrun. Requires every table to be InnoDB. Does not contact Yazoh.<\/li>\n<li><code>php tests\/contract\/backend-contract.php [--backend=DIR] [--bodies=dump-dir]<\/code>\n\n<ul>\n<li>runs the request bodies through the E-Commerce AI backend's own\nPushBatchValidator and WooCommercePushMapper (needs that checkout; skipped\notherwise).<\/li>\n<\/ul><\/li>\n<\/ul>\n\n<!--section=changelog-->\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>Connection to Yazoh (PKCE, browser binding, signed exchange).<\/li>\n<li>Push synchronisation of categories, products, customers and orders: full and\nincremental, bounded batches, idempotent retries, resumable runs.<\/li>\n<\/ul>","raw_excerpt":"Connects a WooCommerce store to Yazoh E-Commerce AI and keeps its categories, products, customers and orders in sync.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/390831","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=390831"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/bugtreat"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=390831"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=390831"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=390831"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=390831"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=390831"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=390831"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}