Skip to content

Telephony Integration

La Suite Meet supports telephony integration via LiveKit's SIP bridge, allowing participants to join meetings by phone or connecting Meet rooms to PSTN (public telephone network) systems.

Use cases

  • Dial-in: Phone users call a number to join a meeting
  • Dial-out: The system calls a phone number to bring a PSTN participant into a room
  • PBX integration: Connect Meet to your organization's PBX or UCaaS system

Architecture

Phone ──► PSTN ──► SIP Trunk ──► LiveKit SIP Bridge ──► LiveKit Room

LiveKit's SIP component handles SIP signaling and audio transcoding between the PSTN world (G.711/G.722 audio, SIP protocol) and the WebRTC world (Opus audio, WebRTC protocol).

Prerequisites

  • LiveKit server 1.5+ with SIP enabled
  • A SIP trunk from a VoIP provider (Twilio, Vonage, Infobip, or a self-hosted Asterisk/FreeSWITCH)
  • SIP credentials (username, password, server address)
  • A phone number (DID) from your VoIP provider

Enabling SIP in LiveKit

Add SIP configuration to your livekit-server.yaml:

sip:
  enabled: true

LiveKit SIP also requires its own service. Add to compose.yml:

livekit-sip:
  image: livekit/sip:latest
  environment:
    SIP_CONFIG_FILE: /sip-config.yaml
  volumes:
    - ./livekit-sip.yaml:/sip-config.yaml
  ports:
    - "5060:5060/udp"   # SIP signaling
    - "10000-20000:10000-20000/udp"  # RTP media
  depends_on:
    - redis
    - livekit

SIP service configuration

Create livekit-sip.yaml:

api_key: myapikey
api_secret: your-livekit-api-secret
ws_url: ws://livekit:7880

redis:
  address: redis:6379

sip:
  port: 5060

Configuring SIP trunks

Use the LiveKit CLI or API to configure SIP trunks:

Inbound trunk (for dial-in)

lk sip inbound create \
  --url wss://meet.example.com:7880 \
  --api-key myapikey \
  --api-secret your-secret \
  --numbers "+33123456789" \
  --allowed-addresses "sip.twilio.com"

Or via the LiveKit API:

POST /twirp/livekit.SIP/CreateSIPInboundTrunk
{
  "trunk": {
    "numbers": ["+33123456789"],
    "allowed_addresses": ["sip.twilio.com"],
    "name": "Main dial-in number"
  }
}

Outbound trunk (for dial-out)

lk sip outbound create \
  --url wss://meet.example.com:7880 \
  --api-key myapikey \
  --api-secret your-secret \
  --address "sip.twilio.com" \
  --username "your-twilio-account-sid" \
  --password "your-twilio-auth-token"

Dispatch rules

Dispatch rules define what happens when a call comes in on a trunk. For example: route all calls on number +33123456789 to a specific room.

lk sip dispatch create \
  --url wss://meet.example.com:7880 \
  --api-key myapikey \
  --api-secret your-secret \
  --trunk-id <inbound-trunk-id> \
  --room my-meeting-room \
  --pin 1234

With a PIN-based dispatch rule, callers dial the number and enter a PIN to join a specific room.

SIP provider setup (Twilio example)

  1. Create a Twilio account and obtain a phone number
  2. In Twilio console, create a SIP Trunk
  3. Configure the origination URI to point to your LiveKit SIP service: sip:your-server.example.com:5060
  4. Use your Twilio account SID and auth token as the outbound trunk credentials

Firewall requirements

SIP and RTP require additional open ports:

Port Protocol Purpose
5060 UDP SIP signaling
10000-20000 UDP RTP media (SIP audio)

The RTP port range (10000-20000) must be open for telephony to work. This is in addition to LiveKit's standard WebRTC ports.

Audio quality notes

SIP telephone calls use narrowband audio (G.711, 8 kHz). This is noticeably lower quality than WebRTC participants (Opus, 48 kHz). LiveKit transcodes between the two transparently, but phone participants will always sound like a phone call.

Testing telephony

# Dial out to a phone from a room
lk sip participant create \
  --url wss://meet.example.com:7880 \
  --api-key myapikey \
  --api-secret your-secret \
  --room my-room \
  --number "+33612345678"

Limitations

  • SIP participants appear in the room as audio-only (no video)
  • Reactions, chat, and screen sharing are not available to SIP participants
  • Recording will capture SIP audio alongside WebRTC participants

Further reading