# 小程序设备消息

## 能力介绍

「小程序设备消息」是一种长期订阅类型的「[小程序订阅消息](/miniprogram/dev/framework/open-ability/subscribe-message)」，且需要完成「[设备接入](device-access)」才能够使用。

用户在使用设备过程中，需要关注某些由设备触发且需要人工介入的事件。例如安防摄像头检测到异常，设备耗材不足，设备发生故障等等。

「小程序设备消息」能力指的是，只要用户在小程序内订阅通知，开发者就可以将这些事件以订阅消息的形式发送给用户。消息在微信内的产品形态，目前以「服务通知」形式呈现。

## 开发流程

### 1. 设备接入

小程序想要使用设备消息能力，首先需要接入设备，详见「[设备接入](device-access)」文档。

完成接入后，开发者可获得由平台分配的 model_id 。model_id 对应一种设备类型，也是调用小程序设备能力相关接口的重要凭证。

### 2. 获取模版 ID

登录「小程序管理后台」 - 「功能」 - 「订阅消息」 - 「公共模板库」 - 「长期订阅」，查看可选用的设备消息模板。

![](https://res8.wxqcloud.qq.com.cn/wxdoc/4f113863-37c9-4768-8d0c-c225041f830a.png)

选择设备消息模板中需要的关键词，并提交。

**注意：设备消息模版的关键词内容由平台生成，为枚举值，开发者不能够自定义内容。**

![](https://res8.wxqcloud.qq.com.cn/wxdoc/87c95382-2a70-49e0-9c60-c98173f35579.png)

提交后，可在「我的模板」中找到对应模板的模板 ID ，每个模板以 `template_id` 标记。

![](https://res8.wxqcloud.qq.com.cn/wxdoc/a51af144-d817-4000-9e15-45a35f5ed65e.png)

### 3. 获取设备票据

获取 snTicket 用于「发起订阅」步骤。

详见服务端设备票据接口 [hardwareDevice.getSnTicket](/miniprogram/dev/server/API/hardware-device/api_getsnticket.md) 。

### 4. 发起订阅

调用 [`wx.requestSubscribeDeviceMessage`](/miniprogram/dev/api/open-api/subscribe-message/wx.requestSubscribeDeviceMessage.md) 接口会有以下授权弹窗出现，用户同意订阅消息后，才会有设备消息发送至用户的微信会话。

**小程序内完成设备消息订阅** 

用户订阅设备消息时，需要手动点击“添加提醒”，设备触发消息后才会出现“响铃+振动”的强提醒状态，开发者可以在前端界面进行引导。

![](https://res8.wxqcloud.qq.com.cn/wxdoc/5c7037ac-a7b1-4ca7-9243-a3dcf6995a9d.png)

#### 示例代码

```js
wx.requestSubscribeDeviceMessage({
    sn: 'xxxx',
    snTicket: 'xxxxx',
    modelId: 'xxxxx',
    tmplIds: ['xxxxx'],
    success(res) {
        console.log('[wx.requestSubscribeDeviceMessage success]: ', res)
        // { 'QCpBsp1TGJ1ML-UIwAIMkdXpPGzxSfwJqsKsvMVs3io': 'accept' }
    },
    fail(res) {
        console.log('[wx.requestSubscribeDeviceMessage fail]: ', res)
    }
})
```

### 5. 发送设备消息

开发者通过微信服务端接口向用户推送设备消息。

详见服务端设备消息发送接口 [hardwareDevice.send](/miniprogram/dev/server/API/hardware-device/api_sendhardwaredevicemessage.md) 。

**服务通知 - 设备消息**

![](https://res8.wxqcloud.qq.com.cn/wxdoc/5e75cf5b-52fa-4fe6-b5c4-f494edfae430.jpg)

**设备消息具体形式** 

![](https://res8.wxqcloud.qq.com.cn/wxdoc/2865cb8d-1f5f-4fdb-8b00-4a8385e7da88.jpg)
