订阅回执消息
更新时间:2023-10-30
场景
用户在使用对应模式的X号码过程中,可以通过开启订阅回执消息的功能,来接收对应的话单明细。这里话单明细包含通话话单以及短信话单,一旦用户开启订阅回执消息的功能,在通话结束后或者短信发送后,会将话单以POST请求的方式推送到业务方配置的URL中。
对于通话话单,如果通话包含录音文件时,录音文件的转储需要一定时间,一般可在通话结束后4-5分钟收到话单。
如何配置
在PNS概览页中开启订阅回执消息功能,并设置对应的URL。用户需要保证对应的URL可以正确接收话单明细,并返回正确的响应内容。

在配置对应URL时,我们会模拟一个假话单推送到对应的URL中,如果得到的响应内容中code为非0,则认为用户配置的URL不合法。

话单参数
通话话单参数如下表所示:
| 参数名称 | 类型 | 是否必须 | 参数位置 | 描述 |
|---|---|---|---|---|
| 参数名称 | 类型 | 是否必须 | 参数位置 | 描述 |
| --- | --- | --- | --- | --- |
| ani | String | 是 | RequestBody参数 | 主叫号码 格式:手机或固话座机 |
| bindId | String | 是 | RequestBody参数 | 绑定Id,和绑定接口返回的bindId一致 |
| callDirection | String | 是 | RequestBody参数 | 呼叫类型(0:未知呼叫 1:号码A发起呼叫 2:号码B发起呼叫 3:其它号码发起呼叫,即没有绑定关系的) 格式:1,2 |
| callId | String | 是 | RequestBody参数 | 通话Id |
| customer | Json | 是 | RequestBody参数 | 业务侧随传数据,可以是json和任意字符串 |
| dnis | String | 是 | RequestBody参数 | 被叫号码 格式:手机或固话座机 |
| endState | Integer | 是 | RequestBody参数 | 挂机状态原因 |
| endTime | String | 是 | RequestBody参数 | 挂断时间 格式: yyyy-MM-dd hh:mm:ss |
| endType | String | 是 | RequestBody参数 | 挂机结束方 (0表示平台释放,1表示主叫,2表示被叫) |
| extNo | String | 是 | RequestBody参数 | 分机号(AXE才会有) 格式:"" |
| modeType | String | 是 | RequestBody参数 | AXB、AX等 |
| ringTime | String | 是 | RequestBody参数 | 振铃时间 格式: yyyy-MM-dd hh:mm:ss |
| startTime | String | 是 | RequestBody参数 | 拨打时间 格式: yyyy-MM-dd hh:mm:ss |
| talkingTime | String | 是 | RequestBody参数 | 通话时间 格式: yyyy-MM-dd hh:mm:ss |
| talkingTimeLen | Integer | 是 | RequestBody参数 | 通话时长,单位:秒 |
| telX | String | 是 | RequestBody参数 | X号码 |
| telY | String | 是 | RequestBody参数 | Y号码,预留字段 |
录音通知参数如下所示:
| 参数名称 | 类型 | 是否必须 | 参数位置 | 描述 |
|---|---|---|---|---|
| bindId | String | 是 | RequestBody参数 | 绑定Id,和绑定接口返回的bindId一致 |
| callId | String | 是 | RequestBody参数 | 通话Id |
| customer | Json | 是 | RequestBody参数 | 业务侧随传数据,可以是json和任意字符串 |
| modeType | String | 是 | RequestBody参数 | AXB、AX等 |
| recUrl | String | 是 | RequestBody参数 | 录音地址 格式:字符串 |
短信话单参数如下所示:
| 参数名称 | 类型 | 是否必须 | 参数位置 | 描述 |
|---|---|---|---|---|
| modeType | String | 是 | RequestBody参数 | AXB、AX等 |
| bindId | String | 是 | RequestBody参数 | 绑定Id,和绑定接口返回的bindId一致 |
| smsSender | String | 是 | RequestBody参数 | 短信发送者号码 |
| smsReceiver | String | 是 | RequestBody参数 | 短信接收者号码 |
| telX | String | 是 | RequestBody参数 | X号码 |
| telY | String | 是 | RequestBody参数 | Y号码,预留字段 |
| smsCnt | Integer | 是 | RequestBody参数 | 短信条数,运营商会将长短信拆分为多条短信发送的情况 |
| sendTime | String | 是 | RequestBody参数 | 短信发送时间 格式: yyyy-MM-dd hh:mm:ss |
| endState | Integer | 是 | RequestBody参数 | 结束状态,预留字段 |
| customer | Json | 是 | RequestBody参数 | 业务侧随传数据,可以是json和任意字符串 |
请求头域
| 参数名 | 描述 |
|---|---|
| Content-Type | application/json; charset=utf-8 |
响应头域
响应头期望如下:
| 参数名 | 描述 |
|---|---|
| Content-Type | application/json; charset=utf-8 |
响应参数
在话单推送到对应的URL后,期望能给出如下响应:
| 参数名称 | 类型 | 描述 |
|---|---|---|
| code | Integer | 0表示成功 |
| msg | String | 错误消息 |
挂机状态
在推送通话话单中存在挂机状态码字段,状态码对应关系如下表格所示:
| 状态码 | 描述 |
|---|---|
| 1 | 主叫挂机 |
| 2 | 被叫挂机 |
| 3 | 主叫放弃 |
| 4 | 被叫无应答 |
| 5 | 被叫忙 |
| 6 | 被叫不可及 |
| 7 | 路由失败 |
| 8 | 中间号状态异常 |
| 9 | 订单超过有效期 |
| 10 | 平台系统异常 |
| 11 | 关机 |
| 12 | 停机 |
| 13 | 拒接 |
| 14 | 空号 |
| 15 | 无路由到指定的转接网 |
| 16 | 无路由到目的地 |
| 17 | 发送专用信息音 |
| 18 | 正常的呼叫拆线 |
| 19 | 用户未响应 |
| 20 | 用户缺席 |
| 21 | 呼叫拒收 |
| 22 | 号码改变 |
| 23 | 无效的号码格式 |
| 24 | 性能拒绝 |
| 25 | 正常—未指定类别 |
| 26 | 无电路/通路可用 |
| 27 | 交换设备拥塞类别 |
| 28 | 所请求的性能未预定 |
| 29 | CUG中限制去呼叫 |
| 30 | CUG中限制来呼叫 |
| 31 | 承载能力无权 |
| 32 | 承载能力目前不可用 |
| 33 | 承载能力未实现 |
| 34 | 所请求的性能未实现 |
| 35 | 被叫用户不是CUG的成员 |
| 36 | 不兼容的目的地 |
| 37 | 不存在的CUG |
| 38 | 无效的转接网选择 |
| 39 | 无效的消息,未指定 |
| 40 | 消息类型不存在或未实现 |
| 41 | 参数不存在或未实现 |
| 42 | 定时器终了时恢复 |
| 43 | 参数不存在或未实现—传递 |
| 44 | 消息带有未被识别的参数—舍弃 |
| 45 | 协议错误,未指定 |
| 46 | 互通,未指定类 |
| 47 | 用户忙,MSRN获取失败,平台挂机 |
| 48 | 用户去活,平台挂机 |
| 49 | 用户在平台侧关机,平台挂机 |
| 50 | 用户未开户,平台挂机 |
| 51 | 小号不允许呼叫,平台挂机 |
| 52 | 主号拨打小号,平台挂机 |
| 53 | 主叫打小号带原始被叫,平台挂机 |
| 54 | 拦截呼叫 |
| 55 | 接口返回失败 |
| 56 | 响应超时 |
| 57 | http请求失败 |
| 58 | 主动终止 |
| 59 | 呼叫被终止 |
| 60 | 呼叫被禁止,比如被叫位于黑名单中 |
推送示例
通话话单推送示例如下:
Plain Text
1POST 业务方URI HTTP/1.1
2Host: 业务方URL
3Content-Type: application/json; charset=utf-8
4{
5 "ani": "a号码",
6 "bindId": "绑定id",
7 "callDirection": 1,
8 "callId": "话单id",
9 "customer": "{\"leadsId\":12482733,\"primarySourceChannel\":1010001}",
10 "dnis": "b号码",
11 "endState": 2,
12 "endTime": "2023-10-29 12:00:26",
13 "endType": "2",
14 "extNo": "",
15 "modeType": "AXB",
16 "ringTime": "",
17 "startTime": "2023-10-29 11:59:54",
18 "talkingTime": "2023-10-29 12:00:14",
19 "talkingTimeLen": 12,
20 "telX": "x号码",
21 "telY": ""
22}
录音通知参数如下所示:
Plain Text
1{
2 "bindId": "0000045425265246462",
3 "callId": "0001413523652362634634634",
4 "customer": "",
5 "modeType": "AXB",
6 "recUrl": "http://bj.bcebos.com/v1/cp-privacy/2/2023/10/29/022352353465346_1698552026926.wav?authorization=bce-auth-v1%2FALTAKqIs99ATjxwpr72jganFsC%2F2023-10-29T04%3A00%3A29Z%2F-1%2F%2sfa"
7}
短信话单推送示例如下:
Plain Text
1POST 业务方URI HTTP/1.1
2Host: 业务方URL
3Content-Type: application/json; charset=utf-8
4{
5 "modeType": "AXB",
6 "bindId": "042019082317021",
7 "smsSender": "13700001111",
8 "smsReceiver": "13700001112",
9 "telX": "13700001113",
10 "telY": "",
11 "smsCnt": 2,
12 "sendTime": "2019-12-11 10:10:10",
13 "endState": null,
14 "customer": ""
15}
响应示例
在业务方接收到对应的话单后,期望业务方响应正常,返回code=0。如果返回code非0,我们会认为业务方没有正常接收话单,会有重试的操作,会导致业务方重复接收话单的情况。
Plain Text
1HTTP/1.1 200 OK
2Content-Type: application/json;charset=UTF-8
3{
4 "code": 0,
5 "msg": "消息提示"
6}
