Pitchbar ships a first-party WordPress & WooCommerce plugin that drops the streaming chat widget on every public page, syncs the site's content as a knowledge source, and (when WooCommerce is active) deeply integrates with the store — product cards, coupon application, order lookup, lead mirroring, and abandoned-cart re-engagement.
The plugin lives in the Pitchbar monorepo at
wp-plugin/pitchbar/ and ships as a versioned zip you
can install from Plugins → Add New → Upload Plugin
in any WordPress 6.4+ install on PHP 7.4+.
/api/v1/wp/* and the plugin's /wp-json/pitchbar/v1/*.<script> tag injected into wp_footer on every public page, scoped to the post types you opt into. RTL-aware. Hidden on wp-admin, wp-login, AJAX, REST, XML-RPC, and cron requests.post_content).wp_user_id + email_hash (never plaintext) are signed and forwarded to the chat session so the agent knows who's talking.lookup_order tool calls back into /wp-json/pitchbar/v1/orders/lookup over HMAC-signed POST so the agent can answer "where's my order?" without exposing customer data.<coupon/> cards in chat; the Apply button stages the code in a transient and applies it on the visitor's next cart load.localStorage; the widget proactively engages when the cart sits idle past the configured threshold.| Component | Tested range |
|---|---|
| WordPress | 6.4 → 6.6 |
| PHP | 7.4 → 8.4 |
| WooCommerce | 8.0 → 9.x (optional — plugin core works without WC) |
| Multisite | Supported (per-site activation; each site connects to its own Pitchbar workspace) |
| Page builders | Elementor (Free + Pro), Divi, Beaver Builder, Oxygen, Bricks |
| Theme | Theme-agnostic. Widget renders in a Shadow DOM isolated from theme CSS. |
| RTL locales | Yes (Arabic, Hebrew, Persian, Urdu, etc.). Widget mirrors via data-page-dir. |
Super-admins can produce an install-ready .zip of the
plugin from inside the Pitchbar admin without ssh access. Open
/admin/integrations/wordpress:
php artisan pitchbar:build-wp-plugin against the bundled wp-plugin/pitchbar/ source tree and writes a versioned archive to storage/app/private/wp-plugin-builds/pitchbar-{version}.zip.Content-Disposition; it's roughly 45 KB and contains a top-level pitchbar/ directory..DS_Store, node_modules/, tests/, .git*) so what your tenants upload is exactly what WordPress should install.
Headless alternative: php artisan pitchbar:build-wp-plugin
works from the CLI and prints the resulting path. The optional
--output flag overrides the destination directory.
The plugin and the Pitchbar server authenticate each other with two distinct credentials, in opposite directions:
/settings/api-tokens, scope wp:integration. Pitchbar stores only the SHA-256 hash of the plaintext. The plugin keeps the plaintext in wp_options (treat as wp-config.php-level secret).shopper_signing_secret. The plugin receives this secret in the handshake response and stores it locally. Pitchbar uses it to sign every callback (order lookup, coupon apply, lead push) so the WordPress REST endpoints can verify the caller is Pitchbar without ever holding the bearer plaintext.See REST API reference for the exact signature scheme and verification code path.
Plugin version 2.0.5. Notable since v1.x:
pitchbar-zh_CN.po (editable) and pitchbar-zh_CN.mo (compiled, what WP loads). pitchbar/documentation.html now ships inside the install with the full Mintlify-style reference — open in any browser, no internet required. php artisan pitchbar:build-wp-plugin compiles every .po to .mo automatically before zipping, so future language packs ship correctly without GNU msgfmt on the build host.admin_head style block.the_content collapses to empty are synthesised from title + excerpt + taxonomy terms client-side so they always have indexable text.posts.N.content_html field is required the first time any post had an empty body. Pre-fix the product syncer filtered to [simple, variable, grouped, external] which silently dropped subscriptions, bundles, memberships, bookings, and custom types. Both fixed; a fallback WP_Query covers hosts whose wc_get_products hook chain hides everything.woocommerce_loaded instead of trusting class_exists('WooCommerce') at plugins_loaded priority 10.wc_get_coupons() (not public API) to the shop_coupon CPT directly.abandoned_cart rule kind exposed in the agent Behavior triggers admin.See application changelog for the full release history.