# Changelog Source: https://docs.bubblav.com/changelog Product updates and new features Discover what's new in BubblaV. We release new features and improvements monthly. * **Mobile Apps**: Take your AI support inbox anywhere. Browse conversations, reply live, hand off to Copilot drafts, and translate replies from your phone. Android is available now on [Google Play](https://play.google.com/store/apps/details?id=com.bubblav.mobile); iOS is coming soon to the App Store. * **Zoho Commerce Integration**: Connect your Zoho Commerce store — customers can track orders, search your catalog in natural language, and check stock availability, around the clock. OAuth connect with every Zoho data center supported (US, EU, India, Australia, Japan). See [Zoho Commerce](/user-guide/integrations/zoho-commerce). * **Product Card Button Labels**: Customize the text on every product card button in the chat widget — "View" and "View detail" can say whatever fits your store (up to 40 characters each). Find it under Widget Design → Advanced Settings. See [Widget Design](/user-guide/widget-design). * **HubSpot Meeting Scheduling**: Visitors can book a meeting right in chat using your HubSpot Meetings links. See [HubSpot](/user-guide/integrations/hubspot). * **Smart Triggers**: Your chatbot can now proactively start the conversation at the moment a visitor is most likely to engage — after a set time on a page, or right as they're about to leave (exit intent). Target specific pages with URL rules, let the AI personalize the opener from your message template, set cooldowns to avoid over-messaging, and steer follow-up replies with an optional conversation goal. Triggered messages don't count toward your monthly message quota. Requires a Pro plan. See [Smart Triggers](/user-guide/smart-triggers). * **BubblaV Assistant Upgrades**: The in-dashboard Assistant is now available on the **Dashboard Home page** — not only the question-mark icon on website pages. It can now **update settings for you**, not just answer questions: ask it to add a review link, turn on lead collection, or change your chatbot's greeting, and it applies the change directly. It supports any language, and every account gets **100 free Assistant credits per month**, separate from the monthly message quota. See [In-Dashboard Help Assistant](/user-guide/help-assistant). * **Notification Center**: A new bell icon in the sidebar opens a persistent inbox of everything that needs your attention — visitor messages, support requests, form submissions, and quota alerts. * **Browser Push Notifications**: Get desktop and mobile push notifications the moment a visitor messages you. Enable push per browser from the sidebar banner or Account Settings. * **Chatbot Logs**: A new **Log** page under Chatbot shows every tool call your chatbot makes — MCP servers, custom webhook tools, and built-in tools — with status (Succeeded/Failed) and date-range filters. Click any call to inspect its arguments (secrets redacted), result, and error message so you can troubleshoot failures. Find it under Chatbot → Log or via ⌘K search. * **Copilot-Only Knowledge Sources**: Mark Files, Q\&A, or Tickets as **Copilot only** to hide them from your visitor-facing chatbot while keeping them available to your team's Copilot for drafting replies. Internal-only content stays out of customer chats. * **Tool Errors in Weekly Report**: Your weekly report email now highlights your chatbot's top tool failures of the week. * **Live Chat Typing Indicators**: Visitors and human agents now see typing dots during live support, so it's clear when a reply is on the way. * **Zalo Integration**: Connect your Zalo Official Account or a Zalo bot token from Zalo Bot Creator — customer chats are answered by AI from your knowledge base and land in the unified Live Support inbox. No OAuth required. See [Zalo](/user-guide/integrations/zalo). * **Telegram Integration**: Connect a Telegram bot with a token from @BotFather — customer DMs are answered by AI from your knowledge base and land in the unified Live Support inbox, with human takeover when you step in. No OAuth required. See [Telegram](/user-guide/integrations/telegram). * **Shopify Product Recommendations**: A new tool lets your chatbot recommend products as one curated, ranked card group. See [Shopify](/user-guide/integrations/shopify). * **HubSpot Ticket Sync**: HubSpot conversations and tickets now sync into your unified Live Support inbox every 2 minutes. Reply from BubblaV straight into the HubSpot thread, and draft replies with one-click AI Copilot. See [HubSpot](/user-guide/integrations/hubspot). * **Self-Learning (Beta)**: Your chatbot now learns from real conversations — when a human agent resolves a chat, a visitor gives a thumbs-down, or the bot stumbles, BubblaV drafts a new Q\&A for your review in Knowledge → Q\&A. Enable Auto-apply in Settings to publish strong answers automatically (Pro). See [Self-Learning](/user-guide/knowledge/self-learning). * **Email Unified Inbox (IMAP)**: Connect any mailbox — Gmail, Outlook, Zoho, and more — over IMAP. Inbound email lands in your live-support inbox as threaded tickets that agents can reply to right from BubblaV. * **AI Copilot Upgrades**: A new one-click *Draft reply* button turns any visitor message into a ready-to-edit reply, and Copilot now reads visitor attachments (PDFs, documents, images) for better-informed drafts. * **Live Support Inbox**: Archive and bulk-select conversations, pin important ones to the top, and filter the unified inbox by the Email channel. * **YOLO Mode (Unrestricted Knowledge)**: A new per-website Settings toggle (off by default) that lets your chatbot and Copilot answer from their general knowledge and live web search — beyond your site's knowledge base — for broader coverage when you want it. Note: answers may be less on-brand and web-search calls add to your AI usage. * **TidyCal Scheduling**: New booking integration with OAuth connect and booking lookup. * **In-Dashboard Help Assistant**: Click the question-mark icon on any website page to ask the BubblaV Assistant, in plain English, how to set up your bot — leads, quotes, reviews, integrations, and more — right inside the dashboard. * **Cal.com**: New scheduling integration with OAuth connect, EU + Global region support, inline booking suggestions. * **Acuity Scheduling**: New scheduling integration with OAuth connect and inline booking. * **Google Tag Manager**: No-code GTM installation option with install guide button for easy setup. * **22 New MCP Server Tools**: User-facing configuration tools for managing your chatbot settings via MCP. * **Visitor Memory**: AI chatbot now remembers visitors across sessions for personalized, context-aware conversations. * **Forms**: Create custom forms that your AI chatbot can show to visitors to collect structured data—feedback, contact details, quote requests, and more—directly inside the chat. AI-powered triggering, email notifications, and a submissions dashboard. * **Human Handoff Scenarios**: Configure specific questions or intents that should always be handled by human agents * **Google Drive Integration**: Connect Google Drive as a knowledge source with OAuth, automatic content sync, and vector embedding on creation. * **Custom Tool Templates**: New template selection system with 6 ready-made templates including Order Email Notification, reducing setup time for common use cases. * **ChatGPT MCP Integration**: Full ChatGPT App with OAuth DCR support. * **Claude & OpenClaw MCP Support**: MCP connector now supports Claude, ChatGPT, and OpenClaw clients. * **AI Chatbot SDKs**: Launched official npm packages for React, Vue, and Angular. * **Zendesk OAuth App**: Added native Zendesk OAuth app with Help Center and ticket knowledge sync, simplified setup. * **Bottom-Center Pill Widget**: New widget position. * **llms.txt Support**: Added llms.txt and llms-full.txt support with Vibe Coding integration. * **Live Support Unified Inbox Redesign**: Complete redesign of the live support dashboard with dynamic chat platform menu, channel filtering by installed integrations, and improved sidebar navigation. * **WordPress Plugin & WooCommerce Plugin**: Full support for WordPress and WooCommerce sites with easy installation, automatic content sync, and unified chat management. * **BigCommerce App**: Native BigCommerce application integration with product catalog access, order tracking, and customer management. * **Messenger, Slack & Discord**: Complete chat platform integrations with bot functionality, conversation continuity, and human agent handoff support. * **Notion Integration**: Introduced Notion as a knowledge base source with content crawling and RAG support. * **Haravan Integration**: Added Vietnamese e-commerce platform support with OAuth installation and script tag injection. * **Zapier Integration**: Complete automation platform with 14 triggers, 4 actions, and 3 searches for workflow automation. * **Attio Integration**: CRM integration for contact management, visitor profile sync, and proactive chat initiation. * **Chat Widget Improvements**: Added drag-to-resize functionality for expanded chat widget. * **Dashboard Analytics**: Fixed analytics view to use last 30 days as default period. * **Knowledge Base Unification**: Unified the Tuning Suggestions system into a streamlined "Q\&A" and "Content Gaps" workflow. Renamed the "Text" tab to "Q\&A" with improved terminology (Question/Answer). * **Content Gaps**: New dashboard card and dedicated tab to identify high-frequency unanswered customer questions for quick Q\&A resolution. * **Major Integrations**: Added comprehensive support for Stripe and Polar.sh (billing), Klarna (payments) and Zendesk (tickets). * **Advanced Web Crawler**: Improved crawling logic with incremental updates, better content extraction, and image processing. * **Custom Tools**: New key management system customizable per website with authentication UI. * **MCP Servers**: Support for enabling Model Context Protocol servers on a per-website basis. * **Documentation**: Launched comprehensive documentation for users and developers. * **Widget & Live Support**: Enhanced real-time chat, dynamic widget sizing. * **New Integrations**: Full HubSpot (CRM) integrations including contact sync and order search. * **Shopify Billing & Storefront**: Added subscription management and predictive search via Storefront API. * **Shopify Automations**: Self-service returns, visitor insights, and granular order permissions. * **Product Features**: Added product reviews, rating counts, and image carousels. * **Calendly**: Added inline meeting rescheduling capabilities. * **Shopify Returns**: Complete management feature for order returns. * **Analytics**: Enhanced dashboard with geographic distribution and advanced filtering. * **Authentication**: Launched email/password login and signup. * **Widget Customization**: Added full control over chat widget colors and layout. * **Shopify App**: Native integration. * **Initial Launch**: Released BubblaV with RAG-powered AI Chatbot, standout Widget, and Smart Crawler. *** **Have questions about a feature?** Check the [User Guide](/user-guide/getting-started) or [contact our support team](https://www.bubblav.com/contact). # Chatbot Logs Source: https://docs.bubblav.com/developer-guide/chatbot-logs Inspect and debug every tool call your chatbot makes — MCP servers, custom webhook tools, and built-in tools. # Chatbot Logs When your chatbot answers a visitor, it often calls **tools** behind the scenes — your [MCP servers](/developer-guide/mcp-server), [custom webhook tools](/user-guide/custom-tools), and built-in tools (forms, scheduling, knowledge lookups). The **Log** page records every one of those calls so you can see exactly what your chatbot did, spot failures, and troubleshoot. ## Open the Log page 1. Go to your **Dashboard** and select a website. 2. In the left sidebar, expand **Chatbot** (under the Chatbot section) and click **Log**. You can also press **⌘K** (macOS) or **Ctrl K** (Windows) to open the dashboard search and type "Log". ## What each row shows The list shows one row per tool call: * **MCP tool name** — the tool that was invoked (for example `search_orders` or `bubblav_search_knowledge`). * **Status** — **Succeeded** (green) or **Failed** (red). * **Sent at** — when the call was made, shown in **your browser's timezone** (no manual conversion needed). Failed rows also show a one-line preview of the error so problems are easy to spot at a glance. ## Filter the list * **Status** — *All statuses* (default), *Succeeded*, or *Failed*. Filter to **Failed** to jump straight to problems. * **Date range** — click the calendar button to pick a preset (Today, Yesterday, This Week, This Month, Last Month, Last 3 Months, This Year, Last Year, **All Time**) or select a custom range on the two-month calendar and click **Apply**. The list paginates 50 calls at a time, newest first. ## Inspect a single call Click any row to open a detail panel with everything about that call: * **Tool** — the full tool name. * **Arguments** — the arguments your chatbot sent to the tool, as JSON. Any field that looks like a secret (tokens, keys, passwords, headers) is **masked as `***`** before it is shown, so logs are safe to share when debugging. * **Result** — a truncated preview of what the tool returned, plus the response size. * **Error** — the full error message for failed calls (only shown when the call failed). * **API Key** — the MCP API key used, if the call came through your MCP server (shown by name and prefix only). ## Debugging workflow When a tool isn't working for your visitors: 1. Open **Chatbot → Log** and set **Status** to **Failed** (and a date range that covers the issue). 2. Open the most recent failed call. 3. Read the **Error** message — it usually states the root cause (for example, an invalid endpoint URL, an authentication failure, a missing required argument, or the external service returning an error). 4. Check **Arguments** to confirm your chatbot sent what you expected. If an argument is wrong, review the tool's description/schema so the model knows the correct shape. 5. Check **Result** to see what the external system returned, if anything. Common fixes: * **401 / 403 / auth errors** → the tool's authentication (bearer token, HMAC secret, API key) is missing or invalid. Re-check the tool configuration. * **404 / connection errors** → the webhook or MCP endpoint URL is wrong or unreachable. * **400 / validation errors** → the arguments don't match what the external system expects. Tighten the tool's parameter schema. * **Timeouts / 5xx** → the external system is slow or down; retry, or check its status. After changing a tool's configuration, send a test message from the **Test** tab and re-check the Log to confirm the call now succeeds. ## Security & access * Logs are scoped to **one website only** — you only ever see calls for the website you have open. There is no cross-website access. * Access follows your website permissions: the **owner** and any **accepted team member** can view logs. * Secret values inside call arguments are **redacted** before they leave the server. # MCP Server Source: https://docs.bubblav.com/developer-guide/mcp-server Connect your BubblaV data to MCP-compatible clients like ChatGPT, Claude Desktop, and OpenClaw. # BubblaV MCP Server The BubblaV MCP (Model Context Protocol) Server enables you to connect your BubblaV data to MCP-compatible clients like **ChatGPT**, **Claude Desktop**, **Google Antigravity**, and **OpenClaw**. This allows your AI agents to search your knowledge base, access analytics, and manage your chatbot's settings — all in real-time. > **Looking for recipes?** For ready-to-use prompts to diagnose content gaps, add knowledge, tune your bot's persona, or set up human handoff, see [Use AI Agents to Manage & Improve Your Chatbot](/user-guide/ai-agent-workflows). ## What Can You Do? * **Search Knowledge Base**: Let your AI agents search your indexed website content * **Manage Knowledge Base**: Add, delete, and list knowledge entries; upload files; sync support tickets; manage crawl URLs and sitemaps * **Access Analytics**: Retrieve full analytics reports programmatically * **Conversation Intelligence**: List, search, and inspect conversations and leads * **Content Gap Analysis**: Identify unanswered questions and knowledge gaps * **Visitor Insights**: Get detailed visitor profiles and activity breakdowns * **Hourly Activity**: Analyze peak support times for staffing optimization * **Scrape Web Pages**: Convert any public URL into markdown with `bubblav_scrape_url` * **Configure the Chatbot**: Read and update the chatbot persona (`custom_instructions`) and website settings * **Design the Widget**: Edit bot name, greetings, suggestions, colors, and position * **Human Handoff**: Create and manage intent triggers that route visitors to a live agent (Pro+) * **Manage Custom Tools**: Create, update, delete, and toggle custom webhook tools for your chatbot (Pro+) * **Manage Forms**: Create and update AI-powered lead-collection forms * **Manage API Keys**: Create, list, and revoke scoped MCP API keys * **Build Automations**: Create custom workflows that leverage your BubblaV data * **Real-time Integration**: Use Server-Sent Events (SSE) for instant data access ## Available Tools > This is a **curated reference** of the most-used tools. A connected client receives the complete, > always-current set via the standard `tools/list` method. ### bubblav\_search\_knowledge Search your indexed knowledge base for relevant content. **Parameters:** * `query` (string, required): Your search query * `limit` (number, optional): Maximum results to return (default: 5, max: 20) **Returns:** ```json theme={null} { "results": [ { "content": "The content snippet...", "source": "https://example.com/page", "title": "Page Title", "relevance": 0.95 } ], "total": 42 } ``` **Example:** ```json theme={null} { "query": "shipping policy", "limit": 10 } ``` ### bubblav\_read\_report Read the full analytics report for your website — the same data shown on the Reports page. **Parameters:** * `date_range` (object, optional): Date range for the report (defaults to current calendar month) * `start` (string): Start date in `yyyy-MM-dd` format * `end` (string): End date in `yyyy-MM-dd` format **Returns:** ```json theme={null} { "totalConversations": 1234, "totalMessages": 4567, "containmentRate": 0.69, "agentTransferRate": 0.31, "avgResponseTime": 12.5, "avgConversationDepth": 4.2, "messageRating": 4.1, "avgConfidenceScore": 0.85, "estimatedCostSavings": 1234.56, "totalLeads": 42, "topCountries": ["US", "GB", "DE"], "mostVisitedLinks": ["https://example.com/pricing"], "previousPeriodComparison": { ... } } ``` **Example:** ```json theme={null} { "date_range": { "start": "2026-03-01", "end": "2026-03-18" } } ``` ### bubblav\_add\_knowledge Add a new text knowledge entry to your knowledge base. The content is automatically split into chunks, queued for embedding, and becomes searchable via `bubblav_search_knowledge` once processed. **Parameters:** * `title` (string, required): Title for this knowledge entry * `content` (string, required): Full text content to index (plain text or Markdown) **Returns:** ```json theme={null} { "id": "uuid-of-new-entry", "title": "Knowledge Entry Title", "chunks_created": 5, "embedding_triggered": true } ``` **Example:** ```json theme={null} { "title": "Shipping Policy", "content": "We ship worldwide. Standard delivery takes 5-7 business days. Express shipping is available for orders over $100." } ``` **Note:** Subject to plan page limits. If your plan limit is reached, you'll receive a `RATE_LIMITED` error. ### bubblav\_scrape\_url Scrape a public web page URL and return markdown content optimized for LLM context. **Parameters:** * `url` (string, required): The page URL to scrape **Returns:** ```json theme={null} { "url": "https://example.com/final-url", "markdown": "# Markdown content..." } ``` **Example:** ```json theme={null} { "url": "https://example.com" } ``` ### bubblav\_list\_conversations List conversations for this website with optional filters. Returns conversation metadata (id, title, state, platform, visitor email/country, rating). **Parameters:** * `status` (string, optional): Filter by conversation state — `"bot"`, `"live_support"`, or `"resolved"` * `platform` (string, optional): Filter by platform (e.g. `"widget"`, `"messenger"`, `"slack"`, `"discord"`, `"whatsapp"`, `"instagram"`) * `date_range` (object, optional): Date range with `start` and `end` in `yyyy-MM-dd` format * `limit` (number, optional): Maximum results (default: 20, max: 100) * `offset` (number, optional): Results to skip for pagination (default: 0) **Example:** ```json theme={null} { "status": "bot", "date_range": { "start": "2026-03-01", "end": "2026-03-31" }, "limit": 10 } ``` ### bubblav\_get\_conversation Get the full details of a single conversation including all messages. Returns conversation metadata plus a chronological list of messages with sender type, content, confidence score, thumbs rating, and response latency. **Parameters:** * `conversation_id` (string, required): UUID of the conversation to retrieve **Example:** ```json theme={null} { "conversation_id": "01234567-89ab-cdef-0123-456789abcdef" } ``` ### bubblav\_search\_conversations Full-text search across all conversation messages. Returns matching message excerpts with surrounding context, conversation metadata, and visitor email if available. **Parameters:** * `query` (string, required): Text to search for in message content (case-insensitive) * `date_range` (object, optional): Date range with `start` and `end` * `limit` (number, optional): Maximum results (default: 20, max: 100) * `offset` (number, optional): Pagination offset (default: 0) **Example:** ```json theme={null} { "query": "billing error", "limit": 10 } ``` ### bubblav\_list\_leads List conversations where the visitor provided their email address (captured leads). Returns email, country, platform, conversation state, and timestamp. **Parameters:** * `platform` (string, optional): Filter by platform * `date_range` (object, optional): Date range * `limit` (number, optional): Maximum results (default: 20, max: 100) * `offset` (number, optional): Pagination offset (default: 0) **Example:** ```json theme={null} { "date_range": { "start": "2026-03-01", "end": "2026-03-31" } } ``` ### bubblav\_list\_unanswered\_questions Find visitor questions that the AI could not answer well — bot replies with low confidence score, fallback responses, or messages rated thumbs-down by the visitor. **Parameters:** * `confidence_threshold` (number, optional): Confidence score cutoff (0.0–1.0, default: 0.5). Replies below this are considered low-quality * `date_range` (object, optional): Date range * `limit` (number, optional): Maximum results (default: 20, max: 100) * `offset` (number, optional): Pagination offset (default: 0) **Example:** ```json theme={null} { "confidence_threshold": 0.3, "limit": 20 } ``` ### bubblav\_get\_most\_asked\_questions Return the most frequently asked visitor questions over a date range (default: last 30 days). Questions are aggregated and deduplicated. **Parameters:** * `date_range` (object, optional): Date range * `limit` (number, optional): Maximum questions (default: 10, max: 50) **Example:** ```json theme={null} { "limit": 20 } ``` ### bubblav\_get\_content\_gaps Return visitor questions that the AI struggled to answer — bot replies with low confidence score or a thumbs-down rating. Use this to prioritise knowledge base improvements. **Parameters:** * `date_range` (object, optional): Date range * `limit` (number, optional): Maximum questions (default: 10, max: 50) **Example:** ```json theme={null} { "limit": 15 } ``` ### bubblav\_get\_answerable\_questions Return AI-generated questions that the chatbot can confidently answer from its knowledge base. Questions are generated and cached automatically when knowledge is indexed. **Parameters:** * `limit` (number, optional): Maximum questions (default: 30, max: 50) **Example:** ```json theme={null} { "limit": 30 } ``` ### bubblav\_delete\_knowledge Delete a text knowledge entry from the knowledge base. Removes the entry and all associated chunks/embeddings. Requires the knowledge entry ID (from `bubblav_list_knowledge_sources`). **Parameters:** * `knowledge_id` (string, required): UUID of the text knowledge entry to delete **Example:** ```json theme={null} { "knowledge_id": "01234567-89ab-cdef-0123-456789abcdef" } ``` ### bubblav\_sync\_ticket\_to\_knowledge Sync a resolved support ticket to the knowledge base. Formats the ticket conversation as a searchable article, splits into chunks, and queues for embedding. Requires Pro plan or higher. **Parameters:** * `ticket_id` (string, required): UUID of the live support ticket to sync **Example:** ```json theme={null} { "ticket_id": "01234567-89ab-cdef-0123-456789abcdef" } ``` ### bubblav\_list\_knowledge\_sources List all knowledge sources for this website. Returns sources from: text entries, Notion pages, Google Docs, Zendesk articles/tickets, and crawled website pages. **Parameters:** None **Example:** ```json theme={null} {} ``` ### bubblav\_get\_visitor\_insights Get insights for a specific visitor including profile data, conversation count, active support tickets, e-commerce orders (Shopify), and subscription status. **Parameters:** * `visitor_id` (string, required): Visitor ID (from conversation data or live support session) **Example:** ```json theme={null} { "visitor_id": "visitor_abc123" } ``` ### bubblav\_get\_hourly\_activity Get hourly activity breakdown showing conversation and support ticket counts per hour (UTC). Returns 24 data points (one per hour), total counts, and peak hour. Defaults to today. **Parameters:** * `date_range` (object, optional): Date range **Example:** ```json theme={null} { "date_range": { "start": "2026-04-05" } } ``` ### bubblav\_list\_tool\_logs Read the audit log of tool calls made for this website — built-in tools and custom webhook tools — to troubleshoot failures. Each entry includes the tool name, succeeded/failed outcome, error message, a truncated result preview, result size, and the request args (with secrets masked). Returns the most recent calls first. **Parameters:** * `limit` (number, required): Maximum number of logs to return (max 200) * `status` (string, optional): Filter by outcome — `succeeded` or `failed`. Omit to return both. * `date_range` (object, optional): Date range (defaults to the last 7 days) * `start` (string): Start date in `yyyy-MM-dd` format * `end` (string): End date in `yyyy-MM-dd` format * `offset` (number, optional): Number of logs to skip for pagination (default: 0) **Returns:** ```json theme={null} { "logs": [ { "id": "uuid", "tool_name": "find_tournaments", "success": false, "error_message": "Request timed out after 5000ms", "created_at": "2026-08-14T12:34:56.000Z", "result_bytes": 0, "result_preview": null, "args": { "city": "Austin" } } ], "total": 1, "limit": 10, "offset": 0, "has_more": false } ``` **Note:** Especially useful for debugging custom webhook tools — ask your AI assistant to pull the failed calls and read the error messages directly. This tool is **not available in the ChatGPT integration**; it works in Claude, Cursor, OpenClaw, and the dashboard. **Example:** ```json theme={null} { "limit": 10, "status": "failed" } ``` ## Custom Tool Management These tools let AI agents create and manage custom webhook tools for your chatbot. For example, you can ask Claude to add a tool that searches for products, looks up inventory, or finds nearby events. Custom tools require a **Pro plan or higher**. ### bubblav\_list\_custom\_tools List all custom webhook tools for this website with their activation status. **Parameters:** None **Returns:** ```json theme={null} { "tools": [ { "id": "uuid", "tool_name": "find_tournaments", "display_name": "Find Tournaments", "description_for_ai": "Search for tournaments near a city...", "endpoint_url": "https://api.example.com/tournaments/search", "authentication_type": "bearer", "http_method": "POST", "argument_schema": { "city": { "type": "string", "description": "City name to search near", "required": true, "method": "query" } }, "is_active": true, "is_active_for_website": true, "has_secret": true, "created_at": "2026-04-01T00:00:00Z", "updated_at": "2026-04-01T00:00:00Z" } ], "total": 1 } ``` **Example:** ```json theme={null} {} ``` ### bubblav\_create\_custom\_tool Create a new custom webhook tool. The tool is activated for the current website by default. **Parameters:** * `tool_name` (string, required): Unique identifier (letters, numbers, underscores, hyphens) * `display_name` (string, required): Human-readable name shown in dashboard * `description_for_ai` (string, required): Instructions for the AI on when and how to use this tool * `description` (string, optional): Short human-readable description shown in dashboard. Auto-generated from `description_for_ai` if omitted. * `endpoint_url` (string, required): Webhook URL the chatbot will call (HTTPS required) * `authentication_type` (string, required): `none`, `bearer`, or `hmac` * `argument_schema` (object, optional): Flat parameter map defining the parameters the tool accepts. Each top-level key must be the real parameter name, and each value may include `type`, `description`, `required`, `default`, and `method` (`query`, `body`, or `path`). Do not wrap it in JSON Schema keys like `type`, `properties`, and `required`. * `http_method` (string, optional): `GET`, `POST`, `PUT`, `PATCH`, or `DELETE` (default: GET) * `activate_for_website` (boolean, optional): Auto-activate for current website (default: true) **Returns:** ```json theme={null} { "id": "uuid-of-new-tool", "tool_name": "find_tournaments", "display_name": "Find Tournaments", "secret_key": "abc123...xyz", "is_active_for_website": true } ``` **Note:** The `secret_key` is only shown once at creation time. Save it immediately. **Example:** ```json theme={null} { "tool_name": "find_tournaments", "display_name": "Find Tournaments", "description_for_ai": "Search for pickleball tournaments near a given city. Use when a visitor asks about upcoming tournaments in their area.", "description": "Searches pickleball tournaments by city and radius", "endpoint_url": "https://api.example.com/tournaments/search", "authentication_type": "bearer", "http_method": "POST", "argument_schema": { "city": { "type": "string", "description": "City name to search near", "required": true, "method": "query" }, "radius_miles": { "type": "number", "description": "Search radius in miles (default: 50)", "default": 50, "method": "query" } } } ``` ### bubblav\_update\_custom\_tool Update an existing custom webhook tool. Only the fields you provide will be changed. **Parameters:** * `tool_id` (string, required): UUID of the tool to update (from `bubblav_list_custom_tools`) * `display_name` (string, optional): New human-readable name * `description_for_ai` (string, optional): New AI instructions * `description` (string, optional): New human-readable description * `endpoint_url` (string, optional): New webhook URL * `authentication_type` (string, optional): `none`, `bearer`, or `hmac` * `argument_schema` (object, optional): New parameter schema * `http_method` (string, optional): New HTTP method * `is_active` (boolean, optional): Enable or disable the tool globally **Example:** ```json theme={null} { "tool_id": "01234567-89ab-cdef-0123-456789abcdef", "description_for_ai": "Updated: Search for tournaments near a city or zip code.", "endpoint_url": "https://api.example.com/v2/tournaments/search" } ``` ### bubblav\_delete\_custom\_tool Permanently delete a custom webhook tool. This removes the tool and deactivates it from all websites. **Cannot be undone.** **Parameters:** * `tool_id` (string, required): UUID of the tool to delete **Example:** ```json theme={null} { "tool_id": "01234567-89ab-cdef-0123-456789abcdef" } ``` ### bubblav\_toggle\_custom\_tool Enable or disable a custom tool for this specific website. Tools must be activated per-website before the chatbot can use them. **Parameters:** * `tool_id` (string, required): UUID of the tool to toggle * `enabled` (boolean, required): `true` to enable, `false` to disable **Example:** ```json theme={null} { "tool_id": "01234567-89ab-cdef-0123-456789abcdef", "enabled": true } ``` ### Custom Tool Authentication When creating a tool, choose an `authentication_type` based on your endpoint's security: | Type | Use Case | Headers Sent | | -------- | ------------------------------- | ----------------------------------------------------------------- | | `none` | Public APIs, testing | None | | `bearer` | APIs with token auth | `Authorization: Bearer ` | | `hmac` | Production APIs, sensitive data | `X-BubblaV-Signature: sha256=` + `X-BubblaV-Timestamp: ` | **Key details:** * A `secret_key` is auto-generated for `bearer` and `hmac` types and returned **only once** at creation time. * For HMAC, the signature is computed as `HMAC-SHA256(secret, ".")`. * Your backend must validate the secret/key on every incoming request. For detailed validation code examples (Node.js, Python), see [Custom Tools → Authentication Methods](/user-guide/integrations/custom-tools#authentication-methods). ## Website & Chatbot Configuration These tools let an AI agent read and change how your chatbot behaves and looks — the same controls as the dashboard's **Settings** and **Design** pages, plus knowledge sources, forms, and API keys. They are what make [agent-driven chatbot management](/user-guide/ai-agent-workflows) possible. ### Chatbot persona & website settings | Tool | Description | Key parameters | | --------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | | `bubblav_get_website_settings` | Read name, URL, status, crawl discovery mode, allowed domains, and `custom_instructions` (the chatbot persona / system prompt). | none | | `bubblav_update_website_settings` | Update website settings. Set `custom_instructions` to change the chatbot persona (max 2,000 chars). | `custom_instructions`, `website_name`, `discovery_mode` (`auto` / `manual-only` / `sitemap-only`), `allowed_domains`, `allow_all_domains` | ### Widget appearance (Design page) | Tool | Description | Key parameters | | ---------------------------------- | --------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `bubblav_get_widget_appearance` | Read bot name, greetings, suggestions, colors, position, product card button labels, branding toggle, and logo/avatar URLs. | none | | `bubblav_update_widget_appearance` | Update widget appearance; only the fields you provide change. | `bot_name`, `greeting_message`, `welcome_message`, `home_screen_title`, `textbox_placeholder`, `chat_suggestions`, `bubble_color`, `primary_color`, `desktop_position`, `mobile_position`, `product_card_view_label`, `product_card_view_detail_label`, `powered_by_visible`, `home_logo_url`, `bot_avatar_url` | > Hiding the "Powered by" branding (`powered_by_visible: false`) requires a paid plan. ### Human-handoff scenarios (Pro+) | Tool | Description | Key parameters | | --------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | | `bubblav_list_handoff_scenarios` | List handoff trigger scenarios. | none | | `bubblav_create_handoff_scenario` | Create a trigger: when the AI detects the described intent, it hands off to a live agent and shows `response_message`. | `description` (required, max 200), `response_message` (max 500), `is_active` | | `bubblav_update_handoff_scenario` | Update a scenario; only provided fields change. | `scenario_id` (required), `description`, `response_message`, `is_active` | | `bubblav_delete_handoff_scenario` | Permanently delete a scenario. | `scenario_id` (required) | ### Knowledge files & crawl sources | Tool | Description | Key parameters | | ------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | | `bubblav_upload_knowledge_file` | Upload a file (PDF/DOCX/DOC/TXT/Markdown, ≤10MB) to extract and index. Processing is asynchronous — track with `bubblav_get_crawl_status`. | `filename` (required), `content_type` (required: `pdf`/`docx`/`doc`/`txt`/`md`), `base64_content` (required) | | `bubblav_list_crawl_urls` | List manual crawl URLs, sub-websites, sitemap URLs, and llms.txt URLs. | none | | `bubblav_add_crawl_url` | Add a single public URL to crawl and index, then queue an incremental crawl. | `url` (required) | | `bubblav_delete_crawl_url` | Delete a manual crawl URL by id. | `url_id` (required) | | `bubblav_update_sitemaps` | Replace the sitemap.xml and/or llms.txt URL lists (full replacement arrays). | `sitemap_urls`, `llms_txt_urls` | | `bubblav_get_crawl_status` | Check indexing progress: website status, pages indexed, pending/processing chunk counts. | none | ### Forms | Tool | Description | Key parameters | | --------------------- | --------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------ | | `bubblav_list_forms` | List AI forms with fields, AI instructions, enabled state, and submission counts. | none | | `bubblav_create_form` | Create an AI-powered form to collect structured data from visitors. | `name` (required), `fields` (required; each needs `id`, `type`, `label`), `ai_instructions`, `enabled` | | `bubblav_update_form` | Update a form; only provided fields change. | `form_id` (required), `name`, `fields`, `ai_instructions`, `enabled` | | `bubblav_delete_form` | Permanently delete a form and its submissions. | `form_id` (required) | ### API keys | Tool | Description | Key parameters | | ------------------------ | -------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | | `bubblav_list_api_keys` | List MCP API keys (name, prefix, scopes, active state, last used). Never returns the secret. | none | | `bubblav_create_api_key` | Create a scoped MCP API key. The full key is returned **only once** — store it immediately. | `name` (required), `scopes` (required: `mcp:read` and/or `mcp:tools:execute`) | | `bubblav_revoke_api_key` | Revoke (deactivate) a key. | `key_id` (required) | ## Setup Guide BubblaV MCP Server supports these connection methods: 1. **ChatGPT** - OAuth 2.0, no API key needed 2. **Claude / Claude Desktop** - OAuth 2.0, no API key needed 3. **Google Antigravity** - OAuth 2.0, no API key needed 4. **API Key** - For OpenClaw and other MCP clients ## Option 1: ChatGPT (OAuth 2.0) Use the same MCP server URL: ``` https://www.bubblav.com/mcp ``` If your client expects an API-style path, this also works: ``` https://www.bubblav.com/api/mcp ``` ChatGPT will start OAuth automatically. Sign in to BubblaV and select the website you want to connect. ## Option 2: Claude (OAuth 2.0) No API key needed. Claude handles authentication automatically via OAuth — just add the server URL. ### Step 1: Add the BubblaV connector In Claude (web or desktop), open **Settings** → **Integrations** (or **Connected tools**) and add a new MCP server with this URL: ``` https://www.bubblav.com/api/mcp ``` ### Step 2: Authorize Claude will open a BubblaV login page. Sign in and select which website to connect. That's it — no config files to edit, no API keys to copy. ## Option 3: OpenClaw (API Key) ### Step 1: Generate an MCP API Key 1. Log in to your BubblaV dashboard at [https://www.bubblav.com](https://www.bubblav.com) 2. Navigate to your **Website Settings** page 3. Click the **API Keys** tab 4. Click **Generate New Key** 5. Enter a name (e.g., "OpenClaw") and select → MCP scopes 6. Click **Generate** and copy the key immediately — it won't be shown again Your API key will look like: ``` bubblav_mcp_a1b2c3d4e5f6g7h8i9j0k1l2 ``` ### Step 2: Configure OpenClaw using mcporter We recommend using [mcporter](https://github.com/jasonacox/mcporter) to easily configure OpenClaw with BubblaV. #### Install mcporter ```bash theme={null} # Using pip pip install mcporter # Or using pipx pipx install mcporter ``` #### Configure BubblaV in OpenClaw Create a configuration file `bubblav.json`: ```json theme={null} { "name": "bubblav", "url": "https://www.bubblav.com/api/mcp", "headers": { "X-API-Key": "bubblav_mcp_YOUR_API_KEY_HERE" } } ``` Then run mcporter: ```bash theme={null} mcporter add bubblav.json ``` #### Manual Configuration If you prefer manual configuration, add this to your OpenClaw config: ```yaml theme={null} name: bubblav connection: url: https://www.bubblav.com/api/mcp headers: X-API-Key: bubblav_mcp_YOUR_API_KEY_HERE ``` ### Step 3: Test the Connection Once connected, your OpenClaw agent will have access to: * `bubblav_search_knowledge` - Search your knowledge base * `bubblav_read_report` - Access full analytics reports * `bubblav_add_knowledge` - Add new knowledge entries * `bubblav_delete_knowledge` - Remove outdated entries * `bubblav_list_knowledge_sources` - List all knowledge sources * `bubblav_list_conversations` - List and filter conversations * `bubblav_get_conversation` - Get full conversation details * `bubblav_search_conversations` - Full-text search across conversations * `bubblav_list_leads` - List captured leads (emails) * `bubblav_list_unanswered_questions` - Find knowledge gaps * `bubblav_get_most_asked_questions` - See trending visitor questions * `bubblav_get_content_gaps` - Identify content improvement areas * `bubblav_get_answerable_questions` - See what your bot can answer * `bubblav_get_visitor_insights` - Get visitor profiles * `bubblav_get_hourly_activity` - Analyze peak support times * `bubblav_sync_ticket_to_knowledge` - Turn resolved tickets into knowledge * `bubblav_scrape_url` - Scrape web pages to markdown * `bubblav_list_custom_tools` - List custom webhook tools * `bubblav_create_custom_tool` - Create a new custom tool * `bubblav_update_custom_tool` - Update an existing custom tool * `bubblav_delete_custom_tool` - Delete a custom tool * `bubblav_toggle_custom_tool` - Enable/disable a tool per-website * `bubblav_list_tool_logs` - Read tool-call logs (status, date range, limit) to debug your custom tools You can test by asking your agent to search for information or add new content to your knowledge base. ## Option 4: OpenClaw (Automatic Setup) ### Setup Everything Automatically Tell OpenClaw to install and configure everything for BubblaV automatically. **Command:** ``` Please configure BubblaV MCP server integration with these details: - Server URL: https://www.bubblav.com/api/mcp - Tools available: bubblav_search_knowledge, bubblav_read_report, bubblav_add_knowledge, bubblav_list_conversations, bubblav_get_conversation, bubblav_search_conversations, bubblav_list_leads, bubblav_list_unanswered_questions, bubblav_get_most_asked_questions, bubblav_get_content_gaps, bubblav_get_answerable_questions, bubblav_delete_knowledge, bubblav_sync_ticket_to_knowledge, bubblav_list_knowledge_sources, bubblav_get_visitor_insights, bubblav_get_hourly_activity, bubblav_scrape_url, bubblav_list_custom_tools, bubblav_create_custom_tool, bubblav_update_custom_tool, bubblav_delete_custom_tool, bubblav_toggle_custom_tool, bubblav_list_tool_logs - Authentication: API key required Please ask me for an MCP API key, or let me guide you through generating one. ``` **What this does:** 1. Opens BubblaV dashboard in your browser 2. Generates an API key with proper scopes 3. Configures OpenClaw with server URL and API key 4. Tests connection **Example prompt:** ``` Setup BubblaV MCP server so I can access my knowledge base and add content to it from OpenClaw. ``` 2. **Search knowledge base**: Ask your AI agent to search your website content 3. **Get analytics**: Request a conversation or performance report 4. **Add knowledge**: Test adding a new knowledge entry with title and content ## Rate Limits MCP API calls are tracked separately from your AI message limits. Each subscription plan includes a monthly MCP call allowance: | Plan | Calls per Month | | ------ | --------------- | | Free | 100 | | Pro | 5,000 | | Custom | Unlimited | **How it works:** * Rolling 30-day window (resets every month from your first call) * When exceeded, you'll receive a `429` status with a `Retry-After` header * Check your usage in the dashboard under **Integrations** → **MCP Settings** ## Security ### Authentication Methods **OAuth 2.0 (Claude):** * Claude handles the full OAuth flow — you only enter the server URL * Uses PKCE (Proof Key for Code Exchange) for enhanced security * Tokens expire after 1 hour (access) or 30 days (refresh) * No credentials to store or rotate **API Key (OpenClaw and other clients):** * Simple authentication via `X-API-Key` header * Keys can be rotated and revoked * Supports scoped permissions ### API Key & Token Management * **Keep your API key secret** - Treat it like a password * **Rotate keys regularly** - Generate new keys and revoke old ones * **Use scopes** - Only grant the permissions you need * **Monitor usage** - Review audit logs regularly ### Scopes Available scopes for MCP API keys and OAuth tokens: * `mcp:read` - Read-only access to your website data * `mcp:tools:execute` - Execute MCP tools and scrape URLs via API ### Audit Logging All MCP tool calls are logged and available in your dashboard: * Tool name and arguments * Success/failure status * API key or OAuth token used * Timestamp View logs at **Chatbot** → **Log** ## Troubleshooting ### Connection Issues **Problem**: "Authentication failed" error **Solutions**: * Verify your API key is correct * Check that the key hasn't been revoked * Ensure the key has the correct scopes * Confirm your account is active **Problem**: "Rate limit exceeded" error **Solutions**: * Check your usage in the dashboard * Wait for the monthly window to reset (check `Retry-After` header) * Consider upgrading your plan for higher limits ### Tool Errors **Problem**: "Unknown tool" error **Solutions**: * Verify you're using the correct tool names * Check that your website has indexed content (for knowledge search) * Ensure your API key has `mcp:tools:execute` scope **Problem**: "Invalid argument" error **Solutions**: * Check that all required parameters are provided * Verify parameter types match the schema * Ensure dates are in ISO format (YYYY-MM-DD) ### Knowledge Base Not Available **Problem**: `bubblav_search_knowledge` tool not available **Solutions**: * Ensure your website has been crawled and content indexed * Check crawl status in the dashboard under **Knowledge Base** * Trigger a new crawl if needed ## Example Use Cases ### Customer Support Agent Create an agent that can search your documentation and provide analytics: ```yaml theme={null} name: support-agent tools: - bubblav_search_knowledge - bubblav_read_report - bubblav_get_conversation - bubblav_get_visitor_insights instructions: | You are a customer support agent with access to our knowledge base. Search for relevant information and provide helpful responses. Look up visitor insights before responding to understand their history. ``` ### Reporting Bot Build a bot that generates monthly performance reports: ```yaml theme={null} name: reporting-bot tools: - bubblav_read_report - bubblav_get_hourly_activity - bubblav_get_most_asked_questions schedule: "0 9 1 * *" # First day of every month at 9 AM instructions: | Generate a performance report for the past month. Include hourly activity breakdowns and top questions. ``` ### Knowledge Search API Create a simple search API for your internal tools: ```javascript theme={null} const response = await fetch('https://www.bubblav.com/api/mcp/call', { method: 'POST', headers: { 'X-API-Key': 'bubblav_mcp_...', 'Content-Type': 'application/json' }, body: JSON.stringify({ toolId: 'bubblav_search_knowledge', arguments: { query: 'return policy', limit: 5 } }) }); const data = await response.json(); ``` ### Knowledge Gap Auto-Filler Build an agent that identifies content gaps and fills them automatically: ```yaml theme={null} name: knowledge-gap-filler tools: - bubblav_get_content_gaps - bubblav_search_knowledge - bubblav_add_knowledge - bubblav_sync_ticket_to_knowledge instructions: | Check for content gaps using bubblav_get_content_gaps. For each gap, search existing knowledge first. If not covered, add a new knowledge entry. Also sync resolved tickets that contain useful answers. ``` ### Custom Tool Manager Let an AI agent manage custom webhook tools for your chatbot: ```yaml theme={null} name: custom-tool-manager tools: - bubblav_list_custom_tools - bubblav_create_custom_tool - bubblav_update_custom_tool - bubblav_delete_custom_tool - bubblav_toggle_custom_tool instructions: | Manage custom webhook tools for the BubblaV chatbot. When asked to create a tool, always list existing tools first to avoid duplicates. Gather the endpoint URL, authentication type, and argument schema from the user. After creating, share the secret_key with the user immediately — it won't be shown again. ``` ### Lead Pipeline Agent Monitor leads and feed them into your CRM: ```yaml theme={null} name: lead-pipeline tools: - bubblav_list_leads - bubblav_get_visitor_insights - bubblav_search_conversations schedule: "0 */6 * * *" # Every 6 hours instructions: | Fetch new leads from the past 6 hours. Enrich each lead with visitor insights. Search their conversations for buying intent signals. ``` ## Support Need help? Contact us at: * **Email**: [support@bubblav.com](mailto:support@bubblav.com) ## API Reference ### Endpoints **MCP (JSON-RPC 2.0):** ``` POST https://www.bubblav.com/api/mcp Headers: Authorization: Bearer (Claude — OAuth) X-API-Key: bubblav_mcp_... (OpenClaw — API key) Content-Type: application/json Body: { "jsonrpc": "2.0", "id": 1, "method": "tools/list" } ``` **OAuth Discovery:** ``` GET https://www.bubblav.com/.well-known/oauth-authorization-server ``` **OAuth Authorize:** ``` GET https://www.bubblav.com/api/oauth/authorize ?response_type=code &client_id= &redirect_uri=https://claude.ai/api/mcp/auth_callback &code_challenge= &code_challenge_method=S256 &state= &scope=claudeai ``` Redirects unauthenticated users to login, then shows a website-selection consent page. **OAuth Token Exchange:** ``` POST https://www.bubblav.com/api/oauth/token Content-Type: application/x-www-form-urlencoded grant_type=authorization_code &code= &redirect_uri=https://claude.ai/api/mcp/auth_callback &code_verifier= ``` ### Error Codes | Code | Description | | ---- | -------------------------------------------------------- | | 401 | Authentication failed (invalid or missing API key/token) | | 403 | Insufficient scopes | | 429 | Rate limit exceeded | | 500 | Internal server error | # Scrape API Source: https://docs.bubblav.com/developer-guide/scrape-api Scrape a web page URL and receive clean markdown using your BubblaV API key. # BubblaV Scrape API Use BubblaV to scrape any public page and return: ```json theme={null} { "url": "https://example.com/final-url", "markdown": "# Page content in markdown" } ``` You can reuse the same API key used for MCP server access. ## Endpoint * **URL:** `POST https://www.bubblav.com/api/scrape` * **Header:** `X-API-Key: bubblav_mcp_...` * **Required scope:** `mcp:tools:execute` ## cURL ```bash theme={null} curl -X POST https://www.bubblav.com/api/scrape \ -H "Content-Type: application/json" \ -H "X-API-Key: bubblav_mcp_YOUR_API_KEY" \ -d '{"url":"https://example.com"}' ``` ## Node.js SDK ```bash theme={null} npm install @bubblav/tools ``` ```js theme={null} import BubblavTools from '@bubblav/tools'; const app = new BubblavTools({ apiKey: 'bubblav_mcp_YOUR_API_KEY' }); const data = await app.scrape('https://example.com'); console.log(data.url); console.log(data.markdown); ``` ## Python ```python theme={null} import requests resp = requests.post( "https://www.bubblav.com/api/scrape", headers={ "X-API-Key": "bubblav_mcp_YOUR_API_KEY", "Content-Type": "application/json", }, json={"url": "https://example.com"}, timeout=30, ) resp.raise_for_status() print(resp.json()) ``` ## CLI (npx) ```bash theme={null} export BUBBLAV_API_KEY=bubblav_mcp_YOUR_API_KEY npx @bubblav/tools scrape https://example.com ``` ## AI Skill Install Create a local skill folder and add this `SKILL.md`: ```md theme={null} # Web Scrape Markdown Skill Use BubblaV scrape API for web fetches. POST https://www.bubblav.com/api/scrape Header: X-API-Key Body: { "url": "https://..." } ``` Skill lives in this repo: `skills/web-scrape-md/SKILL.md`. ## MCP Tool If you're already connected to BubblaV MCP server, use tool: * `bubblav_scrape_url` with `{ "url": "https://example.com" }` This returns the same JSON structure (url + markdown). ## Install AI Skill with npx ```bash theme={null} npx skills add github:bubblav-org/tools/skills/web-scrape-md ``` ## Claude Code Plugin ### Configure API key for the plugin The plugin skills (e.g. `web-scrape-md`) need a BubblaV API key. **Generate a key:** 1. Log in to your [BubblaV dashboard](https://www.bubblav.com) 2. Navigate to your **Website Settings** page 3. Click the **API Keys** tab 4. Click **Generate New Key** 5. Enter a name (e.g. "Claude Code") and select **MCP scopes** 6. Click **Generate** and copy the key immediately — it won't be shown again Then set it in your project's `.claude/.env` file: ```bash theme={null} # .claude/.env BUBBLAV_API_KEY=bubblav_mcp_YOUR_API_KEY ``` If the key is missing, the skill will prompt you to provide one on first use and save it automatically. Once configured, it persists across sessions. **Env file priority** (highest to lowest): | Priority | File | Scope | | -------- | ----------------------------- | -------------------- | | 1 | `process.env` | Runtime override | | 2 | `.claude/skills//.env` | Skill-specific | | 3 | `.claude/skills/.env` | All skills | | 4 | `.claude/.env` | Project-wide default | ### Install via marketplace Add the BubblaV marketplace and install the plugin: ```text theme={null} /plugin marketplace add bubblav-org/tools ``` Then browse and install from the **Discover** tab, or install directly: ```text theme={null} /plugin install bubblav-tools@bubblav-org-tools ``` After installing, reload to activate: ```text theme={null} /reload-plugins ``` # SDK Reference Source: https://docs.bubblav.com/developer-guide/sdk-reference Control the BubblaV widget programmatically using the JavaScript SDK. The BubblaV SDK provides programmatic control over your chat widget. Use it to open/close the widget, send messages, listen to events, and more. The SDK is automatically loaded when you add the widget to your site. For React, Vue, and Angular projects, we recommend using our NPM packages for better type safety and framework integration. *** ## Installation ### NPM Packages (Recommended) For framework projects, use our official NPM packages: **1. Install the package:** ```bash theme={null} npm install @bubblav/ai-chatbot-react ``` **2. Add the widget to your app:** ```tsx theme={null} import { BubblaVWidget } from '@bubblav/ai-chatbot-react'; function App() { return ( ); } ``` **3. Control the widget programmatically:** ```tsx theme={null} import { useBubblaVWidget } from '@bubblav/ai-chatbot-react'; function MyComponent() { const widget = useBubblaVWidget(); const handleSupportClick = () => { widget?.open(); widget?.sendMessage('Hello! I need help.'); }; return ; } ``` **1. Install the package:** ```bash theme={null} npm install @bubblav/ai-chatbot-vue ``` **2. Add the widget to your app:** ```vue theme={null} ``` **3. Control the widget programmatically:** ```vue theme={null} ``` **1. Install the package:** ```bash theme={null} npm install @bubblav/ai-chatbot-angular ``` **2. Add the widget to your app:** ```ts theme={null} import { Component } from '@angular/core'; import { BubblaVWidgetComponent } from '@bubblav/ai-chatbot-angular'; @Component({ selector: 'app-root', standalone: true, imports: [BubblaVWidgetComponent], template: `` }) export class AppComponent {} ``` **3. Control the widget programmatically:** ```ts theme={null} import { Component, inject } from '@angular/core'; import { BubblaVWidgetService } from '@bubblav/ai-chatbot-angular'; @Component({ selector: 'app-support', template: `` }) export class SupportComponent { private bubblav = inject(BubblaVWidgetService); handleSupportClick() { this.bubblav.open(); this.bubblav.sendMessage('Hello! I need help.'); } } ``` NPM packages provide full TypeScript support, framework-specific patterns, and better lifecycle management. *** ### Global SDK For vanilla JavaScript or when not using a framework, the SDK is available as `window.BubblaV`: ```javascript theme={null} // Check if SDK is ready if (window.BubblaV) { window.BubblaV.open(); } // Or use the ready callback window.BubblaV.ready(() => { window.BubblaV.sendMessage('Hello!'); }); ``` The SDK may not be available immediately. Use the `ready()` callback to ensure it's loaded. *** ## SDK Methods ### Widget Control #### `open()` Opens the chat widget. ```javascript theme={null} BubblaV.open(); ``` **Use cases:** * Trigger chat from a custom button * Open chat after a user action * Start conversation proactively *** #### `close()` Closes the chat widget. ```javascript theme={null} BubblaV.close(); ``` **Use cases:** * Close chat after a conversation * Respond to user dismiss action *** #### `toggle()` Toggles the widget open/closed state. ```javascript theme={null} BubblaV.toggle(); ``` **Use cases:** * Single button to toggle widget * Keyboard shortcuts for chat access *** #### `openSearch()` Opens the search interface (modal). ```javascript theme={null} BubblaV.openSearch(); ``` **Use cases:** * Trigger search from a custom button * Open search after a user action *** #### `isOpen()` Checks if the widget is currently open. ```javascript theme={null} if (BubblaV.isOpen()) { console.log('Widget is open'); } ``` **Returns:** `boolean` *** ### Messaging #### `sendMessage(text, conversationId?)` Sends a message programmatically. ```javascript theme={null} // Send a simple message BubblaV.sendMessage('Hello, I need help!'); // Send to a specific conversation BubblaV.sendMessage('Where is my order?', 'conv_123'); ``` | Parameter | Type | Required | Description | | ---------------- | -------- | -------- | ---------------------- | | `text` | `string` | Yes | Message text to send | | `conversationId` | `string` | No | Target conversation ID | **Use cases:** * Start conversation with a suggested message * Send contextual help based on page content * Pre-fill messages based on user actions *** #### `showGreeting(data)` Shows a greeting message to the user with optional sender information. ```javascript theme={null} // Show default greeting BubblaV.showGreeting(); // Show custom message BubblaV.showGreeting('Hi! How can I help you today?'); // Show greeting with sender info BubblaV.showGreeting({ message: 'Hi! How can I help you today?', senderName: 'Support Team', senderAvatarUrl: 'https://example.com/avatar.png', timestamp: new Date().toISOString() }); ``` | Parameter | Type | Required | Description | | --------- | -------------------- | -------- | ------------------------------------------------------------------------------------- | | `data` | `string` \| `object` | No | Message string or object with `message`, `senderName`, `senderAvatarUrl`, `timestamp` | **Use cases:** * Display contextual greetings based on page * Show agent-specific messages with avatar * Time-based greetings (good morning, etc.) * Campaign-specific messages *** #### `hideGreeting()` Hides the greeting message. ```javascript theme={null} BubblaV.hideGreeting(); ``` *** ### Configuration #### `getConfig()` Gets the current widget configuration. ```javascript theme={null} const config = BubblaV.getConfig(); console.log('Widget config:', config); ``` **Returns:** `object` with current configuration *** #### `setDebug(enabled)` Enables or disables debug mode. ```javascript theme={null} // Enable debug mode BubblaV.setDebug(true); // Disable debug mode BubblaV.setDebug(false); ``` Only enable debug mode in development. It logs detailed information to the console. *** ## Event System The SDK emits events for various widget actions. Listen to events to respond to user interactions. ### `on(event, callback)` Register an event listener. ```javascript theme={null} BubblaV.on('chat:opened', () => { console.log('Chat widget opened'); }); BubblaV.on('message:received', (message) => { console.log('New message:', message); }); ``` ### `off(event, callback)` Unregister an event listener. ```javascript theme={null} const handler = () => console.log('Chat opened'); BubblaV.on('chat:opened', handler); // Later... BubblaV.off('chat:opened', handler); ``` *** ## Available Events | Event | Description | Payload | | -------------------- | -------------------------------------------------------- | ------------------------------------------------------------------------------------- | | `chat:opened` | Triggered when the chat widget is opened. | `undefined` | | `chat:closed` | Triggered when the chat widget is closed. | `undefined` | | `search:opened` | Triggered when the search interface is opened. | `{ mode: string }` | | `search:closed` | Triggered when the search interface is closed. | `{ mode: string }` | | `message:sent` | Triggered when a message is sent by the user. | `{ conversation_id: string, text: string }` | | `message:received` | Triggered when a message is received from the bot/agent. | `{ conversation_id: string, message_id: string, text: string, fromVisitor: boolean }` | | `message:rated` | Triggered when a specific message is rated. | `{ conversation_id: string, message_id: string, rating: 'up' \| 'down' }` | | `conversation:rated` | Triggered when the conversation is rated. | `{ conversation_id: string, rating: number }` | | `widget:expanded` | Triggered when the widget is expanded (desktop). | `undefined` | | `widget:collapsed` | Triggered when the widget is collapsed (desktop). | `undefined` | | `search:query` | Triggered when a search query is submitted. | `{ query: string, source: "input" \| "suggestion" }` | | `ready` | Triggered when the widget is fully loaded. | `undefined` | *** ## Framework Examples ### React #### Using Hooks ```tsx theme={null} 'use client'; import { useRef } from 'react'; import { BubblaVWidget, useBubblaVWidget, useBubblaVEvent } from '@bubblav/ai-chatbot-react'; import type { BubblaVWidgetRef } from '@bubblav/ai-chatbot-react'; function SupportButton() { const widgetRef = useRef(null); const widget = useBubblaVWidget(); // Listen to events useBubblaVEvent('chat:opened', () => { console.log('Support chat opened'); }); const openSupport = () => { widget?.open(); }; return ( <> ); } ``` #### Using the Widget Component ```tsx theme={null} import { BubblaVWidget } from '@bubblav/ai-chatbot-react'; function App() { return ( ); } ``` *** ### Vue #### Using Composition API ```vue theme={null} ``` #### Using Options API ```vue theme={null} ``` *** ### Angular ```ts theme={null} import { Component, inject } from '@angular/core'; import { BubblaVWidgetComponent, BubblaVWidgetService } from '@bubblav/ai-chatbot-angular'; @Component({ selector: 'app-support', standalone: true, imports: [BubblaVWidgetComponent], template: ` ` }) export class SupportComponent { private bubblav = inject(BubblaVWidgetService); constructor() { // Listen to events this.bubblav.on('chat:opened', () => { console.log('Support chat opened'); }); } openSupport() { this.bubblav.open(); } } ``` *** ## TypeScript Support All NPM packages include full TypeScript definitions: ```typescript theme={null} import type { BubblaVWidgetProps, BubblaVWidgetRef, BubblaVSDK, BubblaVEvent } from '@bubblav/ai-chatbot-react'; // Full type safety const config: BubblaVWidgetProps = { websiteId: 'your-website-id', bubbleColor: '#3b82f6', position: 'bottom-right' }; // Type-safe event listeners const eventHandler: BubblaVEvent<'chat:opened'> = () => { console.log('Chat opened'); }; ``` *** ## Best Practices 1. **Prefer NPM Packages** For React, Vue, and Angular projects, use the NPM packages instead of the global SDK for better type safety and lifecycle management. 2. **Wait for Ready State** Always check if the SDK is ready before using it: ```javascript theme={null} BubblaV.ready(() => { BubblaV.open(); }); ``` 3. **Clean Up Listeners** Remove event listeners when they're no longer needed: ```javascript theme={null} const handler = () => console.log('Opened'); BubblaV.on('chat:opened', handler); // Later... BubblaV.off('chat:opened', handler); ``` 4. **Handle Edge Cases** Check if methods exist before calling: ```javascript theme={null} if (BubblaV && typeof BubblaV.open === 'function') { BubblaV.open(); } ``` 5. **Use Environment Variables** Store your website ID in environment variables: ```env theme={null} # Next.js NEXT_PUBLIC_BUBBLAV_WEBSITE_ID=your-website-id # Nuxt NUXT_PUBLIC_BUBBLAV_WEBSITE_ID=your-website-id ``` ```tsx theme={null} ``` *** ## Full SDK Reference ```typescript theme={null} interface BubblaVSDK { // Widget control open(): void; close(): void; toggle(): void; openSearch(): void; isOpen(): boolean; // Messaging sendMessage(text: string, conversationId?: string): void; showGreeting(data: string | { message?: string; senderName?: string; senderAvatarUrl?: string; timestamp?: string }): void; hideGreeting(): void; // Configuration getConfig(): Record; setDebug(enabled: boolean): void; // Events on(event: string, callback: (...args: unknown[]) => void): void; off(event: string, callback: (...args: unknown[]) => void): void; emit(event: string, data?: unknown): void; // Lifecycle ready(callback: () => void): void; // Analytics track(eventName: string, properties?: Record): void; } ``` *** ## Next Steps Customize widget appearance and behavior Quick-start templates for Next.js and Nuxt # Starter Templates Source: https://docs.bubblav.com/developer-guide/starter-templates Quick-start templates for integrating BubblaV into your Next.js, Nuxt, or Angular applications Starter templates provide a quick way to integrate BubblaV into your project. Use our official templates for Next.js, Nuxt, and Angular to get started in minutes. *** ## Next.js Template Get started with BubblaV in your Next.js application. ### Repository [github.com/bubblav-org/nextjs-template](https://github.com/bubblav-org/nextjs-template) ### Features * Pre-configured BubblaV widget integration * Environment variable setup * TypeScript support * Example usage components ### Quick Start ```bash theme={null} # Clone the template git clone https://github.com/bubblav-org/nextjs-template.git my-bubblav-app # Navigate to the project cd my-bubblav-app # Install dependencies npm install # Copy environment variables cp .env.example .env.local # Edit .env.local and add your website ID # NEXT_PUBLIC_BUBBLAV_WEBSITE_ID=your-website-id # Start the development server npm run dev ``` ### Project Structure ``` nextjs-template/ ├── app/ │ ├── layout.tsx # Root layout with BubblaV provider │ └── page.tsx # Home page with example usage ├── components/ │ └── bubblav-widget.tsx # Widget component ├── .env.example # Environment variables template └── README.md # Setup instructions ``` ### Configuration Add your website ID in `.env.local`: ```env theme={null} NEXT_PUBLIC_BUBBLAV_WEBSITE_ID=your-website-id ``` *** ## Nuxt Template Get started with BubblaV in your Nuxt application. ### Repository [github.com/bubblav-org/nuxt-template](https://github.com/bubblav-org/nuxt-template) ### Features * Nuxt 3 compatible * Auto-imports for BubblaV composables * Environment variable configuration * TypeScript support ### Quick Start ```bash theme={null} # Clone the template git clone https://github.com/bubblav-org/nuxt-template.git my-bubblav-app # Navigate to the project cd my-bubblav-app # Install dependencies npm install # Copy environment variables cp .env.example .env # Edit .env and add your website ID # NUXT_PUBLIC_BUBBLAV_WEBSITE_ID=your-website-id # Start the development server npm run dev ``` ### Project Structure ``` nuxt-template/ ├── app.vue # Root component with BubblaV integration ├── components/ │ └── BubblaVWidget.vue # Widget component ├── composables/ │ └── useBubblaV.ts # BubblaV composable ├── .env.example # Environment variables template └── README.md # Setup instructions ``` ### Configuration Add your website ID in `.env`: ```env theme={null} NUXT_PUBLIC_BUBBLAV_WEBSITE_ID=your-website-id ``` *** ## Angular Template Get started with BubblaV in your Angular application. ### Repository [github.com/bubblav-org/angular-template](https://github.com/bubblav-org/angular-template) ### Features * Angular 21 with standalone components * Tailwind CSS with CSS variable theming * Dark/light theme toggle with localStorage persistence * Pre-configured BubblaV widget integration * TypeScript support * Environment variable setup via `set-env.cjs` script ### Quick Start ```bash theme={null} # Clone the template git clone https://github.com/bubblav-org/angular-template.git my-bubblav-app # Navigate to the project cd my-bubblav-app # Install dependencies npm install # Copy environment variables cp .env.example .env.local # Edit .env.local and add your website ID # ANGULAR_PUBLIC_BUBBLAV_WEBSITE_ID=your-website-id # Start the development server npm run start ``` Open [http://localhost:4200](http://localhost:4200) to view your app. ### Project Structure ``` angular-template/ ├── src/ │ ├── app/ │ │ ├── components/ │ │ │ ├── header.component.ts # Navigation with theme toggle and "Ask AI" button │ │ │ └── theme-toggle.component.ts # Dark/light mode switcher │ │ └── app.component.ts # Root component with BubblaV widget │ ├── environments/ │ │ ├── environment.template.ts # Environment template (git tracked) │ │ └── environment.prod.template.ts # Production template (git tracked) │ └── styles.css # CSS variables and theme definitions ├── set-env.cjs # Environment file generator script ├── .env.example # Environment variables template └── README.md # Setup instructions ``` ### Configuration Add your website ID in `.env.local`: ```env theme={null} ANGULAR_PUBLIC_BUBBLAV_WEBSITE_ID=your-website-id ``` **How it works:** * The `set-env.cjs` script reads your `.env.local` file and generates `src/environments/environment.ts` at build time * Run `npm run start` - the script runs automatically before the dev server * For Vercel deployment, set `ANGULAR_PUBLIC_BUBBLAV_WEBSITE_ID` in your project's Environment Variables *** ## Deploy to Vercel Deploy your BubblaV-powered application to Vercel in a few clicks. ### Prerequisites * A [Vercel account](https://vercel.com/signup) * Your BubblaV website ID * Git repository (GitHub, GitLab, or Bitbucket) ### Deploy Next.js Template #### Option 1: One-Click Deploy (Recommended) The fastest way to deploy your Next.js application to Vercel: Deploy with Vercel #### Option 2: Deploy with Vercel CLI ```bash theme={null} # Install Vercel CLI npm install -g vercel # Navigate to your project cd my-bubblav-app # Deploy vercel ``` #### Option 3: Deploy via Vercel Dashboard 1. **Push your code to GitHub** ```bash theme={null} git init git add . git commit -m "Initial commit" git branch -M main git remote add origin https://github.com/your-username/my-bubblav-app.git git push -u origin main ``` 2. **Import to Vercel** * Go to [vercel.com/new](https://vercel.com/new) * Click "Import Git Repository" * Select your repository * Configure the project: * **Framework Preset**: Next.js (auto-detected) * **Root Directory**: `./` (default) * **Build Command**: `npm run build` (default) * **Output Directory**: `.next` (default) 3. **Add Environment Variables** * In the Vercel dashboard, go to **Settings** → **Environment Variables** * Add `NEXT_PUBLIC_BUBBLAV_WEBSITE_ID` with your website ID * Click "Save" 4. **Deploy** * Click "Deploy" * Vercel will build and deploy your application *** ### Deploy Nuxt Template #### Option 1: One-Click Deploy (Recommended) The fastest way to deploy your Nuxt application to Vercel: Deploy with Vercel #### Option 2: Deploy with Vercel CLI ```bash theme={null} # Install Vercel CLI npm install -g vercel # Navigate to your project cd my-bubblav-app # Deploy vercel ``` #### Option 3: Deploy via Vercel Dashboard 1. **Push your code to GitHub** ```bash theme={null} git init git add . git commit -m "Initial commit" git branch -M main git remote add origin https://github.com/your-username/my-bubblav-app.git git push -u origin main ``` 2. **Import to Vercel** * Go to [vercel.com/new](https://vercel.com/new) * Click "Import Git Repository" * Select your repository * Configure the project: * **Framework Preset**: Nuxt.js (auto-detected) * **Root Directory**: `./` (default) * **Build Command**: `npm run build` (default) * **Output Directory**: `.output` (default) 3. **Add Environment Variables** * In the Vercel dashboard, go to **Settings** → **Environment Variables** * Add `NUXT_PUBLIC_BUBBLAV_WEBSITE_ID` with your website ID * Click "Save" 4. **Deploy** * Click "Deploy" * Vercel will build and deploy your application *** ### Deploy Angular Template #### Option 1: One-Click Deploy (Recommended) The fastest way to deploy your Angular application to Vercel: Deploy with Vercel #### Option 2: Deploy with Vercel CLI ```bash theme={null} # Install Vercel CLI npm install -g vercel # Navigate to your project cd my-bubblav-app # Deploy vercel ``` #### Option 3: Deploy via Vercel Dashboard 1. **Push your code to GitHub** ```bash theme={null} git init git add . git commit -m "Initial commit" git branch -M main git remote add origin https://github.com/your-username/my-bubblav-app.git git push -u origin main ``` 2. **Import to Vercel** * Go to [vercel.com/new](https://vercel.com/new) * Click "Import Git Repository" * Select your repository * Configure the project: * **Framework Preset**: Angular (auto-detected) * **Root Directory**: `./` (default) * **Build Command**: `npm run build` (default) * **Output Directory**: `dist/angular-template/browser` (default) 3. **Add Environment Variables** * In the Vercel dashboard, go to **Settings** → **Environment Variables** * Add `ANGULAR_PUBLIC_BUBBLAV_WEBSITE_ID` with your website ID * Click "Save" 4. **Deploy** * Click "Deploy" * Vercel will build and deploy your application *** ## Environment Variables | Variable | Description | Required | | ----------------------------------- | ---------------------------------------------------- | ------------- | | `NEXT_PUBLIC_BUBBLAV_WEBSITE_ID` | Your website ID from the BubblaV dashboard (Next.js) | Yes (Next.js) | | `NUXT_PUBLIC_BUBBLAV_WEBSITE_ID` | Your website ID from the BubblaV dashboard (Nuxt) | Yes (Nuxt) | | `ANGULAR_PUBLIC_BUBBLAV_WEBSITE_ID` | Your website ID from the BubblaV dashboard (Angular) | Yes (Angular) | ### Finding Your Website ID 1. Log in to your [BubblaV dashboard](https://www.bubblav.com/dashboard) 2. Go to **Chat Widget** → **Installation** 3. Copy your Website ID *** ## Customization After deploying, you can customize the widget: Customize colors, position, and behavior Programmatic control with the SDK *** ## Troubleshooting ### Widget Not Showing 1. **Check your Website ID**: Ensure the environment variable is set correctly (`NEXT_PUBLIC_BUBBLAV_WEBSITE_ID` for Next.js, `NUXT_PUBLIC_BUBBLAV_WEBSITE_ID` for Nuxt, `ANGULAR_PUBLIC_BUBBLAV_WEBSITE_ID` for Angular) 2. **Verify deployment**: Check Vercel deployment logs for errors 3. **Clear cache**: Clear your browser cache and reload 4. **For Angular**: Verify the `set-env.cjs` script ran correctly by checking `src/environments/environment.ts` contains your Website ID ### Environment Variables Not Working 1. **Redeploy after adding variables**: Environment variables require a redeploy 2. **Check variable scope**: Ensure variables are set for all environments (Preview, Production) 3. **Verify variable name**: Make sure you're using the correct prefix (`NEXT_PUBLIC_` for Next.js, `NUXT_PUBLIC_` for Nuxt, `ANGULAR_PUBLIC_` for Angular) 4. **For Angular**: Ensure you're using `set-env.cjs` to generate environment files before running `npm run start` or `npm run build` *** ## Next Steps Learn different installation methods Programmatic control with the SDK Customize widget appearance # Help & Support Source: https://docs.bubblav.com/help-support Find answers to common questions and get help with BubblaV Find answers to frequently asked questions about BubblaV. For quick how-to questions while you work, try the [in-dashboard help assistant](/user-guide/help-assistant). If you need additional help, [contact our support team](https://www.bubblav.com/contact). ## Getting Started Visit [bubblav.com](https://www.bubblav.com) and click **Sign Up**. You'll need to verify your email before you can start using the platform. After logging in, go to **Dashboard** → **Websites** and click **Add Website**. Enter your website URL and BubblaV will automatically start crawling your content. You can have a basic chatbot running in 5-10 minutes. Website crawling typically takes 2-5 minutes depending on your site size, and you can continue configuring while it runs. 1. BubblaV automatically crawls your website to learn your content 2. Your knowledge base is populated with indexed pages 3. A unique embed code is generated for your website 4. You can customize the widget and test it before going live No installation on your server is required. You just need to add a small JavaScript snippet to your website's HTML. See the Installation guide for platform-specific instructions. ## Installation & Widget Deployment 1. Go to **Dashboard** → **Installation** 2. Copy the embed code provided 3. Paste it into your website's HTML (typically in the footer or header) 4. The widget will appear on your live site within minutes For platform-specific instructions, see the Installation guide. Yes! You can use the "Insert Headers and Footers" plugin to paste the embed code in the footer section, or manually add it to your theme's footer.php file. Yes! Install the BubblaV Shopify app from the App Store. It will automatically integrate with your store and you can configure it from your dashboard. Yes! Google Tag Manager (GTM) works on virtually any website and is a great option when your platform has no dedicated app. Create a new **Custom HTML** tag, paste your BubblaV embed code, set the trigger to **All Pages**, then **Submit** and **Publish**. See the [Google Tag Manager guide](/user-guide/integrations/google-tag-manager) for full step-by-step instructions. * Verify the embed code is correctly placed in your HTML * Check your browser console for errors * Ensure you're using the correct website ID * Wait a few minutes for the widget to load * Check that your website ID is active in your dashboard Yes. Go to **Design** → **Positioning** and choose **Bottom Right** or **Bottom Left** for both desktop and mobile. ## Knowledge Base & Training Website crawling automatically scans your website, extracts content from your pages, and makes it searchable so your chatbot can answer questions accurately based on your actual content. When you add a website, BubblaV: 1. Visits your URL and extracts all text content 2. Follows links to discover other pages on your domain 3. Detects sitemaps and crawls listed URLs 4. Processes content into searchable chunks 5. Updates status for each page (Crawled, Pending, Failed) Yes! You can add sub-websites and external domains to your knowledge base. This allows you to train your chatbot on content from multiple related sources. Check your robots.txt file. BubblaV respects the robots.txt standard, so pages blocked there won't be crawled. If needed, you can manually add content using text snippets or file uploads. Yes! You can upload PDFs, documents, and text files directly to your knowledge base. Go to **Knowledge** → **Files** to upload content. Use **Knowledge** → **Q\&A** to add specific entries. Write out question and answer pairs you want the chatbot to know. ## Widget Customization & Design Go to **Design** in your dashboard to customize: * Brand colors and color themes * Widget size and position * Welcome message and chat suggestions * Bot name and avatar * Background styles Yes! When you add a new website, BubblaV automatically analyzes your site's colors and applies a matching theme. You can also manually extract colors anytime: go to **Design** → **Color Palette Presets**, enter any URL, and click **Extract Colors**. Yes. Go to **Design** → **Home Screen** to customize the bot's name, avatar image, and welcome message. Yes, this option is available on Pro+ plans. Go to **Design** → **General** and toggle **Show 'Powered by' branding**. * **Width**: Default is 400px (adjustable) * **Height**: Default is 650px (adjustable) You can customize dimensions to match your website's design. Changes usually appear within a minute of saving. If they don't, allow up to 5 minutes for caching to clear, then reload your site — or open it in an incognito window to see the latest version. See [Widget Design](/user-guide/widget-design) for details. ## Integrations Connecting Shopify enables your chatbot to: * Track orders by order number * Search your product catalog * Show product details * Access customer order history * Process returns and refunds * Check gift card balances * Validate discount codes 1. Go to **Dashboard** → **Integrations** → **Shopify** 2. Click **Connect Shopify** 3. The BubblaV app will open in the Shopify App Store 4. Click **Install** and authorize the app 5. You'll be redirected back to your dashboard * Verify you're using your `.myshopify.com` domain * Check that your store is active * Clear browser cache and try incognito mode * Ensure you have app installation permissions * Try the authorization process again BubblaV supports integrations with: Shopify, HubSpot, Zendesk, Calendly, Stripe, Klarna, Polar, and custom tools via our MCP servers. Use **Custom Tools** to create HTTP requests to any API. You can define tools that call external services and integrate them into your chatbot. ## Live Support Live support lets you take over conversations in real-time when a customer needs to talk to a human. This feature is available on Pro+ plans. Live support is automatically enabled for Pro+ plan users. Your team members can access the **Live Support** dashboard to see and respond to conversations in real-time. Your account owner can add team members with different roles. Go to **Team & Members** to manage who can access live support conversations. ## Account & Billing BubblaV offers plans with different features and pricing. Visit the [Pricing page](https://www.bubblav.com/pricing) to see all available plans and their features. **Pricing Summary:** * **Free**: \$0/month (100 messages/month, 1 website, 50 pages) * **Pro**: \$49/month (\$39/month annually, save \$120/year, 5,000 messages/month) - 14-day free trial All paid plans include annual billing options with 20% savings compared to monthly billing. Yes! The Pro plan includes a **14-day free trial** for new customers. You get full access to all Pro features during the trial period. Your payment card is required at signup but won't be charged until the trial ends. Cancel anytime during the trial at no cost. You can change your plan anytime from your **Account Settings** → **Billing**. Upgrades are effective immediately, and downgrades take effect at the end of your billing cycle. EU consumers have a 14-day right of withdrawal under EU consumer law (ångerätt). Because we charge nothing during the 14-day free trial and paid plans cannot start until the trial ends, your withdrawal right is fully covered by the trial: you may cancel or downgrade to the Free plan at any time before the trial ends at no cost. If you are ever charged within 14 days of starting a paid subscription, contact us for a full refund. Otherwise, contact our [support team](https://www.bubblav.com/contact) to discuss your options. See our [Terms of Service](https://www.bubblav.com/terms) for full details. Go to **Team & Members** in your dashboard and click **Add Member**. Enter their email address and select their role. They'll receive an invitation to join your account. ## Troubleshooting * Verify your website was fully crawled (check Knowledge → Pages) * Add specific Q\&A pairs for common questions you want answered * Upload relevant documents to your knowledge base * Use "Content Gaps" to identify what information is missing * Test with specific questions from your website content Your knowledge base may not have enough specific information. Consider: * Adding more detailed content to your website * Uploading PDFs with detailed product/service information * Adding Q\&A entries with specific question/answer pairs * Refining behavior in Settings * Check your spam/junk folder * Verify you entered the correct email address * Request a new verification email * Try signing up with Google instead * Large websites (100+ pages) naturally take longer * Check if your site blocks bots in robots.txt * Try adding pages manually if crawl continues to fail * Contact support if crawl is stuck * Verify you're using the correct login credentials * Try resetting your password * Check that your browser supports the dashboard * Clear your browser cache and try again * Contact support if you're still unable to access * Check your internet connection * Verify the widget code is correctly installed * Check browser console for JavaScript errors * Ensure your website's server is responding quickly * Try clearing your browser cache ## Still Need Help? If you can't find the answer you're looking for, we're here to help! [Contact our support team](https://www.bubblav.com/contact) and we'll respond as quickly as possible. You can also check the [User Guide](/user-guide/getting-started) for more detailed documentation. # Documentation Source: https://docs.bubblav.com/index Guides and references for setting up, customizing, and growing with your BubblaV AI chatbot BubblaV is an AI chatbot that trains on your website content, answers visitor questions 24/7, and hands complex conversations to your live support team. Start here or jump straight to the area you need. ## Start here Create an account, add your website, and go live in under 10 minutes Add the chatbot widget to your website or platform Match the widget to your brand colors, position, and tone Verify answers and behavior before going live ## Train and improve your chatbot How website crawling, Q\&A, and files become answers Tone of voice, guardrails, and answer quality Proactively engage visitors at the right moment Conversations, trends, and most-asked questions ## Engage and convert visitors Unified inbox, copilot, and human handoff across channels Collect leads, quotes, reviews, and support tickets in chat ## Integrations E-commerce, CRM, messaging, scheduling, and more Order tracking, product search, and visitor insights Escalate conversations to your help desk ## For developers Programmatic control of the widget Ready-to-use Next.js and Nuxt examples Connect AI agents and tools to your chatbot Programmatic access to website crawling ## Get help FAQs and how to reach our support team Free and Pro plans, quotas, and upgrades Product overview and sign-up # Account Settings Source: https://docs.bubblav.com/user-guide/account-settings Manage your profile, notification preferences, and security from one tabbed page # Account Settings Account Settings is your personal hub for profile information, notification preferences, and security. It's organized into three tabs: **Profile**, **Notifications**, and **Security**. Open it from the sidebar avatar menu or go to **Dashboard → Account Settings**. You can also deep-link a tab with `?tab=profile`, `?tab=notifications`, or `?tab=security`. ## Profile tab Update your basic account information: * **Profile image** — Upload and crop an avatar. It appears in support chats and internal dashboards. * **Full name** — Used in emails and across the dashboard. * **Email** — Read-only. This is the address you signed up with. Click **Save Changes** when you're done. ## Notifications tab Control how BubblaV reaches you across three channels and four notification types. See [Push & Message Notifications](/user-guide/live-support/push-notifications) for the full walkthrough; the key idea is a **channel × type** matrix. * **Web** — the in-app notification bell (the notification center). * **Push** — browser push notifications on desktop and mobile. * **Email** — sent to your account email address. ### Master channel toggles At the top, three switches act as master kill-switches. Turning a channel off disables it for **every** notification type below — for example, turn off **Push** to stop all browser push notifications at once. ### Per notification type Each type has independent **Web**, **Push**, and **Email** checkboxes (a checkbox is disabled while its master toggle is off): | Type | What it covers | | ------------------- | --------------------------------------------------------------------------------------------------------- | | **Messages** | A visitor sends a message in live support. | | **Quota** | Your message quota is low or exhausted. Includes an **alert threshold (%)** and an optional **CC email**. | | **Support request** | A visitor requests human support. | | **Form submission** | A visitor submits a form. | Your account email always receives email notifications for enabled types. You can add **one** additional CC email for quota notifications. ### Browser push status A separate panel shows whether push is enabled **on this browser**. Because browser permission is per-device, enabling push here only affects the browser you're currently using — use it on each device where you want notifications. If push is blocked, unblock the site in your browser settings, then return here. Click **Save preferences** to persist your matrix. ## Security tab * **Change Password** — Available for email/password accounts. OAuth users manage passwords through their provider. * **Data Export** — Download all your account data (profile, subscriptions, websites). * **Danger Zone** — Permanently delete your account. This is irreversible and cancels active subscriptions. ## FAQ **Q: Why don't I see push notifications on my phone?** A: Browser push works on the specific browser where you enabled it. Open BubblaV in your mobile browser and enable push in **Account Settings → Notifications → Browser push status** on that device. **Q: I turned off a type but still see old notifications.** A: Toggles affect *future* notifications. Existing items stay in your bell inbox until you archive or read them. **Q: Where do form and support-request emails come from?** A: They're sent from BubblaV to your account email (plus your quota CC email for quota alerts). See [Email Notifications](/user-guide/live-support/email-notifications) for message-reply emails. # Use AI Agents to Manage & Improve Your Chatbot Source: https://docs.bubblav.com/user-guide/ai-agent-workflows Connect Claude, ChatGPT, or OpenClaw to BubblaV via MCP and let your AI diagnose content gaps, write knowledge, tune behavior, set up human handoff, and build custom tools — with copy-paste prompts. You don't have to manage your chatbot by hand. BubblaV exposes its data and settings over an **MCP server**, so an AI assistant like **Claude**, **ChatGPT**, **Google Antigravity**, or **OpenClaw** can run the same tasks you'd do in the dashboard — diagnose weak answers, write and add knowledge, tune the bot's persona, set up human handoff, and build custom tools. This page is a recipe book. Each recipe has a **goal**, a **copy-paste prompt**, and the **MCP tools** it triggers. For the full tool-by-tool reference and connection details, see the [MCP Server](/developer-guide/mcp-server) developer guide. ## What you can do Find the questions your bot struggles with and the topics visitors ask about most. Draft and add Q\&A, upload files, and turn resolved tickets into reusable answers. Rewrite the chatbot persona and edit the widget's words, colors, and starters. Configure human-handoff triggers and build custom webhook tools. ## Connect your AI (one time) Add BubblaV as an MCP server in your assistant. The setup differs slightly by client — full screenshots are in the [MCP Server guide](/developer-guide/mcp-server). These clients use **OAuth** — no API key to manage. 1. In your assistant's settings, add a new MCP server with the URL below. 2. Authorize: sign in to BubblaV and pick the website to connect. 3. Done. Your assistant now sees BubblaV's tools. ```text theme={null} https://www.bubblav.com/mcp ``` API-key clients send a header instead of OAuth. 1. In BubblaV, open **Website Settings → API Keys** and generate a key with the `mcp:read` and `mcp:tools:execute` scopes. Copy it — it's shown once. 2. Point your client at the endpoint below, sending `X-API-Key: bubblav_mcp_…`. 3. We recommend the [mcporter](https://github.com/jasonacox/mcporter) helper to configure OpenClaw. ```text theme={null} URL: https://www.bubblav.com/api/mcp Header: X-API-Key: bubblav_mcp_YOUR_KEY ``` Your assistant can only act on the website you authorized, and every call is logged in **Integrations → MCP Settings → Audit Logs**. *** ## Recipes Paste each prompt into your connected assistant and edit the bracketed parts. Your assistant will call the BubblaV tools for you. ### 1. Find content gaps & trending questions **Goal:** see where the bot fails and what visitors ask most, grouped into themes. ```text theme={null} Look at my chatbot's content gaps and most-asked questions from the last 30 days. Group them by theme, tell me which topics the bot struggles with most, and rank the top five things I should fix. ``` **Tools it triggers:** `bubblav_get_content_gaps`, `bubblav_get_most_asked_questions`, `bubblav_read_report`. ### 2. Fill content gaps with new knowledge **Goal:** draft answers for the worst gaps and add them — without writing each one by hand. ```text theme={null} Take the top three gaps in the [shipping] theme. Here's our policy: [paste text]. Draft a clear Q&A-style answer for each gap, show them to me for approval, then add each approved answer to the knowledge base. Skip any gap already covered. ``` **Tools it triggers:** `bubblav_search_knowledge` (de-dup check), `bubblav_add_knowledge`. ```text theme={null} Upload and index this file as knowledge: [attach PDF/DOCX/TXT/MD, ≤10MB] ``` Calls `bubblav_upload_knowledge_file`, then `bubblav_get_crawl_status` to confirm indexing. ```text theme={null} Crawl and index this URL into my knowledge base: https://example.com/new-page ``` Calls `bubblav_add_crawl_url`. ```text theme={null} Turn resolved ticket [ticket_id] into a searchable knowledge article. ``` Calls `bubblav_sync_ticket_to_knowledge`. ### 3. Turn conversations into insight **Goal:** audit specific issues or pull leads out of conversations. ```text theme={null} Find every conversation from the last two weeks that mentioned a "billing error". Summarize the common causes. Then list the leads (visitors who gave an email) from the same period so I can follow up. ``` **Tools it triggers:** `bubblav_search_conversations`, `bubblav_get_conversation`, `bubblav_list_leads`. ### 4. Tune the chatbot persona & widget **Goal:** change how the bot talks and looks, editing in place rather than overwriting. ```text theme={null} Read my bot's current instructions. Then update the persona so it's warmer and more concise, always greets by name, and offers to escalate to a human for anything billing-related. Also set the widget greeting to "Hi there! How can we help?" and add three starter suggestions. ``` **Tools it triggers:** `bubblav_get_website_settings`, `bubblav_update_website_settings` (the `custom_instructions` field is the persona, max 2,000 chars), `bubblav_update_widget_appearance`. ### 5. Set up human handoff triggers (Pro+) **Goal:** route sensitive intents to a live agent automatically. ```text theme={null} Create a human-handoff scenario: when a visitor mentions a refund, cancellation, or complaint, hand off to a live agent with the message "Let me connect you with a teammate who can sort this out." List the existing scenarios first so we don't duplicate. ``` **Tools it triggers:** `bubblav_list_handoff_scenarios`, `bubblav_create_handoff_scenario`. ### 6. Build a custom webhook tool (Pro+) **Goal:** let the chatbot take a real action (check an order, query a CRM, get a quote). ```text theme={null} Create a custom tool called "check_order_status" that takes an order number and calls my webhook at https://example.com/api/order-status using bearer auth. Describe it for the AI so it knows when to use it, then activate it for this website. ``` **Tools it triggers:** `bubblav_list_custom_tools`, `bubblav_create_custom_tool`. The `secret_key` for a bearer/hmac tool is returned **only once**. Tell your assistant to surface it to you immediately so you can configure your webhook. See [Custom Tools](/user-guide/integrations/custom-tools) for webhook validation details. ### 7. Create a scoped API key for another agent **Goal:** give a second assistant (or Zapier, a script, etc.) limited access. ```text theme={null} Create a new MCP API key named "Zapier" with read-only (mcp:read) scope. ``` **Tools it triggers:** `bubblav_create_api_key`. (Use `bubblav_list_api_keys` and `bubblav_revoke_api_key` to audit and revoke.) *** ## The improvement loop These recipes chain into a weekly habit: ```text theme={null} 1. Diagnose — "what should I fix this week?" 2. Improve — "draft & add answers for the top gaps" 3. Measure — "how did resolution rate change?" 4. Tune — "adjust tone / handoff based on what you saw" ``` Your AI drives each cycle — BubblaV does **not** run an autonomous self-improvement job in the background. You approve knowledge before it's added and control how the persona evolves. The win is collapsing a week of dashboard chores into a single conversation. ## Plans & limits MCP calls are counted separately from your AI message limits, on a rolling 30-day window. | Plan | MCP calls / month | | ------ | ----------------- | | Free | 100 | | Pro | 5,000 | | Custom | Unlimited | The following require a **Pro plan or higher** (gated when the tool runs): * `bubblav_create_custom_tool` and custom-tool management * `bubblav_create_handoff_scenario` and handoff management * `bubblav_sync_ticket_to_knowledge` See [Billing & Plans](/user-guide/billing) for full plan details. When you exceed the limit you'll get an HTTP `429` with a `Retry-After` header. ## Related Every tool, parameter, auth flow, and rate limit — the developer reference. How crawled pages, Q\&A, and files become answers. The dashboard view of content gaps and answerable questions. Webhook tools, authentication, and validation. # AI Page Source: https://docs.bubblav.com/user-guide/ai-page Add a full-page AI chat interface to your website The AI Page is a full-page, conversational AI interface that provides an immersive chat experience. Unlike the floating widget, the AI Page takes over the entire viewport, making it perfect for dedicated help pages, support portals, or AI-powered landing pages. ## What is the AI Page? The AI Page provides: * **Full-page experience**: Immersive chat interface that fills the entire browser window * **Conversational AI**: Interactive chat with streaming responses * **Source citations**: AI responses include links to relevant content from your knowledge base * **Customizable appearance**: Light and dark themes to match your brand * **Lazy loading**: Optimized performance with code splitting ## Use Cases The AI Page is ideal for: * **Dedicated help centers**: `/help` or `/support` pages * **AI-powered landing pages**: Interactive product demos or onboarding * **Knowledge base search**: Full-page search interface for documentation * **Internal tools**: Employee support portals or FAQ pages * **Customer portals**: Integrated chat in customer dashboard areas *** ## Installation ### Basic Setup Add the AI Page to your website in two simple steps: Add a container div where you want the AI Page to appear: ```html theme={null}
```
Add the AI Page script with your configuration: ```html theme={null} ```
The AI Page will automatically create the container if you don't provide one, but we recommend adding it explicitly for better control. *** ## Configuration Options ### Required Attributes | Attribute | Description | Example | | -------------- | ------------------------------ | -------------------------------------- | | `src` | Script URL | `https://www.bubblav.com/ai-page.js` | | `data-site-id` | Your unique website identifier | `812b25b4-02df-40fa-9f68-3a99b372b1a1` | ### Optional Attributes | Attribute | Description | Default | | ------------------ | -------------------------------- | ------------------------- | | `data-theme` | Visual theme (`light` or `dark`) | `light` | | `data-title` | Header text for the chat | `"What can I help with?"` | | `data-placeholder` | Input placeholder text | `"Ask me anything..."` | *** ## Platform-Specific Instructions ### Static HTML Add to your HTML page: ```html theme={null} AI Help Center
```
### React / Next.js **Using next/script (Recommended for Next.js):** ```jsx theme={null} // app/ai-help/page.tsx import Script from 'next/script'; export default function AIHelpPage() { return (
``` **Option 2: Page Template** Create a custom page template in your theme: ```php theme={null}
``` ### Webflow 1. Create a new page (e.g., "AI Help") 2. Add an Embed element anywhere on the page 3. Paste the following code: ```html theme={null}
``` 4. Set the page body to have no padding/margin for full-screen experience
### Framer 1. Create a new page 2. Add a Code component from the components panel 3. Set it to "Custom Code" and paste: ```html theme={null}
``` 4. Set the page layout to fill the screen for best results
*** ## Styling & Layout ### Container Styling The AI Page fills its parent container. For best results: ```css theme={null} #bubblav-ai-page { width: 100%; height: 100vh; /* Full viewport height */ margin: 0; padding: 0; overflow: hidden; /* Prevent scrollbars */ } ``` ### Theme Options Choose between two built-in themes: **Light Theme:** ```html theme={null} data-theme="light" ``` **Dark Theme:** ```html theme={null} data-theme="dark" ``` The theme controls the color scheme of the entire interface including the chat sidebar, message bubbles, and input area. *** ## Advanced Configuration ### Custom Titles Change the header text: ```html theme={null} data-title="How can I help you today?" ``` ### Custom Placeholder Change the input placeholder: ```html theme={null} data-placeholder="Type your question here..." ``` *** ## How It Works 1. **Script loads**: The ai-page.js loader fetches the latest version 2. **Widget initializes**: React component mounts in the container 3. **User sends message**: Chat streams responses in real-time 4. **Sources displayed**: AI responses include citations from your knowledge base 5. **Conversation history**: Chat persists during the session *** ## Best Practices The AI Page is designed for full-page experiences. Use it on dedicated routes like `/help`, `/support`, or `/ai-chat`. Choose light or dark theme based on your website's design for seamless integration. Customize the title and placeholder to match the purpose of your page (e.g., "Product Support" vs "Sales Assistant"). Ensure your API endpoint is accessible and properly configured before going live. The AI Page uses your plan's message limits. Monitor usage in your dashboard. *** ## Troubleshooting * Verify the container div with `id="bubblav-ai-page"` exists * Check browser console for JavaScript errors * Ensure your API key is correct * Confirm the script URL is loading (check Network tab) * Verify `data-api-url` points to a valid endpoint * Check CORS settings on your API * Ensure your API key is valid and not expired * Review browser console for specific error messages * Ensure parent container has defined height * Check for CSS conflicts from your site's stylesheets * Verify `overflow: hidden` on the container * Test in different browsers * The widget uses lazy loading for optimal performance * Initial load may take 1-2 seconds * Subsequent loads are faster due to browser caching * Check your network connection *** ## Comparison: AI Page vs Widget | Feature | AI Page | Widget | | --------------- | -------------------- | ----------------- | | Layout | Full-page immersion | Floating bubble | | Best for | Dedicated help pages | Site-wide support | | Screen usage | 100% viewport | Minimal footprint | | User experience | Focused conversation | Quick assistance | | Installation | Per page | Site-wide | Use both! Install the widget sitewide for quick help, and add the AI Page to your dedicated support page for in-depth conversations. *** ## Next Steps Add content for the AI to reference Customize your chatbot appearance # Best Practices Source: https://docs.bubblav.com/user-guide/best-practices Guide to getting the most out of BubblaV for your customers To ensure your BubblaV chatbot provides the best possible support to your customers, follow these best practices for content management, testing, and continuous improvement. ## 1. Effective Content Crawling The foundation of a smart chatbot is a comprehensive knowledge base. * **Start with a thorough crawl**: When setting up, ensure you crawl your main documentation, help center, and landing pages. * **Verify status**: Check the **Knowledge** tab to ensure all pages are "Indexed". ## 2. Testing in the Design Page Before deploying or after making changes, always use the testing function on the **Design** page. 1. Navigate to your website dashboard and click **Design**. 2. The chat preview on the right side simulates the real user experience. 3. **Ask specific questions**: Ask about pricing, specific features, return policies, or edge cases. 4. **Verify citations**: Check that the bot is citing the correct pages from your site. ## 3. Resolving Content Gaps When you spot an incorrect or suboptimal answer during testing: * Go to the **Knowledge** section -> **Content Gaps**. * BubblaV automatically flags questions that the AI struggled with. * **Add a Q\&A Entry**: You can convert an unanswered question into a precise, hand-crafted Q\&A pair. * This is perfect for "sensitive" questions or brand-specific phrasing that might not be clear in the raw web text. ## 4. Adding Manual Q\&A Sometimes your website doesn't explicitly state the answer to a common question (e.g., "Do you offer a non-profit discount?") or the info is scattered. * Go to **Knowledge** > **Q\&A**. * Add a **Q\&A Entry** (e.g., Question: "Do you offer discounts?", Answer: "Yes, we offer..."). * This fills gaps without needing to create new public web pages. ## 5. Monitoring Content Gaps Your chatbot improves over time if you listen to what users are asking. * **Check Top Unanswered Questions**: Periodically review usage reports to see what questions the bot couldn't answer. * **Identify Gaps**: If users ask about a feature you haven't documented, that's a content gap. * **Action**: * Add a new section to your website and re-crawl. * Or add a manual Q\&A entry in the **Q\&A** tab to address it immediately. By following this loop—**Crawl**, **Test**, **Q\&A**, and **Monitor**—you will build a powerful automated support agent that your customers love. # Billing & Plans Source: https://docs.bubblav.com/user-guide/billing Manage your subscription, billing details, and usage BubblaV offers flexible pricing plans to scale with your business needs. You can manage your subscription, view invoices, and track usage directly from the dashboard. ## Subscription Plans We offer plans to suit different needs: Perfect for testing and personal projects. * **Price**: \$0/month * 1 Website * 50 pages (web + files + text) * 100 messages/month * 100 MCP API calls/month * 7 days retention * Built-in integrations * Human handoff (chatbot → human) * Email to visitors For growing businesses needing advanced features. **Start with a 14-day free trial.** * **Price**: \$49/month (\$39/month annually, save \$120/year) * Everything in Free * 5 Websites * 5,000 pages (web + files + text) per website * 5,000 messages/month * 5,000 MCP API calls/month * 1 year retention * Advanced data sources and reports * Live Chat Dashboard (real-time takeover) * Human handoff scenarios (AI intent-based routing) * Integrations (Zendesk, HubSpot, Attio) and Custom tools * Custom branding (remove "Powered by") * 3 team member seats * Weekly data sync ## Managing Your Subscription To access billing settings: 1. Click your **user avatar** in the top-right corner of the dashboard 2. Select **Subscription** from the menu You can also go directly to [bubblav.com/dashboard/subscription](https://www.bubblav.com/dashboard/subscription). ### Upgrading Your Plan 1. Navigate to the **Subscription** page (via user avatar menu or direct link). 2. Scroll down to the **Available Plans** section. 3. Click **Upgrade** on your desired plan. 4. Follow the checkout prompts to complete the purchase. ### Free Trial The Pro plan includes a 14-day free trial for new customers. You get full access to all Pro features during the trial period. * **Eligibility**: Available to new customers who haven't had a paid subscription before * **Card Required**: Your payment card is required at signup but won't be charged until the trial ends * **Trial Duration**: 14 days from signup * **Automatic Conversion**: After the trial, your subscription automatically converts to a paid Pro plan * **Reminder**: We'll send you a reminder email 2 days before your trial ends * **Cancel Anytime**: If you cancel during the trial, you won't be charged at all To start a free trial, click **Start 14-Day Free Trial** on the Pro plan card in the Subscription page. ### Message Usage & Limits Your plan includes a monthly allowance of AI responses (messages). Only AI responses are counted. * **Reset Schedule**: * **Paid Plans**: Usage resets on your monthly billing date (e.g., if you subscribed on the 14th, it resets on the 14th of each month). * **Free Plan**: Usage resets on the 1st of every calendar month. * **Tracking Usage**: The Subscription page shows a real-time progress bar of your message consumption. * **Overages**: If you run out of messages, your chatbot will stop replying until the next cycle or until you purchase an add-on. * **Add-on Packs**: You can buy "Extra Message Packs" (1,000 messages for \$5) that never expire and are used after your monthly allowance is exhausted. ### MCP API Call Quotas MCP API calls are tracked separately from your AI message usage. * **Free**: 100 MCP API calls/month * **Pro**: 5,000 MCP API calls/month * **Reset Schedule**: MCP API usage resets on a rolling 30-day window from your first MCP call in the current cycle. * **Tracking Usage**: You can check current MCP API usage from your website settings in the dashboard. * **When Limit Is Reached**: MCP requests return a rate limit error until the quota resets. ### Data Sync Frequency BubblaV automatically syncs your data to keep your chatbot up-to-date. The frequency depends on your plan: * **Free**: Every 30 days * **Pro**: Every 7 days This ensures your chatbot always has the latest information from your website and connected sources. ## Plan Features ### Free Plan Features The Free plan includes essential features for testing: * Basic AI chatbot functionality * Built-in integrations (no external tools) * Core analytics dashboard * Message & conversation trends * Export report data ### Pro Plan Features The Pro plan unlocks advanced capabilities: The AI automatically detects when it can't help and escalates to a human agent. It collects visitor information, creates a live support session, and generates external support tickets (Zendesk, HubSpot, etc.) for seamless follow-up. Take over conversations in real-time with the Live Chat Dashboard. Monitor active conversations, see what visitors are typing, and jump in instantly when needed. Provides full control to handle complex queries personally. Access detailed analytics including: * Most active times * Conversation flow visualization * Visitor and conversation geography * Top unanswered questions * Bad feedback conversations * Most visited links * Leads captured Connect with external tools: * Zendesk (tickets and knowledge base) * HubSpot (CRM and tickets) * Attio (CRM) * Custom tools * MCP Servers (Model Context Protocol) - Connect to any external API or service Remove the "Powered by BubblaV" branding and fully customize the widget appearance to match your brand. ## Billing Providers We support billing through different providers depending on how you signed up: ### Polar For users who sign up directly on BubblaV (non-Shopify merchants). * **14-day free trial** available on Pro plan for new customers * Invoices emailed automatically * Choose monthly or yearly billing (save 20% with annual) ### Shopify For users who installed BubblaV via the Shopify App Store. * Charges appear on Shopify bill * Upgrades/downgrades via Shopify billing * **Note**: Shopify billing only supports monthly billing cycles * Usage tracking in BubblaV dashboard ## Cancellation You can cancel your subscription at any time by downgrading to the Free plan: 1. Click your **user avatar** in the top-right corner and select **Subscription**, or go to [bubblav.com/dashboard/subscription](https://www.bubblav.com/dashboard/subscription) 2. Click **Downgrade to Free** on your current plan 3. Confirm the downgrade when prompted 4. Your plan will remain active until the end of the current billing period **During Free Trial**: If you cancel during your 14-day free trial, you won't be charged at all and your account will revert to the Free plan immediately. # Make Your Bot Collect Leads, Quotes & Reviews Source: https://docs.bubblav.com/user-guide/configure-bot-leads-quotes-reviews Configure your chatbot to handle "Get Free Quote", share review links, and collect leads Most "can the bot do X?" questions are answered by three features working together: **Forms**, **Q\&A**, and **Integrations**. This page maps the most common requests to the exact setup steps. Not sure where to start? You can also open the [help assistant](/user-guide/help-assistant) from the **question-mark icon** in the top menu of your dashboard and ask in plain English — e.g. *"How do I make the bot give customers a review link?"* *** ## "I want the bot to handle 'Get Free Quote' requests" Use a **Form** so the bot collects the visitor's details inside the chat instead of sending them elsewhere. **Dashboard** → select your website → **Forms** → **Create Form**. Add the fields you need (e.g. Name, Email, Company, Service, Message). Use something like: *"Show this form when a visitor asks about pricing, a quote, an estimate, a free quote, or wants to discuss business terms."* The bot will now offer the quote form automatically whenever the intent matches. See [Forms](/user-guide/forms) for the full field list and the ready-made **Quote Requests** example. Connect a [CRM & Marketing integration](/user-guide/integrations/attio) (Attio, HubSpot, Klaviyo) so every submitted quote becomes a lead in your pipeline automatically. *** ## "I want the bot to give customers a review link" Two simple options: Best for a single review link. Add a Q\&A whose question covers review phrasings ("how do I leave a review", "review link", "rate my order") and whose answer contains the exact URL. Best when you want to collect the review content in-chat. Use the **Product Review** form example so the bot gathers feedback before linking out. For the Q\&A approach, **Dashboard** → your website → **Knowledge** → **Q\&A** → **Add Q\&A**. Set: * **Question:** *"How do I leave a review / where is the review link?"* * **Answer:** *"We'd love your feedback! Leave a review here: [https://your-review-url.com](https://your-review-url.com)"* *** ## "I want the bot to collect email leads" Combine a **Form** (to capture email + consent) with a **CRM & Marketing integration** (to sync the lead): * Create a "Newsletter Signup" or "Contact Me" form with an Email field. * Connect [HubSpot](/user-guide/integrations/hubspot), [Klaviyo](/user-guide/integrations/klaviyo), or [Attio](/user-guide/integrations/attio) so submissions flow into your marketing tool. *** ## Related configuration The bot answers from your website + knowledge base. Add pages, files, and Q\&A. Edit the greeting, tone, and persona in Widget Design. Add Q\&A for exact phrasings. Add the chatbot to your site with one script snippet — no coding required. Route complex questions to your team with human handoff. *** ## Tips for reliable answers * **Write Q\&A questions the way visitors actually ask** (e.g. "free quote", not "pricing enquiry form"). * **Keep answers short and actionable** — lead with the link or the next step. * After adding Q\&A, give the bot a moment to index the new entry before testing. # Forms Source: https://docs.bubblav.com/user-guide/forms Collect structured data from visitors through AI-powered forms Forms let your AI chatbot collect structured data from visitors—like feedback, contact details, or survey responses—directly inside the chat. Instead of redirecting visitors to external pages, the chatbot presents a form when it detects the right intent. ## How It Works 1. You **create a form** with the fields you need 2. You give the AI **instructions** on when to show it 3. When a visitor asks something relevant, the AI **presents the form** in the chat 4. The visitor **fills it out and submits**—you get the data instantly The AI decides when to show a form based on your instructions. Write clear, specific instructions so the AI triggers the form at the right moment. ## Suggested Forms When BubblaV crawls your website, it can suggest forms based on the lead and contact forms it finds on your pages. These appear in your Forms list with a **Suggested** label, already enabled and ready to use—or disable them if you don't want them. To keep your chatbot focused, we suggest at most **5 forms per website**; you can always create additional forms manually. *** ## Creating a Form Go to **Dashboard** → select your website → **Forms** in the sidebar Click the **Create Form** button to open the form builder. * **Name** (required): A clear name like "Product Review Form" or "Contact Request" * **Description**: Brief text shown to visitors above the form * **AI Instructions**: Tell the chatbot *when* to show this form (e.g., "Show when a visitor wants to leave a product review or feedback") Click **Add Field** and configure each field's type, label, placeholder, and whether it's required. See [Field Types](#field-types) below for all options. The live preview on the right shows how your form will look to visitors. Click **Create Form** when you're done. Write specific AI instructions. "Show when visitor asks about pricing or quotes" works better than "Show when needed." *** ## Field Types Forms support 8 field types to cover most data collection needs: | Type | Description | Use For | | ---------------------- | --------------------------------- | ------------------------- | | **Text** | Single-line text input | Names, short answers | | **Email** | Email input with validation | Email addresses | | **Number** | Numeric input | Quantities, ages | | **Long Text** | Multi-line text area | Feedback, descriptions | | **Dropdown** | Select one from a list | Categories, departments | | **Radio Buttons** | Choose one option | Yes/No, ratings, choices | | **Checkbox** | Single toggle (checked/unchecked) | Agreements, confirmations | | **Rating (1-5 Stars)** | Star rating selector | Satisfaction scores | ### Field Configuration Each field has: * **Label** (required): The question or prompt shown to visitors * **Type**: The input type from the list above * **Placeholder**: Hint text inside the field (not available for Checkbox and Rating) * **Required**: Whether the visitor must fill in this field before submitting For **Dropdown** and **Radio Buttons**, you also configure a list of options that the visitor can choose from. ### Reordering Fields Use the up/down arrows on each field to change the order. Fields appear to visitors in the order you set. *** ## AI Instructions AI Instructions tell your chatbot when to display a form. This is the most important part of form configuration—if the instructions are unclear, the AI won't know when to act. ### Writing Good Instructions * "Show when a visitor wants to leave a product review or feedback about their purchase" * "Show when a visitor asks for a quote, pricing information, or wants to discuss custom plans" * "Show when a visitor expresses interest in becoming a partner or reseller" * "Show when a visitor wants to schedule a demo or consultation call" * "Show when needed" (too vague) * "Show form" (no context) * "When customer" (incomplete) You can create multiple forms per website, each with different AI instructions. The AI will pick the right one based on the visitor's message. *** ## Enabling and Disabling Forms Forms are **enabled by default** when created. You can toggle a form on or off from the Forms list page without deleting it. * **On**: The AI can see and show this form to visitors * **Off**: The form is hidden from the AI—visitors won't see it *** ## Viewing Submissions Every form submission is stored and accessible from your dashboard. ### View Submissions for a Form Each form in the Forms list has a **submissions count** badge. Click the form's menu to view its submissions. Each submission shows: * All field values with their labels * Formatted values (e.g., "4/5 stars" for ratings) * Submission date and time * Visitor ID and conversation ID ### Email Notifications By default, you receive an email notification when a visitor submits a form. The email includes: * Form name * Website name * All submitted field values * A link to view the submission in your dashboard *** ## Sample Use Cases ### Product Reviews Collect customer feedback with ratings and detailed reviews. **Name**: Product Review
**AI Instructions**: "Show when a visitor wants to leave a review, feedback, or rate a product"
1. Text — "Product Name" (required)
2. Rating — "Overall Rating" (required)
3. Long Text — "Your Review" (required)
4. Text — "Reviewer Name"
*** ### Quote Requests Capture lead information when visitors ask about pricing. **Name**: Request a Quote
**AI Instructions**: "Show when a visitor asks about pricing, quotes, custom plans, or wants to discuss business terms"
1. Text — "Full Name" (required)
2. Email — "Email Address" (required)
3. Text — "Company Name"
4. Dropdown — "Interest" (required): Sales, Support, Partnership, Other
5. Long Text — "Tell us about your needs" (required)
*** ### Customer Support Tickets Collect issue details before escalating to your support team. **Name**: Support Ticket
**AI Instructions**: "Show when a visitor has a technical problem, wants to report a bug, or needs help that requires follow-up"
1. Text — "Full Name" (required)
2. Email — "Email Address" (required)
3. Dropdown — "Issue Type" (required): Billing, Technical, Account, Other
4. Text — "Order/Reference Number"
5. Long Text — "Describe the issue" (required)
*** ### Event Registration Sign visitors up for webinars or events. **Name**: Event Registration
**AI Instructions**: "Show when a visitor wants to register for an event, webinar, workshop, or demo"
1. Text — "Full Name" (required)
2. Email — "Email Address" (required)
3. Text — "Company"
4. Number — "Number of Attendees"
5. Dropdown — "Session" (required): Morning, Afternoon, Evening
*** ### Newsletter Signup Collect email subscriptions directly in chat. **Name**: Newsletter Signup
**AI Instructions**: "Show when a visitor wants to subscribe to the newsletter, get updates, or stay informed"
1. Text — "First Name" (required)
2. Email — "Email Address" (required)
3. Checkbox — "I agree to receive marketing emails" (required)
*** ## Editing and Deleting Forms ### Edit a Form Click the pencil icon on any form to modify its name, description, AI instructions, or fields. Changes take effect immediately. ### Delete a Form Click the trash icon and confirm. **Deleting a form permanently removes all its submissions**. This action cannot be undone. Deleting a form also deletes all submissions for that form. Consider exporting important data before deleting. *** ## How Visitors Experience Forms When a visitor interacts with your chatbot and the AI decides a form is relevant: 1. The AI sends a brief message (e.g., "I'd love to get your feedback! Please fill out this quick form:") 2. The form appears inline in the chat with all configured fields 3. The visitor fills in the fields and clicks **Submit** 4. Required fields are validated before submission 5. A success message confirms the submission 6. The conversation continues normally Visitors never leave the chat—the entire experience happens inside the widget. *** ## Best Practices 3-5 fields is ideal. Long forms reduce completion rates. Describe exactly when to show the form. Vague instructions lead to missed triggers. Only mark fields as required if you truly need the data. Optional fields increase completion rates. Use the preview in the form builder and test via the chatbot to verify the experience. *** ## Troubleshooting * Check the form is **enabled** (toggle is On) * Review your **AI Instructions**—make them more specific * Try phrasing your test message differently to match the instructions * Ensure the form has at least one field * Check if multiple forms have overlapping AI instructions * Make each form's instructions distinct and specific to its purpose * Check the **Submissions** page in your dashboard * Verify the form is enabled * Check your email notifications settings *** ## Next Steps Connect your chatbot to external APIs Escalate to live agents Optimize your chatbot setup # Getting Started Source: https://docs.bubblav.com/user-guide/getting-started Start your journey with BubblaV in minutes Welcome to BubblaV! This guide will help you create your account, set up your first chatbot, and get it live on your website in under 10 minutes. ## What You'll Need Before starting, have these ready: * An email address (or Google account) * Your website URL * A few minutes of your time *** ## Step 1: Create an Account Go to [bubblav.com/login](https://www.bubblav.com/login) Pick your preferred option: * **Email**: Enter email and create a password * **Google**: One-click sign up with your Google account If using email, check your inbox and click the verification link You'll be redirected to your dashboard automatically Using Google is fastest—no email verification needed. *** ## Step 2: Choose Your Plan BubblaV offers plans for every business size: | Feature | Free | Pro (\$49/mo) | | -------------------------- | ------ | ---------------------------- | | **Messages/month** | 100 | 5,000 | | **Pages crawled** | 50 | 5,000 | | **Websites** | 1 | 5 | | **Team members** | 1 | 3 | | **Human handoff** | Yes | Yes | | **Email to visitors** | Yes | Yes | | **Live Support** | - | Yes | | **Custom Tools** | Yes | Yes | | **Remove branding** | - | Yes | | **Conversation retention** | 7 days | 1 year | | **Annual billing** | - | \$39/month (save \$120/year) | Start with the **Free** plan to test everything. The **Pro** plan includes a **14-day free trial**—full access during the trial, cancel anytime at no cost. Annual billing saves 20% on all paid plans. ### Upgrading Later 1. Click your **user avatar** in the top-right corner 2. Select **Subscription** from the menu 3. Click **Upgrade Plan** 4. Select your desired plan 5. Enter payment details 6. Your new limits apply immediately *** ## Step 3: Create Your First Website From the dashboard, click **+ New Website** The full URL of your site (e.g., `https://example.com`) Your website is created and ready to configure. We'll automatically fetch your favicon and site name if available. ### What Happens Next After creating your website: 1. **Automatic crawl begins**: BubblaV scans your website to learn about your business 2. **Knowledge base populates**: Content from your pages is indexed 3. **Widget is generated**: A unique embed code is created for you Crawling typically takes 2-5 minutes depending on your website size. You can continue setup while it runs. *** ## Step 4: Setup Wizard The setup wizard guides you through essential configuration: ### Crawl Status Monitor your website crawl: * **In Progress**: Pages are being scanned * **Completed**: All pages indexed successfully * **Errors**: Some pages couldn't be accessed ### Design Preview Quick customization in the **Design** tab: * Choose your **brand colors** * Select a **position** (bottom-right or bottom-left) * Customize **bot identity** (Name, Avatar, Welcome Message) * Preview how it looks in real-time ### Installation Code Get your embed code: ```html theme={null} ``` *** ## Step 5: Test Your Chatbot Before going live, test your chatbot: Click **Design** in the sidebar to open the widget configuration and live preview. Try questions your customers might ask: * "What are your shipping options?" * "How do I contact support?" * "What products do you sell?" Verify the answers are accurate and helpful If answers are wrong, add content to your knowledge base *** ## Quick Start Checklist Track your progress through setup: Sign up and verify your email Create your first website in the dashboard Wait for your website content to be indexed Customize colors and appearance to match your brand Verify responses are accurate in preview mode Add the widget code to your website Confirm the widget appears on your live site *** ## Common First Steps After basic setup, consider these enhancements: ### Improve AI Knowledge Add PDFs, documents with detailed info Add specific answers for common questions ### Customize Experience Custom Instructions on the Behavior page Match your brand colors and style Website details, notifications, team access ### Connect Integrations Connect for order lookups Enable appointment booking See all integrations *** ## Troubleshooting Setup * Check your spam/junk folder * Ensure you entered the correct email * Request a new verification email * Try signing up with Google instead * Large websites take longer (100+ pages) * Check if your site blocks bots (robots.txt) * Try adding pages manually if crawl fails * Refresh the page * Clear browser cache * Check browser console for errors * Ensure JavaScript is enabled * Review what content was crawled * Add missing information via Q\&A entries * Check "Content Gaps" for common unanswered questions *** ## Getting Help Need assistance? Here's how to get help: * **Documentation**: You're already here! Browse the guides. * **Email Support**: Contact [support@bubblav.com](mailto:support@bubblav.com) * **Live Chat**: Chat with our bot on [bubblav.com](https://www.bubblav.com) Pro and Turbo plans include priority support with faster response times. *** ## Next Steps Ready to continue? Here's what to do next: Add the chatbot to your website Add more knowledge for better answers # In-Dashboard Help Assistant Source: https://docs.bubblav.com/user-guide/help-assistant Ask the BubblaV Assistant to configure your chatbot or update settings for you — without leaving your dashboard Not sure how to set something up? The **BubblaV Assistant** is an inline help chat built into your dashboard. Ask how to configure your bot in any language you like, and get answers right where you're working — no need to open a separate tab or dig through docs. The assistant can also **update settings for you** — it doesn't just answer questions, it can make changes directly, so you don't have to hunt for the right toggle. ## Where to Find It You can open the BubblaV Assistant from two places: * The **Assistant** on the **Dashboard Home page** — available as soon as you log in. * The **question-mark icon** in the workspace header on any website page. On the Dashboard Home page. Or, inside a website page, click the question-mark icon in the top header. Type in any language — ask how to configure something, or ask the assistant to update a setting for you. For changes the assistant makes on your behalf, review the summary and confirm before it's applied. The first time you open a website page, a small nudge points out the help icon. Dismiss it, or simply open the assistant — it won't show again. ## What to Ask (and Do) The assistant is tuned for setup and configuration. It can both answer questions and apply changes, such as: * "How do I make the bot collect leads?" * "Add a review link to my chatbot." * "Turn on lead collection for the 'Get Free Quote' button." * "Connect my Google Business integration." * "Update my chatbot's greeting message." For the full mapping of common requests to setup steps, see [Make Your Bot Collect Leads, Quotes & Reviews](/user-guide/configure-bot-leads-quotes-reviews). ## How It Works * The assistant opens as a **side panel** that stays in view as you scroll — your page remains visible alongside it. * It's powered by the same BubblaV chatbot, answering from BubblaV's documentation and your setup. * When you ask it to change a setting, it performs the update through the dashboard — no manual clicking required. * Close it with the **X** or press `Esc`. Think of it as a guided helper for the dashboard: ask where something is, how to enable a feature, or just tell it to make the change — then follow along in the same window. ## Credits Each BubblaV account gets **100 free assistant credits per month**. These assistant credits are **separate from your monthly message quota** — using the assistant does not count against the messages your chatbot uses with visitors. When you run out of free credits for the month, the assistant will let you know and point you to alternative ways to get help until your credits reset on the first of the next month. ## Next Steps Set up your first website Common bot setup walkthroughs # Human Handoff Scenarios Source: https://docs.bubblav.com/user-guide/human-handoff Configure questions that should always be handled by your team # Human Handoff Scenarios Configure specific questions or intents that should always be handled by human agents. When a visitor's message matches a configured scenario, the bot will automatically collect their information and connect them with your team. ## Feature Overview Human Handoff Scenarios use AI intent matching to intelligently detect when a visitor needs human assistance. Instead of relying on exact keyword matches, you can describe scenarios in natural language and the AI will understand when to trigger a handoff. ## Plan Availability This feature is available on **Pro** plans. ## Setting Up Handoff Scenarios 1. Navigate to **Behavior** > **Human Handoff** in your dashboard 2. Click **Add Scenario** 3. Describe when to handoff in natural language 4. Optionally provide a custom response message 5. Click **Add Scenario** ## Example Scenarios ### Sales Inquiries * "When someone asks about enterprise pricing" * "Custom integration or development requests" * "Partner or reseller inquiries" ### Support Issues * "Technical support requests" * "Billing or account issues" * "Feature requests or custom development" ## How It Works When a visitor sends a message: 1. **Intent Matching**: AI analyzes the message against your configured scenarios 2. **Match Detection**: If a scenario matches, handoff is triggered 3. **Info Collection**: Bot asks for visitor's email and name 4. **Live Support Created**: A live support session is created 5. **Team Notified**: You receive an email notification ## Best Practices ### Be Specific * Good: "When someone asks about enterprise pricing plans" * Poor: "pricing questions" ### Use Natural Language * Good: "Partner or reseller partnership inquiries" * Poor: "partner" ### Review Content Gaps Check the **Knowledge** > **Insights** > **Content Gaps** tab to see what questions visitors ask that the AI struggles with. These may be good candidates for handoff scenarios. # Installation Source: https://docs.bubblav.com/user-guide/installation Add the chatbot widget to your website Install BubblaV on any website in minutes. Choose your platform for step-by-step instructions. Installation Overview Installation Overview ## Using AI Builders (Lovable, v0, Bolt, Cursor) Building with an AI-powered tool? Copy the prompt below and paste it directly into your AI builder to integrate BubblaV automatically. This works with Lovable, v0, Bolt, Cursor, Windsurf, and any other AI coding assistant. ```text expandable theme={null} Add the BubblaV AI chatbot widget to this project. **Option 1: NPM Package (Recommended for React, Vue, Angular)** Install: React: npm install @bubblav/ai-chatbot-react Vue: npm install @bubblav/ai-chatbot-vue Angular: npm install @bubblav/ai-chatbot-angular Import and add to your root component or layout: React — import { BubblaVWidget } from '@bubblav/ai-chatbot-react'; Vue — import { BubblaVWidget } from '@bubblav/ai-chatbot-vue'; Angular (standalone) — import { BubblaVWidgetComponent } from '@bubblav/ai-chatbot-angular'; Add BubblaVWidgetComponent to the component's imports array, then: IMPORTANT — For Vite-based projects (Lovable, Bolt, v0, plain Vite), add this to vite.config.ts to prevent duplicate-React conflicts: resolve: { dedupe: ['react', 'react-dom'] } **Option 2: Script Tag (fallback — works with any framework)** Add this before in your main HTML or layout file: For Next.js (app/layout.tsx or pages/_app.tsx), use next/script instead: import Script from 'next/script'; ``` Your website ID is unique to your account. Never share it publicly, as it identifies your chatbot. *** ## Using NPM Packages For React, Vue, and Angular applications, you can use our official NPM packages for a better developer experience with type safety and framework integration. ### React Package Install the package: ```bash theme={null} npm install @bubblav/ai-chatbot-react # or yarn add @bubblav/ai-chatbot-react # or pnpm add @bubblav/ai-chatbot-react ``` Basic usage: ```jsx theme={null} import { BubblaVWidget } from '@bubblav/ai-chatbot-react'; function App() { return ( ); } ``` With customization: ```jsx theme={null} import { BubblaVWidget } from '@bubblav/ai-chatbot-react'; function App() { return ( ); } ``` The React package is **strict-mode safe** and prevents double initialization. It also provides hooks for programmatic access: ```jsx theme={null} import { useBubblaVWidget } from '@bubblav/ai-chatbot-react'; function SendMessageButton() { const widget = useBubblaVWidget(); const handleClick = () => { widget?.sendMessage('Hello, I need help!'); }; return ; } ``` The React package handles SSR automatically and only loads the widget script in the browser. ### Vue Package Install the package: ```bash theme={null} npm install @bubblav/ai-chatbot-vue # or yarn add @bubblav/ai-chatbot-vue # or pnpm add @bubblav/ai-chatbot-vue ``` Basic usage: ```vue theme={null} ``` With customization: ```vue theme={null} ``` Using composables: ```vue theme={null} ``` The Vue package is SSR-safe and works with Vue 3 Composition API. ### Angular Package Install the package: ```bash theme={null} npm install @bubblav/ai-chatbot-angular # or yarn add @bubblav/ai-chatbot-angular # or pnpm add @bubblav/ai-chatbot-angular ``` Basic usage (standalone component): ```ts theme={null} import { Component } from '@angular/core'; import { BubblaVWidgetComponent } from '@bubblav/ai-chatbot-angular'; @Component({ selector: 'app-root', standalone: true, imports: [BubblaVWidgetComponent], template: ` ` }) export class AppComponent {} ``` With customization: ```html theme={null} ``` Using the service for programmatic access: ```ts theme={null} import { Component, inject } from '@angular/core'; import { BubblaVWidgetService } from '@bubblav/ai-chatbot-angular'; @Component({ selector: 'app-support', template: ` ` }) export class SupportComponent { private bubblav = inject(BubblaVWidgetService); openChat() { this.bubblav.open(); } } ``` The Angular package supports Angular 14+ with standalone components and is SSR-safe. *** ## Platform Instructions Choose your website platform: ### WordPress Installation **Option 1: Using BubblaV WordPress Plugin (Recommended)** Install our official WordPress plugin for the easiest installation: Log in to your WordPress admin and go to **Plugins** → **Add New** Search for "BubblaV Chat" in the WordPress plugin repository Click **Install Now** and then **Activate** Go to **BubblaV Chat** settings and enter your website ID The widget is automatically installed on your WordPress site **Option 2: Manual Installation** Alternatively, use a generic plugin: Go to **Plugins** → **Add New**, search for "Insert Headers and Footers", and install it Click **Activate** after installation Go to **Settings** → **Insert Headers and Footers** Paste your BubblaV embed code in the **Scripts in Footer** section Click **Save** to apply changes ### WooCommerce Installation **Option 1: Using BubblaV WordPress Plugin (Recommended)** Install our official WordPress plugin for seamless WooCommerce integration: Log in to your WordPress admin and go to **Plugins** → **Add New** Search for "BubblaV Chat" in the WordPress plugin repository Click **Install Now** and then **Activate** Go to **BubblaV Chat** settings and enter your website ID The widget is automatically installed on your WooCommerce store The widget will work seamlessly with your WooCommerce store and can be configured to track orders and search products when you connect the WooCommerce integration. **Option 2: Manual Installation** Alternatively, use a generic plugin: Go to **Plugins** → **Add New**, search for "Insert Headers and Footers", and install it Click **Activate** after installation Go to **Settings** → **Insert Headers and Footers** Paste your BubblaV embed code in the **Scripts in Footer** section Click **Save** to apply changes ### BigCommerce Installation **Option 1: Using BubblaV BigCommerce App (Recommended)** Install our official BigCommerce app for automatic installation: Log in to your BigCommerce admin panel and go to **Apps** → **BigCommerce Marketplace** Search for "BubblaV" in the marketplace Click **Install** and follow the setup wizard Connect your BubblaV account during setup The widget is automatically installed on your store **Option 2: Manual Installation (Legacy)** Use BigCommerce's Script Manager to add the widget: Log in to your BigCommerce admin panel Go to **Storefront** → **Script Manager** Click **Create a Script** Set these options: * **Name**: BubblaV Widget * **Location**: Footer * **Pages**: All Pages * **Script category**: Script * **Script content**: Paste your embed code Click **Save** to apply changes ### Zoho Commerce Installation **Option 1: Connect from your BubblaV dashboard (Recommended)** Go to **Dashboard** → **Integrations** → **Zoho Commerce** Click **Connect** and sign in to your Zoho account Accept the requested read-only permissions in Zoho Order and product tools activate automatically **Option 2: Manual Installation** Add the chat widget to your Zoho Commerce storefront: Log in to your Zoho Commerce admin Go to **Online Store** → **Settings** → **Code** Paste your BubblaV widget snippet into the **Footer Code** section Click **Save** to apply changes ### Shopify Installation **Option 1: Using BubblaV Shopify App (Recommended)** 1. Install the BubblaV app from the Shopify App Store 2. Connect your BubblaV account during setup 3. The widget will be automatically installed on your store 4. Configure the widget appearance from your Shopify admin or this dashboard **Option 2: Manual Installation (Legacy)** Go to **Online Store** → **Themes** Click the **...** menu on your active theme, then **Edit code** In the Layout section, click on `theme.liquid` Scroll to find the closing `` tag Paste your embed code just before `` Click **Save** in the top right If you're using a Shopify 2.0 theme, you can also add the code via **Online Store** → **Themes** → **Customize** → **Theme settings** → **Custom code**. ### Haravan Installation Haravan uses Liquid templating similar to Shopify. Add the widget through the theme code editor. Go to your Haravan admin at `your-store.myharavan.com`, then navigate to **Website** → **Giao diện** (Theme) Click on your active theme, then select **Chỉnh sửa code** (Edit code) In the **Layouts** folder on the left sidebar, click on `theme.liquid` Scroll to the bottom of the file to find the closing `` tag (usually around line 142) Paste your BubblaV embed code just before ``: ```html theme={null} ``` Click **Save** to apply changes Haravan's theme structure is very similar to Shopify. The `theme.liquid` file in the Layouts folder is the main template that wraps all pages, making it the ideal location for the widget script. If you prefer, you can also add the script to the `footer-scripts.liquid` snippet (found in the **Snippets** folder) if your theme uses it. However, `theme.liquid` is recommended as it ensures the widget loads on all pages. ### Wix Installation In your Wix dashboard, go to **Settings** Click **Custom Code** (under Advanced) Click **+ Add Custom Code** Paste your BubblaV embed code Set these options: * **Name**: BubblaV Chat * **Add to**: All pages * **Place code in**: Body - end Click **Apply** Custom code requires Wix Premium. Free Wix sites cannot add custom scripts. ### Squarespace Installation Go to **Settings** → **Advanced** → **Code Injection** Scroll to the **Footer** section Paste your BubblaV embed code Click **Save** Code Injection requires a Squarespace Business plan or higher. ### Webflow Installation **Option 1: Using the BubblaV Webflow App (Recommended)** In Webflow, go to Apps and search for "BubblaV", or open the app page directly Click Install to add the app to your project Click Login & Select Website to sign in and choose your website Publish your site and the chatbot appears automatically The app handles OAuth login, website selection, and widget injection automatically — no code required. No need to copy-paste embed codes! **Option 2: Manual Installation (Site-wide)** Click the gear icon in the left panel Go to the **Custom Code** tab Paste your embed code in the **Footer Code** section Save changes and publish your site **Option 3: Specific Pages Only (Manual)** 1. Open the page in the Designer 2. Go to **Page Settings** (gear icon) 3. Scroll to **Custom Code** → **Before `` tag** 4. Paste your embed code 5. Save and publish ### Framer Installation **Option 1: Using BubblaV Framer Plugin (Recommended)** In Framer, go to PluginsStore and search for "BubblaV" Click Install to add the plugin to your project Click Login & Select Website to sign in and choose your website Adjust widget appearance in the plugin panel (optional) Publish your site and the chatbot appears automatically The plugin automatically creates the component in your code and adds it to your canvas with pre-configured settings. No need to copy-paste codes! **Option 2: Manual Installation** Open your Framer project and go to Site Settings Click on the General tab Scroll down to the End of \ tag section Paste your BubblaV embed code Click Save and then Publish your site ### Google Tag Manager Installation Google Tag Manager (GTM) is one of the most popular ways to add the BubblaV widget without editing your website code. It works on virtually any website and is our recommended method when your platform doesn't have a dedicated app. Log in to [Google Tag Manager](https://tagmanager.google.com) and select your container (or create a new one) Go to **Tags** in the left sidebar, then click **New** Click on **Tag Configuration**, then choose **Custom HTML** as the tag type Paste your BubblaV embed code in the HTML field: ```html theme={null} ``` Click on **Triggering** and select **All Pages** so the widget loads on every page Name the tag **"BubblaV Chat Widget"** and click **Save** Click **Submit** in the top-right corner, then click **Publish** to make the tag live on your site After publishing, it may take a few minutes for changes to propagate. Open your site in an incognito window to verify the widget appears. Make sure the GTM container snippet is installed on your website. If you haven't set up GTM yet, follow Google's [installation guide](https://developers.google.com/tag-platform/tag-manager/web) first. For the full step-by-step guide with troubleshooting, see [Google Tag Manager](/user-guide/integrations/google-tag-manager). ### Joomla Installation **Option 1: Using a Plugin (Recommended)** Install a "Custom HTML" or "Insert HTML" extension from the Joomla Extensions Directory Go to **Extensions** → **Plugins** and configure the plugin Paste your BubblaV embed code in the footer section Save and apply changes **Option 2: Editing Template Files** 1. Go to **Extensions** → **Templates** → **Templates** 2. Select your active template 3. Open `index.php` or `footer.php` 4. Paste the embed code before `` 5. Save & Close ### Drupal Installation **Option 1: Using a Module (Recommended)** Install the "Add to Head" or similar module Go to **Configuration** → **Add to Head** Add your BubblaV embed code to the footer section Save configuration **Option 2: Editing Theme** 1. Go to **Appearance** → **Themes** 2. Edit your active theme 3. Open `html.html.twig` or your template file 4. Paste the embed code before `` *** ## Developer Platforms For custom or developer-built websites: ### Static HTML Add the script tag before the closing `` tag: ```html theme={null} My Website ``` ### React / Create React App Add to your `public/index.html`: ```html theme={null} ``` Or use a component approach: ```jsx theme={null} // components/BubblaVWidget.jsx import { useEffect } from 'react'; export default function BubblaVWidget() { useEffect(() => { const script = document.createElement('script'); script.src = 'https://www.bubblav.com/widget.js'; script.async = true; script.dataset.websiteId = 'YOUR_WEBSITE_ID'; document.body.appendChild(script); return () => { document.body.removeChild(script); }; }, []); return null; } ``` Then add to your App: ```jsx theme={null} import BubblaVWidget from './components/BubblaVWidget'; function App() { return ( <> {/* Your app content */} ); } ``` ### Next.js **Option 1: Using next/script (Recommended)** ```jsx theme={null} // app/layout.tsx or pages/_app.tsx import Script from 'next/script'; export default function RootLayout({ children }) { return ( {children} ``` Or create a component: ```vue theme={null} ``` ### Angular **Option 1: Edit src/index.html (Recommended)** ```html theme={null} ``` **Option 2: Using Component** ```typescript theme={null} // src/app/bubblav-widget/bubblav-widget.component.ts import { Component, OnInit, OnDestroy } from '@angular/core'; @Component({ selector: 'app-bubblav-widget', template: '' }) export class BubblaVWidgetComponent implements OnInit, OnDestroy { private scriptElement: HTMLScriptElement | null = null; ngOnInit() { this.scriptElement = document.createElement('script'); this.scriptElement.src = 'https://www.bubblav.com/widget.js'; this.scriptElement.async = true; this.scriptElement.setAttribute('data-site-id', 'YOUR_WEBSITE_ID'); document.body.appendChild(this.scriptElement); } ngOnDestroy() { if (this.scriptElement) { document.body.removeChild(this.scriptElement); } } } ``` ### Svelte **Option 1: Edit src/app.html (SvelteKit)** ```html theme={null} ``` **Option 2: Create a Component** ```svelte theme={null} ``` ### Astro **Option 1: Using Inline Script (Recommended)** Add the script directly to your main layout file (e.g., `src/layouts/Layout.astro`): ```astro theme={null} --- // Layout.astro --- Your Site ``` **Option 2: Using Client-Side Script** For more control over when the script loads: ```astro theme={null} --- // In your layout or page --- ``` Use `is:inline` to ensure the script runs on the client side without Astro's bundling. *** ## Advanced Options ### Script Attributes Customize widget behavior with data attributes: | Attribute | Values | Description | | -------------- | ------- | --------------------------------- | | `data-site-id` | Your ID | Required. Identifies your chatbot | ### Excluding Pages To hide the widget on specific pages, use the **Exclude URLs** setting in your Widget Design settings: 1. Go to **Design** in the sidebar 2. Expand the **Advanced Settings** section 3. Enter the URLs where you want to hide the widget (one per line) 4. You can use specific paths like `https://example.com/checkout` or `https://example.com/admin` The widget will automatically be hidden on those pages without requiring any code changes. *** ## Verify Installation After adding the code, verify it's working: Clear your browser cache or open an incognito window Go to your website in a new tab The chat bubble should appear in the corner (usually bottom-right) Click the bubble and send a test message like "Hello" You should receive a response from your AI assistant If the widget doesn't appear immediately, wait 1-2 minutes for caching to clear, then try again. *** ## Troubleshooting **Check these common issues:** * Code is placed before ``, not in `` * Website ID is correct (copy from dashboard) * Your domain matches the one in your BubblaV settings * JavaScript is enabled in your browser * No browser extensions blocking scripts **Debug steps:** 1. Open browser DevTools (F12) 2. Check Console for errors 3. Check Network tab for widget.js loading * Check your message limits (may be exceeded) * Verify crawl completed successfully * Ensure knowledge base has content * Check browser console for API errors * Adjust z-index in Widget Design settings * Check for CSS conflicts with `.bubblav-widget` class * Try different position (left vs right) * The `async` attribute ensures non-blocking load * Widget loads after main content (intentional) * Check if your site has slow third-party scripts * Verify mobile isn't disabled in settings * Check responsive CSS isn't hiding it * Test on actual mobile device, not just DevTools * Ensure your domain matches BubblaV settings * Check for Content Security Policy restrictions * Verify HTTPS is used on your site *** ## Content Security Policy (CSP) If your site uses CSP headers, add these directives: ``` script-src 'self' https://www.bubblav.com; frame-src 'self' https://www.bubblav.com; ``` *** ## Multiple Websites If you have multiple websites: 1. Each website needs its own embed code 2. Use the unique `data-site-id` for each site 3. Install the appropriate code on each website Using the wrong website ID will cause the widget to load with incorrect knowledge and settings. *** ## Next Steps Customize colors and appearance Verify everything works correctly # Acuity Scheduling Source: https://docs.bubblav.com/user-guide/integrations/acuity Connect Acuity Scheduling to book, reschedule, and cancel appointments through your chatbot Connect your Acuity Scheduling account so visitors can book, reschedule, and cancel appointments through your chatbot — with an inline calendar right inside the conversation. Every booking is captured as a lead in BubblaV. BubblaV connects to Acuity with secure OAuth — no API keys for you to manage. ## Why Connect Acuity Scheduling? * **Book in chat**: Visitors pick a time from an inline Acuity calendar without leaving the conversation * **Capture leads**: Every booking is saved as a lead with attendee details * **Real-time availability**: Show open slots straight from your Acuity calendar * **Cancel & reschedule**: Visitors manage their own upcoming appointments from the chat * **24/7 scheduling**: Take bookings outside business hours ## Prerequisites * An active Acuity Scheduling account * At least one appointment type set up in Acuity * Your BubblaV admin has registered an Acuity OAuth client (one-time, see below) ## Connect to Acuity Scheduling Go to **Dashboard** → select your website → **Integrations** → find **Acuity Scheduling** Click the **Connect** button next to Acuity Scheduling You'll be redirected to Acuity. Log in (if needed) and click **Authorize** to grant BubblaV access using secure OAuth 2.0. You'll be redirected back automatically and the integration will show as **Connected** with your Acuity account details. ## Available Tools Once connected, the chatbot can use these Acuity tools: | Tool | What it does | | ------------------------------- | ---------------------------------------------------------------------------------- | | `acuity_book_appointment` | Show your Acuity appointment types with an inline calendar so the visitor can book | | `acuity_find_appointments` | Look up a visitor's upcoming Acuity appointments | | `acuity_cancel_appointment` | Show appointments with Cancel buttons so the visitor can cancel | | `acuity_reschedule_appointment` | Show appointments with Reschedule buttons so the visitor can pick a new time | Try queries like: * "I'd like to book a consultation" * "Show my upcoming appointments" * "I need to cancel my meeting" * "Can I reschedule my appointment?" ## How the Inline Calendar Works When a visitor asks to book, the bot calls `acuity_book_appointment`, which lists your public Acuity appointment types. The visitor picks one and an **inline Acuity calendar** renders inside the chat so they can choose a date and time and confirm — all without leaving your website. Their name and email are pre-filled when available. Acuity does not send a "booking complete" signal back to the widget. After booking inside the calendar, the visitor taps **I've scheduled my appointment** to confirm, and the bot records the lead. The Acuity confirmation page is also visible inside the calendar. ## Reconnecting If your connection is ever revoked or you need to switch accounts, click **Reconnect** on the Acuity Scheduling integration card. You'll go through the OAuth flow again to get fresh credentials. ## Troubleshooting * Make sure you clicked **Authorize** (not Deny) on Acuity's authorization page. * Try disconnecting and reconnecting via the integration card. * Ensure you're logged into the correct Acuity account. * Create at least one appointment type in Acuity and make sure it isn't private. * Acuity tokens are long-lived until revoked. If calls fail with an authorization error, click **Reconnect** on the integration card. # Attio Source: https://docs.bubblav.com/user-guide/integrations/attio Sync chat contacts and transcripts to your next-gen CRM Seamlessly integrate BubblaV with Attio to keep your CRM data in perfect sync with your customer conversations. > **Scope note**: Attio provides **CRM contact context** — contact sync, transcript notes, and visitor insights. It does not sync support tickets into the Live Support inbox (Attio has no ticketing API). For ticket sync, use the [HubSpot](/user-guide/integrations/hubspot) or [Zendesk](/user-guide/integrations/zendesk) integration. > **Note**: The Attio integration requires a **Pro+ plan** or higher. Attio Integration ## Features * **Automatic Contact Sync**: Automatically creates or updates "Person" records in Attio when a visitor provides their email. * **Lead Capture**: Leads from newsletter signups and contact forms are instantly synced to Attio with UTM parameters and source tracking. * **Transcript Logging**: Chat transcripts are automatically saved as "Notes" on the Person record when conversations are resolved. * **Copilot CRM Tools**: AI Copilot can search contacts, fetch profiles, and sync data to Attio in real-time during conversations. * **Agent Workspace Actions**: Human agents can manually search contacts, fetch profiles, and sync visitor information from the dashboard. * **Visitor Insights**: View Attio profile links and details directly within the BubblaV dashboard when chatting with a visitor. * **Two-Way Sync**: Contact detail changes made in Attio (name, job title, company, phone, description) sync back into the BubblaV visitor profile automatically. * **Configurable Sync**: Toggle contact syncing and transcript logging independently based on your workflow needs. * **Custom Attribute Mapping**: Map visitor and form fields to your own Attio attributes — standard or custom — so lead capture writes exactly the data you care about. ## Setup Guide There are two ways to connect BubblaV to your Attio workspace: ### Option 1: From BubblaV Dashboard Navigate to the **Integrations** tab in your BubblaV dashboard. Find the **Attio** card and click the **Connect** button. You will be redirected to the BubblaV app in the Attio Marketplace. In the Attio Marketplace, click **Install** or **Connect**. Follow the prompts to authorize the connection. ### Option 2: From Attio Marketplace Search for **BubblaV** in the [Attio Marketplace](https://attio.com/apps/bubbla-v). Click **Install**. You will be redirected to BubblaV to log in (if you aren't already) and select which website you want to connect. Once back in Attio, click **Allow** to grant BubblaV permission to read and write records. ## Configuration Once connected, you can configure the integration from the dashboard: * **Sync contacts**: Automatically capture and update people in Attio from chat sessions. * If the email exists in Attio, we update the Person. * If it's new, we create a Person. * **Log chat transcripts**: Attach full conversation history as Notes to contact records when conversations are resolved. * **Custom attribute mapping**: Map visitor and form fields to your own Attio attributes. ### Custom attribute mapping In **Integrations → Attio → Custom attribute mapping**, map any visitor or form field (for example `utm_source`, `company`, or one of your own form field names) to any writable Attio attribute — standard or custom. The mapped value is written to the Person record whenever a lead is captured. * Pick the Attio attribute from the dropdown, loaded straight from your workspace. If the list can't be loaded, type the attribute slug directly. * Select/status values must already exist as options in Attio — unmatched options are skipped. * Mappings override the built-in defaults (UTM parameters, lead source, company, job title, phone, website) when both target the same attribute. ## Copilot Tools When Attio is connected, AI Copilot gains access to powerful CRM tools that agents can invoke during conversations: ### `attio_search_contact` Search for contacts in Attio by name or email address. Returns a list of matching contacts with their names, emails, and profile URLs. ### `attio_fetch_contact` Fetch detailed information about a specific contact from Attio. Provide either an email address or a record ID to retrieve the full profile including: * Name and email * Job title * Company name and domain * Phone number * Custom attributes * Direct link to Attio profile ### `attio_sync_contact` Manually sync a visitor's contact information to Attio. Creates a new Person or updates an existing one with the provided email and name. These tools are available to human agents through the Copilot interface, allowing real-time CRM data access without leaving the conversation. ## Agent Workspace Tools Human agents also have direct access to Attio tools from the dashboard sidebar. These tools work independently of the AI and can be used to: * Search for existing contacts by email * Fetch detailed contact profiles * Manually sync visitor information to Attio ## How it Works ### Lead Capture When a visitor fills out a newsletter signup form or contact form on your website, BubblaV automatically captures the lead and syncs it to Attio: * **Person Record**: Creates or updates a Person record with email and name * **UTM Parameters**: Captures source tracking data (utm\_source, utm\_medium, utm\_campaign, utm\_term, utm\_content) * **Additional Info**: Includes company, job title, phone, and website if provided This happens automatically in the background as soon as the form is submitted. ### Contact Syncing When a user starts a chat and provides an email (either via the pre-chat form or during conversation), BubblaV searches your Attio workspace for a Person with that email. * **Match Found**: We link the chat session to that Person. * **No Match**: We create a new Person record with the `email_addresses` and `name` attributes. This can happen automatically (if "Sync contacts" is enabled) or manually via Copilot tools. ### Chat Transcripts When a conversation is resolved, the full transcript is posted as a **Note** to the Person record in Attio (if "Log chat transcripts" is enabled). The transcript includes: * Timestamp for each message * Sender identification (Visitor, Bot, or Agent name) * Full message content This allows your team to see the full context of the interaction directly in the CRM. Chat Transcripts ### Visitor Insights When a support agent views a visitor in the BubblaV dashboard, we look up that email in Attio. If a match is found, we display: * A link to their Attio profile * Key contact details like name and company * Option to sync the contact if not already in Attio Visitor Insights ### Real-Time CRM Access Agents can use Copilot tools or workspace actions to: * Search for contacts without leaving the chat * Fetch complete profile information on demand * Sync new or updated contact information instantly # BigCommerce Source: https://docs.bubblav.com/user-guide/integrations/bigcommerce Connect your BigCommerce store for order tracking and product search Transform your chatbot into a powerful e-commerce assistant for your BigCommerce store. Customers can track orders, search products, and get instant answers about your store. ## Why Connect BigCommerce? Customers check order status using order numbers Interactive product discovery with filters and pricing Support agents see order history and customer value in real-time Reduce support workload with accurate, instant info ## Visitor Insights for Support Agents The BigCommerce integration enriches the **Visitor Insight** panel in your BubblaV dashboard, providing support agents with critical customer context during live chats: * **Order History**: A detailed list of current and past orders with fulfillment and payment status * **Order Tracking**: Real-time tracking information including carrier, tracking numbers, and delivery status * **Product Details**: View exactly which products were ordered, including images and itemized prices * **Admin Access**: Direct links to view orders in your BigCommerce admin for quick management * **Refunds & Returns**: View refunded amounts and the status of any active return requests ## Prerequisites * Active BigCommerce store * Store URL (e.g., `https://yourstore.com` or `yourstore.mybigcommerce.com`) * BigCommerce API credentials (Access Token and Store Hash) * Administrator access to your BigCommerce dashboard ## Setup Steps Go to **Dashboard** → **Integrations** and find the BigCommerce card Click **Connect BigCommerce** to open the connection form Your Store Hash is part of your BigCommerce store URL:
  • If your store URL is [https://store-abc123.mybigcommerce.com](https://store-abc123.mybigcommerce.com), your store hash is store-abc123
  • You can also find it in your BigCommerce admin under Advanced SettingsAPI Accounts
Create API credentials in your BigCommerce admin:
  1. Go to Advanced SettingsAPI Accounts
  2. Click Create API Account
  3. Enter a name (e.g., "BubblaV Integration")
  4. Set the OAuth Scopes to include:
    • Products: Read Only
    • Orders: Read Only
    • Customers: Read Only
  5. Click Save
  6. Copy the Access Token (shown only once)
Enter your Store URL, Store Hash, and Access Token in the connection form Click Connect. The BigCommerce card should now show **Connected**
## Available Tools After Connection | Tool | What It Does | Example Query | | ----------------------------- | ------------------------- | ----------------------------------------------------------- | | `bigcommerce_track_order` | Track orders by number/ID | "Track order #1001" | | `bigcommerce_search_products` | Search product catalog | "Show running shoes under \$50" | | `bigcommerce_get_product` | Get product details | "Tell me about this product" | | `bigcommerce_customer_orders` | Customer order history | "My orders for [john@example.com](mailto:john@example.com)" | ## Test Your Integration Try these queries on your website: * "Track order #1001" (use a real order number) * "Show me your products" * "What running shoes do you have?" * "Check my order status" ## Troubleshooting
  • Verify that the Access Token is correct and not expired
  • Ensure the API account has the correct OAuth scopes
  • Check that you copied the entire Access Token
  • Verify your Store URL and Store Hash are correct
  • Check that your store is accessible
  • Ensure your API account is active
  • Your Store Hash is the subdomain part of your BigCommerce URL
  • For [https://store-abc123.mybigcommerce.com](https://store-abc123.mybigcommerce.com), the hash is store-abc123
  • If using a custom domain, find the hash in Advanced Settings → API Accounts
  • Wait a few minutes for activation
  • Verify your store has orders and products
  • Check that the API account still has valid permissions
**Security**: We use OAuth 2.0 authentication with HTTPS. Your credentials are encrypted and stored securely. We only request read permissions to access your store data. **Important**: Save your Access Token securely when you create it. BigCommerce only shows it once and you'll need to regenerate it if lost. # Cal.com Source: https://docs.bubblav.com/user-guide/integrations/calcom Connect Cal.com to book meetings through your chatbot and capture bookings as leads Connect your Cal.com account so visitors can book meetings through your chatbot, and every booking can be captured as a lead in BubblaV. BubblaV connects to Cal.com with secure OAuth — no API keys for you to manage. Connection, in-chat booking, finding upcoming bookings, and automatic booking-to-lead capture are live today. Visitors can also reschedule or cancel from the chat — the bot lists their upcoming Cal.com meetings with **Reschedule** and **Cancel** buttons that open Cal.com's manage page. ## Why Connect Cal.com? * **Book in chat**: Visitors book meetings without leaving the conversation * **Capture leads**: Every booking is saved as a lead with attendee details * **Real-time availability**: Show open slots straight from your Cal.com calendar * **24/7 scheduling**: Take bookings outside business hours * **Cal.com or Cal.eu**: Works with both the global (Cal.com) and European (Cal.eu) instances — choose your region when connecting ## Prerequisites * An active Cal.com account on **Cal.com** (`app.cal.com`) or **Cal.eu** (`app.cal.eu`) * At least one event type set up in Cal.com ## Connect to Cal.com Go to **Dashboard** → select your website → **Integrations** → find **Cal.com** Click the **Connect** button next to Cal.com Select the instance your Cal.com account is on: **Global (Cal.com)** for `app.cal.com` accounts, or **Europe (Cal.eu)** for `app.cal.eu` accounts. Each connection remembers the region you pick. You'll be redirected to Cal.com. Log in (if needed) and click **Allow** to grant BubblaV access. BubblaV uses PKCE OAuth, so there's no client secret to handle. You'll be redirected back automatically and the integration will show as **Connected** with your Cal.com account details. ## What This Enables Once connected, BubblaV is authorized to access your Cal.com account with these scopes: | Scope | What it allows | | ----------------- | ------------------------------------------------------------- | | `BOOKING_READ` | View your bookings (capture as leads, show "my appointments") | | `BOOKING_WRITE` | Create, cancel, and reschedule bookings | | `EVENT_TYPE_READ` | List your event types (show available meetings to book) | | `PROFILE_READ` | Verify the connected account | Ask the bot things like "I'd like to schedule a consultation" (it shows your bookable meeting types), "show my upcoming meetings" (it lists your bookings), or "I need to reschedule" / "cancel my appointment" (it shows Reschedule/Cancel buttons that open Cal.com's manage page so the visitor can pick a new time or cancel). ## Reconnecting If your connection expires or you need to switch accounts, click **Reconnect** on the Cal.com integration card. You'll go through the OAuth flow again to get fresh credentials. Reconnect reuses the region you originally chose — to switch regions, disconnect and connect again, picking the other region. ## Troubleshooting * Pick the region that matches your Cal.com account when connecting: **Global** for `app.cal.com` accounts, **Europe** for `app.cal.eu` accounts. * If bookings aren't working after connecting, disconnect and connect again, selecting the correct region. * Make sure you clicked **Allow** (not Deny) on Cal.com's authorization page. * Try disconnecting and reconnecting via the integration card. * Ensure you're logged into the correct Cal.com account. * This usually means a temporary mismatch in the connection URL. Try connecting again; if it persists, contact support. * While BubblaV's Cal.com OAuth client is pending Cal.com admin review, only the client owner can authorize. Other users can connect once it's approved. * Access tokens refresh automatically in the background. * If you see a connection error, click **Reconnect** on the integration card. # Calendly Source: https://docs.bubblav.com/user-guide/integrations/calendly Enable 24/7 appointment scheduling Enable 24/7 appointment scheduling. Your chatbot helps visitors book meetings, check availability, and manage appointments — all without leaving the chat. ## Why Connect Calendly? * **Instant Booking**: Visitors get booking links without leaving chat * **Real-time Availability**: Show open time slots immediately * **24/7 Scheduling**: Book appointments outside business hours * **Reduced Friction**: Streamlined booking improves conversion ## Prerequisites * An active Calendly account (Free or paid) * At least one event type set up in Calendly ## Connect to Calendly Go to **Dashboard** → select your website → **Integrations** → find **Calendly** Click the **Connect** button next to Calendly You'll be redirected to Calendly's authorization page. Log in if needed, then click **Allow** to grant BubblaV access You'll be redirected back automatically. You'll see your Calendly account name and the number of event types found Calendly Integration ## Available Tools After Connection | Tool | What It Does | Example Query | | ------------------------------- | ------------------------------------------------------------- | ------------------------------------- | | `calendly_book_appointment` | Shows booking links for all event types | "I want to schedule a consultation" | | `calendly_find_events_by_email` | Lists upcoming appointments for an email | "Show my scheduled meetings" | | `calendly_cancel_event` | Cancels an appointment (visitor clicks Cancel button) | "I need to cancel my meeting" | | `calendly_reschedule_event` | Reschedules an appointment (visitor clicks Reschedule button) | "Can I move my meeting to next week?" | ## Test Your Integration Try these queries: * "I'd like to schedule a meeting" * "When are you available this week?" * "Can I book a consultation?" * "I need to cancel my appointment" ## Reconnecting If your Calendly connection expires or you need to switch accounts, click **Reconnect** on the Calendly integration card. You'll go through the OAuth flow again to get fresh credentials. ## Troubleshooting * Make sure you clicked **Allow** (not Deny) on Calendly's authorization page * Try disconnecting and reconnecting via the integration card * Ensure you're logged into the correct Calendly account * Create at least one event type in Calendly * Ensure event types are set to **On** (active) in your Calendly settings * Verify event types are published in Calendly * Check your calendar is connected to Calendly * OAuth tokens refresh automatically in the background * If you see a connection error, click **Reconnect** on the integration card # ChatGPT Source: https://docs.bubblav.com/user-guide/integrations/chatgpt Connect BubblaV to ChatGPT via MCP to search your knowledge base, view analytics, and manage your chatbot Connect BubblaV to ChatGPT through the BubblaV MCP Server. Ask ChatGPT to search your knowledge base, pull analytics, find content gaps, and tune your chatbot — no API key required. Install the BubblaV app from the [ChatGPT apps page](https://chatgpt.com/apps/bubblav-ai-chatbot/asdk_app_69c3e9a175b481919947b413dee0979f), or add `https://www.bubblav.com/mcp` as an MCP connector in ChatGPT. OAuth runs automatically — sign in to BubblaV and pick a website. ChatGPT is granted the `mcp:read` and `mcp:tools:execute` scopes. ## Why Connect ChatGPT? * **Ask your knowledge base in chat**: Search and manage content without opening the dashboard * **Analytics on demand**: Full reports for any date range, summarized in plain language * **Close content gaps**: See what your bot couldn't answer and add the missing answers * **Tune the persona**: Change the chatbot's voice, greetings, and widget appearance from ChatGPT * **Inspect conversations & leads**: Filter and full-text search across chats * **No API key**: OAuth handles everything ## Prerequisites * A BubblaV account with at least one website set up and some content indexed * A ChatGPT plan that supports MCP apps/connectors ## Install the BubblaV ChatGPT App Click **Add to ChatGPT** on the [ChatGPT apps page](https://chatgpt.com/apps/bubblav-ai-chatbot/asdk_app_69c3e9a175b481919947b413dee0979f); *or* in ChatGPT go to **Settings → Connectors → Add connector** and enter `https://www.bubblav.com/mcp`. ChatGPT starts OAuth automatically. Sign in to BubblaV, select the website to connect, and approve the requested scopes. No API key is needed. The BubblaV connector shows as connected in ChatGPT. An API key labeled **ChatGPT** is created in your BubblaV account to power the connection. Ask ChatGPT something like *"Search my knowledge base for our return policy"* or *"Give me this month's chatbot report."* ChatGPT is one of several MCP clients. For API-key setup, other clients (Claude Desktop, Google Antigravity), and the full tool reference, see the [MCP Server developer guide](/developer-guide/mcp-server). To add other MCP servers inside BubblaV, see [MCP Servers](/user-guide/integrations/mcp-servers). ## What You Can Ask ChatGPT receives BubblaV's tools automatically and picks the right one for your request. A representative subset: | Tool | What it does | Example prompt | | ---------------------------------- | ----------------------------------------------- | --------------------------------------------------------- | | `bubblav_search_knowledge` | Search your knowledge base | "What does our returns policy say?" | | `bubblav_add_knowledge` | Add a knowledge entry | "Add a FAQ about holiday shipping deadlines" | | `bubblav_list_knowledge_sources` | List everything your bot is trained on | "What sources is my bot trained on?" | | `bubblav_upload_knowledge_file` | Upload a PDF/DOCX/TXT/MD file (≤10 MB) to index | "Index this product spec PDF" | | `bubblav_sync_ticket_to_knowledge` | Turn a resolved ticket into an article (Pro+) | "Save last week's refund ticket as a knowledge article" | | `bubblav_add_crawl_url` | Add a URL to crawl and index | "Index our new pricing page" | | `bubblav_get_crawl_status` | Check indexing progress | "How many pages are indexed so far?" | | `bubblav_list_conversations` | List/filter conversations by channel or status | "Show me Instagram conversations this week" | | `bubblav_search_conversations` | Full-text search across chats | "Find chats mentioning 'billing error'" | | `bubblav_list_leads` | List visitors who shared their email | "Show me leads from the last 7 days" | | `bubblav_get_content_gaps` | Questions your bot couldn't answer well | "What should I add to my knowledge base?" | | `bubblav_get_most_asked_questions` | Trending visitor questions | "What are people asking most this month?" | | `bubblav_read_report` | Full analytics report for a date range | "Give me June's chatbot performance report" | | `bubblav_get_hourly_activity` | Hourly activity breakdown | "When are my busiest support hours?" | | `bubblav_update_website_settings` | Update the chatbot persona / settings | "Make the bot more friendly and concise" | | `bubblav_update_widget_appearance` | Update bot name, greetings, colors, position | "Rename the bot to 'Sunny' and use a teal bubble" | | `bubblav_create_custom_tool` | Create a webhook custom tool (Pro+) | "Add a tool that checks order status from our API" | | `bubblav_create_handoff_scenario` | Route a topic to a live agent (Pro+) | "Hand off to a human when someone mentions large refunds" | This is a representative subset. ChatGPT always receives the full, current tool list via the MCP `tools/list` method. ## Rate Limits MCP calls are metered separately from your chatbot messages, on a rolling 30-day window: | Plan | MCP calls / month | | ------ | ----------------- | | Free | 100 | | Pro | 5,000 | | Custom | Unlimited | When you exceed the limit, requests return a `429` with a `Retry-After` header. Check your usage under **Integrations → MCP Settings** in the dashboard. ## Reconnecting To disconnect or switch the website ChatGPT is linked to, revoke the **ChatGPT** API key from your BubblaV dashboard, then add the connector again in ChatGPT and pick the website you want during OAuth. ## Troubleshooting * Make sure your ChatGPT plan supports MCP apps/connectors. * Try removing the connector and re-adding `https://www.bubblav.com/mcp`. * Revoke the ChatGPT API key in BubblaV and reconnect, picking the correct website during OAuth. * Check usage under **Integrations → MCP Settings**, wait for the 30-day window to reset, or upgrade your plan. * The ChatGPT app intentionally does not expose arbitrary URL scraping. To add new content, use `bubblav_add_crawl_url`, `bubblav_upload_knowledge_file`, or `bubblav_add_knowledge` instead. ## Next Steps Full tool reference and other MCP clients Webhook tools you can create from ChatGPT Recipes to diagnose gaps and tune your bot # Custom Tools Source: https://docs.bubblav.com/user-guide/integrations/custom-tools Connect your chatbot to any API or backend system Custom tools extend your chatbot's capabilities by connecting it to your own APIs. Unlike built-in integrations, custom tools give you complete flexibility to integrate with any system—your CRM, inventory, pricing engine, or any external service. ## What Are Custom Tools? A custom tool is a function that your chatbot can call to perform actions or retrieve data. You define: 1. **What** it does (description for the AI) 2. **What parameters** it needs (argument schema) 3. **Where** to send requests (your API endpoint) 4. **How** to authenticate (API key, Bearer token, or HMAC) When a customer asks something relevant, the AI automatically calls your tool and uses the response. ## Common Use Cases Check order status from your backend Real-time product availability Retrieve customer info from CRM Custom pricing based on quantity/customer type *** ## Step-by-Step Guide: Building a Weather Tool In this guide, we'll build a **Weather Checker** tool that allows your chatbot to answer questions about the weather in any city. We'll use the free [OpenWeatherMap API](https://openweathermap.org/api). ### Prerequisites 1. Sign up at [OpenWeatherMap](https://openweathermap.org/api) to get a free API key. Go to **Dashboard** → **Integrations** → **Custom Tools** → **Create Tool** Custom Tools Overview Custom Tools Overview Fill in the following fields: **Tool Name**: `get_weather` * Must be unique, lowercase, and use underscores. **Display Name**: `Weather Checker` * A human-readable name for your internal dashboard. **Description for AI**: "Get current weather information for a location. Use when customer asks about weather, temperature, or conditions in a specific city or location." * *Tip:* Be specific about *when* the AI should use this tool. Step 1: Configure Tool Details Step 1: Configure Tool Details The argument schema tells the AI what variables it needs to extract from the user's message (like the city name). Paste this JSON schema: ```json theme={null} { "q": { "type": "string", "description": "City name or location to search (e.g., 'New York', 'London', 'Tokyo')", "required": true }, "appid": { "type": "string", "description": "OpenWeatherMap API key", "required": false, "default": "YOUR_OPENWEATHER_API_KEY" } } ``` *Replace `YOUR_OPENWEATHER_API_KEY` with the key you got from step 1.* Step 2: Define Arguments Step 2: Define Arguments Now map the schema arguments to the API endpoint's parameters. 1. **City Parameter:** * Name: `q` * Method: `Query` (URL parameter) * Source: `q` (from schema) 2. **API Key:** * Name: `appid` * Method: `Query` * Source: `appid` (from schema) 3. **Units (Static Value):** * You can literally type `metric` as a default value if your schema allows it, or just handle it in the URL if the API supports it. For this example, we'll stick to the two dynamic parameters above. Step 2: Add Parameters Step 2: Add Parameters Enter the OpenWeatherMap API URL: `https://api.openweathermap.org/data/2.5/weather` * **HTTP Method**: GET Step 3: Configure Endpoint Step 3: Configure Endpoint Since we are passing the API key as a query parameter (`appid`), choose **None** for the Authentication Method in this specific case. *For your own secure APIs, checking [Authentication Methods](#authentication-methods) below is recommended.* 1. Click **Create Tool**. 2. Click the **Test** button on your new tool. 3. Enter `London` for the `q` parameter. 4. Click **Run Test**. You should see a successful response with temperature and weather data! *** ## Product Cards Display When your tool returns product or item data—such as a product search, catalog lookup, or inventory check—you can enable **Product Cards** to display results as a rich visual UI instead of plain text. ### How It Works When enabled, BubblaV automatically extracts product information from your API response (whether it returns JSON, HTML, or any other format) and renders each item as an interactive card with image, name, price, and a link to the product page. No manual field mapping is required. Customers can: * Browse results as cards directly in the chat * Tap a card to see a full product detail view with image gallery * Click **View Product** to open the product page ### Enabling Product Cards 1. Open your custom tool (create new or edit existing). 2. Navigate to the **Test & Configure** step. 3. Toggle **Show as Product Cards** on. 4. Click **Create Tool** or **Update Tool**. The toggle is in the **Response Display** section at the bottom of the Test & Configure step. ### What Gets Extracted The AI reads your API response and extracts the following fields wherever it finds them: | Field | Description | | ------------- | ------------------------------------------------------------ | | `name` | Product title | | `image` | Product image URL (relative URLs are resolved automatically) | | `price` | Price as a string (e.g. `"89,000₫"` or `"$24.99"`) | | `url` | Link to the product page | | `description` | Short description or excerpt | Relative image and product URLs (e.g. `/products/my-product`) are automatically resolved to full URLs using your tool's endpoint domain—no extra configuration needed. ### AI Response Behaviour When product cards are enabled, the chatbot briefly acknowledges the search results in one sentence rather than repeating the products as a text list. The visual cards serve as the primary response. *** When you secure your custom tool, you share a secret key between BubblaV and your API. 1. **In Dashboard**: You enter or auto-generate a **Secret Key** (e.g., `my-secret-token-123`). 2. **In Your Backend**: You adhere to the environment variable `BUBBLAV_SECRET_KEY` with that *exact same value*. 3. **The Check**: When BubblaV calls your API, your backend checks if the incoming request was signed/authorized with that same key. ### None (No Authentication) Simplest setup—no auth headers sent. Only use for internal testing or truly public APIs. Anyone with your URL can call your endpoint. ### Bearer Token BubblaV sends your secret in the `Authorization` header: ```http theme={null} POST /api/your-endpoint Authorization: Bearer your-secret-key-here Content-Type: application/json ``` In the examples below, `process.env.BUBBLAV_SECRET_KEY` represents the secret key you configured in the BubblaV Dashboard for this tool. You must add this key to your backend's environment variables. **Validate in your API:** ```javascript theme={null} app.post('/api/order-status', (req, res) => { const authHeader = req.headers.authorization; if (!authHeader?.startsWith('Bearer ')) { return res.status(401).json({ success: false, error: 'Missing authorization' }); } const token = authHeader.split(' ')[1]; if (token !== process.env.BUBBLAV_SECRET_KEY) { return res.status(401).json({ success: false, error: 'Invalid token' }); } // Process request... }); ``` ```python theme={null} from flask import Flask, request, jsonify import os app = Flask(__name__) @app.route('/api/order-status', methods=['POST']) def order_status(): auth_header = request.headers.get('Authorization') # Check for Bearer token if not auth_header or not auth_header.startswith('Bearer '): return jsonify({ 'success': False, 'error': 'Missing authorization' }), 401 token = auth_header.split(' ')[1] # Verify against your environment variable if token != os.environ.get('BUBBLAV_SECRET_KEY'): return jsonify({ 'success': False, 'error': 'Invalid token' }), 401 # Process request... return jsonify({ 'success': True, 'data': { 'status': 'shipped' } }) ``` ### HMAC Signature (Recommended) Most secure option using cryptographic signatures. Prevents replay attacks and ensures request authenticity. **Headers sent:** ```http theme={null} POST /api/your-endpoint Content-Type: application/json X-BubblaV-Signature: sha256=abc123def456... X-BubblaV-Timestamp: 1703123456789 ``` In these examples, `process.env.SECRET` refers to the **HMAC Secret Key** you generated in the dashboard. Ensure this environment variable matches the key in your tool configuration. **Validate in your API:** ```javascript theme={null} const crypto = require('crypto'); function verifySignature(body, signature, secret, timestamp) { const payload = `${timestamp}.${JSON.stringify(body)}`; const expected = crypto .createHmac('sha256', secret) .update(payload, 'utf8') .digest('hex'); return crypto.timingSafeEqual( Buffer.from(signature, 'hex'), Buffer.from(expected, 'hex') ); } app.post('/api/secure-endpoint', (req, res) => { const signature = req.headers['x-bubblav-signature']?.replace('sha256=', ''); const timestamp = req.headers['x-bubblav-timestamp']; // Check timestamp (5 min tolerance) const now = Math.floor(Date.now() / 1000); if (now - parseInt(timestamp) / 1000 > 300) { return res.status(401).json({ success: false, error: 'Request expired' }); } if (!verifySignature(req.body, signature, process.env.SECRET, timestamp)) { return res.status(401).json({ success: false, error: 'Invalid signature' }); } // Process authenticated request... }); ``` ```python theme={null} import hmac import hashlib import time import json import os from flask import Flask, request, jsonify app = Flask(__name__) def verify_signature(body, signature, secret, timestamp): # Create the payload string exactly as BubblaV does: timestamp + . + json_body # Note: separators=(',', ':') ensures standard JSON formatting without whitespace payload = f"{timestamp}.{json.dumps(body, separators=(',', ':'))}" expected = hmac.new( secret.encode('utf-8'), payload.encode('utf-8'), hashlib.sha256 ).hexdigest() return hmac.compare_digest(signature, expected) @app.route('/api/secure-endpoint', methods=['POST']) def secure_endpoint(): # Get headers signature = request.headers.get('X-BubblaV-Signature', '').replace('sha256=', '') timestamp = request.headers.get('X-BubblaV-Timestamp') if not timestamp or not signature: return jsonify({'success': False, 'error': 'Missing signature headers'}), 401 # Check timestamp (5 min tolerance) to prevent replay attacks if time.time() - int(timestamp) / 1000 > 300: return jsonify({'success': False, 'error': 'Request expired'}), 401 # Verify signature if not verify_signature(request.json, signature, os.environ['SECRET'], timestamp): return jsonify({'success': False, 'error': 'Invalid signature'}), 401 # Process authenticated request... return jsonify({'success': True, 'message': 'Verified!'}) ``` ### Testing HMAC Signatures Validating signatures can be tricky. Use our built-in debug tools to help: **Dashboard Debug Info**: In the **Testing** step of the Custom Tool Wizard, look for the **Request Details (Debug Info)** section. It shows you the exact **Payload String** we used to generate the signature. You can use this to debug your own verification code. *** ### Key Requirements & Security When generating or providing your own keys, follow these security best practices: **General Requirements:** * **Length:** Minimum 32 characters (longer is better) * **Complexity:** Use a mix of letters (upper/lowercase), numbers, and symbols * **Entropy:** Avoid common words, repeated characters (e.g., "aaaaa"), or sequential patterns (e.g., "123456") **Specific Guidelines:** * **Bearer Tokens:** Must be URL-safe (no spaces or special characters). * *Example:* `A4B8C12D16F20G24H28I32J36K40L44M48` * **HMAC Secrets:** Recommended minimum 64 characters for cryptographic security. * *Example:* `abcd1234efgh5678ijkl9012mnop3456qrst7890uvwx...` **Security Note:** These keys are used to authenticate API requests. Store them securely and never share them publicly. If a key is compromised, regenerate it immediately. **Using Existing Keys:** If you choose to use an existing API token or secret key, ensure it is properly configured on your endpoint to accept requests from BubblaV. *** ## Request & Response Format ### Request from BubblaV Your endpoint receives POST requests with this JSON body: ```json theme={null} { "tool_name": "get_order_status", "arguments": { "order_number": "ORD-12345", "include_items": true }, "timestamp": 1703123456789, "user_id": "uuid-of-website-owner" } ``` ### Response to BubblaV Return JSON in this format: ```json theme={null} { "success": true, "data": { "order_number": "ORD-12345", "status": "shipped", "tracking": "1Z999AA123456789", "estimated_delivery": "2024-01-15", "items": [ { "name": "Blue T-Shirt", "quantity": 2 } ] }, "message": "Order ORD-12345 has shipped and will arrive by January 15th." } ``` ```json theme={null} { "success": false, "error": "Order not found: ORD-99999", "data": null } ``` The `message` field is what the AI will use to respond to the customer. Make it friendly and informative! *** *** ## Example: Discourse Forum Search Here's how to connect to a Discourse forum to search for topics. ### 1. Tool Configuration | Field | Value | | ------------ | ----------------------------------------------------------------------------------------------------------------- | | Tool Name | `forum_search` | | Display Name | Community Forum Search | | Description | Search the community forum for topics. Use when answering technical questions or looking for community solutions. | | Endpoint URL | `https://community.yourdomain.com/search.json` | | Auth Method | None (Public API) | ### 2. Argument Schema ```json theme={null} { "q": { "type": "string", "description": "The search query to find relevant topics", "required": true } } ``` ### 3. Parameters * **q**: Add as a query parameter (Method: `query`) ### 4. Advanced: Two-Step Workflow For better results, often you want to search first, then fetch the full topic details. 1. **Create `forum_search` tool**: Returns a list of topics. 2. **Create `forum_topic_detail` tool**: * URL: `https://community.yourdomain.com/t/{topic_id}.json?print=true` * Params: `topic_id` (Path parameter) **AI Instructions**: "First use `forum_search` to find relevant topics. Then use `forum_topic_detail` with the best matching topic ID to get the full answer." *** ### In Dashboard 1. Go to **Integrations** → **Custom Tools** 2. Find your tool and click **Test** 3. Enter sample arguments 4. Click **Run Test** 5. Verify the response looks correct ### Live Testing 1. Open your website with the chatbot 2. Ask questions that should trigger your tool: * "What's the weather in New York?" * "How's the weather in London?" * "Check weather for Tokyo" *** ## Troubleshooting * Make your Description for AI more specific * Include trigger words customers use * Verify tool is marked as Active * Verify secret key is correct * Check endpoint receives expected headers * For HMAC, verify timestamp and signature calculation * Ensure endpoint responds within 10 seconds * Optimize database queries * Check network connectivity * Return valid JSON with `success`, `data`, `message` fields * Check for syntax errors in JSON * Test endpoint with curl or Postman first *** ## Best Practices Each tool should do one thing well Help AI understand when to use each tool Aim for sub-second response times Return user-friendly message text *** ## Next Steps Hand off conversations to live agents Enable real-time web search See all available integrations # Discord Source: https://docs.bubblav.com/user-guide/integrations/discord Connect your Discord server to add AI chatbot capabilities to your community Transform your Discord server with an intelligent AI chatbot that can answer questions, provide support, and engage with your community members automatically using slash commands and the "Ask BubblaV" context menu action. ## Why Connect Discord? Use `/ask` command for quick questions anywhere in your server AI responds to community questions anytime, day or night Choose specific channels where the bot should be active Ask the AI to analyze any message via the "Apps" context menu Automatically reply to new forum posts with helpful answers Answers based on your website's content and documentation ## What Can the Discord Bot Do? ### Answer Questions Instantly Your community members can ask questions about your product, service, or content directly in Discord: **Using Slash Commands:** ``` /ask How do I reset my password? /ask What are your business hours? /ask Tell me about your premium features ``` **Using Context Menu Actions:** 1. Right-click any message in Discord 2. Navigate to **Apps** 3. Click **Ask BubblaV** ### Provide 24/7 Support * Responds instantly to common questions * No waiting for human moderators * Reduces support workload * Consistent, accurate answers ### Search Your Knowledge Base The bot uses your website's content to provide accurate answers: * Documentation pages * FAQ sections * Product information * Help articles * Custom knowledge content ### Create Organized Conversations * **Thread Support**: Create threads for responses to keep channels clean * **Forum Auto-Reply**: Automatically respond to new forum posts * **Channel-Specific**: Limit bot to specific channels (support, help, FAQ) * **Role Restrictions**: Only allow certain roles to use the bot ## Prerequisites * Discord server where you have **Administrator permissions** * Ability to invite bots to your server * Active BubblaV account with a website * Website with knowledge base content ## Setup Steps Go to **Dashboard** → **Your Website** → **Integrations** and find the Discord card Click **Connect Discord** to open the bot invitation flow You'll be redirected to Discord to authorize the bot: 1. Select the server where you want to add the bot 2. Review the requested permissions: * Read Messages * Send Messages * Embed Links * Read Message History * Create Public Threads * Add Reactions * Use Slash Commands 3. Click **Authorize** 4. Complete the captcha verification Return to the BubblaV dashboard. The Discord integration should now show **Connected** with your server name Click **Configure** on the Discord integration to customize: * Which channels the bot should respond in * Forum mode settings * Thread creation preferences * Role-based access control Go to your Discord server and test: ``` /ask Hello, are you working? ``` The bot should respond with an AI-generated answer based on your website's content. ## Using Slash Commands ### `/ask` Command The primary way to interact with the bot. Simply type `/ask` followed by your question. **Syntax:** ``` /ask [your question here] ``` **Examples:** ``` /ask How do I create an account? /ask What payment methods do you accept? /ask Where can I find the API documentation? /ask Tell me about your pricing plans ``` **Response Format:** * The bot responds with a Discord embed * Includes AI-generated answer from your knowledge base * Shows source citations (links to your website pages) * Truncated responses include a link to view the full answer **Command Availability:** * Works in all text channels (unless you restrict it) * Available in threads * Works in forum channels * Instant autocomplete as you type ## Configuration Options Explained ### Channel Selection By default, the bot will respond in all text channels. You can limit this to specific channels: 1. Go to **Dashboard** → **Integrations** → **Discord** → **Configure** 2. View the list of all channels in your server 3. Check only the channels where you want the bot active 4. Click **Save Settings** **Best Practices:** * Start with dedicated support/help channels * Avoid enabling in social/general chat channels * Perfect for: `#support`, `#help`, `#faq`, `#questions` **Empty Selection:** If no channels are selected, the bot responds in **all channels** (not recommended for busy servers). ### "Ask BubblaV" Context Menu Action A powerful way to have the AI analyze an existing message. This is perfect for answering questions that members have already posted without using a slash command. **How to Use:** 1. Find a message containing a question or topic you want addressed. 2. Right-click the message (or long-press on mobile). 3. Select **Apps** → **Ask BubblaV**. 4. The AI will read the message content and provide a response in the channel. **Benefits:** * **Accuracy**: The AI gets the exact text of the question. * **Context**: Works perfectly in busy channels where slash commands might feel disconnected. * **Reliability**: Unlike @mentions which can be ignored by bots in certain privacy modes, Context Actions are direct interactions that always reach the bot. **Availability:** * Works on any message in enabled channels. * Available to all users with the "Use Application Commands" permission. ### Forum Auto-Reply Mode Enable this to automatically respond to new forum posts: **How It Works:** 1. User creates a new post in a forum channel 2. Bot analyzes the post title and content 3. Bot responds with relevant information from your knowledge base 4. Response appears as the first reply in the thread **Best For:** * Support forums * Help channels * FAQ forums * Community Q\&A sections **Configuration:** 1. Enable "Forum Auto-Reply Mode" in Discord settings 2. Ensure forum channels are selected in channel list 3. Bot will auto-reply to new posts only (not replies) ### Enable Threads When enabled, bot responses are posted as threads: **Benefits:** * Keeps main channels cleaner * Creates organized discussions * Users can follow up in thread * Easier to track conversation history **How It Works:** 1. User asks question with `/ask` or "Ask BubblaV" context action 2. Bot creates a new thread 3. Response is posted in the thread 4. Users can continue conversation in thread **Best For:** * Busy servers * Channels with high message volume * Servers that value organization ### Role-Based Access Control Restrict bot usage to specific roles: **Configuration:** 1. Go to Discord integration settings 2. Select allowed roles (e.g., "Members", "Verified", "Premium") 3. Save settings **Use Cases:** * Limit to verified members only * Premium feature for paying subscribers * Prevent abuse from new members * Create VIP support tiers **Empty Selection:** If no roles are selected, **all users** can use the bot. ## Response Examples ### Simple Question **User:** ``` /ask What are your business hours? ``` **Bot Response:** ``` ╔════════════════════════════════════════╗ ║ BubblaV AI Assistant ║ ╠════════════════════════════════════════╣ ║ We're open Monday through Friday ║ ║ from 9 AM to 6 PM EST. ║ ║ ║ ║ For urgent matters outside business ║ ║ hours, you can email support@... ║ ║ ║ ║ Sources: ║ ║ • Contact Us Page ║ ╚════════════════════════════════════════╝ ``` ### Product Question **User:** ``` /ask Tell me about the Pro plan features ``` **Bot Response:** Provides detailed information about Pro plan features, pricing, and benefits with links to pricing page. ### Technical Question **User:** ``` /ask How do I integrate the API? ``` **Bot Response:** Provides code examples, API documentation links, and step-by-step integration guide based on your docs. ## Test Your Integration After setup, test the bot in your Discord server: ### Basic Test 1. Go to one of the enabled channels 2. Type: `/ask Are you working?` 3. The bot should respond within 2-3 seconds ### Knowledge Test 1. Ask a question that's answered on your website 2. Example: `/ask What is [your product]?` 3. Bot should provide answer with source citations ### Channel Test 1. Try using bot in disabled channel 2. Bot should not respond (or show "not enabled" message) 3. Verify bot works in enabled channels only ### Context Menu Test 1. Right-click any message in an enabled channel. 2. Select **Apps** → **Ask BubblaV**. 3. The bot should respond to that specific message content within seconds. ## Best Practices **Start Small**: Begin with "Require Mention" enabled and limit to 1-2 channels. Expand after testing. **Monitor Usage**: Check the Discord integration analytics in your BubblaV dashboard to see how often the bot is used. **Update Knowledge Base**: Regularly update your website content to improve bot responses. The bot is only as good as your knowledge base. **Set Expectations**: Add a channel topic or pinned message explaining that responses are AI-generated and may not always be perfect. ## Troubleshooting **Solutions:** * Wait 5-10 minutes after installation (commands need to propagate) * Ensure bot has "Use Application Commands" permission * Try leaving and rejoining the channel * Reinstall the bot and reauthorize permissions * Check Discord Developer Mode is enabled (User Settings → Advanced) **Check:** * Verify bot is online in server member list * Ensure channel is enabled in BubblaV dashboard * Check if you have required role (if role restrictions enabled) * Verify your website has knowledge base content * Try asking a different question **Test Connection:** 1. Go to BubblaV Dashboard → Integrations → Discord 2. Click "Test Connection" 3. Check for error messages **Solutions:** * Verify the bot has been invited to your server with correct permissions. * Ensure you are right-clicking an actual **Message** (the menu won't appear on users or empty space). * Check that you have "Use Application Commands" permission in the channel. * If recently installed, wait a few minutes for Discord to synchronize commands. * Try restarting your Discord client (Ctrl+R or Cmd+R) to force a refresh. **Solutions:** * Limit bot to specific channels (not #general or #chat) using the **Channel Selection** in dashboard. * Remove bot from busy social channels. * Consider enabling thread creation to keep responses out of the main channel. * Use role restrictions to limit who can use the AI commands. **Solutions:** * Ensure bot has been invited to the server * Check bot has "View Channels" permission * Try disconnecting and reconnecting the integration * Verify you're configuring the correct Discord server * Refresh the page and try again **Solutions:** * Verify forum channels are enabled in channel selection * Ensure "Forum Auto-Reply Mode" is enabled * Check bot has permissions in forum channels: * Read Messages * Send Messages in Threads * Create Public Threads * Verify forum posts are public (not restricted) * Test with a new forum post (bot doesn't reply to existing posts) **Solutions:** * Review your website's knowledge base content * Add more detailed documentation to your site * Use BubblaV's Q\&A feature to add specific answers * Check that your website crawler is up to date * Report issues to BubblaV support for AI improvements **Solutions:** * Check BubblaV status page for outages * Verify Discord integration is still connected in dashboard * Try disconnecting and reconnecting integration * Reinstall bot with fresh authorization * Contact support if issue persists **Solutions:** * Ensure you have Administrator permission in Discord server * Try using a different browser or incognito mode * Check if server has reached bot limit (100 bots max) * Verify server is not restricted by Discord * Ask server owner to invite the bot instead ## Plan Limits Discord bot messages count toward your BubblaV plan's message quota: | Plan | Monthly Messages | Discord Usage | | -------- | ---------------- | ------------------ | | **Free** | 100 | Shared with widget | | **Pro** | 5,000 | Shared with widget | **Note:** Each `/ask` command or Context Menu response counts as 1 message toward your quota. **Upgrade:** If you exceed your limit, upgrade your plan in Dashboard → Billing. ## FAQ **Yes**, but each Discord server requires its own website integration in BubblaV. One Discord server can only connect to one website, but you can create multiple websites in BubblaV if you manage multiple communities. Currently, the bot uses the default BubblaV branding. Custom bot names and avatars are planned for a future update. All bots across different servers share the same BubblaV identity. Yes, Discord conversations are stored in your BubblaV dashboard for analytics and training purposes. This helps improve response quality over time. You can view Discord interactions in Reports → Conversations. Currently, the bot only works in server channels and forums using slash commands and the context menu. Standard @mentions and direct message support are planned for a future update. The bot requires these permissions: * **Send Messages**: To post responses * **Embed Links**: To format responses nicely * **Use Slash Commands / Application Commands**: Required for /ask and context menu actions * **Create Public Threads**: For threaded conversations (optional) * **Add Reactions**: For interactive features (optional) These are requested automatically during installation. The bot typically responds within 2-5 seconds. Since we use Discord's Interaction API, the bot provides an instant "Thinking..." indicator so users know their request is being processed immediately. Currently, `/ask` is the only slash command available. Additional commands (like `/help`, `/status`, `/feedback`) are planned for future releases. Contact support to request specific commands. If the bot can't find relevant information in your knowledge base, it will: 1. Respond honestly: "I don't have information about that" 2. Suggest contacting human support 3. Optionally offer to escalate to your team (if Escalate to Human integration is enabled) The bot never makes up information or guesses. Server moderators cannot see analytics directly in Discord. However, if you grant them access to your BubblaV dashboard (via Team feature), they can view: * Message count and usage * Popular questions * Response quality metrics * User satisfaction ratings The bot responds in the same language as your knowledge base content. If your website has multi-language content, the bot can provide answers in those languages. Automatic translation is not currently supported. ## Security & Privacy **Data Security**: We only request read and send message permissions. Your Discord server data remains secure and private. **Privacy Compliance**: Discord conversations are processed according to our [Privacy Policy](https://bubblav.com/privacy). We do not share conversation data with third parties. **Server Ownership**: Only server administrators can invite bots. If you're not an admin, contact your server owner to add the bot. **Rate Limits**: Discord enforces rate limits on bot activity. If the bot stops responding temporarily, it may be rate-limited. This resets automatically within minutes. ## Need Help? Read our full documentation Contact our support team Join our Discord server Report an issue ## What's Next? After setting up Discord, consider: Escalate complex questions to your support team Add custom actions for Discord users Track Discord bot interactions Improve bot responses with better content # Email (IMAP) Source: https://docs.bubblav.com/user-guide/integrations/email Connect any email mailbox via IMAP to bring support emails into your unified BubblaV inbox, with AI-drafted replies from Copilot Bring your support emails into the same BubblaV inbox as your live chat, Messenger, WhatsApp, and other channels. Connect any mailbox over IMAP, triage inbound email alongside everything else, and reply by email directly from the dashboard — keeping the original thread intact. ## Why Connect Email? Triage chat, social DMs, and email conversations in a single place Agent replies are sent over SMTP and thread correctly in the customer's mail client Works with Gmail, Outlook/Microsoft 365, and any custom-domain mailbox that supports IMAP Inbound attachments are stored and shown with the conversation The Email channel creates a support conversation your team owns. The AI doesn't auto-send email replies — but Copilot can **draft** every reply for you. See [Draft a Reply with Copilot on Email](#draft-a-reply-with-copilot-on-email) below. ## Prerequisites * A mailbox that supports **IMAP** (for receiving) and **SMTP** (for sending replies). * **IMAP access enabled** in your email provider's settings. Gmail, Zoho, and Outlook all require you to turn IMAP on for the mailbox before it can be polled. * The mailbox **login credentials**: your username (the full email address) and a password. If two-factor authentication is on, your regular account password will be rejected — you must use the provider's **App Password**: * **Gmail**: Google Account → Security → 2-Step Verification → **App passwords**. * **Zoho**: Zoho Mail → Settings → Mail Accounts → **IMAP/POP Access** → enable IMAP, then generate an **App Password** under the same section. * **Outlook / Microsoft 365**: Microsoft account → Security → Advanced security options → **App passwords**. ## Setup Steps ### Gmail — Sign in with Google (recommended) In your dashboard, go to **Integrations** and find **Email** under the Communication category, then choose **Gmail** as the provider. Click **Sign in with Google**. After you approve, you're returned to the dashboard. New mail arriving from that moment on is fetched automatically (mail already in the inbox before connecting is skipped). ### Other providers — IMAP / App Password In your dashboard, go to **Integrations** and find **Email (IMAP)** under the Communication category. Provide your IMAP host and port, SMTP host and port, username, password (or App Password), and the address replies should be sent from. BubblaV verifies both the IMAP and SMTP login before saving. If both succeed, your mailbox is connected and polling begins automatically. ### Common provider settings | Provider | IMAP | SMTP | | ----------------------- | --------------------------- | ------------------------- | | Gmail | `imap.gmail.com:993` | `smtp.gmail.com:587` | | Zoho (global) | `imap.zoho.com:993` | `smtp.zoho.com:465` | | Zoho (EU) | `imappro.zoho.eu:993` | `smtppro.zoho.eu:465` | | Outlook / Microsoft 365 | `outlook.office365.com:993` | `smtp.office365.com:587` | | Custom domain / hosting | Your provider's IMAP host | Your provider's SMTP host | TLS is automatic based on the port: **993** and **465** use implicit TLS, while **143** and **587** use STARTTLS. You don't need to configure TLS separately. ## Managing Your Integration * **New mail** is fetched automatically every couple of minutes and appears as a conversation in **Live Support**, tagged with an Email badge. * **Reply** from the conversation view — your reply is sent from your connected address and threaded under the customer's original email. * **Change credentials**: disconnect and reconnect with the new details. * **Disconnect** from the integration's configure page to stop polling. ## How Replies Are Threaded Each reply includes the correct `In-Reply-To`, `References`, and `Re:` subject headers so it lands inside the customer's existing email conversation in Gmail, Outlook, Apple Mail, and other clients — rather than starting a new thread. ## Draft a Reply with Copilot on Email You don't have to write every reply from scratch. On any email conversation in the unified inbox, click **Draft reply with Copilot** and BubblaV writes a complete draft straight into your composer. In **Live Support**, open the email ticket you want to answer. Copilot reads the customer's email (including attachments) and writes a complete, source-cited draft based on your knowledge base and the customer's context. Check the draft, adjust the tone, and add anything Copilot couldn't know. Your reply goes out from your connected mailbox, threaded under the customer's original email — exactly as if you'd written it yourself. Copilot only drafts — a human always reviews and sends. Nothing goes out from your mailbox without an agent clicking send. This makes email support safe to hand to brand-new agents: Copilot supplies the answer, they stay in charge. # Escalate to Human Source: https://docs.bubblav.com/user-guide/integrations/escalate-to-human Enable the built-in tool to let visitors reach out to your support team. # Escalate to Human Integration The **Escalate to Human** integration allows your chatbot to collect visitor contact information (email) and create a support request or initiate a live chat session. ## Features * **Built-in Tool**: Automatically understood by the chatbot. * **Support Handoff**: Connects visitors with your support team when they request help. * **Context Aware**: Uses existing visitor information if available. * **Customizable**: Can be enabled or disabled per website. ## Setup 1. Go to your **BubblaV Dashboard** > **Integrations**. 2. Find the **Escalate to Human** integration card. 3. Click **Connect** (if not already connected). 4. Toggle the switch to **Active**. ## How it works When a visitor asks to speak to support or says "I need help", the chatbot will: 1. Check if the **Escalate to Human** integration is enabled. 2. Ask the visitor for their email address (if not already known). 3. Confirm they want to be connected to a support specialist. 4. Execute the contact form tool, which can trigger notifications or create a live chat session in your configured support system (e.g., Zendesk, HubSpot, or BubblaV Live Chat). ## Requirements * **Plan**: Available on all plans (Free, Pro, Pro+). # Framer Source: https://docs.bubblav.com/user-guide/integrations/framer Add BubblaV to your Framer website with our official plugin or the Ask AI Button component Add BubblaV AI chatbot to your Framer website in seconds. No coding required. ## Why Use the Framer Plugin? Framer Plugin Demo Install the plugin, sign in, and select your website. The widget is automatically added to your canvas. Customize widget appearance directly in Framer's property panel—position, theme, bot name. Secure authentication with your BubblaV account. No need to copy-paste Website IDs. *** ## Installation ### Option 1: Using the Framer Plugin (Recommended) The easiest way to add BubblaV to your Framer site. The plugin is available on the Framer Marketplace: Install the BubblaV plugin directly from the Framer Marketplace In Framer, go to PluginsStore and search for "BubblaV", or open the plugin page directly Click Install to add the plugin to your project Click Login & Select Website to sign in to your BubblaV account and choose your website Adjust the widget appearance in the plugin panel—position, theme, bot name Publish your Framer site and the chatbot will appear automatically ### Option 2: Manual Installation If you prefer manual setup: Open your Framer project and go to Site Settings Click on the General tab Scroll down to the End of \ tag section Paste your BubblaV embed code from the dashboard Click Save and then Publish your site The plugin method is recommended because it automatically creates the component in your code and adds it to your canvas with pre-configured settings. *** ## OAuth Login Flow The plugin uses a secure OAuth flow for authentication: 1. Click **"Login & Select Website"** button in the plugin 2. Browser opens to BubblaV login page 3. Complete login (or sign up if new) 4. Plugin automatically detects successful login 5. Select your website from the dropdown 6. Widget is configured and added to your site *** ## Plugin Features ### Property Controls (Sidebar) * **Site ID** - Your website ID (auto-filled when using OAuth) * **Bot Name** - Custom display name for your chatbot * **Position** - Choose widget placement: bottom-right, bottom-left, or bottom-center * **Theme** - Light or dark mode to match your site ### Visual Preview The plugin shows a live preview on your canvas: * BubblaV branding for easy identification * Status indicator (Ready/Missing Site ID) * Position preview shows where the widget will appear ### When Published The widget script is automatically injected and renders as a floating chat button on your published site. *** ## Available Tools After Connection When you connect your Framer website to BubblaV, the chatbot gains access to your crawled website content and knowledge base. | Feature | Description | | ------------------ | ------------------------------------------------ | | **Website Search** | Chatbot searches your entire Framer site content | | **Knowledge Base** | Add FAQs, documents, and custom content | | **Live Support** | Handoff to human agents when needed | | **Analytics** | Track conversations and visitor insights | *** ## Troubleshooting * Verify you've published your site (not just preview) * Check your Website ID is correct * Wait 1-2 minutes for caching to clear * Try clearing your browser cache * Make sure popups are allowed in your browser * Check that you're not using an ad blocker * Try refreshing the page and clicking Login again * Make sure you have created a website in your BubblaV dashboard * Check that you're logged in to the correct account * Try logging out and back in * Check your message limits (may be exceeded) * Verify crawl completed successfully in dashboard * Ensure knowledge base has content *** ## Next Steps Customize colors, position, and behavior Add your content for better responses # Google Analytics 4 Source: https://docs.bubblav.com/user-guide/integrations/google-analytics Integrate BubblaV events with Google Analytics 4 (GA4) and Google Tag Manager (GTM). BubblaV enables you to track user interactions with your AI chatbot and search widget directly in your Google Analytics 4 (GA4) dashboard. This integration allows you to see: * How many users open the chat or search widget. * What users are searching for (Search Queries). * How many messages are sent to the AI. * Which pages users are on when they interact. ## Prerequisites Before getting started, ensure you have: 1. A Google Analytics 4 property created. 2. The Google Analytics tracking script (`gtag.js`) OR Google Tag Manager snippet installed on the same page as your BubblaV widget. ## Installation The BubblaV integration is **zero-configuration** on the code side, but requires activation in your dashboard. ### 1. Enable in Dashboard To start tracking events, you must enable the integration for your website: 1. Go to your **Project Dashboard**. 2. Navigate to the **Integrations** tab. 3. Locate **Google Analytics 4** and click **Connect**. 4. Confirm the activation. ### 2. Automatic Detection Once enabled, the widget automatically detects if `window.gtag` (GA4) or `window.dataLayer` (GTM) is present on your website and begins dispatching events immediately. You do not need to add any extra code to the BubblaV widget snippet. ### How it works 1. BubblaV loads on your page. 2. It checks for the existence of the Global Site Tag (`gtag`) or GTM Data Layer. 3. When a user interacts (e.g., opens chat), BubblaV pushes an event to the detected analytics instance. ## Configuration While events are sent automatically, you may want to configure **Custom Definitions** in GA4 to see granular data like "Search Query" in your reports. ### Step 1: Check Real-time Data To verify the integration is working: 1. Open your website and interact with the widget (open it, send a message). 2. Go to **Google Analytics > Reports > Realtime**. 3. Look for events named `bubblav_chat_opened` or `bubblav_search_query` in the Event Count card. ### Step 2: Create Custom Dimensions (Optional) To report on specific event parameters (like `query` or `conversation_id`), create custom dimensions: 1. Go to **Admin > Data display > Custom definitions**. 2. Click **Create custom dimension**. 3. Add the following dimensions: | Dimension Name | Scope | Event Parameter | Description | | :-------------- | :---- | :---------------- | :------------------------------------ | | Search Query | Event | `query` | The text users typed into the search. | | Widget Type | Event | `widget_type` | 'chat' or 'search'. | | Search Source | Event | `source` | 'input' or 'suggestion'. | | Conversation ID | Event | `conversation_id` | Unique ID of the chat session. | ## Google Tag Manager (GTM) Setup If you use Google Tag Manager, BubblaV pushes events to the `dataLayer`. You need to create triggers to capture them. 1. **Create a Trigger:** * **Trigger Type:** Custom Event * **Event Name:** `bubblav_.*` (Use regex matching) OR specific names like `bubblav_search_query`. 2. **Create Variables:** * **Variable Type:** Data Layer Variable * **Data Layer Variable Name:** `query` (or other properties listed below). 3. **Create a Tag:** * Go to **Tags** and click **New**. * Click **Tag Configuration** and select **Google Analytics: GA4 Event**. * **Measurement ID:** Enter your GA4 Measurement ID (e.g., `G-XXXXXXXXXX`) or select your Google Tag variable. * **Event Name:** Enter `{{Event}}`. This dynamically passes the event name (e.g., `bubblav_search_query`) from the Data Layer to GA4. * **Event Parameters:** Expand this section to send additional data: * *Parameter Name:* `search_term` (or match your GA4 Custom Dimension). * *Value:* Click the `+` icon and select the **Data Layer Variable** you created in Step 2 (e.g., `{{dlv - query}}`). * **Triggering:** Click to select a trigger and choose the **Custom Event** trigger you created in Step 1. * **Save** the tag and **Submit/Publish** your GTM container changes. ## Event Reference ### Chat Events | Event Name | Description | Trigger | Properties | | :--------------------------- | :----------------- | :--------------------------------------------------------------- | :---------------------------------------- | | `bubblav_chat_opened` | Chat Opened | User clicks the implementation bubble or calls `BubblaV.open()`. | `widget_type: 'chat'` | | `bubblav_chat_closed` | Chat Closed | User minimizes the chat window. | `widget_type: 'chat'` | | `bubblav_widget_expanded` | Widget Expanded | User expands the widget for a better view. | `widget_type: 'chat'` | | `bubblav_widget_collapsed` | Widget Collapsed | User collapses the widget back to normal view. | `widget_type: 'chat'` | | `bubblav_message_sent` | Message Sent | User sends a message to the AI. | `conversation_id`, `message_id`, `text` | | `bubblav_message_received` | Message Received | User receives a response from the AI. | `conversation_id`, `message_id`, `text` | | `bubblav_conversation_rated` | Conversation Rated | User rates the overall conversation. | `conversation_id`, `rating` | | `bubblav_message_rated` | Message Rated | User rates a specific message (up/down). | `conversation_id`, `message_id`, `rating` | ### Search Events | Event Name | Description | Trigger | Properties | | :---------------------- | :------------ | :----------------------------------------------------------- | :-------------------------------------------------------- | | `bubblav_search_opened` | Search Opened | User clicks the search icon or calls `BubblaV.openSearch()`. | `mode` (e.g., 'modal', 'inline'), `widget_type: 'search'` | | `bubblav_search_closed` | Search Closed | User closes the search modal. | `mode`, `widget_type: 'search'` | | `bubblav_search_query` | Search Query | User submits a search or clicks a suggestion. | `query`, `source` | ## Troubleshooting ### Events not showing up? * **Check Ad Blockers:** Ensure your ad blocker isn't blocking Google Analytics. * **Wait:** GA4 standard reports can take 24-48 hours to update. Use the **Realtime** report for testing. * **Debug Mode:** Install the "Google Analytics Debugger" Chrome extension to see events in the developer console. ### Using a different analytics provider? If you use Mixpanel, Amplitude, or others, you can manually listen to BubblaV SDK events and forward them: ```javascript theme={null} window.BubblaV.on('search:query', (data) => { mixpanel.track('Site Search', { query: data.query }); }); ``` # Google Drive Source: https://docs.bubblav.com/user-guide/integrations/google-docs Use Google Docs, Sheets, and Slides from Google Drive as knowledge sources for your AI chatbot Transform your Google Drive into an intelligent knowledge base. Connect documents, spreadsheets, and presentations to provide instant answers from content you already maintain. ## Why Connect Google Drive? Sync Docs, Sheets, and Slides in one integration Changed files are automatically re-synced each cycle AI understands context and meaning, not just keywords OAuth 2.0 with read-only scopes — your files are never modified ## Prerequisites * A Google account with Docs, Sheets, or Slides files you want to use as knowledge * A BubblaV website with an active subscription ## Setup Steps Go to **Dashboard** → **Integrations** → **Google Drive** Click **Connect Google Drive** and authorize via Google Click **Add Files** to browse your Google Drive and select files to sync *** ## Supported File Types | Type | Google MIME Type | Export Format | | ------------- | ------------------------------------------ | --------------------- | | Google Docs | `application/vnd.google-apps.document` | Plain text | | Google Sheets | `application/vnd.google-apps.spreadsheet` | CSV | | Google Slides | `application/vnd.google-apps.presentation` | Text (via Slides API) | ## Content Syncing Google Drive content is synced automatically according to your plan's crawl frequency: * **Free**: No automatic syncing * **Pro**: Weekly ## Sync Status Each file shows one of four statuses: | Status | Meaning | | --------- | ------------------------------------- | | `Pending` | Added but not yet synced | | `Syncing` | Currently being processed | | `Synced` | Successfully synced to knowledge base | | `Failed` | Error during sync — hover for details | ## Permissions Required BubblaV requests the following read-only Google OAuth scopes: * `drive.readonly` — List and read files from Google Drive * `documents.readonly` — Read Google Docs content ## Troubleshooting Only Google Drive files (Docs, Sheets, and Slides) are shown. Other file types (PDFs, images, etc.) are not supported. Make sure you're viewing the correct Google account. Refresh the page. It takes a few minutes to sync. Only the first sheet of a spreadsheet is synced. For large sheets, only the first exported CSV is processed. Consider splitting data across multiple sheets or files. # Google Tag Manager Source: https://docs.bubblav.com/user-guide/integrations/google-tag-manager Install the BubblaV chatbot widget with Google Tag Manager (GTM) — no code editing required, works on any website. Add the BubblaV AI chatbot to **any website** using Google Tag Manager (GTM). GTM is one of the most popular ways to manage scripts on a site, and it lets you add the widget without touching your website's source code — ideal for a normal or custom website that doesn't have a dedicated marketplace app. ## Why Use Google Tag Manager? Add the widget through the GTM interface. You never edit your website's HTML, theme files, or server templates directly. GTM runs on virtually any website — custom builds, static sites, and platforms without an official app. It's a great default choice. Manage the widget alongside all your other tags (analytics, ads, tracking) from one place. Enable, pause, or remove it anytime. Looking for a no-code app install instead? If your site is on **Wix**, **Webflow**, or **Framer**, use our official marketplace app. GTM is the recommended method for any other or custom website. *** ## Prerequisites Before you start, make sure you have: 1. A **Google Tag Manager container** installed on your website. If you haven't set up GTM yet, follow Google's [Web installation guide](https://developers.google.com/tag-platform/tag-manager/web) first. 2. Your **BubblaV embed code**, available in your dashboard under **Installation**. It looks like this: ```html theme={null} ``` *** ## Installation ### Step 1: Open Google Tag Manager Log in to [Google Tag Manager](https://tagmanager.google.com) and select your container (or create a new one for your website). ### Step 2: Create a New Tag Go to **Tags** in the left sidebar, then click **New**. ### Step 3: Configure the Tag Click on **Tag Configuration**, then choose **Custom HTML** as the tag type. ### Step 4: Paste the Widget Code Paste your BubblaV embed code into the HTML field: ```html theme={null} ``` Replace `YOUR_WEBSITE_ID` with the site ID from your BubblaV dashboard. ### Step 5: Set the Trigger Click on **Triggering** and select **All Pages** so the widget loads on every page of your site. ### Step 6: Name and Save Name the tag **"BubblaV Chat Widget"** and click **Save**. ### Step 7: Publish Click **Submit** in the top-right corner, then click **Publish** to make the tag live on your site. After publishing, it may take a few minutes for changes to propagate. Open your site in an incognito window to verify the widget appears. *** ## Troubleshooting * Make sure you clicked **Submit** → **Publish** in GTM (saving a tag is not enough) * Confirm the trigger is set to **All Pages** (or includes the page you're checking) * Open your site in an incognito window and wait 1–2 minutes for cache to clear * Verify the `data-site-id` in your tag matches the website ID in your BubblaV dashboard * Use **Preview** mode in GTM to confirm the "BubblaV Chat Widget" tag fires on page load * Check your browser console for errors related to `widget.js` * Make sure an ad blocker or script blocker isn't blocking `bubblav.com` * Confirm your website has available message quota in the dashboard GTM is free. Create an account at [tagmanager.google.com](https://tagmanager.google.com), set up a container for your website, and add the two GTM container snippets to your site's `` and `` as Google instructs. Then follow the installation steps above. *** ## Next Steps Customize colors, position, and behavior Add your content for better AI responses # Haravan Source: https://docs.bubblav.com/user-guide/integrations/haravan Add your AI chatbot to Haravan stores with one-click installation—no coding required Connect your Haravan store to BubblaV and instantly deploy an AI-powered chatbot that provides 24/7 customer support—all without touching a single line of code. ## Why Connect Haravan? No coding required. Simply authorize and the chatbot is automatically added to your store. Go from zero to live chatbot in under 2 minutes Chatbot updates automatically whenever you change your settings in the dashboard Provide instant answers to your customers around the clock ## Prerequisites * Active Haravan store * Store owner or admin permissions ## Setup Steps Installing BubblaV on your Haravan store is quick and simple with OAuth authorization. Go to the [BubblaV Haravan App listing](https://apps.haravan.com/products/bubblav) and click **Install app**. You'll be redirected to the Haravan authorization page. Review the permissions requested and click **Yes** to approve the installation. Haravan OAuth Authorization Dialog This dialog confirms that BubblaV will be granted permission to add the chatbot to your store. After clicking **Yes**, you'll be redirected back to your BubblaV dashboard. The Haravan card should now show **Connected**, and your chatbot is live on your store. **No Code Changes Needed**: The integration automatically injects the chatbot script into your Haravan store. You don't need to edit any theme files or add code manually. *** ## What the Chatbot Can Do Once connected, the chatbot can answer customer questions using your live store data: Customers describe what they want ("vòng tay bạc dưới 2 triệu", "quà tặng cho mẹ") and the chatbot searches your catalog with price, availability, size/color and brand filters — then shows product cards with images and prices in VND. Product cards include an **Add** button. On your storefront, items go straight into the customer's cart; from other sites, a new tab opens with the items pre-added. Customers track an order with its number plus the email or phone used at checkout, and get a status card with payment state, delivery tracking and a buy-again button. Returning customers can list their past orders by email or phone number. **Always Connected**: Haravan access tokens refresh automatically — your chatbot keeps working without periodic reconnections. (Stores connected before August 2026 may be asked to reconnect once when their token expires.) *** ## Available Tools After Connection | Tool | What It Does | Example Query | | -------------------------------- | -------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------ | | `haravan_track_order` | Track orders by number/ID | "Kiểm tra đơn hàng #1025" / "Track order #1025" | | `haravan_search_products` | Advanced product search with filters (price range, availability, size/color variants, brand, sort) | "Vòng tay bạc dưới 2 triệu" / "Silver bracelet under 2 million VND" | | `haravan_get_product` | Get full product details (complete description, specs, variants, stock) | "Gửi thông số thang gấp 604" / "Tell me more about product #1" | | `haravan_customer_orders` | Customer order history | "Cho tôi xem các đơn hàng của email này" / "My orders for [john@example.com](mailto:john@example.com)" | | `haravan_initiate_return` | Start a return request | "Tôi muốn trả hàng" / "I want to return my order" | | `haravan_create_return` | Process return authorization | "Xử lý trả hàng giúp tôi" / "Process my return" | | `haravan_validate_discount_code` | Validate promo codes | "Mã SUMMER25 còn hiệu lực không?" / "Is code SUMMER25 valid?" | ## Test Your Integration Visit your Haravan store and open the chatbot widget. Try asking: * "What are your business hours?" * "Show me charm bracelets under 2 million" (product search) * "Gửi thông số \[product]" (full product specs via product details) * "Where is my order #1025?" with the email used at checkout (order tracking) ## Troubleshooting * Ensure you have store admin permissions * Clear browser cache and try again * Verify your store URL is correct * Wait a few minutes for the script injection to complete * Clear your browser cache and reload the store page * Check that the connection status shows **Connected** in your dashboard * Your Haravan session expired; click **Reconnect** on the Haravan integration card * This is expected at most once for stores connected before August 2026 **Security**: We only request the minimum permissions needed to add the chatbot to your store. Your store data remains secure. # HubSpot Source: https://docs.bubblav.com/user-guide/integrations/hubspot Sync conversations, contacts, and support tickets to your CRM — and let visitors book meetings in chat Sync your chatbot conversations, contacts, leads — and now support tickets — directly to HubSpot CRM. ## Why Connect HubSpot? * **Lead Capture**: Automatically create contacts as soon as email is collected. * **Conversation Logging**: Save chat transcripts to the contact's timeline. * **Visitor Insights**: Support agents see CRM properties and contact history in real-time. * **Page View Tracking**: See which pages visitors viewed before chatting. * **Ticket Sync to the Unified Inbox**: HubSpot conversations and tickets sync into BubblaV's Live Support inbox, and agent replies go straight back into the HubSpot thread. ## Visitor Insights for Support Agents The HubSpot integration enriches the **Visitor Insight** panel in your BubblaV dashboard, giving support and sales agents critical context from your CRM: HubSpot Visitor Insight * **Contact Properties**: View HubSpot contact properties like Lifecycle Stage, Lead Status, and Owner directly in the chat. * **Activity Timeline**: See recent events such as emails, notes, and meetings to understand the customer's history. * **Page View Tracking**: Review a history of the specific pages and URLs the visitor has viewed on your site. * **Deal Status**: Monitor any active or closed deals associated with the contact to prioritize high-value interactions. Based on these insights, agents can provide a more personalized and professional support experience with the full CRM context at their fingertips. ## Setup Steps Go to **Dashboard** → **Integrations** → **HubSpot** Click **Connect HubSpot**. You will be redirected to HubSpot's OAuth page. Choose the HubSpot account you want to link and grant permissions. Once redirected back, you'll see your HubSpot Portal ID and connection status. *** ## Configuration After Connection After successfully connecting HubSpot, you can configure how contacts are synced, which workflows are triggered, and how conversations are logged. ### Lead & Contact Sync Configure how new contacts are created and managed in HubSpot: **Sync Lead** * Automatically create a contact in HubSpot as soon as the visitor provides their email address in the chat. * **Default**: Enabled * **Location**: In HubSpot integration settings → **Sync Lead** **Lifecycle Stage for New Contacts** * The HubSpot lifecycle stage applied when a visitor first shares their email * **Default**: `lead` * **Examples**: `lead`, `subscriber`, `opportunity`, `customer` * **Location**: In HubSpot integration settings → **Contact sync defaults** **Lifecycle Stage After Escalation** * The lifecycle stage applied when a live-support escalation is created * **Default**: `opportunity` * **Purpose**: Helps sales teams pick up escalated conversations immediately * **Location**: In HubSpot integration settings → **Contact sync defaults** **Default HubSpot Owner** * Optional HubSpot owner ID to assign new contacts * **Default**: Unassigned (leave blank) * **How to find**: Use the HubSpot Owners API (`GET https://api.hubapi.com/crm/v3/owners`) to look up owner IDs * **Location**: In HubSpot integration settings → **Contact sync defaults** ### Workflow Triggers Automatically enroll contacts into HubSpot workflows when specific intents or tags are detected in chat transcripts. **To configure workflow triggers:** 1. Go to **Dashboard** → **Integrations** → **HubSpot** 2. Navigate to the **Workflow Triggers** section 3. Add rules with: * **Match Type**: Choose `tag` (conversation tag) or `intent` (detected intent) * **Value**: The tag or intent value to match (e.g., `sales-qualified`, `support-request`) * **Workflow ID**: The internal HubSpot workflow ID to trigger 4. Click **Add rule** for each workflow you want to configure 5. Click **Save HubSpot settings** **Example:** * **Match Type**: `tag` * **Value**: `sales-qualified` * **Workflow ID**: `12345678` * **Result**: When a conversation is tagged with `sales-qualified`, the contact is automatically enrolled in workflow `12345678` ### Timeline Logging Control whether chat transcripts are logged as notes in HubSpot. **Log Transcripts as HubSpot Notes** * **Default**: Enabled * **What it does**: Attaches the latest conversation snippet to the contact record in HubSpot * **Additional**: Notes are also associated with HubSpot tickets when available * **Location**: In HubSpot integration settings → **Timeline logging** Timeline logging keeps your sales and support teams informed about customer interactions, ensuring seamless handoffs between chatbot and human agents. ### Save Configuration After configuring all settings: 1. Review your Contact Sync, Workflow Triggers, and Timeline Logging settings 2. Click **Save HubSpot settings** to apply the configuration 3. Test by having a conversation that should trigger your configured workflows *** ## Features * **New Contact Creation**: When a visitor provides their email in chat, a contact is created in HubSpot. * **Timeline Events**: Chat sessions are logged as custom timeline events. * **Property Sync**: Basic info (Name, Email) is synced automatically. ## Ticket Sync to the Unified Inbox HubSpot conversations and tickets sync directly into BubblaV's unified **Live Support** inbox: * Tickets and their conversation threads created in HubSpot appear in the inbox within **\~2 minutes** — no forwarding or copy-pasting. * Each HubSpot conversation thread becomes its own ticket, with the HubSpot channel chip so agents can see at a glance where the customer is writing from. * New customer replies in the thread update the same ticket automatically; agent-side notes in HubSpot stay private and are not mirrored. * Ticket sync is on by default. You can pause it any time in **HubSpot integration settings → Ticket sync**. BubblaV's default OAuth request asks for exactly the scopes it uses — `crm.objects.contacts.read`, `crm.objects.contacts.write`, `crm.objects.companies.read`, `crm.objects.deals.read`, `crm.objects.owners.read`, `tickets`, `conversations.read`, `conversations.write`, `automation`, and `sales-email-read` — nothing more. ## Meeting Scheduling Visitors can book a meeting right in the chat using your HubSpot Meetings scheduling pages. When someone asks to book a call, the chatbot shares your HubSpot meeting links as booking cards; picking one opens HubSpot's own scheduler inside the chat — availability, form fields, and legal consent are all handled by HubSpot, and the booked meeting appears in your HubSpot CRM like any other meeting. | Tool | What it does | | ---------------------------- | ---------------------------------------------------------------------------- | | `hubspot_find_meeting_links` | Lists your HubSpot Meetings scheduling pages and shows booking cards in chat | | `hubspot_find_meetings` | Looks up a contact's HubSpot meetings by email address | Reconnecting: existing HubSpot connections need to reconnect **once** to grant the new scope (`scheduler.meetings.meeting-link.read` — meeting records themselves are covered by the existing contacts scope). Private-app users should add the same scope to their private app and reconnect. No other setup is required. Rescheduling and cancelling stay in HubSpot — the Meetings API doesn't support rescheduling. Visitors can change or cancel via their HubSpot confirmation email or their meeting link. ## Reply & Draft with AI Manage HubSpot conversations without leaving BubblaV: * **Reply from the inbox**: An agent reply in BubblaV is posted into the HubSpot conversation thread as a customer-visible message — the customer sees it in HubSpot, exactly where they started the conversation. * **One-click Draft reply**: The **Draft reply** button uses your knowledge base to draft a grounded response for any HubSpot ticket. Review, edit, and send it into the thread. * If a ticket has no conversation thread yet (e.g. created via API without one), the reply is saved to the ticket and flagged as not delivered so you can retry. # Instagram Source: https://docs.bubblav.com/user-guide/integrations/instagram Connect your Instagram Business account to add AI chatbot capabilities to your customer support Transform your Instagram Direct Messages with an intelligent AI chatbot that can answer questions, provide support, and engage with your customers automatically 24/7. ## Why Connect Instagram? Customers get immediate answers based on your website's knowledge base AI responds day and night, even when your team is offline Support agents can jump into any conversation from the dashboard All Instagram DM conversations are logged and searchable AI supports 100+ languages for international customers Answers based on your website's content and documentation ## What Can the Instagram Bot Do? ### Answer Customer Questions Instantly Your customers can ask questions about your products, services, or content directly through Instagram Direct Messages: **Example Questions:** ``` What are your business hours? How do I track my order? Tell me about your return policy What payment methods do you accept? ``` ### Provide 24/7 Support * Responds instantly to common questions * No waiting for business hours * Reduces support ticket volume * Consistent, accurate answers ### Search Your Knowledge Base The bot uses your website's content to provide accurate answers: * Product information * Help articles * FAQ sections * Pricing details * Shipping information ### Human Agent Handoff & Unified Inbox Instagram messages appear in your **Live Support** unified inbox alongside website widget and other platform conversations. Each conversation shows an Instagram badge so you always know the source platform. When replying to Instagram conversations from the dashboard, be aware of Meta's 24-hour messaging window. Messages sent more than 24 hours after the customer's last message will be blocked with a clear error message. **How agent replies work:** 1. Go to **Live Support** in your dashboard 2. Find the Instagram conversation (look for the Instagram badge) 3. Click to open and type your reply 4. Your message is sent directly to the customer's Instagram DM 5. The AI remains paused while you're active in the conversation The AI resumes automatically when you leave the conversation. ## Prerequisites * Instagram Business account or Creator account * Active BubblaV account with a website * Website with knowledge base content (crawled pages) ## Setup Steps Go to **Dashboard** → **Your Website** → **Integrations** and find the Instagram card Click **Connect Instagram** to open the Facebook authorization flow 1. Select which account to connect 2. Click **Select** to confirm Return to the BubblaV dashboard. The Instagram integration should now show **Connected** with your username and account ID Send a test DM to your Instagram account to verify the AI responds correctly ## Managing Your Integration ### View Connected Accounts From the Instagram configuration page, you can see all connected accounts: * Instagram username and profile picture * Display name and account type * Connection status (Active) ### Disconnect an Account To remove an Instagram account: 1. Go to **Dashboard** → **Your Website** → **Integrations** 2. Click **Instagram** → **Configure** 3. Find the account you want to remove 4. Click the disconnect button 5. Confirm the disconnection in the dialog Disconnecting an account will stop the AI from responding to DMs for that account. ## How Messages Are Processed 1. **Customer sends DM** → Message arrives at your Instagram account 2. **Webhook triggers** → BubblaV receives the message 3. **AI analyzes question** → Your website's knowledge base is searched 4. **Response generated** → AI formulates an answer with sources 5. **Sent to Instagram** → Customer receives the response in their DM 6. **Conversation logged** → Message stored in your dashboard ## FAQ Yes, the Instagram Messaging API only works with Instagram Business accounts. Personal accounts cannot receive messages via webhooks. Converting to a Business account is free and can be done in Instagram Settings. The AI uses your website's content to generate responses. To improve answer quality, ensure your website has comprehensive, up-to-date information. You can also add custom content through the Knowledge section. If the AI is unsure or the customer needs complex help, they can be escalated to a human agent. You'll see all conversations in the Live Support dashboard and can jump in anytime. ## Next Steps * Set up your [Live Support](/user-guide/live-support) to monitor conversations * Improve your [Knowledge Base](/user-guide/knowledge) content for better answers * Explore other [Integrations](/user-guide/integrations/overview) to connect more platforms # Klarna Source: https://docs.bubblav.com/user-guide/integrations/klarna Let your chatbot answer customer payment questions Enable your AI chatbot to answer Klarna payment questions, check order status, and help customers track refunds through natural conversation. ## Why Connect Klarna? * **Instant Payment Answers**: Customers get payment status, order info, and refund details immediately * **BNPL Support**: Handle Pay Later, Pay in 3/4, and Financing questions automatically * **Reduced Support Tickets**: Deflect 70%+ of common payment questions automatically * **Secure by Default**: Read-only access with email verification for each lookup ## Prerequisites Before connecting, you'll need: * A Klarna merchant account with API access * Admin access to create API credentials in Klarna Merchant Portal ## Setup Steps ### Step 1: Get Your Klarna API Credentials Go to [Klarna Merchant Portal](https://portal.klarna.com) and log in For testing, use the [Klarna Playground Portal](https://portal.playground.klarna.com) instead. Go to **Settings** → **API Credentials** → **Generate new Klarna API credentials** Download the credentials file when prompted. This file contains: * **API Username**: Your API username from Klarna * **API Password**: The API password (only shown once) Store this file securely—the password is only shown once and cannot be retrieved later. Note which region your Klarna account is in: * **EU** (Europe) * **NA** (North America) * **OC** (Oceania/Australia) ### Step 2: Connect to BubblaV Go to **Dashboard** → **Integrations** → **Klarna** Paste the **API Username** from your credentials file Paste the **API Password** from your credentials file Choose your Klarna API region (EU, NA, or OC) If using credentials from [Klarna Playground Portal](https://portal.playground.klarna.com), enable the **Test Mode** checkbox to use sandbox API Click **Connect** to validate credentials and enable payment tools *** ## Available Tools Once connected, these tools become available to your chatbot: | Tool | Description | | ---------------------------- | ------------------------------------------------------------- | | **Get Order Status** | Order status, total amount, and creation date | | **Get Payment Status** | Whether the payment is UNPAID, PAID, or CLOSED | | **Get Refund Status** | Refund amounts and processing details | | **Get Payment Info** | Payment method type and installment schedule | | **Get Order History** | List of customer's Klarna orders | | **Get Payment Methods** | Available Klarna payment options | | **Get Installment Schedule** | Detailed breakdown of Pay in 3/4 installments with due dates | | **Get Upcoming Payments** | List of pending payments with "days until due" context | | **Get Capture Details** | Shows what's been charged vs. pending (for partial shipments) | *** ## How It Works 1. **Customer asks a payment question** (e.g., "Is my Klarna payment complete?") 2. **Customer provides order reference** and email for verification 3. **AI verifies customer** by matching email to the order's billing address 4. **Data is retrieved** securely from Klarna's API 5. **Formatted response** is provided with payment status and details Customer verification uses email matching. The chatbot only provides payment information when the provided email matches the billing email on the Klarna order. Unlike some integrations, Klarna's API requires a Klarna Order ID (UUID format) for lookups. If using Shopify with the Klarna OSM app, this is extracted automatically. Otherwise, customers need to provide it from their Klarna app or email. *** ## Shopify Integration For the best experience with Shopify stores, we recommend installing the **Klarna On-site Messaging (OSM) app** with Extended Access enabled. When Extended Access is enabled, the Klarna Order ID is automatically added to Shopify order notes, allowing our chatbot to seamlessly look up Klarna payment information without requiring customers to manually provide their Order ID. ### Enable Extended Access Install the [Klarna On-site Messaging app](https://apps.shopify.com/klarna-on-site-messaging) from the Shopify App Store In the OSM app settings, ensure **Extended Access** is enabled. This is on by default. * Klarna Order ID is automatically added to Shopify order notes * A "Klarna" tag is added to orders placed through Klarna * Product images and URLs are synced to the Klarna app for customers If the Klarna Order ID is not available (e.g., OSM not installed or Extended Access disabled), the chatbot will ask the customer to provide their Klarna Order ID (UUID format) from their Klarna app or confirmation email. *** ## Security * **Read-only access**: No changes to orders or payments—information only * **Email verification**: Customers must be verified before accessing payment data * **Encrypted credentials**: API keys are encrypted at rest * **GDPR compliant**: We follow EU data protection requirements * **Regional API support**: Data stays within your configured region *** ## FAQs You need read access to the Order Management API. This provides access to order details, payment status, captures, and refunds without allowing any modifications. Customers provide their order reference number and email. The chatbot verifies that the email matches the billing address on the Klarna order before showing any payment information. No. Due to Klarna API limitations, a Klarna Order ID is required for lookups. With Shopify + Klarna OSM, this is extracted automatically. Otherwise, the chatbot guides customers to find it in their Klarna app or confirmation email. We support all Klarna regions: EU (Europe), NA (North America), and OC (Oceania/Australia). Select the correct region when configuring the integration. Yes. We use Klarna's official API with encrypted credentials. Your API key is never exposed, and we comply with GDPR and industry security standards. Yes! Enable **Test Mode** when connecting to use Klarna Playground API for testing. Use credentials from [portal.playground.klarna.com](https://portal.playground.klarna.com) to test the integration before going live. *** ## Troubleshooting ### "Invalid credentials" Error * Verify the API Username is correct * Check that the API Password is correct * Ensure you selected the correct region (EU, NA, or OC) * Verify credentials haven't been revoked in Klarna Merchant Portal ### "Order not found" Response * Verify the order reference number is correct * The order must exist in your Klarna merchant account * For very recent orders, wait a few minutes for API sync ### "Email verification failed" * The email provided must exactly match the order's billing email * Check for typos or different email addresses * Email matching is case-insensitive ### Tools Not Appearing * Verify the integration status is "Connected" * Check that tools are enabled in **Configure** → **Tools** * Refresh your integrations page *** ## Example Conversations Here are examples of how customers can interact with your chatbot: **Checking payment status:** > Customer: "Is my Klarna payment complete?" > Bot: "Let me check that for you. What's your order reference number?" > Customer: "ORD-12345" > Bot: "I found your order. ✅ Your payment is complete. Total paid: SEK 1,200.00 via Pay in 3." **Checking refund status:** > Customer: "Has my refund been processed?" > Bot: "I can check that for you. What's your order number and the email address on the order?" > Customer: "Order ABC123, email is [anna@example.com](mailto:anna@example.com)" > Bot: "Yes, your refund of SEK 299.00 was processed on December 15, 2024." **Understanding payment options:** > Customer: "What Klarna payment options do you offer?" > Bot: "We offer these Klarna options: > • Pay Later: Pay the full amount within 30 days > • Pay in 3: Split into 3 interest-free payments > • Financing: Flexible monthly payments" **Checking installment schedule:** > Customer: "When are my Klarna payments due?" > Bot: "Here's your installment schedule for order ORD-12345: > ✅ #1: SEK 400.00 - Due: Dec 1 (Paid) > ⏳ #2: SEK 400.00 - Due: Jan 1 > ⏳ #3: SEK 400.00 - Due: Feb 1" **Checking upcoming payments:** > Customer: "When is my next Klarna payment?" > Bot: "Your next payment is SEK 400.00 due on January 1 (in 10 days). You have one more payment of SEK 400.00 due February 1." **Understanding partial charges:** > Customer: "Why was I only charged for part of my order?" > Bot: "I can see that SEK 600.00 of your SEK 1,200.00 order has been captured so far. This typically happens when items ship separately. The remaining SEK 600.00 will be charged when the rest of your order ships." # Klaviyo Source: https://docs.bubblav.com/user-guide/integrations/klaviyo Connect BubblaV to Klaviyo for unified customer tracking Connect BubblaV to Klaviyo to sync chatbot-captured leads into Klaviyo and power lifecycle automation from trusted server-side flows. ## Why Connect Klaviyo? Create or update Klaviyo profiles instantly when visitors share email, phone, or consent in chat. Identify visitors by email in Klaviyo and send configured lifecycle events from controlled handoff and lead-capture flows. ## Prerequisites Before you start, make sure you have: * An **active Klaviyo account** with admin access * A **BubblaV Pro+ plan** (required for integrations) * At least one **website** set up in your BubblaV dashboard ## Installation ### Option 1 (Recommended): OAuth from BubblaV Dashboard Go to **Dashboard → Integrations → Klaviyo**. If you have multiple websites, choose the one you want to connect. If you only have one, this step is skipped automatically. Click **Connect Klaviyo**. You are redirected to Klaviyo's OAuth authorize page. Approve the requested scopes for profiles, events, lists, and account metadata. BubblaV saves tokens server-side and marks the integration as connected. ### Option 2: Direct install link Navigate to [BubblaV Klaviyo Integration](https://www.bubblav.com/api/integrations/klaviyo/install) to install. You'll be asked to select a website before the OAuth flow begins. ## What Happens After Connection Once connected, BubblaV loads Klaviyo.js on your website for client-side tracking. This enables: * **Identity tracking** — visitors identified by email in Klaviyo * **Lead sync** — chatbot-captured leads can create or update Klaviyo profiles * **List sync** — synced leads can be added to your configured default Klaviyo list * **Event tracking** — configured lifecycle events can be sent from trusted server-side workflows * **Account metadata** — your Klaviyo account name and ID stored for future sync features ## Manage the Integration ### Disconnect Klaviyo Go to **Dashboard → Integrations → Klaviyo**. Click **Disconnect** to remove the connection. BubblaV deletes stored tokens and stops loading Klaviyo.js. Disconnecting stops all tracking immediately. Data already synced to Klaviyo is not affected. ## Next Steps Use website install guides to ensure widget deployment captures enough lead volume. Customize the chatbot appearance to match your brand. # MCP Servers Source: https://docs.bubblav.com/user-guide/integrations/mcp-servers Connect to Model Context Protocol servers for advanced AI capabilities MCP (Model Context Protocol) servers extend your chatbot with standardized AI capabilities. Unlike custom tools that connect to your APIs, MCP servers provide pre-built tools following an open protocol. ## What is MCP? Model Context Protocol is an open standard for connecting AI systems to external tools and data sources. MCP servers expose: * **Tools**: Actions the AI can perform * **Resources**: Data the AI can access * **Prompts**: Pre-defined conversation templates MCP is an advanced feature. Most users should start with [Integrations Overview](/user-guide/integrations/overview) or [Custom Tools](/user-guide/integrations/custom-tools). ## When to Use MCP vs Custom Tools | Feature | Custom Tools | MCP Servers | | ---------------- | ---------------- | ------------------- | | Setup complexity | Simple | Advanced | | Protocol | HTTP/REST | MCP (SSE over HTTP) | | Best for | Your own APIs | Pre-built AI tools | | Authentication | Built-in options | Server-specific | **Use Custom Tools when:** * Connecting to your own backend * Simple API integrations * Need built-in auth options **Use MCP when:** * Using pre-built MCP servers * Need advanced AI capabilities * Building with MCP ecosystem *** ## Adding an MCP Server Go to **Dashboard** → **Integrations** → **MCP Servers** → **Add Server** MCP Servers Overview MCP Servers Overview Fill in the server configuration: **Server Name** (required) * A friendly name for this server * Example: "File Browser", "Database Query" **Server URL** (required) * The MCP server endpoint URL using Server-Sent Events (SSE) * Example: `https://mcp.example.com/sse` * Must be accessible over HTTPS If your MCP server requires authentication, add custom headers: * **Header Key**: e.g., `Authorization`, `X-API-Key` * **Header Value**: Your authentication token or key Common examples: * `Authorization: Bearer your-token-here` * `X-API-Key: your-api-key` Save the configuration. The server will connect and expose available tools. *** ## Configuration Examples ### Remote MCP Server Connect to a remote MCP server with authentication: | Field | Value | | ------- | --------------------------------------- | | Name | Custom Server | | URL | `https://mcp.example.com/sse` | | Headers | `Authorization: Bearer your-token-here` | ### Public MCP Server Connect to a public MCP server without authentication: | Field | Value | | ------- | ----------------------------------- | | Name | Public Tools Server | | URL | `https://public-mcp-server.com/sse` | | Headers | (none required) | *** ## Available Tools After connecting, the server's tools appear in your dashboard. Common tool types: * **File operations**: Read, write, list files * **Database queries**: SQL or natural language queries * **Web scraping**: Fetch and parse web content * **API integrations**: Pre-built API connectors Each tool shows: * Name and description * Required parameters * Return type *** ## Managing MCP Servers ### View Connected Servers Go to **Dashboard** → **Integrations** → **MCP Servers** to see: * Connection status * Available tools * Last activity ### Disconnect 1. Find the server card 2. Click the settings icon 3. Select **Disconnect** ### Reconnect If a server disconnects: 1. Check the server is running 2. Verify configuration 3. Click **Reconnect** *** ## Troubleshooting * Verify the server URL is correct and accessible * Check that the server supports SSE (Server-Sent Events) transport * Review authentication headers if required * Ensure the server is running and reachable over HTTPS * Wait for server initialization * Check server logs for errors * Verify server exposes tools correctly * Check network stability and HTTPS connectivity * Verify the server URL is still valid * Review server health and availability * Check authentication headers haven't expired *** ## Security Considerations MCP servers can execute code and access data. Only connect trusted servers. * **Verify sources**: Only use official or audited MCP servers * **Limit access**: Configure minimal permissions * **Monitor activity**: Review tool usage in logs * **Authentication headers**: Store sensitive tokens securely and never expose them in logs * **HTTPS only**: Always use HTTPS URLs to protect data in transit *** ## Next Steps Build simple API integrations Connect popular platforms # Facebook Messenger Source: https://docs.bubblav.com/user-guide/integrations/messenger Connect your Facebook Page to add AI chatbot capabilities to your customer support Transform your Facebook Page customer support with an intelligent AI chatbot that can answer questions, provide support, and engage with your customers automatically 24/7. ## Why Connect Messenger? Customers get immediate answers based on your website's knowledge base AI responds day and night, even when your team is offline Support agents can jump into any conversation from the dashboard All Messenger conversations are logged and searchable AI supports 100+ languages for international customers Answers based on your website's content and documentation ## What Can the Messenger Bot Do? ### Answer Customer Questions Instantly Your customers can ask questions about your products, services, or content directly through Messenger: **Example Questions:** ``` What are your business hours? How do I track my order? Tell me about your return policy What payment methods do you accept? ``` ### Provide 24/7 Support * Responds instantly to common questions * No waiting for business hours * Reduces support ticket volume * Consistent, accurate answers ### Search Your Knowledge Base The bot uses your website's content to provide accurate answers: * Product information * Help articles * FAQ sections * Pricing details * Shipping information ### Human Agent Handoff & Unified Inbox Messenger messages now appear in your **Live Support** unified inbox alongside website widget and other platform conversations. Each conversation shows a Messenger badge so you always know the source platform. When replying to Messenger conversations from the dashboard, be aware of Facebook's 24-hour messaging window. Messages sent more than 24 hours after the customer's last message will be blocked with a clear error message. **How agent replies work:** 1. Go to **Live Support** in your dashboard 2. Find the Messenger conversation (look for the 📘 badge) 3. Click to open and type your reply 4. Your message is sent directly to the customer's Messenger 5. The AI remains paused while you're active in the conversation The AI resumes automatically when you leave the conversation. ## Prerequisites * Facebook Page where you have **admin access** * Active BubblaV account with a website * Website with knowledge base content (crawled pages) ## Setup Steps Go to **Dashboard** → **Your Website** → **Integrations** and find the Messenger card Click **Connect Messenger** to open the Facebook authorization flow You'll be redirected to Facebook: 1. Log in to your Facebook account if prompted 2. Review the permissions requested 3. Click **Continue** to authorize BubblaV If you manage multiple Facebook Pages: 1. Select which page to connect 2. Click **Select** to confirm 3. If you only have one page, it will be connected automatically Return to the BubblaV dashboard. The Messenger integration should now show **Connected** with your page name and ID Send a test message to your Facebook Page to verify the AI responds correctly ## Managing Your Integration ### View Connected Page From the Messenger configuration page, you can see: * Page name and ID * Connection date * Current status ### Disconnect Your Page To remove the Messenger integration: 1. Go to **Dashboard** → **Your Website** → **Integrations** 2. Click **Messenger** → **Configure** 3. Scroll to **Danger Zone** 4. Click **Disconnect Page** 5. Confirm the disconnection **Note:** Disconnecting will stop the AI from responding to messages on your page. ## How Messages Are Processed 1. **Customer sends message** → Message arrives at your Facebook Page 2. **Webhook triggers** → BubblaV receives the message 3. **AI analyzes question** → Your website's knowledge base is searched 4. **Response generated** → AI formulates an answer with sources 5. **Sent to Messenger** → Customer receives the response 6. **Conversation logged** → Message stored in your dashboard ## Facebook Messaging Policies ### 24-Hour Messaging Window Facebook has specific policies about when you can send messages: * **Standard messaging**: Within 24 hours of customer's last message * **After 24 hours**: Only specific message tags are allowed * **Our bot tracks**: We automatically respect the 24-hour window ### Rate Limits * 200 messages per user per hour * Messages are truncated at 2000 characters * Our implementation handles these limits automatically ## Troubleshooting ### Messages Not Being Received 1. **Check webhook status** in Meta Developer Console 2. **Verify Page is subscribed** to messaging events 3. **Check BubblaV logs** for errors in the dashboard 4. **Confirm integration is active** in your settings ### Bot Not Responding 1. **Verify integration is active** in the dashboard 2. **Check your website has crawled content** in Knowledge section 3. **Ensure you're within rate limits** (not exceeding 200 messages/hour) 4. **Test with a simple question** like "What are your hours?" ### OAuth Errors 1. **Verify redirect URI** matches: `https://your-domain.com/api/integrations/messenger/callback` 2. **Check Facebook App permissions** include `pages_messaging` 3. **Try disconnecting and reconnecting** the integration 4. **Ensure you're a Page admin** with proper permissions ### Human Takeover Not Working 1. **Check Live Support is enabled** for your website 2. **Verify agent is active** in the conversation 3. **Look for takeover status** in the conversation metadata 4. **Ensure the AI paused** when agent joined ## FAQ For testing with your own Facebook account, no review is needed. For production use where non-admin users interact with the bot, you may need to submit your Facebook App for review with the `pages_messaging` permission. Currently, each website connects to one Facebook Page. To connect multiple pages, you can create additional websites in your BubblaV dashboard, each connected to a different page. Page access tokens obtained through OAuth don't expire. If you lose access to your Page or the token becomes invalid, simply disconnect and reconnect through the integration settings. The AI uses your website's content to generate responses. To improve answer quality, ensure your website has comprehensive, up-to-date information. You can also add custom content through the Knowledge section. Instagram DM uses the same Messenger API infrastructure. Support for Instagram is planned for a future update. If the AI is unsure or the customer needs complex help, they can be escalated to a human agent. You'll see all conversations in the Live Support dashboard and can jump in anytime. ## Next Steps * Set up your [Live Support](/user-guide/live-support) to monitor conversations * Improve your [Knowledge Base](/user-guide/knowledge) content for better answers * Explore other [Integrations](/user-guide/integrations/overview) to connect more platforms # Newsletter Integration Source: https://docs.bubblav.com/user-guide/integrations/newsletter Grow your audience by collecting newsletter subscribers directly through your chatbot. # Newsletter Integration The **Newsletter** integration empowers your chatbot to proactively gather visitor emails and drive conversions. It supports newsletter subscriptions and optional discount incentives. ## Features * **Newsletter Subscription**: The chatbot can ask visitors to subscribe to your newsletter. * **Discount Codes**: Offer incentives (discount codes) in exchange for visitor contact information to boost sign-ups. * **Configurable**: Enable only the scenarios you need and customize the offers. ## Setup 1. Go to your **BubblaV Dashboard** > **Integrations**. 2. Find the **Newsletter** integration card. 3. Click **Connect**. 4. You will be redirected to the **Configuration** page. ## Configuration ### Newsletter Subscription This is the core feature. * The bot will ask for the visitor's email address and optionally their name when they express interest in subscribing. ### Newsletter Discount Code Enable this to offer a discount code to visitors as an incentive to subscribe. * **Discount Code**: Enter the code you want to give (e.g., `SAVE10`). * **Offer Description**: Describe the offer (e.g., "10% off your first purchase"). The bot will use this information to answer questions like "Do you have any coupons?" or proactively offer the discount if contextually appropriate, asking for an email address before revealing the code. ## Requirements * **Plan**: Available on all plans. # Notion Source: https://docs.bubblav.com/user-guide/integrations/notion Use your Notion workspace as a knowledge source for your AI chatbot Transform your Notion workspace into an intelligent knowledge base for your AI chatbot. Connect pages, docs, and wikis to provide instant answers from content you already maintain. ## Why Connect Notion? Use your existing Notion docs as AI knowledge without duplication Content changes in Notion are automatically detected and synced AI understands context and meaning, not just keywords Choose exactly which pages to include ## Prerequisites * Active Notion workspace with pages you want to use as knowledge * A BubblaV website with an active subscription * Notion OAuth credentials configured in your environment ## Setup Steps Go to **Dashboard** → **Integrations** → **Notion** Click **Connect Notion** and authorize via OAuth Browse your workspace and select pages to sync Content will sync automatically based on your plan's frequency *** ## Content Syncing Notion content is synced automatically according to your plan's crawl frequency: * **Free**: No automatic syncing * **Pro**: Weekly ### Incremental Crawling The integration uses incremental crawling to efficiently update only changed content: * Tracks `last_edited_time` from Notion API * Only fetches and re-processes modified pages * Saves resources and speeds up sync cycles ### Supported Content Types | Block Type | Output | | ---------------- | ---------------------------- | | Headings (H1-H3) | Plain text with markers | | Paragraphs | Plain text | | Bullet lists | `- item` format | | Numbered lists | `1. item` format | | To-do items | `[x]` or `[ ]` format | | Code blocks | Formatted code with language | | Quotes | `> text` format | | Callouts | `> text` format | | Dividers | `---` separator | | Images/Files | `[type]` placeholder | *** ## Selecting Sources After connecting, you can browse and select specific sources: 1. Go to **Dashboard** → **Integrations** → **Notion** 2. Click **Browse Pages** to see accessible content 3. Toggle pages to include or exclude 4. Click **Save Selection** Start with your most important documentation pages and expand from there. Selective syncing keeps your knowledge focused and relevant. *** ## Sync Status Each selected page has a sync status: * **pending**: Waiting to be synced * **syncing**: Currently being processed * **synced**: Successfully synced and up-to-date * **failed**: Error during sync (check error message) View status and last sync time for each source in the integration settings. *** ## Test Your Integration Try these queries on your website: * "What's your return policy?" (if in your docs) * "How do I reset my password?" * "What are your pricing plans?" The AI will search your Notion content and provide accurate answers. *** ## Troubleshooting * Verify you granted access to your workspace during OAuth * Check that you're selecting from the correct workspace * Ensure pages are shared with the integration * Page may have been deleted or moved * You may have lost access to the page * Check error\_message in the integration settings * Try re-syncing the page * Wait for sync to complete (check status) * Verify the page is selected as a source * Check that content has actual text content * Wait for next scheduled sync based on your plan * Verify changes are saved in Notion **Security**: Notion connections use OAuth 2.0 for secure, authenticated access. Your credentials are never stored or shared. # Optimizely Source: https://docs.bubblav.com/user-guide/integrations/optimizely Add the BubblaV widget to your Optimizely Content Cloud site Add the BubblaV AI chatbot to your **Optimizely Content Cloud** (formerly Episerver) site in minutes. Paste one widget snippet and BubblaV starts answering visitor questions from your published content — no code or rebuild required. Optimizely Content Cloud is the CMS formerly known as **Episerver**. This guide covers both. ## Why Add BubblaV to Optimizely? Paste a single snippet into a layout template or block — no SDK or build step. BubblaV crawls your published Optimizely pages and answers from your real content. Answers visitors in Swedish, English, and 30+ languages out of the box. Escalate complex conversations to your team with full chat history. ## Prerequisites * An Optimizely Content Cloud site with **edit and publish** access * A BubblaV account and your site added in the dashboard * Your BubblaV widget snippet (from **Dashboard → Installation**) ## Setup Steps In BubblaV, go to Dashboard → Installation for your site and copy the one-line widget snippet. Choose one of the methods below — all three work on Optimizely Content Cloud. Save and publish your changes so the snippet is live on your site. ### Method 1: Edit a Layout Template (Recommended) Adds the chatbot globally so it appears on every page. 1. Go to **UI Mode → File Manager**. 2. Open your layout template (for example, `Layout.cshtml` or `_Layout.cshtml`). 3. Paste the widget snippet just before the closing `` tag. 4. **Save and publish** the template. ### Method 2: Use a Script Container / HTML Block A no-code option that avoids editing templates. 1. In **Edit Mode**, open the page where you want the chatbot. 2. Add a **Script Container** or **HTML block** to the footer area. 3. Paste the widget snippet (use the full snippet including the ` ``` Search Widget Installation ### What is data-element-id? The `data-element-id` attribute is **required** and tells the widget which HTML element to embed into. The widget will render inside the specified element on your page. **How to use it:** 1. Create a container element in your HTML with an ID: ```html theme={null}
``` 2. Use that same ID as the value for `data-element-id` in your script tag: ```html theme={null} ``` The widget will automatically find the element with the matching ID and render inside it. *** ## How It Works 1. **User types a query**: Search widget captures the input 2. **AI searches your knowledge base**: Uses semantic search to find relevant content 3. **Results appear instantly**: Shows concise answers with source links 4. **User clicks a result**: Jumps directly to the relevant page *** ## Best Practices Put the search widget where users expect to find search functionality—typically in the header or navigation. Icon mode for minimal designs, compact for headers, full mode for search-focused pages. Choose a theme (light or dark) that matches your website's design. Try common queries your visitors might ask to ensure good results. *** ## Troubleshooting * Check the installation script is correct * Verify the container element with the ID specified in `data-element-id` exists on the page * Ensure `data-element-id` matches the ID of your container element * Check browser console for errors * Ensure your site ID is correct * Verify your knowledge base has content * Check that pages are crawled and indexed * Try different search queries * Check if your site's CSS is overriding widget styles * Try using a different display mode * Contact support for custom styling help *** ## Next Steps Ensure your content is indexed for good search results Customize your chatbot appearance # Settings Source: https://docs.bubblav.com/user-guide/settings Configure your website settings and preferences Manage your website settings, notifications, and team access all in one place. Bot behavior and custom instructions are now configured in the **Behavior** page in the sidebar. See [Human Handoff Scenarios](/user-guide/human-handoff) for details. Settings Overview Settings Overview ## Accessing Settings Go to [bubblav.com/dashboard](https://www.bubblav.com/dashboard) Click on the website you want to configure Click **Settings** in the sidebar menu *** ## General Settings Basic configuration for your website. ### Website Name The display name shown in your dashboard. This is for your reference only—customers don't see this. ### Website URL The primary domain where your chatbot is installed. Used for: * Crawling your website content * CORS security (widget only loads on this domain) * Analytics tracking Changing the URL may affect your widget installation. Update your embed code if needed. ### Allowed Domains Control which domains can embed and use this chat widget. #### Allow All Domains (Recommended) By default, **Allow all domains** is enabled. This means your widget will work on any domain without restrictions. This is the best option if you: * Use **Framer**, **Shopify**, **Webflow**, or similar platforms that may add preview or custom domains over time * Have multiple domains or subdomains pointing to the same site * Are unsure which domains will serve your widget in the future #### Restrict to Specific Domains If you want tighter control, disable **Allow all domains** to restrict the widget to specific domains only. Once disabled, you can add allowed domains: 1. Enter the domain in the input field (e.g., `stage.example.com`) 2. Supports wildcards like `*.example.com` for all subdomains 3. Click **Add** to add it to the list 4. Click **Save Changes** to apply When restricted mode is on, the primary domain (website URL) and your dashboard domain are always allowed automatically. If you restrict domains and your widget stops working on a domain, go to Settings → Allowed Domains, toggle **Allow all domains** on (or add the missing domain), and save. ### YOLO Mode (Unrestricted Knowledge) By default, your chatbot and Copilot answer only from your website's knowledge base. **YOLO Mode** is an optional toggle (off by default) that lets them answer beyond your content. When ON, your chatbot and Copilot may answer using their own general knowledge and live web search — not just your website's knowledge base. They can still use your site's tools for site-specific facts. Side effects: answers may be less on-brand or occasionally inaccurate, and web-search calls add to your AI usage. Leave YOLO Mode OFF to keep the bot strictly limited to your website's content. ### Auto-Apply Learned Answers BubblaV can draft new Q\&A entries from your real conversations — agent replies on resolved chats, bot recoveries, and thumbs-down threads. Drafts always wait for your review in **Knowledge → Q\&A**. **Auto-apply learned answers** (off by default, Pro plan) publishes strong-evidence drafts immediately — typically answers written by a human agent on a resolved chat — while weak drafts still queue for review. See [Self-Learning](/user-guide/knowledge/self-learning). *** *** ## Danger Zone Irreversible actions that affect your website. ### Delete Website Permanently removes: * All conversations * Knowledge base content * Settings and integrations * Team member access This action cannot be undone. Export your data first if needed. At the bottom of Settings Opens confirmation dialog Type the exact website name to confirm Click **Delete Permanently** *** ## Troubleshooting * Check your internet connection * Ensure you clicked "Save Changes" * Refresh the page and try again * Check browser console for errors * Check spam/junk folder * Verify email address is correct * Resend the invitation * Ask them to add [notifications@bubblav.com](mailto:notifications@bubblav.com) to contacts * Verify email address is correct * Check spam folder * Enable browser notifications in [Account Settings → Notifications](/user-guide/account-settings) (push is per browser) * Check notification toggles are enabled for the relevant type and channel *** ## Next Steps Configure bot instructions and human handoff Customize appearance Track performance # Smart Triggers: Let Your Chatbot Start the Conversation Source: https://docs.bubblav.com/user-guide/smart-triggers Proactively message visitors at the right moment — after time on a page or on exit intent — with an AI-personalized opener, URL targeting, cooldowns, and visitor-friendly suppression. Most chatbots wait for the visitor to speak first. With **Smart Triggers**, your BubblaV chatbot opens the conversation itself — at the moment a visitor is most likely to engage: after they've spent two minutes on your pricing page, or right as they're about to leave. You define *when* the chatbot reaches out and *what it says*. The AI personalizes the opener for each visitor from your message template, and an optional **conversation goal** steers the replies that follow. Smart Triggers require a **Pro plan**. Delivered trigger messages do **not** count toward your monthly message quota — like cart recovery, they're free to send. ## How Smart Triggers work 1. A visitor lands on a page that matches your trigger's URL rules. 2. The behavior condition is met — the time-on-page delay elapses, or exit intent is detected (the mouse moves toward the top of the window on desktop, or the visitor switches tabs on mobile). 3. The chatbot opens the conversation in the widget with your message, personalized by the AI from your template. If the AI is unavailable, your template is sent exactly as written. 4. If the visitor replies, the conversation continues like any other chat — same knowledge base, tools, and handoff rules — steered by your conversation goal. ## Trigger types Fires after a visitor has spent a set amount of time (5–3,600 seconds) on a matching page — for example, 2 minutes on `/pricing`. Fires when a visitor is about to leave: the mouse moves toward the top of the window (desktop) or they switch to another tab (mobile). Detection arms after 10 seconds on the page, so instant bounces never trigger it. ## Create a trigger In the dashboard, open your website and go to **Chatbot → Smart Triggers**, then click **New Trigger**. Give it a name (e.g. "Pricing page — offer plan help"), pick a trigger type, and for time-on-page triggers set the delay in seconds. Choose how the URL is matched — **contains**, **is exactly**, or **starts with** — and add up to 10 patterns like `/pricing`. Leave the patterns empty to trigger on all pages. This is your message template (up to 500 characters). The AI personalizes it for each visitor using the page context; if the AI is unavailable, it's sent as-is. Describe how the AI should steer the conversation after the visitor replies — e.g. "Help the visitor compare plans and offer a demo if they hesitate." (Up to 1,000 characters.) How long to wait before the same visitor can see this trigger again: 1 hour, 24 hours, 7 days, or 30 days. New triggers are saved as **drafts** — they don't fire until you switch them on. Test the message first, then activate. ## Test before activating Every trigger has a **Test this trigger** panel with two ways to preview it safely: * **Preview message** — generates a sample opener with the exact same AI path a real visitor fire uses. No visitor is contacted, and each preview shows a fresh variation. * **Open in Test page** — opens the chatbot [Test page](/user-guide/testing) with the trigger simulated, so you can chat as a visitor and check that the conversation goal steers the replies the way you want. Once you're happy, flip the trigger's switch to active. From **Knowledge → Pages**, use the quick-create action on any page to start a trigger with its URL and name already filled in. ## When a trigger stays silent Smart Triggers are deliberately conservative, so visitors never feel spammed. A trigger is held back when: * **It's still on cooldown** — the visitor saw this trigger recently (per the re-show setting). * **The visitor already replied** — a visitor who replies to a trigger is never shown that same trigger again. * **Another trigger just fired** — each visitor gets at most one proactive message per 5-minute window, across all triggers on your website. * **Live support is involved** — if the visitor has a recent conversation with a human teammate, triggers stay quiet. * **The trigger is a draft** — inactive triggers never fire. ## Language of the opener The AI writes the personalized opener in the language of the page content that was crawled for the matching page (English if unknown) — not necessarily the visitor's browser language. If your site is in German, the opener is in German. ## Best practices * **Lead with value, not "Can I help?"** — reference what the visitor is looking at: "Still comparing plans? Tell me what you're building and I'll narrow it down." * **Set a real conversation goal** — the opener gets the reply; the goal converts it. * **Start narrow** — target one high-intent page (pricing, checkout, docs) rather than every page, with a 24-hour or longer cooldown. * **Use exit intent for hesitation, not goodbye** — a discount or a "wait, one question" message works better than a generic farewell. ## Plans & limits Smart Triggers require a **Pro plan** or higher. There's no limit on the number of triggers you can create per website. Delivered trigger messages don't count toward your plan's message quota. See [Billing & Plans](/user-guide/billing) for details. ## Related The Test page where trigger simulations run. Escalate a triggered conversation to a live teammate when it needs a human. More proactive outreach: bring back abandoned Shopify carts the same way. How the chat widget looks when it opens with your message. # Team Management Source: https://docs.bubblav.com/user-guide/team Invite callers to collaborate on your chatbots BubblaV enables you to invite team members to help manage your chatbots, knowledge base, and customer conversations. Team management is **website-specific**, meaning you invite members to specific websites rather than your entire account. ## Inviting Team Members Team member limits depend on your subscription plan. Free is limited to 1 user (Owner). Pro allows 3 members. 1. Open the specific website you want to share from your Dashboard. 2. Navigate to the website's main dashboard page (overview). 3. Locate the **Team Members** section on the right side of the page. 4. Click **Invite Member**. 5. Enter their **Email Address**. 6. Click **Send Invitation**. The user will receive an email with a unique link to join your team. Team management is **website-specific**. Each website has its own team members. When you invite someone, they get access to that specific website only. ## Team Member Access All invited team members have full access to manage the website, including: * Editing chatbot settings and design * Managing knowledge base and content * Viewing conversations and analytics * Using live support features * Managing integrations Only the website **Owner** can: * Manage billing and subscription * Delete the website * Invite and remove team members ## Managing Invitations ### Pending Invitations Once sent, an invite appears in the "Pending" list. You can: * **Resend**: If the user didn't receive the email. * **Revoke**: Cancel the invitation before they accept. ### Accepting an Invitation 1. The invitee clicks the link in their email. 2. They will be prompted to log in or sign up. 3. Once authenticated, they must click **Accept Invitation**. 4. They will be redirected immediately to the website dashboard. ## Removing Members To remove access for a team member: 1. Go to the **Team Members** section. 2. Find the user in the list. 3. Click the **Remove** (trash icon) button. 4. Confirm user removal. Access is revoked immediately. # Testing Source: https://docs.bubblav.com/user-guide/testing Preview and test your chatbot before going live Before adding the chatbot to your public website, it's important to test its responses and behavior. ## Testing Environments There are two ways to test your chatbot within the dashboard: the **Design Preview** for visuals and the **Dedicated Test Page** for behavior. ### 1. Design Preview The **Design** page features a real-time preview of your widget's appearance. 1. Navigate to your website dashboard. 2. Click **Design** in the sidebar. 3. The right side of the screen shows a fully interactive preview. **Best for:** Checking visual changes like colors, positioning, and welcome messages. ### 2. Dedicated Test Page For evaluating the chatbot's **intelligence and responses**, use the dedicated Test page. 1. Click **Test** in the sidebar menu. 2. This opens a full-screen chat interface with a **Debug & Improve** side panel. **Features of the Test Page:** * **Full-screen chat**: Focus entirely on the conversation without distraction. * **Debug & Improve panel**: A side panel (desktop only) that shows confidence scores, sources, and improvement tips for each bot response. * **Confidence monitoring**: Every bot response is analyzed and given a confidence score — helping you quickly spot weak answers. * **Quick Q\&A creation**: Add Q\&A entries directly from the test page when the bot struggles with a question. * **Reset Chat**: Start a new conversation by clicking "New Chat". ## Debug & Improve Panel The **Debug & Improve** side panel (visible on desktop) gives you real-time insight into how the bot answered each question. ### Confidence Scores After each bot response, the panel displays a confidence indicator: | Level | Score | Meaning | | ---------- | --------- | ----------------------------------------------------------------------------------------- | | **High** | 70%+ | The bot found relevant content and answered confidently. | | **Medium** | 40–69% | The bot found some content but may not have fully answered. Consider adding a Q\&A entry. | | **Low** | Below 40% | The bot could not find enough information. Adding a Q\&A entry will help. | ### Sources The panel lists the **sources** the bot used to generate its answer. You can click any source to open it and verify the content is accurate and up to date. ### Low-Confidence Alerts When the bot's confidence drops below 70%, a low-confidence alert appears below the response. On mobile devices, this alert appears inline; on desktop, the side panel highlights the issue. ### Quick Actions For medium and low-confidence responses, a **"Add Q\&A for this question"** button appears in the panel. Clicking it opens a dialog pre-filled with the question you asked, so you can quickly provide the correct answer. ## What to Test ### Knowledge Accuracy Ask questions about your business to ensure the AI has learned your content correctly. * **Product details**: "What is the price of X?" * **Policies**: "What is your return policy?" * **Support**: "How do I contact support?" Use the confidence score and sources in the Debug panel to verify each answer. If the score is low or the sources are wrong, update your content. ### Behavior Check that the bot adheres to your settings: * Does it use the correct tone? * Does it escalate to human support when needed? * Does it capture lead information? ### Debugging If the bot says "I don't know" or gives wrong information: 1. Check the **confidence score** and **sources** in the Debug panel to understand why. 2. Add missing information to the **Knowledge Base**. 3. Use the **"Add Q\&A"** button in the panel to provide a direct answer for that specific question. 4. Use the **Q\&A** section or resolve **Content Gaps** for broader improvements. ## Best Practices To learn how to get the most out of testing and continuous improvement, check out our [Best Practices](/user-guide/best-practices) guide which covers the full cycle of crawling, testing, adding knowledge, and monitoring. # Widget Design Source: https://docs.bubblav.com/user-guide/widget-design Customize the look and feel of your chatbot widget Make your chatbot feel like a natural part of your website. Customize colors, position, branding, and messaging to match your brand perfectly. ## Accessing Design Settings Go to [bubblav.com/dashboard](https://www.bubblav.com/dashboard) Click on the website you want to customize Click **Design** in the sidebar menu Widget Design Overview Widget Design Overview *** ## Design Options The design settings are organized into collapsible sections to help you focus on specific parts of the widget. ### 🎨 Color Palette Presets Choose from professionally designed color themes if you want a quick start. **Automatic Color Detection**: When you add a new website, BubblaV automatically analyzes your site's colors and applies a matching theme to your widget. **Manual Color Extraction**: You can also extract colors from any website URL: 1. Expand the **Color Palette Presets** section 2. Enter a website URL in the text field at the bottom 3. Click **Extract Colors** to analyze and apply the color scheme *** ## Basic Settings Configuration for the widget's general behavior and appearance. ### General * **Show Expand Button**: Allow users to expand the chat widget to a larger size. * **Show "Powered by" branding**: Toggle the BubblaV branding (available on Pro+ plans). ### Dimensions Customize the size of the widget window: * **Widget Width**: Default is `400px`. * **Widget Height**: Default is `650px`. ### Bubble Appearance Customize the floating chat button: * **Bubble Color**: The background color of the chat button. * **Bubble Icon Color**: The color of the icon inside the button. ### Positioning Choose where the chat button appears on Desktop and Mobile: * **Bottom Right**: Standard convention. * **Bottom Left**: useful if you have other widgets on the right. *** ## Screen Configuration The widget is divided into three main screens, each with its own customization options. ### 🏠 Home Screen The first screen users see when they open the widget. * **Welcome Message**: The greeting text displayed at the top. * **Background Style**: Solid color or gradient. * **Chat Suggestions**: Quick-start questions to guide users. ### 💬 List Screen (Messages) The screen displaying the history of conversations. * Customize the title, background colors, and unread indicator settings. ### 💭 Chat Screen The active conversation interface. * **Bot Identity**: Set the Bot Name and upload a custom Avatar. * **Colors**: Customize message bubbles (User vs Bot), text colors, and the input area. * **Placeholder Text**: The text shown in the message input field before typing. *** ## Advanced Settings ### Exclude URLs Prevent the widget from appearing on specific pages: 1. Expand the **Advanced Settings** section. 2. Enter the URLs where you want to hide the widget (one per line). 3. You can use specific paths like `/checkout` or full URLs. ### Product Card Layout Control how product cards are displayed in chat responses: **Vertical Layout** (default): * Product cards stack vertically. * Each card takes full width. * Best for detailed product information. **Horizontal Layout**: * Product cards display side-by-side (carousel). * Users can scroll horizontally to see more products. * Compact view, good for showing multiple options. ### Product Card Button Labels Customize the text on the buttons of every product card shown in chat responses: * **"View" Button Label**: The text on the main product card button. Default is `View`. * **"View detail" Button Label**: The text on the button that opens the product detail view. Default is `View detail`. Leave a field empty to use the default text. Each label can be up to 40 characters. This is useful for localizing the buttons to your customers' language (e.g. Turkish `Ürünü İncele`). The labels apply everywhere product cards appear — custom "Show as Product Cards" responses and Shopify/Haravan product results — on both the vertical and horizontal layouts, and in the product detail view. *** ## Live Preview The design page includes a real-time preview: * **Desktop view**: See how it looks on larger screens. * **Mobile view**: Toggle to see mobile responsiveness. * **Inline Editing**: Click on any text, button, or color in the preview to edit it directly. Live Widget Design and Preview Live Widget Design and Preview For a full-screen testing experience, use the dedicated **Test** page available in the dashboard sidebar. This allows you to test the chat behavior without the design tools cluttering the view. ### ⚡ Inline Editing The fastest way to customize your widget is by clicking on elements directly in the live preview. * **Text Editing**: Click on titles, labels, or names to edit them in-place. * **Color Picking**: Click on any colored area (like the header or bubble) to open the color picker. * **Images**: Click on the bot avatar or logo to update their URLs. * **Layout Toggles**: Switch between product card layouts by clicking on the cards. * **Button Labels**: Click a product card button in the preview to jump to its label setting under Advanced Settings. Clicking on an element opens an inline editor. Make your changes and click **Save** to apply them, or **Cancel** to revert. *** ## Saving Changes Inline edits are saved to your history as you confirm them. You can use Undo/Redo to manage changes. Sidebar changes are not live until you save! Check your changes in the live preview. Click **Save** at the bottom of the form. Reload your website to see the updates — changes usually appear within a minute (up to 5 minutes if caching hasn't cleared). Changes usually appear on your live site within a minute. In rare cases, caching can delay them by up to 5 minutes — reload the page or open your site in an incognito window to verify the latest version. *** ## Design Best Practices Your brand colors are automatically extracted when you add a website. You can also manually extract colors from any URL in the Color Palette Presets section, or set your primary brand color for the Bubble and User Messages manually. Ensure high contrast between text and background colors. Dark text on light backgrounds is generally the most readable. If you enable the **Expand Button**, check that the larger widget size doesn't cover important content on your site. Customize the **Welcome Message** on the Home Screen to sound friendly and helpful. *** ## Troubleshooting * Ensure you clicked **Save**. * Reload the page — changes usually appear within a minute. * If still not showing, wait up to 5 minutes for caching to clear, then reload (or open your site in an incognito window). * Try changing the **Positioning** (Left vs Right). * Use **Advanced Settings > Exclude URLs** if it shouldn't appear on certain pages. *** ## Next Steps Preview your chatbot in action Add the widget to your website