Voice calls for Apus 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).
The Voice Call plugin runs inside the Gateway process. If you use a remote Gateway, install and configure the plugin on the machine running the Gateway. Installation applies to a running Gateway automatically; if it is offline, start it after configuration.
Quick start
Install the plugin
From npm
```bash
apus plugins install @openclaw/voice-call
```
From a local folder (dev)
```bash
PLUGIN_SRC=./path/to/local/voice-call-plugin
apus plugins install "$PLUGIN_SRC"
cd "$PLUGIN_SRC" && pnpm install
```
Use the bare package to follow the current release tag. Pin an exact
version only when you need a reproducible install. Check the installation's
application result; see [Apply changes and inspect](/plugins/manage-plugins#apply-changes-and-inspect).
Configure provider and webhook
Set config under `plugins.entries.voice-call.config` (see
[Configuration](/plugins/voice-call/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
```bash
apus voicecall setup
apus voicecall setup --json
```
Checks plugin enablement, provider credentials, webhook exposure, agent
ownership, and that only one audio mode (`streaming` or `realtime`) is active.
Smoke test
```bash
apus voicecall smoke
apus voicecall smoke --to "+15555550123"
```
Both are dry runs by default. Add `--yes` to place a short outbound
notify call:
```bash
apus voicecall smoke --to "+15555550123" --yes
```
For Twilio, Telnyx, and Plivo, setup must resolve to a public webhook URL.
If publicUrl, the tunnel URL, the Tailscale URL, or the serve fallback
resolves to loopback or private network space, setup fails instead of
starting a provider that cannot receive carrier webhooks.
Where 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
apus voicecall- the plugin-provided CLI command, which appears only when this plugin is installed