网淘吧来吧,欢迎您!

返回首页 微信
微信
手机版
手机版

Quo

2026-03-29 新闻来源:网淘吧 围观:18
电脑广告
手机广告

Quo

通过托管的 OAuth 认证访问 Quo API。发送短信、管理通话和联系人,以及获取通话录音和文本记录。

快速开始

# List phone numbers
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/quo/v1/phone-numbers')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('User-Agent', 'Maton/1.0')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

基础 URL

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

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

认证

所有请求都需要在 Authorization 头部中包含 Maton API 密钥,以及一个 User-Agent 头部:

Authorization: Bearer $MATON_API_KEY
User-Agent: Maton/1.0

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

export MATON_API_KEY="YOUR_API_KEY"

获取您的 API 密钥

  1. 登录或前往maton.ai
  2. 创建账户前往
  3. maton.ai/settings

复制您的 API 密钥

在以下网址管理您的 Quo OAuth 连接https://ctrl.maton.ai.

列出连接

python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://ctrl.maton.ai/connections?app=quo&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

创建连接

python <<'EOF'
import urllib.request, os, json
data = json.dumps({'app': 'quo'}).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

获取连接

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

响应:

{
  "connection": {
    "connection_id": "21fd90f9-5935-43cd-b6c8-bde9d915ca80",
    "status": "ACTIVE",
    "creation_time": "2025-12-08T07:20:53.488460Z",
    "last_updated_time": "2026-01-31T20:03:32.593153Z",
    "url": "https://connect.maton.ai/?session_token=...",
    "app": "quo",
    "metadata": {}
  }
}

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

删除连接

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

指定连接

如果您有多个 Quo 连接,请使用Maton-Connection请求头来指定要使用哪一个:

python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/quo/v1/phone-numbers')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('User-Agent', 'Maton/1.0')
req.add_header('Maton-Connection', '21fd90f9-5935-43cd-b6c8-bde9d915ca80')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

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

API 参考

电话号码

列出电话号码

GET /quo/v1/phone-numbers

