Voice Call
OpenClaw voice-call plugin. Enable voice conversations with your AI agent.
Tags: voice, audio, communication
Use Cases
- AI agent calls you when something important happens — deploy failures, urgent emails, security alerts
- Phone-based AI assistant you can call for hands-free help while driving or walking
- Automated outbound notification calls for appointment reminders, status updates, or check-ins
- Voice-based customer support prototype using OpenClaw as the conversational backend
- Accessibility interface for users who prefer voice interaction over text-based chat
- Emergency notification system that calls designated numbers when triggered by monitored events
Tips
- Start with the mock provider to test the call flow locally before connecting to Twilio/Telnyx/Plivo
- Use ElevenLabs for TTS with the voice-call config override for the most natural-sounding phone voice
- Set up Tailscale Funnel for the most reliable and free webhook exposure — no URL rotation like ngrok free tier
- Configure staleCallReaperSeconds (120-300) in production to clean up calls that never receive terminal webhooks
- Use notify mode for one-way announcements (deploy alerts, reminders) and conversation mode for interactive calls
- Override TTS just for calls while keeping a different voice for text channels using the plugin-level tts config
- Enable webhookSecurity.allowedHosts when using a proxy or tunnel in front of the Gateway
- Test inbound calls with a small allowFrom list before opening up broader access
Known Issues & Gotchas
- The plugin runs INSIDE the Gateway process — install and configure on the machine running the Gateway, then restart
- Twilio/Telnyx/Plivo all require a publicly reachable webhook URL — set up ngrok, Cloudflare Tunnel, or Tailscale Funnel first
- Ngrok free tier URLs change on restart — use publicUrl config to set the exact URL, and beware of signature verification failures
- For Telnyx, you must set telnyx.publicKey (or TELNYX_PUBLIC_KEY env var) unless skipSignatureVerification is true (dev only)
- Streaming security has connection limits (maxPendingConnections, maxConnections) that may need tuning for multi-call scenarios
- staleCallReaperSeconds should be higher than maxDurationSeconds — set it to maxDuration + 30-60 seconds
- tunnel.allowNgrokFreeTierLoopbackBypass is for local dev only — never enable in production
- If TTS provider is unavailable during an active Twilio media stream, the call will fail rather than falling back to <Say>
Alternatives
- ElevenLabs Agents
- Deepgram + Telnyx (deepclaw)
- Talk Mode (OpenClaw desktop)
Community Feedback
Believe it or not, users started reporting that their agents were calling them before there was even official support! The agents secretly figured out how to connect to Twilio and TTS providers.
— Medium
Now there's an official OpenClaw plugin for this. It works with Plivo, Twilio, and Telnyx. It's basic, but great for experimenting — kind of like a simple version of what LiveKit or Pipecat pipelines do.
— Medium
It actually worked pretty well for structured actions during a call. Curious if anyone else here has tried something similar.
— Reddit r/AIAgentsStack
OpenClaw is fantastic, but right now, it's mostly hacky and low-level — definitely aimed at tech people.
— Medium
Frequently Asked Questions
Which telephony provider should I choose — Twilio, Telnyx, or Plivo?
Twilio is the most widely used and documented, with the best OpenClaw integration (Media Streams for real-time audio). Telnyx offers competitive pricing and good call quality. Plivo is another solid option. Start with Twilio unless you have a specific reason to choose another.
Do I need a public URL for voice calls?
Yes. All three providers (Twilio, Telnyx, Plivo) deliver call events via webhooks to a publicly reachable HTTPS URL. Use ngrok, Cloudflare Tunnel, or Tailscale Funnel for local development. For production, use a stable domain.
How much does it cost to make voice calls?
Costs depend on your telephony provider. Twilio charges ~$0.013/min for outbound US calls. Telnyx is often cheaper. Plus you'll pay for TTS (ElevenLabs, OpenAI) and STT processing. A 5-minute call might cost $0.10-$0.50 depending on providers.
Can my OpenClaw agent call me proactively?
Yes! Use outbound notify mode for one-way announcements or conversation mode for interactive calls. Configure via the voice_call tool or openclaw voicecall CLI command. Pair with cron jobs to schedule regular check-in calls.
Can I receive inbound calls from my phone?
Yes. Set inboundPolicy to 'allowlist' and add your phone number to allowFrom. The plugin will answer with your configured greeting and route the conversation to your OpenClaw agent. Note that caller-ID filtering is low-assurance.
What TTS provider works best for phone calls?
ElevenLabs produces the most natural voice quality for telephony. OpenAI TTS is also good. Microsoft speech is NOT supported for voice calls (telephony needs PCM audio format). Configure TTS under the plugin's config.tts to override just for calls.
Is the voice quality good enough for real conversations?
For structured actions and notifications, it works well. For longer conversations, expect some latency in the STT→LLM→TTS pipeline. Dedicated voice AI platforms (LiveKit, Pipecat, ElevenLabs Agents) offer lower latency for real-time conversation.
Configuration Examples
Twilio Voice Call Setup
plugins:
entries:
voice-call:
enabled: true
config:
provider: twilio
fromNumber: '+15550001234'
toNumber: '+15550005678'
twilio:
accountSid: ${TWILIO_ACCOUNT_SID}
authToken: ${TWILIO_AUTH_TOKEN}
serve:
port: 3334
path: /voice/webhook
publicUrl: https://voice.example.com/voice/webhook
webhookSecurity:
allowedHosts:
- voice.example.com
streaming:
enabled: true
streamPath: /voice/streamTelnyx Provider Configuration
plugins:
entries:
voice-call:
enabled: true
config:
provider: telnyx
fromNumber: '+15550001234'
toNumber: '+15550005678'
telnyx:
apiKey: ${TELNYX_API_KEY}
connectionId: ${TELNYX_CONNECTION_ID}
publicKey: ${TELNYX_PUBLIC_KEY}
serve:
port: 3334
path: /voice/webhookVoice Call with ElevenLabs TTS Override
plugins:
entries:
voice-call:
enabled: true
config:
provider: twilio
fromNumber: '+15550001234'
twilio:
accountSid: ${TWILIO_ACCOUNT_SID}
authToken: ${TWILIO_AUTH_TOKEN}
tts:
provider: elevenlabs
elevenlabs:
apiKey: ${ELEVENLABS_API_KEY}
voiceId: pMsXgVXv3BLzUgSXRplE
modelId: eleven_multilingual_v2
outbound:
defaultMode: conversationInbound Call Handling
plugins:
entries:
voice-call:
enabled: true
config:
provider: twilio
fromNumber: '+15550001234'
twilio:
accountSid: ${TWILIO_ACCOUNT_SID}
authToken: ${TWILIO_AUTH_TOKEN}
inboundPolicy: allowlist
allowFrom:
- '+15550009999'
inboundGreeting: 'Hello! How can I help you today?'
responseTimeoutMs: 30000
maxDurationSeconds: 300
staleCallReaperSeconds: 360Installation
openclaw plugins install @openclaw/voice-call