(Note: the trunk config, IP, phone number, and domain below are sample/placeholder values for illustration — not our actual client’s details.)
Setup: Our client provided their SIP trunk/provider details, and we configured a LiveKit outbound trunk accordingly:
{
"name": "Client PBX outbound",
"address": "203.0.113.10",
"transport": "SIP_TRANSPORT_TCP",
"numbers": ["05500000"],
"destinationCountry": "XX"
}
No auth (username/password) was provided by the client — assumed not required on their end.
Goal: Use this trunk to place an outbound call from our agent (via WarmTransferTask) to a specific extension/group on their PBX, for a warm-transfer-to-human-agent flow.
What we tried:
-
First pass, we hardcoded the destination as a full SIP URI in
sip_call_tofor testing:sip_call_to="sip:123@client-domain.example.com", sip_trunk_id="<trunk-id>",This was rejected immediately, before any SIP traffic was sent:
TwirpError(code=invalid_argument, message=SipCallTo should be a phone number or SIP user, not a full SIP URI, status=400) -
We then switched to just the bare extension instead of a full URI. is it correct to use only extension in sip_call_to:
sip_call_to="123", sip_trunk_id="<trunk-id>",This passed validation and LiveKit did send the INVITE out — but we never got any response back from the destination at all, and it eventually failed with:
TwirpError(code=deadline_exceeded, message=twirp error unknown: request timed out, status=408)
Any insights will be appreciated
