全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 钉钉智能硬件
消息服务

发布短信消息示例代码

更新时间:2017-06-30 14:31:57

本示例介绍了:如何发布短信消息。

1. 准备

  • 下载最新版python sdk,解压后进入mns_python_sdk子目录;
  • 打开sample.cfg文件,配置AccessKeyID、AccessKeySecret和Endpoint;
    • AccessKeyId、AccessKeySecret
    • Endpoint
      • 访问MNS的接入地址,登陆MNS控制台 单击右上角 获取Endpoint 查看;
      • 不同地域的接入地址不同;
    • SecurityToken
      • 阿里云访问控制服务提供的短期访问权限凭证,直接使用阿里云账号或者子账号访问不需要配置该项,了解详情;

2. 创建主题和订阅

发布短信有两种模式的主题可使用(二者选其一即可):

  • 短信专用主题(推荐)
  • 普通主题

2.1 短信专用主题(推荐,简单)

进入控制台短信概览页,获取主题名称(专用主题和订阅会自动进行创建):

duanxin-gailan

注:图中 sms.topic-cn-hangzhou 即杭州区域的短信专用主题,不同区域对应的主题名不一样(使用时需要注意主题名与选择的Endpoint的一致性)。

2.2 普通主题及订阅(若使用短信专用主题则跳过)

使用普通的主题的话,需要分别创建主题和对应的订阅。

(1)创建主题

注:目前仅华东1、华东2、华北1、华北2、华南1支持短信推送,创建主题必须选择这些区域。

进入控制台主题标签页

create-topic-1

create-topic-2

(2)创建短信推送订阅

create-sub-1

create-sub-2

create-sub-3

3. 发布短信消息

示例需要传入的参数包括:

  • $YourAccessId,阿里云AccessId,可在“步骤一”获取(登陆阿里云 AccessKey 管理页面创建、查看)
  • $YourAccessKey,阿里云AccessKey,可在“步骤一”获取(登陆阿里云 AccessKey 管理页面创建、查看)
  • $YourMNSEndpoint,访问MNS服务的接入地址,可在“步骤一”获取(登陆MNS控制台,单击右上角“获取Endpoint”查看,选择公网地址)
  • $YourTopic,发送短信使用的主题,可在“步骤二”获取,建议使用短信专用主题(进入控制台短信概览页,获取主题名称)
  • $YourSignName,发送短信使用的签名,可在here获取
  • $YourSMSTemplateCode,发送短信使用的模板Code,可在here获取
  • $YourSMSTemplateParamKey1,所指定短信模板中定义的参数名(“{}”中的内容),没有可不指定;可在here查看模板中的变量,注:key 和 value 都必须是字符串形式duanmo-1duanmo-2
  • $YourReceiverPhoneNumber1,接收短信的手机号码

示例代码如下:

  1. '''
  2. Step 1. 获取主题引用
  3. '''
  4. # 从https://account.console.aliyun.com/#/secure获取$YourAccountid
  5. # 从https://ak-console.aliyun.com/#/accesskey获取$YourAccessId和$YourAccessKey
  6. # 从http://$YourAccountId.mns.cn-hangzhou.aliyuncs.com获取$YourMNSEndpoint, eg. http://1234567890123456.mns.cn-hangzhou.aliyuncs.com
  7. my_account = Account("$YourMNSEndpoint", "$YourAccessId", "$YourAccessKey")
  8. my_topic = my_account.get_topic("$YourTopicName")
  9. '''
  10. Step 2. 设置SMS消息体(必须)
  11. 注:目前暂时不支持消息内容为空,需要指定消息内容,不为空即可。
  12. '''
  13. msg_body1 = "sms-message1."
  14. msg_body2 = "sms-message2."
  15. '''
  16. Step 3. 生成SMS消息属性,single=False表示每个接收者参数不一样,
  17. '''
  18. # 3.1 设置SMSSignName和SMSTempateCode
  19. direct_sms_attr1 = DirectSMSInfo(free_sign_name="$YourSignName", template_code="$YourSMSTemplateCode", single=False)
  20. # 3.2 指定接收短信的手机号并指定发送给该接收人的短信中的参数值(在短信模板中定义的)
  21. direct_sms_attr1.add_receiver(receiver="$YourReceiverPhoneNumber1", params={"$YourSMSTemplateParamKey1": "$Value1"})
  22. direct_sms_attr1.add_receiver(receiver="$YourReceiverPhoneNumber2", params={"$YourSMSTemplateParamKey1": "$Value2"})
  23. '''
  24. Step 4. 生成SMS消息属性,single=True表示每个接收者参数一样
  25. '''
  26. direct_sms_attr2 = DirectSMSInfo(free_sign_name="$YourSignName", template_code="$YourSMSTemplateCode", single=True)
  27. direct_sms_attr2.add_receiver(receiver="$YourReceiverPhoneNumber1")
  28. direct_sms_attr2.add_receiver(receiver="$YourReceiverPhoneNumber2")
  29. direct_sms_attr2.set_params({"$YourSMSTemplateParamKey1": "$Value"})
  30. '''
  31. #Step 5. 生成SMS消息对象
  32. '''
  33. msg1 = TopicMessage(msg_body1, direct_sms = direct_sms_attr1)
  34. msg2 = TopicMessage(msg_body2, direct_sms = direct_sms_attr2)
  35. try:
  36. '''
  37. Step 6. 发布SMS消息
  38. '''
  39. re_msg = my_topic.publish_message(msg1)
  40. print "Publish Message Succeed. MessageBody:%s MessageID:%s" % (msg_body1, re_msg.message_id)
  41. re_msg = my_topic.publish_message(msg2)
  42. print "Publish Message Succeed. MessageBody:%s MessageID:%s" % (msg_body2, re_msg.message_id)
  43. except MNSExceptionBase,e:
  44. if e.type == "TopicNotExist":
  45. print "Topic not exist, please create it."
  46. sys.exit(1)
  47. print "Publish Message Fail. Exception:%s" % e

4. 查看短信推送状态

查看短信推送状态的结果消息请参考:here

5. 如没有接收到短信怎么办

1)代码请用UTF8 格式,以避免中文字符出现问题。

2)每天发送短信条数是有限制的。参考流控文档

3)如果您提交接口请求后,未能收到短信,您可以通过事件通知来查看结果,包括请求接口错误和发送状态返回结果。

事件通知 接口报错信息 运营商返回报错信息

4)如还无法解决您的问题,您可以提交工单,并将messageid提供给我们。

本文导读目录