The IntelliDesk widget is a small JavaScript snippet that adds a floating Help button to any page of your website or app. When a visitor submits the form, a ticket lands in the help desk the key belongs to.
Installing
- Go to Settings → Help Desks, pick the desk that should receive the tickets, and open the Channels tab.
- Under Website contact form, optionally enter your website (e.g.
www.yourcompany.com) so the form only works there, and click Create website key. (Only managers of the desk can do this; others see who to ask.) - Copy the embed code that appears and paste it into your site, just before
</body>, on every page that should show the Help button:
<script src="https://intellidesk.co/widget.js" data-key="idk_..."></script>
That's the whole setup. The key is a widget key: narrow scope, ticket creation only, and safe to have in your page's HTML. Each desk can have its own key, so different sites or sections can feed different desks. Keys can also be managed (restricted to your websites, or revoked) under Settings → Developer.
The widget renders inside a Shadow DOM, so it is fully CSS-isolated from your site's styles.
What customers see
A floating Help button (bottom-right by default). Clicking it opens a panel with:
- Name and email fields
- Subject
- Description
- A type toggle: Support or Change Request (can be hidden)
- Attachments, including pasting a screenshot straight into the description (Ctrl/Cmd+V), capped at 25 MB and 5 files
The description has a 30-character minimum with a live counter, to discourage one-line tickets.
After submitting, the panel shows a confirmation with the ticket reference (HD-####) and "We'll be in touch at ". That on-screen reference is the only thing they get unless auto-reply is switched on (see below).
With live chat on: Chat and Send a request
If the desk has live chat switched on and chat is currently on offer, the widget shows two tabs under its header: Chat and Send a request. Send a request is the same form described above. Visitors can switch between the tabs at any time, and the chat keeps running in the background while they fill in the form. If they switch away from a half-written request, they're asked before it's discarded.
Chat is on offer when an agent on the desk is Online with room for another chat, or always when the desk's Who answers chats setting is AI only. Otherwise the widget is just the form. See Live chat: setting it up and answering chats.
What your team sees
The ticket arrives on the desk like any email. The customer's message is labelled Website form, the customer becomes a contact (linked to their company when they use a business email address), and the ticket is tagged Widget. If you've turned on diagnostics or app context (below), the sidebar shows them under From the embed widget: the page they were on, their browser, and any values you passed, like an order number.
Configuration attributes
Everything except data-key is optional.
| Attribute | Default | What it does |
|---|---|---|
data-key |
required | Your widget key (idk_...) |
data-color |
#0d9488 |
Accent colour (hex) |
data-position |
bottom-right |
bottom-right or bottom-left |
data-title |
Desk name | Panel header text |
data-label |
Help |
Launcher button text |
data-type |
question |
Default ticket type: question (support) or task (change request) |
data-hide-type |
false |
"true" hides the type toggle and uses data-type for every submission |
data-name |
— | Pre-fill the requester's name |
data-email |
— | Pre-fill the requester's email |
data-diagnostics |
false |
"true" attaches technical details at submit time (URL, page title, browser, viewport, language, timezone, session duration, and recent JavaScript errors). Users see a "Technical details will be attached" disclosure with a View toggle before submitting. URLs often contain tokens and personal data, so decide whether this fits your privacy policy before enabling it. |
data-context |
— | JSON key-value pairs (strings, numbers, booleans) attached to every ticket. Useful for order IDs, plan names, the current screen. Capped at roughly 1.5 KB. Example: data-context='{"orderId":"ORD-12345","plan":"pro"}' |
The confirmation email (auto-reply): off by default
This is the most common surprise with the widget. Widget submitters get a confirmation email only when auto-reply is enabled on the desk that receives the ticket, and auto-reply is off by default. The Channels tab warns you about this next to the embed code.
Turn it on at Settings → Help Desks → [Your desk] → Settings tab → Auto-reply. Flipping the switch installs a default template; you can edit it, or generate one with Generate with AI.
The template supports these placeholders: {{contact_name}}, {{contact_email}}, {{ticket_id}}, {{subject}}, {{desk_name}}, {{org_name}}.
Once enabled, a widget submission produces an email containing:
- Your template text, with the placeholders filled in
- A Your request section quoting back exactly what the customer typed
- A link to view and reply to the ticket without signing in. It works for 30 days from when it was sent, unless an agent revokes it sooner; after that the customer can sign in to the customer portal instead
- The standard footer: portal link, service-status link, and any active incident or notice banner
Three things worth knowing:
- Sending the auto-reply requires a connected mailbox on that desk. If there isn't one, the ticket is still created but IntelliDesk adds an internal note reading "Failed to send email …".
- Tickets created through the public REST API (not the widget) deliberately skip the auto-reply. API callers usually send their own notifications.
- Write the acknowledgement with AI applies to email tickets only. Widget submissions always get the plain template. See Automatic acknowledgement emails (auto-reply).
Origin allowlist and rate limits
If you entered your website when creating the key (or later, under Settings → Developer), submissions from any other site are rejected. An empty list accepts any site, which is fine for most setups; restrict it if your key is on a busy public site.
Because a server-side caller can fake its origin, treat this as protection against casual abuse rather than a guarantee. Two rate limits back it up: 30 widget submissions per hour per visitor (IP), and 120 requests per minute per key.
Programmatic control
Once the script has loaded, window.IntelliDesk lets you open or close the panel, pre-fill the name and email, and update the app context from your own code. The full method list is in the AI agent prompt under Settings → Developer, which also gives you a ready-to-paste integration brief for an AI coding assistant.
When a submission doesn't arrive
- Check the browser console: the widget logs the actual error.
- Check the key hasn't been revoked (Settings → Developer).
- Check your site is on the key's allowed websites (or that the list is empty).
- Check you haven't hit the 30-per-hour limit while testing.
See The widget form won't submit: error messages explained for every error message.
When the ticket arrives but the customer hears nothing
- Auto-reply is off for that desk (most common; see above).
- Auto-reply is on but the template is empty.
- The desk has no connected mailbox, or its connection has an error. Check Settings → Help Desks → [Desk] → Channels, and look for a "Failed to send email" note on the ticket.
Related: Connecting a mailbox: Gmail, Outlook, and IMAP · Live chat: setting it up and answering chats · The widget isn't showing on my website · IntelliDesk's APIs: REST and MCP