# Manage Subscription
Source: https://docs.bestchatbot.io/billing/manage-subscription
Upgrade, downgrade, or manage your BestChatBot subscription.
# Manage Your Subscription
BestChatBot uses **Stripe** for payment processing. You manage your subscription from the dashboard. Here is how.
## Viewing Your Current Plan
Open the **Billing** section from the dashboard sidebar.
Your current plan is displayed on a subscription card showing:
* Plan name and tier
* Monthly price
* Renewal date
* Current usage
## Upgrading Your Plan
Open the **Billing** section from the sidebar.
You'll see the available plans. Click **Upgrade** on the plan you want.
You'll be directed to a Stripe checkout page to enter or confirm your payment details. After payment, the upgrade takes effect immediately.
When upgrading mid-cycle, you're charged a prorated amount for the remaining days in your billing period.
## Downgrading Your Plan
From the Billing section, click **Manage Subscription** to open the Stripe customer portal.
Choose the plan you want to downgrade to.
The downgrade takes effect at the end of your current billing cycle. You'll keep your current plan's features until then.
If your current usage exceeds the limits of the lower plan (e.g., more scraped pages or workspaces), you may need to reduce your usage before the downgrade takes effect.
## Managing Payment Methods
Through the **Stripe Customer Portal**, you can:
* Update your credit card or payment method
* View past invoices and receipts
* Download invoices for accounting
## Canceling Your Subscription
To cancel, open the Stripe Customer Portal and select **Cancel Subscription**. Your plan will remain active until the end of the current billing period, then revert to the Free plan.
Canceling doesn't delete your data. Your knowledge base, settings, and history remain intact. You can resubscribe at any time to pick up where you left off.
## Next Step
Monitor how many bot responses you've used this month.
# Pricing Plans
Source: https://docs.bestchatbot.io/billing/pricing-plans
Compare BestChatBot plans and find the right one for your website.
# Pricing Plans
BestChatBot offers flexible plans to match your traffic and needs. All plans include core AI chatbot functionality. Higher tiers add more capacity and advanced features.
## Plan Comparison
| Feature | Free | Starter | Pro ⭐ | Business |
| ----------------------------------- | ---- | ------- | ----- | -------- |
| **Monthly Price** | \$0 | \$39 | \$79 | \$179 |
| **Widget Responses/mo** | 75 | 800 | 2,000 | 5,000 |
| **Scraped Pages** | 5 | 30 | 75 | 150 |
| **Daily Rebuilds** | 1 | 1 | 2 | 3 |
| **Knowledge Base Size** | 1 MB | 15 MB | 30 MB | 50 MB |
| **Workspaces** | 1 | 2 | 5 | 10 |
| **Invitable Members** | 0 | 2 | 3 | 4 |
| **Operators** | 1 | 2 | 4 | 5 |
| **Human handoff (dashboard)** | ✅ | ✅ | ✅ | ✅ |
| **Human handoff (Slack & Discord)** | — | — | ✅ | ✅ |
| **Agentic Integrations** | — | — | ✅ | ✅ |
| **Hide "Powered by" badge** | — | — | ✅ | ✅ |
The **Pro** plan is the most popular choice for growing sites.
**Invitable members** are in addition to the workspace owner, who never counts toward the limit. A Pro workspace can have you plus 3 teammates. **Agentic Integrations** let your bot take real actions (book meetings, open tickets, look up orders) and are included in **Pro** and **Business**. See [Members & Roles](/workspace/members-roles) and [Agentic Actions](/integrations/agentic-actions).
**Human handoff** works on every plan: as the workspace owner you're a reserved operator, so you can answer live chats even on Free. Extra operators use seats that scale with your plan, and answering from **Slack or Discord** is a Pro and Business feature. See [Human Handoff](/live-chat/human-handoff).
## Choosing the Right Plan
Start with the **Free** plan. You get 75 widget responses per month to test the bot with your visitors.
The **Pro** plan gives you the best balance of features and capacity for sites with steady traffic.
The **Business** plan offers the most responses and the largest knowledge base for demanding environments.
Higher plans include more workspaces, so you can run a separate widget for each site or brand from one account.
## Next Steps
Upgrade, downgrade, or manage your plan.
Monitor your monthly response usage.
Invite others and earn recurring commission on what they pay.
# Referral Program
Source: https://docs.bestchatbot.io/billing/referrals
Share BestChatBot with others and earn recurring commission every time someone you referred pays.
# Referral Program
Know someone who'd get value from BestChatBot? Share your referral link. When they sign up through it and start paying, you earn a **recurring commission** on every payment they make, for as long as they stay subscribed.
The referral dashboard is **read-only**. It shows your link, who you've invited, and what you've earned. There's nothing to configure. Find it under the **Referrals** tab in your dashboard.
## How You Earn
* **40% recurring commission.** Every time someone you referred pays their subscription, 40% of that payment is credited to you as earnings. It repeats each billing cycle they stay subscribed, not just the first one.
* **Monthly close.** Earnings accrue as they happen and are grouped into monthly periods. At the end of each month, that period closes and its total is finalized.
* **Manual payout.** Payouts are handled manually by our team. Your dashboard tracks what you've accrued and its status, and we settle up with you directly.
Referral commission applies to subscription payments processed through **Stripe**.
## Your Invite Link
Your dashboard gives you a unique referral link to share. Anyone who lands on BestChatBot through it is attributed to you.
* **First touch wins.** The first referral link a new visitor arrives through is the one that counts. If they later click someone else's link, the original attribution stays.
* **It lasts 30 days.** The link is remembered in the visitor's browser for 30 days. If they sign up within that window, the referral is credited to you, even if they don't subscribe right away.
* **Copy and share it anywhere.** Use the **Copy** button next to your link and drop it in a message, a post, or an email.
## Tracking Your Referrals
The **Referrals** tab shows everything about your referrals in one place. It's read-only, so it's just there to keep you informed.
* **Your referral link**, ready to copy.
* **Earnings**, broken down by status: **Accrued** (credited to you), **Paid** (already settled), **Pending** (in an open period), and **Refunded** (a payment was refunded or the charge reversed). Amounts are grouped by currency.
* **Invitees by stage**, a funnel showing how many people are at each step: **Signed up**, **Paying**, and **Churned**.
* **Invitees**, a table listing each person you referred with their stage, when they were attributed, and their contribution to your earnings. People who haven't shared their details show as **Anonymous**.
Use the date filter above the earnings to focus on a specific period, then clear it to see everything again.
## Next Steps
See the plans your referrals can choose from.
Upgrade, downgrade, or manage your own plan.
# Usage Tracking
Source: https://docs.bestchatbot.io/billing/usage-tracking
Monitor your monthly response usage and stay within your plan limits.
# Usage Tracking
BestChatBot tracks your **monthly widget responses** so you always know how much of your plan you've used. Usage resets at the beginning of each billing cycle.
## Viewing Your Usage
In the dashboard, you'll find usage information in several places:
### Usage Indicator
A quick-glance indicator in the sidebar or top bar shows your current usage as a percentage of your plan limit.
### Usage Chart
The **Billing** section includes a chart showing your response usage over time, so you can see trends and predict when you might approach your limit.
### Workspace Distribution
If you have multiple workspaces (multiple widgets), you can see how usage is distributed across them. This helps you identify which sites are most active.
## What Counts as a Response
A **bot response** is any answer the bot actually generates and returns — on your live widget **or** in the Retrieval Testing page. A successfully executed agentic action also counts. If the bot doesn't deliver a result, you aren't charged.
| Action | Counts as Response? |
| -------------------------------------------------------- | ------------------- |
| Widget answers a visitor message | Yes |
| Retrieval Testing produces an answer | Yes |
| Agentic action runs successfully (e.g., books a meeting) | Yes |
| Agentic action only offered, not run by the visitor | No |
| Agentic action fails or is unavailable | No |
| Bot can't answer (no response generated) | No |
| Rebuilding the knowledge base | No |
| Uploading documents | No |
You're billed only when the bot produces a real result. Offering an action, failing, or not finding an answer is free.
## Approaching Your Limit
When you're nearing your monthly limit:
* The usage indicator changes color to warn you
* You can upgrade your plan at any time to get more responses
Once you hit your monthly limit, the widget will stop responding to visitors until the next billing cycle or until you upgrade.
## Usage by Plan
| Plan | Widget Responses/mo |
| -------- | ------------------- |
| Free | 75 |
| Starter | 800 |
| Pro | 2,000 |
| Business | 5,000 |
## Next Steps
Need more responses? Upgrade anytime.
Compare all available plans.
# Help Links
Source: https://docs.bestchatbot.io/customization/help-links
Show quick links on your widget's home screen and let the bot answer from their content.
# Help Links
**Help Links** are quick links shown on your widget's home screen, under **Popular Articles**. They give visitors a fast way to reach your most important pages, and they make the bot smarter: BestChatBot **crawls each linked page** so the assistant can answer questions directly from that content.
## How It Works
When you add a Help Link, two things happen:
1. **It appears on the widget** as a clickable article on the home screen.
2. **The page is crawled** in the background. BestChatBot fetches the page, extracts a clean title and a searchable summary, and indexes it so the bot can use that content in its answers.
Help Links are indexed **separately** from your main Knowledge Base. They do **not** count toward your plan's scraped-pages limit or knowledge base size, and you don't need to rebuild the knowledge base after adding one.
## Adding a Help Link
From your workspace, open the **Web Widget** settings and select the **Help Links** tab.
Paste the page URL (for example, `https://yoursite.com/help`). Optionally add a **Title** to control how the link is labeled. If you leave the title empty, BestChatBot generates one from the page automatically.
The link is created and starts crawling immediately. You'll see its status change from **Processing** to **Ready** once the page has been indexed.
## Link Status
Each link shows a status badge:
| Status | Meaning |
| -------------- | ------------------------------------------------------------------------------------------------------------------- |
| **Processing** | The page is being crawled and indexed. |
| **Ready** | The page was indexed successfully. The bot can now answer from its content. |
| **Failed** | The page couldn't be crawled (for example, it's unreachable or blocks crawlers). Hover the badge to see the reason. |
## Managing Links
Each link in the list can be:
* **Reordered** — drag the handle on the left to change the order articles appear on the widget.
* **Refreshed** — click the refresh icon to re-crawl the page after its content changes. A short cooldown applies between refreshes.
* **Renamed** — click the pencil icon to edit the displayed title inline.
* **Deleted** — click the trash icon to remove the link.
There's a limit on how many links a workspace can have and how many refreshes you can run per day. If you hit it, remove links you no longer need or try again the next day.
## On the Widget
Visitors see your Help Links as **Popular Articles** on the widget's **Home** tab. They can search, open an article, or jump straight into a chat.
Add links to your most-visited support pages, pricing, and onboarding guides. Visitors get one-click access, and the bot can answer from those same pages when someone asks instead of clicking.
## Next Steps
Configure and install the chat widget on your site.
Scrape full sites or sections into your knowledge base.
# Response Preferences
Source: https://docs.bestchatbot.io/customization/response-preferences
Customize how your bot communicates. Choose its style and response length.
# Response Preferences
The **Preferences** panel lets you control how your bot communicates with your visitors. You can adjust the communication style and response length to match your brand's voice.
## Communication Style
Choose how the bot talks to your users:
| Style | Description | Best For |
| ---------------- | --------------------------------- | ----------------------------------- |
| **Professional** | Formal, polished language | Business sites, SaaS support |
| **Casual** | Friendly, conversational tone | Consumer brands, lifestyle sites |
| **Technical** | Precise, detail-oriented language | Developer tools, technical products |
| **Concise** | Short, to-the-point answers | High-traffic FAQ-heavy pages |
## Response Length
Control how detailed the bot's answers are:
| Length | Description | Best For |
| ------------ | --------------------------------------- | ------------------------------------- |
| **Brief** | Short, direct answers in 1-2 sentences | Simple FAQs, quick support |
| **Moderate** | Balanced answers with enough context | Most use cases (default) |
| **Detailed** | Full answers with thorough explanations | Complex products, educational content |
## How to Change Preferences
Click the **Preferences** icon (gear icon) in the dashboard. A side panel will open.
Use the **Communication Style** dropdown to choose between Professional, Casual, Technical, or Concise.
Use the **Response Length** dropdown to choose between Brief, Moderate, or Detailed.
Click the **Save** button. Changes take effect immediately for all new responses.
Past widget conversations stay as they were. Only new answers will use the updated style.
## Per-Workspace Settings
Preferences are configured **per workspace**. If you run multiple widgets across different sites or brands, each one can have its own communication style and response length.
A consumer brand might use **Casual** + **Brief**, while a SaaS product's docs site might use **Professional** + **Detailed**.
## Next Step
See what's included in each plan.
# FAQ
Source: https://docs.bestchatbot.io/faq
Answers to the most common questions about BestChatBot.
# Frequently Asked Questions
## Is BestChatBot just another chatbot?
No. Most chatbots follow rigid scripts. BestChatBot is an AI agent trained on **your** business data, drawing from the documents and URLs you upload. It can also be tuned for tone and response length to match your brand.
## Can it replace human support?
For repetitive, high-volume questions, yes. BestChatBot handles the FAQ-type questions that eat up your team's time. For edge cases and complex issues, it reduces workload so your human team can focus on what matters.
## How does it work on websites?
You embed a single script tag in your HTML. A chat bubble appears in the bottom-right of every page where the snippet is loaded. Visitors click the bubble, ask a question, and get instant answers from your knowledge base. Answers stream word by word with cited sources.
## How fast can I launch?
Most teams deploy in minutes, not days. Create an account, configure the widget, upload a few documents, and you're live.
## Do I need technical skills?
Not at all. The dashboard handles everything. Upload files by dragging and dropping. To install the widget, paste one script tag on your site (or use the platform-specific instructions for WordPress, Shopify, Wix, Squarespace, Next.js, etc.).
## What file types can I upload?
BestChatBot accepts:
* **PDF** (.pdf)
* **Word** (.docx)
* **Text** (.txt)
* **Markdown** (.md)
## What happens during a knowledge base rebuild?
The rebuild replaces the entire knowledge base with a fresh version. Sources marked as deleted are discarded, pending sources are fetched and added, and all active sources are re-processed. The widget will not respond to questions during the rebuild.
## What happens when I hit my response limit?
The widget stops responding until your next billing cycle starts or you upgrade your plan. Your knowledge base and settings stay intact.
## Is billing per workspace or per account?
Billing is per **account**, not per workspace. Your subscription covers all workspaces under your account.
## Can I use multiple widgets?
Yes. Each plan includes a set number of workspaces. Each workspace runs one widget. Higher plans give you more workspaces, which helps if you manage multiple sites or brands.
| Plan | Workspaces |
| -------- | ---------- |
| Free | 1 |
| Starter | 2 |
| Pro | 5 |
| Business | 10 |
## Is my data secure?
Yes. Each workspace has its own isolated data store. Your knowledge base content is never shared between workspaces or with other customers. The widget itself runs inside a closed Shadow DOM, so it cannot leak data into the host page or vice versa.
## Can I cancel anytime?
Yes. Cancel from the Stripe customer portal in your Billing settings. Your plan stays active until the end of the current billing period, then reverts to Free. Your data is preserved.
## What if the bot gives a wrong answer?
Check the [Bot Responses](/using-the-bot/bot-responses) page to find the bad answer, then update your knowledge base with better content. After rebuilding, the bot will give improved answers.
## Can the bot do more than answer questions?
Yes. On the **Pro** and **Business** plans, BestChatBot can take real actions for your visitors: booking meetings, opening support tickets, looking up orders, capturing leads, and more. It does this by connecting to tools like Cal.com, Calendly, Zendesk, Freshdesk, Shopify, WooCommerce, HubSpot, and Stripe. Only one integration per category can be active at a time. See [Agentic Actions](/integrations/agentic-actions) and [Available Integrations](/integrations/available-integrations).
## Can I add my team to a workspace?
Yes. Invite teammates by email and assign each a role (Admin, Editor, or Viewer) to control what they can see and change. The number of members you can invite depends on your plan. See [Members & Roles](/workspace/members-roles).
## Still have questions?
Reach out to us at [contact@bestchatbot.io](mailto:contact@bestchatbot.io).
# Agentic Actions
Source: https://docs.bestchatbot.io/integrations/agentic-actions
Let your chatbot take real actions like booking meetings, opening support tickets, and looking up orders, not just answer questions.
# Agentic Actions
Most chatbots can only *tell* visitors things. BestChatBot can also *do* things.
With **Agentic Actions**, your widget connects to the tools your business already uses, like your calendar, your help desk, your store, and your billing, and performs real actions on the visitor's behalf, right inside the chat.
Agentic Actions are available on the **Pro** and **Business** plans. See [Available Integrations](/integrations/available-integrations) for the full list of supported tools.
## From Answering to Acting
A regular bot answers from your knowledge base. An agentic bot does that **and** can take the next step for the visitor:
| Visitor asks | A regular bot | BestChatBot with Agentic Actions |
| --------------------------------- | --------------------------- | ----------------------------------------------- |
| "Can I book a call for Thursday?" | Explains how to book | Shows available times and **books the meeting** |
| "Where's my order #1234?" | Points to a tracking page | **Looks up the order** and reports its status |
| "I need help, this isn't working" | Suggests contacting support | **Opens a support ticket** for the visitor |
## How It Works
They type naturally, like "I'd like to schedule a demo" or "Check my subscription."
It decides whether the visitor wants an **action**, an **answer** from your knowledge base, or just to chat, then picks the right tool for the job.
Instead of guessing, the bot presents the matching action (for example, **Book a Call**) and, when needed, a short form to fill in.
The action runs **only** when the visitor clicks the button or submits the form, never from a loose phrase.
The meeting is booked, the ticket is created, the order status appears, all right in the conversation.
## The Visitor Is Always in Control
Actions never fire just because the bot *interpreted* a sentence. They run when the visitor **explicitly clicks** the action button. This prevents surprises and keeps every action intentional.
Think of the bot as a helpful assistant that says "I can do that for you, just confirm" instead of acting on its own.
## Identity-Aware Actions
Some actions are personal, like looking up *your* orders, *your* invoices, *your* subscription. The bot only runs these when it can confirm who the visitor is.
* **Identified visitor** → personal actions run normally (e.g., "show my recent orders").
* **Anonymous visitor** → the bot gives a safe, neutral response instead of guessing or exposing anyone's data.
This keeps private information protected while still letting anonymous visitors use general actions like browsing products or booking a call.
## Actions and Your Quota
An agentic action only counts toward your [response quota](/billing/usage-tracking) when it **actually runs**:
* ✅ **Executed successfully** (the meeting is booked, the order is found) — counts as one response.
* ➖ **Offered but not used** (the bot shows a button the visitor never clicks) — free.
* ➖ **Failed or unavailable** (the tool errors, or an anonymous visitor is asked to identify first) — free.
In short, you're billed only when the bot delivers a real result.
## Availability
| Plan | Agentic Actions |
| -------- | --------------- |
| Free | — |
| Starter | — |
| Pro | ✅ |
| Business | ✅ |
## Next Steps
See the 8 tools you can connect and what each one can do.
Compare plans and find the one that turns on Agentic Actions.
# Available Integrations
Source: https://docs.bestchatbot.io/integrations/available-integrations
Connect your calendar, help desk, store, CRM, and billing so your chatbot can take real actions.
# Available Integrations
BestChatBot connects to **8 tools** your business already uses. Once connected, your widget can perform real actions with them through [Agentic Actions](/integrations/agentic-actions).
Integrations are available on the **Pro** and **Business** plans.
## The 8 Integrations
| Integration | Category | What your bot can do |
| --------------- | ---------- | ----------------------------------------------------------------------------------------------------------------------------- |
| **Cal.com** | Scheduling | Check availability, book a meeting, cancel a meeting |
| **Calendly** | Scheduling | Check availability, book a meeting, cancel a meeting |
| **Freshdesk** | Help Desk | Open a support ticket, check a ticket's status |
| **Zendesk** | Help Desk | Open a support ticket, check a ticket's status |
| **HubSpot** | CRM | Capture a lead so your sales team can follow up |
| **Stripe** | Payments | View a subscription, view invoices and payment methods, open the billing portal, start a purchase, browse products and prices |
| **Shopify** | E-commerce | Browse the product catalog, check an order's status by email |
| **WooCommerce** | E-commerce | Browse the product catalog, check an order's status by email |
## One Integration per Category
Each category can have **only one active integration at a time**. The integrations in the same category expose the same actions to the bot, so allowing two at once would create ambiguity.
| Category | Options | Mutually exclusive? |
| ---------- | -------------------- | ------------------- |
| Scheduling | Cal.com, Calendly | Yes |
| Help Desk | Freshdesk, Zendesk | Yes |
| E-commerce | Shopify, WooCommerce | Yes |
| CRM | HubSpot | — (only option) |
| Payments | Stripe | — (only option) |
Connecting a second integration in the same category **automatically disconnects** the first. For example, if Cal.com is connected and you connect Calendly, Cal.com is turned off. The same applies to Freshdesk/Zendesk and Shopify/WooCommerce.
HubSpot and Stripe are the only options in their categories, so they never conflict with another integration.
## Connecting an Integration
From your workspace dashboard, go to the **Integrations** page. You'll see the catalog of available tools and their connection status.
Click **Connect** on the integration you want and follow the secure authorization flow. You authorize BestChatBot directly with the provider, so your credentials are never typed into the chat.
Once connected, the integration's actions become available to your widget right away. If another integration in the same category was active, it's disconnected automatically.
## Disconnecting
You can disconnect any integration from the **Integrations** page at any time. Its actions stop being offered to the widget immediately. Disconnecting one integration never affects the others.
## Availability
| Plan | Integrations |
| -------- | ------------ |
| Free | — |
| Starter | — |
| Pro | ✅ |
| Business | ✅ |
## Next Steps
Understand how the bot decides to act and how visitors stay in control.
Control who on your team can connect and manage integrations.
# Cal.com
Source: https://docs.bestchatbot.io/integrations/guides/cal-com
What the Cal.com integration can and can't do, and how to connect it step by step.
# Cal.com
**Category: Scheduling.** Connect Cal.com and your widget can book and cancel meetings for visitors, right inside the chat.
Integrations are available on the **Pro** and **Business** plans. Cal.com shares the Scheduling category with Calendly, so only one of the two can be active at a time.
## What This Bot Can Do
The bot does exactly these actions, nothing more. "Needs sign-in" means the visitor must be identified first; otherwise the bot gives a safe, neutral answer.
| Action | What it does | Needs sign-in |
| ---------------------- | ----------------------------------------------------------------------------------------------- | :-----------: |
| **Check availability** | Show the visitor open time slots from your calendar, up to 7 days per request. | No |
| **Book a meeting** | Schedule a meeting once the visitor picks a slot and gives their name and email. | No |
| **Cancel a meeting** | Cancel a meeting the visitor booked, found by their email. The bot asks for confirmation first. | Yes |
## What It Can't Do
Cal.com is scoped to the actions above. It does **not**:
* Reschedule a meeting (the visitor cancels and books a new time instead)
* List or show all of a visitor's meetings
* Check availability more than 7 days ahead in a single request
## How to Connect
Connecting an integration requires an **Editor**, **Admin**, or **Owner** role, on the **Pro** or **Business** plan. See [Members & Roles](/workspace/members-roles).
In Cal.com, go to **Settings → Developer → API keys** and click **+ New** to create a key. Copy it (it starts with `cal_`).
In your workspace dashboard, open your **Web Widget → Integrations** tab and find **Cal.com**.
Click **Connect**. A secure popup opens — paste your **Cal.com API key** and click **Connect**. Your credentials go to the secure form, never into the chat. If Calendly is currently active, you'll be asked to confirm replacing it.
Cal.com needs one more step: pick the **event type** the bot will book (for example, "30 min meeting"). Until you select one, the integration shows a **needs setup** badge and won't book meetings.
Once set up, Cal.com's actions become available to your widget right away. You can toggle each capability — **Check availability**, **Schedule meetings**, and **Cancel meetings** — from the integration panel.
## One per Category
Cal.com is in the **Scheduling** category with Calendly. Connecting one disconnects the other, so your bot always has a single, clear tool for scheduling.
If you connect Cal.com while Calendly is active, Calendly is turned off automatically.
## Availability
| Plan | Cal.com |
| -------- | ------- |
| Free | — |
| Starter | — |
| Pro | ✅ |
| Business | ✅ |
## Next Steps
See the full catalog and how categories work.
Learn how the bot turns a request into a real action.
# Calendly
Source: https://docs.bestchatbot.io/integrations/guides/calendly
What the Calendly integration can and can't do, and how to connect it step by step.
# Calendly
**Category: Scheduling.** Connect Calendly and your widget can book and cancel meetings for visitors, right inside the chat.
Integrations are available on the **Pro** and **Business** plans. Calendly shares the Scheduling category with Cal.com, so only one of the two can be active at a time.
**Booking requires a paid Calendly plan.** On Calendly's **free** tier, the bot can only **show available times** — it can't actually book the meeting, because Calendly's free plan doesn't allow creating bookings through its API. Upgrade your Calendly plan to let the bot schedule meetings end to end.
## What This Bot Can Do
The bot does exactly these actions, nothing more. "Needs sign-in" means the visitor must be identified first; otherwise the bot gives a safe, neutral answer.
| Action | What it does | Needs sign-in |
| ---------------------- | ------------------------------------------------------------------------------------------------------------------- | :-----------: |
| **Check availability** | Show the visitor open time slots from your calendar, up to 7 days per request. | No |
| **Book a meeting** | Schedule a meeting once the visitor picks a slot and gives their name and email. **Requires a paid Calendly plan.** | No |
| **Cancel a meeting** | Cancel a meeting the visitor booked, found by their email. The bot asks for confirmation first. | Yes |
## What It Can't Do
Calendly is scoped to the actions above. It does **not**:
* Book meetings on Calendly's free plan (it can only show availability there)
* Reschedule a meeting (the visitor cancels and books a new time instead)
* List or show all of a visitor's meetings
* Check availability more than 7 days ahead in a single request
## How to Connect
Connecting an integration requires an **Editor**, **Admin**, or **Owner** role, on the **Pro** or **Business** plan. See [Members & Roles](/workspace/members-roles).
In your workspace dashboard, open your **Web Widget → Integrations** tab and find **Calendly**.
Click **Connect**. A secure popup opens — sign in to Calendly and **Approve** the requested access. You never type credentials into BestChatBot. If Cal.com is currently active, you'll be asked to confirm replacing it.
Calendly needs one more step: pick the **event type** the bot will book (for example, "30 Minute Meeting"). Until you select one, the integration shows a **needs setup** badge and won't book meetings.
Once set up, Calendly's actions become available to your widget right away. You can toggle each capability — **Check availability**, **Schedule meetings**, and **Cancel meetings** — from the integration panel.
## One per Category
Calendly is in the **Scheduling** category with Cal.com. Connecting one disconnects the other, so your bot always has a single, clear tool for scheduling.
If you connect Calendly while Cal.com is active, Cal.com is turned off automatically.
## Availability
| Plan | Calendly |
| -------- | -------- |
| Free | — |
| Starter | — |
| Pro | ✅ |
| Business | ✅ |
## Next Steps
See the full catalog and how categories work.
Learn how the bot turns a request into a real action.
# Freshdesk
Source: https://docs.bestchatbot.io/integrations/guides/freshdesk
What the Freshdesk integration can and can't do, and how to connect it step by step.
# Freshdesk
**Category: Help Desk.** Connect Freshdesk and your widget can open and check support tickets for visitors, right inside the chat.
Integrations are available on the **Pro** and **Business** plans. Freshdesk shares the Help Desk category with Zendesk, so only one of the two can be active at a time.
## What This Bot Can Do
The bot does exactly these actions, nothing more. "Needs sign-in" means the visitor must be identified first; otherwise the bot gives a safe, neutral answer.
| Action | What it does | Needs sign-in |
| --------------------------- | ----------------------------------------------------------------------------------------- | :-----------: |
| **Open a support ticket** | Create a ticket with a subject, description, and priority (low, medium, high, or urgent). | No |
| **Check a ticket's status** | Look up a ticket's status and the latest replies from your team, by email or ticket ID. | Yes |
## What It Can't Do
Freshdesk is scoped to the actions above. It does **not**:
* Reply to or comment on a ticket
* Close, resolve, or reassign a ticket
* Attach files to a ticket
## How to Connect
Connecting an integration requires an **Editor**, **Admin**, or **Owner** role, on the **Pro** or **Business** plan. See [Members & Roles](/workspace/members-roles).
In Freshdesk, open your **Profile settings** and copy your **API key**. Note your Freshdesk **domain** too — the subdomain in `yourcompany.freshdesk.com`.
In your workspace dashboard, open your **Web Widget → Integrations** tab and find **Freshdesk**.
Click **Connect**. A secure popup opens — enter your **Freshdesk API Key** and your **Freshdesk Domain** (the subdomain only), then click **Connect**. Your credentials go to the secure form, never into the chat. If Zendesk is currently active, you'll be asked to confirm replacing it.
Once connected, Freshdesk's actions — **Open a support ticket** and **Check a ticket's status** — become available to your widget right away.
## One per Category
Freshdesk is in the **Help Desk** category with Zendesk. Connecting one disconnects the other, so your bot always has a single, clear tool for help desk.
If you connect Freshdesk while Zendesk is active, Zendesk is turned off automatically.
## Availability
| Plan | Freshdesk |
| -------- | --------- |
| Free | — |
| Starter | — |
| Pro | ✅ |
| Business | ✅ |
## Next Steps
See the full catalog and how categories work.
Learn how the bot turns a request into a real action.
# HubSpot
Source: https://docs.bestchatbot.io/integrations/guides/hubspot
What the HubSpot integration can and can't do, and how to connect it step by step.
# HubSpot
**Category: CRM.** Connect HubSpot and your widget can capture leads for visitors, right inside the chat.
Integrations are available on the **Pro** and **Business** plans.
## What This Bot Can Do
The bot does exactly these actions, nothing more. "Needs sign-in" means the visitor must be identified first; otherwise the bot gives a safe, neutral answer.
| Action | What it does | Needs sign-in |
| ------------------ | -------------------------------------------------------------------------------------------------- | :-----------: |
| **Capture a lead** | Save the visitor as a new contact with their name, email, company, and what they're interested in. | No |
## What It Can't Do
HubSpot is scoped to the actions above. It does **not**:
* Look up, search, or update existing contacts
* View deals, companies, or pipelines
* Do anything beyond capturing a new lead
## How to Connect
Connecting an integration requires an **Editor**, **Admin**, or **Owner** role, on the **Pro** or **Business** plan. See [Members & Roles](/workspace/members-roles).
In your workspace dashboard, open your **Web Widget → Integrations** tab and find **HubSpot**.
Click **Connect**. A secure popup opens — sign in to HubSpot, **choose the account** to connect, and authorize access. You never type credentials into BestChatBot.
Once connected, HubSpot's **Capture lead** action becomes available to your widget right away.
## One per Category
HubSpot is the only option in the **CRM** category, so it never conflicts with another integration.
## Availability
| Plan | HubSpot |
| -------- | ------- |
| Free | — |
| Starter | — |
| Pro | ✅ |
| Business | ✅ |
## Next Steps
See the full catalog and how categories work.
Learn how the bot turns a request into a real action.
# Stripe
Source: https://docs.bestchatbot.io/integrations/guides/stripe
What the Stripe integration can and can't do, and how to connect it in one click with OAuth.
# Stripe
**Category: Payments.** Connect Stripe and your widget can answer billing questions and start purchases for visitors, right inside the chat.
Integrations are available on the **Pro** and **Business** plans.
## What This Bot Can Do
The bot does exactly these actions, nothing more. "Needs sign-in" means the visitor must be identified first; otherwise the bot gives a safe, neutral answer.
| Action | What it does | Needs sign-in |
| --------------------------- | --------------------------------------------------------------------------------------- | :-----------: |
| **Check a subscription** | Show the visitor their current plan and next billing date. | Yes |
| **Check invoice history** | List the visitor's recent invoices with amounts, dates, and payment status. | Yes |
| **Check payment methods** | Show saved payment methods (card brand and last 4 digits only). | Yes |
| **Open the billing portal** | Give the visitor a secure portal link to cancel, upgrade, or update payment themselves. | Yes |
| **Start a purchase** | Generate a checkout link so the visitor can buy a plan or product. | No |
## What It Can't Do
Stripe is scoped to the actions above. It does **not**:
* Cancel or change a subscription directly (it hands the visitor a secure portal link instead)
* Issue refunds or charge a card
* Create or edit products and prices
* Show full card numbers (only the brand and last 4 digits)
## How to Connect
Connecting Stripe takes one click. BestChatBot uses **Stripe's official OAuth flow** — you authorize the **BestChatBot** Stripe App from your own Stripe account. There's no API key to create, copy, or paste.
Connecting integrations requires an **Editor**, **Admin**, or **Owner** role. See [Members & Roles](/workspace/members-roles).
In your workspace dashboard, open the **Integrations** tab, find **Stripe** under **Payments**, and click **Connect**.
A secure Stripe popup opens. Sign in to your Stripe account, review what the **BestChatBot** app can access, and approve it. Your credentials stay with Stripe — they're never typed into the chat or shared with BestChatBot.
The popup closes and Stripe shows as **Connected** right away. Nothing to copy or paste, and no key to rotate later.
### What BestChatBot Can Access
When you approve the app, Stripe shows you exactly what it grants — a **narrow, mostly read-only** scope, never your secret keys:
* **Read** your customers, subscriptions, invoices, products, prices, payment methods, and charges — so the bot can answer each visitor's own billing questions.
* **Create** a Billing Portal link and a Checkout link on the visitor's behalf.
That's the full extent of the access. The bot can't change your account settings, issue refunds, or edit products. You can revoke it anytime — click **Disconnect** in BestChatBot, or remove the app from inside your Stripe Dashboard.
### After Connecting
Once connected, Stripe's actions become available to your widget right away. From the integration panel you can toggle each **bot capability** (check subscription, invoice history, payment methods, manage subscription, create checkout) and set optional **Checkout redirect URLs**:
* **Success URL** — where the visitor lands after a completed payment.
* **Cancel URL** — where the visitor lands if they cancel.
If you leave them empty, the visitor returns to your widget's base domain.
## Showing Products in Checkout
When the bot offers **Start a purchase**, it only shows the products you've explicitly opted in — your full Stripe catalog is never exposed. To make a product available, add the metadata key `bcb_widget_visible` with the value `true` to the **product** (or to a specific **price**) in Stripe.
Set the flag on the product to expose all of its prices, or on a single price for finer control. Products without this flag never appear in the chat.
## See It in Action
Once connected, identified visitors can check invoices, view saved payment methods, manage their subscription, and start a purchase — all from the widget.
## One per Category
Stripe is the only option in the **Payments** category, so it never conflicts with another integration.
## Availability
| Plan | Stripe |
| -------- | ------ |
| Free | — |
| Starter | — |
| Pro | ✅ |
| Business | ✅ |
## Next Steps
See the full catalog and how categories work.
Learn how the bot turns a request into a real action.
# WooCommerce
Source: https://docs.bestchatbot.io/integrations/guides/woocommerce
What the WooCommerce integration can and can't do, and how to connect it step by step.
# WooCommerce
**Category: E-commerce.** Connect WooCommerce and your widget can find products and check orders for visitors, right inside the chat.
Integrations are available on the **Pro** and **Business** plans. WooCommerce shares the E-commerce category with Shopify, so only one of the two can be active at a time.
## What This Bot Can Do
The bot does exactly these actions, nothing more. "Needs sign-in" means the visitor must be identified first; otherwise the bot gives a safe, neutral answer.
| Action | What it does | Needs sign-in |
| -------------------------------- | ------------------------------------------------------------------------------------------------- | :-----------: |
| **Search products** | Search your catalog by keyword and show products with price and image (up to 100). | No |
| **Check order status** | Look up an order's status and details by the visitor's email. | Yes |
| **Update their profile** | Let a signed-in customer update their own name, phone, or email — they confirm before it's saved. | Yes |
| **Update their billing address** | Let a signed-in customer update their own billing address — they confirm first. | Yes |
The two update actions are optional. You can turn each one off from the WooCommerce panel if you'd rather keep the bot read-only.
## What It Can't Do
WooCommerce is scoped to the actions above. It does **not**:
* Add items to a cart or check out from the chat (visitors do that on your store)
* Process returns or change an order from the chat
* Look up an order without the visitor's email
## Part 1 — Connect WooCommerce
BestChatBot connects to WooCommerce automatically. You enter your store address and the connection is authorized for you — the official BestChatBot WordPress plugin handles it, handing BestChatBot a secure, encrypted key. There's nothing to generate, paste, or approve.
Connecting integrations requires an **Editor**, **Admin**, or **Owner** role. See [Members & Roles](/workspace/members-roles).
In your workspace dashboard, open the **Integrations** tab, find **WooCommerce**, and click **Connect**.
In the dialog, enter your store's address (for example `https://shop.example.com`) and click **Connect**. The connection is authorized automatically — there's nothing to approve.
The window closes and WooCommerce shows as connected — its actions become available right away. If Shopify was connected, it's disconnected automatically.
From the integration panel you can toggle each **bot capability**.
## Part 2 — Install the Widget on WordPress
Connecting WooCommerce lets the bot read your store. To **show the widget on your site** and let logged-in customers check **their own** orders without typing their email, install the official **Chatbot IO Widget** WordPress plugin. It embeds the widget and signs a short identity token for the logged-in customer, so order lookups are identity-aware out of the box.
### Step 1 — Install the plugin
In WordPress, go to **Plugins → Add Plugin** and search for **Chatbot IO Widget** (by victhedev). Install and activate it.
### Step 2 — Create a signing key in BestChatBot
In your dashboard, open your **Web Widget → Security** tab and click **Create Signing Key**. This key lets your site sign identity tokens that the widget trusts. Keep it secret.
For the full identity flow and token format, see [Visitor Identity](/integrations/identity/overview).
### Step 3 — Configure the plugin
Open **Settings → Chatbot IO Widget** in WordPress and enter:
* **API Key** — your widget's public key (`rk_live_...`), found in **Dashboard → Web Widget → Installation**.
* **Signing Key** — the secret key from **Dashboard → Web Widget → Security** (Step 2). Keep it secret.
Save the settings.
### Done — identity-aware order lookups
The widget now appears on your store, and logged-in customers can ask things like "track my order" and get **their** orders back instantly, with no email prompt.
## One per Category
WooCommerce is in the **E-commerce** category with Shopify. Connecting one disconnects the other, so your bot always has a single, clear tool for e-commerce.
If you connect WooCommerce while Shopify is active, Shopify is turned off automatically.
## Availability
| Plan | WooCommerce |
| -------- | ----------- |
| Free | — |
| Starter | — |
| Pro | ✅ |
| Business | ✅ |
## Next Steps
Set up identity verification for personal actions like order lookups.
Learn how the bot turns a request into a real action.
# Zendesk
Source: https://docs.bestchatbot.io/integrations/guides/zendesk
What the Zendesk integration can and can't do, and how to connect it step by step.
# Zendesk
**Category: Help Desk.** Connect Zendesk and your widget can open and check support tickets for visitors, right inside the chat.
Integrations are available on the **Pro** and **Business** plans. Zendesk shares the Help Desk category with Freshdesk, so only one of the two can be active at a time.
## What This Bot Can Do
The bot does exactly these actions, nothing more. "Needs sign-in" means the visitor must be identified first; otherwise the bot gives a safe, neutral answer.
| Action | What it does | Needs sign-in |
| --------------------------- | ----------------------------------------------------------------------------------------- | :-----------: |
| **Open a support ticket** | Create a ticket with a subject, description, and priority (low, normal, high, or urgent). | No |
| **Check a ticket's status** | Look up a ticket's status and the latest replies from your team, by email or ticket ID. | Yes |
## What It Can't Do
Zendesk is scoped to the actions above. It does **not**:
* Reply to or comment on a ticket
* Close, resolve, or reassign a ticket
* Attach files to a ticket
## How to Connect
Connecting an integration requires an **Editor**, **Admin**, or **Owner** role, on the **Pro** or **Business** plan. See [Members & Roles](/workspace/members-roles).
In your workspace dashboard, open your **Web Widget → Integrations** tab and find **Zendesk**.
Click **Connect**. A secure popup opens — enter your **Zendesk domain** (the subdomain in `yoursubdomain.zendesk.com`) and continue. If Freshdesk is currently active, you'll be asked to confirm replacing it.
A Zendesk window opens asking to grant access to BestChatBot. Click **Allow** to authorize. You never type your Zendesk password into BestChatBot.
Once connected, Zendesk's actions become available right away. You can toggle each capability — **Create support ticket** and **Check ticket status** — from the integration panel.
## One per Category
Zendesk is in the **Help Desk** category with Freshdesk. Connecting one disconnects the other, so your bot always has a single, clear tool for help desk.
If you connect Zendesk while Freshdesk is active, Freshdesk is turned off automatically.
## Availability
| Plan | Zendesk |
| -------- | ------- |
| Free | — |
| Starter | — |
| Pro | ✅ |
| Business | ✅ |
## Next Steps
See the full catalog and how categories work.
Learn how the bot turns a request into a real action.
# Visitor Identity
Source: https://docs.bestchatbot.io/integrations/identity/overview
Let the bot act for a signed-in visitor by sending a short JWT that your backend signs.
# Visitor Identity
Some agentic actions are personal: showing a visitor *their* orders, invoices, subscription, or support tickets. The bot runs these only when it can prove who the visitor is. You prove it by sending a short JWT, signed in your backend, that carries the visitor's email.
Identity is only needed for personal actions. Public actions (browse products, book a call, open a ticket) already work for anonymous visitors.
## How It Works
Your app already knows who they are.
Using your BestChatBot signing key (HS256), your backend mints a short token that holds the visitor's email.
Through `setUserToken()` or the `data-user-token` attribute.
BestChatBot checks the signature, reads the verified email, and runs personal actions safely.
## What the Token Must Contain
The bot reads these claims. Only `email` is required.
| Claim | Required? | What it's for |
| -------------------------- | ----------- | --------------------------------------------------------------------------------------------- |
| `email` | **Yes** | The verified identity. Must be a real, public email. The bot lowercases it. |
| `exp` | Recommended | Expiry (Unix seconds). Keep it short. The bot rejects tokens whose lifetime is over 24 hours. |
| `name` | Recommended | Personalizes replies and pins the visitor's name on actions. |
| `user_id` | Optional | The user's ID in your system, handy for your own records. |
| `picture`, `phone`, others | Optional | Passed through. The bot ignores what it doesn't use. |
Minimal token (Node.js):
```javascript theme={null}
const jwt = require("jsonwebtoken");
const token = jwt.sign(
{ email: user.email.toLowerCase(), name: user.name },
process.env.BESTCHATBOT_SIGNING_KEY, // your signing key, backend only
{ algorithm: "HS256", expiresIn: "1h" }
);
```
See [Sign the JWT](/integrations/identity/sign-the-jwt) for Python, PHP, Go, Java, .NET, and per-provider examples (WordPress, Clerk, Firebase, Supabase, Auth0).
## Get Your Signing Key
Open your widget settings in the dashboard, go to **Security / Identity Verification**, and create a **Signing Key**. Copy it once and store it as a backend secret. You can keep up to **3 active keys**, so you can rotate without downtime: sign with the new key while the old one still verifies, then retire the old one.
The signing key is a shared secret, like a password. It is **not** the same as your widget API key (`rk_live_...`). Never commit it or expose it to the browser.
## Hand the Token to the Widget
Pick whichever fits your app. Both send the token to the bot as `Authorization: Bearer `.
**Option A, runtime (SPAs):** call the widget API once you have the token.
```javascript theme={null}
window.BestChatBot.setUserToken(token);
// on logout:
window.BestChatBot.clearUserToken();
```
**Option B, server-rendered:** drop the token into the script tag.
```html theme={null}
```
## Security Rules
* Sign the JWT **in your backend only**. The signing key never reaches the browser.
* Mint a **new** JWT for BestChatBot. Never forward the session token from Clerk, Supabase, Firebase, or Auth0.
* Lowercase the email before signing.
* Keep `exp` short (1 hour is a good default). The hard limit is 24 hours.
* Refresh the token when your user's session refreshes.
## Anonymous and Invalid Tokens
| Situation | What the bot does |
| ------------------------------------------------------ | ----------------------------------------------------------------------------------- |
| No token sent | Treats the visitor as anonymous. Personal actions stay off; the bot answers safely. |
| Valid token | Runs personal actions with the verified email. |
| Expired or tampered token | Blocks the action by design. It does not fall back to anonymous. |
| Email with a reserved domain (`.local`, `.test`, etc.) | Treated as anonymous. Use a real public email. |
## Next Steps
Backend code for every stack and language.
See which actions need a signed-in visitor.
# Sign the JWT
Source: https://docs.bestchatbot.io/integrations/identity/sign-the-jwt
Backend code to mint the identity JWT, for any language and the major auth providers.
# Sign the JWT
The contract is the same everywhere: read your user's session, then sign a **new** JWT (HS256) with your signing key and the visitor's email. Start with your language, then check your auth provider for how to read the user.
Always sign server-side. The signing key never belongs in frontend code or a public repository.
## Let Your AI Add It
Most teams wire this up with an AI coding assistant. Copy the prompt below into yours (Cursor, Claude Code, Copilot, and similar). It inspects your stack first, asks if anything is unclear, then writes the signing code for you.
```text Prompt for your AI assistant theme={null}
You are integrating the BestChatBot chat widget into THIS project. Work in two phases.
PHASE 1 - Inspect first, do not write code yet. Report:
1. The stack: language, framework, and how the app is served (server-rendered pages vs SPA with a separate API).
2. Where a user becomes authenticated: the auth/session library, and where the current user's email is available SERVER-SIDE.
3. Where the BestChatBot widget loads: a
```
***
## Install on Your Website
Paste the snippet into your website's HTML, just before the closing `