Voice Widget
Add a floating mic button to your website so visitors can talk to an AI concierge — ask questions, get guided, and hear answers grounded in your own content. You create and configure the widget in Erdo, then drop one line of code on your site. Everything runs through Erdo; your site never loads a third-party voice SDK or holds any keys.The widget is a website embed, separate from outbound phone
calls. Same voice technology, different surface: here a visitor starts
the conversation from your page.
Create a widget
Describe the concierge
Set its greeting, what it helps with and its tone, plus any compliance
guardrails it must always follow.
Set who can embed it (optional)
Add the allowed origins for your site — see Allowed
origins below. Leave it empty while testing.
Embed it on your site
Paste the snippet once into your site’s HTML, just before the closing</body> tag (or in your CMS / theme’s “custom code” / footer area), on every
page where you want the assistant:
Pages you build inside Erdo (the “make me a page” flow) that embed a widget
work automatically — Erdo’s own page hosts are always allowed, so you don’t need
to add them to the allowed origins.
Conversation modes — voice, text, and video
One widget, one snippet — the same assistant can talk (voice), chat (text), or appear as a video agent. You choose which modes a widget offers; all three are answered by the same assistant, grounded in the same Knowledge, so the experience is consistent however a visitor reaches out.| Mode | What the visitor does | Needs |
|---|---|---|
| Voice | Taps and talks; hears a spoken reply | Microphone |
| Text | Types a message; reads replies (with images/cards) | Nothing |
| Video | Speaks with an on-screen avatar in real time | Microphone + camera |
Your existing snippet doesn’t change. Turning on text or video for a widget is
a setting on the widget itself — the
<script> tag you’ve already embedded picks
the new modes up automatically. Widgets default to voice only, so nothing
changes until you opt in.Match your brand
Adddata-erdo-* attributes to the embed script to theme the widget to your
site. The widget runs in a sandboxed frame, so these attributes (not your page’s
CSS) are how you style its inside:
| Attribute | What it does |
|---|---|
data-erdo-accent | Primary colour (hex) for the button, header and controls. |
data-erdo-accent-dark | Optional darker shade (auto-derived from the accent if omitted). |
data-erdo-bg | Panel background (hex). Set a dark value to run the widget dark. |
data-erdo-text | Main text colour (hex). |
data-erdo-muted | Secondary / status text colour (hex). |
data-erdo-border | Card and control border colour (hex). |
data-erdo-title | Header text. |
data-erdo-start-label / data-erdo-end-label | Call button labels. |
data-erdo-intro | Short greeting line shown before the call starts. |
data-erdo-bg / text / muted / border (plus accent) let you run
the widget in a fully dark or branded palette. Colours must be hex; anything else
is ignored and the default is kept.
To target the widget’s container (position, size, z-index) from your own CSS,
it has a stable id/class: #erdo-voice-widget / .erdo-voice-widget.
Open it from your own button, script, or agent
By default the widget shows a floating launcher. You can also drive it yourself — useful for a custom “Talk to us” button, a help menu, or an in-page assistant. Declaratively — add adata-erdo-voice-* attribute to any element; clicking it
controls the widget (no JavaScript needed):
Allowed origins
Allowed origins restrict which websites may embed this widget, so someone can’t copy your snippet onto their own site and run up your usage. Leave the list empty to allow any site (handy while testing); add origins to lock it down. The rules — the widget shows an error and won’t start on a site that doesn’t match:- Scheme + domain only. Enter the full origin including
https://, with no path:https://acme.com, notacme.comand nothttps://acme.com/contact. - No wildcards.
*.acme.comis not supported. - Matching is exact, and subdomains count as different sites.
https://acme.comdoes not coverhttps://www.acme.comorhttps://shop.acme.com— add each one you actually use, on its own line. - Matching ignores case and a trailing
/.
www:
Usage limits
Each widget has a daily session cap (how many conversations it will start per day) to keep usage predictable. When the cap is reached, the widget tells visitors it’s unavailable until the next day. Raise or lower it in the widget’s settings.Troubleshooting
| You see | What to do |
|---|---|
| ”This site is not allowed to embed this voice widget” | The page’s origin isn’t in Allowed origins. Add the exact origin (with https://, and the right subdomain — see above), or empty the list to allow any site. |
| The mic button doesn’t appear | Confirm the <script> snippet is on the page and the data-erdo-voice-widget key matches your widget. |
| ”Reached its daily limit” | The daily session cap is used up for today; raise it in the widget’s settings if needed. |
| Nothing happens for any widget | Voice may not be enabled for your organization — contact your Erdo admin. |

