开发者社区> 问答> 正文

消息服务的的短信推送事件如何通知?


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

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

示意图:


(一)事件通知规则组成


事件通知规则由两部分组成:
  • 事件类型
  • 消息接收终端

(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. [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

示例:
  1. [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)发送失败
包括如下字段:
字段名描述
messageID消息编号
receiver短信接收号码
state发送状态(1成功,2失败)
err_code错误码
event触发的事件类型

注:err_code包括了两部分:“请求报错”和“运营商给的报错”:
  • 请求错误信息请参考:here
  • 运行商错误信息请参考:here

(2.1)发送多个手机号时,模板或签名错,分别返回多个异步信息,包含手机号的。
  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

示例:
  1. [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)如果是账号类型错误只会返回一条异步信息,不包含手机号。
  1. [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

示例:
  1. [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)回复消息
包括如下字段:
字段名描述
sender回复消息的人
content回复消息的内容
receive_time回复消息的时间
extend_code用户定义的扩展CODE
ver版本号
event触发的事件类型
  1. [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

示例:
  1. [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中接收异步回调结果消息的示例代码可参考:

展开
收起
轩墨 2017-10-24 11:34:25 2675 0
0 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
消息服务在Serverless中的应用 立即下载
阿里云通信战略新品发布 ——国际/港澳台消息服务 立即下载
阿里云通信战略新品发布—国际/港澳台消息服务 立即下载