openclaw voicecall
voicecall is a plugin-provided command. It only appears when the voice-call
plugin is installed and enabled.
When the Gateway is running, operational commands (call, start,
continue, speak, dtmf, end, status) route to that Gateway’s
voice-call runtime. If no Gateway is reachable, they fall back to a standalone
CLI runtime. status uses the persisted call store instead of starting that
runtime.
Fallback is limited to transport-level absence. If the Gateway responds with a
request or authentication error, or does not answer before the timeout, the
command exits nonzero and points to openclaw gateway status; it does not start
a second webhook server. If standalone fallback cannot bind the configured
serve.port, the error identifies the likely running Gateway instead of
printing a raw EADDRINUSE failure.
Subcommands
Setup and smoke
setup
Prints human-readable readiness checks by default. Pass --json for scripts.
smoke
Runs the same readiness checks. Places a real phone call only when both
--to and --yes are present.
For external providers (
plivo, telnyx, twilio), setup and smoke require a public webhook URL from publicUrl, a tunnel, or Tailscale exposure. A loopback or private serve fallback is rejected because carriers cannot reach it.Call lifecycle
call
Initiate an outbound voice call.
start
Alias for call with a different default flag shape.
continue
Speak a message and wait for a response.
speak
Speak a message without waiting for a response.
dtmf
Send DTMF digits to an active call.
end
Hang up an active call.
status
Inspect active calls.
Logs and metrics
tail
Tail the voice-call JSONL log. Prints the last --since lines on start, then
streams new lines as they are written.
latency
Summarize turn-latency and listen-wait metrics from calls.jsonl. Output is
JSON with recordsScanned, turnLatency, and listenWait summaries.
Exposing webhooks
expose
Enable, disable, or change the Tailscale serve/funnel configuration for the
voice webhook. When realtime or streaming audio is enabled, the command also
exposes or clears that mode’s WebSocket stream path. The external HTTPS port
comes from tailscale.port (default 443); Funnel supports 443, 8443, or
10000.