
# 设备消息状态变更通知
#### 功能介绍
应用服务器在调用物联网平台的[创建规则触发条件 - CreateRoutingRule](https://support.huaweicloud.com/api-iothub/iot_06_v5_01307.html)（Resource:device.message.status，Event:update）、[创建规则动作 - CreateRuleAction](https://support.huaweicloud.com/api-iothub/iot_06_v5_01302.html)、[修改规则触发条件 - UpdateRoutingRule](https://support.huaweicloud.com/api-iothub/iot_06_v5_01309.html)接口配置并激活规则后，当设备消息状态变更时，物联网平台会向应用服务器推送通知消息。
#### URI
POST /由应用服务器创建设备消息状态变更通知规则的转发目标决定
#### 请求参数
表1请求Body参数 
| 参数            | 是否必选 | 参数类型                                                                                                                                                      | 描述                                                                                                         |
|:---|:---|:---|:---|
| resource      | 是    | String                                                                                                                                                    | **参数说明**：订阅的资源名称，取值为device.message.status。                                                                 |
| event         | 是    | String                                                                                                                                                    | **参数说明**：订阅的资源事件，取值为update。                                                                                |
| event_time    | 是    | String                                                                                                                                                    | **参数说明**：资源事件生成时间,格式：yyyyMMdd'T'HHmmss'Z' UTC字符串，如：20151212T121212Z。若需要显示本地时区，您需要自己进行时间转换。                 |
| event_time_ms | 否    | String                                                                                                                                                    | **参数说明**：资源事件生成时间,格式：yyyy-MM-dd'T'HH:mm:ss.SSS'Z' UTC字符串，如：2015-12-12T12:12:12.000Z。若需要显示本地时区，您需要自己进行时间转换。 |
| request_id    | 否    | String                                                                                                                                                    | **参数说明**：消息ID，由设备侧指定或平台生成，用于跟踪业务流程。                                                                        |
| notify_data   | 是    | [DeviceMessageStatusUpdateNotifyDataV5] object | **参数说明**：推送消息。                                                                                             |
   
 表2DeviceMessageStatusUpdateNotifyDataV5 
| 参数     | 是否必选 | 参数类型                                                                                                                              | 描述                   |
|:---|:---|:---|:---|
| header | 是    | [NotifyDataHeader] object                   | **参数说明**：推送消息header。 |
| body   | 是    | [DeviceMessageStatusUpdate] object | **参数说明**：推送消息body。   |
   
 表3NotifyDataHeader 
| 参数         | 是否必选 | 参数类型                                                                                                      | 描述                                                                                                                                                                                                  |
|:---|:---|:---|:---|
| app_id     | 否    | String                                                                                                    | **参数说明**：应用ID。 最大长度：**256**                                                                                            |
| device_id  | 否    | String                                                                                                    | **参数说明**：设备ID，用于唯一标识一个设备，在注册设备时由物联网平台分配获得。 最大长度：**256**                                                                |
| node_id    | 否    | String                                                                                                    | **参数说明**：设备标识码，通常使用IMEI、MAC地址或Serial No作为nodeId。 最大长度：**256**                                                          |
| product_id | 否    | String                                                                                                    | **参数说明**：产品ID，用于唯一标识一个产品，在注册产品时由物联网平台分配获得。 最大长度：**256**                                                                |
| gateway_id | 否    | String                                                                                                    | **参数说明**：网关ID，用于标识一个网关设备。当设备是直连设备时，gatewayId与设备的deviceId一致。当设备是非直连设备时，gatewayId为设备所关联的直连设备（即网关）的deviceId。 最大长度：**256** |
| tags       | 否    | Array of [TagV5DTO] objects | **参数说明**：要绑定到指定资源的标签列表，标签列表中各项标签键值之间不允许重复，一个资源最多可以绑定10个标签。                                                                                                                                          |
   
 表4TagV5DTO 
| 参数        | 是否必选 | 参数类型   | 描述                                                                    |
|:---|:---|:---|:---|
| tag_key   | 是    | String | **参数说明**：标签键，在同一资源下标签键唯一。绑定资源时，如果设置的键已存在，则将覆盖之前的标签值。如果设置的键值不存在，则新增标签。 |
| tag_value | 否    | String | **参数说明**：标签值。                                                         |
   
 表5DeviceMessageStatusUpdate 
| 参数         | 是否必选 | 参数类型                                                                                                    | 描述                                                                 |
|:---|:---|:---|:---|
| topic      | 否    | String                                                                                                  | **参数说明**：消息上报使用的mqtt topic。                                        |
| message_id | 是    | String                                                                                                  | **参数说明**：消息的序列号，唯一标识一条消息。                                          |
| name       | 否    | String                                                                                                  | **参数说明**：消息名称。                                                     |
| status     | 否    | String                                                                                                  | **参数说明**：设备消息状态，包含：PENDING,DELIVERED,TIMEOUT,FAILED。               |
| error_info | 否    | [ErrorInfoDTO] object | **参数说明**：消息下发失败信息。                                                 |
| timestamp  | 否    | String                                                                                                  | **参数说明**：消息更新时间,格式：yyyyMMdd'T'HHmmss'Z' UTC字符串，如：20151212T121212Z。 |
   
 表6ErrorInfoDTO 
| 参数         | 是否必选 | 参数类型   | 描述                                                                                          |
|:---|:---|:---|:---|
| error_code | 否    | String | **参数说明**：异常信息错误码，包含IOTDA.014016和IOTDA.014112。IOTDA.014016表示设备不在线；IOTDA.014112表示设备没有订阅topic。 |
| error_msg  | 否    | String | **参数说明**：异常信息说明，包含设备不在线和设备没有订阅topic说明。                                                      |
   
#### 响应参数
**状态码：200**
OK
无
#### 请求示例
设备消息状态变更通知示例：
```
设备消息状态变更通知
{
  "resource" : "device.message.status",
  "event" : "update",
  "event_time" : "20151212T121212Z",
  "event_time_ms" : "2015-12-12T12:12:12.000Z",
  "request_id" : "3fe58d5e-8697-4849-a165-7db128f7e776",
  "notify_data" : {
    "header" : {
      "device_id" : "d4922d8a-6c8e-4396-852c-164aefa6638f",
      "product_id" : "ABC123456789",
      "app_id" : "d4922d8a-6c8e-4396-852c-164aefa6638f",
      "gateway_id" : "d4922d8a-6c8e-4396-852c-164aefa6638f",
      "node_id" : "ABC123456789",
      "tags" : [ {
        "tag_value" : "testTagValue",
        "tag_key" : "testTagName"
      } ]
    },
    "body" : {
      "error_info" : {
        "error_msg" : "Send to device failed, device not subscribe topic.",
        "error_code" : "IOTDA.014112"
      },
      "name" : "name",
      "topic" : "topic",
      "message_id" : "1235",
      "status" : "DELIVERED",
      "timestamp" : "20151212T121212Z"
    }
  }
}
```
#### 响应示例
无
#### 状态码
| 状态码 | 描述 |
|:---|:---|
| 200 | OK |
   
#### 错误码
请参见[错误码](https://support.huaweicloud.com/api-iothub/ErrorCode.html)。
