当您使用融合通信服务时,可以通过使用MNS的Queue模型来接收通话的回执消息。

消息的订阅

云通信的所有业务消息都会通过MNS消息服务向外发送。目前融合通信服务支持的消息类型有:ArtcCdrReport(呼叫话单消息)。

注意 以上消息类型需要 消息队列名称,获取名称请联系您的客户经理。

请按照以下步骤完成消息接收:

  1. 替换您自己的AK与SK。
  2. 设置相应的消息类型与消息队列名称。
  3. 启动应用开始接收消息。
说明 不同类型的消息返回的消息体内包含的字段是不一样的,您需要依据订阅的消息类型做适当修改。

消息类型

呼叫话单消息

消息类型为:ArtcCdrReport,您可以通过订阅这个消息获取呼叫的话单信息,包括通话时长,通话发起时间,结束时间等。

点对点消息体格式

名称 类型 示例值 描述
detail struct - 话单消息明细
callInInfo struct - 呼入信息
callOutInfo struct - 呼出信息
channelId String amdc7a6a9ds90sad0a 一次通话过程唯一Id
startTime String 2017-06-01 10:00:00 通话开始时间,未接通没有开始时间
endTime String 2017-06-01 10:01:00 通话结束时间,未接通则为空
duration String 60 通话时长,未接通为0
caller String 20000000000000001 主叫用户ID
callee String 20000000000000002 被叫用户ID
alicomRtcType String voip2voip 通话类型,当前类型有:voip2voip,video2video等
extend String 123456 扩展字段

示例代码

{
  "detail":{
    "callInInfo":{ #呼入信息
      "caller":"20000000000000001", #呼入主叫
      "callee":"20000000000000002", # 被叫
      "startTime":"2017-06-01 10:00:00",#开始时间
      "endTime":"2017-06-01 10:01:00", #结束时间
      "duration":"60" #呼叫持续时间
    },
    "callOutInfo":[
      { #呼出信息
      "caller":"20000000000000001", #呼出主叫
      "callee":"20000000000000002", # 呼出被叫
      "startTime":"2017-06-01 10:00:00",#开始时间(未接通没有开始时间)
      "endTime":"2017-06-01 10:01:00", #结束时间
      "duration":"60" #呼叫持续时间
    },
    {
      "caller":"20000000000000001", #呼出主叫
      "callee":"20000000000000002", # 被叫
      "startTime":"2017-06-01 10:00:00",#开始时间,(未接通没有开始时间)
      "endTime":"2017-06-01 10:01:00", #结束时间
      "duration":"60" #呼叫持续时间
    }
    ]
  }
}

集成步骤

下载消息SDK

下载融合通信对应的消息DEMO工程,工程所依赖的jar包都放在lib目录下,将对应的jar包引入到您的工程中即可编写接收消息的程序。

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 uuid=(String)contentMap.get("uuid");
                //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="ArtcCdrReport"; //注意替换成您需要获取的消息类型
        String queueName="yourQueueName";//联系您的客户经理获取queueName
        puller.startReceiveMsg(accessKeyId,accessKeySecret ,messageType,queueName, new MyMessageListener());
    }
}