Web chat widget
One script tag on your site.
Web chat puts a conversation on the business's own website and lands it in the same inbox as WhatsApp and email. There is nothing to build: the dashboard's widget designer produces one script tag, and the widget takes care of the visitor session, the transport and the offline form.
Install
Copy the snippet from Settings → Integrations → Web chat and paste it before </body>. It is one line, and it is the only line:
<script src="https://your-platform.example.com/widget.js" data-widget-key="wgt_YOUR_WIDGET_KEY" async></script>
The widget draws a launcher on the page and the chat panel inside its own iframe, so your site's CSS cannot break it and its CSS cannot touch your site. It weighs about 22 kB and loads async, so it never blocks your page.
Framework notes
- React / Next.js: put the tag in the root layout (
app/layout.tsx) inside<body>, or add it withnext/scriptandstrategy="afterInteractive". Do not render it inside a component that unmounts - the session lives inlocalStorageand survives navigation on its own. - WordPress: Appearance → Theme file editor → footer.php before
</body>, or a "header and footer scripts" plugin. - Shopify: Online store → Themes → Edit code → theme.liquid before
</body>. - Single-page apps: one tag, once. The widget is a singleton and ignores a second load.
Allowed origins
The widget only answers on the origins the business listed in the designer (https://www.example.com, https://shop.example.com). Anywhere else it logs one error to the console and draws nothing - so a copied key on someone else's site is inert. Add staging and preview hosts to the list, or you will see the error there.
Identifying a visitor
A visitor starts anonymous. When the designer's ask for details option is on, the panel asks for a name, an email and/or a phone before the first message (or when the visitor chooses to give them), and the platform promotes the visitor: an existing contact with that email or phone is matched and the thread joins their history; a new contact is created otherwise. The visitor never has to fill it twice - the session, and the identity, live in the browser's localStorage for the widget's origin and survive navigation and reloads.
Business hours and the offline form
The designer sets hours per weekday in the workspace's time zone. Outside them the widget shows the offline message and the offline form; a submission creates the contact and the conversation so an agent answers it first thing, on the channel the visitor gave.
What the widget never does
It never reads your page's DOM, cookies or forms; it never loads a third-party script; it sends nothing but the visitor's own messages, the page URL and the referrer. Its network calls go only to the platform's public web chat endpoints, over HTTPS and a signed visitor token that identifies the session and nothing else.
https://communication-api.artofluminaire.com
Every response carries X-Request-ID; quote it when you write to support.