
# 外呼结果回调接口
#### 场景描述
该接口会将外呼结果推送至指定URL。
#### 使用说明
- 前提条件
  - 已经申请了开发者账号。
  
  - 外呼活动已经创建，并已添加外呼数据。
   
- 注意事项
  - 接收请求后，需服务端返回200的响应，其他响应均认为推送失败。
  
  - 接收到非200响应后，会立即再次推送。如果仍为非200响应，则认为本次推送失败。
   
- 使用限制
  - HTTPS采用TLS1.2及以上版本，确保web应用的敏感数据在传输过程中不被非法截获。
  
  - 每条呼叫数据最大推送次数由租户级参数"外呼结果回调最大调用次数"限制，默认值为2，最大值为6。
  
  - 调用回调接口等待时间可通过isales配置文件中的参数api.result.callback.connectionRequestTimeout和api.result.callback.responseTimeout修改。
  
  - 回调地址callBackUrl有三处配置：任务级回调地址、租户级回调地址（租户级参数"外呼结果推送目标地址"，外呼结果推送目标地址缓存失效时长为1小时）、系统级回调地址（系统配置项"isales.obresult.callback.url"）。其中，任务级回调地址、租户级回调地址仅支持配置单个URL；系统级回调地址支持配置多个URL，URL之间使用英文分号";"分隔。它们的优先级如下：
    - 如果外呼任务上配置了任务级回调地址，则推送外呼结果到该地址；
    
    - 如果外呼任务上没有配置任务级回调地址，在OP独立环境、且配置了系统级回调地址时：
      - 若配置了租户级回调地址，则推送外呼结果到租户级地址；
      
      - 若未配置租户级回调地址，则推送外呼结果到系统级回调地址；
       
    
    - 非OP独立环境下，只支持任务级回调地址。
     
   
 
#### 接口方法
该接口仅支持POST方法。
#### 接口URL
创建外呼活动时，通过callBackUrl指定。
#### 请求说明
无请求头消息。
表1请求消息体参数说明 
| 序号 | 参数名            | 参数类型 | 说明                                                                                                                                                    |
|:---|:---|:---|:---|
| 1  | callResultList | List | 外呼结果列表，此处仅做说明，实际无此实体对象，response直接返回List。具体参考[表2]。 |
   
 表2callDataList参数说明 
| 序号 | 参数名         | 参数类型   | 说明                                                                                                                                                                                                                                                     |
|:---|:---|:---|:---|
| 1  | campaignId  | String | 外呼活动的id                                                                                                                                                                                                                                                |
| 2  | sessionId   | String | 标识用户的ID。                                                                                                                                                                                                                                               |
| 3  | callerNo    | String | 主叫号码                                                                                                                                                                                                                                                   |
| 4  | called      | String | 被叫号码。                                                                                                                                                                                                                                                  |
| 5  | callTimeStr | String | 呼叫时间，格式为：yyyy-mm-dd hh:mm:ss，使用租户对应时区的时间。                                                                                                                                                                                                              |
| 6  | callStatus  | int    | 呼叫结果（5: 呼叫失败，6: 呼叫成功）。                                                                                                                                                                                                                                 |
| 7  | failCode    | String | 失败的原因码，请参见[表4]。                                                                                                                                 |
| 8  | vdnId       | int    | 外呼号码所属VDN ID。                                                                                                                                                                                                                                          |
| 9  | callId      | String | 通话记录ID，用于与CTI平台的话单等通话数据关联。                                                                                                                                                                                                                             |
| 10 | customField | String | 用户自定义字段。                                                                                                                                                                                                                                               |
| 11 | recordPath  | String | 通话录音文件的存储路径。 说明： 该字段仅在使用接续时（SAAS组网），才返回值，其他情况返回为空。 |
   
#### 响应说明
响应码：200
表3响应消息说明 
| 序号 | 名称      | 参数类型   | 是否必选 | 说明          |
|:---|:---|:---|:---|:---|
| 1  | retCode | string | True | 0，成功，其他为失败。 |
| 2  | retMsg  | string | True | 失败原因的描述。    |
   
