调用PublishMessage接口向指定的主题发布消息,消息发布到主题后随即会被推送给Endpoint消费。

请求头

该接口使用公共请求头,无特殊请求头。更多信息,请参见公共参数

请求语法

POST /topics/$TopicName/messages HTTP/1.1

请求参数

参数 类型 是否必选 描述
MessageBody String 消息内容。
MessageTag String 消息标签。
MessageAttributes Object 推送订阅类型。
取值说明如下:
  • HTTP:HTTP网关。
  • Queue:队列。
  • DirectMail:邮箱。
  • DirectSMS:阿里短信。
  • Push:移动推送。

MessageAttributes包含的参数说明如下:

  • 如果需要推送到邮箱,MessageAttributes需要包含DirectMail属性。

    DirectMail属性的Text内容是JSON格式,需要包含以下参数。更多信息,请参见SingleSendMail

    参数 类型 是否必选 示例值 说明
    AccountName String direct_mail_account_name@aliyun-inc.com 发信地址。
    Subject String TestMailSubject 邮件主题。
    AddressType Number 0 地址类型。
    取值说明如下:
    • 0:随机账号。
    • 1:发信地址。
    IsHtml Number 0 邮件内容是否为HTML格式。
    取值说明如下:
    • 0:邮件内容不为HTML样式。
    • 1:邮件内容为HTML样式。
    ReplyToAddress Boolean 0 是否启用回信地址。
    取值说明如下:
    • 0:不启用回信地址。
    • 1:启用回信地址。
  • 如果需要推送到阿里短信,MessageAttributes需要包含DirectSMS属性。

    DirectSMS属性的Text内容是JSON格式,需要包含以下参数。

    参数 类型 是否必选 示例值 说明
    FreeSignName String $value 短信签名。
    TemplateCode String $value 短信模板ID。
    Type String multiContent 是否批量发送短信。
    取值说明如下:
    • singleContent:单独发送。
    • multiContent:批量发送。
      说明 如果将Type设置为multiContent,那么消息只能被Endpoint为sms:directsms:anonymous的订阅处理。
    Receiver String $num1,$num2 接收者。

    如果将Type设置为singleContent且Subscription的Endpoint是sms:directsms:anonymous,则此参数生效且必填。填写接收人的手机号码,多个号码以半角逗号(,)分隔。

    SmsParams String
    {\"$num1\": {\"$key1\": \"$value1\", \"$key2\": \"$value2\"}, \"$num2\": {\"$key1\": \"$value1\", \"$key2\": \"$value2\"}}
    短信模板键值对。JSON格式。
    • 如果将Type设置为singleContent,此参数填写格式如下所示。
      {
          "参数1":"Value1",
          "参数2":"Value2"
      }
    • 如果将Type设置为multiContent,此参数填写格式如下所示。
      {
          "电话号码1":{
              "参数1":"Value1",
              "参数2":"Value2"
          },
          "电话号码2":{
              "参数1":"Value3",
              "参数2":"Value4"
          }
      }
  • 如果需要推送到移动推送,MessageAttributes需要包含Push属性。
    Push属性的Text内容是JSON格式,需要包含以下参数。更多信息,请参见推送高级接口
    参数 类型 是否必选 示例值 说明
    Target String ALL 推送目标类型。
    取值说明如下:
    • DEVICE:根据设备推送。
    • ACCOUNT:根据账号推送。
    • ALIAS:根据别名推送。
    • TAG:根据标签推送。
    • ALL:推送给全部设备(同一种设备类型的两次全部推送的间隔至少为1秒)。
    TargetValue String ALL 推送目标。
    DeviceType String ALL 设备类型。
    取值说明如下:
    • iOS:iOS设备。
    • ANDROID:安卓设备。
    • ALL:全部设备。
    PushType String MESSAGE 推送类型。
    取值说明如下:
    • MESSAGE:消息。
    • NOTICE:通知。
    Title String Android推送时通知或消息的标题以及iOS消息的标题,为必填;iOS 10以上通知显示标题,iOS 8.2-10替换通知应用名称,为选填。 JavaSDK 标题。
    Body String Hello From JavaSDK 消息内容。
    PushTime String 定时发送。不设置时默认为立即发送。
    StoreOffline Boolean 是否保存离线消息。默认为false
    取值说明如下:
    • true:保存离线消息。
    • false:不保存离线消息。

返回数据

参数 类型 示例值 说明
MessageId String D273CD6A89564E54-1-15180395A19-20000**** 消息编号。在主题中唯一。
MessageBodyMD5 String 3AC6DD36D2D6B7283F2F490A0975**** 消息正文的MD5值。

示例

邮件推送请求示例

POST /topics/MyTopic/messages HTTP/1.1
Host: 123456789098****.mns.cn-hangzhou.aliyuncs.com
Date: Tue, 08 Dec 2015 06:13:40 GMT
Content-Length:500
Content-Type:text/xml;charset=utf-8
Authorization: MNS 15B4D3461F177624****:aibzWu1iDEx9LwO56+kHgA3e****
x-mns-version: 2015-06-06

<?xml version="1.0" encoding="utf-8"?>
<Message xmlns="http://mns.aliyuncs.com/doc/v1/">
    <MessageBody>Base64 Encoded Result</MessageBody>
    <MessageTag>important</MessageTag>
    <MessageAttributes>
        <DirectMail>
          {
             "Subject":"TestMailSubject",
             "AccountName":"direct_mail_account_name@aliyun-inc.com",
             "ReplyToAddress":0,
             "AddressType":0,
             "IsHtml":0
          }
        </DirectMail>
    </MessageAttributes>
</Message>            

短信推送请求示例

POST /topics/MyTopic/messages HTTP/1.1
Host: 123456789098****.mns.cn-hangzhou.aliyuncs.com
Date: Tue, 08 Dec 2015 06:13:40 GMT
Content-Length:500
Content-Type:text/xml;charset=utf-8
Authorization: MNS 15B4D3461F177624****:aibzWu1iDEx9LwO56+kHgA3e****
x-mns-version: 2015-06-06

<?xml version="1.0" encoding="utf-8"?>
<Message xmlns="http://mns.aliyuncs.com/doc/v1/">
    <MessageBody>content</MessageBody>
    <MessageAttributes>
        <DirectSMS>
      {
             "FreeSignName":"$value",
             "TemplateCode":"$value",
             "Type":"multiContent",
             "Receiver":"$num1,$num2",
             "SmsParams":"{\"$num1\": {\"$key1\": \"$value1\", \"$key2\": \"$value2\"}, \"$num2\": {\"$key1\": \"$value1\", \"$key2\": \"$value2\"}}"
          }
        </DirectSMS>
    </MessageAttributes>
</Message>           

移动推送请求示例

POST /topics/MyTopic/messages HTTP/1.1
Host: 123456789098****.mns.cn-hangzhou.aliyuncs.com
Date: Tue, 08 Dec 2015 06:13:40 GMT
Content-Length:500
Content-Type:text/xml;charset=utf-8
Authorization: MNS 15B4D3461F177624****:aibzWu1iDEx9LwO56+kHgA3e****
x-mns-version: 2015-06-06

<?xml version="1.0" encoding="UTF-8"?>
<Message xmlns="http://mns.aliyuncs.com/doc/v1">
    <MessageBody>hello topic</MessageBody>
    <MessageAttributes>
        <Push>
           {
              "Target":"ALL",
              "TargetValue":"ALL",
              "DeviceType":"ALL",
              "PushType":"MESSAGE",
              "Title":"JavaSDK",
              "Body":"Hello From JavaSDK",
              "AndroidOpenType":"APPLICATION"
           }
        </Push>
    </MessageAttributes>
</Message>            

正常返回示例

HTTP/1.1 201 Created
Content-Length:120
Content-Type:text/xml;charset=utf-8
x-mns-request-id:56667514B2B71C9C1600****
x-mns-version:2015-06-06

<?xml version="1.0" encoding="utf-8"?>
<Message xmlns="http://mns.aliyuncs.com/doc/v1/">
    <MessageId>D273CD6A89564E54-1-15180395A19-20000****</MessageId>
    <MessageBodyMD5>3AC6DD36D2D6B7283F2F490A0975****</MessageBodyMD5>
</Message>      

错误码

错误码 错误信息 状态码
TopicNotExist The topic you provided does not exist. 404