Skip to main content

Install the Widget

The Woes widget lets customers ask questions from your product or docs site. Public widget access uses a workspace or agent widget key; it does not grant general account access.

Choose a Widget Key

KeyWhen to use it
Workspace widget keyA single support agent and one shared install path.
Agent widget keyDifferent agents on different websites, products, docs areas, or customer segments.
Find widget keys in Settings → Keys. Agent widget keys also appear with each agent in Agents.

Basic Install

Add the Woes snippet to the pages where customers should be able to ask for help.
<script
  async
  src="https://cdn.woes.dev/widget.js"
  data-public-key="YOUR_WIDGET_PUBLIC_KEY"
  data-api="https://YOUR_APP_ORIGIN/api/widget/messages"
></script>
Use the actual snippet from Settings → Install because production script URLs and options may vary by workspace.
The widget exposes a queued browser API, so you can call window.Woes(...) after the snippet is present on the page.
window.Woes("show");
window.Woes("hide");
window.Woes("setTheme", "dark");

Identify Customers

For signed-in products, identify the customer so conversations are tied to a stable account.
window.Woes("identify", {
  email: "ada@example.com",
  name: "Ada Lovelace",
  company: "Example API Co",
  id: "user_123",
});
For higher-trust installs, use Widget Identity with HMAC email verification or JWT.
window.Woes("identify", {
  email: "ada@example.com",
  name: "Ada Lovelace",
  company: "Example API Co",
  id: "user_123",
  email_hash: "SERVER_GENERATED_HMAC",
});

window.Woes("identify", {
  jwt: "SERVER_GENERATED_WIDGET_IDENTITY_JWT",
});
Generate identity proofs only on your backend. Never ship the widget identity secret to the browser, logs, analytics tools, or customer-visible pages.

Common JavaScript Calls

CallUse it for
window.Woes("show")Open the messenger.
window.Woes("hide")Close the messenger.
window.Woes("hideChatBubble")Hide the launcher bubble.
window.Woes("showChatBubble")Show the launcher bubble again.
window.Woes("setTheme", "dark")Switch the widget theme. Use "light" for light mode.
window.Woes("showNewMessage", text)Open the widget with a draft message.
window.Woes("setNewConversationFields", fields)Prefill metadata for the next conversation.

What the Widget Can Show

  • Existing conversation history for the verified customer.
  • Agent replies grounded in attached API context.
  • Operator replies after takeover.
  • Delivery, unread, typing, and closed-conversation states.
  • CSAT or NPS surveys after supported resolution events.

Common Checks

SymptomCheck
Widget does not loadConfirm the public key and script URL.
Conversation is anonymousAdd an identify call or verified identity mode.
Agent answers from the wrong contextUse the right agent widget key and verify source attachments.
Survey does not appearConfirm the survey is enabled, uses a widget channel, and triggers on issue solved.