Skip to main content

Voice Platform

Real-time voice interaction with Norns AI agents.

Last updated: 2026-01-03


Overview

Norns supports two voice interfaces:

InterfaceTechnologyAccess
Web VoiceLiveKit + OpenAI Realtimevoice.ravenhelm.dev
Phone VoiceTwilio + Pipecat+1 (737) 214-3330

Both interfaces delegate all actions to the Norns LangGraph agent.


Architecture


Services

ServicePurposeURLLocation
Voice GatewayWeb voice via LiveKitvoice.ravenhelm.dev/services/voice-gateway/
TelephonyPhone voice via Pipecattelephony.ravenhelm.dev/services/telephony/
LiveKitWebRTC infrastructurewss://livekit.ravenhelm.dev/services/livekit/
WhisperSpeech-to-text (STT)Internal (9000)/services/whisper/
PiperText-to-speech (TTS)Internal (10200)/services/piper/

Voice Pipeline (Phone)

The GPT-4o-mini acts as a lightweight router:

  • Passes user requests verbatim to Norns via function
  • Only handles simple greetings directly
  • Keeps responses short (1-3 sentences) for natural conversation

Caller Identification

Phone callers are identified by their phone number (ANI):

  1. Twilio sends incoming call with caller's phone number
  2. Telephony service calls
  3. Norns looks up user by column in users table
  4. If found, uses that user's ID for the conversation
  5. If not found, uses default user ID

Adding a User's Phone Number


Quick Commands

{"status":"healthy","service":"telephony"}

Configuration

Voice Gateway (Web)

VariableDescription
LiveKit server URL
LiveKit API key
LiveKit API secret
OpenAI API key (for Realtime)

Telephony (Phone)

VariableDescription
Public hostname (telephony.ravenhelm.dev)
Norns API URL (http://docs/AI-ML-Platform/norns-agent:8000)
API key for Norns authentication
Twilio account SID
Twilio auth token
Deepgram STT API key
OpenAI API key (for GPT-4o-mini routing)
ElevenLabs TTS API key
ElevenLabs voice ID

Security

  • All traffic over HTTPS (Traefik TLS termination)
  • Twilio webhook signed with account credentials
  • Norns API protected by X-API-Key header
  • No UDP ports exposed (Twilio Media Streams uses WebSocket)

Troubleshooting

Issue: Caller Not Identified

Symptoms: Phone call works but uses default user

Diagnosis:

Solution:

Issue: No Audio on Phone Call

Symptoms: Call connects but no audio

Diagnosis:

  1. Check telephony logs for WebSocket errors
  2. Verify Deepgram/ElevenLabs API keys are set
  3. Check Twilio Media Streams connection

Solution: Cannot connect to the Docker daemon at unix:///Users/nate/.docker/run/docker.sock. Is the docker daemon running?