Alexa.InventoryLevelSensorインターフェース

Alexa.InventoryLevelSensorインターフェース

AlexaスキルにAlexa.InventoryLevelSensorインターフェースを実装すると、デバイスに残っている消耗品の量をレポートできます。たとえば、デバイスがプリンターの場合、プリンターに残っているインクまたはトナーの量をレポートできます。シアン、イエロー、マゼンタ、ブラックのインクまたはトナー用に別々のストレージを備えたプリンターなど、複数の消耗品に対してInventoryLevelSensorの複数のインスタンスを実装できます。

デバイスで消耗品が使用されたことをレポートする場合は、代わりにInventoryUsageSensorインターフェースを実装します。追跡する消耗品の寿命が不明な場合は、代わりにInventoryLevelUsageSensorインターフェースを実装します。

InventoryLevelSensorインターフェースがサポートする言語については、Alexaインターフェースとサポートしている言語の一覧を参照してください。

Dash Replenishment ID

Dash Replenishment through Alexaを使用すると、デバイスのユーザーは、消耗品の残量が少なくなったときにその消耗品を再注文できるように設定を行うことができます。詳細については、Dash Replenishmentの概要ページおよびDash Replenishmentのアカウント設定ページを参照してください。

デバイスをDash Replenishmentに登録する場合は、デバイスの各消耗品にDash Replenishment IDを設定します。このDash Replenishment IDによって、消耗品の交換用にユーザーが注文できる商品(1つ以上)を識別します。ユーザーはアカウントで補充機能をセットアップする際に、注文を行う特定の商品を選択します。補充機能は、AlexaにDash Replenishment IDが指定されていなければセットアップできません。Alexaに対してデバイスのDash Replenishment IDを指定するには、次の方法があります。

  • デバイスの検出時にDash Replenishment IDが既にある場合は、検出応答でDash Replenishment IDを指定します。
  • AddOrUpdateReportメッセージで後からDash Replenishment IDを指定することもできます。

プロパティ

Alexa.InventoryLevelSensorインターフェースでは、levelプロパティを使用して、デバイスに現在残っている消耗品の量を表します。

levelは、count(個数)、percentage(割合)、volume(容量)、weight(重量)のいずれかのタイプで表すことができます。volumeとweightには、単位を含めます。

1つのエンドポイントで複数のセンサーをサポートできるため、levelプロパティにはinstanceアトリビュートを必ず含めてください。instance名は検出応答で指定します。

levelプロパティの例

クリップボードにコピーされました。

{
  "namespace": "Alexa.InventoryLevelSensor",
  "instance": "InkSensor.Cyan",
  "name": "level",
  "value": {
    "@type": "Volume",
    "value": 5,
    "unit": "MILLILITER"
  }
}

検出

Alexa.InventoryLevelSensorをサポートするエンドポイントは、Alexa.Discoveryの標準検出メカニズムを使用して表します。

変更レポートでAlexaにプロアクティブにレポートするプロパティのproactivelyReportedをtrueに設定します。

表示カテゴリーの一覧は、表示カテゴリーを参照してください。

機能配列の各InventoryLevelSensorエントリには、通常の検出応答フィールドのほかに、次のフィールドを含めます。

フィールド 説明
instance センサーの名前です。例:Ink.Cyan、Ink.Yellow 文字列
configuration.
measurement
消耗品の測定方法です。countpercentagevolumeweightのいずれかです。volumeとweightには単位を含めます。 オブジェクト
configuration.
replenishment
消耗品のDash Replenishment IDです。 オブジェクト
capabilityResources ユーザーがセンサーとの対話に使用できるフレンドリー名です。 CapabilityResourcesオブジェクト

検出応答の例

以下は、Alexa.InventoryLevelSensorインターフェースをサポートするプリンターのDiscover.Responseメッセージの例です。

クリップボードにコピーされました。

