全部产品
阿里云办公

语音回执消息---JAVA

更新时间:2018-08-15 21:26:49

简介

当您使用语音的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
voice_type String 话单类型 voice/asr

二、呼叫中间状态消息

介绍

消息类型为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
双呼呼叫中间状态说明
状态码 状态码说明
200101 开始呼叫主叫
200102 开始呼叫被叫
200201 主叫响铃
200202 被叫响铃
200102 主叫接听
200103 被叫接听
200100 主叫挂机
200100 被叫挂机
单呼呼叫中间状态说明
状态码 状态码说明
200101 开始呼叫
200201 被叫响铃
200102 被叫接听
200100 呼叫结束

四、ASR实时消息

介绍

消息类型为VoiceRTASRReport,你可以通过订阅这个消息获取通话的实时文本转换结果。

消息体格式
名称 类型 描述 示例值
role String 对话内容角色 B
identity String 对话角色的具体身份标识 id2
words String 这个角色说的一句话 你好
begin_offset Integer 相对本次会话起始点的开始时间偏移时间(单位毫秒) 1000
end_offset Integer 相对本次会话起始点的结束时间偏移(单位毫秒) 9000
begin_time String 通话开始时间 2017-06-01 10:00:00
call_id String 呼叫ID 100001616500\^100001871490
out_id String 扩展字段回传,将调用api时传入的字段返回 xxxx

技术对接步骤

下载消息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=(String)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. }
本文导读目录