{"id":358844,"date":"2026-08-26T10:57:19","date_gmt":"2026-08-26T10:57:19","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/pommy-chat\/"},"modified":"2026-08-26T10:56:46","modified_gmt":"2026-08-26T10:56:46","slug":"pommy-ai","status":"publish","type":"plugin","link":"https:\/\/so.wordpress.org\/plugins\/pommy-ai\/","author":23555122,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.4.0","stable_tag":"1.4.0","tested":"7.1","requires":"5.9","requires_php":"7.2","requires_plugins":null,"header_name":"Pommy AI","header_author":"Pommy","header_description":"Adds the Pommy chat widget to your site. Paste your Project ID in Settings and it goes live.","assets_banners_color":"5d3577","last_updated":"2026-08-26 10:56:46","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/pommy.ai\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":37,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.4.0":{"tag":"1.4.0","author":"pommyapp","date":"2026-08-26 10:56:46"}},"upgrade_notice":{"1.4.0":"<p>The plugin is now called Pommy AI and its settings move to Settings \u2192 Pommy AI. Your Project ID carries over automatically \u2014 then delete the old Pommy Chat plugin, or your site will load two chat widgets. Custom code using pommy_chat_* filters must be updated to pommy_ai_*.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3666818,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3666818,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3666818,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3666818,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.4.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3666818,"resolution":"1","location":"assets","locale":"","width":2560,"height":1462},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3666818,"resolution":"2","location":"assets","locale":"","width":2560,"height":1462}},"screenshots":{"1":"The settings screen. Paste your Project ID and press Test connection: the plugin asks Pommy whether the ID and API address really work for this site, and reports what it actually reached. WooCommerce stores also get a switch that keeps the launcher off the checkout page.","2":"The chat widget on a live site."}},"plugin_section":[],"plugin_tags":[191735,5707,2364,2369,4049],"plugin_category":[41,47],"plugin_contributors":[277582],"plugin_business_model":[],"class_list":["post-358844","plugin","type-plugin","status-publish","hentry","plugin_tags-ai-chatbot","plugin_tags-chat","plugin_tags-chatbot","plugin_tags-customer-support","plugin_tags-helpdesk","plugin_category-communication","plugin_category-education-and-support","plugin_contributors-pommyapp","plugin_committers-pommyapp"],"banners":{"banner":"https:\/\/ps.w.org\/pommy-ai\/assets\/banner-772x250.png?rev=3666818","banner_2x":"https:\/\/ps.w.org\/pommy-ai\/assets\/banner-1544x500.png?rev=3666818","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/pommy-ai\/assets\/icon-128x128.png?rev=3666818","icon_2x":"https:\/\/ps.w.org\/pommy-ai\/assets\/icon-256x256.png?rev=3666818","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/pommy-ai\/assets\/screenshot-1.png?rev=3666818","caption":"The settings screen. Paste your Project ID and press Test connection: the plugin asks Pommy whether the ID and API address really work for this site, and reports what it actually reached. WooCommerce stores also get a switch that keeps the launcher off the checkout page."},{"src":"https:\/\/ps.w.org\/pommy-ai\/assets\/screenshot-2.png?rev=3666818","caption":"The chat widget on a live site."}],"raw_content":"<!--section=description-->\n<p>Pommy AI connects your site to Pommy (https:\/\/pommy.ai), a hosted AI customer-support chat service. <strong>A Pommy account is required<\/strong>: this plugin is a client for that service and does nothing on its own. Pommy offers free and paid plans \u2014 see https:\/\/pommy.ai for current plans and pricing.<\/p>\n\n<p>Install the plugin, paste the Project ID from your Pommy dashboard into <strong>Settings \u2192 Pommy AI<\/strong>, and the chat launcher appears in the corner of your site.<\/p>\n\n<p>Read the <strong>External services<\/strong> section below before you install. It lists exactly what is sent to Pommy, when, and what is stored \u2014 including data collected from visitors who never open the chat.<\/p>\n\n<p><strong>Why a plugin instead of pasting code into your theme<\/strong><\/p>\n\n<ul>\n<li>Works on block themes (the default since WordPress 5.9), which have no <code>header.php<\/code> file.<\/li>\n<li>Works on managed hosts where the Theme File Editor is disabled via <code>DISALLOW_FILE_EDIT<\/code>.<\/li>\n<li>Survives theme updates \u2014 no theme file is modified, so nothing gets overwritten.<\/li>\n<\/ul>\n\n<p><strong>How it works<\/strong><\/p>\n\n<p>The plugin registers a small loader script through the WordPress script API (<code>wp_enqueue_script<\/code>), printed in the site footer. The loader creates a cross-origin iframe that hosts the chat interface on Pommy's own domain, so the widget's code and storage stay separate from your site. The iframe is granted microphone permission, for the chat's optional voice input, and clipboard access so a visitor can copy a reply.<\/p>\n\n<p>No chat content is stored in your WordPress database, and your server makes no request to Pommy on its own \u2014 but the visitor's browser does, on every page view. See <strong>External services<\/strong>.<\/p>\n\n<p><strong>What the plugin stores in WordPress<\/strong><\/p>\n\n<p>Four options in your WordPress database:<\/p>\n\n<ul>\n<li><code>pommy_ai_project_id<\/code> \u2014 your Pommy Project ID.<\/li>\n<li><code>pommy_ai_api_url<\/code> \u2014 the Pommy API endpoint (defaults to <code>https:\/\/api.pommy.ai<\/code>).<\/li>\n<li><code>pommy_ai_hide_on_checkout<\/code> \u2014 whether the launcher is hidden on the WooCommerce checkout page. On by default.<\/li>\n<li><code>pommy_ai_test_result<\/code> \u2014 the outcome of the last \"Test connection\" check, or the reason a Project ID was refused. Cleared whenever the settings are saved, because an old verdict describes old settings.<\/li>\n<\/ul>\n\n<p>Saving the settings screen writes these whether or not a Project ID is filled in. All four are deleted when you delete the plugin, along with the options used by the plugin's earlier \"Pommy Chat\" releases.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin connects your site to Pommy (https:\/\/pommy.ai), the chat service that powers the widget. Without a Pommy account and a Project ID the plugin sends nothing.<\/p>\n\n<p><strong>1. The chat widget, running in your visitor's browser<\/strong><\/p>\n\n<p>Once a Project ID is saved, every front-end page loads the widget from the Pommy API host you configured (by default <code>https:\/\/api.pommy.ai<\/code>). From then on the widget talks to Pommy directly, from the visitor's browser rather than from your server.<\/p>\n\n<p><em>Sent on every page view, before the visitor interacts with anything:<\/em> your Project ID, the page URL and the referring URL, and \u2014 inherent to any request their browser makes \u2014 the visitor's IP address and user-agent string. Pommy resolves the IP to a country and city and derives browser, operating system and device type from the user agent, and keeps this as a visitor record whether or not the visitor ever opens the chat. The widget repeats this roughly every 30 seconds while the page is open, and holds a WebSocket connection open to Pommy for the same period. It also fetches the widget's configuration on load, and its interface translations when the visitor's language needs them.<\/p>\n\n<p><em>Sent only if the visitor uses the chat:<\/em> the messages they write, and any contact details they choose to type in, for example a name or an email address.<\/p>\n\n<p><em>Stored in the visitor's browser:<\/em> a visitor identifier and the most recent messages of the conversation, in local storage on Pommy's domain rather than yours, so the chat survives a page change.<\/p>\n\n<p><em>Not sent by the plugin:<\/em> your WordPress user accounts, your posts, or your WooCommerce order and customer records. The plugin reads only its own settings and, on the settings screen, the current administrator's capabilities.<\/p>\n\n<p><strong>2. Setup check, sent from your server<\/strong><\/p>\n\n<p>When an administrator presses \"Test connection\" on the plugin's settings screen, WordPress makes one request from your server to <code>POST {API URL}\/api\/plugin\/verify<\/code>.<\/p>\n\n<p><em>Sent:<\/em> your Project ID, your site's home URL, and the plugin version.\n<em>When:<\/em> only when that button is pressed. Your server contacts Pommy at no other time.\n<em>Returned:<\/em> whether the project exists, whether the domain is verified, the project's name, and the address of the Pommy API that answered \u2014 so a site pointed at the wrong environment names it rather than failing silently.<\/p>\n\n<p>Pommy's terms of service: https:\/\/pommy.ai\/terms\nPommy's privacy policy: https:\/\/pommy.ai\/privacy<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Create a Pommy account at https:\/\/pommy.ai, then open <strong>Integrations \u2192 WordPress<\/strong> in the dashboard and copy your Project ID.<\/li>\n<li>In WordPress admin, go to <strong>Plugins \u2192 Add New<\/strong>, search for <strong>Pommy AI<\/strong>, click <strong>Install Now<\/strong>, then <strong>Activate<\/strong>.<\/li>\n<li>Go to <strong>Settings \u2192 Pommy AI<\/strong> and paste the Project ID. If the dashboard showed you an API address other than <code>https:\/\/api.pommy.ai<\/code>, paste that into the <strong>API URL<\/strong> field too. Click <strong>Save Changes<\/strong>.<\/li>\n<li>Click <strong>Test connection<\/strong>. It asks Pommy whether this Project ID and API address really work for this site, and names what it reached.<\/li>\n<li>Visit your site \u2014 the chat launcher appears in the bottom corner.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"where%20do%20i%20find%20my%20project%20id%3F\"><h3>Where do I find my Project ID?<\/h3><\/dt>\n<dd><p>In the Pommy dashboard, under Integrations \u2192 WordPress. It also appears inside the embed snippet on the Widgets page, as the value of <code>projectId<\/code>. It is a UUID \u2014 it looks like <code>123e4567-e89b-12d3-a456-426614174000<\/code>.<\/p><\/dd>\n<dt id=\"my%20theme%20is%20a%20block%20theme.%20does%20this%20work%3F\"><h3>My theme is a block theme. Does this work?<\/h3><\/dt>\n<dd><p>Yes. The plugin enqueues its loader through the WordPress script API, which works on every standards-compliant theme \u2014 block themes included. It never touches <code>header.php<\/code>.<\/p><\/dd>\n<dt id=\"does%20the%20widget%20appear%20on%20the%20woocommerce%20checkout%20page%3F\"><h3>Does the widget appear on the WooCommerce checkout page?<\/h3><\/dt>\n<dd><p>No, not by default. On a phone the launcher lands in the same corner as the order button, so the plugin keeps it off that page. Untick <strong>Hide the chat launcher on the checkout page<\/strong> in Settings \u2192 Pommy AI if you want live help during payment.<\/p>\n\n<p>The widget also stays off feeds, AMP pages, and the editing canvases of Elementor, Divi, Beaver Builder, WPBakery, Brizy and Oxygen.<\/p><\/dd>\n<dt id=\"how%20do%20i%20hide%20the%20widget%20on%20specific%20pages%3F\"><h3>How do I hide the widget on specific pages?<\/h3><\/dt>\n<dd><p>Use the <code>pommy_ai_enabled<\/code> filter from your child theme's <code>functions.php<\/code>:<\/p>\n\n<pre><code>add_filter( 'pommy_ai_enabled', function ( $enabled ) { return is_page( 'pricing' ) ? false : $enabled; } );\n<\/code><\/pre><\/dd>\n<dt id=\"what%20filters%20does%20the%20plugin%20provide%3F\"><h3>What filters does the plugin provide?<\/h3><\/dt>\n<dd><ul>\n<li><code>pommy_ai_enabled<\/code> \u2014 boolean, default true. Return false to keep the widget off the current request.<\/li>\n<li><code>pommy_ai_skip_contexts<\/code> \u2014 boolean, always false when it runs. Return true to add a skip condition of your own. It runs after the built-in skips, so it cannot re-enable a page the plugin already skips.<\/li>\n<li><code>pommy_ai_loader_attributes<\/code> \u2014 array of attribute name =&gt; value placed on the loader <code>&lt;script&gt;<\/code> tag. Pass true for a boolean attribute. Only loading attributes and <code>data-*<\/code> names are honoured.<\/li>\n<\/ul><\/dd>\n<dt id=\"does%20the%20plugin%20send%20data%20to%20pommy%20from%20my%20server%3F\"><h3>Does the plugin send data to Pommy from my server?<\/h3><\/dt>\n<dd><p>Only when you press \"Test connection\". That sends one request containing your Project ID, your site's home URL and the plugin version. Nothing else leaves your server at any time. The widget itself talks to Pommy from the visitor's browser \u2014 see External services for what that involves.<\/p><\/dd>\n<dt id=\"i%20was%20using%20the%20%22pommy%20chat%22%20plugin.%20what%20do%20i%20do%3F\"><h3>I was using the \"Pommy Chat\" plugin. What do I do?<\/h3><\/dt>\n<dd><p>Activate Pommy AI; your Project ID and settings are carried over automatically. Then deactivate and delete the old Pommy Chat plugin \u2014 the folder name changed, so WordPress treats them as two plugins and would otherwise load two chat widgets on your site.<\/p><\/dd>\n<dt id=\"what%20happens%20when%20i%20delete%20the%20plugin%3F\"><h3>What happens when I delete the plugin?<\/h3><\/dt>\n<dd><p>All four plugin options are removed from the database, along with the options written by the earlier \"Pommy Chat\" releases, on single sites and on every site of a multisite network.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.4.0<\/h4>\n\n<ul>\n<li>The plugin is now called Pommy AI, matching the service it connects to. Its settings screen moves to Settings \u2192 Pommy AI, and the filters are renamed to <code>pommy_ai_enabled<\/code>, <code>pommy_ai_skip_contexts<\/code> and <code>pommy_ai_loader_attributes<\/code>. Settings from the earlier \"Pommy Chat\" releases are carried over automatically; delete that plugin once this one is active.<\/li>\n<li>The External services section now describes everything the widget sends from a visitor's browser, including the data collected before a visitor opens the chat.<\/li>\n<li>The API URL field now accepts only pommy.ai addresses over HTTPS, and the setup check is sent through WordPress' safe HTTP helper, so the field can no longer point your site's script tag or your server at an arbitrary host. A site that needs a different endpoint can set <code>POMMY_AI_API_URL<\/code> in <code>wp-config.php<\/code>.<\/li>\n<li>Saving the settings on a site without WooCommerce no longer switches off the checkout protection for the store you install later.<\/li>\n<li>A Project ID left over from an older version that is not in the right format is now ignored rather than loaded, and the settings screen says the widget is not live instead of implying it is.<\/li>\n<li>The connection result is stored as a code rather than a finished sentence, so the message follows the language of whoever reads the screen, and it now says when the check ran.<\/li>\n<\/ul>\n\n<h4>1.3.5<\/h4>\n\n<ul>\n<li>The readme now matches the plugin: it describes how the widget script is loaded, lists all four stored options, and no longer contradicts itself about requests sent from your server.<\/li>\n<\/ul>\n\n<h4>1.3.4<\/h4>\n\n<ul>\n<li>The widget loader is registered and enqueued through the WordPress script API, and the async and cache-optimizer attributes are added through the <code>script_loader_tag<\/code> filter.<\/li>\n<\/ul>\n\n<h4>1.3.3<\/h4>\n\n<ul>\n<li>Removed the Plugin URI header: it pointed at the same address as Author URI, and no page about this plugin alone exists yet.<\/li>\n<\/ul>\n\n<h4>1.3.2<\/h4>\n\n<ul>\n<li>Housekeeping before the plugin directory submission.<\/li>\n<\/ul>\n\n<h4>1.3.1<\/h4>\n\n<ul>\n<li>Translations now come from WordPress itself instead of a bundled folder that shipped empty.<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>Documents the external service the widget talks to, what it sends and when \u2014 required reading before you install anything that phones home.<\/li>\n<li>Verified with WooCommerce: the launcher stays off the block checkout and returns when the setting is switched off.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>New \"Test connection\" button: asks Pommy whether this Project ID and API address really work for this site, and says which of the three things is wrong when they do not.<\/li>\n<li>The settings screen no longer claims the widget is active just because a Project ID is filled in \u2014 it reports what was actually checked.<\/li>\n<li>A Project ID that is not in the right format is refused with an explanation instead of being saved into silence.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>WooCommerce: the chat launcher stays off the checkout page by default, where it could sit on top of the order button on a phone. Switchable in Settings.<\/li>\n<li>The loader now carries the opt-out attributes that caching and optimization plugins look for, so tools such as Rocket Loader, Autoptimize, WP Rocket, LiteSpeed and Perfmatters leave it alone rather than deferring or combining it.<\/li>\n<li>The widget no longer prints inside page-builder editing canvases or on AMP requests.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release: settings page under Settings, front-end widget injection via <code>wp_footer<\/code>, an enable\/disable filter, full uninstall cleanup.<\/li>\n<\/ul>","raw_excerpt":"Add the Pommy chat widget to your WordPress site. Paste your Project ID and the widget goes live \u2014 no theme files touched.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/so.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/358844","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/so.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/so.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/so.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=358844"}],"author":[{"embeddable":true,"href":"https:\/\/so.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/pommyapp"}],"wp:attachment":[{"href":"https:\/\/so.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=358844"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/so.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=358844"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/so.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=358844"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/so.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=358844"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/so.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=358844"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/so.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=358844"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}