
# 示例2：使用消息模板方式发布消息
#### 操作场景
本章节指导用户通过API使用消息模板方式发布消息。API的调用方法请参见[如何调用API](https://support.huaweicloud.com/api-smn/smn_api_30000.html)。
#### 涉及接口
- [获取用户Token](https://support.huaweicloud.com/api-iam/iam_30_0001.html)：通过用户名/密码的方式进行认证来获取IAM用户Token。
- [创建主题](https://support.huaweicloud.com/api-smn/smn_api_51001.html)：创建Topic。
- [订阅](https://support.huaweicloud.com/api-smn/AddSubscription.html)：为指定Topic添加订阅者。
- [创建消息模板](https://support.huaweicloud.com/api-smn/CreateMessageTemplate.html)：创建一个模板，用户可以按照模板去发送消息，这样可以减少请求的数据量。
- [消息发布](https://support.huaweicloud.com/api-smn/PublishMessage.html)：将消息发送给Topic的所有订阅终端。
 
#### 调试
您可以在[API Explorer](https://apiexplorer.developer.huaweicloud.com/apiexplorer/doc?product=SMN&api=ListTopics)中调试该接口。
#### 操作步骤
1. Token认证，具体操作请参考[认证鉴权](https://support.huaweicloud.com/api-smn/smn_api_33000.html)。
2. 创建Topic。
   1. 发送"POST https://{SMN_Endpoint}/v2/{project_id}/notifications/topics"。
   
   2. 在Request Header中增加"X-Auth-Token"。
   
   3. 在Request Body中传入如下参数。
      详细的参数说明请参见[创建主题](https://support.huaweicloud.com/api-smn/smn_api_51001.html)。
      ```
      {
          "name": "publish_by_template", //Topic名称（必填String）
          "display_name": "test" , //显示名（非必填String）
          "enterprise_project_id": "0" //企业项目ID(企业项目场景下为必填String)
      }
      ```
      响应示例：
      ```
      {     
          "request_id": "a8f8161449564f569c19e2a9e3be25c9",     
          "topic_urn": "urn:smn:br-iaas-odin1:0605767e0a00d5762fe7c00d0e33345c:publish_by_template" 
      }
      ```
      
    
3. 添加订阅。
   1. 发送"POST https://{SMN_Endpoint}/v2/{project_id}/notifications/topics/{topic_urn}/subscriptions"。 其中，topic_urn可在[2.c]的返回体中获取。
      
   
   2. 在Request Header中增加"X-Auth-Token"。
   
   3. 在Request Body中传入参数如下。
      ```
      {     
          "protocol": "sms", //订阅协议（必填String）     
          "endpoint": "86137****3629", //邮件地址（必填String）     
          "remark": "订阅终端" //备注（非必填String） 
      }
      ```
      响应示例：
      ```
      {
          "subscriptions_result":[{
              "request_id":"126c17f805934e5eadf647b0860c7a0a",
              "subscription_urn":"urn:smn:br-iaas-odin1:0605767e0a00d5762fe7c00d0e33345c:publish_by_template:3e5ac4544a1947b7b0d9f743fe52bdbd",
              "http_code":201}]
      }
      ```
      ![](https://support.huaweicloud.com/api-smn/public_sys-resources/note_3.0-zh-cn.png)
      可为Topic添加多种以及多个订阅终端，支持的订阅协议请参考订阅。
      
   
   4. 订阅终端会收到一条确认订阅的消息，请在邮箱中进行确认订阅的操作。
    
4. 创建消息模板。 发送"POST https://{SMN_Endpoint}/v2/{project_id}/notifications/message_template"。
   
5. 在Request Header中增加"X-Auth-Token"。
   1. 在Request Body中传入参数如下：
      ```
      {
          "message_template_name": "sms_template_test", 
          "locale": "zh-cn",
          "content": "{content}", 
          "protocol": "sms"
      }
      ```
      响应示例：
      ```
      {
          "request_id": "e67228ac92324a58980e922ca600f8ef",
          "message_template_id": "cdb113996c5d49149fb97af36d9801ce"
      }
      ```
      
   
   
   
   2. 订阅终端会收到一条确认订阅的消息，请在手机中进行确认订阅的操作。
    
6. 使用消息模板方式发布消息。
   1. 发送"POST https://{SMN_Endpoint}/v2/{project_id}/notifications/topics/{topic_urn}/publish"。
   
   2. 在Request Header中增加"X-Auth-Token"。
   
   3. 在Request Body中传入参数如下：
      ```
      {
          "message_template_name": "sms_template_test",
          "tags": {
      "content": "hello test"
          },
          "subject": "template message test"
      }
      ```
      响应示例：
      ```
      {
      "message_id": "5da965fd9e2c4036a0542317d944af83",
      "request_id": "c6be4517f985470e8448e42f9d2ec5a2"
      }
      ```
      ![](https://support.huaweicloud.com/api-smn/public_sys-resources/note_3.0-zh-cn.png)
      已完成[3.c]的确认订阅操作的订阅终端都能接收到该消息，否则无法接收消息。
      
    
 
