Plugin guides
Voice call plugin
Voice calls for OpenClaw via a plugin: outbound notifications, multi-turn conversations, full-duplex realtime voice, streaming transcription, and inbound calls with allowlist policies.
Providers: mock (dev, no network), plivo (Voice API + XML transfer +
GetInput speech), telnyx (Call Control v2), twilio (Programmable Voice +
Media Streams).
Quick start
Install the plugin
From npm
openclaw plugins install @openclaw/voice-callFrom a local folder (dev)
PLUGIN_SRC=./path/to/local/voice-call-pluginopenclaw plugins install "$PLUGIN_SRC"cd "$PLUGIN_SRC" && pnpm installUse the bare package to follow the current release tag. Pin an exact version only when you need a reproducible install. Restart the Gateway afterwards so the plugin loads.
Configure provider and webhook
Set config under plugins.entries.voice-call.config (see
Configuration). At minimum: provider, provider
credentials, fromNumber, and a publicly reachable webhook URL. With
multiple agents, also set agentId to the agent that should own calls.
For an inbound Twilio number, set its Voice webhook to the public Voice
Call webhook URL with method POST. Set the number-level Status
Callback to the same URL with ?type=status, also using POST, so
terminal inbound call statuses reach the plugin.
Verify setup
openclaw voicecall setupopenclaw voicecall setup --jsonChecks plugin enablement, provider credentials, webhook exposure, agent
ownership, and that only one audio mode (streaming or realtime) is active.
Smoke test
openclaw voicecall smokeopenclaw voicecall smoke --to "+15555550123"Both are dry runs by default. Add --yes to place a short outbound
notify call:
openclaw voicecall smoke --to "+15555550123" --yesWhere each section moved
Every section of the single-page version now lives on this page or on one of the five child pages below. The anchors from the single-page version still 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