Four Ways In, One Body
A session belongs to a thread, and a thread belongs to a contact. A chat, a call started inside the widget, a callback request and an out-of-hours form are not four records a nightly job reconciles — they are four ways into the same one.
Chat, voice, or both in one widget
A widget runs as chat only, voice only, or hybrid. In hybrid the visitor picks, and can start typing during a call — which is how a postcode or an order number gets entered correctly instead of spelled out three times.
Callback requests that actually call back
A request carries the name, the number, the preferred hour, the page they were on and what they wrote. Switch on auto-call and it becomes a real outbound call row with its own status, rather than an email somebody has to notice.
And the channels that are not your website
A session can also run over SMS, WhatsApp or email. Those conversations are the same object with a different provider on them, and they get a far longer inactivity window, because nobody answers a text in ninety seconds. An email thread stays open for three days, so the reply that comes tomorrow morning lands in the same conversation.
Coming back is not starting again
A session knows the session before it, and sessions hang off a thread that hangs off a contact. Somebody returning tomorrow is a continuation, and how much of the history they see on the way back in is your choice.




Every Detail, With the Preview Beside It
Colours, position, greeting, the channels this widget offers, the sound it makes, how much history it shows on return, and which domains are allowed to embed it at all — set in one place, with the thing you are configuring rendering as you go.
And When the AI Should Stop
This is where most support bots fail — not because they did not know the answer, but because the hand-off is a form that asks for everything again. Here, human-active is a state of the same session.
The agent can ask for a human itself
Requesting human support is a tool the agent calls, so escalation is a decision inside the conversation rather than a keyword filter on top of it. The session is flagged and the reason travels with it.
One operator, locked to the session
Taking over switches the session from AI-active to human-active and records who took it and when. Two people cannot both be answering the same visitor while each assumes the other is not.
Or a rule notices before anybody asks
Attention rules run against live chats too — timed by the clock or by message count — reading one field out of a structured output and raising the session on the dashboard when it turns.
Handing back is allowed too
Human-active is a state, not a one-way door. An operator who has resolved the awkward part can return the session to the agent for the rest of it.
What the Agent Is Allowed to Know and Do
A support agent that can only quote help articles lengthens the path to a person rather than replacing it. These look things up mid-conversation, act, and put real controls in the chat.
Knowledge it searches, not knowledge it memorised
The agent searches and loads your knowledge during the conversation rather than carrying all of it in a prompt. Answers stay current because the source is read at the time of asking.
And knowledge it can be taught
What it learns is stored as a reviewable item attached to the flow — visible, editable and removable — rather than smuggled into a model nobody can inspect.
The customer's actual record
Orders, tickets, entitlements, whatever you keep — read mid-conversation through a tool you define, so "let me check that for you" is a lookup rather than a stalling phrase.
It can put real controls in the chat
Choices, links and small forms render as controls the visitor taps rather than as a paragraph asking them to type an option. On SMS, WhatsApp or email, where there is no UI to render, the same interaction degrades to numbered lines.
On SMS, WhatsApp and email there is nothing to render — the same interaction turns into numbered lines there instead of arriving broken.
A Widget Is a Public Endpoint
It sits on every page with no login in front of it, and every session costs money. These are the parts nobody advertises and the ones that matter the day somebody notices.
Domains that may embed it
The widget carries an allow-list. A snippet lifted off your page does not run on somebody else's, which is the difference between a public widget and an open account.
Three separate rate limits
Messages per minute, messages per minute within one session, and new sessions per minute from one address. Three different abuses, three different ceilings.
Sessions that end honestly
Closed by the team, closed by the AI, closed by the contact, timed out, or over its duration limit. Five reasons, recorded, so your resolution rate is not quietly counting abandonments.
A resolution rate that counts abandonments is not a resolution rate. So the reason is a field of its own.
And What the Case Is Worth Afterwards
Every finished conversation — handled by the AI, by a person, or by both — is analysed with the same machinery a phone call gets. What is measured is not only whether it was resolved but what the journey cost.
Illustrative values.
Knowledge and documentation gaps point at the process rather than at the person. The whole pack is under Performance Analytics.
What Teams Actually Run With It
Six conversations, one record per customer.
The question that never needed a person
"Where is my order" is answered by reading the order, not by quoting a help article about orders. The session closes with a reason and a structured record of what was asked and what was done.
The escalation that does not restart the story
The agent asks for a human. Somebody takes the session, reads what has already been said, and carries on in the same thread. The customer never types their order number a second time.
Talking and typing at the same time
Mid-call the agent puts a short form in the chat beside it. The IBAN, the address, the reference number get typed correctly the first time while the conversation keeps going.
Out of hours, not out of reach
At 23:40 the widget collects a callback request with the hour they would like. At 09:00 the platform places the call itself, with the page they were reading and their message already in hand.
The ticket writes itself
When a conversation closes, the fields that matter — product, symptom, what was tried, whether an SLA is at risk — are extracted and posted into your ticketing system with the transcript attached.
Answering in a language nobody on shift speaks
The agent handles the conversation in the visitor's language. When it escalates, the operator gets the thread they can read, and the reply goes back out in the language it came in.
When the escalation goes to a phone: the webphone, queues and live monitoring live under Softphone & Contact Center, and everything that should happen after the conversation lives under Automations & Workflows.
And you do not have to build any of it by hand
The agent, the lookups it performs, the forms it puts in the chat, the widget itself and the fields a finished conversation leaves behind are all buildable and editable with AI assistance.
The support agent, written from your policy
Describe what you support and where the limits are, and the assistant writes the agent: the tone, the questions it must ask before acting, and the point at which it stops and asks for a person.
The lookups it needs, built
If answering properly means reading your order system, the assistant builds that tool end to end — parameters, request, and the mapping of the response back into something the agent can say.
And the forms and choices in the chat
Which fields to collect, what the options should be, when a link is better than a paragraph — proposed as real interactions rather than as instructions telling the model to "ask the user".
The widget, matched to your site
Colours, greeting, position, which channels to offer and how much history a returning visitor sees — described once instead of clicked through setting by setting.
The fields the ticket should carry
It proposes the structured output too, so a finished conversation leaves typed fields you can route and report on, rather than a transcript somebody has to read to categorise.
And it says what it assumed
Your refund threshold, your escalation path, your out-of-hours policy — it lists what it had to guess and asks, instead of writing a plausible number into a live support agent.
Every proposal arrives as an explicit list of edits with the reason each one is in the plan, and a support agent is one of the places where reviewing that before it goes live matters most.
Chat, call, callback and form all write into it
So an abandonment never counts as a resolution
The hand-off is a state of the same session, not a new ticket
One script tag, no build step, on any domain on your list