openclaw voicecall CLI Reference for Voice-Call Plugin

Reference for the openclaw voicecall command, covering subcommands and Gateway fallback behavior. Useful for developers using the voice-call plugin.

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

voicecall is a command supplied by a plugin. It shows up only when the voice-call plugin is installed and active.

While the Gateway is up, operational commands (call, start, continue, speak, dtmf, end, status) are directed to the voice-call runtime on that Gateway. When no Gateway is available, they switch to a standalone CLI runtime instead. status relies on the persisted call store and does not spin up that runtime.

The fallback only covers cases where transport is missing. If the Gateway returns a request or authentication error, or stays silent past the timeout, the command exits with a nonzero status and directs you to openclaw gateway status; it never launches a second webhook server. When the standalone fallback cannot bind the configured serve.port, the error points to the likely running Gateway rather than showing a raw EADDRINUSE failure.

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>]
SubcommandDescription
setupDisplay readiness checks for the provider and webhook.
smokeExecute readiness checks; make a live test call only with --yes.
callStart an outbound voice call.
startShortcut for call, where --to is mandatory and --message is optional.
continueSay a message, then wait for the next reply.
speakSay a message without waiting for a reply.
dtmfSend DTMF tones to a call that is currently active.
endEnd an active call.
statusLook at active calls, or a single one by --call-id.
tailFollow calls.jsonl (handy while testing providers).
latencyPull together turn-latency stats from calls.jsonl.
exposeSwitch Tailscale serve/funnel for the webhook endpoint on or off.

Setup and smoke

setup

By default, human-readable readiness checks are printed. For scripting, pass --json.

openclaw voicecall setup
openclaw voicecall setup --json

smoke

The same readiness checks are run here. A real phone call is placed only when both --to and --yes are supplied.

FlagDefaultDescription
-t, --to <phone>(none)Number to dial for a live smoke test.
--message <text>OpenClaw voice call smoke test.Text spoken during the smoke call.
--mode <mode>notifyCall mode: notify or conversation.
--yesfalseTruly place the live outbound call.
--jsonfalseEmit machine-readable JSON.
openclaw voicecall smoke
openclaw voicecall smoke --to "+15555550123"        # dry run
openclaw voicecall smoke --to "+15555550123" --yes  # live notify call

Note

With external providers (plivo, telnyx, twilio), setup and smoke demand a public webhook URL from publicUrl, a tunnel, or Tailscale exposure. A loopback or private serve fallback is refused, since carriers cannot reach it.

Call lifecycle

call

Place an outgoing voice call.

FlagRequiredDefaultDescription
-m, --message <text>yes(none)Text to say once the call picks up.
-t, --to <phone>noconfig toNumberDestination number in E.164 format.
--mode <mode>noconversationMode of the call: notify (end after the message) or conversation (keep the line open).
openclaw voicecall call --to "+15555550123" --message "Hello"
openclaw voicecall call -m "Heads up" --mode notify

start

A shortcut for call that uses a distinct default flag layout.

FlagRequiredDefaultDescription
--to <phone>yes(none)Number to dial.
--message <text>no(none)Text to say once the call picks up.
--mode <mode>noconversationMode of the call: notify or conversation.

continue

Deliver a message and then listen for input.

FlagRequiredDescription
--call-id <id>yesIdentifier of the call.
--message <text>yesText to speak.

speak

Deliver a message without listening for input.

FlagRequiredDescription
--call-id <id>yesIdentifier of the call.
--message <text>yesText to speak.

dtmf

Send DTMF tones to a live call.

FlagRequiredDescription
--call-id <id>yesIdentifier of the call.
--digits <digits>yesDTMF tones (such as ww123456# to insert pauses).

end

Terminate a live call.

FlagRequiredDescription
--call-id <id>yesIdentifier of the call.

status

View calls that are currently active.

FlagDefaultDescription
--call-id <id>(none)Limit results to a single call.
--jsonfalseEmit output as 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 the last --since lines are shown, then newly written lines appear as they arrive.

FlagDefaultDescription
--file <path>resolved from plugin storeLocation of calls.jsonl.
--since <n>25Number of lines shown before following.
--poll <ms>250 (minimum 50)Polling frequency in milliseconds.

latency

Compute turn-latency and listen-wait statistics from calls.jsonl. The result is JSON containing recordsScanned, turnLatency, and listenWait breakdowns.

FlagDefaultDescription
--file <path>resolved from plugin storeLocation of calls.jsonl.
--last <n>200 (minimum 1)How many recent entries to evaluate.

Exposing webhooks

expose

Turn on, turn off, or modify the Tailscale serve or funnel setup for the voice webhook. When realtime or streaming audio is active, the command also publishes or removes that mode's WebSocket stream path. The external HTTPS port is taken from tailscale.port (defaulting to 443); Funnel accepts 443, 8443, or 10000.

FlagDefaultDescription
--mode <mode>funneloff, serve (tailnet), or funnel (public).
--path <path>config tailscale.path or --serve-pathTailscale path to expose.
--port <port>config serve.port or 3334Local webhook port.
--serve-path <path>config serve.path or /voice/webhookLocal webhook path.
openclaw voicecall expose --mode serve
openclaw voicecall expose --mode funnel
openclaw voicecall expose --mode off

Warning

Restrict the webhook endpoint to trusted networks only. Whenever possible, choose Tailscale Serve over Funnel.

1,301 words · updated Aug 22, 2026