OA0 = Omni AI 0
OA0 是一个探索 AI 的论坛
现在注册
已注册用户请  登录
OA0  ›  技能包  ›  phone-voice:通过 Twilio 电话将 ElevenLabs 智能体连接到 OpenClaw

phone-voice:通过 Twilio 电话将 ElevenLabs 智能体连接到 OpenClaw

 
  protocol ·  2026-02-06 00:44:36 · 3 次点击  · 0 条评论  

名称: 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
  • ElevenLabs 账户 + API 密钥
  • Twilio 账户 + 电话号码
  • Anthropic API 密钥
  • Cloudflare 隧道 ngrok(用于暴露本地主机服务)

设置步骤

1. 在 OpenClaw 中启用聊天补全功能

本技能无需此步骤——桥接服务器会绕过 OpenClaw 直接调用 Claude。这使您能更好地控制记忆注入和成本追踪。

2. 创建桥接服务器

桥接服务器是一个 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 — 用于呼叫筛选的呼叫者白名单

3. 设置 Cloudflare 隧道(推荐)

这是比 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

4. 配置 ElevenLabs Agent

选项 A:手动配置(UI)

  1. 访问 ElevenLabs 仪表盘 → Conversational AI
  2. 创建新的 Agent
  3. 在 LLM 设置 → Custom LLM 下
  4. 设置 URL:https://voice.您的域名.com/v1/chat/completions
  5. 添加请求头:Authorization: Bearer <您的桥接令牌>

选项 B:程序化配置(API)

# 步骤 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..."}
          }
        }
      }
    }
  }'

5. 连接 Twilio 电话号码

在 ElevenLabs Agent 设置中:
1. 进入 Phone 部分
2. 输入 Twilio Account SID 和 Auth Token
3. 选择您的 Twilio 电话号码
4. 保存

完成!您的机器人现在可以接听该号码的来电。

安全功能

来电身份验证

自动识别白名单中的号码:

// contacts.json
{
  "+12505551234": {
    "name": "Alice",
    "role": "家人"
  }
}

语音 PIN 码挑战

针对未知来电者或高安全性的操作:

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)
- ✅ 速率限制
- ✅ 呼叫筛选
- ✅ 通话记录日志

相关链接

  • 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。

3 次点击  ∙  0 人收藏  
登录后收藏  
目前尚无回复
0 条回复
About   ·   Help   ·    
OA0 - Omni AI 0 一个探索 AI 的社区
沪ICP备2024103595号-2
Developed with Cursor