Integrations
One script tag, wherever your site is built
The widget installs with a single script tag on any site โ here's exactly where it goes for the platform or framework you're using, and an honest list of what isn't connected yet.
Website platforms
If you can paste a script tag into your site's header or footer, you can install the widget. Most people are done in under ten minutes.
- Available
WordPress
Theme footer or a code plugin
Paste the snippet into your theme's footer via Appearance โ Theme File Editor, or use a header-and-footer plugin like WPCode if you'd rather not edit theme files directly.
- Available
Shopify
Theme code, before </body>
Online Store โ Themes โ Edit code, then paste the snippet into theme.liquid just before the closing body tag. Loads on every storefront page.
- Available
Webflow
Custom code, footer
Project Settings โ Custom Code โ Footer Code. Custom code only runs once you Publish โ it doesn't show in the Designer preview.
- Available
Wix
Custom code, body end
Settings โ Custom Code โ Add Custom Code, set it to load on All pages and place it in Body โ end, then publish.
- Available
Squarespace
Code injection
Settings โ Advanced โ Code Injection โ Footer. Code injection needs a Business plan or above.
- Available
Ghost
Site footer
Settings โ Code injection โ Site Footer.
- Available
Framer
Custom code, before </body>
Project Settings โ General โ Custom Code โ End of <body> tag, then publish the site.
Frameworks
The widget is a single async script and a global command queue, so it behaves the same whichever framework renders around it.
- Available
React
Script tag, framework-agnostic
Paste the snippet into public/index.html before </body>. It patches history.pushState itself, so client-side route changes show up in the visitor's page trail without extra wiring.
- Available
Next.js
App Router ready
Render it with next/script (strategy="afterInteractive") inside your root layout's <body>. App Router navigations are picked up automatically.
- Available
Vue
Script tag
Paste the snippet into index.html before </body>. Vue Router navigations are tracked without further setup.
- Available
Svelte
Script tag
Add it to src/app.html, inside %sveltekit.body%'s parent, before </body>. SvelteKit navigations are tracked without further setup.
- Available
Angular
Script tag
Add it to src/index.html before </body>. Angular Router navigations are tracked without further setup.
On the roadmap
Not connected yet. Listed so the gap is stated rather than found out about on a call โ nothing in this group does anything today.
- On the roadmap
Zapier
Send conversations to thousands of apps
Not built yet. No Zapier trigger or action exists today.
- On the roadmap
HubSpot
Match visitors to CRM contacts
Not built yet. Nothing here is matched or logged to HubSpot today.
- On the roadmap
Google Analytics
Chat events alongside your funnel
Not built yet. Chat events aren't sent to GA today.
- On the roadmap
Telegram
Answer from your phone
Not built yet. Conversations don't reach Telegram today.
- On the roadmap
WhatsApp
Continue conversations off-site
Not built yet. There's no WhatsApp channel today.
Installing it
Three steps, and the third one is optional
Nothing here needs an engineer for a week. The first step is a copy-paste, the second is a URL, and the third only matters if your visitors are signed in.
Paste one script tag
It goes anywhere before the closing body tag and loads asynchronously, so it never blocks your page. Your site key comes from the dashboard when you sign up.
<script> window.ChatWidget = window.ChatWidget || function () { (window.ChatWidget.q = window.ChatWidget.q || []).push(arguments); }; </script> <script async src="https://cdn.ndesk.chat/loader.js" data-site-key="YOUR_SITE_KEY"></script>Write what it should know
Add articles from the knowledge base in your dashboard, or connect Claude or ChatGPT to your workspace over MCP and have it write them straight from the questions your bot couldn't answer. Either way, a saved article is searchable within moments โ nothing to reindex or wait on.
Tell it who it is talking to
If a visitor is already signed in, pass what you know. The assistant can then look up their order or plan instead of asking questions your app can already answer.
ChatWidget("identify", { email: user.email, name: user.name, externalUserId: user.id, }); ChatWidget("set", { plan: "growth", locale: "en-GB" });
Not seeing yours?
The directory above is everything that's actually connected today, plus what's openly on the roadmap. If a tool you rely on isn't on either list, tell us โ we'll say plainly whether it's coming or not, rather than leaving you to find out on your own.
