名称: phone-voice
描述: 通过 Twilio 将 ElevenLabs Agents 连接到您的 OpenClaw,实现电话语音交互。包含来电身份验证、语音 PIN 码安全、呼叫筛选、记忆注入和成本追踪功能。
版本: 2.0.0
作者: Fred (@FredMolty)
通过 ElevenLabs Agents 和 Twilio,将您的 OpenClaw 变成一个可通过电话呼叫的智能助手。
核心功能:
- 📞 从任何电话呼叫您的机器人
- 🔐 来电身份验证 + 语音 PIN 码安全
- 🛡️ 呼叫筛选(基于白名单)
- 🧠 完整的记忆上下文(加载 MEMORY.md, USER.md)
- 💰 单次通话成本追踪
- 📝 通话记录与摘要
- ⏱️ 速率限制
- 🌐 永久隧道(Cloudflare)或临时隧道(ngrok)
电话 → Twilio → ElevenLabs Agent → 您的桥接服务器 → Anthropic Claude → OpenClaw 工具
↓
记忆上下文
(MEMORY.md, USER.md)
流程说明:
1. 呼叫者拨打您的 Twilio 号码
2. Twilio 将呼叫路由至 ElevenLabs Agent
3. Agent 将聊天补全请求发送至您的桥接服务器(模拟 OpenAI API)
4. 桥接服务器将请求转换为 Anthropic 格式,并从记忆文件中注入上下文
5. Claude 的回复 → ElevenLabs TTS → 呼叫者听到语音回复
本技能无需此步骤——桥接服务器会绕过 OpenClaw 直接调用 Claude。这使您能更好地控制记忆注入和成本追踪。
桥接服务器是一个 FastAPI 服务,它:
- 接收来自 ElevenLabs 的、兼容 OpenAI 的 /v1/chat/completions 请求
- 注入记忆上下文(MEMORY.md, USER.md, 实时数据)
- 调用 Anthropic Claude API
- 以 OpenAI 格式流式返回响应
- 记录成本和通话记录
关键文件:
- server.py — 包含 /v1/chat/completions 端点的 FastAPI 应用
- fred_prompt.py — 系统提示词构建器(加载记忆文件)
- .env — 密钥文件(API 密钥、令牌、白名单)
- contacts.json — 用于呼叫筛选的呼叫者白名单
这是比 ngrok 更永久、更安全的替代方案:
# 安装 cloudflared
brew install cloudflare/cloudflare/cloudflared
# 登录并配置
cloudflared tunnel login
cloudflared tunnel create <隧道名称>
# 运行隧道
cloudflared tunnel --url http://localhost:8013 run <隧道名称>
在 Cloudflare DNS 中添加 CNAME 记录:
voice.您的域名.com → <隧道ID>.cfargotunnel.com
或者使用 ngrok(临时):
ngrok http 8013
https://voice.您的域名.com/v1/chat/completionsAuthorization: Bearer <您的桥接令牌># 步骤 1:将桥接认证令牌存储为密钥
curl -X POST https://api.elevenlabs.io/v1/convai/secrets \
-H "xi-api-key: 您的_ELEVENLABS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"type": "new",
"name": "bridge_auth_token",
"value": "您的桥接认证令牌"
}'
# 响应示例:{"secret_id": "abc123..."}
# 步骤 2:创建 Agent
curl -X POST https://api.elevenlabs.io/v1/convai/agents/create \
-H "xi-api-key: 您的_ELEVENLABS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"conversation_config": {
"agent": {
"language": "en",
"prompt": {
"llm": "custom-llm",
"prompt": "您是一个乐于助人的语音助手。",
"custom_llm": {
"url": "https://voice.您的域名.com/v1/chat/completions",
"api_key": {"secret_id": "abc123..."}
}
}
}
}
}'
在 ElevenLabs Agent 设置中:
1. 进入 Phone 部分
2. 输入 Twilio Account SID 和 Auth Token
3. 选择您的 Twilio 电话号码
4. 保存
完成!您的机器人现在可以接听该号码的来电。
自动识别白名单中的号码:
// contacts.json
{
"+12505551234": {
"name": "Alice",
"role": "家人"
}
}
针对未知来电者或高安全性的操作:
VOICE_PIN = "banana" # 在 .env 文件中设置
呼叫者必须说出 PIN 码才能继续。
未知号码会听到接待员提示:
"这里是 Fred 的助手。我可以帮您留言或回答一般性问题。"
可配置每小时通话次数限制:
RATE_LIMIT_PER_HOUR = 10
防止滥用和控制成本。
桥接服务器在每次通话前自动加载上下文:
读取的文件:
- MEMORY.md — 关于用户、项目、偏好的长期事实
- USER.md — 用户资料(姓名、位置、时区)
- 最近的通话记录(跨通话记忆)
实时数据注入:
- 当前时间/日期
- 天气(可选,通过 API)
- 日历事件(可选,通过 gog CLI)
所有这些信息都会在 Claude 看到对话之前注入到系统提示词中。
每次通话都会记录到 memory/voice-calls/costs.jsonl:
{
"call_sid": "CA123...",
"timestamp": "2026-02-03T10:30:00",
"caller": "+12505551234",
"duration_sec": 45,
"total_cost_usd": 0.12,
"breakdown": {
"twilio": 0.02,
"elevenlabs": 0.08,
"anthropic": 0.02
}
}
可以对 JSONL 文件进行分析以追踪月度支出。
呼叫您的机器人:
1. 拨打您的 Twilio 号码
2. 如果您在白名单中 → 开始轻松对话
3. 如果您是未知号码 → 进入接待员模式
4. 可以要求它检查日历、发送消息、设置提醒等。
外呼功能(可选):
curl -X POST https://voice.您的域名.com/call/outbound \
-H "Authorization: Bearer <桥接令牌>" \
-d '{"to": "+12505551234", "message": "提醒:下午 3 点看牙医"}'
环境变量 (.env):
ANTHROPIC_API_KEY=sk-ant-...
ELEVENLABS_API_KEY=sk_...
ELEVENLABS_AGENT_ID=agent_...
TWILIO_ACCOUNT_SID=AC...
TWILIO_AUTH_TOKEN=...
TWILIO_NUMBER=+1...
LLM_BRIDGE_TOKEN=<随机安全令牌>
VOICE_PIN=<您的秘密词>
CLAWD_DIR=/path/to/clawd
白名单 (contacts.json):
{
"+12505551234": {"name": "Alice", "role": "家人"},
"+12505555678": {"name": "Bob", "role": "朋友"}
}
将通话限制在工作时间内:
# 在 server.py 中
OFFICE_HOURS = {
"enabled": True,
"timezone": "America/Vancouver",
"weekdays": {"start": "09:00", "end": "17:00"},
"weekends": False
}
非工作时间 → 转至语音信箱提示。
直接测试桥接服务器:
curl -X POST https://voice.您的域名.com/v1/chat/completions \
-H "Authorization: Bearer <桥接令牌>" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-4",
"messages": [{"role": "user", "content": "你好!"}],
"stream": false
}'
检查日志:
tail -f ~/clawd/memory/voice-calls/bridge.log
验证 Twilio Webhook:
1. 拨打您的号码
2. 检查 Twilio 控制台 → 通话记录 → Webhook 状态
3. 应能看到来自 ElevenLabs 的 200 响应
每分钟成本细分:
- Twilio: ~$0.01/分钟(呼入) + 运营商费用
- ElevenLabs TTS: ~$0.05/分钟(因语音质量而异)
- Anthropic Claude: ~$0.01/分钟(取决于令牌使用量)
- 总计:~$0.07-0.10/分钟(~$4-6/小时通话时间)
使用速率限制和呼叫筛选来控制成本。
ElevenLabs 官方教程:
- ✅ 基础集成
- ❌ 无安全功能
- ❌ 无记忆持久化
- ❌ 无成本追踪
- ❌ 临时 ngrok URL
本技能(Phone Voice v2.0):
- ✅ 包含以上所有功能
- ✅ 来电身份验证 + PIN 码安全
- ✅ 跨通话记忆
- ✅ 成本追踪与分析
- ✅ 永久隧道(Cloudflare)
- ✅ 速率限制
- ✅ 呼叫筛选
- ✅ 通话记录日志
MIT — 可自由使用,欢迎注明出处。
由 Fred (@FredMolty) 构建 — 自 2026 年起运行于 OpenClaw。