What Is the Widget?
The widget is a small piece of Callers that lives on your website. Visitors see a floating button in the corner of the page; when they click it, they can start a conversation with your AI agent right there in the browser - by voice or by text, with no phone number and no app to install. Because the conversation runs on your own website, you already know who the visitor is. You can pass their name, email, or plan into the campaign so the agent greets them by name and skips the questions you already have answers to.No Phone Number Needed
Voice or Text
Context From Your Site
Two Installation Paths
Step 1: Create a Widget Campaign
Start a new campaign
Open General Settings
Select Widget as the channel
Name your campaign

Selecting Widget as the campaign channel in General Settings
What Changes When You Pick Widget
Selecting Widget reconfigures the campaign automatically:- The campaign becomes Incoming. Your visitors start the conversation - the widget never dials out.
- Outgoing phone numbers are cleared, and incoming phone calls are switched off. A widget campaign is reached through your website only.
- A web call secret is generated for the campaign. You’ll need it only if you build a custom integration (see below).
Build Your Script
A widget campaign uses the same script builder as a voice campaign. Write your steps, add actions, and set up variables exactly as you normally would - see Campaign Script and Campaign Variables. Any variables you define here become available to the widget, so you can pass real values from your website into the conversation.Step 2: Open the Installer
In the campaign toolbar, click the plug icon to open the Install the widget window.
The plug icon in the campaign toolbar opens the installer
Embed on Web

The Embed on Web tab: domains, bot protection, and the installation snippet
1. Add Your Domains
List every domain the widget is allowed to run on. Type a domain and press Enter to add it; each one appears as a removable chip. This list is a security boundary, not a suggestion. When a visitor opens the widget, Callers checks the page’s origin against this list and refuses the conversation if it isn’t there. If the list is empty, the widget cannot start a conversation at all - you’ll see the errorNo allowed origins configured.
2. Bot Protection
Bot protection stops automated traffic from burning through your conversation minutes. Callers uses Cloudflare Turnstile, which is free.Create a Turnstile widget
Add your website domains
Copy both keys into Callers
3. Copy the Code
Copy the snippet and paste it into your HTML, just before the closing</body> tag, on every page where you want the widget to appear.
Passing Visitor Information
If your campaign defines variables, the snippet includes adata-vars attribute pre-filled with placeholders:
Script Tag Reference
Custom Integration (Web SDK)
Use the Custom tab when the standard widget isn’t enough - you want your own launch button, you need the conversation embedded inside your page layout, or your visitors are logged in and you want to authenticate them properly.
The Custom tab: install the SDK, authenticate, and initialize
1. Install the SDK
2. Authenticate
Instead of checking the visitor’s domain, the SDK authenticates with a short-lived token that you generate on your own backend. The Authenticate step in the installer shows your campaign’s web call secret. Copy it and store it as a server-side environment variable.Generating a Token
The SDK ships the helper, so on a JavaScript backend it’s one call:WebCall.
Generating a Token Without the SDK
If you’d rather not add the SDK as a server dependency, the format is simple enough to build yourself. A token is three dot-separated parts: the campaign ID, an expiry timestamp in seconds, and an HMAC-SHA256 signature of the first two parts, hex-encoded.Invalid web call token.3. Initialize the SDK
Pass the token your backend generated, along with any campaign variables:webCall.call() starts a voice conversation immediately. To show the floating button and let the visitor start it themselves, create the instance without calling call() - the widget renders and waits.
Try It in the Playground
Before wiring the SDK into your own application, you can exercise it against a real campaign in the SDK Playground. Enter your campaign ID and secret, click Load SDK, and a working widget appears on the page - with every SDK method available as a button, a live event feed, and a running transcript.
A campaign loaded in the playground - the widget is live in the bottom-right corner
Verify the Installation
Load the page
Start a conversation
Check the transcript
Common Errors
The widget doesn't appear at all
The widget doesn't appear at all
<body> and not blocked by a content blocker or a Content Security Policy. If your site sets a CSP, allow scripts from https://cdn.callers.ai.Then check the tag itself: if neither data-campaign nor data-token is present, the SDK stops without rendering anything and without logging - a silent page is almost always a missing or misspelled data-campaign. Malformed data-vars or data-theme JSON does get reported in the browser console.The agent greets visitors with {{ name }}
The agent greets visitors with {{ name }}
data-vars placeholders were never replaced. The installer generates them as templates; your page or server needs to substitute real values before the HTML reaches the browser.It works in production but not on localhost
It works in production but not on localhost
localhost:3000 is saved as localhost and won’t match. Use the Custom integration with a token for local development - token authentication skips the domain check entirely.Next Steps
- Add campaign actions so your agent can book meetings or push data to your CRM during a conversation.
- Review Analytics & Insights to see how widget conversations are performing.
- Set up webhooks to receive conversation results in your own systems.