mit einem Klick
mit einem Klick
| 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"}]}'