{"id":309765,"date":"2026-05-12T10:20:02","date_gmt":"2026-05-12T10:20:02","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/flux-smart-chatbot\/"},"modified":"2026-05-21T14:11:27","modified_gmt":"2026-05-21T14:11:27","slug":"kanom-support-sales-chatbot","status":"publish","type":"plugin","link":"https:\/\/sl.wordpress.org\/plugins\/kanom-support-sales-chatbot\/","author":13068380,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.9.7","stable_tag":"1.9.7","tested":"7.0","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"Kanom Chatbot for Customer Support & Sales","header_author":"Sergi Mateo","header_description":"AI-powered chatbot for customer service, lead generation and sales. Hosted AI included \u2014 no API keys needed. Usage limits, chat logs, license activation and full customization.","assets_banners_color":"fdfdfd","last_updated":"2026-05-21 14:11:27","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wpsmartchatbot.com\/","header_author_uri":"https:\/\/profiles.wordpress.org\/sergimv\/","rating":5,"author_block_rating":0,"active_installs":0,"downloads":124,"num_ratings":1,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"sergimv","date":"2026-05-12 10:29:29"},"1.0.1":{"tag":"1.0.1","author":"sergimv","date":"2026-05-12 14:54:49"},"1.0.2":{"tag":"1.0.2","author":"sergimv","date":"2026-05-12 19:05:22"},"1.0.3":{"tag":"1.0.3","author":"sergimv","date":"2026-05-12 19:14:52"},"1.0.4":{"tag":"1.0.4","author":"sergimv","date":"2026-05-12 20:18:57"},"1.9.7":{"tag":"1.9.7","author":"sergimv","date":"2026-05-21 14:11:27"}},"upgrade_notice":[],"ratings":{"1":0,"2":0,"3":0,"4":0,"5":1},"assets_icons":{"icon-256x256.png":{"filename":"icon-256x256.png","revision":3529727,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3529837,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3529837,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0","1.0.1","1.0.2","1.0.3","1.0.4","1.9.7"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[2353,2364,358,337,286],"plugin_category":[45],"plugin_contributors":[262641],"plugin_business_model":[],"class_list":["post-309765","plugin","type-plugin","status-publish","hentry","plugin_tags-ai","plugin_tags-chatbot","plugin_tags-contact-form","plugin_tags-lead-generation","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-sergimv","plugin_committers-sergimv"],"banners":{"banner":"https:\/\/ps.w.org\/kanom-support-sales-chatbot\/assets\/banner-772x250.png?rev=3529837","banner_2x":"https:\/\/ps.w.org\/kanom-support-sales-chatbot\/assets\/banner-1544x500.png?rev=3529837","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/kanom-support-sales-chatbot\/assets\/icon-256x256.png?rev=3529727","icon_2x":"https:\/\/ps.w.org\/kanom-support-sales-chatbot\/assets\/icon-256x256.png?rev=3529727","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p><strong>Turn website visitors into qualified leads with a conversation, not a contact form.<\/strong><\/p>\n\n<p>Kanom Chatbot is an AI assistant for WordPress that chats with your visitors, qualifies them, asks for their email at the right moment, and emails you the transcript \u2014 so your sales team can follow up while the intent is fresh. Every captured lead lands in your admin dashboard with the visitor's name, email, what they actually wanted, and the page they were on.<\/p>\n\n<p>The AI is trained on your real business: products, prices, policies, FAQ, even your existing pages (auto-indexed). It quotes from your actual content instead of inventing answers, so every reply is on-brand and accurate. Static contact forms convert at ~2%. A good conversation converts much higher.<\/p>\n\n<p><strong>Set up in two minutes. No API keys, no separate accounts, no per-message billing surprises. Start free with 30 conversations per month, no credit card required.<\/strong><\/p>\n\n<p>Beyond lead generation, the same chatbot handles 24\/7 customer support, e-commerce pre-sale questions, FAQ deflection, and onboarding \u2014 but the headline reason to install it is that every chat is a chance to capture a lead, and Kanom turns those chats into a structured pipeline.<\/p>\n\n<h4>Use cases<\/h4>\n\n<p><strong>Lead Generation (the headline)<\/strong> \u2014 Every visitor who chats is a chance to become a lead. The AI qualifies them through natural conversation, asks for an email at the right moment (you decide when \u2014 \"after they show purchase intent\", \"when they ask about pricing\", \"after 3 questions\"), and the moment they type it, Kanom:<\/p>\n\n<ol>\n<li>Saves a structured lead row: email, name, intent, source page, full transcript<\/li>\n<li>Emails you the conversation so you can follow up while it's hot<\/li>\n<li>Surfaces the lead in the Leads admin tab with one-click CSV export<\/li>\n<li>Counts toward your conversion rate analytics so you can see what's working<\/li>\n<\/ol>\n\n<p>A good conversation converts 5\u201310\u00d7 better than a static contact form. Kanom turns that into a measurable pipeline, not a vague \"we got more emails this month\".<\/p>\n\n<p><strong>24\/7 Customer Support<\/strong> \u2014 Deflect repetitive tickets (shipping status, returns, account questions, password resets) before they reach your inbox. Visitors get answers in their own language, day or night.<\/p>\n\n<p><strong>E-commerce Sales Assistant<\/strong> \u2014 Answer pre-sale questions right on the product page (sizing, materials, shipping windows, compatibility), recommend related products, and nudge visitors who linger on the cart toward checkout. WooCommerce-aware: the bot knows what's in the visitor's cart when they open chat.<\/p>\n\n<p><strong>FAQ Automation<\/strong> \u2014 Turn a long, scrollable FAQ page into a conversation. Visitors ask in their own words; the chatbot answers from your existing help content and cites the source.<\/p>\n\n<p><strong>Landing-page focus<\/strong> \u2014 Place <code>[kanom_chatbot prompt=\"On this page, focus on shipping and returns for the Pro Widget\"]<\/code> on a specific page to scope the bot's behavior just for that page, without rewriting your whole AI Agent prompt. Great for paid-ad landing pages where you want the bot to push one specific outcome.<\/p>\n\n<p><strong>User Onboarding<\/strong> \u2014 Meet new users inside your product, answer setup questions in real time, and guide them to their first win without scheduling a single onboarding call.<\/p>\n\n<h4>Features<\/h4>\n\n<p><strong>Lead capture \u2014 the core of the plugin<\/strong><\/p>\n\n<ul>\n<li>Email + name + intent + page URL extracted from every conversation that contains an email<\/li>\n<li>Live email notification to your inbox with the full transcript<\/li>\n<li>Leads admin tab with date \/ email search, transcript viewer, CSV export<\/li>\n<li>Lead conversion rate tracked alongside other KPIs<\/li>\n<li>Free plan emails the first 5 leads\/month; the rest still capture to the database (upgrade for unlimited live emails)<\/li>\n<li>Weekly digest email with last week's leads, top topics, and which pages converted<\/li>\n<\/ul>\n\n<p><strong>The AI itself<\/strong><\/p>\n\n<ul>\n<li>Hosted AI included \u2014 no API keys, no third-party accounts, no per-message billing surprises<\/li>\n<li>Optional bring-your-own-key (OpenAI, Anthropic, Google) via the WordPress AI Client + Connectors API for unlimited messages<\/li>\n<li>Custom AI prompt builder: business name, FAQ, tone of voice, sales instructions, lead capture instructions, guardrails<\/li>\n<li>Site-aware answers: bot quotes from your real pages, posts, and products \u2014 no manual upload, auto-indexed on save<\/li>\n<li>Optional vector retrieval (semantic matching, not just keywords) \u2014 catches \"delivery\" \u2194 \"shipping\" and works across languages<\/li>\n<\/ul>\n\n<p><strong>Engagement<\/strong><\/p>\n\n<ul>\n<li>Proactive triggers: auto-open the chat after N seconds, at scroll depth %, or on exit intent \u2014 with a custom greeting<\/li>\n<li>WooCommerce-aware: bot knows what's in the visitor's cart when they open chat (item names + quantities, no stale prices)<\/li>\n<li>Per-page overrides: <code>[kanom_chatbot prompt=\"On this page, focus on shipping questions\"]<\/code> for landing-page-specific behavior<\/li>\n<\/ul>\n\n<p><strong>Analytics + reporting<\/strong><\/p>\n\n<ul>\n<li>Dashboard: conversations, lead conversion rate, top topics, top pages, daily-volume + time-of-day charts<\/li>\n<li>Monday-morning HTML email digest summarising last week's chats, leads, and what worked<\/li>\n<li>\"Potentially unresolved\" detection so you can spot questions the bot couldn't answer<\/li>\n<\/ul>\n\n<p><strong>Widget<\/strong><\/p>\n\n<ul>\n<li>Floating chat widget with custom colors, logo, avatar, name, greeting, position<\/li>\n<li>Hide on mobile if desired<\/li>\n<li>Shortcode <code>[kanom_chatbot]<\/code> for embedding on specific pages<\/li>\n<\/ul>\n\n<p><strong>Privacy + compliance<\/strong><\/p>\n\n<ul>\n<li>GDPR-friendly: optional chat storage, IP anonymization, privacy notice<\/li>\n<li>Chat history retention: off, 30, 90, 180, or 365 days<\/li>\n<li>\"Delete all chats\" cascades to leads \u2014 every byte of PII goes when you say so<\/li>\n<li>Per-post exclude toggle: opt out specific pages from the bot's knowledge base<\/li>\n<li>One-time consent banner: hosted AI doesn't make any external HTTP calls until the admin explicitly clicks \"Activate\"<\/li>\n<\/ul>\n\n<p><strong>Operations<\/strong><\/p>\n\n<ul>\n<li>Per-IP rate limiting, nonce-protected REST endpoints, session-token authorization<\/li>\n<li>Admin chat logs with filters, transcript view, CSV export<\/li>\n<li>Built-in Support tab \u2014 submit questions\/bugs directly to the Kanom team<\/li>\n<li>Monthly usage limits (Free 30 conversations\/mo, Starter $19\/mo through Enterprise $199\/mo)<\/li>\n<\/ul>\n\n<h4>External services<\/h4>\n\n<p>This plugin requires our hosted AI service to function. There is no option to run it without it \u2014 the AI provider key is held server-side and never ships with the plugin.<\/p>\n\n<p>The plugin communicates with our hosted service at <strong>wpsmartchatbot.com<\/strong> (operated by us). All routes are sub-paths of <code>https:\/\/wpsmartchatbot.com\/wp-json\/wpsc-saas\/v1\/<\/code>:<\/p>\n\n<ul>\n<li><code>\/trial<\/code> \u2014 issues a free license. Sent: site URL, admin email. Called the first time a visitor sends a chat message (not on activation).<\/li>\n<li><code>\/activate<\/code>, <code>\/deactivate<\/code> \u2014 register\/deregister this site against a paid license. Sent: license key, site URL.<\/li>\n<li><code>\/validate<\/code> \u2014 daily license re-check. Sent: license key, site URL.<\/li>\n<li><code>\/plans<\/code> \u2014 fetches the public plan catalog for the License page. No personal data sent.<\/li>\n<li><code>\/usage<\/code> \u2014 reports the local monthly message count. Sent: license key, site URL, message count.<\/li>\n<li><code>\/chat<\/code> \u2014 proxies the visitor's conversation to a third-party AI provider (currently DeepSeek). Sent: license key, site URL, the chat messages, and the AI prompt you configured (business name, FAQ, tone, etc.).<\/li>\n<li><code>\/checkout\/{plan}<\/code> \u2014 opens a Stripe checkout link in a new tab when an admin upgrades.<\/li>\n<\/ul>\n\n<p>Data sent depends on the route \u2014 see the per-route list above. The visitor's chat messages and your AI prompt are forwarded to the AI provider only via the <code>\/chat<\/code> route, and only when a visitor actually sends a message.<\/p>\n\n<ul>\n<li>Service endpoint: https:\/\/wpsmartchatbot.com\/wp-json\/wpsc-saas\/v1<\/li>\n<li>Terms of Service: https:\/\/wpsmartchatbot.com\/terms<\/li>\n<li>Privacy Policy: https:\/\/wpsmartchatbot.com\/privacy<\/li>\n<\/ul>\n\n<p>By installing and activating this plugin, you agree to the Terms of Service and Privacy Policy linked above.<\/p>\n\n<h4>Roadmap<\/h4>\n\n<ul>\n<li>Team accounts &amp; multiple chatbots per account<\/li>\n<li>WhatsApp integration<\/li>\n<li>Human handoff (transcript \u2192 admin's inbox with reply-to so support replies go back to the visitor by email)<\/li>\n<li>CRM webhook (push captured leads to Zapier \/ Make \/ your CRM of choice)<\/li>\n<li>Deeper WooCommerce integration (order history, recently-viewed, wishlist)<\/li>\n<li>A\/B testing for proactive triggers (test different opener messages, see which converts more leads)<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>kanom-support-sales-chatbot<\/code> folder to <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate from the Plugins menu. A free license is issued automatically the first time a visitor sends a chat message \u2014 no contact with our servers happens before that.<\/li>\n<li>Go to <strong>Kanom Chatbot \u2192 AI Agent<\/strong> to fill in your business info and prompt, then <strong>Design<\/strong> to customize the widget. Optional: <strong>Knowledge<\/strong> to index your existing pages so the bot can quote them.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"is%20it%20really%20free%3F\"><h3>Is it really free?<\/h3><\/dt>\n<dd><p>Yes. Every site gets 30 AI messages per month at no cost, with no credit card required and no time limit. Paid plans (Starter, Growth, Scale, Enterprise) unlock larger monthly limits and more sites per license. You can stay on the free plan as long as you want.<\/p><\/dd>\n<dt id=\"do%20i%20need%20to%20bring%20my%20own%20openai%20%2F%20anthropic%20%2F%20deepseek%20api%20key%3F\"><h3>Do I need to bring my own OpenAI \/ Anthropic \/ DeepSeek API key?<\/h3><\/dt>\n<dd><p>No \u2014 and that's the default. The AI provider key is held server-side on our hosted service. You install the plugin, activate it, and the chatbot is live with 30 free messages every month. No separate accounts to create, no keys to manage, no billing with a third party. We currently use DeepSeek behind the scenes; the model may change as better options become available.<\/p><\/dd>\n<dt id=\"can%20i%20plug%20in%20my%20own%20ai%20provider%20key%20for%20unlimited%20messages%3F\"><h3>Can I plug in my own AI provider key for unlimited messages?<\/h3><\/dt>\n<dd><p>Yes, optionally. The plugin integrates with the <strong>WordPress AI Client<\/strong> (native in WordPress 7.0+, available as a plugin on 6.9) and the new <strong>Connectors<\/strong> screen. If you'd rather pay your AI provider directly and remove our monthly message cap:<\/p>\n\n<ol>\n<li>Add your OpenAI, Anthropic, or Google key in <strong>Settings \u2192 Connectors<\/strong> (WP 7.0+) or in the matching \"AI Provider for {OpenAI \/ Anthropic \/ Google}\" plugin (WP 6.9).<\/li>\n<li>Open <strong>Kanom Chatbot \u2192 AI Provider<\/strong> and switch routing to \"Use my own AI provider\".<\/li>\n<li>Pick the matching provider. Done \u2014 chats now go straight from your site to your provider, no proxy and no Kanom quota.<\/li>\n<\/ol>\n\n<p>This is opt-in. The hosted-AI default is still the simplest path: it doesn't require a third-party account or a credit card, and the free tier never expires.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20make%20any%20external%20calls%20before%20i%20opt%20in%3F\"><h3>Does the plugin make any external calls before I opt in?<\/h3><\/dt>\n<dd><p>No. The plugin's design is \"no external HTTP requests until the user takes an action.\" On install + activate, nothing leaves your server. The first time a visitor sends a chat message we fetch a free license from wpsmartchatbot.com \u2014 but as of v1.6.0, even that requires you to click <strong>Activate Hosted AI<\/strong> in <strong>Kanom Chatbot \u2192 AI Provider<\/strong> one time first. Until then, the plugin returns a friendly \"not yet activated\" message to any visitor who tries to chat. If you'd rather not use the hosted service at all, switch the routing to <strong>Use my own AI provider<\/strong> and the plugin never contacts wpsmartchatbot.com.<\/p><\/dd>\n<dt id=\"can%20i%20change%20the%20ai%20model%2C%20temperature%2C%20or%20response%20length%3F\"><h3>Can I change the AI model, temperature, or response length?<\/h3><\/dt>\n<dd><p>Yes. <strong>Kanom Chatbot \u2192 AI Provider \u2192 Advanced<\/strong> has fields for model, temperature, and max response tokens. The model field only matters in bring-your-own-key mode (in hosted mode the SaaS chooses). Defaults work well for most sites; lower the temperature if the bot is being too creative, raise it if responses feel robotic.<\/p><\/dd>\n<dt id=\"can%20the%20bot%20match%20meaning%20across%20synonyms%2C%20not%20just%20keywords%3F\"><h3>Can the bot match meaning across synonyms, not just keywords?<\/h3><\/dt>\n<dd><p>Yes \u2014 turn on <strong>Vector retrieval<\/strong> in the Knowledge tab. Works in both modes:<\/p>\n\n<ul>\n<li><strong>Hosted AI<\/strong> \u2014 embeddings are proxied through wpsmartchatbot.com using our server-side OpenAI key, bundled into your plan at no extra charge. Just tick the toggle and reindex; no API keys to configure.<\/li>\n<li><strong>Bring your own key<\/strong> \u2014 needs OpenAI or Google credentials in Settings \u2192 Connectors. Each indexed chunk costs ~$0.00001 to embed; each chat query costs roughly the same on your provider bill. Anthropic isn't supported (no native embedding endpoint), so the bot falls back to keyword search.<\/li>\n<\/ul>\n\n<p>Either way, Kanom matches visitor questions by semantic similarity instead of literal keyword overlap \u2014 a question about \"delivery times\" surfaces a page that only mentions \"shipping windows\". Falls back to MySQL FULLTEXT keyword search automatically when the feature is off, unavailable, or a call fails.<\/p><\/dd>\n<dt id=\"how%20do%20i%20keep%20a%20specific%20page%20out%20of%20the%20chatbot%27s%20knowledge%3F\"><h3>How do I keep a specific page out of the chatbot's knowledge?<\/h3><\/dt>\n<dd><p>Edit the page or post, look for the <strong>Kanom Chatbot<\/strong> panel in the right-hand editor sidebar, and tick <strong>\"Exclude from chatbot knowledge\"<\/strong>. The bot won't quote from that page even though its post type is indexed in Knowledge settings. Existing chunks for that page are removed on save. Use this for splash pages, stale promotions, the cart\/checkout\/login pages, or any content that's diluting retrieval. The Knowledge tab shows how many posts you've excluded with a one-click review link.<\/p><\/dd>\n<dt id=\"can%20the%20chatbot%20use%20my%20actual%20site%20content%20as%20a%20source%3F\"><h3>Can the chatbot use my actual site content as a source?<\/h3><\/dt>\n<dd><p>Yes \u2014 that's what the <strong>Knowledge<\/strong> tab is for. Tick which post types to include (Pages by default; Posts, Products, or any custom type are one click away). Hit \"Reindex now\" once, and Kanom splits your content into searchable chunks. After that, every chat message triggers a fast database search and the top 3 matching snippets are injected into the AI's system prompt for that one reply. New and edited posts are picked up automatically.<\/p>\n\n<p>This is the difference between a chatbot that knows \"the business sells widgets\" (what you typed in AI Agent) and one that knows \"the Pro Widget is $49, ships in 2 days, and has a 30-day return window\" (what's actually on your product page). Works on any WordPress install with InnoDB (the default), no external service required, no per-search cost.<\/p><\/dd>\n<dt id=\"how%20does%20lead%20capture%20work%3F\"><h3>How does lead capture work?<\/h3><\/dt>\n<dd><p>If you tell the bot to ask for emails (in <strong>AI Agent \u2192 Lead capture<\/strong>), Kanom watches every visitor message for an email address. The first time one appears in a conversation, Kanom:<\/p>\n\n<ol>\n<li>Saves the email, the visitor's name (when stated), the visitor's first meaningful question as \"intent\", the page URL, and a link to the full transcript.<\/li>\n<li>Emails you (or whatever address you set in AI Agent \u2192 Notification email) with the lead details and conversation excerpt.<\/li>\n<li>Lists the lead in the <strong>Leads<\/strong> admin tab where you can filter, search, view the full conversation, export to CSV, or delete.<\/li>\n<\/ol>\n\n<p>One lead per conversation \u2014 repeat visits or replies on the same session don't double-count. Lead capture works in both Hosted and Bring-your-own-key modes. Leads live in your WordPress database, never on our servers.<\/p><\/dd>\n<dt id=\"can%20the%20chatbot%20answer%20questions%20specific%20to%20my%20business%3F\"><h3>Can the chatbot answer questions specific to my business?<\/h3><\/dt>\n<dd><p>Yes. In the <strong>AI Agent<\/strong> admin page you provide your business name, a description, your tone of voice, your FAQ, and any policies (returns, shipping, hours). Everything you write there is sent to the AI as a system prompt on every conversation, so answers stay on-brand and grounded in your real content.<\/p><\/dd>\n<dt id=\"will%20it%20run%20without%20contacting%20your%20servers%3F\"><h3>Will it run without contacting your servers?<\/h3><\/dt>\n<dd><p>No. The plugin is a thin client: every chat message is proxied through wpsmartchatbot.com to the AI provider. This is how we can ship a chatbot without asking you for any API key. The full list of routes the plugin calls is in the \"External services\" section above.<\/p><\/dd>\n<dt id=\"is%20it%20gdpr-friendly%3F\"><h3>Is it GDPR-friendly?<\/h3><\/dt>\n<dd><p>The plugin ships GDPR-aware defaults: visitor IPs can be anonymized before storage, chat retention is configurable (off, 30, 90, 180, or 365 days), and you can disable chat storage entirely. EU customers can request a copy or deletion of their data by contacting our support email.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20any%20wordpress%20theme%3F\"><h3>Does it work with any WordPress theme?<\/h3><\/dt>\n<dd><p>Yes. The chat widget renders in its own DOM with an isolated style scope, so your theme's CSS doesn't interfere and vice versa. It works with classic themes, block themes, page builders (Elementor, Divi, Bricks), and headless setups.<\/p><\/dd>\n<dt id=\"will%20it%20slow%20down%20my%20site%3F\"><h3>Will it slow down my site?<\/h3><\/dt>\n<dd><p>No. The widget script is ~30 KB minified, loaded asynchronously in the footer. It makes zero blocking requests and no third-party CDN calls. PageSpeed scores are unaffected.<\/p><\/dd>\n<dt id=\"can%20i%20hide%20the%20chatbot%20on%20mobile%20or%20specific%20pages%3F\"><h3>Can I hide the chatbot on mobile or specific pages?<\/h3><\/dt>\n<dd><p>Yes. <strong>Design \u2192 Hide on mobile devices<\/strong> disables the widget on phones. To hide on specific pages, conditionally remove the shortcode (or use the global toggle and place <code>[kanom_chatbot]<\/code> only on the pages you want).<\/p><\/dd>\n<dt id=\"where%20is%20chat%20data%20stored%3F\"><h3>Where is chat data stored?<\/h3><\/dt>\n<dd><p>In your own WordPress database, in three custom tables (<code>{prefix}_kanom_sessions<\/code>, <code>{prefix}_kanom_messages<\/code>, <code>{prefix}_kanom_usage<\/code>). Nothing is stored on our side beyond your license record and aggregate monthly usage count.<\/p><\/dd>\n<dt id=\"can%20i%20upgrade%20or%20cancel%20anytime%3F\"><h3>Can I upgrade or cancel anytime?<\/h3><\/dt>\n<dd><p>Yes. Plan changes go through Stripe \u2014 you can upgrade, downgrade, or cancel from <strong>License \u2192 Manage subscription<\/strong>. Cancellations take effect at the end of the current billing period.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20my%20data%20if%20i%20uninstall%20the%20plugin%3F\"><h3>What happens to my data if I uninstall the plugin?<\/h3><\/dt>\n<dd><p>The plugin's <code>uninstall.php<\/code> drops its database tables and deletes its options. Your license remains valid on our side, so you can reinstall later without losing your subscription.<\/p><\/dd>\n<dt id=\"how%20do%20i%20get%20support%3F\"><h3>How do I get support?<\/h3><\/dt>\n<dd><p>Open a thread in the <strong>Support<\/strong> forum on this plugin's wordpress.org page for general questions. For account\/billing\/license issues specific to your installation, email support through your hosted dashboard or website.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.9.7<\/h4>\n\n<ul>\n<li>Fixed: wp.org Plugin Check ERRORs cleared. Removed a stowaway .DS_Store, added a project .gitignore, escaped a few admin-side template outputs (Analytics tile badges and period-filter labels), and dropped a <code>suppress_filters=true<\/code> from the knowledge indexer query so WPML\/Polylang can language-scope it.<\/li>\n<li>Fixed: every WP_DEBUG-gated <code>error_log()<\/code> call now carries a phpcs:ignore comment so the diagnostic-logging pattern reads cleanly to reviewers. No behavior change \u2014 log lines still only appear when WP_DEBUG is on.<\/li>\n<li>Fixed: documented internal-allowlist phpcs:ignore comments on three Knowledge-table queries that interpolate the table name (TRUNCATE \/ COUNT \/ GROUP BY). Table names come from a hard-coded set, never user input.<\/li>\n<\/ul>\n\n<h4>1.9.6<\/h4>\n\n<ul>\n<li>Fixed: Proactive trigger never fired. The widget's config-merge step only copied four whitelisted keys (webhook, branding, style, i18n) and silently dropped the <code>proactive<\/code> config the PHP side was sending. setupProactive() then read <code>cfg.proactive === undefined<\/code> and bailed at its early-return guard. Time-on-page, scroll-depth, and exit-intent triggers all affected \u2014 none of them actually fired since the feature shipped in 1.6.0. Now passes through.<\/li>\n<\/ul>\n\n<h4>1.9.5<\/h4>\n\n<ul>\n<li>Changed: Support tab no longer mentions Telegram delivery (that's an implementation detail). Added a prominent Documentation link and a required \"I checked the documentation first\" checkbox \u2014 the Send button stays disabled until it's ticked. Cuts noise on questions already answered in the docs without adding real friction.<\/li>\n<li>Changed: Design \u2192 Powered-by badge. The widget badge is now shown on all plans by default. Paid plans get a checkbox to remove it (Design tab \u2192 \"Powered-by badge\"). Free plans keep the badge \u2014 it's brand attribution and a soft upgrade hook \u2014 and the toggle renders disabled with an inline link to upgrade.<\/li>\n<li>Changed: AI Agent \u2192 Live preview heading prefixed with \"[Testing]\" to make it obvious that section is the real-payload preview (retrieval + cart), not the static system prompt.<\/li>\n<li>Changed: Analytics \u2192 \"Potentially unresolved\" KPI tile got extra bottom padding so the sub-line + delta badge breathe.<\/li>\n<\/ul>\n\n<h4>1.9.4<\/h4>\n\n<ul>\n<li>Changed: wp.org listing rewritten to lead with the lead-generation pitch instead of the generic \"customer service, lead generation, and sales\" trio. Description, short description, tags, use cases, and feature list all restructured. No code changes. Roadmap pruned: vector retrieval already shipped (1.7.0), removed from \"upcoming\".<\/li>\n<\/ul>\n\n<h4>1.9.3<\/h4>\n\n<ul>\n<li>Added: explicit copyright + GPL header to the frontend widget script. Calls out that the Kanom and WP Smart Chatbot brand names are trademarks (not GPL'd) so a fork can't reuse them. Replaces a stale v4.8 marker comment from an earlier rename.<\/li>\n<\/ul>\n\n<h4>1.9.2<\/h4>\n\n<ul>\n<li>Changed: free-plan widget badge text simplified to \"Powered by WP Kanom Chatbot\" (no emphasis). Widget now uses textContent for the badge \u2014 XSS-safe by default, regardless of where the string ever comes from.<\/li>\n<\/ul>\n\n<h4>1.9.1<\/h4>\n\n<ul>\n<li>Changed: free-plan widget badge updated from \"Powered by WP Smart Chatbot\" to \"Powered by Kanom Chatbot for WordPress\" (brand name emphasised). Better attribution + clearer match with the plugin's wp.org listing.<\/li>\n<\/ul>\n\n<h4>1.9.0<\/h4>\n\n<ul>\n<li>Added: Support admin tab with a form to send questions, bug reports, feature requests, or billing issues directly to the Kanom team. Site URL and license key are attached automatically. Submissions land in our Telegram chat; replies come by email. Available to all installs \u2014 you don't need an active license to ask for help.<\/li>\n<\/ul>\n\n<h4>1.8.3<\/h4>\n\n<ul>\n<li>Fixed: the Temperature field on Spanish\/EU-locale browsers no longer relocalises \"0.7\" to \"0,7\" on display. The input is now a plain text field; the sanitizer also normalises comma decimals (paste from a Spanish spreadsheet, mobile keyboard) so the value parses correctly either way. Previous behavior could silently store 0 if a comma made it through the round trip.<\/li>\n<\/ul>\n\n<h4>1.8.2<\/h4>\n\n<ul>\n<li>Removed: Model text field from AI Provider \u2192 Advanced. It didn't actually affect chat behavior in either mode \u2014 the hosted SaaS picks its own upstream, and BYO mode lets the WP AI Client choose a sensible default per provider. Showing an internal implementation detail (a DeepSeek model name) to customers who can't influence it was just confusing. Temperature and max-tokens stay; those do work. A proper provider-aware model picker can come back if customers ask.<\/li>\n<\/ul>\n\n<h4>1.8.1<\/h4>\n\n<ul>\n<li>Improved: the daily license validation ping now reports this site's AI routing mode (hosted or BYO + provider). Lets the SaaS show segmentation analytics (\"X% of paid sites are on BYO\") and flag churn risk without changing any visitor-facing behavior. The ping itself was already happening daily \u2014 this just adds two fields.<\/li>\n<\/ul>\n\n<h4>1.8.0<\/h4>\n\n<ul>\n<li>Added: \"Powered by WP Smart Chatbot\" attribution under the chat widget on the free plan. A small one-line link, intentionally unobtrusive. Hidden automatically on any paid plan.<\/li>\n<li>Added: free-plan cap of 5 lead-email notifications per month. Lead capture itself is unchanged \u2014 every lead still lands in the Leads tab and in your database. Only the live wp_mail ping is gated. Past the 5th notification, the Leads tab shows \"5 emailed \/ N captured this month\" with an upgrade prompt, and the weekly digest surfaces the gap so you don't miss what you missed. Paid plans email every lead, no cap.<\/li>\n<\/ul>\n\n<h4>1.7.4<\/h4>\n\n<ul>\n<li>Changed: \"Enable chatbot\" master switch moved from Design \u2192 Dashboard. Now appears as a prominent on\/off banner at the top of the Dashboard with a one-click toggle (no Save needed). Whether the bot is live is the single most important fact about the plugin \u2014 it belongs on the page admins land on, not buried in Design.<\/li>\n<\/ul>\n\n<h4>1.7.3<\/h4>\n\n<ul>\n<li>Changed: \"Usage &amp; Billing\" admin tab renamed to \"License\". Same page, same URL slug (<code>wpsc-usage<\/code>), just a clearer label since billing is mostly handled in the Stripe portal anyway. Bookmarks and existing links keep working.<\/li>\n<\/ul>\n\n<h4>1.7.2<\/h4>\n\n<ul>\n<li>Added: per-post \"Exclude from chatbot knowledge\" toggle in the post editor sidebar. Lets admins opt individual pages out of indexing without unpublishing them \u2014 useful for splash pages, stale launch announcements, the cart\/checkout pages, or anything noisy that's diluting retrieval. Bulk post-type indexing remains the default; this is fine-grained override on top.<\/li>\n<li>Fixed: chunker no longer emits useless mini-chunks. Headings and one-liners under 40 characters are now skipped entirely instead of becoming standalone \"About Us\"-style 15-char chunks that polluted test retrieval results. When a chunk buffer is still tiny and the next paragraph would overflow the soft target, the chunker now merges anyway (up to the 1200-char hard cap) rather than flushing the orphan.<\/li>\n<li>Improved: Knowledge tab shows a count of currently-excluded posts with a one-click \"Review excluded posts\" link to the filtered admin list.<\/li>\n<\/ul>\n\n<h4>1.7.1<\/h4>\n\n<ul>\n<li>Added: vector retrieval now works in Hosted AI mode too. The plugin POSTs to a new \/embed proxy on wpsmartchatbot.com, which calls OpenAI server-side using our key \u2014 bundled into your plan, no separate billing. Previously vector retrieval required Bring-your-own-key with an OpenAI or Google account.<\/li>\n<li>Improved: Knowledge tab status panel now distinguishes between hosted, OpenAI BYO, Google BYO, and Anthropic BYO. Anthropic users get a clear \"falls back to keyword retrieval\" note.<\/li>\n<\/ul>\n\n<h4>1.7.0<\/h4>\n\n<ul>\n<li>Added: optional vector retrieval (embeddings). Toggle on the Knowledge tab. When enabled in BYO mode with OpenAI or Google, each indexed chunk is embedded once and chat queries are matched by cosine similarity instead of keyword match \u2014 catches \"delivery\" \u2194 \"shipping\" and works across languages. Anthropic isn't supported (no native embedding endpoint as of 2026-05); selecting it leaves you on FULLTEXT keyword search. Falls back automatically when embeddings are off, unavailable, or the API call fails \u2014 chats never break because of a vector miss.<\/li>\n<li>Added: async batched reindex. Replaced the synchronous \"process up to 1000 posts in one request\" reindex with a JS-driven loop that processes 50 posts per AJAX call until done. Survives any PHP timeout \u2014 works on sites with tens of thousands of posts. Status text updates per batch so admins see progress.<\/li>\n<li>Improved: hours-of-day analytics chart now uses the WP site timezone via wp_timezone() instead of MySQL's server-local clock. The chart caption shows which timezone is in effect (\"Europe\/Madrid\", \"+05:30\", etc.). DST transitions during the window may shift one hour boundary by 1h \u2014 acceptable for a heat-map.<\/li>\n<\/ul>\n\n<h4>1.6.0<\/h4>\n\n<ul>\n<li>Added: one-time \"Activate Hosted AI\" consent button in AI Provider tab. Until you click it, the plugin makes ZERO external HTTP requests \u2014 even if a visitor sends a chat. Belt-and-suspenders compliance with wp.org's \"no external calls without explicit user action\" policy.<\/li>\n<li>Added: HTML email digest. The Monday-morning weekly digest now ships as multipart HTML + plain-text fallback. Inline-styled table layout, table-cell bar chart for daily volume, no remote images. Renders cleanly in Gmail, Outlook, Apple Mail.<\/li>\n<li>Added: WooCommerce status tile + kill switch on the Dashboard. When WC is detected, a tile shows the integration status with a one-click toggle to share or stop sharing cart context with the bot.<\/li>\n<li>Added: Advanced settings on the AI Provider tab. Model, temperature, and max-tokens are now editable from the admin \u2014 previously they were configurable only via direct database edits.<\/li>\n<li>Improved: Quick Setup checklist on the Dashboard expanded from 2 to 5 progressive steps with state-aware checkmarks (AI agent \u2192 Knowledge \u2192 Design \u2192 Proactive trigger \u2192 Analytics review). New admins discover the long tail of features without exploring the menu.<\/li>\n<li>Improved: Admin tab order rearranged to match the actual setup flow \u2014 Dashboard \u2192 AI Agent \u2192 Knowledge \u2192 AI Provider \u2192 Design \u2192 Analytics \u2192 Leads \u2192 Chat Logs \u2192 Usage \u2192 Privacy. Previously Analytics appeared second, before users had anything to analyze.<\/li>\n<li>Improved: Leads and Chat Logs tabs now use the same 7\/30\/90\/all-time period filter as Analytics, with the single-date input available alongside for ad-hoc lookups. Consistent date filtering across the whole admin.<\/li>\n<\/ul>\n\n<h4>1.5.1<\/h4>\n\n<ul>\n<li>Fixed: \"Delete chat\" and \"Delete all chats\" now cascade to the leads table \u2014 admins reasonably expect deleting a conversation to remove every byte of PII derived from it (GDPR erasure compliance).<\/li>\n<li>Fixed: proactive trigger no longer auto-opens the widget when bring-your-own-key mode is selected but no provider API key is configured. The visitor used to see \"Your X API key is not configured\" the moment they typed; now the widget stays closed until the admin fixes the config.<\/li>\n<li>Fixed: per-page prompt shortcode <code>[kanom_chatbot prompt=\"...\"]<\/code> now also emits its override when the shortcode renders after <code>wp_footer<\/code> (late template parts, FSE comment-area blocks, etc.). Previously the override was silently dropped in that edge case.<\/li>\n<li>Fixed: analytics \"potentially unresolved\" detection now ships seed phrases for Spanish, French, German, Italian, and Portuguese. Plus a new <code>kanom_unresolved_phrases<\/code> filter to extend the list. Previously non-English sites reported 0% unresolved regardless of bot performance.<\/li>\n<li>Fixed: lead-intent threshold lowered for CJK \/ Arabic \/ Hangul \/ Hebrew scripts (6 chars instead of 12) \u2014 those scripts pack more meaning per character, so the previous threshold dropped real intents like \"\u9000\u8d27\u653f\u7b56\uff1f\" as too short.<\/li>\n<li>Fixed: CSV exports now sanitize cells starting with <code>=<\/code>, <code>+<\/code>, <code>-<\/code>, <code>@<\/code>, tab, or carriage return so they can't execute as formulas when an admin opens the file in Excel\/Google Sheets.<\/li>\n<li>Fixed: ternary precedence bug in <code>proactive_message<\/code> length truncation (functional impact was small but the code was wrong).<\/li>\n<li>Fixed: analytics cache is now busted when an admin deletes a chat or all chats \u2014 previously the Analytics tab kept showing the deleted data for up to 5 minutes.<\/li>\n<li>Fixed: orphan <code>kanom_paid_license_notice<\/code> option is now cleaned up on uninstall.<\/li>\n<li>Removed: dead <code>wp_ajax_kanom_send_message<\/code> handler \u2014 it was registered but never reachable (no client code called it and its nonce was never created). Removed to avoid future foot-guns.<\/li>\n<li>Improved: AI Agent \"Generated System Prompt\" preview now shows two panes \u2014 the static base prompt AND a live preview that includes site-aware retrieval and WooCommerce cart context for a sample question you can edit. The static-only preview was misleading admins about what the AI actually receives.<\/li>\n<li>Docs: pruned the Roadmap to remove already-shipped features (lead capture, analytics, WooCommerce, multilingual via filter). Removed CRM-webhook and calendar-booking claims from the use-case section since those aren't actually shipped. Installation instructions now reference \"AI Agent\" (the current tab name) instead of the old \"Business\" tab.<\/li>\n<\/ul>\n\n<h4>1.5.0<\/h4>\n\n<ul>\n<li>Added: Analytics admin tab. KPI tiles (conversations \/ lead conversion \/ avg messages per chat \/ potentially-unresolved %), each compared vs. the previous period. Inline SVG charts for daily volume and time-of-day. Top topics + top phrases extracted locally from visitor messages (no LLM cost). Top pages by chat volume. Period selector for last 7\/30\/90 days.<\/li>\n<li>Added: Weekly analytics digest. Monday-morning plain-text email to the lead notification address summarizing last week's chats, leads, top topic, top page, and deltas vs. the prior week. Toggle in AI Agent \u2192 Lead capture. Skipped silently when there's no activity to report.<\/li>\n<li>Added: 5-minute transient cache on the analytics payload so opening the Analytics tab repeatedly is cheap, and the weekly digest reuses the same code path.<\/li>\n<\/ul>\n\n<h4>1.4.0<\/h4>\n\n<ul>\n<li>Added: per-page system prompt override via the shortcode \u2014 <code>[kanom_chatbot prompt=\"On this page, focus on shipping questions\"]<\/code>. Length-capped, tag-stripped, framed as data so visitors can't prompt-inject through it. Great for landing-page A\/B testing.<\/li>\n<li>Added: WooCommerce cart context. When WC is active and the visitor has items in their cart, the bot's system prompt automatically gets a CURRENT CART section (names + quantities, no prices). Reads server-side from WC()-&gt;cart so page-caching doesn't leak someone else's cart.<\/li>\n<li>Added: proactive trigger in the Design tab. Pick time-on-page (seconds), scroll-depth (%), or exit-intent, plus a greeting message. Fires once per session; suppressed if the visitor has already engaged.<\/li>\n<li>Added: \"Test retrieval\" panel in the Knowledge tab. Type a query, see exactly which chunks would be injected and at what relevance score \u2014 useful for debugging \"why doesn't the bot find my FAQ?\".<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>Added: site-aware answers (RAG). The chatbot now retrieves the most relevant snippets from your real site content \u2014 pages, posts, products, or any custom post type \u2014 and feeds them to the AI on every chat. New \"Knowledge\" admin tab with post-type pickers, a reindex button, and live stats. Search uses MySQL FULLTEXT \u2014 no external service, no per-query cost, no API key required. New &amp; edited posts are auto-indexed via save_post hooks.<\/li>\n<li>Reserved an <code>embedding<\/code> column in the chunks table for a future vector-similarity upgrade \u2014 no schema migration will be needed when it ships.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Added: lead capture. When a visitor shares an email in chat, Kanom now saves a structured lead (email, name, intent, page, transcript) and emails the admin a copy. New \"Leads\" admin tab lists everything captured with date\/email search, transcript view, and CSV export. Enabled by default; toggle in AI Agent \u2192 Lead capture.<\/li>\n<li>Added: schema auto-migrate on update. The plugin now bumps its DB version on update and runs dbDelta automatically, so new tables ship without requiring a deactivate\/reactivate cycle.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Added: optional bring-your-own-key routing via the WordPress AI Client and the new Connectors API (WordPress 7.0). Pick OpenAI, Anthropic, or Google in the new \"AI Provider\" tab and chat traffic bypasses the hosted proxy and monthly message limits entirely. Hosted AI remains the default.<\/li>\n<li>Tested against WordPress 7.0.<\/li>\n<li>Removed \"Documentation\" and \"Support forum\" links from the plugin row on the Plugins page; \"Visit plugin site\" still links to the docs.<\/li>\n<\/ul>\n\n<h4>1.0.4<\/h4>\n\n<ul>\n<li>Added a \"Check for existing license\" button on Usage &amp; Billing. Useful after reinstalling the plugin on a site that already has a license attached on the server.<\/li>\n<li>Added a \"Resend license email\" action in the admin notice shown when a paid license is already attached to the site \u2014 for admins who lost their original welcome email.<\/li>\n<li>Disabled the \"Re-check now\" button when no license key is in the input.<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>Added \"Visit plugin site\", \"Documentation\", and \"Support forum\" links to the plugin row on the Plugins admin page.<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Fixed: a site with an active paid license could be issued a duplicate free trial after re-installing the plugin. The server now detects existing paid licenses and the plugin shows an admin notice asking the admin to paste their existing license key.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Expanded the plugin description with use cases and free-plan information.<\/li>\n<li>Added a Frequently Asked Questions section to the wp.org plugin page.<\/li>\n<li>Shortened the WP admin menu label to \"Kanom Chatbot\".<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"AI chatbot that turns website visitors into qualified leads. Captures emails in conversation, emails them to you, no API keys needed.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/sl.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/309765","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sl.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/sl.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/sl.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=309765"}],"author":[{"embeddable":true,"href":"https:\/\/sl.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/sergimv"}],"wp:attachment":[{"href":"https:\/\/sl.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=309765"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/sl.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=309765"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/sl.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=309765"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/sl.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=309765"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/sl.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=309765"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/sl.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=309765"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}