Voice Call Plugin: Outbound and Inbound Calls for OpenClaw
Set up the Voice Call plugin to place outbound notifications and accept inbound calls through Twilio, Telnyx, or Plivo, with optional realtime voice and streaming transcription. Written for operators who install and configure plugins on the Gateway host.
Read this when
- You want to place an outbound voice call from OpenClaw
- You are configuring or developing the voice-call plugin
- You need realtime voice or streaming transcription on telephony
Voice calls for OpenClaw are provided through a plugin: outbound notifications, multi-turn conversations, full-duplex realtime voice, streaming transcription, and inbound calls governed by allowlist policies.
Providers: mock (dev, no network), plivo (Voice API + XML transfer + GetInput speech), telnyx (Call Control v2), twilio (Programmable Voice + Media Streams).
Note
The Voice Call plugin executes within the Gateway process. When your Gateway is remote, the plugin has to be installed and configured on whichever machine hosts the Gateway. A running Gateway picks up the installation on its own; should it be offline, bring it up once configuration is done.
Quick start
Install the plugin
From npm
openclaw plugins install @openclaw/voice-call
From a local folder (dev)
PLUGIN_SRC=./path/to/local/voice-call-plugin
openclaw plugins install "$PLUGIN_SRC"
cd "$PLUGIN_SRC" && pnpm install
To track the current release tag, install the bare package. Pin an exact version only if you require an install that can be reproduced. Inspect the application result of the installation; refer to Apply changes and inspect.
Configure provider and webhook
Configuration belongs under plugins.entries.voice-call.config (refer to
Configuration). At minimum you need: provider, provider
credentials, fromNumber, and a webhook URL reachable from the public internet. When several agents are in play, also assign agentId to whichever agent should own calls.
For an inbound Twilio number, point its Voice webhook at the public Voice Call webhook URL using method POST. The number-level Status Callback should target that same URL with ?type=status, again using POST, so that terminal inbound call statuses make it to the plugin.
Verify setup
openclaw voicecall setup
openclaw voicecall setup --json
Verifies that the plugin is enabled, provider credentials are present, the webhook is exposed, agent ownership is set, and that just one audio mode (streaming or realtime) is active.
Smoke test
openclaw voicecall smoke
openclaw voicecall smoke --to "+15555550123"
By default both of these are dry runs. To place a short outbound notify call, append --yes:
openclaw voicecall smoke --to "+15555550123" --yes
Warning
With Twilio, Telnyx, and Plivo, setup has to resolve to a public webhook URL. Should
publicUrl, the tunnel URL, the Tailscale URL, or the serve fallback resolve to loopback or private network space, setup fails rather than starting a provider incapable of receiving carrier webhooks.
Where each section moved
Content that used to sit in the single-page version now appears either on this page or across the five child pages listed below. Anchors carried over from the single-page version continue to resolve here.
Voice call configuration
Voice call configuration, plugin config keys, the call owner, the full config reference table, and session scope.
- Configuration
- Choose the call owner
- Config reference
- Provider exposure and security notes
- Streaming connection caps
- Legacy config migrations
- Session scope
Voice call realtime and streaming
Voice call realtime and streaming, full-duplex realtime voice, hangup detection, tool and consult policy, agent voice context, and Twilio Media Streams transcription.
- Realtime voice conversations
- Hangup detection
- Tool policy
- Agent voice context
- Realtime provider examples
- Google Gemini Live
- OpenAI realtime example
- Streaming transcription
- Streaming provider examples
- OpenAI streaming example
- xAI
Voice call TTS and inbound calls
Voice call TTS and inbound calls, telephony text-to-speech, inbound policy and per-number routing, the spoken output contract, conversation startup, and the stale call reaper.
- TTS for calls
- TTS examples
- Core TTS only
- Override to ElevenLabs (calls only)
- OpenAI model override (deep-merge)
- Inbound calls
- Per-number routing
- Spoken output contract
- Conversation startup behavior
- Twilio stream disconnect grace
- Stale call reaper
Voice call security and interfaces
Voice call security and interfaces, webhook signature and forwarding-header security, plus the CLI, agent tool, and Gateway RPC surfaces.
- Webhook security
- webhookSecurity.allowedHosts
- webhookSecurity.trustForwardingHeaders
- webhookSecurity.trustedProxyIPs
- CLI
- Agent tool
- Gateway RPC
Voice call troubleshooting
Voice call troubleshooting, fixes for setup, webhook exposure, credentials, signature verification, Google Meet dial-in, and silent realtime calls.
- Troubleshooting
- Call placement fails to save its initial record
- Setup fails webhook exposure
- Provider credentials fail
- Calls start but provider webhooks do not arrive
- Signature verification fails
- Google Meet Twilio joins fail
- Realtime call has no speech
Related
- Talk mode
- Text-to-speech
- Voice wake
- Google Meet plugin - Meet calls, including Twilio sessions delegated through Voice Call
openclaw voicecall- the plugin-provided CLI command, which appears only when this plugin is installed