ClawSkills logoClawSkills

CallRail

CallRail API 集成,包含托管 OAuth。跟踪和分析电话通话,管理跟踪号码、公司和标签。 当用户想要访问

介绍

# CallRail

通过受管理的 OAuth 身份验证访问 CallRail API。跟踪通话、管理跟踪号码、分析通话数据以及使用标签进行整理。

## 快速开始

```bash # List all calls python <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://gateway.maton.ai/callrail/v3/a/{account_id}/calls.json') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF ```

## 基础 URL

``` https://gateway.maton.ai/callrail/{native-api-path} ```

将 `{native-api-path}` 替换为实际的 CallRail API 端点路径。网关将请求代理到 `api.callrail.com` 并自动注入您的 OAuth 令牌。

## 身份验证

所有请求都需要在 Authorization 标头中提供 Maton API 密钥:

``` Authorization: Bearer $MATON_API_KEY ```

**环境变量:** 将您的 API 密钥设置为 `MATON_API_KEY`:

```bash export MATON_API_KEY="YOUR_API_KEY" ```

### 获取 API 密钥

1. 登录或在 [maton.ai](https://maton.ai) 创建账户 2. 前往 [maton.ai/settings](https://maton.ai/settings) 3. 复制您的 API 密钥

## 连接管理

在 `https://ctrl.maton.ai` 管理您的 CallRail OAuth 连接。

### 列出连接

```bash python <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://ctrl.maton.ai/connections?app=callrail&status=ACTIVE') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF ```

### 创建连接

```bash python <<'EOF' import urllib.request, os, json data = json.dumps({'app': 'callrail'}).encode() req = urllib.request.Request('https://ctrl.maton.ai/connections', data=data, method='POST') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') req.add_header('Content-Type', 'application/json') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF ```

### 获取连接

```bash python <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://ctrl.maton.ai/connections/{connection_id}') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF ```

**响应:** ```json { "connection": { "connection_id": "75364cb9-7116-4367-a707-1113d426f17d", "status": "ACTIVE", "creation_time": "2026-02-10T09:55:17.574212Z", "last_updated_time": "2026-02-10T09:55:34.693801Z", "url": "https://connect.maton.ai/?session_token=...", "app": "callrail", "metadata": {} } } ```

在浏览器中打开返回的 `url` 以完成 OAuth 授权。

### 删除连接

```bash python <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://ctrl.maton.ai/connections/{connection_id}', method='DELETE') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF ```

### 指定连接

如果您有多个 CallRail 连接,请使用 `Maton-Connection` 标头指定要使用的连接:

```bash python <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://gateway.maton.ai/callrail/v3/a.json') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') req.add_header('Maton-Connection', '75364cb9-7116-4367-a707-1113d426f17d') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF ```

如果省略,网关将使用默认(最早)的活跃连接。

## API 参考

### URL 模式

所有 CallRail API 端点都遵循此模式:

``` /callrail/v3/a/{account_id}/{resource}.json ```

账户 ID 以 `ACC` 开头,公司 ID 以 `COM` 开头,通话 ID 以 `CAL` 开头,跟踪器 ID 以 `TRK` 开头,用户 ID 以 `USR` 开头。

---

## 账户

### 列出账户

```bash GET /callrail/v3/a.json ```

**响应:** ```json { "page": 1, "per_page": 100, "total_pages": 1, "total_records": 1, "accounts": [ { "id": "ACC019c46b8a0807fbdb81c8bf12af91cb3", "name": "My Account", "numeric_id": 518664017, "inbound_recording_enabled": false, "outbound_recording_enabled": false, "hipaa_account": false, "created_at": "2026-02-10 03:43:50 -0500" } ] } ```

### 获取账户

```bash GET /callrail/v3/a/{account_id}.json ```

---

## 公司

### 列出公司

```bash GET /callrail/v3/a/{account_id}/companies.json ```

**响应:** ```json { "page": 1, "per_page": 100, "total_pages": 1, "total_records": 1, "companies": [ { "id": "COM019c46b8a26376a9a4f29671dcdd49e9", "name": "My Company", "status": "active", "time_zone": "America/Los_Angeles", "created_at": "2026-02-10T08:43:51.280Z", "callscore_enabled": false, "lead_scoring_enabled": true, "callscribe_enabled": true } ] } ```

### 获取公司

```bash GET /callrail/v3/a/{account_id}/companies/{company_id}.json ```

---

## 通话

### 列出通话

```bash GET /callrail/v3/a/{account_id}/calls.json ```

**查询参数:**

| 参数 | 描述 | |-----------|-------------| | `page` | 页码(默认:1) | | `per_page` | 每页结果数(默认:100,最大:250) | | `date_range` | 预设:`recent`、`today`、`yesterday`、`last_7_days`、`last_30_days`、`this_month`、`last_month` | | `start_date` | ISO 8601 日期(例如 `2026-02-01T00:00:00-08:00`) | | `end_date` | ISO 8601 日期 | | `company_id` | 按公司筛选 | | `tracker_id` | 按跟踪器筛选 | | `search` | 搜索词 | | `fields` | 要返回的逗号分隔字段名称 | | `sort` | 排序依据的字段 | | `order` | 排序顺序:`asc` 或 `desc` |

**响应:** ```json { "page": 1, "per_page": 100, "total_pages": 1, "total_records": 1, "calls": [ { "id": "CAL019c46b9fc277a7881e3728fea20869b", "answered": false, "customer_name": "John Doe", "customer_phone_number": "+18886757190", "direction": "inbound", "duration": 36, "recording": "https://api.callrail.com/v3/a/.../recording", "recording_duration": 36, "start_time": "2026-02-10T00:45:19.781-08:00", "tracking_phone_number": "+18017846712", "voicemail": true } ] } ```

### 获取通话

```bash GET /callrail/v3/a/{account_id}/calls/{call_id}.json ```

### 更新通话

```bash PUT /callrail/v3/a/{account_id}/calls/{call_id}.json Content-Type: application/json

{ "customer_name": "John Smith", "note": "Follow up scheduled", "lead_status": "good_lead", "spam": false } ```

**可更新字段:**

| 字段 | 描述 | |-------|-------------| | `customer_name` | 客户姓名 | | `note` | 通话备注 | | `lead_status` | `good_lead`、`not_a_lead`、`previously_marked_good_lead` | | `spam` | 标记为垃圾信息(布尔值) | | `tag_list` | 要应用的标签名称数组 | | `value` | 通话价值(数值) | | `append_tags` | 添加标签而不删除现有标签 |

### 通话摘要

```bash GET /callrail/v3/a/{account_id}/calls/summary.json ```

获取日期范围内的聚合通话统计数据。

**查询参数:**

| 参数 | 描述 | |-----------|-------------| | `date_range` | 预设日期范围 | | `start_date` | 开始日期 (ISO 8601) | | `end_date` | 结束日期 (ISO 8601) | | `group_by` | 分组结果:`company`、`tracker`、`source`、`medium` 等 |

**响应:** ```json { "start_date": "2026-02-03T00:00:00-0800", "end_date": "2026-02-10T23:59:59-0800", "time_zone": "Pacific Time (US & Canada)", "total_results": { "total_calls": 42 } } ```

### 通话时间序列

```bash GET /callrail/v3/a/{account_id}/calls/timeseries.json ```

获取随时间变化的通话数据,用于图表和图形。

**响应:** ```json { "start_date": "2026-02-03T00:00:00-0800", "end_date": "2026-02-10T23:59:59-0800", "data": [ {"key": "2026-02-03", "date": "2026-02-03", "total_calls": 5}, {"key": "2026-02-04", "date": "2026-02-04", "total_calls": 8} ] } ```

---

## 跟踪器(跟踪号码)

### 列出跟踪器

```bash GET /callrail/v3/a/{account_id}/trackers.json ```

**响应:** ```json { "page": 1, "per_page": 100, "total_records": 1, "trackers": [ { "id": "TRK019c46b9f18174d68bb8d7985260a11f", "name": "Google My Business", "type": "source", "status": "active", "destination_number": "+18019234886", "tracking_numbers": ["+18017846712"], "sms_supported": true, "sms_enabled": true, "company": { "id": "COM019c46b8a26376a9a4f29671dcdd49e9", "name": "My Company" }, "source": {"type": "google_my_business"}, "call_flow": { "type": "basic", "recording_enabled": true, "destination_number": "+18019234886" } } ] } ```

### 获取跟踪器

```bash GET /callrail/v3/a/{account_id}/trackers/{tracker_id}.json ```

---

## 标签

### 列出标签

```bash GET /callrail/v3/a/{account_id}/tags.json ```

**响应:** ```json { "page": 1, "per_page": 100, "total_records": 6, "tags": [ { "id": 7886733, "name": "Schedule requested", "tag_level": "account", "color": "orange3", "background_color": "gray1", "company_id": null, "status": "enabled" }, { "id": 7886728, "name": "Opportunity", "tag_level": "company", "color": "gray1", "company_id": "COM019c46b8a26376a9a4f29671dcdd49e9", "status": "enabled" } ] } ```

### 创建标签

```bash POST /callrail/v3/a/{account_id}/tags.json Content-Type: application/json

{ "name": "New Tag", "tag_level": "account", "color": "blue1" } ```

**标签级别:** - `account` - 可用于账户中的所有公司 - `company` - 特定于某个公司(需要 `company_id`)

**颜色:** `gray1`、`blue1`、`blue2`、`green1`、`green2`、`orange1`、`orange2`、`orange3`、`red1` 等。

### 更新标签

```bash PUT /callrail/v3/a/{account_id}/tags/{tag_id}.json Content-Type: application/json

{ "name": "Updated Tag Name", "color": "green1" } ```

### 删除标签

```bash DELETE /callrail/v3/a/{account_id}/tags/{tag_id}.json ```

---

## 用户

### 列出用户

```bash GET /callrail/v3/a/{account_id}/users.json ```

**响应:** ```json { "page": 1, "per_page": 100, "total_records": 1, "users": [ { "id": "USR019c46b8a0557b2e85e5e1c651452509", "email": "[email protected]", "first_name": "John", "last_name": "Doe", "name": "John Doe", "role": "admin", "accepted": true, "created_at": "2026-02-10T03:43:50.798-05:00", "companies": [ {"id": "COM...", "name": "My Company"} ] } ] } ```

### 获取用户

```bash GET /callrail/v3/a/{account_id}/users/{user_id}.json ```

---

## 集成

### 列出集成

```bash GET /callrail/v3/a/{account_id}/integrations.json?company_id={company_id} ```

**注意:** 需要提供 `company_id`。

---

## 通知

### 列出通知

```bash GET /callrail/v3/a/{account_id}/notifications.json ```

---

## 分页

CallRail 使用基于偏移量的分页:

```bash GET /callrail/v3/a/{account_id}/calls.json?page=2&per_page=50 ```

**响应包含:** ```json { "page": 2, "per_page": 50, "total_pages": 10, "total_records": 487, "calls": [...] } ```

**参数:** - `page` - 页码(默认:1) - `per_page` - 每页结果数(默认:100,最大:250)

对于通话端点,您也可以使用相对分页:

```bash GET /callrail/v3/a/{account_id}/calls.json?relative_pagination=true ```

这将返回用于高效分页大型数据集的 `next_page` URL 和 `has_next_page` 布尔值。

## 代码示例

### JavaScript

```javascript const response = await fetch( 'https://gateway.maton.ai/callrail/v3/a/{account_id}/calls.json', { headers: { 'Authorization': `Bearer ${process.env.MATON_API_KEY}` } } ); const data = await response.json(); console.log(data.calls); ```

### Python

```python import os import requests

response = requests.get( 'https://gateway.maton.ai/callrail/v3/a/{account_id}/calls.json', headers={'Authorization': f'Bearer {os.environ["MATON_API_KEY"]}'}, params={'per_page': 50, 'date_range': 'last_30_days'} ) data = response.json() for call in data['calls']: print(f"{call['customer_name']}: {call['duration']}s") ```

## 速率限制

| 端点类型 | 每小时限制 | 每日限制 | |--------------|--------------|-------------| | 通用 API | 1,000 | 10,000 | | 发送短信 | 150 | 1,000 | | 呼出电话 | 100 | 2,000 |

超出限制将返回 HTTP 429。请实施指数退避进行重试。

## 注意事项

- 账户 ID 以 `ACC` 开头 - 公司 ID 以 `COM` 开头 - 通话 ID 以 `CAL` 开头 - 跟踪器 ID 以 `TRK` 开头 - 用户 ID 以 `USR` 开头 - 所有端点都以 `.json` 结尾 - 通话记录保留 25 个月 - 日期/时间值使用带时区的 ISO 8601 格式 - 重要提示:使用 curl 命令时,如果 URL 包含括号,请使用 `curl -g` 以禁用 glob 解析 - 重要提示:当将 curl 输出通过管道传输到 `jq` 或其他命令时,在某些 shell 环境中,像 `$MATON_API_KEY` 这样的环境变量可能无法正确展开

## 错误处理

| 状态 | 含义 | |--------|---------| | 400 | 错误的请求或缺少必需参数 | | 401 | 无效或缺少 Maton API 密钥 | | 403 | 禁止访问 - 权限不足 | | 404 | 资源未找到 | | 422 | 无法处理的实体 | | 429 | 速率受限 | | 500 | 内部服务器错误 | | 503 | 服务不可用 |

### 故障排除:API 密钥问题

1. 检查 `MATON_API_KEY` 环境变量是否已设置:

```bash echo $MATON_API_KEY ```

2. 通过列出连接来验证 API 密钥是否有效:

```bash python <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://ctrl.maton.ai/connections') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF ```

### 故障排除:无效的应用名称

1. 确保您的 URL 路径以 `callrail` 开头。例如:

- 正确:`https://gateway.maton.ai/callrail/v3/a.json` - 错误:`https://gateway.maton.ai/v3/a.json`

## 资源

- [CallRail API 文档](https://apidocs.callrail.com/) - [CallRail 帮助中心 - API](https://support.callrail.com/hc/en-us/sections/4426797289229-API) - [CallRail API 速率限制](https://apidocs.callrail.com/#rate-limiting) - [Maton 社区](https://discord.com/invite/dBfFAcefs2) - [Maton 支持](mailto:[email protected])

更多产品