全部产品
云市场

回执消息-队列模式

更新时间:2018-12-29 13:49:58

简介

当您使用隐私号码服务绑定一组AXB(或者AXN、以下统一以AXB为代表说明)隐私关系后,可以通过使用MNS的Queue模型来接收话单回执消息,话单回执消息时记录了AXB三元组发生的所有的通话记录行为。

消息的订阅

云通信的所有业务消息都用过MNS消息服务向外发送。用户每订阅一个类别的消息(比如隐私号码话单回执消息(SecretReport),系统都会为用户分配一个独立的消息队列。用户可以通过阿里云账号拿到一个临时的token用于获取队列中的消息。用户可以下载demo,编写简单的消息处理类即可完成消息处理的任务。在页面上订阅消息,订阅完消息后,能拿到消息队列名称(queueName)。比如:Alicom-Queue-xxxxxx-SecretReport 。队列名字每个用户都不同。

消息类型

呼叫发起时话单回执消息SecretStartReport

出参列表
名称 类型 描述 示例 是否必须
pool_key String 对应的号池Key FC1234567 必须
sub_id Long 通话对应的三元组的绑定关系ID 123456 必须
call_id String 唯一标识一通通话记录的ID abcdef1234 必须
phone_no String AXB中的A号码 15000000000 必须
secret_no String AXB中的X号码 1700000000 必须
peer_no String AXB中的B号码或者N号码 1580000000 必须
called_display_no String 被叫显号 1580100000 必须
call_type Interger 呼叫类型 0:主叫(phone_no打给peer_no);1:被叫(peer_no打给phone_no);2:短信发送;3:短信接收; 4:呼叫拦截; 5:短信收发拦截 必须
call_time String 主叫拨打时间 “2017-09-01 12:00:00” 必须
out_id String 外部业务ID 123456 可选

消息类型

通话记录回执消息SecretReport

入参列表
名称 类型 描述 示例 是否必须
pool_key String 对应的号池Key FC1234567 必须
sub_id Long 通话对应的三元组的绑定关系ID 123456 必须
call_id String 唯一标识一通通话记录的ID abcdef1234 必须
phone_no String AXB中的A号码 15000000000 必须
secret_no String AXB中的X号码 1700000000 必须
peer_no String AXB中的B号码或者N号码 1580000000 必须
called_display_no String 被叫显号 1580100000 必须
call_type Interger 呼叫类型 0:主叫(phone_no打给peer_no);1:被叫(peer_no打给phone_no);2:短信发送;3:短信接收; 4:呼叫拦截; 5:短信收发拦截 必须
call_time String 主叫拨打时间 “2017-09-01 12:00:00” 必须
start_time String 被叫接听时间 “2017-09-01 12:01:00” 必须
ring_time String 呼叫送被叫端局时,被叫端局响应的时间 “2017-09-01 12:01:00” 必须
free_ring_time String 被叫手机真实的振铃时间,free_ring_time > call_out_time代表被叫真实发生了振铃事件, 相等代表未振铃 “2017-09-01 12:01:00” 必须
release_time String 被叫挂断时间,release_time - start_time 代表通话时长 如果结果为0,代表呼叫未接通 “2017-09-01 12:02:00” 必须
sms_number Interger 短信长度 “2017-09-01 12:01:00” 可选
release_dir Interger 通话释放方向,0代表平台释放 1代表主叫挂断 2代表被叫挂断 0 必须
out_id String 外部业务ID 123456 可选
release_cause Interger 释放原因
1:未分配的号码
2:无路由到指定的转接网
3:无路由到目的地
4:发送专用信息音
16:正常的呼叫拆线
17:用户忙
18:用户未响应
19:用户未应答
20:用户缺席
21:呼叫拒收
22:号码改变
27:目的地不可达
28:无效的号码格式(地址不全)
29:性能拒绝
31:正常—未指定
34: 无电路/通路可用
42: 交换设备拥塞
50:所请求的性能未预定
53:CUG中限制去呼叫
55: CUG中限制来呼叫
57:承载能力无权
58:承载能力目前不可用
65:承载能力未实现
69:所请求的性能未实现
87:被叫用户不是CUG的成员
88:不兼容的目的地
90:不存在的CUG
91:无效的转接网选择
95:无效的消息,未指定
97:消息类型不存在或未实现
99:参数不存在或未实现
102:定时器终了时恢复
103:参数不存在或未实现—传递
110:消息带有未被识别的参数—舍弃
111:协议错误,未指定
127:互通,未指定
1 可选

消息类型

短信托管报告消息SecretSmsIntercept

入参列表
名称 类型 描述 示例 是否必须
id Number 唯一标识一条短信记录的ID 123456 必须
pool_key String 对应的号池Key FC1234567 必须
sub_id Number 短信对应的三元组的绑定关系ID 123456 必须
send_no String AXB中的A号码 15000000000 必须
secret_no String AXB中的X号码 1700000000 必须
receive_no String AXB中的B号码 1800000000 必须
sms_content String 短信内容 hello world 必须
partner_key String AXB归属合作伙伴KEY 123456 必须
start_time Date 短信发送时间 “2018-01-05 12:01:00” 必须
out_id String 外部业务ID 123456 必须
sms_type Number 短信类型 1:上行 2:下行 必须

消息类型

录音完成事件消息SecretRecording (代表录音已经完成,可以进行下载)

消息结构体说明
名称 类型 描述 示例 是否必须
pool_key String 对应的号池Key FC123456 必须
subs_id Number 对应的三元组的绑定关系ID 123456 必须
call_id String 对应的呼叫记录的call_id ACV-FSAC-DSA 必须
call_time Date 呼叫时间 2018-01-01 11:00:00 必须

技术对接步骤

下载消息SDK

安装@alicloud/pls-sdk,请需要根据官方文档做一些配置

产品文档: https://help.aliyun.com/document_detail/59773.html

号码隐私保护控制台: https://dypls.console.aliyun.com/dypls.htm

Node.js版本 >= v4.6.0

不支持在浏览器上使用

下载点击SDK&DEMO

编写样例程序
  1. /**
  2. * 云通信基础能力业务-号码隐私保护示例,仅供参考。
  3. * Created on 2018-07-27
  4. */
  5. const PLSClient = require('@alicloud/pls-sdk')
  6. // ACCESS_KEY_ID/ACCESS_KEY_SECRET 根据实际申请的账号信息进行替换
  7. const accessKeyId = 'yourAccessKeyId'
  8. const secretAccessKey = 'yourAccessKeySecret'
  9. //在云通信页面开通相应业务消息后,就能在页面上获得对应的queueName
  10. const queueName = 'Alicom-Queue-13635054xxxxxx-SecretReport-100000'
  11. //初始化sms_client
  12. const plsClient = new PLSClient({ accessKeyId, secretAccessKey })
  13. const PoolKey = 'FC100000xxxxxx'
  14. /**
  15. * @param type: 0/1/2 对应 小号呼叫状态回执/录音状态报告接收/短信内容报告接受
  16. * @param queueName 队列名称,必须是type下的队列
  17. * @param waitSeconds 队列等待时间,如果没有删除该消息,过了等待时间后会重新推送
  18. * @param isDel 是否删除消息
  19. */
  20. plsClient.receiveMsg(type,queueName, waitSeconds = 10, isDel = false).then(function (res) {
  21. //消息体需要base64解码
  22. let { code, body } = res
  23. if (code === 200) {
  24. //处理消息体,messagebody
  25. console.log('回执报告:', body)
  26. }
  27. }, function (err) {
  28. console.log('回执报告:', err)
  29. })