可选查询参数:

  • userId- 按用户 ID 筛选(模式为:^US(.*)$回复:

用户

{
  "data": [
    {
      "id": "PN123abc",
      "number": "+15555555555",
      "formattedNumber": "(555) 555-5555",
      "name": "Main Line",
      "users": [
        {
          "id": "US123abc",
          "email": "user@example.com",
          "firstName": "John",
          "lastName": "Doe",
          "role": "admin"
        }
      ],
      "createdAt": "2022-01-01T00:00:00Z",
      "updatedAt": "2022-01-01T00:00:00Z"
    }
  ]
}

用户列表

查询参数:

GET /quo/v1/users?maxResults=50

maxResults

  • (必需)- 每页结果数(1-50,默认:10)pageToken
  • - 分页令牌回复:

按ID获取用户

{
  "data": [
    {
      "id": "US123abc",
      "email": "user@example.com",
      "firstName": "John",
      "lastName": "Doe",
      "role": "owner",
      "createdAt": "2022-01-01T00:00:00Z",
      "updatedAt": "2022-01-01T00:00:00Z"
    }
  ],
  "totalItems": 10,
  "nextPageToken": null
}

消息

GET /quo/v1/users/{userId}

发送文本消息

请求体:

POST /quo/v1/messages
Content-Type: application/json

{
  "content": "Hello, world!",
  "from": "PN123abc",
  "to": ["+15555555555"]
}

content

  • (必需)- 消息文本(1-1600个字符)from
  • (必需)- 电话号码ID(PN*)或E.164格式to
  • (必需)- 包含单个收件人的数组,采用E.164格式userId
  • - 用户ID(默认为电话所有者)setInboxStatus
  • setInboxStatus- 设置为“已完成”以标记对话完成

响应(202):

{
  "id": "AC123abc",
  "to": ["+15555555555"],
  "from": "+15555555555",
  "text": "Hello, world!",
  "phoneNumberId": "PN123abc",
  "direction": "outgoing",
  "userId": "US123abc",
  "status": "queued",
  "createdAt": "2022-01-01T00:00:00Z",
  "updatedAt": "2022-01-01T00:00:00Z"
}

列出消息

GET /quo/v1/messages?phoneNumberId=PN123abc&participants[]=+15555555555&maxResults=100

查询参数:

  • 电话号码ID(必需)- 电话号码ID
  • 参与者(必需)- 采用E.164格式的参与者电话号码数组
  • 最大结果数(必需)- 每页结果数(1-100,默认:10)
  • 用户ID- 按用户ID筛选
  • 创建时间晚于- ISO 8601时间戳
  • 创建时间早于- ISO 8601时间戳
  • 页面令牌- 分页令牌

按ID获取消息

GET /quo/v1/messages/{messageId}

通话

列出通话

GET /quo/v1/calls?phoneNumberId=PN123abc&participants[]=+15555555555&maxResults=100

查询参数:

  • phoneNumberId(必填)- 电话号码ID
  • participants(必填)- 包含单个参与者电话号码的数组,采用E.164格式(最多1个)
  • maxResults(必填)- 每页结果数(1-100,默认:10)
  • userId- 按用户ID筛选
  • createdAfter- ISO 8601时间戳
  • createdBefore- ISO 8601时间戳
  • pageToken- 分页令牌

响应:

{
  "data": [
    {
      "id": "AC123abc",
      "phoneNumberId": "PN123abc",
      "userId": "US123abc",
      "direction": "incoming",
      "status": "completed",
      "duration": 120,
      "participants": ["+15555555555"],
      "answeredAt": "2022-01-01T00:00:00Z",
      "completedAt": "2022-01-01T00:02:00Z",
      "createdAt": "2022-01-01T00:00:00Z",
      "updatedAt": "2022-01-01T00:02:00Z"
    }
  ],
  "totalItems": 50,
  "nextPageToken": "..."
}

按ID获取通话

GET /quo/v1/calls/{callId}

获取通话录音

GET /quo/v1/call-recordings/{callId}

响应:

{
  "data": [
    {
      "id": "REC123abc",
      "duration": 120,
      "startTime": "2022-01-01T00:00:00Z",
      "status": "completed",
      "type": "voicemail",
      "url": "https://..."
    }
  ]
}

录音状态值:absent,completed,deleted,失败,进行中,已暂停,处理中,已停止,正在停止

获取通话摘要

GET /quo/v1/call-summaries/{callId}

获取通话记录

GET /quo/v1/call-transcripts/{callId}

获取通话语音邮件

GET /quo/v1/call-voicemails/{callId}

联系人

列出联系人

GET /quo/v1/contacts?maxResults=50

查询参数:

  • maxResults(必需)- 每页结果数(1-50,默认值:10)
  • externalIds- 外部标识符数组
  • sources- 来源指示符数组
  • pageToken- 分页令牌

响应:

{
  "data": [
    {
      "id": "CT123abc",
      "externalId": null,
      "source": null,
      "defaultFields": {
        "company": "Acme Corp",
        "firstName": "Jane",
        "lastName": "Doe",
        "role": "Manager",
        "emails": [{"name": "work", "value": "jane@example.com", "id": "EM1"}],
        "phoneNumbers": [{"name": "mobile", "value": "+15555555555", "id": "PH1"}]
      },
      "customFields": [],
      "createdAt": "2022-01-01T00:00:00Z",
      "updatedAt": "2022-01-01T00:00:00Z",
      "createdByUserId": "US123abc"
    }
  ],
  "totalItems": 100,
  "nextPageToken": "..."
}

按ID获取联系人

GET /quo/v1/contacts/{contactId}

创建联系人

POST /quo/v1/contacts
Content-Type: application/json

{
  "defaultFields": {
    "firstName": "Jane",
    "lastName": "Doe",
    "company": "Acme Corp",
    "phoneNumbers": [{"name": "mobile", "value": "+15555555555"}],
    "emails": [{"name": "work", "value": "jane@example.com"}]
  }
}

更新联系人

PATCH /quo/v1/contacts/{contactId}
Content-Type: application/json

{
  "defaultFields": {
    "company": "New Company"
  }
}

删除联系人

DELETE /quo/v1/contacts/{contactId}

获取联系人自定义字段

GET /quo/v1/contact-custom-fields

对话

列出对话

GET /quo/v1/conversations?maxResults=100

查询参数:

  • maxResults(必填)- 每页结果数(1-100,默认值:10)
  • phoneNumbers- 电话号码ID或E.164号码数组(1-100项)
  • userId- 按用户ID筛选
  • createdAfter- ISO 8601时间戳
  • createdBefore- ISO 8601时间戳
  • updatedAfter- ISO 8601时间戳
  • updatedBefore- ISO 8601时间戳
  • excludeInactive- 是否排除非活动对话的布尔值
  • 页面令牌- 分页令牌

响应:

{
  "data": [
    {
      "id": "CV123abc",
      "phoneNumberId": "PN123abc",
      "name": "Jane Doe",
      "participants": ["+15555555555"],
      "assignedTo": "US123abc",
      "lastActivityAt": "2022-01-01T00:00:00Z",
      "createdAt": "2022-01-01T00:00:00Z",
      "updatedAt": "2022-01-01T00:00:00Z"
    }
  ],
  "totalItems": 50,
  "nextPageToken": "..."
}

分页

Quo使用基于令牌的分页。包含maxResults以设置页面大小,并使用pageToken来检索后续页面。

GET /quo/v1/contacts?maxResults=50&pageToken=eyJsYXN0SWQiOi...

响应包含分页信息:

{
  "data": [...],
  "totalItems": 150,
  "nextPageToken": "eyJsYXN0SWQiOi..."
}

nextPageTokennull时,表示您已到达最后一页。

代码示例

JavaScript

const response = await fetch(
  'https://gateway.maton.ai/quo/v1/phone-numbers',
  {
    headers: {
      'Authorization': `Bearer ${process.env.MATON_API_KEY}`,
      'User-Agent': 'Maton/1.0'
    }
  }
);
const data = await response.json();

Python

import os
import requests

response = requests.get(
    'https://gateway.maton.ai/quo/v1/phone-numbers',
    headers={
        'Authorization': f'Bearer {os.environ["MATON_API_KEY"]}',
        'User-Agent': 'Maton/1.0'
    }
)
data = response.json()

发送短信示例

import os
import requests

response = requests.post(
    'https://gateway.maton.ai/quo/v1/messages',
    headers={
        'Authorization': f'Bearer {os.environ["MATON_API_KEY"]}',
        'User-Agent': 'Maton/1.0',
        'Content-Type': 'application/json'
    },
    json={
        'content': 'Hello from Quo!',
        'from': 'PN123abc',
        'to': ['+15555555555']
    }
)
data = response.json()

注意事项

  • 电话号码ID以PN
  • 开头用户ID以
  • US交流电
  • 电话号码必须采用 E.164 格式(例如,+15555555555
  • 短信定价:每段 0.01 美元(美国/加拿大);国际费率适用
  • 每条消息最多 1600 个字符
  • 列出通话功能要求恰好有1名参与者(仅限1对1对话)
  • 重要提示:所有 API 请求都需要一个User-Agent请求头(例如,User-Agent: Maton/1.0)。没有此请求头的请求将被阻止。
  • 重要提示:使用 curl 命令时,如果 URL 包含方括号(participants[]),请使用curl -g以禁用通配符解析
  • 重要提示:当将 curl 输出通过管道传递给jq或其他命令时,像$MATON_API_KEY在某些shell环境下可能无法正确展开

错误处理

状态码含义
400错误请求(例如:参与者过多、格式无效)
401Maton API密钥无效或缺失
402短信余额不足
403无权访问此电话号码
404未找到资源
429请求频率受限
500服务器错误

故障排除:API密钥问题

  1. 请检查MATON_API_KEY环境变量是否已设置:
echo $MATON_API_KEY
  1. 通过列出连接验证API密钥是否有效:
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路径以quo开头。例如:
  • 正确示例:https://gateway.maton.ai/quo/v1/phone-numbers
  • 错误示例:https://gateway.maton.ai/openphone/v1/phone-numbers

资源

免责申明
部分文章来自各大搜索引擎,如有侵权,请与我联系删除。
打赏
文章底部电脑广告
手机广告位-内容正文底部
上一篇:ClickUp MCP 下一篇:Aubrai Longevity Research

相关文章

您是本站第302334名访客 今日有112篇新文章/评论