Live chat widget
Satu baris script, dan website Anda punya live chat yang langsung nyambung ke inbox Suppuo. The widget is a chat bubble for your own website: visitors leave a message without leaving the page, it becomes a ticket in your inbox, and your replies show up right in the widget (and by email).
Install — one script tag
Paste this just before </body> on any page:
<script src="https://suppuo.com/widget.js"
data-suppuo-account="acc_xxxxxxxxxxxxxxxxxxxxxxxx" async></script>
Your exact snippet — with your workspace's real acc_… ID filled in
and a copy button — is in
/dashboard/channels under Live chat widget,
along with a live preview link. That's the whole install: no npm
package, no framework requirement, no CSS to include. The widget is
plain self-contained JavaScript that injects its own styles.
Attributes
| Attribute | Required | Notes |
|---|---|---|
data-suppuo-account |
yes | your workspace's acc_… ID — without it the widget logs a warning and renders nothing |
data-position |
no | "left" puts the bubble bottom-left; default is bottom-right |
data-suppuo-base |
no | API/brand origin override (default: the origin the script was loaded from) — useful for staging |
<script src="https://suppuo.com/widget.js"
data-suppuo-account="acc_xxxxxxxxxxxxxxxxxxxxxxxx"
data-position="left" async></script>
What the visitor sees
- A chat bubble (bottom corner). Clicking it opens a small panel.
- First visit: a short form — email (required), message, optional
name. Submitting it creates a ticket in your inbox
(
channel: "web", subject taken from the first line of the message) and the visitor drops straight into the conversation view. - From then on the panel shows the live thread: their messages, your agents' public replies, the ticket number and status in the header. While the panel is open it refreshes every 10 seconds.
- They can attach files with the paperclip — same rules as everywhere else (8MB per file, up to 5 per message, images/pdf/docs — see Attachments).
- They also get the standard ticket-received email with their private status link, so the conversation survives a closed browser tab — they can continue in the widget, on the status page, or by replying to the email.
The conversation is remembered per browser via localStorage (key
suppuo_widget_<accountId> holding the ticket's access token), so a
returning visitor reopens the same thread. "Start a new conversation"
at the bottom of the panel resets it.
What your team sees
Nothing new to learn: a widget conversation is a normal ticket. It
arrives as open with channel: "web", threads like any other
ticket, triggers Slack/Discord notifications
and auto-responses like any other ticket, and
your reply from the inbox is what appears in the visitor's widget.
How it works under the hood
The widget rides entirely on the
public ticket API — the same three
endpoints the hosted form uses, called cross-origin (the /api/v1/public
surface sends permissive CORS headers; the access token is a
capability URL, not a cookie, so this is safe). If you want a fully
custom chat UI instead, build against those endpoints directly and
skip the widget.
Honestly, the limits
- Polling, not websockets — replies appear within ~10 seconds while the panel is open, not instantly.
- One conversation per browser at a time (per workspace); "Start a new conversation" abandons the old thread from the widget's point of view (the ticket itself stays in your inbox, and the email status link still works).
- In private/incognito mode the conversation lasts only as long as
the tab (no
localStorage).
See also
- Hosted support form — the no-code page version of the same public surface.
- Attachments — file rules shared by the widget.
- Channels — everything else that feeds the inbox.