# 消息通知

## 能力介绍

“消息通知”是云开发工作台提供的一种消息通知能力，开发者可根据自定义通知策略，在满足相关通知触发规则时，进行包括不限于站内信、短信等渠道的消息通知发送。

## 能力特征

### 通知策略管理

* 包含当前环境下所有消息通知策略，可进行策略的启停、编辑、删除（通知策略失效并不可恢复）。
* 通知策略主要构成部分包含监控类型、触发动作、触发条件、通知内容、通知对象、通知渠道。

### 通知触发历史

* 成功触发的通知消息记录，支持以时间维度进行消息通知的记录查询。
* 支持历史通知消息的查看与删除（不可恢复）。

## 使用说明

### 1.自动触发

1. 前往「工作台 - 数据管理」，新建目标监控数据模型“消息通知”，以姓名（name）和年龄（age）字段为触发条件示例。
   ![image.png](https://qcloudimg.tencent-cloud.cn/raw/454a0d9782726a4f15b4d8c25375bb53.png)
2. 前往「工作台 - 消息通知管理」，新建通知策略。
   ![image.png](https://qcloudimg.tencent-cloud.cn/raw/92aae5011b51a28899336b3b2727a66c.png)
3. 编辑通知策略相关信息，例如设置数据模型触发动作为新增数据，触发条件为 `name=rocky并且age>55`，那么当目标数据模型新增的数据满足此条件时，才会触发通知消息。
   ![image.png](https://qcloudimg.tencent-cloud.cn/raw/4490ac7764075ccb88ec96c2adc09630.png)

* 触发方式：自动触发和手动触发（默认为自动触发）。
* 监控类型：目前支持“数据模型”，模型名选择预先创建好的数据模型，触发动作包含数据的增删改，触发条件支持同时设置多个字段。
* 通知机制：实时推送。
* 通知内容：根据多行输入框里面的提示内容，填写相应的文案，其中双大括号“{{}}”表示模板变量，用来引用数据模型字段值。
* 通知用户：表示可接收到通知消息的用户对象，可在「工作台 - 用户权限管理」添加更多用户。
  ![](https://qcloudimg.tencent-cloud.cn/raw/9a6a1c823ed6967748c1b3f30a186c00.png)
* 通知渠道：目前支持工作台站内信和短信（以通知用户绑定的手机号为推送对象）通知。

4. 配置好相关信息后，保存通知策略。
   ![image.png](https://qcloudimg.tencent-cloud.cn/raw/9fa88a67d9b4d10614df03b0612edaf2.png)
5. 前往数据模型管理界面，在模板模型中新增数据，进行消息通知推送测试。
   ![image.png](https://qcloudimg.tencent-cloud.cn/raw/06f5abaeb42f88556617581acfcbb4fd.png)
6. 通知策略触发成功后，工作台会收到站内通知。
   ![image.png](https://qcloudimg.tencent-cloud.cn/raw/bf75f427a4daf8b9cd73b4eac4d7cfbb.png)
7. 站内信消息面板，可以查询全部类型消息，包括监控告警和业务消息。
   ![image.png](https://qcloudimg.tencent-cloud.cn/raw/ea190e3b0086513be099e558f721a969.png)
8. 手机短信通知展示。
   ![image.png](https://qcloudimg.tencent-cloud.cn/raw/7301673bc3721b08a125335a05c9eae1.png)
9. 可以在消息通知管理界面，查询消息通知触发历史。
   ![image.png](https://qcloudimg.tencent-cloud.cn/raw/ae64798c1639829bce52f4e0c2865556.png)

### 2.手动触发（SDK触发）

#### **1. 接口介绍**

* 接口描述：可在 [微信云开发云后台 / 消息通知管理](https://tcb.cloud.tencent.com/cloud-admin/#/management/notification/policyList) 模块配置消息策略，触发方式选择“手动触发”，需要在业务代码中主动调用，才会触发消息通知。
  ![image.png](https://qcloudimg.tencent-cloud.cn/raw/a98ff0430a3361c2c40ee7318ae70597.png)
* 接口功能：发送通知消息。
* 接口声明：`sendTemplateNotification(params: ITemplateNotifyReq, opts?: ICustomReqOpts)`。

#### **2. 输入参数**

| 字段     | 类型                 | 必填 | 说明                                                           |
| -------- | -------------------- | ---- | -------------------------------------------------------------- |
| `params` | `ITemplateNotifyReq` | 是   | 请求参数                                                       |
| `opts`   | `ICustomReqOpts`     | 否   | 自定义配置，目前支持 SDK 请求超时时间设置，`{timeout: number}` |

`ITemplateNotifyReq`

| 字段       | 类型                      | 必填 | 说明                                 |
| ---------- | ------------------------- | ---- | ------------------------------------ |
| `notifyId` | `string`                  | 是   | 告警策略 Id                          |
| `data`     | `Record` | 否   | 告警策略中模板变量键值对             |
| `url`      | `string`                  | 否   | 用户收到告警消息后点击打开的页面地址 |

#### **3. 返回结果**

`Promise<CallFunctionResult<ResultT>>`

| 字段        | 类型      | 必填 | 说明                      |
| ----------- | --------- | ---- | ------------------------- |
| `result`    | `ResultT` | 否   | 执行结果                  |
| `requestId` | `string`  | 否   | 请求唯一 Id，用于错误排查 |

> 代码执行报错，将通过异常抛出

#### **4. 示例代码**

```js
// 云函数入口文件
const tcb = require("@cloudbase/node-sdk");

const app = tcb.init({
  secretId: "", // 腾讯云 API 固定密钥对，在云函数内执行可不填
  secretKey: "", // 同上
  env: "", // 云开发环境id
});

exports.main = async (event, context) => {
  const result = await app.sendTemplateNotification({
    notifyId: "xxx",
    data: { orderId: "aaa", amount: 200 },
    url: "https://cloud.tencent.com/solution/la",
  });
  return result;
};
```
