{"id":301901,"date":"2026-05-28T12:16:55","date_gmt":"2026-05-28T12:16:55","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/growthai-chat\/"},"modified":"2026-05-29T16:55:42","modified_gmt":"2026-05-29T16:55:42","slug":"global-ai-chat","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/global-ai-chat\/","author":17966292,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"3.6.12","stable_tag":"3.6.12","tested":"7.0","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"Global AI Chat","header_author":"Global AI","header_description":"Chat com IA para o seu site WordPress. Configure o agente, modelo, apar\u00eancia e base de conhecimento.","assets_banners_color":"393e4d","last_updated":"2026-05-29 16:55:42","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/globalai.software\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":72,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"3.6.12":{"tag":"3.6.12","author":"thiagoqvaz","date":"2026-05-29 16:55:42"},"3.6.7":{"tag":"3.6.7","author":"thiagoqvaz","date":"2026-05-28 12:15:25"}},"upgrade_notice":{"3.6.3":"<p>Removes the <code>is_pro_active()<\/code> helper and every code branch that depended on it. The free plugin now renders one unconditional code path; no behaviour is changed for installs that use only the free plugin.<\/p>","3.6.2":"<p>Removes the Pro-only marketplace and plan-management JS that was still shipping in the free plugin. No functional change for free users; document upload now works end-to-end without the Pro addon.<\/p>","3.6.1":"<p>Security hardening on document uploads and SVG icons, complete i18n coverage, and removal of every remaining Pro placeholder from the free codebase.<\/p>","3.6.0":"<p>Free plugin cleanup for wp.org review: no more Pro-feature placeholders, no sales endpoints, only OpenAI is contacted. Knowledge-base upload now works in Free without the Pro addon.<\/p>","3.4.0":"<p>Plugin renamed to &quot;Global AI Chat&quot;. Free is now fully functional without a license \u2014 works directly with your own OpenAI key. SaaS-backed features are now in a separate Pro addon available at https:\/\/globalai.software\/.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3552149,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3552149,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500-es_ES.png":{"filename":"banner-1544x500-es_ES.png","revision":3552089,"resolution":"1544x500","location":"assets","locale":"es_ES","width":1544,"height":500},"banner-1544x500-pt_PT.png":{"filename":"banner-1544x500-pt_PT.png","revision":3552089,"resolution":"1544x500","location":"assets","locale":"pt_PT","width":1544,"height":500},"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3552089,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250-es_ES.png":{"filename":"banner-772x250-es_ES.png","revision":3552089,"resolution":"772x250","location":"assets","locale":"es_ES","width":772,"height":250},"banner-772x250-pt_PT.png":{"filename":"banner-772x250-pt_PT.png","revision":3552089,"resolution":"772x250","location":"assets","locale":"pt_PT","width":772,"height":250},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3552089,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"growthai\/chat":{"name":"growthai\/chat","title":"Global AI Chat"}},"tagged_versions":["3.6.12","3.6.7"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[2353,1320,5707,2364,194533],"plugin_category":[41],"plugin_contributors":[264778],"plugin_business_model":[],"class_list":["post-301901","plugin","type-plugin","status-publish","hentry","plugin_tags-ai","plugin_tags-assistant","plugin_tags-chat","plugin_tags-chatbot","plugin_tags-openai","plugin_category-communication","plugin_contributors-thiagoqvaz","plugin_committers-thiagoqvaz"],"banners":{"banner":"https:\/\/ps.w.org\/global-ai-chat\/assets\/banner-772x250.png?rev=3552089","banner_2x":"https:\/\/ps.w.org\/global-ai-chat\/assets\/banner-1544x500.png?rev=3552089","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/global-ai-chat\/assets\/icon-128x128.png?rev=3552149","icon_2x":"https:\/\/ps.w.org\/global-ai-chat\/assets\/icon-256x256.png?rev=3552149","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Global AI Chat adds an AI-powered chat widget to your WordPress site. Visitors interact with a chatbot backed by OpenAI's models; you use your own OpenAI account (and are billed directly by OpenAI for the usage).<\/p>\n\n<p><strong>All features are free and fully functional.<\/strong> The plugin does not lock, limit, or time-restrict any built-in functionality.<\/p>\n\n<p>Features included:<\/p>\n\n<ul>\n<li>Floating chat widget with customizable colours, icons, position and animation<\/li>\n<li>Shortcode <code>[growthai_chat]<\/code> to embed the chat inline on any page<\/li>\n<li>Gutenberg block, Elementor widget, Divi module, Beaver Builder module, WPBakery element<\/li>\n<li>One agent profile (SDR, Support or FAQ) with custom prompt<\/li>\n<li>Lead collection tool calls (name, email, phone, company and custom fields)<\/li>\n<li>Visitor request for human contact triggers an admin notification (no live takeover in Free)<\/li>\n<li>GDPR-ready: optional cookie consent banner and opt-in uninstall data deletion<\/li>\n<li>Multi-language chat \u2014 widget auto-detects the visitor's browser locale<\/li>\n<\/ul>\n\n<p><strong>Want multi-agent setup, live chat takeover from wp-admin, page\/post auto-sync, Google Calendar booking, webhooks, AI prompt generator, mobile app, managed tokens, auto-updates or analytics?<\/strong> The companion Pro addon is distributed separately at https:\/\/globalai.software\/. It layers extra UI and SaaS-backed services on top of the free plugin without replacing it \u2014 if you ever deactivate Pro, the free plugin keeps working.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin relies on <strong>one<\/strong> third-party service: the OpenAI API. No other external endpoint is contacted by the free plugin.<\/p>\n\n<h4>OpenAI API (required)<\/h4>\n\n<ul>\n<li><strong>What it is:<\/strong> OpenAI provides the language model that generates chat replies and, when you upload knowledge-base documents, runs the file search against them.<\/li>\n<li><strong>What is sent:<\/strong> Every chat message the visitor submits, plus the system prompt your agent is configured with, is sent to <code>https:\/\/api.openai.com\/v1\/responses<\/code> using your own API key. When you upload training documents, the file bytes are sent to <code>https:\/\/api.openai.com\/v1\/files<\/code> and registered with <code>https:\/\/api.openai.com\/v1\/vector_stores<\/code> so the agent can search them.<\/li>\n<li><strong>When:<\/strong> On every user message (chat completion) and only when an admin manually uploads\/deletes a knowledge-base document (vector store).<\/li>\n<li><strong>Terms of service:<\/strong> https:\/\/openai.com\/policies\/terms-of-use<\/li>\n<li><strong>Privacy policy:<\/strong> https:\/\/openai.com\/policies\/privacy-policy<\/li>\n<\/ul>\n\n<h4>Not contacted by this free plugin<\/h4>\n\n<p>The companion Pro addon (separate download, not on wp.org) introduces additional endpoints under <code>https:\/\/saas.globalai.software\/<\/code> for license verification, managed token billing, mobile-app push notifications, plugin auto-updates, Google Calendar OAuth, outbound webhooks, page\/post auto-sync, and the AI prompt generator. None of those endpoints are reached from this free plugin's code \u2014 they are documented here only so admins know what changes if they later install the Pro addon.<\/p>\n\n<h3>Security<\/h3>\n\n<h4>Visitor session token (`session_id`)<\/h4>\n\n<p>Every chat conversation is bound to a <code>session_id<\/code> token generated <strong>client-side, in the visitor's browser<\/strong>, using <code>window.crypto.getRandomValues<\/code> (a 128-bit cryptographically random value rendered as 32 hex characters with the prefix <code>gai_<\/code>). The token is stored in <code>localStorage<\/code> after the visitor accepts the cookie consent banner; without consent, an in-memory ephemeral token is used and discarded when the tab closes.<\/p>\n\n<p>The <code>session_id<\/code> is the access key for the chat REST endpoints (<code>\/wp-json\/growthai\/v1\/chat<\/code>, <code>\/wp-json\/growthai\/v1\/live-chat\/poll<\/code>). These endpoints are intentionally public (<code>permission_callback =&gt; __return_true<\/code>) so that anonymous site visitors can chat without needing a WordPress account \u2014 knowing the token is what authorises the request, the same security model used by mainstream chat \/ support widgets (Crisp, Tawk, Intercom).<\/p>\n\n<p>Implications:<\/p>\n\n<ul>\n<li>The token is <strong>not<\/strong> derived from the IP, User-Agent, cookies the server sets, or any sequential \/ predictable scheme. A third party cannot guess another visitor's token.<\/li>\n<li>The plugin never logs full <code>session_id<\/code> values in plaintext outside the database row that owns the conversation.<\/li>\n<li>If the visitor clears their browser storage, the next page load gets a fresh token and a fresh conversation.<\/li>\n<li>Old browsers without the Web Crypto API fall back to <code>Math.random()<\/code> \u2014 a worse entropy source. We surface this in the JS for transparency; if your audience relies on legacy browsers, factor that into your threat model.<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>global-ai-chat<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or install via <strong>Plugins \u2192 Add New<\/strong> on WordPress.<\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> menu.<\/li>\n<li>Go to <strong>Global AI Chat \u2192 Geral<\/strong> and paste your OpenAI API key (get one at https:\/\/platform.openai.com\/api-keys).<\/li>\n<li>Configure your agent under <strong>Global AI Chat \u2192 Agentes<\/strong>.<\/li>\n<li>The chat widget will appear on your site.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20an%20openai%20api%20key%3F\"><h3>Do I need an OpenAI API key?<\/h3><\/dt>\n<dd><p>Yes. You provide your own OpenAI key in <strong>Settings \u2192 Geral<\/strong>. OpenAI bills you directly for the usage. The plugin stores the key encrypted in <code>wp_options<\/code> (AES-256-CBC); the plaintext is read on demand for the chat request only.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20work%20without%20a%20pro%20license%3F\"><h3>Does the plugin work without a Pro license?<\/h3><\/dt>\n<dd><p>Yes, fully. There is no license gate on any feature shipped with this plugin. The Pro addon is a separate plugin distributed outside wp.org; it adds optional SaaS-backed features (managed token billing, mobile app, auto-updates, analytics) but installing or removing it never affects the free plugin's behaviour.<\/p><\/dd>\n<dt id=\"where%20are%20the%20conversations%20stored%3F\"><h3>Where are the conversations stored?<\/h3><\/dt>\n<dd><p>In your WordPress database, in the custom tables <code>wp_growthai_conversations<\/code> and <code>wp_growthai_agents<\/code>. Nothing about conversations leaves your site unless you configure a webhook or enable the optional Pro addon.<\/p><\/dd>\n<dt id=\"what%20happens%20when%20i%20uninstall%20the%20plugin%3F\"><h3>What happens when I uninstall the plugin?<\/h3><\/dt>\n<dd><p>By default WordPress removes only the plugin files and your data stays. If you enable <strong>Settings \u2192 Geral \u2192 \"Eliminar todos os dados ao desinstalar\"<\/strong>, the plugin's uninstall handler additionally drops its tables and clears every <code>growthai_*<\/code> option, transient, post meta and cron hook.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20track%20visitors%3F\"><h3>Does the plugin track visitors?<\/h3><\/dt>\n<dd><p>No. Visitor chat messages are sent to OpenAI for the agent to reply, and are stored in your DB. Nothing is sent to any analytics provider by the free plugin. See <strong>External services<\/strong> below for the full list of endpoints the plugin may contact.<\/p><\/dd>\n<dt id=\"does%20this%20free%20plugin%20contact%20saas.globalai.software%3F\"><h3>Does this free plugin contact saas.globalai.software?<\/h3><\/dt>\n<dd><p>No. The free plugin only contacts <code>api.openai.com<\/code>, using your own OpenAI API key. The Global AI SaaS (<code>saas.globalai.software<\/code>) is only contacted when you separately install the optional Pro addon \u2014 it is not bundled with this plugin and is never reached from the code shipped here.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>3.6.12<\/h4>\n\n<ul>\n<li>Lead capture: the name-extraction fallback used to require a\ncapitalised first letter (\"Thiago Vaz\" yes, \"thiago vaz\" no), so\nany visitor who self-introduced in lowercase ended up with their\nname lost. The token regex now accepts mixed case and the saved\nvalue is normalised to Title Case before persisting.<\/li>\n<li>Lead capture: extended the column allow-list (<code>name<\/code>, <code>email<\/code>,\n  phone, <code>company<\/code>) to also accept the Portuguese equivalents\n(<code>nome<\/code>, <code>telefone<\/code>, <code>telemovel<\/code>, <code>tel<\/code>, <code>empresa<\/code>). Without this,\nan agent created with a phone field labeled \"telefone\" (which\nsanitize_dynamic_list slugifies into key=\"telefone\") wrote the\nvisitor's phone number into the <code>lead_data<\/code> JSON blob instead of\nthe dedicated column, so the admin UI displayed \"Lead: email\"\nwith no phone visible.<\/li>\n<\/ul>\n\n<h4>3.6.11<\/h4>\n\n<ul>\n<li>Admin conversations viewer no longer yanks the scrollbar around on\nevery 2-second poll. The messages panel now preserves the admin's\nscroll position when they have scrolled away from the most recent\nmessage, and only auto-pins to the bottom when they were already\nat the bottom (within 60px). The conversation list on the left\nalso keeps its scroll position across the 10-second list refresh\ninstead of resetting to the top.<\/li>\n<\/ul>\n\n<h4>3.6.10<\/h4>\n\n<ul>\n<li>Live-chat handoff: the conversations table gains a new column\n  handoff_owner_device_id (VARCHAR(64), nullable). When the optional\nPro addon's mobile app takes over a conversation, it stamps the\nacting device's UUID here so other mobile devices know to lock the\nconversation UI. Adding the column lifts the DB schema version\nto 3.1 \u2014 dbDelta runs on the next admin load.<\/li>\n<li>Live-chat handoff: when a visitor sends a message while\n  handoff_active=1, the API handler now fires a new\n  handoff_visitor_message event on <code>global_ai_chat_notify<\/code>. The Pro\naddon's push relay routes this event to the single owning device\n(no fan-out), so the human attendant gets a direct push without\nspamming every other paired phone.<\/li>\n<\/ul>\n\n<h4>3.6.9<\/h4>\n\n<ul>\n<li>Lead capture safety-net now also notifies. When the LLM forgets to\ncall <code>save_lead_info<\/code> and the visitor's message has an email\/phone,\nthe safety net in <code>class-api-handler.php<\/code> was persisting the lead\nsilently \u2014 it now also fires the <code>global_ai_chat_notify<\/code> action so\npush, email and webhook integrations on the Pro side hear about\nthese captures (previously only AI-tool-call captures triggered\nnotifications).<\/li>\n<li>Agents admin: the Leads tab now delegates extra-field collection to\nadd-ons via the <code>growthai:collect-agent-fields<\/code> event. The previous\nSave handler only persisted <code>lead_enabled<\/code> + <code>lead_fields<\/code>, silently\ndropping every extra Pro field rendered in that tab (push triggers,\nemail summary toggle\/recipient\/triggers).<\/li>\n<\/ul>\n\n<h4>3.6.8<\/h4>\n\n<ul>\n<li>Lead notifications: the <code>lead_info_collected<\/code> action now also fires\nthe first time a conversation captures any lead field (not only when\nevery required field is filled). This lets the optional Pro mobile\napp \/ webhooks notify the admin as soon as a visitor becomes\nidentifiable, even when the agent's <code>lead_fields<\/code> list demands more\nkeys than the visitor has provided so far. Strict completion still\nfires the action as before.<\/li>\n<\/ul>\n\n<h4>3.6.7<\/h4>\n\n<ul>\n<li>Internationalization: the admin and widget UI is now translatable, with bundled translations for English (en_US), Spanish (es_ES) and European Portuguese (pt_PT). Added <code>load_plugin_textdomain()<\/code> so the shipped <code>\/languages<\/code> files load, and a <code>global-ai-chat.pot<\/code> template for further translations.<\/li>\n<\/ul>\n\n<h4>3.6.6<\/h4>\n\n<ul>\n<li>Plugin Check pass: <code>Tested up to<\/code> bumped to 7.0, and the legacy-table migration in <code>includes\/class-agent.php<\/code> now interpolates <code>{$wpdb-&gt;prefix}growthai_agents<\/code> directly into the query string (the trusted <code>$wpdb-&gt;prefix<\/code> property concatenated with a hardcoded suffix) instead of going through an intermediate variable that the Plugin Check static analyser flagged.<\/li>\n<\/ul>\n\n<h4>3.6.5<\/h4>\n\n<ul>\n<li>Security\/escaping pass. The <code>[growthai_chat]<\/code> shortcode now builds its wrapper attributes through a strict allow-list (third-party filters must return an associative array of <code>data-*<\/code> names; values are escaped with <code>esc_attr()<\/code>) and its return value is wrapped with <code>wp_kses_post()<\/code> before output. Every builder render callback (Gutenberg block, WPBakery element, Elementor widget, Divi\/Beaver modules) runs its <code>do_shortcode()<\/code> return value through <code>wp_kses_post()<\/code>. WPBakery\/Divi <code>do_action('global_ai_chat_shortcode_disabled')<\/code> capture buffers are also passed through <code>wp_kses_post()<\/code> before return.<\/li>\n<\/ul>\n\n<h4>3.6.4<\/h4>\n\n<ul>\n<li>Free is now a single-agent plugin \u2014 the <code>growthai_agents<\/code> table, multi-agent CRUD APIs (<code>create<\/code>, <code>delete<\/code>, <code>duplicate<\/code>, <code>count<\/code>, <code>max_allowed<\/code>, <code>can_create<\/code>), the <code>agent_id=new<\/code> admin flow and the agent-id REST routing have all been removed. The agent configuration lives in <code>wp_options['growthai_agent']<\/code>.<\/li>\n<li>Page-builder integrations (Gutenberg, Elementor, Divi, Beaver Builder, WPBakery) and the <code>[growthai_chat]<\/code> shortcode no longer expose an \"agent\" parameter \u2014 there is only one agent to render.<\/li>\n<li>New resolve filters (<code>global_ai_chat_resolve_agent_by_id<\/code>, <code>_by_slug<\/code>, <code>_all_agents<\/code>, <code>pre_update_agent<\/code>, <code>resolve_request_agent<\/code>) let an external add-on (sold separately, not hosted here) layer a multi-agent system on top without Free needing any knowledge of it.<\/li>\n<li>Upgrade path: on first load, the first row of any legacy <code>growthai_agents<\/code> table is copied into the new wp_option so previously-configured installs keep their settings; the table itself is left untouched.<\/li>\n<\/ul>\n\n<h4>3.6.3<\/h4>\n\n<ul>\n<li>Removed every code path in the free plugin that branched on whether the optional add-on was installed: deleted <code>GrowthAI_Extensions::is_pro_active()<\/code>, <code>plan()<\/code>, <code>plan_name()<\/code>; dropped the related filters; collapsed <code>if (is_pro_active()) { ... }<\/code> blocks in admin\/agents\/api code so a single, unconditional path renders.<\/li>\n<li>Renamed the <code>global_ai_chat_render_license_panel<\/code> hook to the neutral <code>global_ai_chat_render_above_api_key<\/code>; the promotional banner is now controlled by the standalone <code>global_ai_chat_show_pro_banner<\/code> filter that defaults to true.<\/li>\n<li>Model dropdown decoration moved to <code>global_ai_chat_model_dropdown_label<\/code> so extensions can append price multipliers without touching plugin code.<\/li>\n<li>Submenu highlight is now filterable through <code>global_ai_chat_agent_submenu_highlight<\/code> instead of branching on add-on presence.<\/li>\n<\/ul>\n\n<h4>3.6.2<\/h4>\n\n<ul>\n<li>Trialware cleanup: removed all Pro-only marketplace JS that previously shipped in the free plugin (plan-comparison table, \"Adquirir\" buttons, license activation, content sync, prompt generator wizard, platform-key toggle, webhook test, Google Calendar disconnect).<\/li>\n<li>Stripped Pro-only branches from <code>admin\/js\/admin-script.js<\/code> (from 1130 to 330 lines) and <code>admin\/js\/agents.js<\/code>; Pro now injects its own JS for the features it ships.<\/li>\n<li>Removed dead Pro UI strings (<code>Atendimento ativo<\/code> badge, license-tab callouts, platform-quota notices) from <code>class-admin-settings.php<\/code> and <code>admin\/js\/conversations.js<\/code>.<\/li>\n<li>Document upload now uses the built-in Free vector store class (<code>GrowthAI_Vector_Store_Free<\/code>) which calls <code>api.openai.com<\/code> directly with the customer's key \u2014 no Pro addon required.<\/li>\n<\/ul>\n\n<h4>3.6.1<\/h4>\n\n<ul>\n<li>Security: knowledge-base uploads now validated server-side via <code>wp_check_filetype_and_ext<\/code> and <code>is_uploaded_file<\/code>; preset icon paths sanitised against traversal and run through <code>wp_kses<\/code> before output.<\/li>\n<li>wp.org compliance: removed all remaining Pro placeholder strings, sales CTAs, and license-tab links from builder integrations (Gutenberg, Elementor, Divi, Beaver Builder, WPBakery).<\/li>\n<li>i18n: every admin and visitor-facing string now uses the <code>global-ai-chat<\/code> text domain.<\/li>\n<li>Admin: outdated-content notice gated behind <code>content_sync<\/code> Pro feature so Free skips the query entirely; tab redirects whitelisted; brand strings renamed to \"Global AI Chat\".<\/li>\n<li>Cleanup: removed orphan <code>class-smtp.php<\/code>, <code>analytics.js<\/code>, <code>meta-box.js<\/code>; widget footer simplified to passive <code>Powered by Global AI Chat<\/code> attribution.<\/li>\n<\/ul>\n\n<h4>3.6.0<\/h4>\n\n<ul>\n<li>External services: free plugin now only contacts <code>api.openai.com<\/code>. All optional SaaS endpoints moved to the Pro addon.<\/li>\n<li>Knowledge base: built-in vector store handler in Free \u2014 uploads documents directly to OpenAI with your own key, no proxy.<\/li>\n<li>Security: preset chat icons are now path-sanitised and run through <code>wp_kses<\/code> before rendering; visitor session tokens use <code>window.crypto.getRandomValues<\/code> (Math.random fallback only on legacy browsers).<\/li>\n<li>Admin: removed all \"(Pro)\" placeholder options, sales upsell sidebars, account-registration card, prompt marketplace and ads endpoint. One info-only Pro banner remains on the Geral tab.<\/li>\n<li>i18n: all admin and visitor-facing strings wrapped in translation functions (<code>global-ai-chat<\/code> text domain).<\/li>\n<li><code>Domain Path: \/languages<\/code> header added.<\/li>\n<\/ul>\n\n<h4>3.5.0<\/h4>\n\n<ul>\n<li>GDPR cookies tab: full catalog of cookies\/localStorage entries listed in admin and shown to visitors before any data is written.<\/li>\n<li>Anti-hallucination grounding rule baked into every system prompt.<\/li>\n<li>Server-side name regex fallback when the AI omits the lead name in a tool call.<\/li>\n<\/ul>\n\n<h4>3.4.0<\/h4>\n\n<ul>\n<li>Renamed plugin to \"Global AI Chat\" (slug: <code>global-ai-chat<\/code>).<\/li>\n<li>Free plugin works entirely without a license \u2014 chat calls OpenAI directly with your key.<\/li>\n<li>Single-agent admin in Free. Multi-agent management, live chat handoff, Google Calendar booking, outbound webhooks, page\/post auto-sync, AI prompt generator, mobile app, managed tokens, auto-updates and analytics all ship in the separate Pro addon at https:\/\/globalai.software\/.<\/li>\n<li>Free's knowledge base now ships only document upload (PDF\/DOCX\/TXT). Page\/post auto-sync moved to Pro.<\/li>\n<li>New extension-point API (<code>GrowthAI_Extensions<\/code>) lets Pro hook cleanly into Free.<\/li>\n<li>New Geral tab with OpenAI API key management + opt-in uninstall data deletion toggle.<\/li>\n<li>sanitize_api_key preserves raw bytes instead of applying sanitize_text_field (would strip valid key characters).<\/li>\n<\/ul>\n\n<h4>3.3.x<\/h4>\n\n<ul>\n<li>Typing indicator across plugin web, widget, and mobile app; scroll-to-bottom on open; non-destructive \"switch agent\" button in multi-agent widget; license rotation + refresh token rotation on the mobile app; nonce + rate-limit on public-facing ajax endpoints.<\/li>\n<\/ul>\n\n<h4>3.0.0<\/h4>\n\n<ul>\n<li>Multi-agent: each agent has its own prompt, docs, lead fields and triggers.<\/li>\n<\/ul>\n\n<h4>2.0.0<\/h4>\n\n<ul>\n<li>Multi-agent foundation.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"AI-powered chat widget for WordPress using OpenAI. Bring your own OpenAI key, fully functional out of the box, no license required.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/301901","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=301901"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/thiagoqvaz"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=301901"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=301901"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=301901"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=301901"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=301901"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=301901"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}