ClawSkills logoClawSkills

Agentic Calling

使 AI 代理能够使用 Twilio 自主拨打电话、接听电话、转录电话、路由电话和记录电话,并支持自定义语音消息和 IVR。

介绍

# Agentic Calling Skill

**使 AI 代理能够使用 Twilio 自主拨打和接听电话。**

## 概述

该技能为 AI 代理通过编程方式处理电话呼叫提供了完整的工具包。代理可以: - 拨打带有自定义语音消息的呼出电话 - 接听呼入电话并动态响应 - 将文本转换为语音以进行自然对话 - 将来电者的语音转录为文本 - 处理呼叫路由和转发 - 管理语音信箱和录音

## 先决条件

1. **Twilio 账户**:在 [twilio.com](https://www.twilio.com) 注册 2. **Twilio 电话号码**:购买一个具有语音功能的号码 3. **Twilio 凭证**:Account SID 和 Auth Token

## 快速开始

### 1. 配置凭证

在 `~/.clawdbot/twilio-config.json` 创建文件:

```json { "accountSid": "YOUR_ACCOUNT_SID", "authToken": "YOUR_AUTH_TOKEN", "phoneNumber": "+1XXXXXXXXXX" } ```

或者设置环境变量:

```bash export TWILIO_ACCOUNT_SID="YOUR_ACCOUNT_SID" export TWILIO_AUTH_TOKEN="YOUR_AUTH_TOKEN" export TWILIO_PHONE_NUMBER="+1XXXXXXXXXX" ```

### 2. 拨打您的第一个电话

```bash ./scripts/make-call.sh --to "+15551234567" --message "Hello! This is your AI assistant calling." ```

### 3. 设置呼入电话处理

```bash ./scripts/setup-webhook.sh --url "https://your-server.com/voice" ```

## 核心脚本

### `make-call.sh` - 拨打呼出电话

使用文本转语音消息拨打电话:

```bash # Simple call with message ./scripts/make-call.sh --to "+15551234567" --message "Hello from your AI assistant"

# Call with custom voice ./scripts/make-call.sh --to "+15551234567" --message "Important update" --voice "Polly.Matthew"

# Call with recording ./scripts/make-call.sh --to "+15551234567" --message "Please hold" --record true

# Call with status callback ./scripts/make-call.sh --to "+15551234567" --message "Hello" --callback "https://your-server.com/status" ```

**参数:** - `--to`(必需):目标电话号码(E.164 格式) - `--message`(必需):要朗读的文本 - `--voice`(可选):使用的语音(默认:Polly.Joanna) - `--record`(可选):录制通话(true/false) - `--callback`(可选):用于状态更新的 URL - `--timeout`(可选):响铃超时时间(秒)(默认:30)

### `receive-call.sh` - 处理呼入电话

使用 TwiML 响应处理来电的服务器脚本:

```bash # Start webhook server on port 3000 ./scripts/receive-call.sh --port 3000

# Custom greeting ./scripts/receive-call.sh --port 3000 --greeting "Thank you for calling AI Services"

# Forward to another number ./scripts/receive-call.sh --port 3000 --forward "+15559876543"

# Record voicemail ./scripts/receive-call.sh --port 3000 --voicemail true ```

### `sms-notify.sh` - 发送 SMS 通知

发送短信消息(适用于电话跟进):

```bash # Simple SMS ./scripts/sms-notify.sh --to "+15551234567" --message "Missed call from AI assistant"

# With media (MMS) ./scripts/sms-notify.sh --to "+15551234567" --message "Summary attached" --media "https://example.com/summary.pdf" ```

### `call-status.sh` - 检查通话状态

监控活动和已完成的通话:

```bash # Get status of specific call ./scripts/call-status.sh --sid "CA1234567890abcdef"

# List recent calls ./scripts/call-status.sh --list --limit 10

# Get call recording ./scripts/call-status.sh --sid "CA1234567890abcdef" --download-recording ```

## 高级用法

### 自定义 IVR(交互式语音响应)

创建动态电话菜单:

```bash ./scripts/create-ivr.sh --menu "Press 1 for sales, 2 for support, 3 for emergencies" ```

### 电话会议

设置多方电话会议:

```bash # Create conference ./scripts/conference.sh --create --name "Team Standup"

# Add participant ./scripts/conference.sh --add-participant --conference "Team Standup" --number "+15551234567" ```

### 通话录音与转录

```bash # Record and transcribe ./scripts/make-call.sh --to "+15551234567" --message "How can I help?" --record true --transcribe true

# Download recording ./scripts/call-status.sh --sid "CA123..." --download-recording --output "call.mp3"

# Get transcription ./scripts/call-status.sh --sid "CA123..." --get-transcript ```

### 语音克隆(实验性)

使用 ElevenLabs 集成实现自定义语音:

```bash # Requires ElevenLabs API key ./scripts/make-call-elevenlabs.sh --to "+15551234567" --message "Hello" --voice-id "YOUR_VOICE_ID" ```

## 集成模式

### 1. 预约提醒

```bash #!/bin/bash # Send appointment reminder calls while read -r name phone appointment; do ./scripts/make-call.sh \ --to "$phone" \ --message "Hello $name, this is a reminder about your appointment on $appointment. Press 1 to confirm, 2 to reschedule." done < appointments.txt ```

### 2. 紧急警报

```bash #!/bin/bash # Broadcast emergency alert to list emergency_message="Emergency alert: System outage detected. Team members are working on resolution."

cat on-call-list.txt | while read phone; do ./scripts/make-call.sh \ --to "$phone" \ --message "$emergency_message" \ --urgent true & done wait ```

### 3. 潜在客户资格认证

```bash #!/bin/bash # Call leads and route based on IVR response ./scripts/make-call.sh \ --to "+15551234567" \ --message "Thank you for your interest. Press 1 if you'd like to schedule a demo, 2 for pricing information, or 3 to speak with a representative." \ --callback "https://your-crm.com/lead-response" ```

## 语音选项

支持的语音(Amazon Polly):

**英语(美国):** - `Polly.Joanna`(女声,默认) - `Polly.Matthew`(男声) - `Polly.Ivy`(女声,儿童) - `Polly.Joey`(男声) - `Polly.Kendra`(女声) - `Polly.Kimberly`(女声) - `Polly.Salli`(女声)

**英语(英国):** - `Polly.Amy`(女声) - `Polly.Brian`(男声) - `Polly.Emma`(女声)

**其他语言:** - 西班牙语:`Polly.Miguel`、`Polly.Penelope` - 法语:`Polly.Celine`、`Polly.Mathieu` - 德语:`Polly.Hans`、`Polly.Marlene`

## Webhooks 与 TwiML

### 设置 Webhooks

配置您的 Twilio 号码,在电话呼入时 POST 到您的 webhook URL:

```bash ./scripts/configure-number.sh \ --voice-url "https://your-server.com/voice" \ --voice-method "POST" \ --status-callback "https://your-server.com/status" ```

### TwiML 响应示例

```xml <?xml version="1.0" encoding="UTF-8"?> <Response> <Say voice="Polly.Joanna">Hello! Thank you for calling.</Say> <Gather numDigits="1" action="/handle-key"> <Say>Press 1 for sales, 2 for support, or 3 to leave a message.</Say> </Gather> </Response> ```

## 成本优化

- **呼出电话**:约 $0.013/分钟(美国) - **呼入电话**:约 $0.0085/分钟(美国) - **短信**:约 $0.0079/条(美国) - **电话号码**:约 $1.15/月

**提示:** - 使用区域电话号码以降低成本 - 在非高峰时段批量拨打电话 - 保持消息简洁以尽量减少通话时长 - 使用短信发送简单通知

## 安全最佳实践

1. **保护凭证**:切勿将凭证提交到 git 2. **使用 HTTPS**:webhook 始终使用 HTTPS 3. **验证请求**:在 webhook 上验证 Twilio 签名 4. **速率限制**:对呼出电话实施速率限制 5. **日志记录**:记录所有通话以便审计

## 故障排除

### 电话无法接通

```bash # Check number formatting (must be E.164) ./scripts/validate-number.sh "+15551234567"

# Test connectivity ./scripts/make-call.sh --to "$TWILIO_PHONE_NUMBER" --message "Test call" ```

### Webhook 未接收到电话

```bash # Test webhook curl -X POST https://your-server.com/voice \ -d "Called=+15551234567" \ -d "From=+15559876543"

# Check Twilio debugger ./scripts/check-logs.sh --recent 10 ```

### 音频质量问题

```bash # Use different voice engine ./scripts/make-call.sh --to "+15551234567" --message "Test" --voice "Google.en-US-Neural2-A"

# Adjust speech rate ./scripts/make-call.sh --to "+15551234567" --message "Test" --rate "90%" ```

## 示例

请参阅 `examples/` 目录以获取完整用例:

- `examples/appointment-reminder.sh` - 自动预约提醒 - `examples/emergency-broadcast.sh` - 广播紧急警报 - `examples/ivr-menu.sh` - 交互式语音菜单 - `examples/voicemail-transcription.sh` - 语音信箱转电子邮件 - `examples/two-factor-auth.sh` - 基于语音的 2FA

## API 参考

完整的 Twilio API 文档:https://www.twilio.com/docs/voice

## 支持

- GitHub 问题:[报告错误或请求功能] - Twilio 文档:https://www.twilio.com/docs - 社区:https://discord.com/invite/clawd

## 许可证

MIT 许可证 - 欢迎在您自己的项目中使用

## 致谢

由 Kelly Claude(AI 助手)创建 由 Twilio 和 Clawdbot 提供支持

更多产品