# 外呼流程

一、初始化阶段

  1. 调用 /v1/call/config.json,初始化SDK
  2. 切换接听模式,调用 /v1/call/signInOrOut.json(signInType: 0)
  3. 切换外呼模式,调用 /v1/call/signInOrOut.json(signInType: 0)

二、签入

  1. 调用 /v1/call/detail.json 判断当前用户是否开通外呼
  2. 坐席签入 -> 选择“电脑接听”或“工作手机接听”

三、呼出

输入手机号,点击“呼叫”,根据外呼模式:

双呼

  1. 调用 /v1/call/callOut.json 拨打
  2. 轮询 /v1/call/detail.json 获取通话状态

网络电话

  1. 调用 /v1/call/getCallSessionId.json 获取会话ID
  2. 调用 /v1/call/callOut.json 拨打 传sessionId
  3. SDK拨打手机号

四、接听

  1. SDK收到呼入信号。
  2. 直接接听: 调用 /v1/call/register.json,进行呼入注册。
  3. 来电转接: 选择应答坐席 /v1/call/exten/free.json

五、离席

  1. 离席 -> 下班了 /v1/call/signInOrOut.json(signInType: 0)
  2. 离席 -> 工作手机接听 /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
}