PublishMessage

调用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