SIP Inbound call - Agent is not joining and

We’re using LiveKit Cloud with Twilio SIP for inbound calls. The SIP caller joins the LiveKit room successfully, but our voice agent never receives the dispatch job.

Setup

  • **Platform:** LiveKit Cloud
  • **Agent:** Node.js, deployed via `lk agent deploy`
  • **Packages:** `@livekit/agents` 1.0.44, `livekit-server-sdk` 2.15.0
  • **SIP:** Twilio → LiveKit SIP trunk, `SipDispatchRuleIndividual` with `roomPrefix`
  • **Agent name:** `emma-agent` (matches in both SIP rule and ServerOptions)

What we’ve tried

  1. **roomConfig.agents** — SIP rule with `RoomAgentDispatch` (`agentName: “emma-agent”`, metadata). Agent never receives jobs.
  2. **Explicit createDispatch()** — `AgentDispatchClient.createDispatch()` on `room_started` webhook. API returns success, but agent doesn’t join.
  3. **Auto-dispatch** — Removed `agentName` from ServerOptions. Agent still doesn’t join.

Observed behavior

  • **Webhook logs:** SIP dispatch rule created → Room started → `participant_joined: sip_+1…` → Twilio call answered → `participant_left` → `room_finished`
  • **Agent logs:** Agent starts, logs “registered worker”, but no “received job request” during calls
  • **LiveKit session list:** 1 participant (SIP caller only); agent never appears

SIP rule creation (Node.js)

await sipClient.createSipDispatchRule(
{ type: ‘individual’, roomPrefix: `inbound-${callSessionId}-` },
{
name: ruleName,
trunkIds: [sipTrunkId],
roomConfig: new RoomConfiguration({
agents: [
new RoomAgentDispatch({
agentName: ‘emma-agent’,
metadata: dispatchMetadata,
}),
],
}),
}
);

Agent worker

cli.runApp(new ServerOptions({
agent: agentPath,
agentName: ‘emma-agent’,
}));

**Question **

For LiveKit Cloud + Twilio SIP inbound, what is the correct way to get the agent to receive jobs? Is there a known issue with roomConfig.agents not dispatching to agents on Cloud, or a different configuration we should use?

I know you have tried a few things, but with your current setup it looks like your dispatch rule is correctly configured to dispatch emma-agent when a call is received. In the server logs for your most recent session, I see:

assigned job to worker

Which doesn’t align with your observed behaviour that no job request is received.

Could you maybe enable agent debug logs? I wonder if the job is getting rejected for some reason. Or, if easier, replace the implementation with a basic agent-starter-python/src/agent.py at main · livekit-examples/agent-starter-python · GitHub … Since you you tried multiple ways to dispatch, and all have failed, I would suspect something in the agent.

Note that for agent logging, I recently wrote this: Where to find your Agent Logs | LiveKit

Thanks Darryn, I appreciate you taking time to respond. Let me try and keep you posted. I really need to get this work as the entire project has to come to stand still.

hi Darryn,

Tried again with logs enabled and also created a test/simple agent. First the error in the log was about missing deep gram API key. We intended to actually use inference so that we can use one API for STT/TTS while we override the LLM. when we did that we got the following log snapshot. This is with a very tiny agent with just one static greeting. even in this case also, the phone rings continuously and no one picks up but when I see the log, I see this.

