Skip to content

Live chat

A script-based conversation with your support team. Live chat uses a widget id, not the public API key used by feedback and changelog widgets.

Create and embed

  • As an organization owner or admin, open In-app in the dashboard and choose Add live chat.
  • Name the chat, create it, then copy Embed code from its card.
  • Add the script once near the end of your site's body. Replace YOUR_WIDGET_ID below with the id in the copied code.
<script src="https://www.reflet.app/widget/reflet-widget.v1.js" data-widget-id="YOUR_WIDGET_ID"></script>

The launcher appears after the active widget's settings load. A visitor can send the first message without an account or email. Reply from the organization's support inbox. After the first message, the visitor can request email replies; a confirmation may be required before delivery.

Configure the chat

Open Settings from the chat card. Appearance and behavior are stored in Reflet, not script attributes. Reload the host page to load changed settings.

Deactivate the chat to stop public config and visitor operations. Deleting it removes settings and visitor links, but leaves support conversation records. Remove the embed when retiring the integration.

Identity and privacy

  • The browser stores a random visitor id in localStorage under reflet_visitor_id. That id and the widget id identify the conversation; this is not an authenticated product-user session.
  • Visitors using the same browser origin and storage share this identity. Clearing storage or switching browser/device loses access to that browser's thread. Protect the visitor id like conversation access data.
  • The widget sends message text, optional email, full page URL, document referrer and browser user agent. Keep credentials and sensitive data out of page URLs.
  • The embed does not use SDK userToken signing or feedback-key Allowed domains. An entered email is not verified customer identity.
  • Requests go to the backend URL compiled into the hosted script. Your Content Security Policy must allow the script host and that backend's fetch connections. The panel uses a closed shadow root, so host CSS cannot style its internals.

Errors and limits

  • Messages are limited to 10,000 characters. The backend rate-limits sends, new conversations and email changes. A failed send restores the draft and displays an error so the visitor can retry.
  • Existing conversations poll every five seconds: messages while open, unread counts while closed.
  • The composer sends text only; it can display supported attachments received in the conversation. Enter sends, Shift+Enter inserts a newline.
  • Storage access is required during initialization. If the widget does not appear, check that it is active, the id matches, localStorage is available and script/network requests are allowed. Initial configuration failures do not show an in-page error.
  • For teardown, window.__refletWidgetInstance.destroy() stops polling and removes the panel. Open/close commands and callbacks are not exposed.
  • Controls are labeled, but the panel lacks focus trapping, automatic focus on open and Escape dismissal. Provide another support contact route for visitors who cannot use it.

For the support inbox workflow, see using Reflet. To collect structured reports rather than conversations, use floating feedback.