全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 阿里云办公 培训与认证 物联网
消息服务

异步查询短信推送状态

更新时间:2017-06-07 13:26:11   分享:   

MNS短信推送提供了事件通知功能,支持将短信推送的结果以消息的方式异步通知给用户。用户可以通过创建事件通知的规则,来指定在短信推送过程中触发不同的事件时,将短信推送的结果消息推送到对应的接收端中。

可以解决的问题:

  • 异步获取短信推送的结果,再根据业务需求进行相应的处理,比如重新发送
  • 对于大批量的短信通知场景,可异步统计推送情况
  • 可以自动处理结果消息,对推送情况进行监控,比如发生突发的频繁消息推送,可以第一时间知晓
  • 结果消息可以通过多种方式推送到不同的接收端(可能有多个业务部门均关心该数据),以进行不同的统计处理
  • 如果A将发送短信的权限授予B,A可以通过该方式来知晓B发送短信的情况。

示意图:

sms-en-archi

(一)事件通知规则组成

事件通知规则由两部分组成:

  • 事件类型
  • 消息接收终端

(1)事件类型事件通知是按区域提供服务的,在创建规则时,关注某个(些)事件就是指关心这个区域的短信推送过程中产生的所有该类型事件。短信推送的事件分为如下三种:

事件类型 描述
SMSRequest:SendSuccessfully 短信推送成功
SMSRequest:SendFailed 短信推送失败
SMSExtend:ReplyMessage 短信推送回复消息

(2)消息接收终端创建规则时,消息的接收终端可以有两种设置方式:

  • 指定接收消息的Http服务或者MNS的队列:此时系统会自动帮忙创建一个主题,并且以指定的Http服务或者MNS队列作为Endpoint,创建相应的订阅。(如果实现没有主题,建议使用这种方式)
  • 直接指定主题:此时,规则匹配时,消息就会发布到主题中(此时用户可以选择已有的主题,或者先创建主题,再选择某个主题。如果用户指定了不存在的主题,消息是没办法正常推送的)。然后用户可以在该主题上创建订阅,指定通过何种方式将消息推送到指定的接收端。注:
    • 不要选择短信专用的主题(sms.xxx)作为消息接收端,短信专用Topic仅支持短信推送。
    • 如果创建规则时,直接选择主题,只能选择一个。

注:

事件通知规则指定消息接收端时,可以指定多个。需要注意的是,选择“主题”,与选择其他的接收终端是互斥的。即,如果选择了“主题”,那只能选择这一个主题;如果选择了“非主题”的终端,那只能选择非主题的终端。

补充:

  • 消息通知是基于MNS的主题实现的,支持多种推送方式,具体可参考:here
  • 接收消息的Http服务搭建可参考:说明SDK示例
  • 从对应的队列中获取通知消息的方式可参考:here

(二)短信推送异步通知消息

短信推送的结果消息如下:

(1)发送成功:

包括如下字段:

字段名 描述
messageID 消息编号
receiver 接收短信的手机号
state 发送状态(1成功,2失败)
biz_id 编号(可忽略)
template_code 模板code
sms_count 短信条数
receive_time 短信接收的时间
event 触发的事件类型
ver 版本号
  1. messageID=$messageID&receiver=$number&state=$state&biz_id=$id&template_code=$code&sms_count=$count&receive_time=$time&ver=$ver&event=$event

示例:

  1. messageID=23B500FASF59CA1B-1-15B5567FC70-200000009&receiver=12345678901&state=1&biz_id=103245234562^1324561234567&template_code=SMS_12346789&sms_count=1&receive_time=2017-03-31 11:28:19&ver=1.0&event=SendSuccessfully

(2)发送失败

包括如下字段:

字段名 描述
messageID 消息编号
receiver 短信接收号码
state 发送状态(1成功,2失败)
err_code 错误码
event 触发的事件类型

注:err_code包括了两部分:“请求报错”和“运营商给的报错”。

  • 请求错误信息请参考:here
  • 运行商错误信息请参考:here

