Website Agent Setup
The website agent shares the demo agent's knowledge, so setup builds on the same foundation: a site, ingested content, and Floe-prepared demo context. Once those are in place, you enable the website agent and shape how it behaves from your site settings.
Prerequisites
The website agent answers from the same knowledge as the demo agent, so it needs the same groundwork:
- Site created — a site pointed at your product. See Sites.
- Content ingested — your docs and knowledge base, so answers are accurate. See Ingestion.
- Demo context prepared — needed for the live-demo hand-off to drive your product. Floe prepares it after ingestion. See the Quickstart.
If you only want top-of-funnel Q&A (no demo hand-off), content is the essential piece — that's what answers are grounded in.
You can also add Ready Reference Guides under Knowledge → Facts for small authoritative facts missing from your sources. They ground Q&A without supplying demo navigation. Website Agent answers may share relevant excerpts with public visitors, so never put secrets or customer-specific data in a guide.
Enabling the website agent
A new site starts with the website agent turned on. Its switch is on Website Agent → Setup: turn it off there, and while it is off, its pages offer Turn on the Website Agent instead of the configuration below. A site created before the website agent was on by default keeps the setting it had, so if yours is off, turn it on from the same page. Switching it either way takes effect on your site's next page load, with no redeploy, and keeps your configuration.
Try it before you install
Website Agent → Setup → Try it runs your website agent over one of your own pages, inside the dashboard, without adding anything to your site. Pick one of your pages from the list, then talk or type to it as a visitor would: it answers from your content, shows that page's suggested questions and nudges, and, if your live demo is set up, hands off to it when you ask. Your page appears live where your site allows it, and as a picture of the page where it does not. Nudges tied to a particular section of a page appear only on your live site.
Test calls use credits like any other call. They are not saved: no conversation, lead or email from Floe comes from them, and they are left out of your insights. A meeting you book through the agent during a test call is a real booking: your calendar sends its usual invitations, and the meeting does not appear in Floe. Any member of your organization can run one while the website agent is turned on.
Configuring the website experience
Open Website Agent → Configure in the dashboard. The page runs from who presents, to who they are talking to, to what they say:
- Video avatar turns on the live presenter, and is off by default. On, the launcher becomes a Talk to me presenter and live sessions get a talking head; off, Floe uses the compact Ask pill. Pick a presenter from Floe's curated set: there is nothing to upload and nothing to configure, and Floe hosts the clips. Visitors who prefer reduced motion get a still presenter. During a call the live presenter stays on screen for the whole conversation. If you would rather it settle into a quiet idle clip after a stretch of silence, the
avatarIdleAfterMsSDK option turns that on; a resting presenter still holds an open avatar session and is billed for it. A minute with the video avatar uses more credits than one without; Organization → Usage shows the rate. The video avatar is enabled per deployment — talk to us if you want it on. - Personality & tone controls this agent's identity, tone, answer length, and pace. Warm Guide is the default, alongside Witty Peer, Crisp Expert, and a custom tone. When a chat becomes a demo, the session keeps the Website Agent's voice and pace while the Demo Agent's tone, identity, and answer length take over.
- Languages & voices picks which languages this agent speaks and the voice for each — English only until you add another. The session's voice comes from here, not from Personality & tone. See Languages & Voices.
- Ideal customer profile describes who you sell to: a summary of up to 1,000 characters and up to eight buyer personas, each with a name and pain points. Floe drafts it from your content when research runs; edit it to say who you sell to. The Website Agent and the Demo Agent both use it: to choose which question is worth asking, and to lead with the part of your product that addresses a matching visitor's problem. The summary and personas add no questions and are never mentioned to a visitor. Once a conversation or a demo ends, Floe also uses it for the lead score your team sees. Clear the summary and personas and both agents behave as they would without that profile, and leads are scored on engagement alone (a lead marked Not a fit still scores zero); a profile you cleared stays empty. A change applies from the next conversation. The same card is on Demo Agent → Configure. It is separate from the Demo Agent's qualification questions.
- Not something we do, on the same card, lists requests your product cannot help with. Add or remove up to ten short items, such as “selling or renting property” for a CRM. Your edits stay in place when you refresh your content.
- Website Agent controls opener suggestions, identity capture, the live-demo hand-off, and display mode.
- Add up to six opener suggestions (100 characters each), or leave them blank to derive suggestions automatically.
- Identity capture is off by default and never gates the first answer. Ask on open, after 1–10 answered product questions (two by default), or when the visitor shows demo intent. Requests such as “tell me about pricing” and follow-up questions count, once per message; replies to the agent’s own questions and small talk are meant not to. Either way, the agent asks no later than two answered visitor messages after the number you chose, counted on the current page. Choose at least one of name, phone, email, company, and role; mark individual fields Required, and choose a Phone region when phone is selected. Beside it, Ask for chooses between a phone number and a WhatsApp number, and Verify the number with a code asks the visitor to enter a code sent to the number on WhatsApp. A number that cannot receive WhatsApp messages, or that has reached the daily limit of codes for that number or visitor, counts as declined; only when codes cannot be sent at that moment is the number kept without the verified label. See Ask for their details. Each field can keep the card's timing or take a moment of its own, so you can ask a name when the chat opens and leave the email until the visitor asks for a demo. Setting the card's timing to Never turns off only that default — a field with a moment of its own is still asked at it, and turning identity capture off is what stops every ask.
- Offer a live demo is on by default. Its optional CTA label accepts up to 60 characters; blank uses the shared site CTA.
- Offer it on phones, beneath it, is also on by default. Turn it off to keep the Website Agent's live demo off phones. A visitor on a phone who asks the agent to see the product is told the live demo works on a computer. When your site has a Booking link (see Booking integrations), the agent then opens it so they can book a time with your team. Without one, it asks for an email so your team can follow up, provided the visitor has given any consent your embed requires and identity capture, if on, asks for an email in the chat; otherwise it points them to your first custom link, when you have one, or suggests opening the page on a computer. Your page's own demo button reaches the agent on a phone when your site has a Booking link or the visitor's consent allows a follow-up; otherwise your page's fallback runs. Tablets and computers still get the live demo. What a phone visitor shares reaches your team like any other lead; see What reaches your sales team.
- Display mode is a floating card or a docked sidebar; see below.
Email ownership is shared with your Demo Agent. Turn on Verify emails that may not belong to the visitor to ask some prospects to confirm their email before starting a live demo. Visitors can type the emailed code or read it aloud, and continue asking questions while they check their inbox. The setting is off by default. See email ownership settings.
Identity capture happens in the conversation, with no separate form. The agent asks for one detail at a time, skipping anything already known — from a demo link, the SDK's userInfo, or an answer earlier in the same session — and asks visitors to type phone and email into the message box, which opens automatically. Submitting finishes that detail without a spoken read-back or another confirmation. A phone number typed without a country code shows the country the agent will assume, and typing a code changes it; when a number given without one belongs to another country, or was spoken, the agent checks its country with the visitor. On a phone, tap the field if the keyboard does not open. A phone number or email the visitor volunteers is kept even when you have not selected that field or have turned off identity capture. A spoken value is shown in the box to check or correct and submit; the Demo Agent and Website Agent never read a visitor's own contact details aloud. They can still share your published contact details. Where contact capture is enabled for your deployment (see Security), submitted details appear in the prospect record and follow your existing CRM, recap, and team-alert settings; until then they are not stored. Each detail is asked for once; a declined detail may be asked one more time as the session wraps up, and a second decline is final. An email that is obviously not a real inbox, such as test123@gmail.com, is declined and never stored. Required details never withhold answers, but an unanswered required detail holds the transition into a live demo, and the agent asks for it again if the visitor asks for the demo while it is still unanswered. See Ask for their details and consent behavior.
The Website Agent card offers a Floating card (the default) or a Docked sidebar. Sidebar width is 320–480px, with 400px as the default.
The docked sidebar behaves differently at three widths:
| Viewport | Behaviour |
|---|---|
| 1024px and up | Narrows your page to make room for the sidebar |
| 768–1023px | Overlays your page instead of narrowing it |
| Below 768px | Takes over the full screen — a 400px rail on a 390px phone isn't a rail |
To narrow your page, Floe sets margin-right on <html> (plus a matching max-width where the browser supports it) and marks the element with data-floe-docked.
Anything position: fixed on your page will not move. Fixed elements are positioned against the viewport, not against <html>, so a fixed header or cookie bar keeps its full width and ends up underneath the sidebar. This affects most sites, so plan for it.
You have two ways to handle it. Either offset the element yourself, using the --floe-docked-viewport-offset variable Floe publishes — it holds the pixels currently reserved for the sidebar:
/* Only applies while the sidebar is docked. */
html[data-floe-docked] .my-fixed-header {
right: var(--floe-docked-viewport-offset, 0px);
}
Or turn on Squeeze fixed headers and banners on the Website Agent card, which makes Floe narrow your fixed chrome for you without any CSS. Test it on a real page.
The second switch, Tell the site's scripts about the narrower width, reports the reduced width to your responsive JavaScript. Stylesheet media queries always see the full viewport regardless.
If your page root genuinely cannot take a margin — a 100vw grid, a fixed app shell, or a page whose real scroll container is an inner div — put data-floe-dock-target on that one container and the squeeze moves there instead. Never put it on a fixed element: it stops <html> narrowing altogether, so your page returns to full width and the sidebar overlaps it.
Manage contextual prompts on Website Agent → Nudges. The Nudges tab lists your site's pages by path, so you can open an area such as /blog and then one page under it, and search by a page's path, a section or a question's wording. Filter to nudges that are on, off, or never clicked. A page shows its saved nudges and the questions suggested for it. Each saved nudge reads as a sentence: the part of the page a visitor reaches, and the question or offer a visitor can choose. You can edit its wording (up to 90 characters), move a nudge to another section of its page or to the page itself, add one for any page, and switch off one nudge, a page's nudges, or all nudges without deleting any. A nudge set for the page itself shows until the visitor reaches a section that has its own nudge. Nudges and suggested opening questions recognised as live-demo offers are hidden wherever the live demo isn't offered, including on phones when Offer it on phones is off. A site can hold up to 300 saved nudges. Logo, accent color, and the shared CTA belong in site Settings.
Suggested questions cover pages without a suitable saved nudge, including blogs and guides already in your knowledge. It offers short questions phrased as the visitor would ask them. It can offer a section-specific question, or a question about the whole page when that is what your content supports, in the visitor's selected enabled language. New pages need ingestion; opening a page does not add it to your knowledge.
Their switches are on the Nudges page's Settings tab. Each change there saves straight away.
- Suggest questions for each page turns these questions on or off. Show nudges must also be on for nudges to appear.
- Open chats about the current page lets the agent begin a new conversation with a question about the current page or section. It works independently of visitor analytics. When no relevant question is available, the agent starts with its usual welcome without making the visitor wait. It answers a visitor's own question directly and preserves an ongoing conversation's topic.
- Learn from conversations shows the questions that lead to useful conversations first and replaces suggested ones that don't; your own nudges stay. It needs one of the two switches above, plus Collect visitor analytics events and Record conversation transcripts (see Conversation outcomes). Your saved wording and removed questions stay under your control. Earlier visitor interests can help make suggestions more relevant when visitor analytics and tailoring are enabled.
- A page's own switch turns off every nudge on it, suggested questions included, and keeps your choices about individual questions; Save applies it. A page you turned off stays listed so you can turn it back on. Use Open chats about the current page to control spoken opening questions separately.
- Remove turns off a question and similar questions in every language. Restore it under Removed questions on the Settings tab. Edit and Save wording keep your wording until you choose Allow updates. Saved wording remains editable even while the question isn't shown to visitors.
For the last 7, 30 or 90 days the page also shows how each nudge did: times shown, clicks and click rate, with totals for the site and the number of chats started, meaning new conversations a visitor began within two minutes of clicking a nudge. These count events, not people: a visitor who meets the same nudge on three separate page loads counts three times. The Never clicked filter lists nudges shown at least 50 times in the range without a click. Counts need Collect visitor analytics events to be on under Site → Settings → General → Visitor data collection; while it is off the page shows no counts. A range longer than the site keeps visitor events for is not offered.
Your edits survive research and automatic suggestion updates. When research runs again, an ICP or a saved nudge list you have edited is kept as it is, an ICP you cleared stays empty, and nudges you switched off stay off. Only settings you have never touched are refreshed from your latest content. To rebuild the saved nudges using your existing knowledge, use Refresh from site on the Nudges page: it asks first, then replaces the saved list, edited ones included, and shows the new list when it's ready. If your site content changed, refresh your knowledge first. Page-off choices and removed suggestions stay off. If generation fails partway through, your existing list stays in place. Editing a saved nudge keeps its engagement counts; deleting it and adding a new one starts new counts. If the saved list changes while you are editing, Floe keeps your unsaved edits and asks you to load the latest list before saving. Loading the latest list asks before discarding those edits.
Conversation outcomes
Conversation outcomes, under the whole-site view of the Nudges page, shows website conversation opens, with results by suggestion. With Learn from conversations enabled, it also shows which led to useful help. This result is separate from a lead score.
Results require Collect visitor analytics events and Record conversation transcripts under Site → Settings → General → Visitor data collection. They cover retained conversations, so a range beyond your retention window is unavailable. See Security & Privacy for what is assessed and kept.
Integrate with a coding agent
Paste this into your coding agent after replacing the client-key placeholder with your client key. Website Agent → Setup shows it, already filled into the embed below:
Integrate Floe's Website Agent into this marketing site.
Requirements:
- Use Floe's hosted browser SDK at https://cdn.floe.so/floe-sdk.iife.js.
- Load the SDK and a same-origin /floe-init.js file as external deferred scripts, in that order. Do not add inline JavaScript.
- In /floe-init.js, initialize Floe exactly once with clientKey: "YOUR_CLIENT_KEY" and websiteAgent: true. Do not set demoMode.
- Keep the object returned by Floe() in a const named floe.
- Mount the integration once in the marketing-site shell so it survives client-side route changes.
- If the site has a "See it live" button, wire it to await floe.requestDemo(). Preserve the site's existing booking or navigation fallback when that method returns false.
- If the site should catch desktop exit intent, add exitIntent: true or an object with the desired message, minimum dwell, and top-edge threshold. Do not start a session from an exit signal.
- Do not hard-code identity capture, opener suggestions, ICP buyer personas, contextual nudges, the video avatar, or live-demo availability; those are Website Agent dashboard settings.
- The Website Agent does not require demoSiteId for its in-place demo hand-off; the client key resolves the site.
- If the framework permanently unmounts the integration, call floe.disconnect() during teardown.
- Report the files changed and how to verify the launcher, Q&A, route changes, live-demo hand-off, fallback, and teardown.
Canonical embed
Add the two external scripts near the end of <body>. Keeping initialization in your own file works with a strict Content-Security-Policy. Website Agent → Setup shows this embed with your client key filled in, ready to copy:
<!-- Allow https://cdn.floe.so in script-src. -->
<script src="https://cdn.floe.so/floe-sdk.iife.js" defer></script>
<script src="/floe-init.js" defer></script>
// /floe-init.js — served from your own origin
const floe = Floe({
clientKey: "YOUR_CLIENT_KEY",
websiteAgent: true,
});
floe.ready.catch((error) => console.error("Floe failed to initialize", error));
document.querySelector("#see-it-live")?.addEventListener("click", async () => {
if (!(await floe.requestDemo())) {
window.location.assign("/book-a-call");
}
});
requestDemo() sends the demo request to the Website Agent already on the page: with a video avatar the presenter takes it; without one, or when the presenter can't be shown, the chat panel opens. It resolves false when no runnable demo or enabled Website Agent handled the request, or when Offer a live demo is off, so keep the fallback. On a phone your site keeps the live demo off, the agent takes the request, and it resolves true, when your site has a Booking link or the visitor's consent allows a follow-up; see Opening the demo from your own button.
Add exit intent
Exit intent is off by default. Opt in with exitIntent: true, or customize the opening message, minimum dwell, and top-edge threshold:
const floe = Floe({
clientKey: "YOUR_CLIENT_KEY",
websiteAgent: true,
exitIntent: {
message: "Before you go — what would you like to know?",
minTimeOnPageMs: 5000,
thresholdPx: 20,
},
});
After the dwell, a desktop pointer leaving through the browser's top edge opens the dormant Ask Floe panel, once per SDK instance. No session starts, no microphone permission is requested, and no visitor message is sent until the visitor actually clicks or types.
For mobile or a funnel signal specific to your application, call the manual API after the SDK is ready:
await floe.ready;
checkoutFlow.onAbandonment(() => {
floe.showExitIntent({ message: "Still deciding? Ask Floe anything." });
});
See Browser SDK: Exit intent for the runtime methods and return values.
Runtime configuration
clientKey(string, required) is the public browser key from site settings. It resolves the site for both Q&A and the in-place demo hand-off.websiteAgent(true, required) selects the Website Agent. Do not also setdemoMode; demo mode takes precedence.websiteAgentDisplayMode("floating"or"sidebar") optionally overrides the dashboard display setting for this embed.websiteAgentSidebarWidth(number) applies to sidebar mode, defaults to 400, and is clamped to 320–480.launcher(object) acceptsposition: "bottom-right" | "bottom-left"and an optional pixelinsetwhen another widget occupies the default corner.exitIntent(trueorobject) opts in to one-shot desktop top-edge detection. The object acceptsenabled,message,minTimeOnPageMs, andthresholdPx;trueuses a 5-second dwell and a 20px threshold.userInfo(object) supplies current-session context such asexternalId,email,phone,name,company, anddesignation. It is unverified browser input: it never authenticates the visitor, and it never verifies that a detail belongs to them. The agent may greet them by a name you pass and will not ask for a detailuserInfoalready matches. A value passed this way only suppresses that ask — it is not recorded as a contact detail captured from the visitor.demoCalendarLink(string) overrides the site's booking URL for booking controls. It must use HTTPS. Cal.com, Calendly, and Schedule Hero open inside the agent; other schedulers open separately. An explicit{email}query value enables email prefill.debug(boolean) defaults tofalse.
demoSiteId is not required in Website Agent mode: the public client key resolves the site, and the demo hand-off stays in the same session. Identity capture, nudges, openers, ICP, avatar, and whether to offer a demo are dashboard settings rather than Floe() options.
See the Browser SDK for the shared API and lifecycle methods.
Verifying your setup
- Load a page where you've embedded Floe. The launcher should appear in the corner: Talk to me if the video avatar is enabled, otherwise Ask followed by your site's name.
- Open it and ask a question you know your content covers — confirm the answer is accurate.
- Ask about something you haven't documented — confirm the agent declines honestly instead of guessing.
- Scroll a page with a nudge configured and confirm the prompt appears.
- Open it with the main launcher (or Talk to me). If you have not already granted access, your browser should ask for the microphone immediately. Leave the request open and confirm the agent still connects and welcomes you. Allow access and try speaking; decline and confirm you can type instead. Close the request without answering and confirm Ready to talk? appears after the welcome.
- If exit intent is enabled, wait for its dwell and move the pointer through the top edge. Confirm the dormant panel opens once and that no session or microphone prompt starts until you interact.
- On a computer or tablet, ask to see a live demo and confirm the session hands off into the driven product. If you turned off Offer it on phones, ask from a phone too and confirm the agent says the live demo needs a computer, then offers what your setup allows: your Booking link, an email follow-up, or opening the page on a computer.
If answers are thin or wrong, check Knowledge → Library and your Ready Reference Guides under Knowledge → Facts. Improve and re-run ingestion when the source material is incomplete; add a Reference Guide when a small authoritative fact is absent from those sources.
FAQ
Do I need a separate integration for the website agent and the demo agent?
No. It's one SDK embed. websiteAgent: true runs the top-of-funnel Q&A that hands off into the demo; demoMode: true runs the demo directly.
Where do the nudges come from? Floe offers questions from your ingested content and Ready Reference Guides. You can keep a saved set and allow page-relevant suggestions on other known pages. Edit, remove, or turn them off from Website Agent → Nudges. To cover a newly published page, include it in your next ingestion.
Can I run the website agent without the live-demo hand-off? Yes. Turn off Offer a live demo and it stays a grounded Q&A surface.
Does automatic exit intent work on mobile?
The built-in detector uses a desktop top-edge pointer signal. On mobile, call showExitIntent() from a signal your application owns, such as an abandoned funnel step. It still only opens dormant UI and does not start a session.
How do I update what the agent knows? Update your content and run your sources again (or let Automatic refresh do it), edit the relevant Reference Guide, or correct what research found. A guide edit is available to the agent as soon as it is Ready. For the live-demo hand-off, ask us to refresh the generated demo context after a significant content change; that refresh is not automatic.