PublishMessage
描述
该接口用于发布者向指定的主题发布消息,消息发布到主题后随即会被推送给 Endpoint 消费。
Request 的构造主要由以下几个部分组成:
POST /topics/$TopicName/messages HTTP/1.1
无,通用Header请参考 [backcolor=transparent] 公共参数,签名相关请参考 [backcolor=transparent] API签名
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 ):
- AccountName (必选,发信账号,string)。
- Subject (必选,邮件主题,string)。
- AddressType (必选,0或1)。
- IsHtml(必选,邮件内容是否作为Html处理,0或1)。
- ReplyToAddress(必选,0或1)。
如果需要推送到SmsEndpoint,MessageAttributes需要包含DirectSMS属性。DirectSMS属性的Text内容是Json格式,需要包含以下字段 :
- [backcolor=transparent]FreeSignName (必选,短信签名)。
- [backcolor=transparent]TemplateCode (必选,短信模板ID)。
- [backcolor=transparent]Type (必选,singleContent或multiContent,表示单发或批量。如果取值为multiContent,则只会被Endpoint为sms:directsms:anonymous 的订阅处理)。
- [backcolor=transparent]Receiver (如果Type为singleContent且Subscription的Endpoint是sms:directsms:anonymous ,则此项生效且必填,填写接收人的手机号码,多个号码以逗号分隔)。
- [backcolor=transparent]SmsParams (必选,json格式,一些具体参数。对于singleContent,此处填写格式为{“参数1”:”Value1”,”参数2”:”Value2”};对于multiContent,此处填写格式为{“电话号码1”:{“参数1”:”Value1”,”参数2”:”Value2”}, “电话号码2”:{“参数1”:”Value3”,”参数2”:”Value4”}})。
返回消息有返回状态行、HTTP头和消息体三部分组成
HTTP/1.1 201 Created
无,请参考 [backcolor=transparent]调用方式/公共参数
返回的结果为 XML 格式,包括 MessageId 和 MessageBodyMD5:
参数名称 | 说明 |
MessageId | 消息编号,在主题中唯一 |
MessageBodyMD5 | 消息正文的 MD5 值 |
错误代码 | 错误信息 | 状态码 |
TopicNotExist | The topic you provided does not exist. | 404 |
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
您提到的是阿里云消息服务(Message Service,原名MQ)中发布消息到主题的操作。这个操作允许发布者向特定的主题发送消息,一旦消息发布到主题,所有订阅了该主题的Endpoint(如HTTP endpoint、Email、SMS等)将会收到这条消息。
POST /topics/$TopicName/messages HTTP/1.1
这里$TopicName
需要替换为您实际创建的主题名称。
<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>
201 Created
<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>
确保在实际使用中,根据阿里云官方文档提供的最新指导和要求来构造请求,并正确处理认证、签名等安全措施。