處理錯誤和例外狀況

如果裝置或要求無法正常運作,請務必提供 為使用者提供良好的錯誤處理與溝通機制,讓他們瞭解 並盡可能修正該問題請務必考量 可能的故障情況,以及裝置的回應方式:如果使用者 中斷進行中的工作?如果使用者透過裝置要求執行動作,該怎麼辦? 是否在離線狀態下?針對這些問題進行規劃並協助使用者復原 不但可避免使用者造成困擾,還能提供更優質的體驗 以及你的裝置類型

本指南提供了一些意圖回應的範例,說明如何處理錯誤。詳情請見 錯誤和例外狀況 查看有效的 errorCode 值,瞭解錯誤和例外狀況。

範例 1:EXECUTE 意圖的錯誤回應

一名使用者擁有兩個智慧型燈具,並安裝在客廳。該使用者 發出「開啟客廳的燈」指令。Google 傳送了 EXECUTE 意圖傳送至執行要求網址您發現使用者的裝置處於離線狀態 且無法控制,因此執行要求會傳回含有以下內容的 EXECUTE 回應: status ERRORerrorCode deviceOffline

這個範例說明如何透過EXECUTE 從輕量裝置存取 errorCode,如前文所述:

{
  "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 會透過「the device」 目前不提供」才能達到相同的效果記住 傳送後需要為處於報告狀態的裝置傳送離線狀態 在「EXECUTE」回應中errorCode deviceOffline

示例 2:EXECUTE 意圖的非封鎖例外狀況

使用者嘗試使用 Assistant。您可以成功控制他們的門鎖, 你發現裝置電量不足,因此執行要求會傳回 EXECUTE 傳回 status SUCCESSexceptionCode lowBattery

這個範例說明如何傳送含有EXECUTE 按照先前所述,從鎖定裝置登入 exceptionCode

{
  "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 會提示使用者「the device 過低」 電池」才能達到相同的效果

示例 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 會提示使用者「device」門 已開啟」在收到通知後。您可以將對應的 在同一酬載中,顯示在通知旁邊的裝置狀態。

範例 4:後續通知

如果使用支援後續通知的 trait 指令,您可以傳送 系統發生錯誤或發生例外狀況時,向使用者傳送後續通知 您已導入 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 會提示使用者:「the device」 「卡住」在收到通知後。您可以將對應的 裝置狀態在同一酬載中顯示通知。

如需詳細資訊和詳細的 errorCodes,請參閱 錯誤和例外狀況 參考文件