订阅回执消息
更新时间: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 | 呼叫被禁止,比如被叫位于黑名单中 |
推送示例
通话话单推送示例如下:
POST 业务方URI HTTP/1.1
Host: 业务方URL
Content-Type: application/json; charset=utf-8
{
"ani": "a号码",
"bindId": "绑定id",
"callDirection": 1,
"callId": "话单id",
"customer": "{\"leadsId\":12482733,\"primarySourceChannel\":1010001}",
"dnis": "b号码",
"endState": 2,
"endTime": "2023-10-29 12:00:26",
"endType": "2",
"extNo": "",
"modeType": "AXB",
"ringTime": "",
"startTime": "2023-10-29 11:59:54",
"talkingTime": "2023-10-29 12:00:14",
"talkingTimeLen": 12,
"telX": "x号码",
"telY": ""
}
录音通知参数如下所示:
{
"bindId": "0000045425265246462",
"callId": "0001413523652362634634634",
"customer": "",
"modeType": "AXB",
"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"
}
短信话单推送示例如下:
POST 业务方URI HTTP/1.1
Host: 业务方URL
Content-Type: application/json; charset=utf-8
{
"modeType": "AXB",
"bindId": "042019082317021",
"smsSender": "13700001111",
"smsReceiver": "13700001112",
"telX": "13700001113",
"telY": "",
"smsCnt": 2,
"sendTime": "2019-12-11 10:10:10",
"endState": null,
"customer": ""
}
响应示例
在业务方接收到对应的话单后,期望业务方响应正常,返回code=0。如果返回code非0,我们会认为业务方没有正常接收话单,会有重试的操作,会导致业务方重复接收话单的情况。
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
{
"code": 0,
"msg": "消息提示"
}