MuK AI Voice
Talk to your assistant — live transcription & spoken replies
MuK IT GmbH - www.mukit.at
Speak instead of type
A mic button on the MuK AI chat composer streams your speech straight into the configured realtime provider. Words land in the textarea as the model emits them — no batch upload, no “processing” spinner, no waiting for a final transcript. Pauses break naturally into segments and the conversation continues where you left off.
Or go fully hands-free: the waveform button starts voice mode — each utterance is sent the moment you pause, and the assistant reply is spoken back before listening resumes. A real conversation with your Odoo data.
No sidecar, no extra ports
The browser captures PCM16 / 24 kHz via an
AudioWorklet. Audio chunks ship over
chunked JSON-RPC POSTs into the in-Odoo realtime
controller. The controller holds the upstream WebSocket
to the provider and forwards
delta / final events back to
the browser via the standard Odoo bus. Everything runs
inside the Odoo worker — Odoo.sh
compatible out of the box.
Supported providers
Each voice provider record has its own credentials, independent of the chat provider key. Run chat on Anthropic and voice on OpenAI, or keep voice on a separate OpenAI key for billing isolation — the records do not share state.
| Provider | Realtime STT | TTS | Voices |
|---|---|---|---|
| OpenAI | gpt-4o-mini-transcribe |
gpt-4o-mini-tts |
alloy, echo, fable, onyx, nova, shimmer |
| Google Gemini | — | gemini-2.5-flash-preview-tts |
Aoede, Kore, Charon, Fenrir, Puck, … |
Realtime STT is OpenAI-only today. Pick OpenAI as the default STT provider and either OpenAI or Google as the default TTS provider — mix and match as you like.
Voice mode, on your terms
Voice mode shows its phase at a glance — listening, thinking, speaking — with a live caption of what it heard, a mute toggle and an end button. Every assistant message also carries a small speaker icon: tap it to play that single reply on demand, tap again to stop.
Each agent can override the global STT and TTS provider from a dedicated tab on the agent form, so a customer service agent and an analyst agent can speak with different voices — or pull from different vendors entirely.
Cost stays visible
Voice is billed by the second. The addon tracks
voice_cost_usd on each chat session and
accumulates both STT (per second of speech) and TTS
(per character spoken) into the same field, so the
operations dashboard shows the true cost per
conversation. No hidden line items, no surprise bills.
Help and Support
Feel free to contact us, if you need any help with your Odoo
integration or additional features.
You will get 30 days of
support in case of any issues (except data recovery, migration or
training).
Our Services
Odoo
Development
Odoo
Integration
Odoo
Infrastructure
Odoo
Training
Odoo
Support
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
Discuss (mail)
|
| Community Apps Dependencies | Show |
| Lines of code | 29317 |
| Technical Name |
muk_ai_voice |
| License | See License tab |
| Website | http://www.mukit.at |
MuK AI Voice
Talk to the muk_ai assistant instead of typing. A microphone button on the chat composer streams your speech to the configured realtime provider; partial words land in the textarea live as the model emits deltas, and segments accumulate across natural pauses. Spoken replies are synthesized by the configured TTS provider and played back through a session-aware audio queue.
Runs entirely inside the Odoo Python process and the bus — no sidecar daemon, no extra ports.
Note
Live transcription keeps the realtime session in per-process memory, so it requires a single-worker deployment (workers = 0). On multi-worker or Odoo.sh setups the microphone button reports a clear configuration error instead of failing intermittently. Text-to-speech playback is unaffected.
Installation
To install this module, you need to:
Download the module and add it to your Odoo addons folder. Afterward, log on to your Odoo server and go to the Apps menu. Trigger the debug mode and update the list by clicking on the "Update Apps List" link. Now install the module by clicking on the install button.
Upgrade
To upgrade this module, you need to:
Download the module and add it to your Odoo addons folder. Restart the server and log on to your Odoo server. Select the Apps menu and upgrade the module by clicking on the upgrade button.
What ships
Two pre-seeded voice provider records — OpenAI and Google Gemini — sit under MuK AI > Configuration > Voice. Open one, paste the API key, and you are ready to speak.
Voice provider records carry their own credentials. They are intentionally independent of muk_ai.provider (the chat provider), so you can use Anthropic for chat and OpenAI for voice, or keep voice on a separate OpenAI key for billing isolation.
Provider matrix
| Provider | STT (Realtime) | TTS | Voices |
|---|---|---|---|
| OpenAI | gpt-4o-mini-transcribe | gpt-4o-mini-tts | alloy, echo, fable, onyx, nova, shimmer |
| Google Gemini | — | gemini-2.5-flash-preview-tts | Aoede, Kore, Charon, Fenrir, Puck, … |
Realtime STT is only supported by OpenAI today. Google handles TTS only.
Configuration
Settings — Settings > General Settings > MuK AI Voice:
- Default Speech-to-Text Provider — provider used for live transcription.
- Default Text-to-Speech Provider — provider used when the assistant speaks back.
- Manage Voice Providers — opens the per-record provider list.
Per-agent overrides — MuK AI > Agents > (Agent) > Voice tab:
- Voice TTS Provider — overrides the global default for this agent's spoken replies.
- Voice STT Provider — overrides the global default for this agent's transcription.
Voice providers — MuK AI > Configuration > Voice:
Per-record fields are API Key, TTS Model, TTS Voice and Realtime Model. Empty fields fall back to the engine's built-in defaults. The Test Connection button on the form verifies credentials against the provider's reachability endpoint.
Voice mode — chat composer:
- Waveform button — starts a hands-free conversation: speech is transcribed live, each utterance is sent automatically when you pause, and the assistant reply is spoken back before listening resumes. The bar shows the current phase with a live caption plus mute and end controls.
Per-message playback — message footer:
- Speaker icon — synthesizes and plays the assistant's reply on demand. A spinner shows while OpenAI is generating; clicking again stops playback.
How it works
The browser captures PCM16/24 kHz via an AudioWorklet. Audio chunks ship to the in-Odoo realtime controller through chunked JSON-RPC POSTs. The controller holds the upstream WebSocket to the realtime provider and forwards delta / final events back to the browser via the standard Odoo bus (bus.bus, per-partner channel muk_ai_voice.realtime).
Server-VAD (silence threshold 500 ms) detects pauses, finalizes the segment, and merges the final transcript into the composer value so subsequent utterances append without overwriting prior text.
In voice mode the finished utterance is sent as a regular chat message; once the turn completes, the assistant text is synthesized through the streaming HTTP route /muk_ai_voice/tts_stream and played via a native <audio> element before capture resumes. The per-message speaker icon uses the same streaming route.
Cost tracking
Each voice exchange accrues voice_cost_usd on the related muk_ai.session record. Both STT (per-second from the realtime handle's duration) and TTS (per-character) are added to the same field. Voice cost is independent of, and additive to, the chat token cost the underlying muk_ai module already tracks.
Browser support
Any modern browser with MediaDevices.getUserMedia, AudioContext and AudioWorklet. Tested on Chrome, Edge, Firefox and Safari. This module does not use the Web Speech API — transcription always goes through the configured provider.
Credits
Contributors
- Mathias Markl <mathias.markl@mukit.at>
Author & Maintainer
This module is maintained by the MuK IT GmbH.
MuK IT is an Austrian company specialized in customizing and extending Odoo. We develop custom solutions for your individual needs to help you focus on your strength and expertise to grow your business.
If you want to get in touch please contact us via mail (sale@mukit.at) or visit our website (https://mukit.at).
MuK Proprietary License v1.0 This software and associated files (the "Software") may only be used (executed, modified, executed after modifications) if you have purchased a valid license from MuK IT GmbH. The above permissions are granted for a single database per purchased license. Furthermore, with a valid license it is permitted to use the software on other databases as long as the usage is limited to a testing or development environment. You may develop modules based on the Software or that use the Software as a library (typically by depending on it, importing it and using its resources), but without copying any source code or material from the Software. You may distribute those modules under the license of your choice, provided that this license is compatible with the terms of the MuK Proprietary License (For example: LGPL, MIT, or proprietary licenses similar to this one). It is forbidden to publish, distribute, sublicense, or sell copies of the Software or modified copies of the Software. The above copyright notice and this permission notice must be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Please log in to comment on this module