Sounds & accessibility
The widget ships with a notification chime and with keyboard and screen-reader support built in. There's one setting on this page; the rest is behaviour you should know about — including the gaps, because knowing them is what lets you answer an accessibility questionnaire honestly.
The notification chime
Turn it on or off with Sound Notifications at Dashboard → Widget → Behavior. It's the only sound control there is.
When it's on, a short two-tone chime plays as a reply arrives — roughly a quarter of a second, rising from 880 Hz to 1100 Hz. It's generated in the browser with the Web Audio API rather than downloaded, so there's no audio file to host, no request to block, and nothing to swap for your own sound.
Three things to expect:
- It fails silently. Browsers block audio until a visitor has interacted with the page. The first chime of a session may simply not play, and nothing breaks when it doesn't.
- It marks the end of a bot reply, not every new message. A message typed by a human agent after a handoff arrives without a chime — the unread counter on the launcher is what signals it.
- The chime is off unless configured. A workspace that has never saved a widget configuration starts silent; the toggle in the customizer shows on, but nothing is stored until you press Save Changes.
🖼️ [Image] — The Behavior section with the Sound Notifications toggle.
Keyboard use
The widget is operable without a mouse:
- Enter sends the message; Shift+Enter inserts a line break.
- Every control is a real button or link — the launcher, the header's close, expand, escalate and return-to-bot buttons, quick replies, carousel arrows, the View details link on a card, the attachment button, the star rating. All of them are reachable with Tab and activated with Enter or Space.
- Escape closes the chat while focus is on your page. Because the chat is inside an isolated iframe, Escape pressed inside the conversation doesn't reach that handler — visitors close the chat with the header's close button, which is the first stop in the tab order.
Screen readers
The chat is built to be announced correctly, not merely to be technically traversable:
- The message list is a live region (
role="log",aria-live="polite", labelled "Chat messages"), so replies are read out as they arrive without interrupting whatever the reader is mid-sentence on. - The chat window itself is announced as a dialog labelled "Chat window"; the header is a
banner. - Progress and status text — the typing indicator ("Bot is typing", "Agent is typing"), the thinking state ("Bot is thinking"), the escalation banner, and the unavailable panel — are status regions, so a visitor who can't see a spinner still knows something is happening.
- Controls carry explicit labels: "Open chat" / "Close chat", "Expand chat" / "Shrink chat", "Talk to a human agent", "Exit chat with agent — resume AI assistant", "Attach file", "Message input", "Send message", "Scroll left" / "Scroll right", "Rate 4 out of 5", "Close preview".
- The unread badge is announced as "3 unread messages" rather than as a bare number.
- Product images take their alternative text from the product name, and decorative elements — avatars, status dots, icons that duplicate a nearby label — are hidden from readers so they don't clutter the reading order.
Focus visibility
Every interactive element is a native button or link, so browsers apply their own focus indicator; nothing in the widget suppresses it. Two controls carry a deliberate high-contrast ring of their own — the escalation button in the header, where the header color could otherwise swallow the default outline, and the call-to-action on the unavailable panel. The message box gets its own focus styling in your brand color.
Known gaps
Stated plainly, because you may need to answer for them:
- No
prefers-reduced-motionsupport. The launcher pulse, the open and close transitions, the typing dots, and the smooth carousel scroll run regardless of the visitor's motion preference. All of them are short and small-amplitude, but the preference isn't honoured. - No focus trap. Focus can leave the open chat and continue into your page, and opening the chat doesn't move focus into it — the visitor tabs in.
- Escape doesn't work from inside the chat, as described above.
- Interface strings exist only in English and Serbian. Your bot's replies follow the visitor's language automatically (Languages & cost tracking), but the widget's own labels and screen-reader text fall back to English outside those two.
Attachments and ratings
Two related behaviours visitors will meet:
- Attachments — visitors can send PNG, JPEG, WebP, GIF, and PDF files up to 10 MB. Oversized files are rejected with a message before anything uploads.
- Rating — after several bot replies the widget offers a five-star rating with an optional comment. It's keyboard-operable and each star is labelled. Neither its timing nor its wording is configurable.
🎬 [Video] — Navigating the widget entirely by keyboard: opening it, sending a message, and tabbing through product cards to View details.