Create your agent
Build an agent in DeskFerry — connect your knowledge base, wire up the tools it should use, and publish. Takes a few minutes, no code.
Paste a single line of code and any DeskFerry agent becomes a live chat widget on your site, help center, or app. Branded, mobile-ready, and wired into your tools from the first message.
Hi! How can I help you today?
Install
Build an agent in DeskFerry — connect your knowledge base, wire up the tools it should use, and publish. Takes a few minutes, no code.
Open the agent's Channels tab, turn on Web Embed, and copy the script tag. It already contains your agent ID — nothing to configure.
Drop the tag into your layout file, theme footer, or template. Deploy. The widget loads asynchronously and shows up in the corner of every page.
Match your site with primary and accent hex values. Contrast-checked against WCAG AA so the widget stays readable everywhere.
Swap the default bot for your logo, a mascot, or a team photo. Launcher icon, in-chat avatar, and offline state — all configurable.
Dock to bottom-right, bottom-left, or anchor the widget to a specific element. Custom margins for navbars and cookie banners.
Rewrite the opening line, proactive nudges, and quick-reply suggestions. Trigger context-aware greetings per page or per user segment.
Detect the visitor's browser language automatically or force a specific locale. The agent responds in 40+ languages out of the box.
Lock the snippet to the exact domains you publish it on. Stops scrapers from lifting your agent into someone else's site.
Install
Paste a single line into your site and the chat bubble appears in the corner. No build step, no plugins, no developer required.
<!-- paste before </body> -->
<script
src="https://cdn.deskferry.com/embed.js"
data-agent="your-agent-id"
></script>Embedding takes about two minutes. First, build or pick an agent inside DeskFerry — connect the knowledge sources and tools you want it to use, then publish it. Second, open the agent's Channels tab and turn on Web Embed; you'll get a single script tag with a unique data-agent ID baked in. Third, paste that snippet into your site's HTML just before the closing body tag — in a layout file, template, or theme footer — and deploy. The widget loads asynchronously, so it never blocks your page render. Once live, every visitor sees a chat bubble in the corner of the page. Conversations stream in real time, the agent uses the same knowledge base and tools you configured, and every message is logged back to your DeskFerry dashboard. No build step, no npm install, no framework lock-in — the same snippet works on a static HTML page, a Next.js app, or a WordPress theme.
Yes — the widget is built to disappear into your brand, not fight it. From the Chat Embed settings panel you can set primary and accent colors with hex values, swap the bot avatar for your logo or a custom illustration, pick the widget position (bottom-right, bottom-left, or inline anchored to a specific element), customize the launcher icon, and rewrite every visible string — the greeting, the input placeholder, the offline message, the human hand-off label. Typography inherits from your site's font stack by default, or you can lock it to a specific font. For deeper control, advanced plans expose a CSS override hook where you can target any element inside the widget shadow DOM. Dark mode follows the visitor's system preference automatically but you can also force a theme. Most teams get the widget feeling native in under ten minutes — no design review required.
Yes — because the embed is a single standard script tag, it drops into any platform that lets you add custom HTML. On WordPress, paste it into the theme's footer.php or use a header-and-footer scripts plugin. On Webflow, add it to Project Settings → Custom Code → Footer Code. On Shopify, add it to theme.liquid just before the closing body tag. On Squarespace, use Code Injection → Footer. On Framer, Wix, Ghost, Carrd, Bubble, and every other site builder we've tested, the path is the same: find the custom-code slot and paste the snippet. For single-page apps built with React, Vue, or Svelte, add the script tag to the root HTML template so it loads once on initial page load. The widget handles its own state across client-side route changes, so you don't need any framework-specific integration. If you run a help center on Zendesk, Intercom, or HelpScout, the same snippet can live inside the help center template too. Learn more about any channel you already use.
Hand-offs are first-class, not an afterthought. You can configure triggers for when the agent should escalate: a visitor explicitly asks for a human, the agent's confidence drops below a threshold, a conversation mentions a refund or cancellation, or a VIP customer is detected by email domain. When a trigger fires, the widget either routes the conversation to a live agent inside Slack, Microsoft Teams, Intercom, Zendesk, or HelpScout, or posts an alert for your team to pick up asynchronously. The full transcript — including the agent's internal reasoning and any tools it called — is attached, so the human starts with full context instead of making the visitor repeat themselves. If no human is available, the agent collects the visitor's email and the team gets a follow-up task. You can also let visitors tag any message with a thumbs-down, which queues the conversation for human review even if the agent thought it was doing fine.
Yes — accessibility is a default, not an upgrade. The widget ships WCAG 2.1 AA compliant: full keyboard navigation (Tab, Shift+Tab, Enter, Escape), visible focus rings on every interactive element, proper ARIA roles and labels on the launcher, message list, and input, and screen-reader announcements for new messages. Color contrast is validated against AA thresholds, and when you pick a custom theme the settings panel warns you if contrast drops below the limit. The widget respects prefers-reduced-motion for visitors who disable animations, inherits the visitor's browser font-size preference, and works with browser zoom up to 200% without clipping. Focus is trapped inside the chat window when open and returned to the launcher on close. We test against VoiceOver on macOS and iOS, NVDA on Windows, and TalkBack on Android. If you need a VPAT for procurement, contact support and we'll share the current report.
Yes — by default, anyone who lands on your site can talk to the embedded agent anonymously. No account, no email gate, no friction. Each visitor gets an anonymous session ID stored in local storage, so if they come back to the site their conversation thread resumes. If you'd rather gate access — for a private customer portal, an internal tool, or a paid product — you can flip the widget into authenticated mode and pass a signed user token from your own auth system; the agent then knows who it's talking to and can personalize answers using that identity. You can also restrict the widget to specific domains from the Chat Embed settings, so the snippet only renders on pages you've approved. Rate limiting, abuse detection, and spam filtering are on by default, so opening the agent to the public web doesn't mean opening the floodgates.
Keep exploring
Manage reusable roles, shared credentials, and secrets with scoped access controls.
Bring your own API key.
Define approval gates for sensitive actions. Agents pause and escalate when they need a human call.
Track organization-wide model usage in real-time with granular dashboards.
Generate detailed audit trails for actions, deployments, and data access.
All data encrypted at rest and in transit.
One snippet, no build step, live in minutes — branded, mobile-ready, and wired into your tools from the first message.