with one click
deepclaw-voice
Set up phone calling to OpenClaw using Deepgram Voice Agent API
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Menu
Set up phone calling to OpenClaw using Deepgram Voice Agent API
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Based on SOC occupation classification
| name | deepclaw-voice |
| description | Set up phone calling to OpenClaw using Deepgram Voice Agent API |
| requires | {"bins":["python3","ngrok","git"]} |
Use this skill when the user wants to call you on the phone, set up voice calling, or talk to OpenClaw via phone.
Phone calls to OpenClaw using:
git clone https://github.com/deepgram/deepclaw.git ~/deepclaw
cd ~/deepclaw
pip install -r requirements.txt
Ask: "What's your Deepgram API key?"
Ask: "What's your Twilio phone number, Account SID, and Auth Token?"
Run this to get the token from their OpenClaw config:
grep -A2 '"auth"' ~/.openclaw/openclaw.json | grep token
Or generate a new one:
openssl rand -hex 24
If generating new, tell them to add it to ~/.openclaw/openclaw.json under gateway.auth.token.
Create ~/deepclaw/.env with their values:
DEEPGRAM_API_KEY=<their_deepgram_key>
TWILIO_ACCOUNT_SID=<their_sid>
TWILIO_AUTH_TOKEN=<their_token>
OPENCLAW_GATEWAY_URL=http://127.0.0.1:18789
OPENCLAW_GATEWAY_TOKEN=<their_gateway_token>
Check their ~/.openclaw/openclaw.json has:
{
"gateway": {
"http": {
"endpoints": {
"chatCompletions": {
"enabled": true
}
}
}
}
}
If not, add it and restart the gateway: openclaw daemon restart
ngrok http 8000
Note the HTTPS URL (e.g., https://abc123.ngrok-free.app).
https://<ngrok-url>/twilio/incomingcd ~/deepclaw
python -m deepclaw.voice_agent_server
Tell them: "Call your Twilio number now!"
Watch the server logs for:
Edit ~/deepclaw/deepclaw/voice_agent_server.py, find get_agent_config(), change the model in speak:
"speak": {"provider": {"type": "deepgram", "model": "aura-2-orion-en"}},
English: thalia (F, default), orion (M), apollo (M), athena (F), luna (F), zeus (M), draco (M, British), pandora (F, British), hyperion (M, Australian)
Spanish: estrella (F, Mexican), javier (M, Mexican), alvaro (M, Spain), celeste (F, Colombian)
German: fabian (M), aurelia (F), lara (F)
French: hector (M), agathe (F)
Italian: cesare (M), livia (F)
Dutch: lars (M), daphne (F)
Japanese: ebisu (M), izanami (F)
Format: aura-2-<name>-<lang> (e.g., aura-2-estrella-es)
When something goes wrong, check the server logs first. Here's how to diagnose common issues:
Symptom: You call, phone hangs up, but no logs appear in the server terminal.
Cause: Twilio webhook URL doesn't match your ngrok URL.
Fix:
https://<your-ngrok-url>/twilio/incomingSymptom: Call connects, you hear the greeting, then Deepgram says "Check your think provider settings" and hangs up.
Cause: Deepgram can't reach the LLM proxy endpoint, or it's returning an error.
Fix:
curl -X POST https://<your-ngrok-url>/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{"model":"gpt-4","messages":[{"role":"user","content":"hi"}]}'
401 Unauthorized, the auth is blocking requests. This shouldn't happen with the latest code.curl http://127.0.0.1:18789/healthSymptom: First exchange works (greeting + one response), then call drops with "FAILED_TO_THINK" in logs.
Cause: SSE stream formatting issue—usually fixed in latest code.
Fix:
cd ~/deepclaw && git pullSymptom: TTS says "Whydo you want" instead of "Why do you want"
Cause: Markdown stripping was removing spaces between streaming chunks.
Fix:
cd ~/deepclaw && git pullSymptom: Server responds to curl, ngrok works, but calling from your phone gets immediate disconnect with no logs.
Cause: Your carrier may be blocking calls to the Twilio number, or you're dialing wrong.
Fix:
# Run this in Python with your .env loaded
import requests
requests.post(
f'https://api.twilio.com/2010-04-01/Accounts/{TWILIO_ACCOUNT_SID}/Calls.json',
auth=(TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN),
data={
'To': '+1YOURNUMBER',
'From': '+1TWILIONUMBER',
'Url': 'https://<your-ngrok-url>/twilio/incoming'
}
)
If this works, the issue is your carrier blocking outbound calls to Twilio.Symptom: Logs show errors from OpenClaw like "No API key found for provider"
Fix:
openclaw configure --section model to set it upopenclaw daemon restartSymptom: Every time you restart ngrok, you get a new URL and have to update Twilio.
Fix: Use a fixed ngrok domain (requires ngrok account):
ngrok http 8000 --domain=your-chosen-name.ngrok-free.app
curl http://localhost:8000/healthcurl https://<ngrok-url>/healthcurl http://127.0.0.1:18789/healthcurl -X POST https://<ngrok-url>/v1/chat/completions -H "Content-Type: application/json" -d '{"model":"gpt-4","messages":[{"role":"user","content":"test"}]}'