To connect LiveKit Cloud to Edesy, create two trunks on the LiveKit side. An outbound trunk points at your Edesy termination trunk so LiveKit agents can call phones. An inbound trunk gives you a LiveKit SIP URI, which you save in Edesy as a destination and attach to your number so incoming calls reach your agent.
Before you start#
- An Edesy termination trunk (credentials mode is simplest for LiveKit Cloud). See Create a Trunk.
- An Edesy number to use as caller ID and to receive calls.
- The LiveKit CLI (
lk) logged in to your LiveKit Cloud project.
The SIP page in the Edesy portal has a Wire LiveKit Cloud card that fills in these snippets with your trunk's values.
Outbound: LiveKit to Edesy#
Save this as outbound-trunk.json:
{
"trunk": {
"name": "Edesy outbound",
"address": "tk-1a2b3c4d.trunk.edesy.in:5070",
"numbers": ["+91XXXXXXXXXX"],
"auth_username": "user-1a2b3c4d",
"auth_password": "YOUR_TRUNK_PASSWORD",
"transport": "SIP_TRANSPORT_AUTO"
}
}
addressis your trunk host with port5070.numberslists the Edesy numbers LiveKit may use as caller ID.- For an IP allowlist trunk, drop
auth_usernameandauth_password, and add LiveKit's egress IPs to the Edesy trunk.
Create the trunk and place a test call:
lk sip outbound create ./outbound-trunk.json
lk sip participant create --trunk <SIP_TRUNK_ID> --to +91XXXXXXXXXX --room test-room
Inbound: Edesy to LiveKit#
Save this as inbound-trunk.json:
{
"trunk": {
"name": "Edesy inbound",
"numbers": ["+91XXXXXXXXXX"]
}
}
lk sip inbound create ./inbound-trunk.json
Then:
- Copy your project's SIP URI from the LiveKit Cloud dashboard. It looks like
sip:<project>.sip.livekit.cloud. - In Edesy, open SIP → Inbound destinations → New destination. Name it
My LiveKit Cloudand save the URI with your number as the user part:sip:+91XXXXXXXXXX@<project>.sip.livekit.cloud. - Click Test call on the destination.
- On your Edesy number, set Inbound routing to SIP URI and pick
My LiveKit Cloud.
Optionally, add a dispatch rule so LiveKit puts each call in its own room or assigns your agent:
lk sip dispatch create --trunk <SIP_TRUNK_ID> --room-prefix call-
Checklist#
| Item | Value |
|---|---|
| Outbound address | tk-<id>.trunk.edesy.in:5070 |
| Outbound auth | Trunk username and password, or IP allowlist |
| Caller ID | An Edesy number in the outbound trunk's numbers |
| Inbound destination | sip:<number>@<project>.sip.livekit.cloud |
| Codecs | G.711 μ-law / A-law |
FAQ#
Calls from LiveKit fail with 403.#
The caller ID is not one of your Edesy numbers, or (IP mode) LiveKit's IP is not on the trunk's allowlist.
Inbound calls reach LiveKit but no agent joins.#
Add a dispatch rule, or check that your agent is registered for the room the rule creates.
Do I need the number in the inbound URI?#
Yes, include it as the user part. LiveKit matches the inbound trunk on the dialled number.
See also LiveKit SIP docs.