오류 및 예외 처리

기기 또는 요청이 예상대로 작동하지 않는 경우 사용자에게 발생한 상황과 가능한 경우 해결 방법을 이해할 수 있도록 적절한 오류 처리 및 커뮤니케이션을 제공하는 것이 중요합니다. 가능한 실패 시나리오와 기기가 어떻게 대응해야 하는지 생각해 보세요. 진행 중인 작업을 사용자가 중단하면 어떻게 해야 할까요? 기기가 오프라인 상태일 때 사용자가 기기에 작업을 요청하면 어떻게 해야 할까요? 이러한 문제를 계획하고 사용자가 문제를 해결할 수 있도록 지원하면 사용자 불만을 방지하고 기기의 환경을 개선할 수 있습니다.

이 가이드에서는 오류를 처리하는 인텐트 응답의 몇 가지 예를 제공합니다. 오류 및 예외의 유효한 errorCode 값을 검토하려면 오류 및 예외를 참고하세요.

예 1: EXECUTE 인텐트의 오류 응답

최종 사용자의 거실에 스마트 조명 2개가 설치되어 있습니다. 사용자가 '거실 조명 켜 줘'라는 명령어를 실행했고 Google이 처리 URL로 EXECUTE 인텐트를 전송했습니다. 사용자의 기기가 오프라인 상태이며 제어할 수 없다는 것을 확인했으므로 처리가 status ERRORerrorCode 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를 지금 사용할 수 없습니다"라고 안내합니다. EXECUTE 응답에서 errorCode deviceOffline을 전송한 후에도 보고 상태의 기기에 오프라인 상태를 전송해야 합니다.

예 2: EXECUTE 인텐트의 비차단 예외

사용자가 어시스턴트를 사용하여 현관문의 스마트 잠금장치를 잠그려고 합니다. Assistant 잠금장치를 제어할 수 있지만 기기 배터리가 부족한 것을 확인했으므로 처리가 status SUCCESSexceptionCode 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"
      }
    }]
  }
}

어시스턴트는 응답을 받은 후 사용자에게 "device의 배터리가 부족합니다"라고 안내합니다.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은(는) 알림을 받은 후 사용자에게 "device door is opened"라고 안내합니다. 동일한 페이로드에서 알림과 함께 상응하는 기기 상태를 전송할 수 있습니다.

예 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는 알림을 받은 후 사용자에게 'device is jammed'라고 안내합니다. 동일한 페이로드에서 알림과 함께 상응하는 기기 상태를 전송할 수 있습니다.

자세한 내용과 errorCodes오류 및 예외 참조 문서를 참고하세요.