简介
当您使用短信的API接口发送短信后,可以通过使用MNS的Queue模型来接收短信的回执消息,假如服务出现异常情况时(如网络问题),导致消息回执未成功获取,还可以通过短信发送记录查询API接口进行一定的补偿(目前支持30天内发送记录的查询,可查询一天的发送数据)。
消息的订阅
- 云通信的所有业务消息都用过MNS消息服务向外发送。用户每订阅一个类别的消息(比如上行短信消息SmsUp),系统都会为用户分配一个独立的消息队列。
- 用户可以通过阿里云账号拿到一个临时的token用于获取队列中的消息。用户可以下载demo,编写简单的消息处理类即可完成消息处理的任务。
- 在页面上订阅消息,订阅完消息后,能拿到消息队列名称(queueName)。比如:Alicom-Queue-xxxxxx-SmsReport 。队列名字每个用户都不同。
消息类型
短信提供2种消息类型SmsReport(短信回执报告消息) 和 SmsUp(上行短信消息)
- 通过订阅SmsReport短信状态报告,可以获知每条短信的发送情况,了解短信是否达到终端用户的状态与相关信息
- 通过订阅SmsUp上行短信消息,可以获知终端用户回复短信的内容
短信回执消息SmsReport消息体格式
上行短信消息SmsUp
技术对接步骤
下载消息SDK
下载对应语音的消息DEMO工程,工程所需要的所有依赖jar包都放在DEMO工程的lib目录下,将对于的jar包引入到您的工程当中既可按照DEMO样例编写接收消息的程序。
SDK&DEMO[
下载地址]<pre style='background: rgb(246, 246, 246); font: 12px/1.6 "YaHei Consolas Hybrid", Consolas, "Meiryo UI", "Malgun Gothic", "Segoe UI", "Trebuchet MS", Helvetica, monospace, monospace; padding: 10px; outline: 0px; border-radius: 3px; border: 1px solid rgb(221, 221, 221); color: rgb(51, 51, 51); text-transform: none; text-indent: 0px; letter-spacing: normal; overflow: auto; margin-top: 0px; margin-right: 0px; margin-bottom: 0px !important; margin-left: 0px; word-spacing: 0px; white-space: pre-wrap; word-wrap: break-word; box-sizing: border-box; orphans: 2; widows: 2; font-size-adjust: none; font-stretch: normal; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;' prettyprinted?="" linenums="">
- /**
- * 只能用于接收云通信的消息,不能用于接收其他业务的消息
- */
- 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 phoneNumber=(String)contentMap.get("phone_number");
- Boolean success=(Boolean)contentMap.get("success");
- String bizId=(String)contentMap.get("biz_id");
- String outId=(String)contentMap.get("out_id");
- String sendTime=(String)contentMap.get("send_time");
- String reportTime=(String)contentMap.get("report_time");
- String errCode=(String)contentMap.get("err_code");
- String errMsg=(String)contentMap.get("err_msg");
- //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="SmsReport";//短信回执:SmsReport,短信上行:SmsUp
- String queueName="yourQueueName";//在云通信页面开通相应业务消息后,就能在页面上获得对应的queueName
- puller.startReceiveMsg(accessKeyId,accessKeySecret ,messageType,queueName , new MyMessageListener());
- }
- }