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

Request

Request的构造主要由以下几个部分组成:

  • 请求行

    POST /topics/$TopicName/messages HTTP/1.1

  • 特有Request Header

    无,通用Header请参见公共参数,签名相关请参见请求签名机制

  • Request Body

    Request Body为XML格式

参数名称 是否必选 说明 参数值
MessageBody 消息正文 字符集
MessageTag 消息标签(用于消息过滤) 不超过16个字符的字符串(默认没有标签)
MessageAttributes 消息属性,如果需要推送邮件或短信,则MessageAttributes为必填项 字符集

如需推送邮件或短信,则MessageAttributes相应的设置说明如下:

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

    DirectMail属性的Text内容是JSON格式,需要包含以下字段(字段含义可参见SingleSendMail):

    参数名称 是否必选 取值类型 说明
    AccountName String 发信账号
    Subject String 邮件主题
    AddressType Number 取值为0或1
    IsHtml Number 邮件内容是否作为HTML处理,取值为0或1
    ReplyToAddress Boolean 取值为0或1
  • 如果需要推送到SmsEndpoint,MessageAttributes需要包含DirectSMS属性。

    DirectSMS属性的Text内容是JSON格式,需要包含以下字段:

    参数名称 是否必选 说明
    FreeSignName 短信签名
    TemplateCode 短信模板ID
    Type singleContent或multiContent,表示单发或批量。如果取值为multiContent,则只会被Endpoint为sms:directsms:anonymous 的订阅处理
    Receiver 如果Type为singleContent且Subscription的Endpoint是sms:directsms:anonymous ,则此项生效且必填,填写接收人的手机号码,多个号码以逗号分隔
    SmsParams json格式,一些具体参数。对于singleContent,此处填写格式为{“参数1”:”Value1”,”参数2”:”Value2”};对于multiContent,此处填写格式为{“电话号码1”:{“参数1”:”Value1”,”参数2”:”Value2”}, “电话号码2”:{“参数1”:”Value3”,”参数2”:”Value4”}}

Response

返回消息有返回状态行、HTTP头和消息体三部分组成

  • HTTP Status Code

    HTTP/1.1 201 Created

  • 特有Response Header

    无,请参见公共参数

  • Response Body

    返回的结果为XML格式,包括MessageId和MessageBodyMD5:

    参数名称 说明
    MessageId 消息编号,在主题中唯一
    MessageBodyMD5 消息正文的MD5值

示例

请求示例:

POST /topics/$TopicName/messages HTTP/1.1
Host: $AccountId.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 15B4D3461F177624206A:aibzWu1iDEx9LwO56+kHgA3eqmI=
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/$TopicName/messages HTTP/1.1
Host: $AccountId.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 15B4D3461F177624206A:aibzWu1iDEx9LwO56+kHgA3eqmI=
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>            

返回示例:

HTTP/1.1 201 Created
Content-Length:120
Content-Type:text/xml;charset=utf-8
x-mns-request-id:56667514B2B71C9C1600002B
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-200000001</MessageId>
    <MessageBodyMD5>3AC6DD36D2D6B7283F2F490A09751BFE</MessageBodyMD5>
</Message>          

Special error

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