Languages and the greeting
English, Turkish and German today. A tenant has one default language and, optionally, a longer list of everything it also speaks; each conversation picks one of them and runs entirely in it.
Setting them up
In the panel's Assistant screen: a Spoken language select for the default, and a row of checkboxes for Supported languages — the default is always ticked and can't be unticked. Each supported language gets its own voice picker further down the same page, falling back to a language-wide default voice when none is chosen for it.
How a conversation picks one
The widget picks the visitor's language once, right before it opens a session, most explicit source first: GerryConfig.language in code mode → the first two letters of the page's <html lang> attribute → the first of the visitor's browser languages that the tenant actually supports → the tenant's own default, once /api/site has answered. It sends that as a proposal; the server is the only side that knows the tenant's real list, so its answer is what the widget actually adopts for its own labels.
The site map has its own site.language (see Site map reference) — that's the map's default tool wording; the conversation's actual language overrides it, so a tenant speaking several languages still gets the same six tools worded correctly for whoever is talking.
The language step
A tenant that speaks more than one language can have the widget ask, in its own shadow root, before the microphone is even requested — because a call's speech recognition language and its voice are fixed the moment the call opens, so the language has to be settled first. Click order becomes: language step (if due) → microphone → call. Backing out of the step spends no permission prompt, no session and no minute.
auto (default) | Asks only when the tenant speaks more than one language AND this visitor hasn't already chosen, on this browser. The choice is remembered in localStorage, so a returning visitor isn't asked twice. |
|---|---|
always | Asks every time. |
never | Never asks — click, microphone, call, exactly as a single-language tenant. |
It never asks when a page explicitly set GerryConfig.language, when the tenant speaks only one language, or in code mode generally — a page that declares its own actions never calls /api/site, so the widget has no list to ask from. The panel offers one button per language, each labelled in its own language (English, Türkçe, Deutsch), keyboard-operable, and Escape cancels the start entirely.
Asking the visitor's name
A separate switch, askName, turns on one reserved tool offered to the model only when it's on: the assistant asks what to call the visitor in one short sentence, uses the name once, and moves on — never twice, and never waiting on the answer. A visitor who ignores it or says no is browsing a second later. The tenant's own firstMessage is always spoken exactly as written; the name question rides on the assistant's first reply afterward, rather than replacing or being appended to it, so it never turns one opening turn into two questions at once.
A name is personal data the tenant becomes responsible for the moment it's turned on — the panel says so next to the switch.
Adding a fourth language
Not a panel setting today — it's a code change on our side, touching the dictionaries in shared/i18n.ts, the prompt builder, and the speech-to-text language map, each one a record keyed by language so a language left out fails to compile rather than silently missing a sentence somewhere.
Questions: hello@heygerry.io. These pages describe what is built today; nothing here is a promise about what is not.