{
  "event": {
    "header": {
      "namespace": "Alexa.Discovery",
      "name": "Discover.Response",
      "payloadVersion": "3",
      “messageId”: “”<一意の識別子、バージョン4 UUIDが望ましい>
    },
    "payload": {
      "endpoints": [
        {
          "endpointId": "<エンドポイントの一意のID>",
          "manufacturerName": "Printer Plus",
          "description": "Printer Plus製スマートプリンター",
          "friendlyName": "プリンター",
          "displayCategories": [
            "OTHER"
          ],
          "cookie": {},
          "capabilities": [
            {
              "type": "AlexaInterface",
              "interface": "Alexa.InventoryLevelSensor",
              "instance": "InkSensor.Cyan",
              "version": "3",
              "properties": {
                "supported": [
                  {
                    "name": "level"
                  }
                ],
                "retrievable": false,
                "proactivelyReported": true
              },
              "configuration": {
                "measurement": {
                  "@type": "Volume",
                  "unit": "MILLILITER"
                },
                "replenishment": {
                  "@type": "DashReplenishmentId",
                  "value": "<リフィルオプションのDash Replenishment ID>"
                }
              },
              "capabilityResources": {
                "friendlyNames": [
                  {
                    "@type": "text",
                    "value": {
                      "text": "シアンのインク",
                      "locale": "ja-JP"
                    }
                  },
                  {
                    "@type": "text",
                    "value": {
                      "text": "Encre cyan",
                      "locale": "fr-FR"
                    }
                  }
                ]
              }
            },
            {
              "type": "AlexaInterface",
              "interface": "Alexa.InventoryLevelSensor",
              "instance": "PaperSensor.FrontTray",
              "version": "3",
              "properties": {
                "supported": [
                  {
                    "name": "level"
                  }
                ],
                "retrievable": false,
                "proactivelyReported": true
              },
              "configuration": {
                "measurement": {
                  "@type": "Count"
                },
                "replenishment": {
                  "@type": "DashReplenishmentId",
                  "value": "<リフィルオプションのDash Replenishment ID>"
                }
              },
              "capabilityResources": {
                "friendlyNames": [
                  {
                    "@type": "text",
                    "value": {
                      "text": "前面トレイ",
                      "locale": "ja-JP"
                    }
                  }
                ]
              }
            },
            {
              "type": "AlexaInterface",
              "interface": "Alexa.PowerController",
              "version": "3",
              "properties": {
                "supported": [
                  {
                    "name": "powerState"
                  }
                ],
                "retrievable": true,
                "proactivelyReported": true
              }
            },
            {
              "type": "AlexaInterface",
              "interface": "Alexa",
              "version": "3"
            }
          ]
        }
      ]
    }
  }
}

AddOrUpdateReport

エンドポイントの機能サポートが変更された場合は、Alexa.Discovery.AddOrUpdateReportメッセージをプロアクティブに送信する必要があります。たとえば、最初のデバイス検出時に消耗品のDash Replenishment IDがなかった場合は、AddOrUpdateReportメッセージを送信することで、後からAlexaにDash Replenishment IDを指定できます。詳細については、AddOrUpdateReportイベントを参照してください。

AddOrUpdateReportイベントの例

クリップボードにコピーされました。