(2.1)发送多个手机号时,模板或签名错,分别返回多个异步信息,包含手机号的。

  1. messageID=$messageID&receiver=$number&state=$state&err_code=$code&event=$event

示例:

  1. messageID=23B522F13F59CA1B-1-15B887C54B3-20000000A&receiver=11234567890&state=2&err_code=InvalidTemplateCode.Malformed|The specified templateCode is wrongly formed.&event=SendFailed

(2.2)如果是账号类型错误只会返回一条异步信息,不包含手机号。

  1. messageID=$messageID&state=$state&err_code=$account_err_code&event=$event

示例:

  1. messageID=23B500F19959CA1B-1-15B212E97C0-20000000B&state=2&err_code=InvalidUserStatus.Malformed|The specified user status is wrongly formed.&event=SendFailed

(3)回复消息

包括如下字段:

字段名 描述
sender 回复消息的人
content 回复消息的内容
receive_time 回复消息的时间
extend_code 用户定义的扩展CODE
ver 版本号
event 触发的事件类型
  1. sender=$sender&content=$content&receive_time=$time&extend_code=$code&ver=$ver&event=$event

示例:

  1. sender=8611234567890&content=刚才没开回信&receive_time=20170331132401&extend_code=111&ver=1.0&event=ReplyMessage

(三)注意事项:

  • 事件通知规则创建完,约10分钟左右生效
  • 事件通知规则创建时,选择“主题”,与选择其他的接收终端是互斥的。即,如果选择了“主题”,那只能继续选择“主题”;如果选择了“非主题”的终端,那只能选择非主题的终端。
  • 事件通知规则创建时,选择“主题”作为接收终端时,只能选择一个。
  • 事件通知规则创建时,选择“主题”作为终端时,不能选择短信专用的主题(sms.xxx)。
  • 事件通知规则创建时,如果选择“主题”作为接收终端时,用户需要自己去创建对应的订阅,定义自己的推送(消费)方式。
  • 事件通知规则创建时,如果选择“非主题”作为接收终端时,会自动创建主题和对应的订阅。
  • 事件通知规则支持创建和删除,暂时不支持修改

(四)操作方式

(1)创建事件通知规则

(1.1)进入短信概览页

create-1

(1.2)选择主题作为接收终端

create-2

(1.3)选择“非主题”作为接收终端

create-3

(2)查看事件通知规则

(2.1)事件通知规则列表

list-1

(2.2)事件通知规则细节

list-2

(3)接收异步通知消息(队列)

当通过SDK发布一条消息后,可以根据对应事件规则中的描述,到指定的消息接收终端查看消息。比如创建规则时,指定将消息发送到队列中,那就可以在控制台中,直接到对应的队列中查询消息内容;如果是指定发送到用户的HTTP服务器上,用户的HTTP服务器会收到具体的推送消息(可参考:说明SDK示例)。

(3.1)如果创建规则时,选择的是主题,需要自行去创建订阅以及队列(已经有对应的订阅和队列的话,则跳过)

(3.1.1)创建队列

(3.1.1.1)进入队列标签页

create-queue-1

(3.1.1.2)创建队列

create-queue-2

(3.1.2)创建主题

(3.1.2.1)进入主题标签页

create-topic-1

(3.1.2.2)创建主题

create-topic-2

(3.1.3)创建订阅

(3.1.3.1)进入主题标签页

create-sub-1

(3.1.3.2)进入订阅标签页

create-sub-2

(3.1.3.3)创建订阅

create-sub-3

(3.2)如果创建规则时,选择的是队列,则只需要自行创建队列即可(已有对应的队列,则跳过)

(3.2.1)进入队列标签页

create-queue-1

(3.2.2)创建队列

create-queue-2

(3.3)从队列中接收消息

(3.3.1)进入队列标签页

receive-1

(3.3.2)接收消息

receive-2

补充说明:使用SDK从对应Queue中接收异步回调结果消息的示例代码可参考:

本文导读目录
本文导读目录
以上内容是否对您有帮助?