开发者社区> 问答> 正文

短信消息API---JAVA



简介


当您使用短信的API接口发送短信后,可以通过使用MNS的Queue模型来接收短信的回执消息,假如服务出现异常情况时(如网络问题),导致消息回执未成功获取,还可以通过短信发送记录查询API接口进行一定的补偿(目前支持30天内发送记录的查询,可查询一天的发送数据)。

消息的订阅

  • 云通信的所有业务消息都用过MNS消息服务向外发送。用户每订阅一个类别的消息(比如上行短信消息SmsUp),系统都会为用户分配一个独立的消息队列。
  • 用户可以通过阿里云账号拿到一个临时的token用于获取队列中的消息。用户可以下载demo,编写简单的消息处理类即可完成消息处理的任务。
  • 在页面上订阅消息,订阅完消息后,能拿到消息队列名称(queueName)。比如:Alicom-Queue-xxxxxx-SmsReport 。队列名字每个用户都不同。


消息类型


短信提供2种消息类型SmsReport(短信回执报告消息) 和 SmsUp(上行短信消息)
  • 通过订阅SmsReport短信状态报告,可以获知每条短信的发送情况,了解短信是否达到终端用户的状态与相关信息
  • 通过订阅SmsUp上行短信消息,可以获知终端用户回复短信的内容


短信回执消息SmsReport消息体格式

名称类型描述示例
phone_numberString短信接收号码13000000000
successBoolean发送是否成功true
biz_idString发送回执ID1234^345
out_idString调用发送短信接口时传的outId123456
send_timeString转发给运营商的时间2017-06-01 10:00:00
report_timeString收到运营商回执的时间2017-06-01 10:00:05
err_codeString错误码UNKNOW
err_msgString错误信息未知异常
sms_sizeString140字节算一条短信,短信长度超过140字节时会拆分成多条短信发送1,2,3


上行短信消息SmsUp

名称类型描述示例
phone_numberString短信接收号码13000000000
contentString短信内容true
send_timeString时间20150101120000
dest_codeString扩展码123456
sequence_idDouble消息序列ID123456


技术对接步骤



下载消息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="">
  1. /**
  2. * 只能用于接收云通信的消息,不能用于接收其他业务的消息
  3. */
  4. public class ReceiveAlicomMsgDemo {
  5.     private static Log logger=LogFactory.getLog(ReceiveAlicomMsgDemo.class);
  6.     //以短信回执消息处理为例
  7.     static class MyMessageListener implements MessageListener{
  8.         private Gson gson=new Gson();
  9.         @Override
  10.         public boolean dealMessage(Message message) {
  11.             System.out.println("message handle: " + message.getReceiptHandle());
  12.             System.out.println("message body: " + message.getMessageBodyAsString());
  13.             System.out.println("message id: " + message.getMessageId());
  14.             System.out.println("message dequeue count:" + message.getDequeueCount());
  15.             //以短信回执消息处理为例
  16.             try{
  17.                 Map<String,Object> contentMap=gson.fromJson(message.getMessageBodyAsString(), HashMap.class);
  18.                 String phoneNumber=(String)contentMap.get("phone_number");
  19.                 Boolean success=(Boolean)contentMap.get("success");
  20.                 String bizId=(String)contentMap.get("biz_id");
  21.                 String outId=(String)contentMap.get("out_id");
  22.                 String sendTime=(String)contentMap.get("send_time");
  23.                 String reportTime=(String)contentMap.get("report_time");
  24.                 String errCode=(String)contentMap.get("err_code");
  25.                 String errMsg=(String)contentMap.get("err_msg");
  26.                 //TODO 这里开始写业务代码
  27.             }catch(com.google.gson.JsonSyntaxException e){
  28.                logger.error("error_json_format:"+message.getMessageBodyAsString(),e);
  29.             }
  30.             Boolean dealResult=true;
  31.             return dealResult;//返回true,则工具类自动删除已拉取的消息。
  32.         }
  33.     }
  34.     public static void main(String[] args) throws com.aliyuncs.exceptions.ClientException, ParseException {
  35.         DefaultAlicomMessagePuller puller=new DefaultAlicomMessagePuller();
  36.         String accessKeyId="yourAccessKeyId";
  37.         String accessKeySecret="yourAccessKeySecret";
  38.         String messageType="SmsReport";//短信回执:SmsReport,短信上行:SmsUp
  39.         String queueName="yourQueueName";//在云通信页面开通相应业务消息后,就能在页面上获得对应的queueName
  40.         puller.startReceiveMsg(accessKeyId,accessKeySecret ,messageType,queueName , new MyMessageListener());
  41.     }
  42. }

展开
收起
nicenelly 2017-10-25 11:39:14 2226 0
0 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载