

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 托管集成通知
<a name="managedintegrations-notifications"></a>

托管集成通知可提供来自设备的更新和关键见解。通知包括连接器事件、设备命令、生命周期事件、OTA（Over-the-Air）更新和错误报告。这些见解提供了可操作的信息，用于创建自动化工作流程、立即采取行动或存储事件数据以进行故障排除。

目前，仅支持 Amazon Kinesis 数据流作为托管集成通知的目的地。在设置通知之前，您首先需要设置 Amazon Kinesis 数据流并允许托管集成访问该数据流。

## 设置 Amazon Kinesis 以接收通知
<a name="kinesis-setup"></a>

**Contents**
+ [第 1 步：创建 Amazon Kinesis 数据流](#create-data-stream)
+ [步骤 2：创建权限策略](#create-permissions-policy)
+ [步骤 3：导航到 IAM 控制面板并选择角色](#navigate-roles)
+ [步骤 4：使用自定义信任策略](#custom-trust-policy)
+ [第 5 步：应用您的权限策略](#apply-permissions-policy)
+ [步骤 6：输入角色名称](#finalize-role)

要将 Amazon Kinesis 设置为接收托管集成通知，请按照以下步骤操作：

### 第 1 步：创建 Amazon Kinesis 数据流
<a name="create-data-stream"></a>

Amazon Kinesis 数据流可以实时摄取大量数据，持久存储数据，并使数据可供应用程序使用。

**创建 Amazon Kinesis 数据流**
+ 要创建 Kinesis 数据流，请按照[创建和管理 Kinesis](https://docs.aws.amazon.com/streams/latest/dev/working-with-streams.html) 数据流中概述的步骤进行操作。

### 步骤 2：创建权限策略
<a name="create-permissions-policy"></a>

创建权限策略，允许托管集成访问您的 Kinesis 数据流。

**创建权限策略**
+ 要创建权限策略，请复制以下策略，然后按照[使用 JSON 编辑器创建策略中概述的](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html#access_policies_create-json-editor)步骤进行操作

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Action": "kinesis:PutRecord",
              "Resource": "*",
              "Effect": "Allow"
          }
      ]
  }
  ```

------

### 步骤 3：导航到 IAM 控制面板并选择角色
<a name="navigate-roles"></a>

打开 IAM 控制面板，然后单击 “**角色**”。

**导航到 IAM 控制面板**
+ **打开 IAM 控制面板，然后单击 “角色”。**

  有关更多信息，请参阅《*AWS Identity and Access Management*用户指南》[中的 IAM 角色创建](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create.html)。

### 步骤 4：使用自定义信任策略
<a name="custom-trust-policy"></a>

您可以使用自定义信任策略向托管集成授予对 Kinesis 数据流的访问权限。

**使用自定义信任策略**
+ **创建新角色并选择自定义信任策略。单击 “下一步”。**

  以下政策允许托管集成担任该角色，该`Condition`声明有助于防止混淆副手问题。

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Principal": {
                  "Service": "iotmanagedintegrations.amazonaws.com"
              },
              "Action": "sts:AssumeRole",
              "Condition": {
                  "StringEquals": {
                      "aws:SourceAccount": "123456789012"
                  },
                  "ArnLike": {
                      "aws:SourceArn": "arn:aws:iotmanagedintegrations:ca-central-1:123456789012:*"
                  }
              }
          }
      ]
  }
  ```

------

### 第 5 步：应用您的权限策略
<a name="apply-permissions-policy"></a>

将您在步骤 2 中创建的权限策略添加到角色中。

**添加权限策略**
+ **在添加权限页面上，搜索并添加您在步骤 2 中创建的权限策略。单击 “下一步”。**

### 步骤 6：输入角色名称
<a name="finalize-role"></a>
+ **输入角色名称，然后单击 “创建角色”。**

## 设置托管集成通知
<a name="managedintegrations-notification-setup"></a>

**Topics**
+ [第 1 步：向用户授予调用 CreateDestination API 的权限](#user-permissions)
+ [第 2 步：调用 CreateDestination API](#call-createdestination)
+ [第 3 步：调用 CreateNotificationConfiguration API](#call-notification-config)

要设置托管集成通知，请按照以下步骤操作：

### 第 1 步：向用户授予调用 CreateDestination API 的权限
<a name="user-permissions"></a>
+ **向用户授予调用 `CreateDestination` API 的权限**

   以下策略定义了用户调用 [CreateDestination](https://docs.aws.amazon.com/iot-mi/latest/APIReference/API_CreateDestination.html)API 的要求。

   [要获取托管集成的passrole权限，请参阅*AWS Identity and Access Management*用户指南中的授予用户将角色传递给 AWS 服务的](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html)权限。

------
#### [ JSON ]

****  

  ```
  {
        "Version":"2012-10-17",		 	 	 
        "Statement":[
           {
              "Effect":"Allow",
              "Action":"iam:PassRole",
              "Resource":"arn:aws:iam::123456789012:role/ROLE_CREATED_IN_PREVIOUS_STEP",
              "Condition":{
                 "StringEquals":{
                    "iam:PassedToService":"iotmanagedintegrations.amazonaws.com"
                 }
              }
           },
           {
              "Effect":"Allow",
              "Action":"iotmanagedintegrations:CreateDestination",
              "Resource":"*"
           }
        ]
  }
  ```

------

### 第 2 步：调用 CreateDestination API
<a name="call-createdestination"></a>
+ **调用 `CreateDestination` API**

  创建 Amazon Kinesis 数据流和流访问角色后，调用 [CreateDestination](https://docs.aws.amazon.com/iot-mi/latest/APIReference/API_CreateDestination.html)API 来创建通知将发送到的通知目的地。对于`DeliveryDestinationArn`参数，请使用您的新 Amazon Kinesis 数据流中的。`arn`

  ```
  {
      "DeliveryDestinationArn": "Your Kinesis arn"
      "DeliveryDestinationType": "KINESIS"
      "Name": "DestinationName"
      "ClientToken": "string"
      "RoleArn": "arn:aws:iam::accountID:role/ROLE_CREATED_IN_PREVIOUS_STEP"
  }
  ```
**注意**  
`ClientToken`是一个等性标记。如果您使用相同的客户端令牌和参数重试最初成功完成的请求，则重试尝试将成功而无需执行任何进一步的操作。

### 第 3 步：调用 CreateNotificationConfiguration API
<a name="call-notification-config"></a>
+ **调用 `CreateNotificationConfiguration` API**

  最后，使用 [CreateNotificationConfiguration](https://docs.aws.amazon.com/iot-mi/latest/APIReference/API_CreateNotificationConfiguration.html)API 创建通知配置，将所选事件类型路由到由 Kinesis 数据流表示的目的地。在`DestinationName`参数中，使用与最初调用 `CreateDestination` API 时相同的目标名称。

  ```
  {
      "EventType": "DEVICE_EVENT"
      "DestinationName" // This name has to be identical to the name in createDestination API
      "ClientToken": "string"
  }
  ```

## 使用托管集成监控的事件类型
<a name="managedintegrations-notification-listevents"></a>

以下是使用托管集成通知监控的事件类型：
+ `DEVICE_COMMAND`
  + [SendManagedThingCommand](https://docs.aws.amazon.com/iot-mi/latest/APIReference/API_SendManagedThingCommand.html)API 命令的状态。有效值为 `succeeded` 或 `failed`。

    ```
    {
                  "version":"0",
                  "messageId":"6a7e8feb-b491-4cf7-a9f1-bf3703467718",
                  "messageType":"DEVICE_COMMAND",
                  "source":"aws.iotmanagedintegrations",
                  "customerAccountId":"123456789012",
                  "timestamp":"2017-12-22T18:43:48Z",
                  "region":"ca-central-1",
                  "resources":[
                        "arn:aws:iotmanagedintegrations:ca-central-1:123456789012:managed-thing/6a7e8feb-b491-4cf7-a9f1-bf3703467718"
                  ],
                  "payload":{
                    "traceId":"1234567890abcdef0",
                    "receivedAt":"2017-12-22T18:43:48Z",
                    "executedAt":"2017-12-22T18:43:48Z",
                    "result":"failed"
                  }
    }
    ```
+ `DEVICE_COMMAND_REQUEST`
  + 来自网络实时通信 (WebRTC) 的命令请求。

    WebRTC标准允许两个对等方之间进行通信。这些对等体可以传输实时视频、音频和任意数据。托管集成支持WebRTC，以便在客户的移动应用程序和最终用户的设备之间实现这些类型的流式传输。[有关 WebRTC 标准的更多信息，请参阅 WebRTC。](https://webrtc.org/)

    ```
    {
                  "version":"0",
                  "messageId":"6a7e8feb-b491-4cf7-a9f1-bf3703467718",
                  "messageType":"DEVICE_COMMAND_REQUEST",
                  "source":"aws.iotmanagedintegrations",
                  "customerAccountId":"123456789012",
                  "timestamp":"2017-12-22T18:43:48Z",
                  "region":"ca-central-1",
                  "resources":[
                      "arn:aws:iotmanagedintegrations:ca-central-1:123456789012:managed-thing/6a7e8feb-b491-4cf7-a9f1-bf3703467718"
                  ],
                  "payload":{
                    "endpoints":[{
                      "endpointId":"1",
                      "capabilities":[{
                        "id":"aws.DoorLock",
                        "name":"Door Lock",
                        "version":"1.0"
                      }]
                    }]
                  }
    }
    ```
+ `DEVICE_DISCOVERY_STATUS`
  + 设备的发现状态。

    ```
    {
          "version":"0",
          "messageId":"6a7e8feb-b491-4cf7-a9f1-bf3703467718",
          "messageType":"DEVICE_DISCOVERY_STATUS",
          "source":"aws.iotmanagedintegrations",
          "customerAccountId":"123456789012",
          "timestamp":"2017-12-22T18:43:48Z",
          "region":"ca-central-1",
          "resources":[
            "arn:aws:iotmanagedintegrations:ca-central-1:123456789012:managed-thing/6a7e8feb-b491-4cf7-a9f1-bf3703467718"
          ],
          "payload":{
            "deviceCount": 1,
            "deviceDiscoveryId": "123",
            "status": "SUCCEEDED"
          }
    }
    ```
+ `DEVICE_EVENT`
  + 设备事件发生的通知。

    ```
    {
          "version":"1.0",
          "messageId":"2ed545027bd347a2b855d28f94559940",
          "messageType":"DEVICE_EVENT",
          "source":"aws.iotmanagedintegrations",
          "customerAccountId":"123456789012",
          "timestamp":"1731630247280",
          "resources":[
            "/quit/1b15b39992f9460ba82c6c04595d1f4f"
          ],
          "payload":{
            "endpoints":[{
              "endpointId":"1",
              "capabilities":[{
                "id":"aws.DoorLock",
                "name":"Door Lock",
                "version":"1.0",
                "properties":[{
                  "name":"ActuatorEnabled",
                  "value":"true"
                }]
              }]
            }]
          }
    }
    ```
+ `DEVICE_LIFE_CYCLE`
  + 设备生命周期的状态。

    ```
    { 
          "version": "1.0.0", 
          "messageId": "8d1e311a473f44f89d821531a0907b05",
          "messageType": "DEVICE_LIFE_CYCLE",
          "source": "aws.iotmanagedintegrations",
          "customerAccountId": "123456789012",
          "timestamp": "2024-11-14T19:55:57.568284645Z",
          "region": "ca-central-1",
          "resources": [
            "arn:aws:iotmanagedintegrations:ca-central-1:123456789012:managed-thing/d5c280b423a042f3933eed09cf408657"
            ],
          "payload": {
            "deviceDetails": {
              "id": "d5c280b423a042f3933eed09cf408657",
              "arn": "arn:aws:iotmanagedintegrations:ca-central-1:123456789012:managed-thing/d5c280b423a042f3933eed09cf408657",
              "createdAt": "2024-11-14T19:55:57.515841147Z",
              "updatedAt": "2024-11-14T19:55:57.515841559Z"
            },
            "status": "UNCLAIMED" 
          } 
    }
    ```
+ `DEVICE_OTA`
  + 设备的 OTA 通知。
+ `DEVICE_STATE`
  + 设备状态更新时的通知。

    ```
    { 
          "messageType": "DEVICE_STATE",
          "source": "aws.iotmanagedintegrations",
          "customerAccountId": "123456789012",
          "timestamp": "1731623291671",
          "resources": [
            "arn:aws:iotmanagedintegrations:ca-central-1:123456789012:managed-thing/61889008880012345678"
          ],
          "payload": {
            "addedStates": {
              "endpoints": [{
                "endpointId": "nonEndpointId",
                "capabilities": [{
                  "id": "aws.OnOff",
                  "name": "On/Off",
                  "version": "1.0",
                  "properties": [{
                    "name": "OnOff",
                    "value": {
                      "propertyValue": "\"onoff\"",
                      "lastChangedAt": "2024-06-11T01:38:09.000414Z"
                    }
                  }
                ]}
              ]}
            ]}
          } 
    }
    ```