UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

177 lines (142 loc) • 10.6 kB
--- summary: "Place outbound and accept inbound voice calls via Twilio, Telnyx, or Plivo, with optional realtime voice and streaming transcription" read_when: - You want to place an outbound voice call from OpenClaw - You are configuring or developing the voice-call plugin - You need realtime voice or streaming transcription on telephony title: "Voice call plugin" sidebarTitle: "Voice call" --- Voice calls for OpenClaw 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). <Note> 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. </Note> ## Quick start <Steps> <Step title="Install the plugin"> <Tabs> <Tab title="From npm"> ```bash openclaw plugins install @openclaw/voice-call ``` </Tab> <Tab title="From a local folder (dev)"> ```bash PLUGIN_SRC=./path/to/local/voice-call-plugin openclaw plugins install "$PLUGIN_SRC" cd "$PLUGIN_SRC" && pnpm install ``` </Tab> </Tabs> 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). </Step> <Step title="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. </Step> <Step title="Verify setup"> ```bash openclaw voicecall setup openclaw voicecall setup --json ``` Checks plugin enablement, provider credentials, webhook exposure, agent ownership, and that only one audio mode (`streaming` or `realtime`) is active. </Step> <Step title="Smoke test"> ```bash openclaw voicecall smoke openclaw voicecall smoke --to "+15555550123" ``` Both are dry runs by default. Add `--yes` to place a short outbound notify call: ```bash openclaw voicecall smoke --to "+15555550123" --yes ``` </Step> </Steps> <Warning> 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. </Warning> ## 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](/plugins/voice-call/configuration) — plugin config keys, the call owner, the full config reference table, and session scope. - <a id="configuration"></a>[Configuration](/plugins/voice-call/configuration#configuration) - <a id="choose-the-call-owner"></a>[Choose the call owner](/plugins/voice-call/configuration#choose-the-call-owner) - <a id="config-reference"></a>[Config reference](/plugins/voice-call/configuration#config-reference) - <a id="provider-exposure-and-security-notes"></a>[Provider exposure and security notes](/plugins/voice-call/configuration#provider-exposure-and-security-notes) - <a id="streaming-connection-caps"></a>[Streaming connection caps](/plugins/voice-call/configuration#streaming-connection-caps) - <a id="legacy-config-migrations"></a>[Legacy config migrations](/plugins/voice-call/configuration#legacy-config-migrations) - <a id="session-scope"></a>[Session scope](/plugins/voice-call/configuration#session-scope) ### Voice call realtime and streaming [Voice call realtime and streaming](/plugins/voice-call/realtime-and-streaming) — full-duplex realtime voice, hangup detection, tool and consult policy, agent voice context, and Twilio Media Streams transcription. - <a id="realtime-voice-conversations"></a>[Realtime voice conversations](/plugins/voice-call/realtime-and-streaming#realtime-voice-conversations) - <a id="hangup-detection"></a>[Hangup detection](/plugins/voice-call/realtime-and-streaming#hangup-detection) - <a id="tool-policy"></a>[Tool policy](/plugins/voice-call/realtime-and-streaming#tool-policy) - <a id="agent-voice-context"></a>[Agent voice context](/plugins/voice-call/realtime-and-streaming#agent-voice-context) - <a id="realtime-provider-examples"></a>[Realtime provider examples](/plugins/voice-call/realtime-and-streaming#realtime-provider-examples) - <a id="google-gemini-live"></a>[Google Gemini Live](/plugins/voice-call/realtime-and-streaming#google-gemini-live) - <a id="openai"></a>[OpenAI realtime example](/plugins/voice-call/realtime-and-streaming#openai) - <a id="streaming-transcription"></a>[Streaming transcription](/plugins/voice-call/realtime-and-streaming#streaming-transcription) - <a id="streaming-provider-examples"></a>[Streaming provider examples](/plugins/voice-call/realtime-and-streaming#streaming-provider-examples) - <a id="openai-2"></a>[OpenAI streaming example](/plugins/voice-call/realtime-and-streaming#openai-2) - <a id="xai"></a>[xAI](/plugins/voice-call/realtime-and-streaming#xai) ### Voice call TTS and inbound calls [Voice call TTS and inbound calls](/plugins/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. - <a id="tts-for-calls"></a>[TTS for calls](/plugins/voice-call/tts-and-inbound-calls#tts-for-calls) - <a id="tts-examples"></a>[TTS examples](/plugins/voice-call/tts-and-inbound-calls#tts-examples) - <a id="core-tts-only"></a>[Core TTS only](/plugins/voice-call/tts-and-inbound-calls#core-tts-only) - <a id="override-to-elevenlabs-calls-only"></a>[Override to ElevenLabs (calls only)](/plugins/voice-call/tts-and-inbound-calls#override-to-elevenlabs-calls-only) - <a id="openai-model-override-deep-merge"></a>[OpenAI model override (deep-merge)](/plugins/voice-call/tts-and-inbound-calls#openai-model-override-deep-merge) - <a id="inbound-calls"></a>[Inbound calls](/plugins/voice-call/tts-and-inbound-calls#inbound-calls) - <a id="per-number-routing"></a>[Per-number routing](/plugins/voice-call/tts-and-inbound-calls#per-number-routing) - <a id="spoken-output-contract"></a>[Spoken output contract](/plugins/voice-call/tts-and-inbound-calls#spoken-output-contract) - <a id="conversation-startup-behavior"></a>[Conversation startup behavior](/plugins/voice-call/tts-and-inbound-calls#conversation-startup-behavior) - <a id="twilio-stream-disconnect-grace"></a>[Twilio stream disconnect grace](/plugins/voice-call/tts-and-inbound-calls#twilio-stream-disconnect-grace) - <a id="stale-call-reaper"></a>[Stale call reaper](/plugins/voice-call/tts-and-inbound-calls#stale-call-reaper) ### Voice call security and interfaces [Voice call security and interfaces](/plugins/voice-call/security-and-interfaces) — webhook signature and forwarding-header security, plus the CLI, agent tool, and Gateway RPC surfaces. - <a id="webhook-security"></a>[Webhook security](/plugins/voice-call/security-and-interfaces#webhook-security) - <a id="param-webhook-security-allowed-hosts"></a>[webhookSecurity.allowedHosts](/plugins/voice-call/security-and-interfaces#param-webhook-security-allowed-hosts) - <a id="param-webhook-security-trust-forwarding-headers"></a>[webhookSecurity.trustForwardingHeaders](/plugins/voice-call/security-and-interfaces#param-webhook-security-trust-forwarding-headers) - <a id="param-webhook-security-trusted-proxy-ips"></a>[webhookSecurity.trustedProxyIPs](/plugins/voice-call/security-and-interfaces#param-webhook-security-trusted-proxy-ips) - <a id="cli"></a>[CLI](/plugins/voice-call/security-and-interfaces#cli) - <a id="agent-tool"></a>[Agent tool](/plugins/voice-call/security-and-interfaces#agent-tool) - <a id="gateway-rpc"></a>[Gateway RPC](/plugins/voice-call/security-and-interfaces#gateway-rpc) ### Voice call troubleshooting [Voice call troubleshooting](/plugins/voice-call/troubleshooting) — fixes for setup, webhook exposure, credentials, signature verification, Google Meet dial-in, and silent realtime calls. - <a id="troubleshooting"></a>[Troubleshooting](/plugins/voice-call/troubleshooting#troubleshooting) - <a id="call-placement-fails-to-save-its-initial-record"></a>[Call placement fails to save its initial record](/plugins/voice-call/troubleshooting#call-placement-fails-to-save-its-initial-record) - <a id="setup-fails-webhook-exposure"></a>[Setup fails webhook exposure](/plugins/voice-call/troubleshooting#setup-fails-webhook-exposure) - <a id="provider-credentials-fail"></a>[Provider credentials fail](/plugins/voice-call/troubleshooting#provider-credentials-fail) - <a id="calls-start-but-provider-webhooks-do-not-arrive"></a>[Calls start but provider webhooks do not arrive](/plugins/voice-call/troubleshooting#calls-start-but-provider-webhooks-do-not-arrive) - <a id="signature-verification-fails"></a>[Signature verification fails](/plugins/voice-call/troubleshooting#signature-verification-fails) - <a id="google-meet-twilio-joins-fail"></a>[Google Meet Twilio joins fail](/plugins/voice-call/troubleshooting#google-meet-twilio-joins-fail) - <a id="realtime-call-has-no-speech"></a>[Realtime call has no speech](/plugins/voice-call/troubleshooting#realtime-call-has-no-speech) ## Related - [Talk mode](/nodes/talk) - [Text-to-speech](/tools/tts) - [Voice wake](/nodes/voicewake) - [Google Meet plugin](/plugins/google-meet) - Meet calls, including Twilio sessions delegated through Voice Call - [`openclaw voicecall`](/cli/voicecall) - the plugin-provided CLI command, which appears only when this plugin is installed