<script> tag. Visitors can start conversations anonymously, or you can verify their identity with a server-signed JWT so the widget loads with their profile attached.
Create a live chat inbox
Add the inbox
Go to Admin → Inboxes → New inbox → Live chat. Fill in the name, brand name, and website URL.
Configure appearance and messages
Set the launcher colour, position, logo, greeting message, and home screen under the Appearance and Messages tabs. All changes are live as soon as you save.
Install the widget
The anonymous snippet looks like this:baseURL is the URL of your Libredesk instance. inboxID is the UUID shown on the inbox’s Installation tab.
Anyone visiting the page can now open the widget and start a conversation. Every session is treated as a new anonymous visitor unless you add identity verification.
Identity verification
If users are already signed into your product, pass a signed JWT so the widget loads with their existing Libredesk contact. Without verification, the widget cannot tell a returning user apart from a new visitor on a new device.How it works
- Your server signs a JWT with the inbox Secret key (set under the Security tab).
- Your page passes that JWT to the widget via
userJWT. - Libredesk verifies the signature, then upserts the contact by
external_user_id.
JWT payload
| Field | Required | Description |
|---|---|---|
external_user_id | Yes | Stable unique ID from your system. Used to match returning users. |
email | Yes | User’s email address. |
first_name | Yes | User’s first name. |
last_name | No | User’s last name. |
exp | Yes | Unix timestamp (seconds) when the token expires. |
contact_custom_attributes | No | Object of custom attributes written to the contact record on login. |
Sign the token on your server
Pass the token to the widget
JavaScript API
Once the widget loads,window.Libredesk exposes these methods:
| Method | Description |
|---|---|
Libredesk.show() | Open the widget. |
Libredesk.hide() | Close the widget. |
Libredesk.toggle() | Toggle between open and closed. |
Libredesk.setUser(jwt) | Log a user in after page load with a signed JWT. |
Libredesk.logout() | Clear the current session and reset to anonymous. |
Libredesk.onShow(fn) | Register a callback fired when the widget opens. |
Libredesk.onHide(fn) | Register a callback fired when the widget closes. |
Libredesk.onUnreadCountChange(fn) | Register a callback fired with the unread message count. |
Conversation continuity
If an agent is offline, visitors usually leave. Link the live chat inbox to an email inbox under General → Conversation continuity and Libredesk will email the visitor’s message to the agent instead of dropping it.| Setting | Description |
|---|---|
offline_threshold | How long agents must be offline before email fallback kicks in (e.g. 10m). |
max_messages_per_email | Batch size. Messages beyond this split into a new email. |
min_email_interval | Minimum gap between fallback emails for the same conversation. |
Security
Trusted domains
Under the Security tab, list the domains allowed to embed the widget. Requests from other origins are rejected. Supports wildcards:Blocked IPs
Block specific IPs or CIDR ranges from opening the widget:Session duration
Controls how long a widget session stays authenticated before the JWT must be re-verified. Default is10h. Format accepts s, m, h (e.g. 30m, 24h).
