# 外呼流程
一、初始化阶段
- 调用 /v1/call/config.json,初始化SDK
- 切换接听模式,调用 /v1/call/signInOrOut.json(signInType: 0)
- 切换外呼模式,调用 /v1/call/signInOrOut.json(signInType: 0)
二、签入
- 调用 /v1/call/detail.json 判断当前用户是否开通外呼
- 坐席签入 -> 选择“电脑接听”或“工作手机接听”
三、呼出
输入手机号,点击“呼叫”,根据外呼模式:
双呼
- 调用 /v1/call/callOut.json 拨打
- 轮询 /v1/call/detail.json 获取通话状态
网络电话
- 调用 /v1/call/getCallSessionId.json 获取会话ID
- 调用 /v1/call/callOut.json 拨打 传sessionId
- SDK拨打手机号
四、接听
- SDK收到呼入信号。
- 直接接听: 调用 /v1/call/register.json,进行呼入注册。
- 来电转接: 选择应答坐席 /v1/call/exten/free.json
五、离席
- 离席 -> 下班了 /v1/call/signInOrOut.json(signInType: 0)
- 离席 -> 工作手机接听 /v1/call/signInOrOut.json (signInType: 1)
# 发起外呼
# 接口说明
项 | 值 |
---|---|
URL | /v1/call/callOut.json |
描述 | 发起外呼 |
请求方式 | POST |
需要登录 | 是 |
注意事项 | 无 |
其他 | 无 |
# 请求参数说明
字段名 | 字段类型 | 说明 | 是否必传 |
---|---|---|---|
userId | String | 外呼坐席用户ID | 是 |
mobile | String | 手机号 | 是 |
sessionId | String | sessionId | 否,网络电话必传 |
# 请求数据
{
"userId": "BxSdn9pnIz", // 外呼坐席用户编号
"mobile": "12344445555", // 手机号
"sessionId": "xxx" // sessionId
}
# 返回数据
{
"code" : 0,
"msg" : "",
"data" : {
"id" : "NskquQalKZ", // 通话唯一标识
"mobile" : "12344445555", // 手机号
"middleMobile" : "NskquQalKZ", // 中间号
"userMobile" : "xxx", // 用户手机号
"ringDuration" : 20, // 振铃时长
"callDuration" : 10, // 通话时长
"hasVoice" : "NskquQalKZ", // 是否有通话语音
"type" : "NskquQalKZ", // 0-呼出 1-呼入
"status" : "NskquQalKZ" // -1-无法接通 0-通话开始 1-通话成功 2-无人接听 3-空号 4-停机 5-用户忙 6-挂断 7-关机
}
}
# 创建语音外呼
# 接口说明
项 | 值 |
---|---|
URL | /v1/call/voiceCall.json |
描述 | 创建语音外呼 |
请求方式 | POST |
需要登录 | 是 |
注意事项 | 无 |
其他 | 无 |
# 请求参数说明
字段名 | 字段类型 | 说明 | 是否必传 |
---|---|---|---|
Mobile | string | 手机号,仅支持中国大陆手机号: 11位数字,例如 1xxxxxxxxxx | 是 |
TplId | string | 模板id | 是 |
TplParams | Json | 模板变量信息。例如模板如下:你的验证码{code},有效期为五分钟。其中code是模块变量,则TplParams参数值格式为:{“code”:123456},如果你的模板没有变量,则该参数值为: {} 。注意:最终拼接后的内容长度限制200个字符 | 是 |
# 请求数据
{
"Mobile": "138XXXX1234",
"TplId":"xx",
"TplParams": {"code": 123456}
}
# 成功返回数据
{
"CallId": "fLTxMRxQHh"
}
# 失败返回数据
{
"Error": {
"Type": "server",
"Message": "The Account do not call voice service",
"Code": "AccountVoiceServiceUnavailable"
}
}
# 获取账号配置
# 接口说明
项 | 值 |
---|---|
URL | /v1/call/config.json |
描述 | 获取账号配置 |
请求方式 | POST |
需要登录 | 是 |
注意事项 | 无 |
其他 | 无 |
# 请求参数说明
字段名 | 字段类型 | 说明 | 是否必传 |
---|---|---|---|
userId | String | 用户ID | 是 |
# 请求数据
{
"userId": "BxSdn9pnIz" // 用户编号
}
# 返回数据
{
"code": 0,
"msg": "",
"data": {
"isOpen": 1,
"code": "rengongwaihu",
"exten": {
"sign_in_status": 2,
"login_type": "",
"created_at": "2022-12-01 18:54:11",
"display_name": "xx",
"exten": "8000",
"is_used": 1,
"user_number": 1527,
"password": "xx",
"account_id": "N00000057263",
"partner_id": 41627315,
"login_name": "8000",
"updated_at": "2022-12-05 15:36:50",
"busy_type": 0,
"login_user": "8000@baijiayun1",
"phone": "xx",
"login_state": 0,
"id": 134,
"proxy_url": "bj.hw.35.8"
},
"configJson": {
"accountName": "baijiayun1",
"password": "xx",
"accountId": "N00000057263",
"pbx": "",
"proxyUrl": "bj.hw.35.8",
"secretKey": "1f6eef20-780b-11ec-9efe-47d2f0151205",
"host": "https://apis.7moor.com",
"serviceNo": "",
"serviceNoVoice": "",
"url": "",
"account": "",
"pass": "",
"defaultExtenType": ""
}
}
}
# 当前坐席状态
# 接口说明
项 | 值 |
---|---|
URL | /v1/call/detail.json |
描述 | 当前坐席状态 |
请求方式 | POST |
需要登录 | 是 |
注意事项 | 无 |
其他 | 无 |
# 请求参数说明
字段名 | 字段类型 | 说明 | 是否必传 |
---|---|---|---|
userId | String | 用户ID | 是 |
# 请求数据
{
"userId": "BxSdn9pnIz" // 用户编号
}
# 返回数据
{
"code": 0,
"msg": "",
"data": {
"apiCallId": "xxx", // sessionid
"userId": "xxx",
"userName": "xxx",
"userPhone": "xxx",
"createTime": 1670224354,
"middlePhone": "xxx",
"ringingDuration": 0,
"callDuration": 0,
"status": null, // 通话状态,释义参见通话数据
"voiceUrl": "xxx",
"orgName": "xxx",
"openapi": false,
"callMember": false // 是否外呼成员
}
}
# 获取空闲坐席
# 接口说明
项 | 值 |
---|---|
URL | /v1/call/exten/free.json |
描述 | 获取空闲坐席 |
请求方式 | POST |
需要登录 | 是 |
注意事项 | 无 |
其他 | 无 |
# 请求参数说明
字段名 | 字段类型 | 说明 | 是否必传 |
---|---|---|---|
userId | String | 外呼坐席用户ID | 是 |
# 请求数据
{
"userId": "BxSdn9pnIz" // 用户编号
}
# 返回数据
{
"code": 0,
"msg": "",
"data": [{
"id": 6,
"account_id": "N000000572631",
"exten": "8000", // 坐席号
"phone": "xx",
"created_at": "2022-01-18 20:07:02",
"updated_at": "2022-01-20 14:29:39",
"is_used": 1,
"partner_id": 45737474,
"login_name": "8000",
"password": "xx",
"user_number": 123456,
"sign_in_status": 1,
"display_name": "lytest",
"login_state": 0,
"login_type": "",
"busy_type": 0 // 坐席状态
}]
}
# 获取SessionId
# 接口说明
项 | 值 |
---|---|
URL | /v1/call/getCallSessionId.json |
描述 | 获取SessionId |
请求方式 | POST |
需要登录 | 是 |
注意事项 | 无 |
其他 | 无 |
# 请求参数说明
字段名 | 字段类型 | 说明 | 是否必传 |
---|---|---|---|
userId | String | 用户ID | 是 |
# 请求数据
{
"userId": "BxSdn9pnIz", // 用户编号
}
# 返回数据
{
"code": 0,
"msg": "",
"data": "xxx"
}
# 签入签出
# 接口说明
项 | 值 |
---|---|
URL | /v1/call/signInOrOut.json |
描述 | 签入签出 |
请求方式 | POST |
需要登录 | 是 |
注意事项 | 无 |
其他 | 无 |
# 请求参数说明
字段名 | 字段类型 | 说明 | 是否必传 |
---|---|---|---|
userId | String | 外呼坐席用户ID | 是 |
signInType | int | 签入签出 0:签出 1签入 | 是 |
# 请求数据
{
"userId": "BxSdn9pnIz", // 用户编号
"signInType": 1
}
# 返回数据
{
"code": 0,
"msg": "",
"data": null
}
# 接通话登记
# 接口说明
项 | 值 |
---|---|
URL | /v1/call/register.json |
描述 | 接通话登记 |
请求方式 | POST |
需要登录 | 是 |
注意事项 | 无 |
其他 | 无 |
# 请求参数说明
字段名 | 字段类型 | 说明 | 是否必传 |
---|---|---|---|
userId | String | 用户ID | 是 |
callType | String | 呼叫模式 | 是 |
callSheetId | String | callSheetId | 是 |
# 请求数据
{
"userId": "BxSdn9pnIz", // 用户编号
"callType": "webrtc", // 固定值
"callSheetId": "xxx" // sdk获取
}
# 返回数据
{
"code": 0,
"msg": "",
"data": null
}