多くのスマートホームスキルで発生する問題はテストとトラブルシューティングによって解決できます。ここではデバイスの検出の失敗、デバイスが操作できない問題とスマートホームスキルAPIで対応されている発話をご紹介します。
ユーザがスマートホームスキルを有効にして、「Alexa、デバイスを検出して」の発話かAlexaアプリで「デバイスを検出」を押しても新しいデバイスが検出できない場合、Discoverディレクティブに対するレスポンスが不正である可能性があります。この現象を解決するヒントをご紹介します:
どの言語やロケールでテストしても無事に検出されますが、スキルの審査時に特定のリージョンで検出できない場合があります。特定のリージョンで検出できない時は以下の解決方法をご確認ください。
もしデバイスが操作できる状態でAlexaが上記のメッセージを返したら、Lambda関数がリクエストに対するレスポンスを正しく返していない可能性があります。基本的にAlexaはLambdaからのレスポンスを8秒まで待ちますので、Lambda関数は8秒以内にレスポンスを送信する必要があります。以下の例をご参照ください:
上記の4-7番で8秒以上になりますと、そのランプが正しく操作されたにも関わらず、Alexaは「すみません。<デバイス>が応答していません。」と応答します。Lambda関数の最長実行時間がデフォルトの3秒に設定されおり、かつ上記の6番が3秒以上かかる場合、デバイスクラウドがデバイスを操作してもLambda関数がタイムアウトしてしまいます。そうしますと、上記の7番が正しく実行されません。本現象を解消するには、Lambda関数の最長実行時間が8秒に設定されていることと、デバイスクラウドが正しく反応し、Lambda関数が8秒以内にレスポンスを送信できることをご確認ください。
技術資料のサンプルJSONと比較してください。インタフェースによって、payloadの形式が異なりますので、各パラメータのスペリング、payloadオブジェクトの形式、headerオブジェクトのnamespaceとnameのパラメーターのスペリングを確認してください。一からレスポンスを組み立てるより、サンプルのJSONをコピーし、一部編集して使うことを推奨します。
例えば、ThermostatControllerのAdjustTargetTemperatureの技術資料では、payload内のtargetSetpointDeltaの形式を確認できます:
{
"directive": {
"header": {
"namespace": "Alexa.ThermostatController",
"name": "AdjustTargetTemperature",
"messageId": "<message id>",
"correlationToken": "<an opaque correlation token>",
"payloadVersion": "3"
},
"endpoint": {
"scope": {
"type": "BearerToken",
"token": "<an OAuth2 bearer token>"
},
"endpointId": "<endpoint id>",
"cookie": {}
},
"payload": {
"targetSetpointDelta": {
"value": -2.0,
"scale": "CELSIUS"
}
}
}
}
Alexa開発者コンソールのスマートホームテストを使用してください。以下のインターフェースの自動化されたテストが実行できます:
デバイスの全てのプロパティがStateReportに定義されていることをご確認ください。例えば、TemperatureSensorとThermostatControllerが含まれているデバイスでは、TemperatureSensorのtemperatureのプロパティとThermostatControllerのthermostatMode、targetSetpoint、lowerSetpointやupperSetpointがDiscoveryで定義されているのであればそれらのプロパティがStateReportに含まれていることをご確認ください。
ある発話で特定のデバイスのインターフェースを操作できますが、似たような発話で同じデバイスが操作できない場合があります。各インターフェースの技術資料にはサポートされている発話が記載されています。そのインターフェースが正しく実装されているのであれば、技術資料にある発話を使用できます。例えば、ThermostatControllerが実装されているサーモスタットは技術資料にある発話で操作することができます。