全部产品
  • 首页 > 
  • 短信回执消息API

短信回执消息API

简介

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

消息的订阅

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

消息类型

短信提供2种消息类型SmsReport(短信回执报告消息) 和 SmsUp(上行短信消息)

短信回执消息SmsReport消息体格式
名称 类型 描述 示例 是否必须
phone_number String 短信接收号码 13000000000 可选
success Boolean 发送是否成功 true 必须
biz_id String 发送回执ID 1234^345 必须
out_id String 调用发送短信接口时传的outId 123456 可选
send_time String 转发给运营商的时间 2017-06-01 10:00:00 必须
report_time String 收到运营商回执的时间 2017-06-01 10:00:05 可选
err_code String 错误码 UNKNOW 可选
err_msg String 错误信息 未知异常 可选
上行短信消息SmsUp
名称 类型 描述 示例 是否必须
phone_number String 短信接收号码 13000000000 可选
content String 短信内容 true 必须
send_time String 时间 20150101120000 必须
dest_code String 扩展码 123456 必须
sequence_id String 消息序列ID 123456 必须

技术对接步骤

下载消息SDK

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

  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. }