デバイスまたはリクエストが想定どおりに機能しない場合は、適切なエラー処理と通信をユーザーに提供して、ユーザーが何が起こったか、可能な限り修正する方法を把握できるようにすることが重要です。考えられる障害シナリオとデバイスがどのように応答するかについて必ず検討してください。たとえば、ユーザーが進行中のタスクを中断したらどうするか、オフラインのときにユーザーがデバイスにアクションをリクエストしたらどうなるでしょうか。こうした問題に備え、ユーザーの回復をサポートすることで、ユーザーの不満を回避し、デバイスのエクスペリエンスを高めることができます。
このガイドでは、エラーを処理するインテント レスポンスの例をいくつか示します。エラーと例外の有効な errorCode
値を確認するには、エラーと例外をご覧ください。
例 1: EXECUTE
インテントのエラー レスポンス
あるエンドユーザーが、2 個のスマートライトをリビングに設置しました。ユーザーが「リビングの電気をつけて」というコマンドを出すと、Google が EXECUTE
インテントをフルフィルメント URL に送信しました。しかし、ユーザーのデバイスがオフラインになっていて制御できないことがわかり、フルフィルメントから status
ERROR
と errorCode
deviceOffline
を含む EXECUTE
レスポンスが返されました。
この例では、前述のように、ライトデバイスから errorCode
を含む EXECUTE
レスポンスを返す方法を示しています。
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "payload": { "commands": [ { "ids": [ "light-device-id-1" ], "status": "ERROR", "errorCode": "deviceOffline" }, { "ids": [ "light-device-id-2" ], "status": "ERROR", "errorCode": "deviceOffline" } ] } }
Google Assistant はレスポンスを受け取った後、「device is not available now」というレスポンスをユーザーに示します。EXECUTE
レスポンスで errorCode
deviceOffline
を送信した後も、レポート状態のデバイスのオフライン状態を送信する必要があります。
例 2: EXECUTE
インテントの非ブロッキング例外
ユーザーが Assistant でデバイスを使用して玄関のスマートロックをロックしようとしています。ロックは正常に制御できていますが、デバイスのバッテリー残量が少ないことがわかったため、フルフィルメントは status
SUCCESS
と exceptionCode
lowBattery
を含む EXECUTE
レスポンスを返します。
この例では、前述のようにロックデバイスから exceptionCode
を含む EXECUTE
レスポンスを送信する方法を示しています。
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "payload": { "commands": [{ "ids": ["lock-device-id-1"], "status": "SUCCESS", "states": { "on": true, "online": true, "isLocked": true, "isJammed": false, "exceptionCode": "lowBattery" } }] } }
Assistant はレスポンスを受け取った後、ユーザーに「デバイスのバッテリー残量が少なくなっています」というメッセージが表示されます。
例 3: パーソナル通知
パーソナル通知を使って事前にエラーを通知し、ユーザーに警告すると効果的な場合があります。たとえば、ユーザーが自動的に完了すると思っている機能に関する通知です。パーソナル通知をサポートするトレイトでは、smart home のプロアクティブ通知を実装していれば、エラーの発生中にユーザーにプロアクティブに通知できます。
スマート乾燥機の稼働中、サイクルが終了する前に誰かが扉を開けました。Google Home Graph API の reportStateAndNotifications
メソッドを呼び出して、errorCode
でプロアクティブ通知を送信できます。
この例では、前述のように乾燥機のデバイスから errorCode
でパーソナル通知を送信する方法を示しています。
POST https://homegraph.googleapis.com/v1/devices:reportStateAndNotification
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "agentUserId": "agent-user-id", "eventId": "unique-event-id", "payload": { "devices": { "notifications": { "dryer-device-id": { "RunCycle": { "priority": 0, "status": "FAILURE", "errorCode": "deviceDoorOpen" } } }, "states": { "dryer-device-id": { "isRunning": false, "isPaused": true } } } } }
Assistant は、通知を受信すると、「デバイスのドアが開いています」というメッセージをユーザーに表示します。通知とともに、対応するデバイスの状態を同じペイロードで送信できます。
例 4: フォローアップ通知
フォローアップ通知をサポートするトレイト コマンドの場合、smart home フォローアップ通知を実装していれば、エラーまたは例外の発生中にユーザーにフォローアップ通知を送信できます。
ユーザーが車庫のドアを閉めるようコマンドを発行しましたが、ドアを閉める際にドアが動きません。このような場合は、errorCode
でフォローアップ通知を送信できます。
POST https://homegraph.googleapis.com/v1/devices:reportStateAndNotification
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "agentUserId": "agent-user-id", "eventId": "unique-event-id", "payload": { "devices": { "notifications": { "door-device-id": { "LockUnlock": { "priority": 0, "followUpResponse": { "status": "FAILURE", "errorCode": "deviceJammingDetected", "followUpToken": "follow-up-token-1" } } } }, "states": { "door-device-id": { "openPercent": 70 } } } } }
Assistant は通知を受信すると、「デバイスが詰まっています」というメッセージが表示されます。対応するデバイスの状態を、通知とともに同じペイロードで送信できます。
errorCodes
の詳細と詳細については、エラーと例外のリファレンス ドキュメントをご覧ください。