Hi — I’m testing the bundled @openclaw/voice-call plugin with Telnyx and could use a sanity check on whether inbound answering is currently supported in stable, or whether I’m missing a required Telnyx/OpenClaw setting.
Environment
- OpenClaw version:
2026.3.28 initially, then updated after testing
- Install type: package install
- Provider:
telnyx
- Public webhook exposed via:
- Cloudflare DNS
- nginx reverse proxy
- Hookdeck as ingress relay
- Public webhook URL:
https://konnie.konsult.digital/voice/webhook
What’s working
I verified the transport path end-to-end:
- Telnyx sends webhook events to Hookdeck
- Hookdeck forwards to OpenClaw
- OpenClaw returns
200
- Public GET to webhook returns
405 Method Not Allowed
- Manual POST to webhook returns
200 OK
I also verified real Telnyx events in Hookdeck, including:
call.initiated
call.hangup
So the webhook path itself appears healthy.
OpenClaw config shape
Configured under:
plugins.entries.voice-call.config
Relevant fields used:
{
"enabled": true,
"provider": "telnyx",
"fromNumber": "+61...",
"toNumber": "+61...",
"inboundPolicy": "open",
"publicUrl": "https://konnie.konsult.digital/voice/webhook",
"webhookSecurity": {
"allowedHosts": ["konnie.konsult.digital"]
},
"serve": {
"bind": "127.0.0.1",
"port": 3336,
"path": "/voice/webhook"
},
"telnyx": {
"apiKey": "[redacted]",
"connectionId": "[redacted]",
"publicKey": "[redacted]"
}
}
I also tested earlier with skipSignatureVerification: true, before switching to the Telnyx public key.
Telnyx setup
- Using a Voice API Application
- Number is assigned to that application
- Webhook API version is v2
- Hookdeck preserves Telnyx signature headers
- Hookdeck destination forwards successfully to OpenClaw
Actual problem
When calling the Telnyx number:
- the phone rings
- Hookdeck shows
call.initiated
- OpenClaw responds
200
- but the call is never answered
- later Hookdeck shows
call.hangup
OpenClaw also creates the ~/.openclaw/voice-calls/ directory, but no calls.jsonl file is written.
Additional debugging
I inspected the bundled runtime code and found the Telnyx provider normalizes these events:
call.initiated
call.ringing
call.answered
call.bridged
call.transcription
call.hangup
call.dtmf.received
I also found Telnyx provider methods for:
- outbound call initiation
- hangup
- speak
- transcription_start
- transcription_stop
But I could not find a Telnyx provider method that issues an explicit answer command such as /actions/answer.
That makes me wonder whether inbound Telnyx answering is currently incomplete in this build, even though inbound events are parsed.
Question
Is inbound answering for Telnyx Call Control v2 currently expected to work in the bundled voice-call plugin?
If yes, what additional condition is required for OpenClaw to actually answer the inbound call.initiated event?
If no, is this a known limitation/regression?
Repro summary
- Enable bundled
voice-call plugin
- Configure
provider: "telnyx"
- Expose webhook publicly
- Set
inboundPolicy: "open"
- Point Telnyx → Hookdeck → OpenClaw webhook
- Call the Telnyx number
- Observe:
call.initiated webhook received
- HTTP
200
- no answer action occurs
- eventual
call.hangup
Happy to test a patch or provide more redacted payload details if helpful.
Hi — I’m testing the bundled
@openclaw/voice-callplugin with Telnyx and could use a sanity check on whether inbound answering is currently supported in stable, or whether I’m missing a required Telnyx/OpenClaw setting.Environment
2026.3.28initially, then updated after testingtelnyxhttps://konnie.konsult.digital/voice/webhookWhat’s working
I verified the transport path end-to-end:
200405 Method Not Allowed200 OKI also verified real Telnyx events in Hookdeck, including:
call.initiatedcall.hangupSo the webhook path itself appears healthy.
OpenClaw config shape
Configured under:
plugins.entries.voice-call.configRelevant fields used:
{ "enabled": true, "provider": "telnyx", "fromNumber": "+61...", "toNumber": "+61...", "inboundPolicy": "open", "publicUrl": "https://konnie.konsult.digital/voice/webhook", "webhookSecurity": { "allowedHosts": ["konnie.konsult.digital"] }, "serve": { "bind": "127.0.0.1", "port": 3336, "path": "/voice/webhook" }, "telnyx": { "apiKey": "[redacted]", "connectionId": "[redacted]", "publicKey": "[redacted]" } }I also tested earlier with
skipSignatureVerification: true, before switching to the Telnyx public key.Telnyx setup
Actual problem
When calling the Telnyx number:
call.initiated200call.hangupOpenClaw also creates the
~/.openclaw/voice-calls/directory, but nocalls.jsonlfile is written.Additional debugging
I inspected the bundled runtime code and found the Telnyx provider normalizes these events:
call.initiatedcall.ringingcall.answeredcall.bridgedcall.transcriptioncall.hangupcall.dtmf.receivedI also found Telnyx provider methods for:
But I could not find a Telnyx provider method that issues an explicit answer command such as
/actions/answer.That makes me wonder whether inbound Telnyx answering is currently incomplete in this build, even though inbound events are parsed.
Question
Is inbound answering for Telnyx Call Control v2 currently expected to work in the bundled voice-call plugin?
If yes, what additional condition is required for OpenClaw to actually answer the inbound
call.initiatedevent?If no, is this a known limitation/regression?
Repro summary
voice-callpluginprovider: "telnyx"inboundPolicy: "open"call.initiatedwebhook received200call.hangupHappy to test a patch or provide more redacted payload details if helpful.