阿里云首页

回执消息-队列方式

本文为您详细介绍隐私号码服务回执消息的队列方式。

简介

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

消息的订阅

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

消息类型

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

出参列表

名称

类型

描述

示例

是否必须

pool_key

String

对应的号池Key。

FC1234567

必须

sub_id

Long

通话对应的设备证书(ProductKey、DeviceName、DeviceSecret)的绑定关系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:短信收发拦截

0

必须

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:短信收发拦截

0

必须

call_time

String

主叫拨打时间。

"2017-09-01 12:00:00"

必须

start_time

String

被叫接听时间。

"2017-09-01 12:01:00"

必须

call_out_time

String

呼叫由X送给B端局的时间。

"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:下行

1

必须

消息类型

录音完成事件消息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

下载对应语音的消息DEMO工程,工程所需要的所有依赖jar包都放在DEMO工程的lib目录下,将对于的jar包引入到您的工程当中既可按照DEMO样例编写接收消息的程序。

SDK&DEMO下载,请参见下载地址

样例

/**
 * 只能用于接收云通信的消息,不能用于接收其他业务的消息
 */
public class ReceiveAlicomMsgDemo {
        private static Log logger=LogFactory.getLog(ReceiveAlicomMsgDemo.class);
        static class MyMessageListener implements MessageListener{
                private Gson gson=new Gson();
                @Override
                public boolean dealMessage(Message message) {
                        System.out.println("message handle: " + message.getReceiptHandle());
            System.out.println("message body: " + message.getMessageBodyAsString());
            System.out.println("message id: " + message.getMessageId());
            System.out.println("message dequeue count:" + message.getDequeueCount());
            try{
                    Map<String,Object> contentMap=gson.fromJson(message.getMessageBodyAsString(), HashMap.class);
                String callId=(String)contentMap.get("call_id");                
                String phoneNo=(String)contentMap.get("phone_no");
                String secretNo=(String)contentMap.get("secret_no");
                //TODO 这里开始写业务代码
            }catch(com.google.gson.JsonSyntaxException e){
                    logger.error("error_json_format:"+message.getMessageBodyAsString(),e);
            }
            Boolean dealResult=true;
                        return dealResult;//返回true,则工具类自动删除已拉取的消息。
                }
        }
        public static void main(String[] args) throws com.aliyuncs.exceptions.ClientException, ParseException {
                DefaultAlicomMessagePuller puller=new DefaultAlicomMessagePuller();
                String accessKeyId="yourAccessKeyId";
                String accessKeySecret="yourAccessKeySecret";
                //此处替换成您所需的消息类型名称
                String messageType="SecretReport";
                String queueName="Alicom-queue-xxxxxx-SecretReport";//在云通信页面开通相应业务消息后,就能在页面上获得对应的queueName
                puller.startReceiveMsg(accessKeyId,accessKeySecret ,messageType,queueName , new MyMessageListener());
    }
}
                        
首页 回执消息-队列方式