🎉 Free 7-day trial  ·  No credit card required
nDesk

Resources

How it works, before you commit to anything

The mechanics of an AI support assistant, the numbers you should actually expect, and the reference material to get one running. No form in front of any of it.

How it works

The mechanics, including the awkward parts

Four things decide whether one of these is useful or embarrassing. None of them is which model is underneath.

  1. It answers from your material, not from memory

    The assistant does not know your product until you show it. You connect sources — a help centre, docs, a sitemap, past resolved tickets — and it indexes them and answers out of that material, quoting the article it used. Nothing is fine-tuned, so there is no training run to wait for and no stale model to retrain when a policy changes: edit the article and the answer changes on the next crawl.

    This is also why the quality of your help centre sets the ceiling. Most disappointing rollouts are a knowledge problem wearing an AI costume.

  2. It is allowed to say it does not know

    Every answer carries a confidence score, and below the threshold you set the assistant stops rather than improvises. That is the single setting that separates a useful assistant from an embarrassing one: a made-up refund window or a wrong billing rule costs more than the ticket it deflected. You can tighten the threshold per topic, so billing and returns can be stricter than opening hours.

    You can also mark topics as never-automate. Anything matching them goes straight to a person, no matter how confident the model is.

  3. Handoff is a feature, not a failure

    When it stops, it hands over — with the transcript, the customer record, what it already tried, and why it escalated. The customer does not start again, and the agent does not read a wall of text to work out what is going on. Escalation is available from the first message too: a customer who asks for a person gets one.

    Refusing to escalate is the fastest way to make people hate a support bot. Ours takes the exit whenever it is asked for.

  4. Measure resolution, not deflection

    Deflection counts conversations no human touched — which includes every customer who gave up. Resolution counts problems actually solved. They are not the same number, and the gap is where support reputations go to die. The dashboard reports both, separately, plus the questions that most often ended in an escalation, so you know what to go and write next.

    Published benchmarks put early deployments around 30–50% resolution, rising to 50–70% once workflows and knowledge mature. Anyone promising 90% in week one is selling you the deflection number.

Start here

Three short guides that cover the whole path from empty account to live assistant.

Going further

For teams past the first week, when the interesting problems start.

Explainers

The questions people ask before choosing an AI support tool, answered without the pitch.

Reference

The details, for when you need the exact shape of something.

The JavaScript API, in full

Every command is queued until the loader finishes fetching and replayed in order once it does, so you never have to wait for a ready event or guard a call. That is the whole integration surface — there is no SDK to version-match.

  • ChatWidget("identify", { email, name, externalUserId })

    Tells the assistant who it is talking to, so it can look up their orders or plan instead of asking. Safe to call as soon as you know.

  • ChatWidget("set", { plan: "growth", locale: "en-GB" })

    Attaches any extra context you want on the conversation and in your reports. Arbitrary key/value pairs.

  • ChatWidget("open")

    Opens the widget — for wiring up your own 'Chat with us' button.

  • ChatWidget("sendMessage", "Where is my order?")

    Opens the widget with a question already asked. Useful on a help page, where you know what someone is stuck on.

Recently shipped

What changed lately, and why it mattered enough to build.

  • Fixed

    Uploaded logos and avatars failing to load cross-origin

    A workspace logo or avatar could fail to render on a customer's own domain, blocked by a cross-origin resource policy header the browser checks before CORS is ever consulted. Fixed, and the logo upload field is now a single row with inline upload and remove actions.

  • New

    Send email through your own provider

    The platform can now send email — invites, sign-up confirmations, anything a flow needs — through Console, SMTP or Resend. Configured per workspace the same way payment is: platform default first, then your own credential, stored encrypted. Left unconfigured, it logs instead of breaking whatever tried to send.

  • Improved

    Editable plan limits from the operator console

    Seats, workspaces and knowledge base article limits can now be adjusted for a single workspace from the operator console, on top of the plan's own numbers, without editing the checked-in catalog.

  • Fixed

    Billing sync rate limit, checkout confirmation, duplicate customers

    The billing sync rate limit is now keyed per workspace instead of per shared IP, so a busy office or an automatic post-purchase check no longer locks out the manual retry button. Checkout confirmation no longer abandons the poll under a dev-mode double mount, and a duplicate billing customer ID now surfaces as a clear error instead of a bare 500 that retries a webhook forever.

  • New

    7-day free trial on every plan

    New workspaces now start with a 7-day trial with full features, instead of a capped free tier.

View the full changelog

Still deciding?

The fastest way to know whether this fits is to try it on your own questions — the assistant in the corner of this page runs on our real documentation, so ask it something hard. If you would rather talk to a person about your particular setup, that is fine too, and it will not turn into a pipeline of follow-up emails.