Skip to content
Guides

OpenClaw voice calls

Twilio, Telnyx or Plivo, a number you own, and what the plugin actually does

5 min read

OpenClaw places and answers phone calls through a plugin, with three providers, Twilio, Telnyx and Plivo, and a mock one for development. It does outbound notifications, multi-turn conversations, full-duplex realtime voice, streaming transcription and inbound calls with allowlists. The question people type, the best number for OpenClaw, has a simple answer: a number from one of those three providers, on an account you own. Here is what the plugin needs and how it behaves.

Setup

  • Install the plugin from npm; it runs inside the Gateway process, so on a remote Gateway it is installed on that machine.
  • Configure a provider, its credentials, the from number and a publicly reachable webhook URL; with several agents, name the agent that owns calls.
  • For an inbound Twilio number, point its voice webhook and its status callback at the plugin’s URL.
  • Run the setup check, which verifies enablement, credentials, webhook exposure, agent ownership and that only one audio mode is active, then a smoke test, a dry run by default.

What it can do

Two audio modes, never both at once: streaming transcription, where the caller’s speech is transcribed as it arrives, and realtime voice, a full-duplex conversation with a realtime model, with examples for OpenAI, Google and xAI. Text-to-speech on calls uses the core speech configuration, deep-merged with a plugin override, and one provider is skipped for calls because it cannot produce telephony output. Inbound calls carry a policy and per-number routing, so one number can reach one agent and another number another.

The Voice Call plugin runs inside the Gateway process.

The parts that bite

  • The webhook must be reachable from the provider, which means a public URL for a Gateway that is otherwise loopback-only; the plugin has webhook signature and forwarding-header settings for exactly that exposure.
  • A stale call reaper and a stream disconnect grace exist because calls end badly more often than chats do.
  • Barge-in: when the caller resumes speaking, older automatic replies still being generated are discarded.

The number question

The best number is one you own on a provider account, not a shared one: the docs recommend a separate number for phone-based channels so personal conversations stay private and the bot number carries the automation. Which of the three providers depends on your country and your existing account; the plugin treats them the same. Channels on Diali lists what Diali supports per engine.

On Diali

Voice calls run on OpenClaw assistants with a number you own through your Twilio, Telnyx or Plivo account; the webhook exposure, the Gateway and the audio modes are configured for you, and the assistant identifies itself as AI to the people it calls. Hosted OpenClaw on Diali is the assistant; Security on Diali covers the boundary the calls run behind.

  • Three providers, one plugin, inside the Gateway.
  • One audio mode at a time; the setup check enforces it.
  • Your own number, separate from your personal line.
Get started

Stop reading about it, build one

Set up an agent, pick a channel, and have it working inside the app you already keep open.