1. 使用说明
欢迎使用“AICC” API 服务。您可以直接通过标准化的 HTTPS 接口,快速实现平台与自有系统的集成,管理平台的数据配置、呼叫控制、通话记录等各种资源。我们同时还提供了 开发者工具套件(SDK),对 API接口调用进行了封装。推荐您优先使用 SDK ,可以更方便地进行系统集成。
2. 接口规范
2.1. 调用方式
2.1.1. 系统接入
通信协议
出于安全考虑,平台只提供 HTTPS 协议访问,只支持服务端调用,不支持浏览器访问。
字符编码
请求及返回结果都使用 UTF-8 字符集编码。
接入地址
-
公有云平台:
-
北京平台:https://api-bj.clink.cn
-
上海平台:https://api-sh.clink.cn
-
-
其它平台: 请咨询技术支持
2.1.2. 公共参数
公共请求参数
每个 API 接口都需要以 URL Parameter 的形式携带公共请求参数,对请求进行鉴权。
| 名称 | 类型 | 是否必须 | 说明 |
|---|---|---|---|
AccessKeyId |
String |
是 |
客服云平台颁发给客户端的访问密钥 ID。 |
Expires |
String |
是 |
签名的有效时间(秒),最小值为 1,最大值为 86400(24 小时)。 |
Timestamp |
String |
是 |
签名的时间戳,格式遵循 ISO 8601 标准,按照格式 “ yyyy-MM-ddTHH:mm:ssZ ” 进行格式化。示例:2018-01-01T12:00:00Z表示北京时间2018年01月01日20点00分00秒 |
Signature |
String |
是 |
根据请求参数和访问密钥计算的签名。 |
请求示例
https://api-bj.clink.cn/xxxxxx?
&AccessKeyId=b1fcdc6c62be261cf97b00b25be6a2af
&Expires=60
&Timestamp=2018-09-11T12:02:34Z
&Signature=A4GDuUoWiFj59wQ0Bfq%2FJnB%2BSRU%3D
...
公共返回参数
| 名称 | 类型 | 说明 |
|---|---|---|
requestId |
String |
请求 ID。无论请求 API 服务是否成功,客服云平台都会返回每个请求的唯一 ID 到客户端。 |
2.1.3. 签名机制
签名(Signature)的计算需要使用访问密钥对:AccessKeyId/AccessKeySecret。访问密钥对可以通过登录系统管理后台,在【系统管理-系统对接-接口密钥】模块自助生成。每个访问密钥对可以设置不同的接口访问控制权限。
签名算法
签名(Signature)用于对 API 请求进行身份认证和鉴权,每个请求必须具有唯一的签名。 签名的具体实现是以 AccessKeySecret 为密钥,使用 hmac-sha1 算法对用户请求参数(QueryString)、访问密钥ID(AccessKeyId)、签名有效时间(Expires)、签名当前时间戳(Timestamp)做哈希计算。 具体步骤如下:
1. GET示例:
https://api-bj.clink.cn/cc/list_clients?
AccessKeyId=b1fcdc6c62be261cf97b00b25be6a2af
&Expires=60
&Timestamp=2018-10-12T10:18:12Z
&limit=10
&offset=0
&qno=0000
&cnos[0]=0000
&cnos[1]=0001
拼接要加密的字符串规则:请求方法(GET)+ 请求域名(api-bj.clink.cn)+ 请求参数。其中,访问密钥ID(AccessKeyId)、签名有效时间(Expires)、签名时间戳(Timestamp)分别与上面的公共请求参数相对应,请求参数具体拼接规则为:
-
首先对用户请求参数的 name 进行字典排序
AccessKeyId,Expires,Timestamp,cnos[0],cnos[1],limit,offset,qno
-
通过&符号连接用户请求参数的 name 和 value
AccessKeyId=b1fcdc6c62be261cf97b00b25be6a2af&Expires=60&Timestamp=2018-10-12T10:18:12Z&&cnos[0]=0000&cnos[1]=0001&limit=10&offset=0&qno=0000
-
Timestamp为UTC时间格式,所有请求参数都要进行UrlEncode
2018-10-12T10:18:12Z => 2018-10-12T10%3A18%3A12Z
cnos[0] => cnos%5B0%5D
cnos[1] => cnos%5B1%5D
-
参数urlParam结果
GETapi-bj.clink.cn/cc/list_clients?AccessKeyId=b1fcdc6c62be261cf97b00b25be6a2af&Expires=60&Timestamp=2018-10-12T10%3A18%3A12Z&cnos%5B0%5D=0000&cnos%5B1%5D=0001&limit=10&offset=0&qno=0000
-
计算Signature
Signature = URLEncode(base64(hmac-sha1(AccessKeySecret, urlParam)))
-
最终请求地址
https://api-bj.clink.cn/cc/list_clients?
AccessKeyId=b1fcdc6c62be261cf97b00b25be6a2af
&Expires=60
&Timestamp=2018-10-12T10%3A18%3A12Z
&limit=10
&offset=0
&qno=0000
&cnos%5B0%5D
&cnos%5B1%5D
&Signature=pDS5pcYkw3SqQV0zk312iCaQJpg%3D
2. POST示例:
https://api-bj.clink.cn/cc/online?
AccessKeyId=b1fcdc6c62be261cf97b00b25be6a2af
&Expires=60
&Timestamp=2018-10-12T10:18:12Z
请求体
{
"qno":"0000",
"cnos":["0000","0001"],
"bindTel":"13888888888",
"bindType":1,
"status":1
}
拼接要加密的字符串规则:请求方法(POST)+ 请求域名(api-bj.clink.cn)+ 请求参数(由于POST方法URL中只有公共参数,其他参数通过请求体传递,所以计算签名时只需考虑公共参数)。其中,访问密钥ID(AccessKeyId)、签名有效时间(Expires)、签名时间戳(Timestamp)分别与上面的公共请求参数相对应,请求参数具体拼接规则为:
-
首先对用户请求参数的 name 进行字典排序
AccessKeyId,Expires,Timestamp
-
通过&符号连接用户请求参数的 name 和 value
AccessKeyId=b1fcdc6c62be261cf97b00b25be6a2af&Expires=60&Timestamp=2018-10-12T10:18:12Z
-
Timestamp为UTC时间格式,所有请求参数都要进行URL转码
2018-10-12T10:18:12Z => 2018-10-12T10%3A18%3A12Z
-
参数urlParam结果
POSTapi-bj.clink.cn/cc/online?AccessKeyId=b1fcdc6c62be261cf97b00b25be6a2af&Expires=60&Timestamp=2018-10-12T10%3A18%3A12Z
-
计算Signature
Signature = URLEncode(base64(hmac-sha1(AccessKeySecret, urlParam)))
-
最终请求地址
https://api-bj.clink.cn/cc/online?
AccessKeyId=b1fcdc6c62be261cf97b00b25be6a2af
&Expires=60
&Timestamp=2018-10-12T10%3A18%3A12Z
&Signature=pDS5pcYkw3SqQV0zk312iCaQJpg%3D
|
2.2. 返回结果
API 的返回结果统一为 JSON 格式,使用 UTF-8 字符集编码。为了方便阅读,文中的示例有换行和缩进处理,实际返回结果无换行和缩进处理。
正常返回示例
接口调用成功后,会返回接口调用结果和请求 ID(requestId),HTTP 状态码为 2xx。
示例
{
"requestId": "c4bc3588-29bd-44be-91d4-d846c8eea64f"
}
分页示例:
{
"requestId": "77efcfd8-db8c-4f5c-bdb8-d804cfce7423",
"pageNumber": 1,
"pageSize": 10,
"totalCount": 2,
"objects": [
{
"field1":"value1",
"field2":"value2"
},
{
"field3":"value3",
"field4":"value4"
}
]
}
异常返回示例
接口调用失败或出错后,会返回错误码、错误信息和请求 ID,HTTP 状态码为 4xx 或 5xx。
您可以根据接口错误码和错误信息排查错误。当您无法排查错误时,可以联系我们的技术支持,并提供 requestId。
示例
{
"requestId": "778a71c5-7f62-4bbf-b5c2-383a71227b67",
"error": {
"code": "ResourceNotFound",
"message": "指定的资源不存在"
}
}
2.3. IP白名单
您可以在【系统管理-系统对接-IP白名单】模块中设置对接系统的 IP 白名单,进一步提高数据安全性。如果设置了 IP 白名单,系统只会对指定的 IP 提供 API 服务。系统支持两种 IP 格式:
-
指定 IP 地址,如:10.10.1.1 。
-
指定 IP 地址段,如:10.10.1.* - 10.10.2.* 。
2.4. 错误码说明
错误码分为两种类型:
-
客户端错误:该类型错误由客户端引起,例如无效的请求参数、用户没有权限访问资源等。
-
服务器错误:该类型错误在服务端产生,由系统异常引起,没有固定的类型。
示例
{
"requestId": "842ab2a6-3732-4c03-8ab7-c7f83180fb0c",
"error": {
"code": "ResourceNotFound",
"message": "指定的资源不存在"
}
}
2.4.1. 客户端错误
本节列出了所有操作都可能返回的常见客户端错误。
| code | HTTP Status | message |
|---|---|---|
AuthFailure |
401 |
身份验证失败。 |
InvalidParameter |
400 |
请求中指定的参数无效,不受支持或无法使用。 返回的消息提供了错误值的说明。 |
MissingParameter |
400 |
请求缺少必需参数。 |
ResourceNotFound |
404 |
请求资源不存在。 |
MissingRequestBody |
400 |
缺少请求body。 |
MissingAuthenticationToken |
400 |
请求必须包含有效的访问密钥ID。 |
HttpMediaTypeNotSupported |
400 |
HttpMediaType不支持,只支持application/json |
HttpRequestMethodNotSupported |
405 |
HTTP方法不支持。 |
UnauthorizedOperation |
403 |
您无权执行此操作。请确认您的密钥ID有此权限 |
UnknownParameter |
400 |
提供了未知或未识别的参数。 |
SignaturesExpired |
403 |
签名过期 |
TooManyRequests |
429 |
请求超限 |
2.4.2. 服务器错误
| code | HTTP Status | message |
|---|---|---|
InternalError |
500 |
发生内部错误。 重试您的请求,但如果问题仍然存在,请联系技术支持。 |
3. 话术
3.1. 查询话术列表
POST /gateway/robot_list
请求参数
| 名称 | 类型 | 是否必需 | 描述 |
|---|---|---|---|
robotStatus |
Integer |
true |
话术状态 0:所有话术,1:已上线话术,2:查询发布过(含已上线和上线后重新修改)的话术 |
返回参数
| 名称 | 类型 | 描述 |
|---|---|---|
result |
JSONObject |
返回结果 |
JSONObject
| 名称 | 类型 | 描述 |
|---|---|---|
list |
JSONArray |
返回结果列表 |
JSONArray
| 名称 | 类型 | 描述 |
|---|---|---|
robotDefId |
Number |
机器人ID |
robotName |
String |
机器人名称 |
industryOneName |
String |
一级行业名 |
industryTwoName |
String |
二级行业名 |
robotStatus |
Number |
话术状态 0:待发布 1:待审核 2:待录音 3:待上线 4:审核不通过 5:已上线 |
deployTime |
String |
发布时间 |
示例
请求示例
https://api-bj.clink.cn/gateway/robot_list
POST 请求体
{
"robotStatus": 0
}
返回示例
{
"result":{
"list":[
{
"robotDefId":121931,
"robotName":"小机智1号",
"robotStatus":1,
"industryOneName":"大金融",
"deployTime":"2022-03-08 14:34:03",
"industryTwoName":"银行"
},
{
"robotDefId":121920,
"robotName":"小机智2号",
"robotStatus":2,
"industryOneName":"大金融",
"deployTime":"2022-03-04 17:54:55",
"industryTwoName":"银行"
},
{
"robotDefId":121912,
"robotName":"小机智3号",
"robotStatus":1,
"industryOneName":"大金融",
"deployTime":"2022-02-24 11:49:07",
"industryTwoName":"保险"
}
]
}
}
3.2. 查询话术变量
POST /gateway/scenevariables
请求参数
| 名称 | 类型 | 是否必需 | 描述 |
|---|---|---|---|
enterpriseId |
String |
true |
租户id |
robotDefId |
Long |
true |
机器人id |
返回参数
| 名称 | 类型 | 描述 |
|---|---|---|
result |
JSONObject |
返回结果 |
JSONObject
| 名称 | 类型 | 描述 |
|---|---|---|
variables |
String[] |
话术变量集合 格式["客户名称","联系方式","客户地址","街道名称"] |
示例
请求示例
https://api-bj.clink.cn/gateway/scenevariables
POST 请求体
{
"enterpriseId": "8001678",
"robotDefId": 280572
}
返回示例
{
"result":{
"variables":[
"客户名称",
"联系方式"
]
},
"requestId":"133938ef-99c4-9ea7-b2b5-8500fbc72acb"
}
4. 外呼任务
4.1. 创建任务
POST /gateway/task_create
请求参数
| 名称 | 类型 | 是否必需 | 描述 |
|---|---|---|---|
enterpriseId |
String |
true |
租户id |
callJobName |
String |
true |
任务名称 |
callJobType |
Long |
true |
任务类型, 1-定时,2-手动;当选择定时任务时,startDate为必传 |
concurrencyNum |
Long |
false |
并发数,不能大于ai坐席数的2倍 |
concurrencyQuota |
Long |
false |
ai坐席数,默认1,一个坐席对应一个机器人 |
levelAssignTypeEnabled |
Boolean |
false |
A、B类意向客户默认分配规则是否开启为流入公海(灰度功能) |
mobile |
String |
false |
创建人手机号 |
openElasticity |
Boolean |
false |
是否开启弹性任务,默认false。仅针对专业版、集团版账号,且指定的外呼线路类型是固话或无主叫的任务,才会生效 |
remark |
String |
false |
备注 |
priority |
Number |
false |
任务优先级,只有开启了任务优先级灰度功能后,该参数才有效 |
repeatCall |
Boolean |
false |
是否开启重拨 默认false 关闭 |
repeatCallRule |
String |
false |
重拨详细规则;例:[{"interval":45,"phoneStatus":1,"times":1},{"interval":45,"phoneStatus":2,"times":1}],其中interval-间隔时间(0-120min); phoneStatus-需要重播的通话状态枚举(1:拒接,2:无法接通,3:外呼失败,4:空号,5:关机,6:占线,7:停机,8:未接,9:主叫欠费,10:呼损); times-重拨次数(1-5) |
restoreAi |
Boolean |
false |
任务自动暂停,是否释放ai坐席 |
robotDefId |
Long |
true |
话术id |
smsSendLevel |
String |
false |
发送短信的意向等级,固定值:A级(有明确意向)、B级(可能有意向)、C级(明确拒绝)、D级(用户忙)、E级(拨打失败)、F级(无效客户) |
smsTemplateId |
Long |
false |
短信模版id |
smsType |
Long |
false |
是否发送挂机短信:0-否,1-是 |
startDate |
Date |
false |
任务开始日期(定时任务必填)格式2019-08-08 精确到天 |
userPhoneIds |
String |
true |
线路Id 线路和固话只能传一个[1345],手机号可以传多个 格式[746,831] |
wechatPush |
Boolean |
false |
是否推送微信消息给分配到客户的成员 |
workingTimeRuleList |
String |
false |
自定义多时段;("[{"timeRanges":[{"startTime":"09:00","endTime":"20:00"}],"weeks":[1,2]}]" endTime-结束时间(String);startTime-开始时间(String),weeks-Number[] ) |
示例
请求示例
https://api-bj.clink.cn/gateway/task_create
POST 请求体
{
"enterpriseId":"8001294",
"callJobName":"测试打电话1234567",
"callJobType":2,
"robotDefId":280572,
"userPhoneIds":"[247545]"
}
返回示例
{
"result":{
"callJobId":4915639
},
"requestId":"fadcbf05-6451-997b-863b-026045eabdb4"
}
4.2. 启动、暂停、终止任务
POST /gateway/task_execute
请求参数
| 名称 | 类型 | 是否必需 | 描述 |
|---|---|---|---|
enterpriseId |
String |
true |
租户id |
callJobId |
String |
true |
任务id |
command |
String |
true |
操作类型,包括:1开始(只有未开始、手动暂停状态的任务可以开始) 2手动暂停(只有可运行、自动暂停、排队中、进行中、线路欠费、AI到期、短信欠费状态的任务可以手动暂停) 3终止(只有未开始、可运行、进行中、手动暂停、自动暂停、排队中状态的任务可以终止) |
返回参数
| 名称 | 类型 | 描述 |
|---|---|---|
result |
JSONObject |
返回结果 |
示例
请求示例
https://api-bj.clink.cn/gateway/task_execute
POST 请求体
{
"enterpriseId":"8001294",
"callJobId":4917077,
"command":3
}
返回示例
{
"code":200,
"requestId":"18727243-e14a-9004-962a-ac3bbd724c7c",
"message":"操作成功"
}
4.3. 向任务中导入客户
POST /gateway/task_import
请求参数
| 名称 | 类型 | 是否必需 | 描述 |
|---|---|---|---|
enterpriseId |
String |
true |
租户id |
callJobId |
Long |
true |
任务id |
customerInfoVOList |
String |
ture |
用户信息字段,([{\"name\":\"test\",\"phone\":\"18888888888\",\"properties\":{\"月份\":\"7月\",\"phone_id\":\"ph7654\"}}])其中phone(客户电话)为必传,name(客户名称)可不传,properties(客户自定义额外信息)字段在话术中有变量时为必传字段;如果需自定义参数也可以通过properties入参;变量可通过“查询话术变量”接口查询; |
permitrepeatnum |
Boolean |
false |
同一个任务中是否支持重复导入手机号,默认false |
返回参数
| 名称 | 类型 | 描述 |
|---|---|---|
result |
JSONObject |
返回结果 |
JSONObject
| 名称 | 类型 | 描述 |
|---|---|---|
total |
Number |
导入总记录数 |
successNum |
Number |
导入成功数量 |
placeFailNum |
Number |
导入失败数量 |
repeatNum |
Number |
导入重复数量 |
placeFailDetail |
String |
导入失败明细 |
示例
请求示例
https://api-bj.clink.cn/gateway/task_import
POST 请求体
{
"enterpriseId": "8001294",
"callJobId": 4917077,
"customerInfoVOList":"[{\"name\":\"test\",\"phone\":\"18888888888\",\"properties\":null}]"
}
返回示例
{
"result":{
"total":1,
"successNum":1,
"placeFailNum":0,
"repeatNum":0,
"placeFailDetail":"[]"
},
"requestId":"8b010e5c-87a5-9b0e-a83b-35c7958ac0d0"
}
4.4. 查询任务列表
POST /gateway/task_list
请求参数
| 名称 | 类型 | 是否必需 | 描述 |
|---|---|---|---|
enterpriseId |
String |
true |
租户id |
callJobStatus |
Number |
false |
任务状态,0:未开始,1:进行中,2:已完成,3:可运行,4:手动暂停,5:自动暂停,6:已终止,7:排队中,8:AI到期,9:线路欠费,10:短信欠费; |
createDate |
String |
false |
创建时间(开始),精确到天,例如:2018-07-24 |
endDate |
String |
false |
创建时间(结束),精确到天,例如:2018-07-24 |
jobName |
String |
false |
任务名称 |
pageNum |
Number |
false |
当前页 |
pageSize |
Number |
false |
每页大小,建议设置为20条,查询数量太多易超时 |
返回参数
| 名称 | 类型 | 描述 |
|---|---|---|
result |
JSONObject |
返回结果 |
JSONObject
| 名称 | 类型 | 描述 |
|---|---|---|
pageNum |
Number |
当前页 |
total |
Number |
总记录数 |
pages |
Number |
总页数 |
list |
CallJobVO[] |
任务集合 |
CallJobVO
| 名称 | 类型 | 描述 |
|---|---|---|
callJobId |
Number |
任务id |
jobName |
String |
任务名称 |
jobType |
Number |
任务类型,1-定时,2-手动 |
startDate |
Number |
任务开始时间,返回时间戳;如果是手动任务时,需在任务启动后才返回字段和值;示例:1628352000000 |
callJobStatus |
Number |
任务状态,0:未开始,1:进行中(调度中),2:已完成,3:可运行,4:用户暂停,5:系统暂停,6:已终止,7:排队中,8:AI到期,9:线路欠费,10:短信欠费; |
remark |
String |
任务描述 |
totalCount |
Number |
任务拨打的号码总数 |
doneCount |
Number |
任务已完成拨打的号码总数 |
calledCount |
Number |
任务已完成呼通的号码总数 |
rejectedCount |
Number |
任务呼叫被拒接的号码总数 |
unavailableCount |
Number |
任务呼叫无法接通的号码总数 |
fromUnavailableCount |
Number |
任务主叫号码不可用的号码总数 |
callJobStatusDesc |
String |
任务状态描述,0:未开始,1:进行中,2:已完成,3:可运行,4:用户暂停,5:系统暂停,6:已终止,7:排队中,8:AI到期,9:线路欠费,10:短信欠费 |
示例
请求示例
https://api-bj.clink.cn/gateway/task_list
POST 请求体
{
"enterpriseId":8000001,
"callJobStatus":1,
"createDate":"2018-07-24",
"endDate":"2018-07-24",
"jobName":"外呼任务",
"pageNum":1,
"pageSize":10
}
返回示例
{
"result":{
"total": 393,
"pages": 393,
"list": [{
"jobName": "1111111",
"callJobStatus": 2,
"callJobStatusDesc": "已完成",
"fromUnavailableCount": 0,
"doneCount": 0,
"unavailableCount": 0,
"callJobId": 30423,
"rejectedCount": 0,
"remark": "",
"totalCount": 0,
"workingStartTime": "22:00",
"workingEndTime": "22:05",
"calledCount": 0,
"jobType": 1,
"startDate": 1566403200000
}],
"pageNum": 10
},
}
4.5. 查询任务详情
POST /gateway/task
请求参数
| 名称 | 类型 | 是否必需 | 描述 |
|---|---|---|---|
enterpriseId |
String |
true |
租户id |
callJobId |
String |
true |
任务id |
返回参数
| 名称 | 类型 | 描述 |
|---|---|---|
result |
JSONObject |
返回结果 |
JSONObject
| 名称 | 类型 | 描述 |
|---|---|---|
callJobId |
Number |
任务id |
jobName |
String |
任务名称 |
jobType |
Number |
任务类型,1-定时,2-手动 |
startDate |
Number |
任务开始时间,示例:1676822400000 |
callJobStatus |
Number |
任务状态,0:未开始,1:进行中(调度中),2:已完成,3:可运行,4:用户暂停,5:系统暂停,6:已终止,7:排队中,8:AI到期,9:线路欠费,10:短信欠费; |
remark |
String |
任务描述 |
totalCount |
Number |
任务拨打的号码总数 |
doneCount |
Number |
任务已完成拨打的号码总数 |
calledCount |
Number |
任务已完成呼通的号码总数 |
rejectedCount |
Number |
任务呼叫被拒接的号码总数 |
unavailableCount |
Number |
任务呼叫无法接通的号码总数 |
fromUnavailableCount |
Number |
任务主叫号码不可用的号码总数 |
robotDefName |
String |
机器人名称 |
durationStat |
StringIntegerVO[] |
通话时长的统计信息,通话时长统计类型(小于10秒,10-50秒,1分钟-1分59秒,大于等于2分钟) |
chatRoundStat |
StringIntegerVO[] |
通话轮次统计类型(0-2次,3-4次,5-6次,7-9次) |
resultDefs |
NameValuesVO[] |
结果分析的枚举 |
callPhones |
UserPhoneNumberVO[] |
主叫电话号码列表 |
workingTimeRuleList |
JobWorkingTimeRuleDetailVO[] |
多时段拨打配置 |
robotDefId |
Number |
机器人Id |
callJobStatusDesc |
String |
任务状态描述,0:未开始,1:进行中,2:已完成,3:可运行,4:用户暂停,5:系统暂停,6:已终止,7:排队中,8:AI到期,9:线路欠费,10:短信欠费; |
smsType |
Number |
是否发送挂机短信:0:否,1:是 |
smsTemplateId |
Number |
挂机短信模版Id |
smsCondition |
String |
发送挂机短信的客户意向等级 |
workingTimeRule |
JobWorkingTimeRuleDetailVO |
多时段拨打配置(已废弃) |
seatNum |
Number |
座席数 |
phoneNum |
Number |
并发数 |
mobile |
String |
任务创建人手机号 |
openElasticity |
Boolean |
是否开启弹性座席 |
repeatCall |
Boolean |
是否开启重拨 |
repeatCallRule |
String |
重拨规则 |
userPhoneIds |
Number[] |
线路Id |
permitRepeatNum |
Boolean |
是否支持号码重复导入 |
StringIntegerVO
| 名称 | 类型 | 描述 |
|---|---|---|
name |
String |
key |
value |
Number |
value |
NameValuesVO
| 名称 | 类型 | 描述 |
|---|---|---|
name |
String |
key |
values |
String[] |
values |
UserPhoneNumberVO
| 名称 | 类型 | 描述 |
|---|---|---|
userPhoneId |
Number |
线路id |
phone |
String |
线路名称 |
phoneName |
String |
线路别名 |
phoneType |
Number |
线路枚举类型 0:手机号; 1:固话; 2和9:线路 |
sceneType |
Number |
应用场景 1:呼入,2:呼出,3:呼入呼出 |
billPeriod |
Number |
计费周期,单位秒(默认60) |
rateType |
Price |
费率类型:0-全国统一 ,1-本地外地不同 |
nonlocalSellingRate |
Price |
外地销售价 单位:分 |
localSellingRate |
Price |
本地销售价/全国销售价 单位:分 |
lineAmount |
Price |
线路账户余额,单位:元 |
JobWorkingTimeRuleDetailVO
| 名称 | 类型 | 描述 |
|---|---|---|
weeks |
Number[] |
一周内拨打的时间 |
timeRanges |
TimeRange[] |
拨打时段结构体 |
TimeRange
| 名称 | 类型 | 描述 |
|---|---|---|
startTime |
String |
开始拨打时间,例:"09:00" |
endTime |
String |
结束拨打时间,例:"20:00" |
示例
请求示例
https://api-bj.clink.cn/gateway/task
POST 请求体
{
"enterpriseId":"8001294",
"callJobId":4917077
}
返回示例
{
"result":{
"callJobId":4915639,
"jobName":"测试打电话222333",
"jobType":2,
"startDate":1676822400000,
"callJobStatus":5,
"remark":null,
"totalCount":1,
"doneCount":0,
"calledCount":0,
"rejectedCount":0,
"unavailableCount":0,
"fromUnavailableCount":0,
"robotDefName":"转人工坐席测试",
"durationStat":[
],
"chatRoundStat":[
],
"resultDefs":[
{
"name":"客户意向等级",
"values":[
"A级(有明确意向)",
"B级(可能有意向)",
"C级(明确拒绝)",
"D级(用户忙)",
"E级(拨打失败)",
"F级(无效客户)"
]
}
],
"callPhones":[
{
"userPhoneId":247545,
"phone":"天润演示线路",
"phoneName":"天润演示线路",
"phoneType":2,
"sceneType":1
}
],
"workingTimeRuleList":[
{
"weeks":[
1,
2,
3,
4,
5,
6,
7
],
"timeRanges":[
{
"startTime":"09:00",
"endTime":"20:00"
}
]
}
],
"robotDefId":280572,
"callJobStatusDesc":"系统暂停",
"smsType":0,
"smsTemplateId":null,
"smsCondition":null,
"workingTimeRule":{
"weeks":[
1,
2,
3,
4,
5,
6,
7
],
"timeRanges":[
{
"startTime":"09:00",
"endTime":"20:00"
}
]
},
"seatNum":1,
"phoneNum":1,
"mobile":"13520547827",
"openElasticity":false,
"repeatCall":false,
"repeatCallRule":null,
"userPhoneIds":[
247545
]
},
"requestId":"79df7dc7-a1bc-908a-8388-8afd639f8efb"
}
4.6. 获得公司的外呼线路列表
POST /gateway/phone_list
请求参数
| 名称 | 类型 | 是否必需 | 描述 |
|---|---|---|---|
enterpriseId |
String |
true |
租户id |
userPhoneId |
Long |
false |
坐席id |
返回参数
| 名称 | 类型 | 描述 |
|---|---|---|
result |
JSONObject |
返回结果 |
JSONObject
| 名称 | 类型 | 描述 |
|---|---|---|
list |
JSONArray |
返回结果列表 |
JSONArray
| 名称 | 类型 | 描述 |
|---|---|---|
userPhoneId |
Long |
线路Id |
phone |
String |
线路名称 |
phoneName |
String |
线路别名 |
phoneType |
Long |
线路枚举类型 0:手机号; 1:固话; 2和9:线路 |
sceneType |
Long |
应用场景 1:呼入,2:呼出,3:呼入呼出 |
示例
请求示例
https://api-bj.clink.cn/gateway/phone_list
POST 请求体
{
"enterpriseId": "8001678",
"userPhoneId": 247545
}
返回示例
{
"result": {
"list": [
{
"userPhoneId": 247545,
"phone": "天润演示线路",
"phoneName": "天润演示线路",
"phoneType": 2,
"sceneType": 1
}
]
},
"requestId": "6f7e7c93-cda8-9fc5-977b-9bb014fbae1f"
}
4.7. 查询任务中已完成的电话号码
POST /gateway/call_done_list
请求参数
| 名称 | 类型 | 是否必需 | 描述 |
|---|---|---|---|
enterpriseId |
String |
true |
租户id |
callJobId |
Long |
true |
任务id |
endTime |
Date |
false |
结束时间 |
finishStatus |
Long |
false |
已完成通话状态,:已接听,1:拒接,2:无法接通,3:主叫号码不可用,4:空号,5:关机,6:占线,7:停机,8:未接,9:主叫欠费,10:呼损,11:黑名单,12:天盾拦截,22:线路拦截,25:虚拟线路可选线路为空 |
pageNum |
Long |
false |
第几页 |
pageSize |
Long |
false |
每页大小,最多不能超过500条 |
resultQueryList |
String |
false |
支持按分析结果作为条件,格式 :[{"name":"客户意向等级","value":"A"}] |
startTime |
Date |
false |
开始时间 |
返回参数
| 名称 | 类型 | 描述 |
|---|---|---|
result |
JSONObject |
返回结果 |
JSONObject
| 名称 | 类型 | 描述 |
|---|---|---|
pageNum |
Long |
当前页 |
total |
Long |
总记录数 |
pages |
Long |
总页数 |
list |
CallDoneVO[] |
通话列表 |
CallDoneVO
| 名称 | 类型 | 描述 |
|---|---|---|
callInstanceId |
Long |
通话记录Id |
callJobId |
Long |
任务id |
callJobName |
String |
任务名称 |
customerTelephone |
String |
被叫客户电话号码 |
customerName |
String |
被叫客户名称 |
callInstanceStatus |
Long |
通话状态,0:未开始,1:进行中,2:已完成,3:二次拨打调度中 |
finishStatus |
Long |
已完成通话状态,0:已接听,1:拒接,2:无法接通,3:主叫号码不可用,4:空号,5:关机,6:占线,7:停机,8:未接,9:主叫欠费,10:呼损,11:黑名单,12:天盾拦截,13:线路盲区,25:虚拟线路可选线路为空 |
duration |
Long |
通话时长 |
chatRound |
Long |
通话轮次,相当于AI说话次数 |
startTime |
Date |
开始拨打时间 |
endTime |
Date |
结束拨打时间 |
luyinOssUrl |
String |
通话录音(包含用户录音和Ai语音) |
resultList |
NameValueVO[] |
通话参数集合 |
finishStatusDesc |
String |
已完成通话状态描述,0:已接听,1:拒接,2:无法接通,3:主叫号码不可用,4:空号,5:关机,6:占线,7:停机,8:未接,9:主叫欠费,10:呼损,11:黑名单,12:天盾拦截,13:线路盲区,25:虚拟线路可选线路为空 |
properties |
String |
拨打所需参数map序列化的json |
userProperties |
String |
用户导入的属性 |
NameValueVO
| 名称 | 类型 | 描述 |
|---|---|---|
name |
String |
名称 |
value |
String |
值 |
示例
请求示例
https://api-bj.clink.cn/gateway/call_done_list
POST 请求体
{
"enterpriseId": "8001678",
"callJobId": 247545
}
返回示例
{
"result": {
"pageNum": 1,
"total": 4442,
"pages": 445,
"list": [
{
"callInstanceId": 83245800856,
"callJobId": 4966492,
"callJobName": "库内数据测试-1-0308-2",
"customerTelephone": "18888888",
"customerName": "林",
"callInstanceStatus": 2,
"finishStatus": 6,
"duration": 0,
"chatRound": 0,
"startTime": 1678353794000,
"endTime": 1678353819000,
"luyinOssUrl": "https://****.mp3",
"resultList": [
{
"name": "客户意向等级",
"value": "D级(用户忙)"
}
],
"finishStatusDesc": "占线",
"properties": "{\"手机尾号\":\"9363\",\"callStartTime\":\"2023-03-09 17:23:15\",\"wechatPushStatus\":0,\"taskStartTime\":\"2023-03-09 17:23:14\"}",
"userProperties": "{\"手机尾号\":\"9363\"}"
}
]
},
"requestId": "3972bf0c-80f2-9837-8eb9-d58cf807569b"
}
4.8. 批量查询AI外呼任务的实时状态
POST /gateway/calljob_status_list
请求参数
| 名称 | 类型 | 是否必需 | 描述 |
|---|---|---|---|
enterpriseId |
String |
true |
租户id |
callJobIdList |
String |
true |
AI外呼任务id数组字符串[4972911] |
返回参数
| 名称 | 类型 | 描述 |
|---|---|---|
result |
JSONObject |
返回结果 |
JSONObject
| 名称 | 类型 | 描述 |
|---|---|---|
list |
JSONArray |
任务状态集合 |
JSONArray
| 名称 | 类型 | 描述 |
|---|---|---|
callJobId |
Long |
任务id |
status |
Long |
任务状态,0:未开始,1:进行中,2:已完成,3:可运行,4:用户暂停,5:系统暂停,6:已终止,7:排队中,8:AI到期,9:线路欠费,10:短信欠费,11:AI欠费 |
示例
请求示例
https://api-bj.clink.cn/gateway/calljob_status_list
POST 请求体
{
"enterpriseId":"8009016",
"callJobIdList":"[4972911]"
}
返回示例
{
"result": {
"list": [
{
"callJobId": 4972911,
"status": 6
}
]
}
}
4.9. 获取未完成任务通话号码
POST /gateway/call_not_start_list
请求参数
| 名称 | 类型 | 是否必需 | 描述 |
|---|---|---|---|
enterpriseId |
String |
true |
租户id |
callJobId |
Long |
true |
任务id |
pageNum |
Long |
false |
分页参数,页码 |
pageSize |
Long |
false |
分页参数,每页数量 |
返回参数
| 名称 | 类型 | 描述 |
|---|---|---|
result |
JSONObject |
返回结果 |
JSONObject
| 名称 | 类型 | 描述 |
|---|---|---|
list |
JSONArray |
总页数集合 |
pageNum |
Long |
当前页 |
total |
Long |
总记录数 |
pages |
Long |
总页数 |
JSONArray
| 名称 | 类型 | 描述 |
|---|---|---|
callInstanceId |
Long |
通话记录Id |
customerName |
Long |
被叫客户名称 |
customerTelephone |
String |
被叫客户电话号码 |
properties |
String |
拨打所需参数map序列化的json |
userProperties |
String |
用户导入的属性 |
示例
请求示例
https://api-bj.clink.cn/gateway/call_not_start_list
POST 请求体
{
"enterpriseId": "8009016",
"callJobId": 4972911,
"pageNum": 1,
"pageSize": 10
}
返回示例
{
"result": {
"pageNum": 1,
"total": 1,
"pages": 1,
"list": [
{
"callInstanceId": 84416200024,
"customerName": "liurf",
"customerTelephone": "13851477962",
"properties": "{\"channel\":\"tbot\"}",
"userProperties": "{\"channel\":\"tbot\"}"
}
]
},
"requestId": "cdefd256-db59-9908-a8fb-f42e41e24458"
}
4.10. 加入黑名单
POST /gateway/add_black_info
请求参数
名称 |
类型 |
是否必需 |
描述 |
enterpriseId |
String |
true |
企业id |
mobile |
String |
true |
手机号 |
name |
String |
false |
名称 |
remark |
Integer |
false |
备注 |
返回参数
名称 |
类型 |
描述 |
requestId |
String |
唯一标识 |
result |
JSONObject |
返回数据 |
JSONObject
名称 |
类型 |
描述 |
blackListId |
Long |
黑名单id |
示例
请求示例
https://api-bj.clink.cn/gateway/add_black_info
POST 请求体
{
"enterpriseId":"801294",
"mobile":"18766776677"
}
返回示例
{
"result": {
"blackListId": 182565105
},
"requestId": "4cd04116-45c9-4ba0-8a8f-7d4d03dddb44"
}
5. 外呼通话记录
5.1. 获取通话详情
POST /gateway/call_detail
请求参数
| 名称 | 类型 | 是否必需 | 描述 |
|---|---|---|---|
enterpriseId |
String |
true |
租户id |
callInstanceId |
String |
true |
通话记录id |
返回参数
| 名称 | 类型 | 描述 |
|---|---|---|
result |
JSONObject |
返回结果 |
JSONObject
| 名称 | 类型 | 描述 |
|---|---|---|
phoneLogs |
PhoneLogVO[] |
对话内容 |
callInstance |
CallInstanceVO |
通话详情 |
taskResult |
TaskResultVO[] |
任务结果分析,包含(关注点,意向等级) |
PhoneLogVO
| 名称 | 类型 | 描述 |
|---|---|---|
callInstanceId |
Number |
通话id |
speaker |
String |
说话人,ME: 客户 AI: 机器人 |
content |
String |
说话内容 |
userMean |
String |
用户说话语义 |
userMeanDetail |
UserMeanDetailVO[] |
用户语义详情 |
aiUnknown |
Number |
是否是ai无法应答的问题,1-是,0-否 |
startTime |
Number |
说话的开始时间,单位毫秒 |
endTime |
Number |
说话的结束时间,单位毫秒 |
UserMeanDetailVO
| 名称 | 类型 | 描述 |
|---|---|---|
score |
Price |
分值 |
answer |
String |
回答 |
ask |
String |
关键词 |
CallInstanceVO
| 名称 | 类型 | 描述 |
|---|---|---|
callInstanceId |
Number |
通话id |
callJobId |
Number |
任务id |
customerTelephone |
String |
客户手机号 |
customerName |
String |
客户名称 |
callInstanceStatus |
Number |
通话状态,2:已完成 |
finishStatus |
Number |
已完成通话状态, 0:已接听,1:拒接,2:无法接通,3:外呼失败,4:空号,5:关机,6:占线,7:停机,8:未接,9:主叫欠费,10:呼损,11:黑名单,12:天盾拦截,22:线路盲区,23呼出拦截,25:无可用线路(可选线路为空、线路超频等) |
duration |
Number |
通话时长,单位秒 |
chatRound |
Number |
通话轮次 |
startTime |
Number |
通话开始时间 |
endTime |
Number |
通话结束时间 |
luyinOssUrl |
String |
录音地址(包含用户录音和Ai语音) |
userLuyinOssUrl |
String |
用户通话录音 |
properties |
Map |
通话记录携带的参数(json字符串),包含话术变量和自定义参数,用户可以传入自己的变量,接口回调会传回给用户 |
jobName |
String |
任务名称 |
robotDefId |
Number |
机器人id |
hangUp |
Number |
挂机人, 0: AI 1: 用户 |
calledTimes |
Number |
已拨打次数 |
finishStatusDesc |
String |
已完成通话状态描述,已完成通话状态, 0:已接听,1:拒接,2:无法接通,3:外呼失败,4:空号,5:关机,6:占线,7:停机,8:未接,9:主叫欠费,10:呼损,11:黑名单,12:天盾拦截,22:线路盲区,23呼出拦截,25:无可用线路(可选线路为空、线路超频等) |
collectProperties |
Map |
数据采集变量 |
notifyEavesdrop |
Boolean |
是否发起监听通知 |
eavesdrop |
Boolean |
是否发起监听 |
eavesdropIntercept |
Boolean |
是否切入通话 |
csDuration |
Number |
人工通话时长 |
callerPhone |
String |
线路名称 |
TaskResultVO
| 名称 | 类型 | 描述 |
|---|---|---|
resultName |
String |
客户意向等级key;客户关注点key |
resultValue |
String |
客户意向等级value;客户关注点value |
resultDesc |
String |
分析结果描述,包括客户关注点和客户意向等级 |
resultLabels |
ResultLabelVO[] |
客户标签 |
ResultLabelVO
| 名称 | 类型 | 描述 |
|---|---|---|
key |
Number |
客户标签id |
value |
String |
客户标签名称 |
示例
请求示例
https://api-bj.clink.cn/gateway/call_detail
POST 请求体
{
"enterpriseId":"8001294",
"callInstanceId": 73556304885
}
返回示例
{
"result":{
"phoneLogs":[
{
"callInstanceId":77728501598,
"speaker":"AI",
"content":"您好,我是天润融通智能机器人,是否需要转人工",
"userMean":"",
"userMeanDetail":null,
"aiUnknown":null,
"startTime":0,
"endTime":0
}
],
"callInstance":{
"callInstanceId":77728501598,
"callJobId":4915585,
"customerTelephone":"18888888888",
"customerName":"test",
"callInstanceStatus":null,
"finishStatus":0,
"duration":3,
"chatRound":0,
"startTime":1676894018000,
"endTime":1676894022000,
"luyinOssUrl":"https://robot-prod.oss-cn-hangzhou.aliyuncs.com/RobotPhoneCommunicate/20230220/20230220winFPM7728501598_13851477962.mp3",
"userLuyinOssUrl":"https://robot-prod.oss-cn-hangzhou.aliyuncs.com/RobotPhoneCommunicate/20230220/20230220winFPM7728501598_13851477962_user.mp3",
"properties":{
"callStartTime":"2023-02-20 19:53:28",
"wechatPushStatus":"0",
"客户名称":"test",
"联系方式":"18888888888",
"taskStartTime":"2023-02-20 19:53:26"
},
"jobName":"测试打电话1234567",
"robotDefId":280572,
"hangUp":1,
"calledTimes":1,
"finishStatusDesc":"已接听",
"collectProperties":{
},
"notifyEavesdrop":false,
"eavesdrop":false,
"eavesdropIntercept":false,
"csDuration":0,
"callerPhone":"天润演示线路"
},
"taskResult":[
{
"resultName":"客户意向等级",
"resultValue":"C",
"resultDesc":"命中业务问题 <= 0次 并且 肯定次数 <= 0次",
"resultLabels":[
]
}
]
},
"requestId":"4d2768ee-3fdb-989e-9d40-ba64fc44cd64"
}