LiveKit carries the audio for voice conversations. Where
Twilio supplies the phone number, LiveKit
moves the media between the caller and the agent — and it also powers voice mode
in the chat widget, which has no phone number
at all.
Configure
Unlike the OAuth integrations, LiveKit is configured with environment variables
rather than a per-workspace connection. Get credentials from LiveKit
Cloud or your self-hosted deployment.
LIVEKIT_SIP_HOST is only needed for phone calls — it is where Twilio hands the
call to LiveKit. Widget voice does not use SIP.
Run the voice worker
Voice agents run as a separate Python process, not inside the API:
This runs uv run python agent_workflow.py dev. It needs the LiveKit variables
above plus a speech-to-text provider key — DEEPGRAM_API_KEY,
ASSEMBLYAI_API_KEY, or another supported STT provider — selected with
STT_PROVIDER.
If the worker is not running, calls connect and then sit in silence: the room
exists, but nothing joins it to speak. Silent-but-connected calls are almost
always a stopped or crashed worker.
Rooms
A room is one voice conversation. GoConva creates and tears down rooms
automatically as calls arrive and end — there is nothing to manage by hand.
Webhooks
LiveKit notifies GoConva about room and participant lifecycle events at:
Set this URL in your LiveKit project’s webhook settings. GoConva uses these
events to close out conversations when a call ends, so without them
conversations can be left open.
Troubleshooting