# 订阅消息实战教程

## 接入订阅消息

开发者可以在[知晓推送页面](https://cloud.minapp.com/dashboard/#/app/wechat-template-message/subscribe-message/)进入订阅消息接入向导： ![接入向导](https://3271136903-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LVIIQcUXqNvyHRGzhur%2Fuploads%2Fgit-blob-36d325736d9acbd0604e77af926ae21a505ad846%2Fguide.png?alt=media)

* 前三步与接入微信类似，详情可查看[微信小程序接入](../js-sdk/wechat/how-to)，在「接入 SDK」处需要填入 AppScret，AppSecret 用于开通模板消息服务，在小程序后台“设置 - 开发设置”中查看。

![上报订阅状态](https://3271136903-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LVIIQcUXqNvyHRGzhur%2Fuploads%2Fgit-blob-9b0363924d68c291e1a7b1debe90f21eb660b42c%2Freport.png?alt=media)

![上报订阅状态](https://3271136903-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LVIIQcUXqNvyHRGzhur%2Fuploads%2Fgit-blob-4d11c755797516759564c9b72815d9ee33a01ffb%2Fexample.png?alt=media)

* 根据引导进行上报订阅消息。

![完成接入](https://3271136903-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LVIIQcUXqNvyHRGzhur%2Fuploads%2Fgit-blob-4db7be64e991dc34a843cee0c62266d3bb6bdd0b%2Fcomplete.png?alt=media)

* 通过校验后即完成接入。

## 获取模板 ID

![模板库](https://3271136903-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LVIIQcUXqNvyHRGzhur%2Fuploads%2Fgit-blob-053d00ea7759fdaf401d74f044fb37c8c37a7aea%2Flibrary.png?alt=media)

![选用模板库](https://3271136903-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LVIIQcUXqNvyHRGzhur%2Fuploads%2Fgit-blob-74e3765e0768aae717e5c75e3c46f1ee4d7aee23%2Flibrary-example.png?alt=media)

在模板库中搜索合适的模板，点击选用，选择需要的关键词后提交即可完成模板创建。

![我的模板](https://3271136903-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LVIIQcUXqNvyHRGzhur%2Fuploads%2Fgit-blob-ed18a406b04f923568ecee4673cfcf3fa88f4b4a%2Fmy-library.png?alt=media)

在「我的模板」可以查看、添加和删除模板，在这里获取模板 ID。

## 获取下发权限

微信小程序提供了 [wx.requestSubscribeMessage](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/subscribe-message/wx.requestSubscribeMessage.html) 接口来发起申请订阅权限界面。

### 上报订阅状态的接口

知晓云提供了 [wx.BaaS.subscribeMessage(options)](../js-sdk/wechat/subscribe-message) SDK 来进行收集订阅状态。

#### 参数说明

| 参数           | 类型              | 必填 | 说明   |
| ------------ | --------------- | -- | ---- |
| subscription | Subscription\[] | 是  | 参数列表 |

**Subscription**

| 参数                 | 类型     | 必填 | 说明                               |
| ------------------ | ------ | -- | -------------------------------- |
| template\_id       | String | 是  | 模板 ID                            |
| subscription\_type | String | 是  | 订阅类型，once（一次性订阅），permanent（永久订阅） |

用户发生点击行为或者发起支付回调后，调起订阅消息界面，通过 SDK 上报订阅状态。

### 示例代码

在函数内我们会调用微信 API wx.requestSubscribeMessage 申请发送订阅权限，弹窗出来后，我们会收到 success 回调，当用户在弹窗同意订阅后，即上报订阅结果为 accept ，将订阅的 template\_id （模板 ID）和 subscription\_type（订阅类型）存入 subscription 数组中，最后在调用 SDK 进行上报即可。

```js
wx.requestSubscribeMessage({
  tmplIds: [this.data.id],
  success: (res) => {
    let subscription = []
    if (res[this.data.id] === 'accept') {
      subscription.push({
        template_id: this.data.id,
        subscription_type: 'once',
      })
    }
    wx.BaaS.subscribeMessage({subscription}).then(res => {
      // success
    }, err => {
      // fail
    })
  },
})
```

* 目前只支持一次性订阅
* 需要上报订阅结果为 accept 的模版 ID

![订阅记录](https://3271136903-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LVIIQcUXqNvyHRGzhur%2Fuploads%2Fgit-blob-c9ab5695ea0d7b301daf36335850be6d05ed01b9%2Frecord.png?alt=media)

在「订阅记录」查看和操作收集到的订阅记录

## 发送订阅消息

1. 在线发送
2. 通过触发器触发
3. 云函数发送

### 在线发送

![在线发送](https://3271136903-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LVIIQcUXqNvyHRGzhur%2Fuploads%2Fgit-blob-41e896fab00c63dbce5ce8136b8d58f82b359d1f%2Fsend-message.png?alt=media)

通过在「订阅消息」给用户在线发送订阅消息。填入所需的内容，可以选择立即发送或定时发送。

#### 智能过滤

![智能过滤](https://3271136903-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LVIIQcUXqNvyHRGzhur%2Fuploads%2Fgit-blob-1073ae276e3c12e17b914675039ed59ca944a539%2Ffilter.png?alt=media)

在筛选目标用户时，建议开发者使用智能过滤服务，以保证模板消息的触达率和转化率。

### 通过触发器触发

#### 创建触发器

![创建触发器](https://3271136903-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LVIIQcUXqNvyHRGzhur%2Fuploads%2Fgit-blob-271a99c4e348e6458f9d3a1270f62dc694e0576c%2Fcreate-trigger.png?alt=media) 点击「引擎」-「触发器」即可创建新的触发器。

触发类型：即触发源，每个触发器都只能选定一种触发类型，不同的触发类型可执行的动作选项也不一样。

#### 设置条件

![设置条件](https://3271136903-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LVIIQcUXqNvyHRGzhur%2Fuploads%2Fgit-blob-991481d86c0c2343094a55b43ca815b3df203327%2Fset-condition.png?alt=media)

当选定触发类型后，开发者需要指定触发条件来触发后续动作的执行，触发条件与触发类型一一相关，当满足触发条件的时候即可触发该触发器。

#### 设置动作

![设置动作](https://3271136903-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LVIIQcUXqNvyHRGzhur%2Fuploads%2Fgit-blob-ebd16a1176beea5f2266c7165ea8f2c0709028ad%2Fset-action.png?alt=media)

动作类型选择「发送订阅消息」，与在线发送类似，填入相关内容，通过模板校验后即可完成触发器创建。如果所示，updated\_at 存的是字符串，可以使用 `{{updated_at | date:"Y年m月d日 H:i"}}` 这种 filter 形式进行转换。另外可以点击「添加动作」继续设置动作。

更多内容可查看[知晓云-触发器教程](../dashboard/basic-services/trigger)

### 通过云函数发送

#### 创建云函数

![创建云函数](https://3271136903-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LVIIQcUXqNvyHRGzhur%2Fuploads%2Fgit-blob-f328bdbfa43b17b2dcadc067bf0b50c7bb450b53%2Fcreate-cloud-function.png?alt=media)

通过「引擎」-「云函数」-「添加」即可完成云函数的创建。

#### 示例代码

![示例代码](https://3271136903-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LVIIQcUXqNvyHRGzhur%2Fuploads%2Fgit-blob-c001811ef40be394feab7e48b649c4b088e64793%2Fcloud-function-example.png?alt=media)

编写完云函数后点击保存即完成云函数的修改。

#### 通过触发器搭配云函数使用

![触发器](https://3271136903-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LVIIQcUXqNvyHRGzhur%2Fuploads%2Fgit-blob-1d3d273d02888700bd499fcb7cb7346a488a1e0d%2Fcloud-function-action.png?alt=media)

当需要发送的订阅消息逻辑较为复杂时，可以通过编写云函数进行触发。

详情可参考开发文档中的章节《[使用云函数发送订阅消息](https://github.com/ifanrx/hydrogen-js-sdk-doc/blob/master/cloud-function/node-sdk/wechat-subscribe-message.md)》

### 注意事项

发送订阅消息必须严格按照[「订阅消息参数值内容限制说明」](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/subscribe-message/subscribeMessage.send.html)来进行填写，「在线发送」以及「触发器」设置动作中已有模板对应的参数值限制。如参数值错误，将导致发送失败，发送详情可在「知晓推送」-「日志」处查看。
