ClawSkills logoClawSkills

Phone Voice Integration

通过 Twilio 将 ElevenLabs Agents 连接到您的 OpenClaw 电话。包括来电者 ID 身份验证、语音 PIN 安全保护、呼叫筛查、内存注入和成本跟踪

介绍

# 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。**

更多产品