处理错误和异常

当设备或请求没有达到预期效果时,务必要提供 良好的错误处理和沟通方式,确保用户了解 并尽可能说明如何纠正错误。请务必仔细考虑 设备可能出现的故障场景以及设备的响应方式: 会打断正在进行的任务吗?如果用户请求通过设备执行某项操作,该怎么办? 该怎么办?为这些问题做好规划并帮助您的用户恢复 可以避免用户产生不满 。

本指南提供了一些用于处理错误的 intent 响应示例。请参阅 错误和异常 查看错误和异常的有效 errorCode 值。

示例 1:针对 EXECUTE intent 的错误响应

最终用户在客厅安装了两个智能灯。用户 发出“打开客厅的灯”的指令并且 Google 发送了 EXECUTE intent 添加到您的执行方式网址。你发现用户的设备处于离线状态且不受控制,因此你的执行方式会返回包含 status ERRORerrorCode deviceOfflineEXECUTE 响应。

此示例演示了如何返回包含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 are 目前无法播放”。请记住,你仍然 对于处于报告状态的设备,需要在发送后发送离线状态 “EXECUTE”回复中的errorCode deviceOffline

示例 2:针对 EXECUTE intent 的非阻塞异常

一位用户尝试使用设备为前门上锁的智能锁 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 将提示用户“设备电量过低” 电池"。

示例 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 会提示用户输入“the device door is 打开”。您可以将相应的 设备状态和通知。

示例 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 会提示用户输入“the device is 卡住了”。您可以将相应的 具有相同载荷的通知的设备状态。

如需了解详情和 errorCodes,请参阅 错误和异常 参考文档。