介绍
# Phone Voice Integration
利用 ElevenLabs Agents + Twilio,将你的 OpenClaw 变成可拨打电话的助手。
**功能概览:** - 📞 从任意电话拨打你的机器人 - 🔐 来电显示认证 + 语音 PIN 码安全防护 - 🛡️ 呼叫筛选(基于白名单) - 🧠 完整记忆上下文(加载 MEMORY.md、USER.md) - 💰 每次通话费用追踪 - 📞 带有摘要的通话记录 - ⏱️ 速率限制 - 🌐 永久隧道 或临时隧道
## 架构
``` Phone → Twilio → ElevenLabs Agent → Your Bridge → Anthropic Claude → OpenClaw Tools ↓ Memory Context (MEMORY.md, USER.md) ```
**流程:** 1. 来电者拨打你的 Twilio 号码 2. Twilio 路由至 ElevenLabs Agent 3. Agent 将聊天补全请求发送至你的桥接服务(模拟 OpenAI API) 4. 桥接服务将其转换为 Anthropic 请求,并注入来自记忆文件的上下文 5. Claude 回复 → ElevenLabs TTS → 来电者听到语音
## 前置要求
- OpenClaw 已安装并运行 - ElevenLabs 账户 + API 密钥 - Twilio 账户 + 电话号码 - Anthropic API 密钥 - Cloudflare tunnel **或** ngrok(用于暴露本地服务)
## 设置
### 1. 在 OpenClaw 中启用聊天补全
此技能不需要 —— 桥接服务会绕过 OpenClaw 并直接调用 Claude。这能让你更好地控制记忆注入和费用追踪。
### 2. 创建桥接服务器
桥接服务是一个 FastAPI 服务器,负责: - 接收来自 ElevenLabs 的兼容 OpenAI 的 `/v1/chat/completions` 请求 - 注入记忆上下文(MEMORY.md、USER.md、实时数据) - 调用 Anthropic Claude API - 以 OpenAI 格式流式传输回响应 - 记录费用和通话记录
**关键文件:** - `server.py` — FastAPI 应用,包含 /v1/chat/completions 端点 - `fred_prompt.py` — 系统提示词构建器(加载记忆文件) - `.env` — 密钥(API 密钥、令牌、白名单) - `contacts.json` — 用于筛选的来电白名单
### 3. 设置 Cloudflare Tunnel(推荐)
这是 ngrok 的永久、安全替代方案:
```bash # Install cloudflared brew install cloudflare/cloudflare/cloudflared
# Login and configure cloudflared tunnel login cloudflared tunnel create <tunnel-name>
# Run the tunnel cloudflared tunnel --url http://localhost:8013 run <tunnel-name> ```
在 Cloudflare DNS 中添加 CNAME 记录: ``` voice.yourdomain.com → <tunnel-id>.cfargotunnel.com ```
**或者使用 ngrok(临时):** ```bash ngrok http 8013 ```
### 4. 配置 ElevenLabs Agent
#### 选项 A:手动(UI) 1. 前往 ElevenLabs 仪表盘 → Conversational AI 2. 创建新 Agent 3. 在 LLM 设置下 → Custom LLM 4. 设置 URL:`https://voice.yourdomain.com/v1/chat/completions` 5. 添加请求头:`Authorization: Bearer <YOUR_BRIDGE_TOKEN>`
#### 选项 B:编程方式(API)
```bash # Step 1: Store your bridge auth token as a secret curl -X POST https://api.elevenlabs.io/v1/convai/secrets \ -H "xi-api-key: YOUR_ELEVENLABS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "type": "new", "name": "bridge_auth_token", "value": "YOUR_BRIDGE_AUTH_TOKEN" }'
# Response: {"secret_id": "abc123..."}
# Step 2: Create the agent curl -X POST https://api.elevenlabs.io/v1/convai/agents/create \ -H "xi-api-key: YOUR_ELEVENLABS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "conversation_config": { "agent": { "language": "en", "prompt": { "llm": "custom-llm", "prompt": "You are a helpful voice assistant.", "custom_llm": { "url": "https://voice.yourdomain.com/v1/chat/completions", "api_key": {"secret_id": "abc123..."} } } } } }' ```
### 5. 连接 Twilio 电话号码
在 ElevenLabs Agent 设置中: 1. 前往 **Phone** 部分 2. 输入 Twilio Account SID 和 Auth Token 3. 选择你的 Twilio 电话号码 4. 保存
完成!你的机器人现在可以接听该电话号码了。
## 安全功能
### 来电显示认证 自动识别白名单号码: ```json // contacts.json { "+12505551234": { "name": "Alice", "role": "family" } } ```
### 语音 PIN 码挑战 针对未知来电者或高安全性操作: ```python VOICE_PIN = "banana" # Set in .env ```
来电者必须说出 PIN 码才能继续。
### 呼叫筛选 未知号码将收到前台提示词: > “这里是 Fred 的助手。我可以为您留言或协助解答一般性问题。”
### 速率限制 可配置的每小时限制: ```python RATE_LIMIT_PER_HOUR = 10 ```
防止滥用和费用失控。
## 记忆注入
桥接服务会在每次通话前自动加载上下文:
**读取的文件:** - `MEMORY.md` — 关于用户、项目、偏好的长期事实 - `USER.md` — 用户资料(姓名、位置、时区) - 最近的通话记录(跨通话记忆)
**实时数据注入:** - 当前时间/日期 - 天气(可选,通过 API) - 日历事件(可选,通过 gog CLI)
所有内容都会在 Claude 处理对话之前注入到系统提示词中。
## 费用追踪
每次通话都会记录到 `memory/voice-calls/costs.jsonl`:
```json { "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. 让它检查你的日历、发送消息、设置提醒等。
**去电呼叫(可选):** ```bash curl -X POST https://voice.yourdomain.com/call/outbound \ -H "Authorization: Bearer <BRIDGE_TOKEN>" \ -d '{"to": "+12505551234", "message": "Reminder: dentist at 3pm"}' ```
## 配置选项
**环境变量(.env):** ```bash 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=<random-secure-token> VOICE_PIN=<your-secret-word> CLAWD_DIR=/path/to/clawd ```
**白名单:** ```json { "+12505551234": {"name": "Alice", "role": "family"}, "+12505555678": {"name": "Bob", "role": "friend"} } ```
## 高级功能:办公时间
限制通话仅在工作时间:
```python # In server.py OFFICE_HOURS = { "enabled": True, "timezone": "America/Vancouver", "weekdays": {"start": "09:00", "end": "17:00"}, "weekends": False } ```
非工作时间 → 语音留言提示。
## 调试
**直接测试桥接服务:** ```bash curl -X POST https://voice.yourdomain.com/v1/chat/completions \ -H "Authorization: Bearer <BRIDGE_TOKEN>" \ -H "Content-Type: application/json" \ -d '{ "model": "claude-sonnet-4", "messages": [{"role": "user", "content": "Hello!"}], "stream": false }' ```
**检查日志:** ```bash tail -f ~/clawd/memory/voice-calls/bridge.log ```
**验证 Twilio Webhook:** 1. 拨打你的号码 2. 检查 Twilio 控制台 → Call logs → Webhook status 3. 应该能看到来自 ElevenLabs 的 200 响应
## 费用估算
**每分钟细分:** - Twilio:~$0.01/分钟(呼入)+ 运营商费用 - ElevenLabs TTS:~$0.05/分钟(取决于音质) - Anthropic Claude:~$0.01/分钟(取决于 token 使用量) - **总计:~$0.07-0.10/分钟**(~$4-6/小时通话时间)
请使用速率限制和呼叫筛选来控制费用。
## 对比:本方案 vs 基础教程
**ElevenLabs 官方教程:** - ✅ 基础集成 - ❌ 无安全防护 - ❌ 无记忆持久化 - ❌ 无费用追踪 - ❌ 临时 ngrok URL
**本技能:** - ✅ 以上所有功能 - ✅ 来电显示 + PIN 码安全防护 - ✅ 跨通话记忆 - ✅ 费用追踪与分析 - ✅ 永久隧道 - ✅ 速率限制 - ✅ 呼叫筛选 - ✅ 通话记录日志
## 链接
- ElevenLabs Agents: https://elevenlabs.io/conversational-ai - Twilio: https://www.twilio.com/ - Cloudflare Tunnels: https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/ - 参考实现:(按需提供 — 私信 @FredMolty)
## 许可证
MIT — 可自由使用,欢迎署名。
---
**由 Fred (@FredMolty) 构建 — 自 2026 年起运行于 OpenClaw。**