MNS短信推送提供了事件通知功能,支持将短信推送的结果以消息的方式异步通知给用户。用户可以通过创建事件通知的规则,来指定在短信推送过程中触发不同的事件时,将短信推送的结果消息推送到对应的接收端中。
可以解决的问题:
- 异步获取短信推送的结果,再根据业务需求进行相应的处理,比如重新发送
- 对于大批量的短信通知场景,可异步统计推送情况
- 可以自动处理结果消息,对推送情况进行监控,比如发生突发的频繁消息推送,可以第一时间知晓
- 结果消息可以通过多种方式推送到不同的接收端(可能有多个业务部门均关心该数据),以进行不同的统计处理
- 如果A将发送短信的权限授予B,A可以通过该方式来知晓B发送短信的情况。
示意图:
(一)事件通知规则组成
事件通知规则由两部分组成:
(1)事件类型事件通知是按区域提供服务的,在创建规则时,关注某个(些)事件就是指关心这个区域的短信推送过程中产生的所有该类型事件。短信推送的事件分为如下三种:
(2)消息接收终端创建规则时,消息的接收终端可以有两种设置方式:
- 指定接收消息的Http服务或者MNS的队列:此时系统会自动帮忙创建一个主题,并且以指定的Http服务或者MNS队列作为Endpoint,创建相应的订阅。(如果实现没有主题,建议使用这种方式)
- 直接指定主题:此时,规则匹配时,消息就会发布到主题中(此时用户可以选择已有的主题,或者先创建主题,再选择某个主题。如果用户指定了不存在的主题,消息是没办法正常推送的)。然后用户可以在该主题上创建订阅,指定通过何种方式将消息推送到指定的接收端。注:不要选择短信专用的主题(sms.xxx)作为消息接收端,短信专用Topic仅支持短信推送。
- 如果创建规则时,直接选择主题,只能选择一个。
注:
事件通知规则指定消息接收端时,可以指定多个。需要注意的是,
选择“主题”,与选择其他的接收终端是互斥的。即,如果选择了“主题”,那只能选择这一个主题;如果选择了“非主题”的终端,那只能选择非主题的终端。
补充:
- 消息通知是基于MNS的主题实现的,支持多种推送方式,具体可参考:here。
- 接收消息的Http服务搭建可参考:说明,SDK示例。
- 从对应的队列中获取通知消息的方式可参考:here。
(二)短信推送异步通知消息
短信推送的结果消息如下:
(1)发送成功:
包括如下字段:
- [backcolor=transparent]messageID[backcolor=transparent]=[backcolor=transparent]$messageID[backcolor=transparent]&[backcolor=transparent]receiver[backcolor=transparent]=[backcolor=transparent]$number[backcolor=transparent]&[backcolor=transparent]state[backcolor=transparent]=[backcolor=transparent]$state[backcolor=transparent]&[backcolor=transparent]biz_id[backcolor=transparent]=[backcolor=transparent]$id[backcolor=transparent]&[backcolor=transparent]template_code[backcolor=transparent]=[backcolor=transparent]$code[backcolor=transparent]&[backcolor=transparent]sms_count[backcolor=transparent]=[backcolor=transparent]$count[backcolor=transparent]&[backcolor=transparent]receive_time[backcolor=transparent]=[backcolor=transparent]$time[backcolor=transparent]&[backcolor=transparent]ver[backcolor=transparent]=[backcolor=transparent]$ver[backcolor=transparent]&[backcolor=transparent]event[backcolor=transparent]=[backcolor=transparent]$event
示例:
- [backcolor=transparent]messageID[backcolor=transparent]=[backcolor=transparent]23B500FASF59CA1B[backcolor=transparent]-[backcolor=transparent]1[backcolor=transparent]-[backcolor=transparent]15B5567FC70[backcolor=transparent]-[backcolor=transparent]200000009[backcolor=transparent]&[backcolor=transparent]receiver[backcolor=transparent]=[backcolor=transparent]12345678901[backcolor=transparent]&[backcolor=transparent]state[backcolor=transparent]=[backcolor=transparent]1[backcolor=transparent]&[backcolor=transparent]biz_id[backcolor=transparent]=[backcolor=transparent]103245234562[backcolor=transparent]^[backcolor=transparent]1324561234567[backcolor=transparent]&[backcolor=transparent]template_code[backcolor=transparent]=[backcolor=transparent]SMS_12346789[backcolor=transparent]&[backcolor=transparent]sms_count[backcolor=transparent]=[backcolor=transparent]1[backcolor=transparent]&[backcolor=transparent]receive_time[backcolor=transparent]=[backcolor=transparent]2017[backcolor=transparent]-[backcolor=transparent]03[backcolor=transparent]-[backcolor=transparent]31[backcolor=transparent] [backcolor=transparent]11[backcolor=transparent]:[backcolor=transparent]28[backcolor=transparent]:[backcolor=transparent]19[backcolor=transparent]&[backcolor=transparent]ver[backcolor=transparent]=[backcolor=transparent]1.0[backcolor=transparent]&[backcolor=transparent]event[backcolor=transparent]=[backcolor=transparent]SendSuccessfully
(2)发送失败
包括如下字段:
注:err_code包括了两部分:“请求报错”和“运营商给的报错”:
(2.1)发送多个手机号时,模板或签名错,分别返回多个异步信息,包含手机号的。
- [backcolor=transparent]messageID[backcolor=transparent]=[backcolor=transparent]$messageID[backcolor=transparent]&[backcolor=transparent]receiver[backcolor=transparent]=[backcolor=transparent]$number[backcolor=transparent]&[backcolor=transparent]state[backcolor=transparent]=[backcolor=transparent]$state[backcolor=transparent]&[backcolor=transparent]err_code[backcolor=transparent]=[backcolor=transparent]$code[backcolor=transparent]&[backcolor=transparent]event[backcolor=transparent]=[backcolor=transparent]$event
示例:
- [backcolor=transparent]messageID[backcolor=transparent]=[backcolor=transparent]23B522F13F59CA1B[backcolor=transparent]-[backcolor=transparent]1[backcolor=transparent]-[backcolor=transparent]15B887C54B3[backcolor=transparent]-[backcolor=transparent]20000000A[backcolor=transparent]&[backcolor=transparent]receiver[backcolor=transparent]=[backcolor=transparent]11234567890[backcolor=transparent]&[backcolor=transparent]state[backcolor=transparent]=[backcolor=transparent]2[backcolor=transparent]&[backcolor=transparent]err_code[backcolor=transparent]=[backcolor=transparent]InvalidTemplateCode[backcolor=transparent].[backcolor=transparent]Malformed[backcolor=transparent]|[backcolor=transparent]The[backcolor=transparent] specified templateCode [backcolor=transparent]is[backcolor=transparent] wrongly formed[backcolor=transparent].&[backcolor=transparent]event[backcolor=transparent]=[backcolor=transparent]SendFailed
(2.2)如果是账号类型错误只会返回一条异步信息,不包含手机号。
- [backcolor=transparent]messageID[backcolor=transparent]=[backcolor=transparent]$messageID[backcolor=transparent]&[backcolor=transparent]state[backcolor=transparent]=[backcolor=transparent]$state[backcolor=transparent]&[backcolor=transparent]err_code[backcolor=transparent]=[backcolor=transparent]$account_err_code[backcolor=transparent]&[backcolor=transparent]event[backcolor=transparent]=[backcolor=transparent]$event
示例:
- [backcolor=transparent]messageID[backcolor=transparent]=[backcolor=transparent]23B500F19959CA1B[backcolor=transparent]-[backcolor=transparent]1[backcolor=transparent]-[backcolor=transparent]15B212E97C0[backcolor=transparent]-[backcolor=transparent]20000000B[backcolor=transparent]&[backcolor=transparent]state[backcolor=transparent]=[backcolor=transparent]2[backcolor=transparent]&[backcolor=transparent]err_code[backcolor=transparent]=[backcolor=transparent]InvalidUserStatus[backcolor=transparent].[backcolor=transparent]Malformed[backcolor=transparent]|[backcolor=transparent]The[backcolor=transparent] specified user status [backcolor=transparent]is[backcolor=transparent] wrongly formed[backcolor=transparent].&[backcolor=transparent]event[backcolor=transparent]=[backcolor=transparent]SendFailed
(3)回复消息
包括如下字段:
- [backcolor=transparent]sender[backcolor=transparent]=[backcolor=transparent]$sender[backcolor=transparent]&[backcolor=transparent]content[backcolor=transparent]=[backcolor=transparent]$content[backcolor=transparent]&[backcolor=transparent]receive_time[backcolor=transparent]=[backcolor=transparent]$time[backcolor=transparent]&[backcolor=transparent]extend_code[backcolor=transparent]=[backcolor=transparent]$code[backcolor=transparent]&[backcolor=transparent]ver[backcolor=transparent]=[backcolor=transparent]$ver[backcolor=transparent]&[backcolor=transparent]event[backcolor=transparent]=[backcolor=transparent]$event
示例:
- [backcolor=transparent]sender[backcolor=transparent]=[backcolor=transparent]8611234567890[backcolor=transparent]&[backcolor=transparent]content[backcolor=transparent]=刚才没开回信&[backcolor=transparent]receive_time[backcolor=transparent]=[backcolor=transparent]20170331132401[backcolor=transparent]&[backcolor=transparent]extend_code[backcolor=transparent]=[backcolor=transparent]111[backcolor=transparent]&[backcolor=transparent]ver[backcolor=transparent]=[backcolor=transparent]1.0[backcolor=transparent]&[backcolor=transparent]event[backcolor=transparent]=[backcolor=transparent]ReplyMessage
(三)注意事项:
- 事件通知规则创建完,约10分钟左右生效
- 事件通知规则创建时,选择“主题”,与选择其他的接收终端是互斥的。即,如果选择了“主题”,那只能继续选择“主题”;如果选择了“非主题”的终端,那只能选择非主题的终端。
- 事件通知规则创建时,选择“主题”作为接收终端时,只能选择一个。
- 事件通知规则创建时,选择“主题”作为终端时,不能选择短信专用的主题(sms.xxx)。
- 事件通知规则创建时,如果选择“主题”作为接收终端时,用户需要自己去创建对应的订阅,定义自己的推送(消费)方式。
- 事件通知规则创建时,如果选择“非主题”作为接收终端时,会自动创建主题和对应的订阅。
- 事件通知规则支持创建和删除,暂时不支持修改
(四)操作方式
(1)创建事件通知规则
(1.1)进入短信概览页
(1.2)选择主题作为接收终端
(1.3)选择“非主题”作为接收终端
(2)查看事件通知规则
(2.1)事件通知规则列表
(2.2)事件通知规则细节
(3)接收异步通知消息(队列)
当通过SDK发布一条消息后,可以根据对应事件规则中的描述,到指定的消息接收终端查看消息。比如创建规则时,指定将消息发送到队列中,那就可以在控制台中,直接到对应的队列中查询消息内容;如果是指定发送到用户的HTTP服务器上,用户的HTTP服务器会收到具体的推送消息(可参考:
说明,
SDK示例)。
(3.1)如果创建规则时,选择的是主题,需要自行去创建订阅以及队列(已经有对应的订阅和队列的话,则跳过)
(3.1.1)创建队列
(3.1.1.1)进入队列标签页
(3.1.1.2)创建队列
(3.1.2)创建主题
(3.1.2.1)进入主题标签页
(3.1.2.2)创建主题
(3.1.3)创建订阅
(3.1.3.1)进入主题标签页
(3.1.3.2)进入订阅标签页
(3.1.3.3)创建订阅
(3.2)如果创建规则时,选择的是队列,则只需要自行创建队列即可(已有对应的队列,则跳过)
(3.2.1)进入队列标签页
(3.2.2)创建队列
(3.3)从队列中接收消息
(3.3.1)进入队列标签页
(3.3.2)接收消息
补充说明:使用SDK从对应Queue中接收异步回调结果消息的示例代码可参考: