Deploy Website Widget
This guide embeds Customer AI on your website using the Qefro widget script.
Outcome
- Widget loads from
https://cdn.qefro.com/widget.js - Conversations hit
https://api.qefro.com - Chat is bound to a specific Support workspace
- Optional
identify()for logged-in users
Prerequisites
- Support workspace with validated knowledge (Build AI Customer Support)
- Widget token from Admin Console
- Ability to edit your site HTML / tag manager
Step 1 — Copy embed values
From Admin Console → Widget:
| Attribute | Purpose |
|---|---|
data-token | Publishable widget token |
data-endpoint | https://api.qefro.com |
data-workspace-id | Support workspace id |
Platform: Website Widget.
Step 2 — Add the script
<script
src="https://cdn.qefro.com/widget.js"
data-token="YOUR_WIDGET_TOKEN"
data-endpoint="https://api.qefro.com"
data-workspace-id="YOUR_SUPPORT_WORKSPACE_ID"
async>
</script>
Place it before </body> on pages where chat should appear (or load via your tag manager).
Step 3 — Verify in production-like preview
- Open the page in a private window.
- Ask a known FAQ; confirm citations.
- Ask an unknown topic; confirm refusal.
- Confirm the widget is not bound to an HR workspace.
Step 4 — Optional identify()
When Business Tools must act as the logged-in customer:
<script>
// After your app session is ready:
window.QefroWidget?.identify?.({
token: 'END_USER_JWT_OR_SESSION',
// follow current widget docs for exact payload fields
});
</script>
Exact helper names/fields: see Identity Forwarding and the embed snippet in Admin Console (source of truth as the widget evolves).
Workflow checklist
Widget go-live
- Validate Support workspace — Citations pass offline.
- Embed script — Token + endpoint + workspace id.
- Smoke test on staging — FAQ + refusal + mobile layout.
- Optional identify() — Only if tools need end-user authz.
- Monitor analytics/feedback — Admin Console insights.
FAQ
Can one site use multiple workspaces?
Yes — use different embeds or switch workspace ids per page/section. Do not point a public page at an internal workspace.
Does the widget work with SPAs?
Yes. Load the script once; call identify() after client-side login completes.