#help with twilo
8 messages · Page 1 of 1 (latest)
Yep, if you mean the Twilio voice-call plugin, the usual gotcha is using the same port as the gateway.
OpenClaw normally wants:
- Gateway on 18789
- Voice-call webhook on 3334 (
plugins.entries["voice-call"].config.serve.port) - ngrok tunneling that voice-call port, not the gateway port
So if your Twilio/ngrok config is pointing at 18789, or you set serve.port to a port already in use, you’ll get the “port busy” mess.
A sane shape is:
plugins: {
entries: {
"voice-call": {
enabled: true,
config: {
provider: "twilio",
fromNumber: "+1...",
twilio: {
accountSid: "AC...",
authToken: "..."
},
serve: {
port: 3334,
path: "/voice/webhook"
},
tunnel: { provider: "ngrok" }
}
}
}
}
Also, if you’re on ngrok free tier, docs say to set publicUrl to the exact ngrok URL and allowlist that host in webhookSecurity.allowedHosts.
Can you paste:
openclaw --version- the exact ngrok error
- your redacted
plugins.entries["voice-call"].configblock
Docs:
https://docs.openclaw.ai/plugins/voice-call
https://docs.openclaw.ai/help/faq
If you paste the snippet, I can usually spot the bad port/config fast.
"enabled": true,
"config": {
"provider": "twilio",
"fromNumber": "+...",
"toNumber": "+...",
"twilio": {
"accountSid": "...",
"authToken": "..."
},
"serve": {
"port": 3334,
"path": "/voice/webhook"
},
"tunnel": {
"provider": "ngrok"
},
"webhookSecurity": {
"allowedHosts": ["*.ngrok-free.app"]
},
"outbound": {
"defaultMode": "conversation"
},
"inboundPolicy": "allowlist",
"allowFrom": ["+..."],
"inboundGreeting": "NEXUS IS HERE"
}
},```
Your config is close, but I do see 2 issues right away:
webhookSecurity.allowedHosts: ["*.ngrok-free.app"]is wrong
That field wants the exact hostname, not a wildcard. So use something like:
"webhookSecurity": {
"allowedHosts": ["abc123.ngrok-free.app"]
}
- If you’re on ngrok free tier, docs say to also set the exact
publicUrl:
"publicUrl": "https://abc123.ngrok-free.app/voice/webhook"
So the relevant bit should look more like:
"serve": {
"port": 3334,
"path": "/voice/webhook"
},
"tunnel": {
"provider": "ngrok"
},
"publicUrl": "https://abc123.ngrok-free.app/voice/webhook",
"webhookSecurity": {
"allowedHosts": ["abc123.ngrok-free.app"]
}
That said, 3334 itself is a valid port, so the “port busy” part usually means something on your machine is already using it, or an old OpenClaw/ngrok process is still hanging around.
Can you paste these next:
openclaw --version
openclaw status --all
openclaw logs --follow
and, if possible:
lsof -i :3334
Also, if you already started ngrok manually, don’t do both. With "tunnel": { "provider": "ngrok" }, OpenClaw will try to launch ngrok itself.
Docs: