Live Chat
Put a chat widget on your own website so visitors can reach you in real time. A chat is an ordinary conversation in your inbox — it just starts faster.
Live chat is switched on under Project Settings, and only appears when private messaging is enabled for the project.
- It’s the same inbox: a chat becomes a thread alongside your email and portal conversations. Reply with the same composer, insert the same canned responses, close it the same way.
- Nothing is stranded: visitors give an email address before their first message, so a chat nobody answers immediately still reaches them by email.
- Served from your own domain: the widget comes from your portal subdomain or custom domain, so there is no third-party chat script in your customers’ browsers.
- Plan limits: live chat is available on Pro and Team. Pro
Turning it on
- Open Settings in the project sidebar
- Make sure Private messages is enabled — a chat is a conversation in that inbox, so chat cannot work without it
- Enable Live chat
- Scroll to Live chat widget and copy the snippet
The toggle starts off for every project, including new ones. A chat bubble tells your visitors somebody is there, so SupDesk waits until you say so.
Adding the widget to your site
Paste the snippet into your site’s HTML, anywhere before </body>:
<script src="https://acme.supdesk.app/chat.js"
data-supdesk-chat
data-title="Chat with Acme" async></script>The script adds a floating launcher in the corner of the page. The conversation itself loads in a frame only once the page is otherwise idle, so a visitor who never clicks pays almost nothing for it.
The widget’s origin and your custom domain must share the same root domain. The console
always generates the snippet with your active portal origin, so a snippet copied after your
custom domain is set up is fine as is. If you copy the snippet from your *.supdesk.app
subdomain first and add a custom domain later, requests are redirected to the custom domain —
and the loader accepts that redirect only when both share a root domain (e.g. feedback.apibot.dev
and www.apibot.dev both live on apibot.dev). If your custom domain is on a different root,
re-copy the snippet from the console.
This is a different loader from embeds, which use embed.js. An embed
drops a form into the page where the tag sits; the chat launcher floats above the page and opens
a panel. Don’t swap one script for the other.
Attributes
| Attribute | Required | Description |
|---|---|---|
data-supdesk-chat | yes | Marks the tag as the chat loader. No value needed |
data-title | no | Accessible label for the launcher and the frame. Defaults to Chat with us |
data-position | no | right (default) or left — which corner the launcher sits in |
The widget picks up your project’s brand colour automatically, and goes full-screen on narrow screens so the message box isn’t squeezed off the side of a phone.
There is no <noscript> fallback, unlike the form embeds. A conversation needs JavaScript to
work at all, and a visitor without it still has your contact form and your
portal.
On your portal
If you’d rather not touch your own site, the same chat panel appears on your SupDesk portal as soon as live chat is enabled — no snippet required. Portal visitors who have already signed in skip the email prompt, because you already know who they are.
Answering a chat
Chats arrive in Messages like any other conversation, with a Chat badge on the row:
- Green — the conversation is live and nothing is outstanding
- Amber — the visitor is waiting; their last message has gone a few minutes without a reply
Use the Active chats filter above the list to see only the conversations that are still running. The count next to it is how many are open right now.
Inside a conversation, the header shows whether the chat is live, waiting, or ended, and an End chat button appears while it is still running.
Ending a chat
End chat retires the live session — the visitor’s widget stops offering a message box and tells them where to find the conversation. It does not close the thread:
- the conversation stays in your inbox and in the customer’s message history
- you can still reply, and your reply reaches them by email
- they can still reply to that email, and it lands back in the same conversation
Use Close (the thread status) when the whole conversation is finished, and End chat when only the live part is.
Chats with no messages from either side for 24 hours end themselves, so nobody is left looking at a live chat box with nobody behind it.
”We’re online”
The widget tells visitors you’re online only while a teammate actually has the Messages screen open — within the last five minutes. There is no schedule to configure and no status to remember to change: if nobody is looking at the inbox, the widget says you’ll reply as soon as you can, which is the truth.
What it costs against your plan
A chat consumes one submission from your monthly allowance, counted when the visitor sends their first message — the same as one contact-form submission, however long the conversation runs afterwards. Opening the widget and closing it without typing costs nothing.
Notifications
The first message of a chat notifies your team everywhere: Slack, webhooks, push, and email to members on immediate notifications. Every message after that stays on Slack, webhooks, and push.
That split is deliberate. A chat is a burst of short lines, and one email per line would train your team to filter the address that also carries their real ticket notifications.
Privacy
Each visitor’s conversation is confined to their own browser and your project. The widget stores its session inside its own frame, which browsers isolate per website — so a page that embeds your widget without permission gets a blank chat, never somebody else’s conversation. No third-party cookies are set.
Plan limits
| Plan | Live chat |
|---|---|
| Free | Not included |
| Pro | Included |
| Team | Included |
Who can do what
| Action | Owner | Admin | Member |
|---|---|---|---|
| Reply to a chat | ✓ | ✓ | ✓ |
| End a chat | ✓ | ✓ | ✓ |
| Turn live chat on or off | ✓ | ✓ | — |