Добро пожаловать в Центр разработчиков Google Home, новое место, где можно научиться разрабатывать действия для умного дома. Примечание. Вы продолжите создавать действия в консоли действий.

Обработка ошибок и исключений, Обработка ошибок и исключений

Оптимизируйте свои подборки Сохраняйте и классифицируйте контент в соответствии со своими настройками.

Когда устройства или запросы не работают должным образом, важно обеспечить хорошую обработку ошибок и связь для ваших пользователей, чтобы они понимали, что произошло, и, когда это возможно, как это исправить. Убедитесь, что вы продумали возможные сценарии отказа и то, как ваше устройство отреагирует: что, если пользователь прервет выполняемую задачу? Что делать, если пользователь запрашивает действие с устройства, когда оно находится в автономном режиме? Планирование этих проблем и помощь пользователю в устранении их может помочь избежать разочарования пользователей и повысить качество работы ваших устройств.

В этом руководстве приведены некоторые примеры ответов о намерениях, которые обрабатывают ошибки. См. Ошибки и исключения , чтобы просмотреть допустимые значения errorCode для ошибок и исключений.

Пример 1: Ответ об ошибке для намерения EXECUTE

У конечного пользователя есть два умных светильника, установленных в гостиной. Пользователь отдает команду «включить свет в гостиной», и Google отправляет намерение EXECUTE на ваш URL-адрес выполнения. Вы обнаружили, что устройства пользователя отключены и не поддаются контролю, поэтому ваше выполнение возвращает ответ EXECUTE со status ERROR и errorCode 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 will prompt the user with "the device are not available right now" after receiving the response. Remember that you still need to send offline state for devices in report state after sending errorCode deviceOffline in EXECUTE response.

Пример 2: Неблокирующее исключение для намерения EXECUTE

Пользователь пытается запереть свой смарт-замок на входной двери с помощью устройства с Assistant . Вы можете успешно управлять их блокировкой, но обнаруживаете, что батарея устройства разряжена, поэтому ваше выполнение возвращает ответ EXECUTE со status SUCCESS и exceptionCode 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 proactive notifications .

Умная сушилка работает, и кто-то открывает дверь до завершения цикла. Вы можете вызвать Google Home Graph API reportStateAndNotifications method to send a proactive notification with an 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 см. в справочной документации по ошибкам и исключениям .