#### 触发事件
无
#### 结果码
 表4外呼结果错误原因码说明 
| 分类           | 错误原因码         | 错误原因描述                                               |
|:---|:---|:---|
| 外呼成功         | 00000         | 外呼成功。                                                |
| 用户侧拆线        | 00531         | 外呼用户挂机。                                              |
| 用户侧拆线        | 00537         | 外呼号码被叫忙。                                             |
| 用户侧拆线        | 00538         | 外呼号码为空号或错号。                                          |
| 用户侧拆线        | 00548         | 外呼手机号码关机。                                            |
| 用户侧拆线        | 00549         | 外呼手机号码不在服务区。                                         |
| 用户侧拆线        | 00551         | 用户挂机。                                                |
| 用户侧拆线        | 00601         | 应答前用户挂机。                                             |
| 用户侧拆线        | 00603         | 外呼号码无应答后拆线。                                          |
| 用户侧拆线        | 00604         | 呼叫拒绝。                                                |
| 用户侧拆线        | 00701         | 外呼用户转队列，排队中用户主动挂机。                                   |
| 平台正常拆线       | 00702         | 外呼用户转队列，排队超时，平台释放呼叫（若配置为排队超时释放）。                     |
| 平台正常拆线       | 01040         | 振铃超时，平台释放呼叫。（即在设置的振铃时间内，用户一直没有摘机）                    |
| 平台正常拆线       | 01043         | 平台内部等待外呼结果超时。                                        |
| 平台正常拆线       | 01046         | 占用座席失败（转IVR外呼不涉及）。                                   |
| 平台正常拆线       | 01049         | 外呼检测超时。                                              |
| 平台正常拆线       | 34601         | 外呼任务不存在。                                             |
| 平台正常拆线       | 34605         | 电话号码为空，即外呼获取的被叫号码为空字符串。                              |
| 平台正常拆线       | 34606         | 试呼失败，即调用呼出接口失败(比较常见的一种情况：当前的并发外呼数达到了最大外呼数；)，没有呼出到用户。 |
| 平台正常拆线       | 34608         | 呼出后，没有得到呼出结果信息，超时后将该呼叫数据回写。                          |
| 外呼号码校验失败     | 90002         | 不符合外呼数据属性筛选规则                                        |
| 外呼号码校验失败     | 90003         | 黑名单拦截                                                |
| 外呼号码校验失败     | 90005         | 过期数据                                                 |
| 外呼号码校验失败     | 90008         | 日呼叫数拦截                                               |
| 外呼号码校验失败     | ``` 90011 ``` | 号码呼叫间隔限制                                             |
| 系统资源不足，平台侧拆线 | 00602         | 系统资源不足，请联系管理员检查资源配置。                                 |
| 系统资源不足，平台侧拆线 | 00605         | 系统资源不足，请联系管理员检查资源配置。                                 |
| 系统资源不足，平台侧拆线 | 01048         | 系统资源不足，请联系管理员检查资源配置。                                 |
| 系统资源不足，平台侧拆线 | 34606         | 系统资源不足，请联系管理员检查资源配置。                                 |
| 系统异常         | 00606         | 请联系管理员排查。                                            |
| 系统异常         | 34611         | 请联系管理员排查。                                            |
| 系统异常         | 其他            | 请联系管理员排查。                                            |
   
#### 报文样例
- 该接口的请求消息体举例如下：
  ```
  [
      {
          "campaignId": "3",
          "sessionId": "1202_test013",
          "called": "60584",
          "callTimeStr": "2020-08-30 20:00:00",
          "callStatus": 6,
          "failCode": "0",
          "vdnId": 11,
          "callId": "0023-134864174",
          "recordPath": "Y:/1/11/20200830/3408/0949218.V3"
      }
  ]
  ```
  
- 该接口的响应消息体举例如下：
  ```
  { 
      "retCode": "0",
      "retMsg": "success"
  }
  ```
  
 
