开发者社区 问答 正文

消息服务的Message如何操作?



PublishMessage



描述


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


Request


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

  • 请求行

    POST /topics/$TopicName/messages HTTP/1.1

  • 特有 Request Header

    无,通用Header请参考 [backcolor=transparent] 公共参数,签名相关请参考 [backcolor=transparent] API签名

  • Request Body

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

如果需要推送到MailEndpoint,MessageAttributes需要包含DirectMail属性。DirectMail属性的Text内容是Json格式,需要包含以下字段 (字段含义可以参考 https://help.aliyun.com/document_detail/29444.html ):
  1. AccountName (必选,发信账号,string)。
  2. Subject (必选,邮件主题,string)。
  3. AddressType (必选,0或1)。
  4. IsHtml(必选,邮件内容是否作为Html处理,0或1)。
  5. ReplyToAddress(必选,0或1)。

如果需要推送到SmsEndpoint,MessageAttributes需要包含DirectSMS属性。DirectSMS属性的Text内容是Json格式,需要包含以下字段 :
  1. [backcolor=transparent]FreeSignName (必选,短信签名)。
  2. [backcolor=transparent]TemplateCode (必选,短信模板ID)。
  3. [backcolor=transparent]Type (必选,singleContent或multiContent,表示单发或批量。如果取值为multiContent,则只会被Endpoint为sms:directsms:anonymous 的订阅处理)。
  4. [backcolor=transparent]Receiver (如果Type为singleContent且Subscription的Endpoint是sms:directsms:anonymous ,则此项生效且必填,填写接收人的手机号码,多个号码以逗号分隔)。
  5. [backcolor=transparent]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

    无,请参考 [backcolor=transparent]调用方式/公共参数

  • Response Body

    返回的结果为 XML 格式,包括 MessageId 和 MessageBodyMD5:
参数名称说明
MessageId消息编号,在主题中唯一
MessageBodyMD5消息正文的 MD5 值


Special Error

错误代码错误信息状态码
TopicNotExistThe topic you provided does not exist.404

[backcolor=transparent]请求示例:
[backcolor=transparent]

[backcolor=transparent]

[backcolor=transparent]

展开
收起
轩墨 2017-10-24 15:45:03 2047 分享 版权
阿里云 AI 助理回答

您提到的是阿里云消息服务(Message Service,原名MQ)中发布消息到主题的操作。这个操作允许发布者向特定的主题发送消息,一旦消息发布到主题,所有订阅了该主题的Endpoint(如HTTP endpoint、Email、SMS等)将会收到这条消息。

请求结构

请求行

POST /topics/$TopicName/messages HTTP/1.1

这里$TopicName需要替换为您实际创建的主题名称。

请求头

  • 通用Header包括认证信息(如AccessKeyId, Signature等),遵循阿里云API调用的一般规范。
  • 没有特定于此接口的Request Header。

请求体 (XML格式)

<Message>
    <MessageBody>您的消息正文</MessageBody>
    <MessageTag>可选的消息标签</MessageTag>
    <MessageAttributes>
        <!-- 如果推送邮件或短信,需包含相应的属性 -->
        <DirectMail>
            {"AccountName":"your_account","Subject":"邮件主题","AddressType":0,"IsHtml":1,"ReplyToAddress":0}
        </DirectMail>
        <!-- 或者 -->
        <DirectSMS>
            {"FreeSignName":"签名","TemplateCode":"模板ID","Type":"singleContent","Receiver":"手机号码","SmsParams":{"参数1":"Value1","参数2":"Value2"}}
        </DirectSMS>
    </MessageAttributes>
</Message>

响应结构

HTTP状态码

  • 成功时返回:201 Created

响应体 (XML格式)

<SendResult>
    <MessageId>生成的消息唯一ID</MessageId>
    <MessageBodyMD5>消息正文的MD5值</MessageBodyMD5>
</SendResult>

特殊错误

  • TopicNotExist: 提供的主题不存在,状态码404。

示例请求

一个完整的示例请求可能如下所示(注意替换为实际的值):

POST /topics/mySampleTopic/messages HTTP/1.1
Host: mns.aliyuncs.com
Date: Thu, 01 Jan 2020 00:00:00 GMT
Authorization: OSS qn6B9wqgCahNzQp5nTiUJZjB:KgGmLlFtRcFoyp2WOnTfHhUGp8s=
Content-Type: application/xml

<Message>
    <MessageBody>这是一条测试消息。</MessageBody>
    <MessageTag>test-tag</MessageTag>
    <MessageAttributes>
        <DirectSMS>{"FreeSignName":"阿里云测试","TemplateCode":"SMS_12345678","Type":"singleContent","Receiver":"13800138000","SmsParams":{"code":"1234","product":"云服务器"}}}</DirectSMS>
    </MessageAttributes>
</Message>

确保在实际使用中,根据阿里云官方文档提供的最新指导和要求来构造请求,并正确处理认证、签名等安全措施。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答