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.

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.

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.

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.

Voice call troubleshooting

Voice call troubleshooting — fixes for setup, webhook exposure, credentials, signature verification, Google Meet dial-in, and silent realtime calls.

Related