Voice Nox
Audience: Sales · Support · QA · Engineering · Management · Where in app: Dashboard → Nox → Voice · Plan availability: Pro+ (a further entitlement on top of base Nox — verify)
Voice Nox lets an admin talk to Nox instead of typing. It's the same assistant with the same tools, but the conversation is spoken — useful while driving, on mobile, or for a quick check while doing something else. It's powered by ElevenLabs Conversational AI over a WebSocket.
What it does
- Answers the same questions as text Nox, spoken aloud.
- Can trigger the same tools (visitor lookups, stats, knowledge search, place a call, etc.).
- Captures a transcript of the voice session for audit.
Voice-friendliness varies by answer shape:
| Question | Voice-friendly? |
|---|---|
| "How many bookings yesterday?" | Yes — single number |
| "Walk me through John's journey" | Yes — natural narrative |
| "Show me Sarah's last 5 visits" | Partial — summarized verbally, full detail in chat |
| "Which 17 leads should I prioritize?" | Partial — top few verbal, full list in chat |
Long tables / multi-row lists are summarized for voice; the admin can ask for "the full list" to get it in the chat panel instead.
How it works
- Admin opens Voice Nox in the dashboard.
- Frontend calls
POST /knox-voice/signed-urlon ms-ai. - ms-ai mints a signed WebSocket URL — a synced ElevenLabs agent with the tenant's company context baked in.
- The browser opens the WebSocket; audio streams bidirectionally.
- The ElevenLabs agent invokes Nox tools as needed via the WebSocket tool-call protocol (WebSocket → ms-ai → tool registry → result → back to ElevenLabs → narrated).
- Audio response streams back. During-call display events (canvas cards, sources, tool results) stream to the browser over
GET /knox-voice/events/:conversationId(SSE), fanned out via Redis pub/sub (knox-voice-events.service.ts) — the ElevenLabs tool webhook and the browser subscription land on different pods in production. - On call end, the transcript is captured to
knox_call_transcripts.
A voice call continues the shared Nox conversation: the frontend passes the recent chat turns and knox-voice.service.ts injects a continuity line, so Nox picks up where the chat left off instead of re-introducing itself.
Tool-call latency is typically 1–2s.
Agent sync
The Nox voice agent is a synced copy of a base ElevenLabs Conversational AI agent, with per-tenant overrides:
- Tool whitelist
- Tenant-specific system-prompt additions
- Voice ID
Syncing is handled by KnoxVoiceService (ms-ai).
Configuration & options
- Entitlement — Voice is gated separately from text Nox.
- Voice ID / agent overrides — per tenant via the synced ElevenLabs agent.
- Tool whitelist — which tools the voice agent may call.
- Recording — audio recording is optional per provider settings; the transcript is always stored for audit.
Behaviors & edge cases
- Place a call: "call Sarah" works if the
knox_place_callentitlement is on — voice confirms, then the outbound call is queued (or scheduled viascheduled_at). - Book a meeting: on Nox funnel beta tenants,
knox_book_meetingbooks a GHL calendar slot after an explicit confirmation; other tenants still can't. - White-label: the agent self-references the tenant's
ai_assistant_nameand never says "Knock Knock" on white-label deployments; agencies can override the TTS voice viaagency.nox_voice_id(applied per session inknox-agent-sync.service.ts). - Memory: same per-session memory model as text Nox (fresh each session; durable per-admin facts via
knox_rememberapply to both). - Different LLM: the voice agent uses a low-latency model tuned for conversation, so answers can differ subtly from text Nox.
- Network sensitivity: ElevenLabs needs a stable WebSocket — flaky networks degrade quality fast, and complex multi-tool queries feel slow over voice.
Plan & limits
- Plan-gated (Pro+, separate entitlement — verify).
- Consumes AI credits per minute of conversation.
- Some tool results don't translate to voice and are summarized — full detail is available in the chat panel.
Privacy
- The voice transcript is stored in
knox_call_transcriptsfor audit. - Audio recording is optional per provider settings.
- The admin can delete a transcript via the standard delete flow.
Technical implementation
- Module:
ms-ai/src/knox-voice/. Signed URL:POST /knox-voice/signed-url. Agent sync:KnoxVoiceService. - Tools are the same registry as text Nox (
knox-agent/tools/), bridged over the ElevenLabs WebSocket tool-call protocol. - Transcripts land in
knox_call_transcripts(ms-ai Postgres) — see Visitor data.