当您使用语音的API接口发送外呼后,可以通过使用MNS的Queue模型来接收语音的回执消息。

消息类型

融合通信提供的消息类型:呼叫录音消息(VoiceRecordReport)

消息发送模式

  • MNS消息队列消费模式云通信的所有业务消息都支持NS消息服务向外发送。用户在控制台启用MNS消息服务订阅指定的消息类型(MessageType)时,系统会自动生成该类型的独立消息队列及名称(QueueName)。用户可使用此消息队列名称(QueueName)和消息类型(MessageType),通过阿里云AccessKey信息消息回执API说明
  • HTTP批量推送模式在控制台设置HTTP回调URL(callback_url)后,在业务消息产生时,系统会使用HTTP请求以POST方式将业务消息发送到指定的回调URL上,用户可直接接收此消息。

开启消息接收

如果需要接受回执消息,必须先在控制台上开启消息接收。

  1. 登录语音服务控制台
  2. 在左侧导航栏单击通用管理
  3. 订阅回执消息页签中,找到需要订阅的消息类型,并开启指定模式。
    • MNS消息队列消费模式通过MNS的Queue模型来接收回执消息。开启MNS消息队列消费模式左侧的功能开关即可。MNS
    • HTTP批量推送模式表示通过 HTTP POST 方式发送消息到指定的 Web URL。

      1.开启HTTP批量推送模式左侧的功能开关。

      2.设置响应信息。

      3.填写接收地址,并单击保存。地址示例:http://push.example.com/***/receive.do

      HTTP

订阅录音记录消息(VoiceRecordReport)

订阅录音记录消息(VoiceRecordReport),可以在通话结束后获取通话的录音记录。

返回参数

名称 类型 描述 示例
call_id String 呼叫ID 100001616500^100001871490
start_time String 通话开始时间,未接通则为空 2017-06-01 10:00:00
end_time String 通话结束时间,未接通则为空 2017-06-01 10:00:00
duration Integer 通话时长,未接通为0 10
status_code String 呼叫结果状态码,状态码说明请查看呼叫状态码 200010
record_file String 录音文件URL http://xxx
out_id String channelId,即一通通话的唯一id 123456
record_begin_time String 录音开始时间 2017-06-01 10:00:00

示例代码

/**
 * 只能用于接收云通信的消息,不能用于接收其他业务的消息
 */
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 startTime=(String)contentMap.get("start_time");
                String endTime=(String)contentMap.get("end_time");
                String duration=(String)contentMap.get("duration");
                String statusCode=(String)contentMap.get("status_code");
                String statusMsg=(String)contentMap.get("status_msg");
                String outId=(String)contentMap.get("out_id");
                String dtmf=(String)contentMap.get("dtmf");
                //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="VoiceReport"; //注意替换成你自己需要获取的消息的类型
        String queueName="yourQueueName";//在云通信页面开通相应业务消息后,就能在页面上获得对应的queueName
        puller.startReceiveMsg(accessKeyId,accessKeySecret ,messageType,queueName, new MyMessageListener());
    }
}