全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 钉钉智能硬件

语音回执消息---JAVA

更新时间:2017-11-28 14:47:26

简介

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

消息的订阅

云通信的所有业务消息都会通过MNS消息服务向外发送。目前语音服务支持的消息类型有:VoiceReport,VoiceCallReport,VoiceRecordReport。这三个类型的消息分别对应:呼叫记录消息,呼叫中间状态消息,录音记录消息。用户需要先在控制台订阅对应的消息,订阅完消息后,你能拿到消息队列名称(queueName)。比如:Alicom-Queue-xxxxxx-VoiceReport。现在你可以使用我们提供的消息服务sdk接收消息了。首先替换你自己的accessKeyId与accessKeySecret,然后设置你自己需要获取的消息所对应的消息类型及分配给你的对应消息类型的消息队列,启动应用就可以接收对应的消息了。注意不同类型的消息返回的消息体里面包含的字段是不一样的,用户需要依据自己订阅的消息做适当的修改。

消息类型

一、呼叫记录消息

介绍

消息类型为VoiceReport,你可以通过订阅这个消息获取呼叫的记录信息,包括通话时长,结束原因等。

消息体格式
名称 类型 描述 示例
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 String 通话时长,未接通为0 10
status_code String 呼叫结果状态码 200010
status_msg String 结果描述 执行完成
out_id String 扩展字段回传,将调用api时传入的字段返回 123456
dtmf String DTMF按键 123456

二、呼叫中间状态消息

介绍

消息类型为VoiceCallReport,你可以通过订阅这个消息获取呼叫的的中间状态信息。

消息体格式
名称 类型 描述 示例
call_id String 呼叫ID 100001616500^100001871490
status_code String 呼叫结果状态码 200010
status_time String 状态产生的时间 2017-06-01 10:00:00
out_id String 扩展字段回传,将调用api时传入的字段返回 123456

三、录音记录消息

介绍

消息类型为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 扩展字段回传,将调用api时传入的字段返回 123456

技术对接步骤

下载消息SDK

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

SDK&DEMO[下载地址]

  1. /**
  2. * 只能用于接收云通信的消息,不能用于接收其他业务的消息
  3. */
  4. public class ReceiveAlicomMsgDemo {
  5. private static Log logger=LogFactory.getLog(ReceiveAlicomMsgDemo.class);
  6. static class MyMessageListener implements MessageListener{
  7. private Gson gson=new Gson();
  8. @Override
  9. public boolean dealMessage(Message message) {
  10. System.out.println("message handle: " + message.getReceiptHandle());
  11. System.out.println("message body: " + message.getMessageBodyAsString());
  12. System.out.println("message id: " + message.getMessageId());
  13. System.out.println("message dequeue count:" + message.getDequeueCount());
  14. try{
  15. Map<String,Object> contentMap=gson.fromJson(message.getMessageBodyAsString(), HashMap.class);
  16. //依据自己的消息类型,获取对应的字段
  17. String callId=(String)contentMap.get("call_id");
  18. String startTime=(Boolean)contentMap.get("start_time");
  19. String endTime=(String)contentMap.get("end_time");
  20. String duration=(String)contentMap.get("duration");
  21. String statusCode=(String)contentMap.get("status_code");
  22. String statusMsg=(String)contentMap.get("status_msg");
  23. String outId=(String)contentMap.get("out_id");
  24. String dtmf=(String)contentMap.get("dtmf");
  25. //TODO 这里开始写业务代码
  26. }catch(com.google.gson.JsonSyntaxException e){
  27. logger.error("error_json_format:"+message.getMessageBodyAsString(),e);
  28. }
  29. Boolean dealResult=true;
  30. return dealResult;//返回true,则工具类自动删除已拉取的消息。
  31. }
  32. }
  33. public static void main(String[] args) throws com.aliyuncs.exceptions.ClientException, ParseException {
  34. DefaultAlicomMessagePuller puller=new DefaultAlicomMessagePuller();
  35. String accessKeyId="yourAccessKeyId";
  36. String accessKeySecret="yourAccessKeySecret";
  37. String messageType="VoiceReport"; //注意替换成你自己需要获取的消息的类型
  38. String queueName="yourQueueName";//在云通信页面开通相应业务消息后,就能在页面上获得对应的queueName
  39. puller.startReceiveMsg(accessKeyId,accessKeySecret ,messageType,queueName, new MyMessageListener());
  40. }
  41. }
本文导读目录