Error: ConnectError: engine: signal failure: failed to retrieve region info: error sending request for url (https://sparkletsai-k9actvp1.livekit.cloud/settings/regions)

  • Project: sparkletsai

  • Agent ID: CA_BQmfXnZkazzV

  • Region: US East B

  • That it fails consistently (not transient)

    the full log is here. please help. thanks in advance.

    sampathsaagi@Sampaths-MacBook-Pro-M2 https-github.com-Avant-Digital-sparklets % lk agent l
    ogs
    Using default project [sparkletsai]
    Using agent [CA_BQmfXnZkazzV]
    [AgentWorker] Module loaded { pid: 1, testMode: undefined }
    [AgentWorker] Starting agent worker: path=/app/dist/agent-worker.mjs, args=/usr/local/bin/node /app/dist/agent-worker.mjs start
    {“level”:40,“time”:1771363091556,“pid”:1,“hostname”:“deployment-p-3qgh7k54ebj-ca-bqmfxnzkazzv-645886d5fc-g46g8”,“version”:“0.1.0”,“msg”:“custom loadThreshold is not supported when deploying to Cloud, using defaults”}
    {“level”:30,“time”:1771363091557,“pid”:1,“hostname”:“deployment-p-3qgh7k54ebj-ca-bqmfxnzkazzv-645886d5fc-g46g8”,“version”:“0.1.0”,“msg”:“starting worker”}
    {“level”:30,“time”:1771363091622,“pid”:1,“hostname”:“deployment-p-3qgh7k54ebj-ca-bqmfxnzkazzv-645886d5fc-g46g8”,“msg”:“Server is listening on port 8081”}
    {“level”:30,“time”:1771363091684,“pid”:1,“hostname”:“deployment-p-3qgh7k54ebj-ca-bqmfxnzkazzv-645886d5fc-g46g8”,“version”:“0.1.0”,“id”:“CAW_4ffBcSFMGi5a”,“server_info”:{“edition”:“Cloud”,“version”:“1.9.11”,“protocol”:16,“region”:“US East B”,“nodeId”:“NC_OASHBURN1B_Akk8JCj8secK”,“debugInfo”:“”,“agentProtocol”:0},“msg”:“registered worker”}
    [AgentWorker] Module loaded { pid: 35, testMode: undefined }
    [AgentWorker] Module loaded { pid: 70, testMode: undefined }
    [AgentWorker] Module loaded { pid: 88, testMode: undefined }
    {“level”:30,“time”:1771363152465,“pid”:1,“hostname”:“deployment-p-3qgh7k54ebj-ca-bqmfxnzkazzv-645886d5fc-g46g8”,“version”:“0.1.0”,“jobId”:“AJ_QPA9q3VqD7Zs”,“resuming”:false,“agentName”:“emma-agent”,“msg”:“received job request”}
    [AgentWorker] entry() called for room=unknown, TEST_AGENT_MODE=false
    [AgentWorker] Creating EmmaVoiceAgent for inbound call to unknown, room=unknown
    [EmmaVoiceAgent] Created for inbound call with Unknown Caller strategy=unknown_caller
    [AgentWorker] Loading VAD for room=unknown
    [AgentWorker] VAD loaded for room=unknown
    [AgentWorker] Starting session for room=unknown
    {“level”:20,“time”:1771363152931,“pid”:35,“hostname”:“deployment-p-3qgh7k54ebj-ca-bqmfxnzkazzv-645886d5fc-g46g8”,“name”:“lk-rtc”,“msg”:“Connect callback received”}
    [AgentWorker] Agent state: initializing → listening
    [AgentWorker] Session started for room=unknown
    [AgentWorker] Connecting to room=unknown (attempt 1/3)
    {“level”:20,“time”:1771363153082,“pid”:35,“hostname”:“deployment-p-3qgh7k54ebj-ca-bqmfxnzkazzv-645886d5fc-g46g8”,“name”:“lk-rtc”,“msg”:“Connect callback received”}
    [AgentWorker] Connect failed (region fetch), retrying in 2000ms: engine: signal failure: failed to retrieve region info: error sending request for url (https://sparkletsai-k9actvp1.livekit.cloud/settings/regions)
    [AgentWorker] Module loaded { pid: 114, testMode: undefined }
    [AgentWorker] Connecting to room=unknown (attempt 2/3)
    {“level”:20,“time”:1771363155137,“pid”:35,“hostname”:“deployment-p-3qgh7k54ebj-ca-bqmfxnzkazzv-645886d5fc-g46g8”,“name”:“lk-rtc”,“msg”:“Connect callback received”}
    [AgentWorker] Connect failed (region fetch), retrying in 4000ms: engine: signal failure: failed to retrieve region info: error sending request for url (https://sparkletsai-k9actvp1.livekit.cloud/settings/regions)
    [AgentWorker] Connecting to room=unknown (attempt 3/3)
    [AgentWorker] FATAL error in room=unknown: ConnectError: engine: signal failure: failed to retrieve region info: error sending request for url (https://sparkletsai-k9actvp1.livekit.cloud/settings/regions)
    at Room.connect (file:///app/node_modules/.pnpm/@livekit+rtc-node@0.13.24/node_modules/@livekit/rtc-node/dist/room.js:484:15)
    at async JobContext.connect (file:///app/node_modules/.pnpm/@livekit+agents@1.0.44_@livekit+rtc-node@0.13.24_bufferutil@4.1.0_zod@4.1.9/node_modules/@livekit/agents/dist/job.js:151:5)
    at async entry (file:///app/dist/agent-worker.mjs:1947:13)
    at async file:///app/node_modules/.pnpm/@livekit+agents@1.0.44_@livekit+rtc-node@0.13.24_bufferutil@4.1.0_zod@4.1.9/node_modules/@livekit/agents/dist/telemetry/traces.js:75:16
    at async DynamicTracer.startActiveSpan (file:///app/node_modules/.pnpm/@livekit+agents@1.0.44_@livekit+rtc-node@0.13.24_bufferutil@4.1.0_zod@4.1.9/node_modules/@livekit/agents/dist/telemetry/traces.js:73:12)
    at async file:///app/node_modules/.pnpm/@livekit+agents@1.0.44_@livekit+rtc-node@0.13.24_bufferutil@4.1.0_zod@4.1.9/node_modules/@livekit/agents/dist/ipc/job_proc_lazy_main.js:72:5
    {“level”:20,“time”:1771363159214,“pid”:35,“hostname”:“deployment-p-3qgh7k54ebj-ca-bqmfxnzkazzv-645886d5fc-g46g8”,“name”:“lk-rtc”,“msg”:“Connect callback received”}

this is the earlier deep gram API error

sampathsaagi@Sampaths-MacBook-Pro-M2 https-github.com-Avant-Digital-sparklets % lk agent logs
Using default project [sparkletsai]
Using agent [CA_BQmfXnZkazzV]
[AgentWorker] Starting agent worker: path=/app/dist/agent-worker.mjs, args=/usr/local/bin/node /app/dist/agent-worker.mjs start
{“level”:40,“time”:1771358674266,“pid”:1,“hostname”:“deployment-p-3qgh7k54ebj-ca-bqmfxnzkazzv-54445497bd-9mkx4”,“version”:“0.1.0”,“msg”:“custom loadThreshold is not supported when deploying to Cloud, using defaults”}
{“level”:30,“time”:1771358674267,“pid”:1,“hostname”:“deployment-p-3qgh7k54ebj-ca-bqmfxnzkazzv-54445497bd-9mkx4”,“version”:“0.1.0”,“msg”:“starting worker”}
{“level”:30,“time”:1771358674344,“pid”:1,“hostname”:“deployment-p-3qgh7k54ebj-ca-bqmfxnzkazzv-54445497bd-9mkx4”,“msg”:“Server is listening on port 8081”}
{“level”:30,“time”:1771358674372,“pid”:1,“hostname”:“deployment-p-3qgh7k54ebj-ca-bqmfxnzkazzv-54445497bd-9mkx4”,“version”:“0.1.0”,“id”:“CAW_fark3vN46xJV”,“server_info”:{“edition”:“Cloud”,“version”:“1.9.11”,“protocol”:16,“region”:“US East B”,“nodeId”:“NC_OASHBURN1B_9uSFc6Qtppde”,“debugInfo”:“”,“agentProtocol”:0},“msg”:“registered worker”}
{“level”:30,“time”:1771359006651,“pid”:1,“hostname”:“deployment-p-3qgh7k54ebj-ca-bqmfxnzkazzv-54445497bd-9mkx4”,“version”:“0.1.0”,“jobId”:“AJ_UsRH2qbcbueT”,“resuming”:false,“agentName”:“emma-agent”,“msg”:“received job request”}
[AgentWorker] entry() called for room=unknown, TEST_AGENT_MODE=false
[AgentWorker] Creating EmmaVoiceAgent for inbound call to unknown, room=unknown
[EmmaVoiceAgent] Created for inbound call with Unknown Caller strategy=unknown_caller
[AgentWorker] Loading VAD for room=unknown
[AgentWorker] VAD loaded for room=unknown
[AgentWorker] FATAL error in room=unknown: Error: Deepgram API key is required, whether as an argument or as $DEEPGRAM_API_KEY
at new STT (file:///app/node_modules/.pnpm/@livekit+agents-plugin-deepgram@1.0.44_@livekit+agents@1.0.44_@livekit+rtc-node@0.13.24_c16325c045ef4680fd331b2c7609bb10/node_modules/@livekit/agents-plugin-deepgram/dist/stt.js:47:13)
at entry (file:///app/dist/agent-worker.mjs:1919:14)
at async file:///app/node_modules/.pnpm/@livekit+agents@1.0.44_@livekit+rtc-node@0.13.24_bufferutil@4.1.0_zod@4.1.9/node_modules/@livekit/agents/dist/telemetry/traces.js:75:16
at async DynamicTracer.startActiveSpan (file:///app/node_modules/.pnpm/@livekit+agents@1.0.44_@livekit+rtc-node@0.13.24_bufferutil@4.1.0_zod@4.1.9/node_modules/@livekit/agents/dist/telemetry/traces.js:73:12)
at async file:///app/node_modules/.pnpm/@livekit+agents@1.0.44_@livekit+rtc-node@0.13.24_bufferutil@4.1.0_zod@4.1.9/node_modules/@livekit/agents/dist/ipc/job_proc_lazy_main.js:72:5
{“level”:30,“time”:1771359007249,“pid”:1,“hostname”:“deployment-p-3qgh7k54ebj-ca-bqmfxnzkazzv-54445497bd-9mkx4”,“version”:“0.1.0”,“jobId”:“AJ_T8Ak7av2aTnU”,“resuming”:false,“agentName”:“emma-agent”,“msg”:“received job request”}
[AgentWorker] entry() called for room=unknown, TEST_AGENT_MODE=false
[AgentWorker] Creating EmmaVoiceAgent for inbound call to unknown, room=unknown
[EmmaVoiceAgent] Created for inbound call with Unknown Caller strategy=unknown_caller
[AgentWorker] Loading VAD for room=unknown
[AgentWorker] VAD loaded for room=unknown
[AgentWorker] FATAL error in room=unknown: Error: Deepgram API key is required, whether as an argument or as $DEEPGRAM_API_KEY
at new STT (file:///app/node_modules/.pnpm/@livekit+agents-plugin-deepgram@1.0.44_@livekit+agents@1.0.44_@livekit+rtc-node@0.13.24_c16325c045ef4680fd331b2c7609bb10/node_modules/@livekit/agents-plugin-deepgram/dist/stt.js:47:13)
at entry (file:///app/dist/agent-worker.mjs:1919:14)
at async file:///app/node_modules/.pnpm/@livekit+agents@1.0.44_@livekit+rtc-node@0.13.24_bufferutil@4.1.0_zod@4.1.9/node_modules/@livekit/agents/dist/telemetry/traces.js:75:16
at async DynamicTracer.startActiveSpan (file:///app/node_modules/.pnpm/@livekit+agents@1.0.44_@livekit+rtc-node@0.13.24_bufferutil@4.1.0_zod@4.1.9/node_modules/@livekit/agents/dist/telemetry/traces.js:73:12)
at async file:///app/node_modules/.pnpm/@livekit+agents@1.0.44_@livekit+rtc-node@0.13.24_bufferutil@4.1.0_zod@4.1.9/node_modules/@livekit/agents/dist/ipc/job_proc_lazy_main.js:72:5
lk agent logs
{“level”:30,“time”:1771360586477,“pid”:1,“hostname”:“deployment-p-3qgh7k54ebj-ca-bqmfxnzkazzv-54445497bd-9mkx4”,“version”:“0.1.0”,“jobId”:“AJ_dcDLu2iM9aGP”,“resuming”:false,“agentName”:“emma-agent”,“msg”:“received job request”}
lk agent logs
{“level”:30,“time”:1771361793724,“pid”:1,“hostname”:“deployment-p-3qgh7k54ebj-ca-bqmfxnzkazzv-54445497bd-9mkx4”,“version”:“0.1.0”,“jobId”:“AJ_Q7xRzsWHMszj”,“resuming”:false,“agentName”:“emma-agent”,“msg”:“received job request”}

here is the latest log…it shows agents greeting. but as a caller the call was continuing to ring.

This is an infrastructure/connectivity issue. Include:

  • Error: APIConnectionError for inference.STT and inference.TTS

  • Project: sparkletsai

  • Agent ID: CA_BQmfXnZkazzV

  • Region: US East B

  • That the agent runs in LiveKit Cloud but cannot reach the Inference API

    [AgentWorker] Module loaded { pid: 1, testMode: undefined }
    [AgentWorker] Starting agent worker: path=/app/dist/agent-worker.mjs, args=/usr/local/bin/node /app/dist/agent-worker.mjs start
    {“level”:40,“time”:1771366653075,“pid”:1,“hostname”:“deployment-p-3qgh7k54ebj-ca-bqmfxnzkazzv-778ff8d77b-qwrm9”,“version”:“0.1.0”,“msg”:“custom loadThreshold is not supported when deploying to Cloud, using defaults”}
    {“level”:30,“time”:1771366653076,“pid”:1,“hostname”:“deployment-p-3qgh7k54ebj-ca-bqmfxnzkazzv-778ff8d77b-qwrm9”,“version”:“0.1.0”,“msg”:“starting worker”}
    {“level”:30,“time”:1771366653125,“pid”:1,“hostname”:“deployment-p-3qgh7k54ebj-ca-bqmfxnzkazzv-778ff8d77b-qwrm9”,“msg”:“Server is listening on port 8081”}
    {“level”:30,“time”:1771366653216,“pid”:1,“hostname”:“deployment-p-3qgh7k54ebj-ca-bqmfxnzkazzv-778ff8d77b-qwrm9”,“version”:“0.1.0”,“id”:“CAW_RFYeS8JpuUFQ”,“server_info”:{“edition”:“Cloud”,“version”:“1.9.11”,“protocol”:16,“region”:“US East B”,“nodeId”:“NC_OASHBURN1B_PDPNhd243ggP”,“debugInfo”:“”,“agentProtocol”:0},“msg”:“registered worker”}
    [AgentWorker] Module loaded { pid: 35, testMode: undefined }
    [AgentWorker] Module loaded { pid: 70, testMode: undefined }
    [AgentWorker] Module loaded { pid: 88, testMode: undefined }
    {“level”:30,“time”:1771366920892,“pid”:1,“hostname”:“deployment-p-3qgh7k54ebj-ca-bqmfxnzkazzv-778ff8d77b-qwrm9”,“version”:“0.1.0”,“jobId”:“AJ_ERMPoR2UV9o2”,“resuming”:false,“agentName”:“emma-agent”,“msg”:“received job request”}
    [AgentWorker] entry() called for room=inbound-ba10beeb-c8d0-4052-9af4-cdf4006a60b4-+19135791362_hwpyYEDKtiSx, TEST_AGENT_MODE=false
    [AgentWorker] Creating EmmaVoiceAgent for inbound call to unknown, room=inbound-ba10beeb-c8d0-4052-9af4-cdf4006a60b4-
    +19135791362_hwpyYEDKtiSx
    [EmmaVoiceAgent] Created for inbound call with Unknown Caller strategy=unknown_caller
    [AgentWorker] Loading VAD for room=inbound-ba10beeb-c8d0-4052-9af4-cdf4006a60b4-+19135791362_hwpyYEDKtiSx
    [AgentWorker] VAD loaded for room=inbound-ba10beeb-c8d0-4052-9af4-cdf4006a60b4-
    +19135791362_hwpyYEDKtiSx
    [AgentWorker] Starting session for room=inbound-ba10beeb-c8d0-4052-9af4-cdf4006a60b4-+19135791362_hwpyYEDKtiSx
    {“level”:40,“time”:1771366921215,“pid”:35,“hostname”:“deployment-p-3qgh7k54ebj-ca-bqmfxnzkazzv-778ff8d77b-qwrm9”,“tts”:“inference.STT”,“attempt”:1,“error”:{“body”:null,“retryable”:true,“name”:“APIConnectionError”},“msg”:“failed to recognize speech, retrying in 0.1s”}
    {“level”:40,“time”:1771366921224,“pid”:35,“hostname”:“deployment-p-3qgh7k54ebj-ca-bqmfxnzkazzv-778ff8d77b-qwrm9”,“tts”:“inference.STT”,“attempt”:2,“error”:{“body”:null,“retryable”:true,“name”:“APIConnectionError”},“msg”:“failed to recognize speech, retrying in 2000s”}
    {“level”:20,“time”:1771366921318,“pid”:35,“hostname”:“deployment-p-3qgh7k54ebj-ca-bqmfxnzkazzv-778ff8d77b-qwrm9”,“name”:“lk-rtc”,“msg”:“Connect callback received”}
    [AgentWorker] Agent state: initializing → listening
    [AgentWorker] Session started for room=inbound-ba10beeb-c8d0-4052-9af4-cdf4006a60b4-
    +19135791362_hwpyYEDKtiSx
    [EmmaVoiceAgent] Greeting (unknown_caller): “Hello, this is Emma, Sampath’s assistant. How can I help you?”
    [AgentWorker] Saying greeting for room=inbound-ba10beeb-c8d0-4052-9af4-cdf4006a60b4-+19135791362_hwpyYEDKtiSx
    {“level”:40,“time”:1771366921339,“pid”:35,“hostname”:“deployment-p-3qgh7k54ebj-ca-bqmfxnzkazzv-778ff8d77b-qwrm9”,“tts”:“inference.TTS”,“attempt”:1,“error”:{“body”:null,“retryable”:true,“name”:“APIConnectionError”},“msg”:“failed to synthesize speech, retrying in 0.1s”}
    {“level”:40,“time”:1771366921405,“pid”:35,“hostname”:“deployment-p-3qgh7k54ebj-ca-bqmfxnzkazzv-778ff8d77b-qwrm9”,“tts”:“inference.TTS”,“attempt”:2,“error”:{“body”:null,“retryable”:true,“name”:“APIConnectionError”},“msg”:“failed to synthesize speech, retrying in 2000s”}
    [AgentWorker] Module loaded { pid: 114, testMode: undefined }
    {“level”:40,“time”:1771366923235,“pid”:35,“hostname”:“deployment-p-3qgh7k54ebj-ca-bqmfxnzkazzv-778ff8d77b-qwrm9”,“tts”:“inference.STT”,“attempt”:3,“error”:{“body”:null,“retryable”:true,“name”:“APIConnectionError”},“msg”:“failed to recognize speech, retrying in 2000s”}
    {“level”:40,“time”:1771366923414,“pid”:35,“hostname”:“deployment-p-3qgh7k54ebj-ca-bqmfxnzkazzv-778ff8d77b-qwrm9”,“tts”:“inference.TTS”,“attempt”:3,“error”:{“body”:null,“retryable”:true,“name”:“APIConnectionError”},“msg”:“failed to synthesize speech, retrying in 2000s”}
    [AgentWorker] Greeting played for room=inbound-ba10beeb-c8d0-4052-9af4-cdf4006a60b4-
    +19135791362_hwpyYEDKtiSx
    [AgentWorker] Agent started in room: inbound-ba10beeb-c8d0-4052-9af4-cdf4006a60b4-_+19135791362_hwpyYEDKtiSx

I am not sure what is happening with your agent, but I recommend testing your dispatch logic with a known-working agent that uses LiveKit Inference, such as our starter agent, and then building from there. If it was a more widespread issue with LiveKit inference, I would have expected to have seen a lot more issues reported about this