#Can't get voice-call plugin to work

1 messages · Page 1 of 1 (latest)

surreal garnet
#

I have incoming voice calls working perfectly and connecting me to an agent. I can't get outgoing calls to work though. Talking it over with my ops agent we actually got a call to go through but then I accidentally hit /new and we lost the lot of what worked when we looked through it later - so the plumbing and configs are fine. I keep getting an error that max concurrent calls are reached (1). I can't get that to go away even after restarting the gateway. I'm running in docker desktop. Twilio and OAI creds are verified.

Here is a relevant OpenClaw.json snippet.

"plugins": {
"enabled": true,
"entries": {
"qwen-portal-auth": {
"enabled": true
},
"voice-call": {
"enabled": true,
"config": {
"provider": "twilio",
"fromNumber": "${TWILIO_FROM_NUMBER}",
"toNumber": "${PATRICK_TO_NUMBER}",
"allowFrom": [
"${ALLOW_FROM_NUMBER}"
],
"inboundPolicy": "allowlist",
"inboundGreeting": "Hey Patrick. Want to do the weekly debrief, or do you want OpenClaw concierge mode?",
"twilio": {
"accountSid": "${TWILIO_ACCOUNT_SID}",
"authToken": "${TWILIO_AUTH_TOKEN}"
},
"serve": {
"bind": "0.0.0.0",
"port": 3334,
"path": "/voice/webhook"
},
"publicUrl": "https://voice.conciergecare.management/voice/webhook",
"streaming": {
"enabled": true,
"streamPath": "/voice/stream"
},
"outbound": {
"defaultMode": "conversation"
}
}
},

I verified that I only have one version of the voice call plugin.

lusty forgeBOT
#

To help others find answers, you can mark your question as solved via Right click solution message -> Apps -> âś… Mark Solution

ancient masonBOT
#

That error is coming from the voice-call plugin’s concurrency gate: maxConcurrentCalls defaults to 1, and the plugin counts both inbound + outbound calls toward that limit.

The important (and non-obvious) bit: the plugin persists active calls to a JSONL file and reloads any non-terminal calls on Gateway startup. So if a call never got its final “ended” webhook (common if the Gateway was restarted mid-call, or Twilio couldn’t reach the status callback), it will stay “active” forever and you’ll keep seeing:

Maximum concurrent calls (1) reached

1) Find the stuck “active” call and end it

Inside the container, run:

openclaw voicecall tail --since 200

Look for the most recent record for a call whose "state" is one of:
initiated | ringing | answered | active | speaking | listening

Copy its "callId" and then:

#
openclaw voicecall end --call-id <CALL_ID>

That should clear it (Twilio hangup is allowNotFound, so even if Twilio already ended it, OpenClaw should still clean up its local “active” state).

If you can’t use tail, the file is typically here in Docker:

  • /root/.openclaw/voice-calls/calls.jsonl (unless you set plugins.entries.voice-call.config.store)

2) Quick “nuke the stuck state” reset (keeps a backup)

If you just want to clear the stale active call(s) immediately:

mv /root/.openclaw/voice-calls/calls.jsonl /root/.openclaw/voice-calls/calls.jsonl.bak
# then restart the gateway/container
#

(You’ll lose call history since the move, but this gets you unstuck fast.)

3) If you actually want inbound + outbound at the same time

Add this to your plugin config:

"maxConcurrentCalls": 2

(That won’t fix a stuck call record, but it prevents “inbound call in progress blocks outbound call” if that’s part of your workflow.)

4) If it keeps happening: status callbacks likely aren’t completing

For outbound calls Twilio hits a separate StatusCallback URL (same webhook path, just with ?type=status&callId=...). If those requests are getting dropped/403’d, OpenClaw never sees completed/busy/no-answer/failed.

Two quick checks:

  • Gateway logs around the time of the call for signature/webhook verification errors
  • Twilio call logs for non-200 responses to the StatusCallback
#

If you’re behind a reverse proxy, you may need to set:

"webhookSecurity": { "allowedHosts": ["voice.conciergecare.management"] }

(and only go further like trustForwardingHeaders if you really control the proxy path end-to-end)


If you paste:

  1. openclaw --version (from inside the container), and
  2. the last ~30 lines from openclaw voicecall tail --since 30
    …I can tell you exactly which call is stuck and why it never got marked terminal.

If this fixes it, please mark the solution (right-click message → Apps → ✅ Mark Solution) so Answer Overflow indexes it.