Overview
Installation is a single script tag. Paste it just before the closing</body> tag of any page where the widget should appear.
your-widget-id with the id from your dashboard. That is the entire
integration — no API key, no npm package, no backend endpoint to build.
Plain HTML
React
React strips a plain<script src> written in JSX, so it never runs. Inject the
tag once on mount instead:
<CallKaroWidget /> once in your top-level layout.
Next.js
App Router
Add it to your root layout usingnext/script:
Pages Router
The same<Script> goes in pages/_app.tsx, or in pages/_document.tsx just
before </body>.
Use
next/script rather than a raw <script> tag — React does not execute
script tags written directly in JSX. Do not add defer alongside
strategy; the strategy already controls load timing.WordPress
1
Open the theme file editor
Go to Appearance → Theme File Editor and open
footer.php.2
Paste the snippet
Add it immediately before
</body>.3
Update the file
Click Update File, then load your site to confirm the launcher appears.
Shopify
1
Open the code editor
Go to Online Store → Themes → ⋯ → Edit code.
2
Open theme.liquid
Find it under the Layout folder.
3
Paste before the closing body tag
Add the snippet just above
</body> and save.Webflow
1
Open site settings
Go to Project Settings → Custom Code.
2
Add to Footer Code
Paste the snippet into the Footer Code box.
3
Publish
Save, then publish your site. Custom code only runs on the published site,
not in the Webflow designer.
Google Tag Manager
1
Create a new tag
In your GTM workspace, create a tag of type Custom HTML.
2
Paste the snippet
Add the script tag exactly as given.
3
Set the trigger
Use All Pages, or a narrower trigger if you only want the widget on
certain pages.
4
Publish
Submit and publish the container.
Verifying The Installation
1
Load your site
The launcher should appear in the corner you configured, in your primary
colour and with your icon.
2
Open the widget
Click the launcher. The header should show your bot name and the agent’s
name, with a Ready status.
3
Start a conversation
Press Talk. Your browser asks for microphone permission, the status
changes to Live, and the transcript appears as you speak.
Content Security Policy
If your site sends aContent-Security-Policy header, the widget’s origins need
to be allowed or the browser will block it silently:
Multiple Widgets On One Site
Only one widget can run per page. If two snippets end up on the same page — a common accident when it is added to both a layout and an individual template — the second is ignored rather than producing two launchers. To use different agents on different sections of your site, install different widget ids on different pages instead of on a shared layout.Next Steps
Customization
Change appearance without touching your site again
JavaScript API
Open the widget from your own buttons and track events