

Dashboard — setup progress, live conversation stats and a preview of the widget.
OZY AI Agent puts a real AI agent on your WordPress site — not just a chatbot. A chatbot answers from text; an agent uses tools to fetch live data from your site and perform actions for the visitor. Every action that changes something (cart, coupon, order, enquiry) only happens after the visitor taps Confirm — the model can never act on its own.
It adapts to your site automatically:
It only helps with your website. Requests for unrelated work — writing code, homework, essays, general knowledge — are politely declined and steered back to your business.
search_site, read_page — search and read your public pages and postshandoff — WhatsApp, email and booking buttons with a conversation summarysend_enquiry (Confirm) — emails the visitor’s enquiry to youreport_gap — logs questions your site could not answer to the Content Gaps screensearch_products, get_product, compare_products, list_attribute_values, get_shipping_info, get_cart, add_to_cart (Confirm), update_cart_item (Confirm), apply_coupon (Confirm), checkout, track_orderProducts appear as cards with image, price, stock and a link. Suggested replies appear as tappable chips.
[oozzy_ai_agent] and [ozy_agent_ask] shortcodesoozzy_open, oozzy_message, view_item, add_to_cart, begin_checkout, purchase, oozzy_handoffEverything can be changed later under AI Provider, AI Agent and Tools & Store.
Register your own tools:
add_action( 'oozzy_register_tools', function () {
OOZZY_Tools::register( [
'name' => 'calculate_fabric',
'description' => 'Metres of fabric needed for a garment.',
'parameters' => [ 'type' => 'object', 'properties' => [ 'height_cm' => [ 'type' => 'integer' ] ], 'required' => [ 'height_cm' ] ],
'callback' => function ( $args, $ctx ) { return [ 'metres' => 4.5 ]; },
'confirm' => false,
] );
} );
Filters: oozzy_tools, oozzy_system_prompt, oozzy_messages, oozzy_tool_result, oozzy_response, oozzy_client_ip, oozzy_product_fields, oozzy_product_card, oozzy_product_search_handler, oozzy_order_lookup_allowed, oozzy_find_order, oozzy_order_view, oozzy_phone_normalize, oozzy_inchat_gateways, oozzy_currency_markers, oozzy_page_content, oozzy_context_chars, oozzy_time_budget, oozzy_front_config.
Actions: oozzy_register_tools, oozzy_tool_called, oozzy_action_confirmed, oozzy_conversation_ended, oozzy_gap_logged, oozzy_lead_captured, oozzy_handoff.
JavaScript: window.OzyAgent.open( { prompt, context: { productId } } ), OzyAgent.send( text ), OzyAgent.close(). Window events: oozzy:open, oozzy:message, oozzy:card_click, oozzy:action_confirmed, oozzy:handoff.
API keys can be set in wp-config.php instead of the database: OOZZY_GROQ_KEY, OOZZY_GEMINI_KEY, OOZZY_MISTRAL_KEY, OOZZY_OPENAI_KEY, OOZZY_CLAUDE_KEY.
POST /wp-json/oozzy/v1/chat with `"stream": true` answers as `text/event-stream`: `status` events while tools run, `delta` text as the model writes, `reset` when a fallback provider takes over, then one `done` event carrying the full response.
Tests: composer install, bin/install-wp-tests.sh <db> <user> <pass>, then vendor/bin/phpunit.
If OZY Smart Search is active, product search uses its ozy_smart_search_query() engine automatically.
[oozzy_ai_agent] — inline chat panel
[oozzy_ai_agent mode="button" label="Chat with us"] — button that opens the popup
[oozzy_ai_agent mode="loader"] — load the floating widget on this page only
[ozy_agent_ask product="current" label="Ask AI about this product"] — opens the chat about a product
This plugin connects to third-party AI services to generate replies. It only contacts a provider you have entered an API key for in OZY AI Agent AI Provider (or in wp-config.php). No data is sent to any provider whose key is empty.
What is sent: the visitor’s messages and the prior conversation (up to the last 20 messages), the page the visitor is on, a system prompt with your business information and a snapshot of your public content, the list of available tools, and the results of tools the agent ran during that reply (for example product names, prices and stock, your shipping zones, or — only after the customer verified the order — the status and items of their order). The visitor’s cart summary is included on WooCommerce sites so the agent can answer cart questions. Billing addresses and payment details are never sent.
When is it sent: every time a visitor sends a message in the chat.
Providers (only those with keys are called):
WordPress AI connectors (WordPress 7.0+): if Use WordPress AI connectors first is on and a connector under Settings Connectors has credentials, the same data is sent through WordPress’s built-in AI Client to the provider of that connector, under that provider’s terms.
Voice transcription (only when the visitor uses the microphone and a Groq key is configured): the recording is sent to the Groq Whisper API (https://api.groq.com/openai/v1/audio/transcriptions). It is not stored on your server.
WooCommerce Store API: cart, coupon and in-chat checkout actions call your own site’s WooCommerce Store API (/wp-json/wc/store/v1/) from the visitor’s browser after they tap Confirm. This stays on your site; no third party is involved beyond the payment method your store already uses.
Google Analytics / Tag Manager: if Send events to Google Analytics / Tag Manager is on and your site already loads dataLayer or gtag, chat events are passed to them. The plugin does not load any tracking script itself.
Chat history is kept in the visitor’s browser (localStorage). Nothing is sent to the plugin author.
Conversation storage (optional, off by default): when turned on under Tools & Store, each conversation’s messages are saved in your own database, linked to the logged-in user or to the email a visitor gives in an enquiry, and deleted automatically after the retention period (30 days by default). They are included in Tools Export Personal Data and Erase Personal Data, and suggested privacy-policy text is added to Settings Privacy.
Local analytics (optional, on by default): one row per reply in your own database — time, provider and model, response time, success, the visitor’s last message (300 characters), tools used, token counts and a random conversation ID — plus events such as unanswered questions, add-to-carts and handoffs. Capped at the latest 1,000 replies, deletable from Analytics, can be switched off under URL Index, and dropped on uninstall.
Site owners are responsible for disclosing this processing in their privacy policy.