Strings & Localisation
Every user-facing string is overridable via strings in your config. Any key you
omit falls back to the built-in default. This is also how you localise the widget
into another language.
You can use {{botName}} in emptyBody and {{count}} in newMessages for
interpolation. Unknown keys are ignored with a console warning that lists the
known ones, so a typo or an old key name shows up in the console.
Example
setConfig({
apiUrl,
accountNumber,
userHandle,
strings: {
botName: 'Support',
emptyTitle: 'Start a conversation',
emptyBody: 'Send a message below and {{botName}} will get back to you.',
inputPlaceholder: 'Type your message…',
loadingMessages: 'Loading messages…',
conversationEndedNotice: 'Chat ended',
startNewConversation: 'Start a new conversation',
ariaLabels: {
triggerButton: 'Open chat',
closeButton: 'Close',
closeConversationDialogDismiss: 'Keep chatting',
},
emojiPickerList: [
['😀', 'Grinning face'],
['👍', 'Thumbs up'],
// …
],
},
});
Default values (strings)
| Key | Default | Description |
|---|---|---|
botName | Support Assistant | Display name shown in the panel header (its first letter is the avatar) and interpolated into emptyBody via {{botName}}. This is the single name used for the support side — the widget does not distinguish between an AI bot and a human agent (all inbound messages share the same bubble style). |
emptyTitle | Start a conversation | Empty-state title, shown (in bold, under the chat icon) before any messages exist. |
emptyBody | Send a message below and {{botName}} will get back to you. | Empty-state text under the title. Supports {{botName}}. |
inputPlaceholder | Type your message... | Placeholder inside the message text field. |
loadingMessages | Loading messages... | Not shown as text. It's the hover tooltip and screen-reader label of the small spinner in the top-right corner of the message area, which appears while a conversation's messages load for the first time or after Try again. |
loadMessagesError | Couldn't load messages. | Shown when loading messages fails (network/API error), above the loadMessagesRetry button. |
loadMessagesRetry | Try again | Retry button under loadMessagesError. |
sendMessageError | Message couldn't be sent. Try again. | Alert shown when sending a message fails. Stays until the user edits the message or sends again. |
newMessage | 1 new message | Floating "jump to latest" CTA shown when there is exactly 1 unread message and the user has scrolled up. |
newMessages | {{count}} new messages | Same floating CTA when there are multiple unread messages. Use {{count}} for the number. |
closeConversationDialogTitle | End this chat? | Title of the confirmation shown when the user ends an active conversation with the header X. Also its accessible name. |
closeConversationDialogBody | You can start a new conversation later. | Text under the confirmation title. |
closeConversationDialogCancel | Keep chatting | Secondary button. Dismisses the confirmation without ending the chat. |
closeConversationDialogConfirm | End chat | Primary button. Ends the chat on the server. |
closeConversationDialogConfirmBusy | Ending chat… | Label of the primary button while the end-chat request is in flight. |
closeConversationDialogError | Couldn't end the chat. Try again. | Shown in the confirmation when ending the chat fails. The primary button stays available to try again. |
conversationEndedNotice | Chat ended | Divider below the dimmed, read-only history when the chat was ended in another tab, on another device, or by support (in place of the empty state when the chat has no messages). Stays until the user presses the header X or startNewConversation. |
startNewConversation | Start a new conversation | Full-width button that replaces the composer when the chat has ended. Clears the ended chat and joins the account's open chat, if there is one. |
Default values (strings.ariaLabels)
These are screen-reader-only labels — they are not rendered visually, but they describe interactive controls for assistive technology. Keep them meaningful when localising. Each key is named after the element it labels.
| Key | Default | Description |
|---|---|---|
triggerButton | Open Live Chat | Floating launcher button that opens the panel. |
chatPanel | Live Chat | The chat panel (role="dialog") while open. |
minimizeButton | Minimize Live Chat | Header minimize button. Collapses the panel and keeps the chat. |
closeButton | Close Live Chat | Header X button. Ends the chat after a confirmation, or collapses the panel when there is no chat. |
messageHistory | Message history | Scrollable message list (role="log"). |
scrollToBottomButton | Scroll to bottom | Floating button shown when scrolled up with no unread messages. |
emojiButton | Insert emoji | Emoji picker button, and the emoji popover it opens. |
messageInput | Type your message | Message text field. |
sendButton | Send Message | Send button. |
closeConversationDialogDismiss | Keep chatting | Backdrop behind the end-chat confirmation. Activating it dismisses the confirmation without ending the chat. |
The end-chat confirmation has no separate aria label: its visible title,
closeConversationDialogTitle, is its accessible name.
Emoji picker
strings.emojiPickerList is an array of [emoji, description] pairs. The
built-in default contains 49 entries. Provide your own list to override it
entirely.
Date & time formatting
Message timestamps are formatted with the browser locale by default. Set
locale in your config to a BCP 47 tag (e.g. en-GB, es-ES) to control this
independently of the strings above.