๐ŸŽ‰ Free 7-day trial ย ยทย  No credit card required
nDesk

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.

  • WordPress

    Theme footer or a code plugin

    Available

    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.

  • Shopify

    Theme code, before </body>

    Available

    Online Store โ†’ Themes โ†’ Edit code, then paste the snippet into theme.liquid just before the closing body tag. Loads on every storefront page.

  • Webflow

    Custom code, footer

    Available

    Project Settings โ†’ Custom Code โ†’ Footer Code. Custom code only runs once you Publish โ€” it doesn't show in the Designer preview.

  • Wix

    Custom code, body end

    Available

    Settings โ†’ Custom Code โ†’ Add Custom Code, set it to load on All pages and place it in Body โ€“ end, then publish.

  • Squarespace

    Code injection

    Available

    Settings โ†’ Advanced โ†’ Code Injection โ†’ Footer. Code injection needs a Business plan or above.

  • Ghost

    Site footer

    Available

    Settings โ†’ Code injection โ†’ Site Footer.

  • Framer

    Custom code, before </body>

    Available

    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.

  • React

    Script tag, framework-agnostic

    Available

    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.

  • Next.js

    App Router ready

    Available

    Render it with next/script (strategy="afterInteractive") inside your root layout's <body>. App Router navigations are picked up automatically.

  • Vue

    Script tag

    Available

    Paste the snippet into index.html before </body>. Vue Router navigations are tracked without further setup.

  • Svelte

    Script tag

    Available

    Add it to src/app.html, inside %sveltekit.body%'s parent, before </body>. SvelteKit navigations are tracked without further setup.

  • Angular

    Script tag

    Available

    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.

  • Zapier

    Send conversations to thousands of apps

    On the roadmap

    Not built yet. No Zapier trigger or action exists today.

  • HubSpot

    Match visitors to CRM contacts

    On the roadmap

    Not built yet. Nothing here is matched or logged to HubSpot today.

  • Google Analytics

    Chat events alongside your funnel

    On the roadmap

    Not built yet. Chat events aren't sent to GA today.

  • Telegram

    Answer from your phone

    On the roadmap

    Not built yet. Conversations don't reach Telegram today.

  • WhatsApp

    Continue conversations off-site

    On the roadmap

    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.

  1. 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>
  2. 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.

  3. 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.