Voice
Let users speak to the assistant instead of typing.
Voice is the same assistant, operating the same app through the same registry, with the same confirmations and the same audit log. It is an input, not a second system: a spoken request and a typed one go through one dispatch.
Turning it on
Voice is off for every app until you switch it on in the app's settings. A session is billed for every second it is open, so it is never switched on by accident. See pricing.
When it is on, tapping the orb offers voice beside chat. When it is off, the orb opens chat directly rather than offering a mode that fails.
How it works
The voice holds the conversation, and hands everything your user asks for to the same assistant that answers typed messages. So voice can do exactly what typing can, with the same actions, permissions and approvals, and the request and its answer appear in the conversation as they would typed.
While a request is being worked on, the voice says it is checking. It doesn't say something is done until it is.
Two tiers
Each app chooses its voice quality in its settings. Both tiers are the same voice; what differs is the model doing the work behind it:
- Standard, the default, uses your app's own model, the one that answers typed requests.
- Lite uses a far cheaper model, for less judgement on harder requests.
The pricing page has both tiers' rates. Switching takes effect on the next voice session, with nothing to deploy.
Two modes
- Hold to talk. Choose it from the menu, then hold the orb, talk, and let go to send. "Hold to talk" shows above the orb until the first time works.
- Hands-free. Choose Talk and speak naturally. The user can talk over the assistant. Tapping the orb, or the stop button beside it, ends it.
Voice modes in the app's settings chooses which the app allows, and the
runtime refuses one that is switched off. voiceModes on the widget can narrow
that further in code. The classic panel
(form="classic") has a microphone button and an ∞ button for the same two.
Hands-free keeps the microphone open while the assistant speaks, so browser echo cancellation is what stops it hearing itself.
Either mode ends by itself after 20 seconds with nobody talking, which you can change in the app's settings. A card waiting to be confirmed, or an action still running, holds that timer, so it never hangs up on someone reading what they are about to approve. A session is billed while it is open, so this is also what stops a forgotten tab from costing you.
Limits
Every voice session has a ceiling, 10 minutes by default, which you can change in the app's settings. The user is warned about 30 seconds before it ends. When it ends, the conversation carries on in text, with everything said already in it.
Sessions at once
Ten people in your organisation can talk to the assistant at the same moment. In a busy moment, up to thirty can, and the sessions past ten cost twice as much. To cap what voice can cost, switch off Allow busy moments in an app's settings: then the eleventh user is asked to type instead. If you need more than thirty at once, talk to us.
When there's no room for another session, the user is told so plainly and the conversation carries on in text. Typing is never limited this way. Sessions opened in a busy moment are marked on the Usage page.
Confirmations still need a tap
A spoken "yes, go ahead" can confirm a medium-risk action that allows it. It can never confirm a high-risk one: those wait for a tap on the card on screen, in voice as in text. A transcribed "yes" is a model's reading of audio, which is not enough to move money or delete data.
What is kept
The audio is relayed to the model provider as it happens and never stored. The transcript is kept with the conversation, like typed messages.
Browser requirements
Voice needs a secure page (https://, or localhost) and the user's
permission to use the microphone. If your app sends a Content-Security-Policy,
allow the runtime in connect-src:
connect-src wss://runtime.mihe.dev