{
  "event": {
    "header": {
      "namespace": "Alexa.Discovery",
      "name": "AddOrUpdateReport",
      "payloadVersion": "3",
      “messageId”: “”<一意の識別子、バージョン4 UUIDが望ましい>
    },
    "payload": {
      "endpoints": [
        {
          "endpointId": "<エンドポイントの一意のID>",
          "manufacturerName": "Printer Plus",
          "description": "Printer Plus製スマートプリンター",
          "friendlyName": "プリンター",
          "displayCategories": [
            "OTHER"
          ],
          "cookie": {},
          "capabilities": [
            {
              "type": "AlexaInterface",
              "interface": "Alexa.InventoryLevelSensor",
              "instance": "InkSensor.Cyan",
              "version": "3",
              "properties": {
                "supported": [
                  {
                    "name": "level"
                  }
                ],
                "retrievable": true,
                "proactivelyReported": true
              },
              "configuration": {
                "measurement": {
                  "@type": "Volume",
                  "unit": "MILLILITER"
                },
                "replenishment": {
                  "@type": "DashReplenishmentId",
                  "value": "<リフィルオプションのDash Replenishment ID>"
                }
              },
              "capabilityResources": {
                "friendlyNames": [
                  {
                    "@type": "text",
                    "value": {
                      "text": "シアンのインク",
                      "locale": "ja-JP"
                    }
                  },
                  {
                    "@type": "text",
                    "value": {
                      "text": "Encre cyan",
                      "locale": "fr-FR"
                    }
                  }
                ]
              }
            },
            {
              "type": "AlexaInterface",
              "interface": "Alexa.InventoryLevelSensor",
              "instance": "PaperSensor.FrontTray",
              "version": "3",
              "properties": {
                "supported": [
                  {
                    "name": "level"
                  }
                ],
                "retrievable": true,
                "proactivelyReported": true
              },
              "configuration": {
                "measurement": {
                  "@type": "Count"
                },
                "replenishment": {
                  "@type": "DashReplenishmentId",
                  "value": "<リフィルオプションのDash Replenishment ID>"
                }
              },
              "capabilityResources": {
                "friendlyNames": [
                  {
                    "@type": "text",
                    "value": {
                      "text": "前面トレイ",
                      "locale": "ja-JP"
                    }
                  }
                ]
              }
            },
            {
              "type": "AlexaInterface",
              "interface": "Alexa.PowerController",
              "version": "3",
              "properties": {
                "supported": [
                  {
                    "name": "powerState"
                  }
                ],
                "retrievable": true,
                "proactivelyReported": true
              }
            },
            {
              "type": "AlexaInterface",
              "interface": "Alexa",
              "version": "3"
            }
          ]
        }
      ]
    }
  }
}

変更レポート

エンドポイントの状態の変化をプロアクティブにレポートするために、ChangeReportイベントを送信します。プロアクティブにレポートするプロパティは検出応答で特定します。変更レポートの詳細については、状態および変更レポートについてを参照してください。

ChangeReportイベントの例

以下の例では、すべてのセンサーの日次チェックを実行した後に各消耗品の残量をAlexaに通知しています。

クリップボードにコピーされました。

{  
  "event": {
    "header": {
      "namespace": "Alexa",
      "name": "ChangeReport",
      "messageId": "<一意の識別子、バージョン4 UUIDが望ましい>",
      "payloadVersion": "3"
    },
    "endpoint": {
      "scope": {
        "type": "BearerToken",
        "token": "<OAuth2ベアラートークン>"
      },
      "endpointId": "<エンドポイントID>"
    },
    "payload": {
      "change": {
        "cause": {
          "type": "PERIODIC_POLL"
        },
        "properties": [
          {
            "namespace": "Alexa.InventoryLevelSensor",
            "instance": "InkSensor.Cyan",
            "name": "level",
            "value": {
              "@type": "Volume",
              "value": 5,
              "unit": "MILLILITER"
            },
            "timeOfSample": "2019-10-31T17:00:00Z",
            "uncertaintyInMilliseconds": 0
          },
          {
            "namespace": "Alexa.InventoryLevelSensor",
            "instance": "PaperSensor.FrontTray",
            "name": "level",
            "value": {
              "@type": "Count",
              "value": 200
            },
            "timeOfSample": "2019-10-31T17:00:00Z",
            "uncertaintyInMilliseconds": 0
          },
          {
            "namespace": "Alexa.PowerController",
            "name": "powerState",
            "value": "ON",
            "timeOfSample": "2019-10-31T17:00:00Z",
            "uncertaintyInMilliseconds": 0
          }
        ]
      }
    }
  },
  "context": {}
}