{"id":392794,"date":"2026-10-27T07:36:31","date_gmt":"2026-10-27T07:36:31","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/qafka-ai-assistant\/"},"modified":"2026-10-27T07:36:14","modified_gmt":"2026-10-27T07:36:14","slug":"qafka","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/qafka\/","author":23592999,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.3.1","stable_tag":"0.3.1","tested":"7.1.4","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"Qafka AI Assistant","header_author":"Qafka","header_description":"Add an AI assistant that answers visitors from your content and products \u2014 and, with WooCommerce, helps with orders and carts. Chat or voice.","assets_banners_color":"a1a19f","last_updated":"2026-10-27 07:36:14","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/qafka.com","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":66,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.3.1":{"tag":"0.3.1","author":"qafka","date":"2026-10-27 07:36:14","revision":3767941}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3767947,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3767947,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3767954,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3767954,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.3.1"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[2353,5707,2364,1104,286],"plugin_category":[41,45],"plugin_contributors":[288880],"plugin_business_model":[],"class_list":["post-392794","plugin","type-plugin","status-publish","hentry","plugin_tags-ai","plugin_tags-chat","plugin_tags-chatbot","plugin_tags-support","plugin_tags-woocommerce","plugin_category-communication","plugin_category-ecommerce","plugin_contributors-qafka","plugin_committers-qafka"],"banners":{"banner":"https:\/\/ps.w.org\/qafka\/assets\/banner-772x250.png?rev=3767954","banner_2x":"https:\/\/ps.w.org\/qafka\/assets\/banner-1544x500.png?rev=3767954","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/qafka\/assets\/icon-128x128.png?rev=3767947","icon_2x":"https:\/\/ps.w.org\/qafka\/assets\/icon-256x256.png?rev=3767947","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Qafka AI Assistant adds the Qafka assistant to your site. Visitors ask in\ntheir own words, by chat or voice, and get answers from your site's content\nand products. With WooCommerce, shoppers can also see their cart and add\nproducts to it, signed-in shoppers can check their orders, and guests can\nlook up an order with its number and e-mail.<\/p>\n\n<p>Connect the site to your Qafka account, enable the assistant, and it appears\non every page. The assistant's code is loaded from the Qafka CDN \u2014 no assets\nare stored on your server.<\/p>\n\n<p>Settings live under <strong>Settings \u2192 Qafka<\/strong>. Use <strong>Connect to Qafka<\/strong> to sign in\nand fill in the key automatically, or paste it by hand:<\/p>\n\n<ul>\n<li><strong>Enable widget<\/strong> \u2014 turn the widget on or off without removing the plugin.<\/li>\n<li><strong>API key<\/strong> \u2014 your Qafka publishable key (<code>qafka_pk_...<\/code>).<\/li>\n<li><strong>Language<\/strong> \u2014 auto-detect the visitor's language, or force Turkish\/English.<\/li>\n<li><strong>Opening mode<\/strong> \u2014 use the project's Chat Theme setting, or force the side\npanel (docks beside the page) or the popup (floats over the page) on this site.<\/li>\n<li><strong>Cursor navigation<\/strong> \u2014 when the assistant takes a visitor to another page,\na cursor moves to the matching link and clicks it.<\/li>\n<\/ul>\n\n<h3>External services<\/h3>\n\n<p>This plugin connects to services operated by Qafka. Terms of service:\nhttps:\/\/www.qafka.com\/terms - Privacy policy: https:\/\/www.qafka.com\/privacy<\/p>\n\n<h4>Qafka CDN (cdn.qafka.com)<\/h4>\n\n<p>Serves the widget loader script. When the widget is enabled, every front-end\npage loads <code>https:\/\/cdn.qafka.com\/v1\/qafka.js<\/code> from the visitor's browser, so\nthe visitor's IP address and standard request headers reach the CDN.<\/p>\n\n<h4>Qafka API (api.qafka.com)<\/h4>\n\n<p>Used by the widget to run the chat\/voice assistant. When a visitor sends a\nmessage, the message text, your publishable key and the page URL are sent from\nthe visitor's browser to the Qafka API. If the visitor asks about their own\norders or cart, that order or cart data is read from this site and sent from\nthe visitor's browser only at that moment. The Connect to Qafka flow also calls\n    https:\/\/api.qafka.com\/api\/v1\/connect\/wordpress\/exchange from your server once,\nsending a one-time code, the handshake code created by this site and your site\nURL to receive the publishable key.<\/p>\n\n<h4>Qafka dashboard (app.qafka.com)<\/h4>\n\n<p>When an administrator clicks <strong>Connect to Qafka<\/strong>, the browser is redirected to\n    https:\/\/app.qafka.com\/dashboard\/connect\/wordpress with this site's URL, a\none-time random code and the return address, so you can sign in and approve the\nconnection. No other data is sent to the dashboard by the plugin.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>qafka<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or install the zip\nvia Plugins \u2192 Add New \u2192 Upload Plugin.<\/li>\n<li>Activate the plugin.<\/li>\n<li>Go to <strong>Settings \u2192 Qafka<\/strong> and click <strong>Connect to Qafka<\/strong> (or paste your\nAPI key by hand), check <strong>Enable widget<\/strong>, and save.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"where%20do%20i%20get%20an%20api%20key%3F\"><h3>Where do I get an API key?<\/h3><\/dt>\n<dd><p>From your Qafka dashboard at https:\/\/qafka.com.<\/p><\/dd>\n<dt id=\"does%20this%20store%20any%20data%20on%20my%20server%3F\"><h3>Does this store any data on my server?<\/h3><\/dt>\n<dd><p>The plugin stores its settings (including your publishable key) in the\n    qafka_widget_settings option, plus a short-lived transient while you connect.\nIt does not store visitor conversations. The widget is served from the Qafka CDN\nand talks to Qafka from the visitor's browser; chat messages are processed by\nthe Qafka service (see External services below).<\/p><\/dd>\n<dt id=\"my%20site%20is%20behind%20a%20proxy%20or%20cdn.%20why%20do%20order%20lookups%20share%20a%20limit%3F\"><h3>My site is behind a proxy or CDN. Why do order lookups share a limit?<\/h3><\/dt>\n<dd><p>The guest order lookup is limited to 5 attempts per 15 minutes per visitor IP\nand per order number. The plugin trusts only the connection's <code>REMOTE_ADDR<\/code>,\nbecause proxy headers can be forged. Behind a trusted reverse proxy, return the\nreal visitor IP from the <code>qafka_lookup_client_ip<\/code> filter.<\/p><\/dd>\n<dt id=\"behind%20a%20cdn%20or%20proxy\"><h3>Behind a CDN or proxy<\/h3><\/dt>\n<dd><p>Order lookups are also limited to 60 per hour for the whole site, and cart adds\nto 60 per 15 minutes per IP. If your site is behind Cloudflare, every visitor\nmay otherwise share one address. Only on sites behind Cloudflare, add this to\na small custom plugin or your theme's functions.php:<\/p>\n\n<pre><code>add_filter( 'qafka_lookup_client_ip', array( 'Qafka_Rate_Limit', 'cloudflare_ip' ) );\n<\/code><\/pre>\n\n<p>Do not add it if the site is reachable without Cloudflare: the header can then be forged.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.3.1<\/h4>\n\n<ul>\n<li>Abuse limits: cart adds are limited per IP, the cart holds at most 50 different products, and order lookups have a site-wide ceiling.<\/li>\n<li>POST requests without an Origin header are refused.<\/li>\n<li>Optional Cloudflare helper for the client IP filter.<\/li>\n<\/ul>\n\n<h4>0.3.0<\/h4>\n\n<ul>\n<li>Connect to Qafka: one-click sign-in that fills in the API key.<\/li>\n<li>Order and cart helper endpoints for the assistant (WooCommerce).<\/li>\n<li>External services documented for wordpress.org.<\/li>\n<\/ul>\n\n<h4>0.2.0<\/h4>\n\n<ul>\n<li>Opening mode setting: force side panel or popup on this site.<\/li>\n<li>Cursor navigation setting.<\/li>\n<li>The loader is enqueued with wp_enqueue_script (async, footer) instead of printed by hand.<\/li>\n<li>Licensed under GPLv2 or later.<\/li>\n<li>Tested with WordPress 7.1.<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>Initial release: settings page + CDN loader embed.<\/li>\n<\/ul>","raw_excerpt":"Add an AI assistant that answers visitors from your content and products \u2014 and, with WooCommerce, helps with orders and carts. Chat or voice.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/392794","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=392794"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/qafka"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=392794"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=392794"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=392794"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=392794"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=392794"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=392794"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}