{"id":260518,"date":"2025-11-15T17:37:15","date_gmt":"2025-11-15T17:37:15","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/bitbloom-openai-agent\/"},"modified":"2025-12-30T06:40:38","modified_gmt":"2025-12-30T06:40:38","slug":"bitbloom-chatbot-for-chatkit","status":"publish","type":"plugin","link":"https:\/\/test.wordpress.org\/plugins\/bitbloom-chatbot-for-chatkit\/","author":18199468,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"1.2.2","stable_tag":"1.2.2","tested":"6.9.4","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"BitBloom Chatbot for Chatkit","header_author":"BitBloom","header_description":"Embeds the ChatKit widget from OpenAI Agent Builder into WordPress. Independent integration by BitBloom; not affiliated with OpenAI.","assets_banners_color":"fcfcfc","last_updated":"2025-12-30 06:40:38","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/github.com\/BitBloom-HQ\/bitbloom-chatbot-for-chatkit","header_author_uri":"https:\/\/github.com\/BitBloom-HQ","rating":0,"author_block_rating":0,"active_installs":30,"downloads":582,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.2.0":{"tag":"1.2.0","author":"ishchai","date":"2025-11-15 18:07:23"},"1.2.1":{"tag":"1.2.1","author":"ishchai","date":"2025-12-28 05:25:52"},"1.2.2":{"tag":"1.2.2","author":"ishchai","date":"2025-12-30 06:40:38"}},"upgrade_notice":{"1.2.2":"<p>Improves the launcher button logic (supports image-only launcher and smarter defaults).<\/p>","1.2.1":"<p>Adds a configurable rate limit setting (default 20\/hour).<\/p>","1.2.0":"<p>First stable release.<\/p>"},"ratings":{"1":0,"2":0,"3":0,"4":0,"5":0},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3396302,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3396302,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3396302,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3396302,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.2.0","1.2.1","1.2.2"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"<strong>Admin settings screen<\/strong> \u2013 Configure Workflow ID, Domain Public Key, and chat theme.","2":"<strong>Agent embedded on a live site<\/strong> \u2013 The ChatKit widget opened on a WordPress page."},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[2353,5707,250736,230,194533],"plugin_category":[41,56],"plugin_contributors":[250737],"plugin_business_model":[],"class_list":["post-260518","plugin","type-plugin","status-publish","hentry","plugin_tags-ai","plugin_tags-chat","plugin_tags-chatkit","plugin_tags-embed","plugin_tags-openai","plugin_category-communication","plugin_category-social-and-sharing","plugin_contributors-ishchai","plugin_committers-ishchai"],"banners":{"banner":"https:\/\/ps.w.org\/bitbloom-chatbot-for-chatkit\/assets\/banner-772x250.png?rev=3396302","banner_2x":"https:\/\/ps.w.org\/bitbloom-chatbot-for-chatkit\/assets\/banner-1544x500.png?rev=3396302","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/bitbloom-chatbot-for-chatkit\/assets\/icon-128x128.png?rev=3396302","icon_2x":"https:\/\/ps.w.org\/bitbloom-chatbot-for-chatkit\/assets\/icon-256x256.png?rev=3396302","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p><strong>BitBloom Chatbot for Chatkit<\/strong> lets you embed a published Agent Builder workflow into WordPress using OpenAI\u2019s ChatKit UI.\nFeatures a floating launcher, optional shortcode, theme controls (light\/dark, accent color, radius, density, font), and server-side session creation with REST nonces (no API key in the browser).<\/p>\n\n<p><strong>Highlights<\/strong>\n- Floating ChatKit launcher or inline embed via shortcode.\n- One-time setup: paste your <em>Workflow ID<\/em> and <em>Domain Public Key<\/em>.\n- Theme controls: color scheme, accent, radius, density, font.\n- Secure: session created on the server; REST calls nonce-protected.\n- Rate limiting: configurable per-IP hourly limit for session requests (default 20\/hour).\n- Privacy-friendly: user ID is a salted hash (no IP stored or sent by the plugin).<\/p>\n\n<p><strong>What you need from OpenAI<\/strong>\n1. A <strong>published<\/strong> Agent Builder workflow (copy its Workflow ID).\n2. Your <strong>Domain allowlist<\/strong> and <strong>Domain Public Key<\/strong> (Security \u2192 Domain allowlist).\n3. Active billing\/credits in your OpenAI account.<\/p>\n\n<h3>Usage<\/h3>\n\n<p><strong>Floating Launcher (auto)<\/strong>\n- Once configured, the floating button appears on the front-end. Clicking it opens ChatKit bound to your published workflow.<\/p>\n\n<p><strong>Shortcode (inline chat)<\/strong>\nAdd to any post\/page:\n[bitbloom_chatbot_for_chatkit]<\/p>\n\n<p><strong>Security<\/strong>\n- The plugin uses <code>wp_rest<\/code> nonces for the session endpoint and never exposes your OpenAI API key in the browser.<\/p>\n\n<h3>Privacy<\/h3>\n\n<ul>\n<li>The plugin computes an anonymized <strong>user identifier<\/strong> using a salt + user agent hash and <strong>does not send IP<\/strong>.<\/li>\n<li>The plugin does <strong>not<\/strong> collect analytics or telemetry.<\/li>\n<li>Data exchanged with OpenAI is limited to what\u2019s required to run your configured workflow (message text, workflow ID, domain public key, and the anonymized user hash).<\/li>\n<li>On uninstall, the option <code>bitbloom-chatbot-for-chatkit_options<\/code> is deleted.<\/li>\n<\/ul>\n\n<h3>External services<\/h3>\n\n<p>This plugin loads the ChatKit web component from OpenAI\u2019s CDN and creates short-lived client sessions with OpenAI in order to render the chat UI.<\/p>\n\n<p>\u2022 Service: OpenAI ChatKit (web component &amp; sessions API)\n\u2022 What for: Render the chat widget and let the agent run your workflow.\n\u2022 Endpoints:\n  - CDN script: https:\/\/cdn.platform.openai.com\/deployments\/chatkit\/chatkit.js\n  - Sessions API: https:\/\/api.openai.com\/v1\/chatkit\/sessions\n\u2022 What is sent and when:\n  - On page load, the browser downloads the ChatKit web component from the CDN.\n  - When the user opens the chat, WordPress calls the Sessions API server-to-server to mint a short-lived client_secret. The request includes:\n    * Your configured workflow ID\n    * A non-identifying, hashed \u201cuser\u201d string derived from the site salt and the user agent (no PII)\n\u2022 Privacy &amp; Terms:\n  - OpenAI Terms: https:\/\/openai.com\/policies\/terms-of-use\n  - OpenAI Privacy Policy: https:\/\/openai.com\/policies\/privacy-policy<\/p>\n\n<!--section=installation-->\n<p>For a full video walkthrough of the installation and setup process:\nhttps:\/\/youtu.be\/Kd0WxODDdYc<\/p>\n\n<ol>\n<li><p>Download the ZIP and upload it via <strong>Plugins \u2192 Add New \u2192 Upload Plugin<\/strong>, \nor install it directly from the WordPress Plugin Directory.<\/p><\/li>\n<li><p>Activate <strong>BitBloom Chatbot for Chatkit<\/strong>.<\/p><\/li>\n<li><p>Add your OpenAI API key to wp-config.php:<\/p>\n\n<p>define('OPENAI_API_KEY', 'sk-proj-xxxxxxxxxxxxxxxx');<\/p>\n\n<p>This key must NOT be placed in the plugin settings screen for security reasons.<\/p><\/li>\n<li><p>Go to <strong>BitBloom Chatbot for Chatkit<\/strong> in the WordPress admin menu and configure:<\/p><\/li>\n<\/ol>\n\n<ul>\n<li><p><strong>Workflow ID<\/strong><br \/>\n (Found in OpenAI \u2192 Agent Builder \u2192 Publish \u2192 Get Code)<\/p><\/li>\n<li><p><strong>Domain Public Key<\/strong><br \/>\n (Found in OpenAI \u2192 Agent Builder \u2192 Security \u2192 Domain allowlist)<\/p><\/li>\n<\/ul>\n\n<ol>\n<li><p>(Optional) Customize theme settings:<\/p>\n\n<ul>\n<li>Color scheme (light\/dark)<\/li>\n<li>Accent color<\/li>\n<li>Corner radius<\/li>\n<li>Density<\/li>\n<li>Font<\/li>\n<\/ul><\/li>\n<li><p>(Optional) Enable <strong>Auto-inject<\/strong> to display the floating chat launcher on all pages.<\/p><\/li>\n<li><p>(Optional) To embed the chat inline inside a single page or post, use the shortcode:<\/p>\n\n<p>[bitbloom_chatbot_for_chatkit]<\/p><\/li>\n<li><p>(Optional) Adjust <strong>Rate limit<\/strong> (per IP \/ hour). Default is 20\/hour.<\/p><\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id='the%20chat%20opens%20but%20doesn%E2%80%99t%20reply.%20what%20should%20i%20check%3F'><h3>The chat opens but doesn\u2019t reply. What should I check?<\/h3><\/dt>\n<dd><p>The most common causes are:\n- The workflow is not <strong>published<\/strong> in OpenAI\u2019s Agent Builder.\n- The site domain is missing from the <strong>Domain allowlist<\/strong>.\n- Incorrect or missing <strong>Domain Public Key<\/strong>.\n- No available <strong>OpenAI credits<\/strong> in your account.<\/p><\/dd>\n<dt id='where%20do%20i%20put%20my%20openai%20api%20key%3F'><h3>Where do I put my OpenAI API key?<\/h3><\/dt>\n<dd><p>Add it to your wp-config.php file:\ndefine('OPENAI_API_KEY', 'sk-proj-xxxxxxxx');\nDo not place the API key in the browser or inside the plugin settings.<\/p><\/dd>\n<dt id='does%20the%20plugin%20store%20chat%20history%20or%20user%20messages%3F'><h3>Does the plugin store chat history or user messages?<\/h3><\/dt>\n<dd><p>No. The plugin does not store any conversation data on your server.<br \/>\nAll communication is handled directly through the session created when the chat loads.<\/p><\/dd>\n<dt id='does%20the%20plugin%20send%20my%20api%20key%20to%20the%20browser%3F'><h3>Does the plugin send my API key to the browser?<\/h3><\/dt>\n<dd><p>No. The API key remains server-side.<br \/>\nAll browser requests use a WordPress REST route protected by a nonce.<\/p><\/dd>\n<dt id='can%20i%20embed%20the%20chat%20inside%20a%20page%20instead%20of%20using%20the%20floating%20launcher%3F'><h3>Can I embed the chat inside a page instead of using the floating launcher?<\/h3><\/dt>\n<dd><p>Yes. Use the shortcode:\n[bitbloom_chatbot_for_chatkit]<\/p><\/dd>\n<dt id='can%20i%20customize%20the%20look%20of%20the%20chat%3F'><h3>Can I customize the look of the chat?<\/h3><\/dt>\n<dd><p>Yes. You can change the color scheme (light\/dark), accent color, radius, density, and font.<\/p><\/dd>\n<dt id='is%20there%20a%20usage%2Frate%20limit%20in%20the%20plugin%3F'><h3>Is there a usage\/rate limit in the plugin?<\/h3><\/dt>\n<dd><p>Yes. By default, the plugin limits session requests to 20 per hour per IP.\nYou can change this in the plugin settings (Rate limit per IP \/ hour) to any value between 1 and 99999.<\/p><\/dd>\n<dt id='the%20chat%20window%20shows%20an%20error%20when%20loading.%20what%20causes%20this%3F'><h3>The chat window shows an error when loading. What causes this?<\/h3><\/dt>\n<dd><p>Usually one of the following:\n- Missing or invalid <strong>Workflow ID<\/strong>\n- Incorrect <strong>Domain Public Key<\/strong>\n- The WordPress site is blocking REST requests\n- A security plugin is blocking nonces or AJAX<\/p><\/dd>\n<dt id='does%20the%20plugin%20support%20caching%20plugins%3F'><h3>Does the plugin support caching plugins?<\/h3><\/dt>\n<dd><p>Yes. The launcher and UI are safe to cache, but the REST endpoints should remain uncached.<br \/>\nIf you use aggressive caching (e.g., LiteSpeed, Cloudflare APO), exclude:\n- \/wp-json\/bitbloom-chatbot-for-chatkit\/*<\/p><\/dd>\n<dt id='can%20i%20use%20multiple%20workflows%20on%20the%20same%20site%3F'><h3>Can I use multiple workflows on the same site?<\/h3><\/dt>\n<dd><p>Yes. The shortcode supports multiple instances when placed on different pages.<\/p><\/dd>\n<dt id='does%20the%20plugin%20work%20on%20multisite%3F'><h3>Does the plugin work on multisite?<\/h3><\/dt>\n<dd><p>Yes, but each subsite must configure its own Workflow ID and Domain Public Key.<\/p><\/dd>\n<dt id='is%20this%20plugin%20gdpr-compliant%3F'><h3>Is this plugin GDPR-compliant?<\/h3><\/dt>\n<dd><p>The plugin does not store personal data, but the site owner is responsible for ensuring:\n- A proper privacy notice\n- Compliance with data handling when using OpenAI services<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.2.2<\/h4>\n\n<ul>\n<li>Improved launcher button rendering rules for avatar + text:\n\n<ul>\n<li>Default label appears only when both text and avatar are missing<\/li>\n<li>Supports image-only launcher (no label)<\/li>\n<\/ul><\/li>\n<\/ul>\n\n<h4>1.2.1<\/h4>\n\n<ul>\n<li>Added an admin setting to configure the per-IP hourly rate limit for session requests (default: 20\/hour).<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Initial public release under the name \u201cBitBloom ChatKit Embed\u201d.<\/li>\n<\/ul>","raw_excerpt":"Embeds the ChatKit widget from OpenAI Agent Builder into WordPress pages. Independent integration by BitBloom; not affiliated with OpenAI.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/260518","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=260518"}],"author":[{"embeddable":true,"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/ishchai"}],"wp:attachment":[{"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=260518"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=260518"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=260518"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=260518"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=260518"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=260518"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}