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