openclaw voicecall CLI reference for voice-call plugin
This page covers the openclaw voicecall command surface for the voice-call plugin. It is intended for developers who need to manage outbound voice calls, DTMF tones, and spoken messages via CLI.
Read this when
- You use the voice-call plugin and want every CLI entry point
- You need flag tables and defaults for setup, smoke, call, continue, speak, dtmf, end, status, tail, latency, expose, and start
openclaw voicecall
The command voicecall comes from a plugin. It becomes available only after the voice-call plugin has been installed and activated.
While the Gateway is active, operational subcommands (call, start, continue, speak, dtmf, end, status) are directed to the voice-call runtime on that Gateway. When no Gateway can be reached, a standalone CLI runtime handles them instead.
Subcommands
openclaw voicecall setup [--json]
openclaw voicecall smoke [-t <phone>] [--message <text>] [--mode <m>] [--yes] [--json]
openclaw voicecall call -m <text> [-t <phone>] [--mode <m>]
openclaw voicecall start --to <phone> [--message <text>] [--mode <m>]
openclaw voicecall continue --call-id <id> --message <text>
openclaw voicecall speak --call-id <id> --message <text>
openclaw voicecall dtmf --call-id <id> --digits <digits>
openclaw voicecall end --call-id <id>
openclaw voicecall status [--call-id <id>] [--json]
openclaw voicecall tail [--file <path>] [--since <n>] [--poll <ms>]
openclaw voicecall latency [--file <path>] [--last <n>]
openclaw voicecall expose [--mode <m>] [--path <p>] [--port <port>] [--serve-path <p>]
| Subcommand | Description |
|---|---|
setup | Display readiness checks for providers and webhooks. |
smoke | Execute readiness checks; a live test call is placed only when --yes is used. |
call | Start an outbound voice call. |
start | Shortcut for call where --to is mandatory and --message is optional. |
continue | Deliver a spoken message then await the following reply. |
speak | Deliver a spoken message without waiting for a reply. |
dtmf | Transmit DTMF tones to a call that is currently active. |
end | End a call that is currently active. |
status | Review active calls (or a single one using --call-id). |
tail | Follow calls.jsonl (helpful when testing providers). |
latency | Aggregate turn-latency data from calls.jsonl. |
expose | Switch Tailscale serve or funnel on or off for the webhook endpoint. |
Setup and smoke
setup
By default, readiness checks are shown in a human-readable format. Supply --json to get output suitable for scripting.
openclaw voicecall setup
openclaw voicecall setup --json
smoke
The same readiness checks are performed. A real phone call is only initiated when both --to and --yes are supplied.
| Flag | Default | Description |
|---|---|---|
-t, --to <phone> | (none) | The phone number to dial for a live smoke test. |
--message <text> | OpenClaw voice call smoke test. | The message spoken during the smoke call. |
--mode <mode> | notify | Call mode: either notify or conversation. |
--yes | false | Triggers the actual outbound call. |
--json | false | Outputs machine-readable JSON. |
openclaw voicecall smoke
openclaw voicecall smoke --to "+15555550123" # dry run
openclaw voicecall smoke --to "+15555550123" --yes # live notify call
Note
When using external providers (
plivo,telnyx,twilio), bothsetupandsmokeneed a public webhook URL obtained frompublicUrl, a tunnel, or Tailscale exposure. A loopback or private serve fallback is rejected because carriers cannot reach it.
Call lifecycle
call
Start an outbound voice call.
| Flag | Required | Default | Description |
|---|---|---|---|
-m, --message <text> | yes | (none) | Text to be spoken once the call picks up. |
-t, --to <phone> | no | config toNumber | Destination phone number in E.164 format. |
--mode <mode> | no | conversation | How the call behaves: notify (disconnect after message) or conversation (keep the line open). |
openclaw voicecall call --to "+15555550123" --message "Hello"
openclaw voicecall call -m "Heads up" --mode notify
start
Acts as a shorthand for call but uses a distinct default flag layout.
| Flag | Required | Default | Description |
|---|---|---|---|
--to <phone> | yes | (none) | Number you want to call. |
--message <text> | no | (none) | What to say when the call is answered. |
--mode <mode> | no | conversation | Call type: notify or conversation. |
continue
Deliver a message then listen for a reply.
| Flag | Required | Description |
|---|---|---|
--call-id <id> | yes | Identifier for the call. |
--message <text> | yes | Content to say. |
speak
Deliver a message without expecting a reply.
| Flag | Required | Description |
|---|---|---|
--call-id <id> | yes | Call identifier. |
--message <text> | yes | Words to speak. |
dtmf
Transmit DTMF tones to a call that is already connected.
| Flag | Required | Description |
|---|---|---|
--call-id <id> | yes | Call identifier. |
--digits <digits> | yes | DTMF sequence (e.g., ww123456# indicates pauses). |
end
Terminate an active call.
| Flag | Required | Description |
|---|---|---|
--call-id <id> | yes | Call ID. |
status
Review currently active calls.
| Flag | Default | Description |
|---|---|---|
--call-id <id> | (none) | Limit results to one call. |
--json | false | Output in machine-readable JSON. |
openclaw voicecall status
openclaw voicecall status --json
openclaw voicecall status --call-id <id>
Logs and metrics
tail
Follow the voice-call JSONL log. On startup it shows the most recent --since entries, then
continues to display new entries as they arrive.
| Flag | Default | Description |
|---|---|---|
--file <path> | resolved from plugin store | Location of calls.jsonl. |
--since <n> | 25 | Number of entries shown before following. |
--poll <ms> | 250 (minimum 50) | How often to poll, in milliseconds. |
latency
Produce a summary of turn-latency and listen-wait metrics drawn from calls.jsonl. The output is
JSON containing recordsScanned, turnLatency, and listenWait aggregates.
| Flag | Default | Description |
|---|---|---|
--file <path> | resolved from plugin store | Path to calls.jsonl. |
--last <n> | 200 (minimum 1) | Number of most recent entries to include. |
Exposing webhooks
expose
Turn on, turn off, or adjust the Tailscale serve/funnel setup for the voice webhook.
| Flag | Default | Description |
|---|---|---|
--mode <mode> | funnel | off, serve (tailnet), or funnel (public). |
--path <path> | config tailscale.path or --serve-path | Tailscale path to expose. |
--port <port> | config serve.port or 3334 | Local webhook port. |
--serve-path <path> | config serve.path or /voice/webhook | Local webhook path. |
openclaw voicecall expose --mode serve
openclaw voicecall expose --mode funnel
openclaw voicecall expose --mode off
Warning
Only expose the webhook endpoint to networks you trust. Prefer Tailscale Serve over Funnel when possible.