The Website bubble drawer
Select Deploy on the Chatbot card, or open the arrow beside it (Deploy options) and choose Website bubble. A panel slides in from the right with the description “Embed a floating chat bubble on any website.” It has two sections. Shopify and WordPress appear in the menu as disabled.Specific domain
The switch Allow on specific domains restricts where the bubble runs. The text reads “Allow the bubble only on the domains you list.” When it is off, the bubble runs on any site. When it is on, enter one entry per line in Domains. The hint reads “Enter each domain in a new line”. Select Save changes. Kylo normalizes what you type. It splits on newlines and commas, lowercases, and strips the scheme, any path, the port, and a trailing dot. Sohttps://Example.com/pricing is stored as example.com.
A wildcard covers subdomains at any depth, but never the bare domain. List both when you need both.
If a save fails the drawer shows “Could not save. Try again.” The drawer’s own placeholder shows the two forms
https://example.com and https://*.example.com.
Widget setup
Widget setup shows the snippet under “Paste this code on your site to install the chat bubble.” Kylo creates the embed key the first time you open the drawer, so the snippet is ready at once. The key is public. It only identifies your connection, and the allow-list and rate limits do the protecting.How the bubble loads
- The snippet adds
widget.jsto the page with your key indata-key. A script without a key logs a warning and does nothing. widget.jscalls/api/widget/{key}/config. The request carries the page’s origin. A key that does not exist returns 404, an origin outside the allow-list returns 403, and a connection that is off returns a config withenabledfalse. In all three cases the bubble does not appear and nothing is shown to the visitor.- With a good config,
widget.jsadds a fixed iframe in the bottom-right corner, 16 px from the edges. It is 64 px square while closed and grows to at most 640 by 744 px when opened, and shrinks to fit small screens. - The iframe loads
/embed/chatbot/{key}from your Kylo host. The chat runs inside the iframe, so Kylo’s UI never touches your page, and the script never throws errors into your page. - The visitor’s browser keeps a session id under the key
kylo_sid_{key}in local storage, so a returning visitor continues the same conversation.
What the visitor sees
The greeting, placeholder, footer, accent color, bubble radius, and the switches for attachments, dictation, copy, and delete come from the Display tab of the Playground, and the assistant name and picture come from its Overview tab. Changes apply to the live bubble after you save them there.Limits
Beyond these the message endpoint answers
429 and the visitor sees no reply. Each reply the agent sends spends a credit, and a paused plan stops replies. Origin checks stop casual embedding, but a non-browser client can fake an origin, so the rate limits and credits bound the rest.
Send the setup steps by email
The drawer footer has Send instructions. It opens Send instructions via email with one Email field and sends the snippet and steps to that address. Success shows Instructions sent. The button is disabled with the tip “Save changes first to enable email instructions” until the connection exists.Transcripts
Website chat threads appear in Conversations with the other channels. Message bodies are stored encrypted. See Conversation privacy.Embed website chat
The step-by-step guide, including how to test an allowed and a blocked domain.
