Xử lý lỗi và ngoại lệ

Khi thiết bị hoặc yêu cầu không hoạt động như mong đợi, bạn cần cung cấp thông tin xử lý lỗi và giao tiếp tốt cho người dùng để họ hiểu rõ những gì đã xảy ra và cách khắc phục (nếu có thể). Hãy nhớ cân nhắc các trường hợp có thể xảy ra lỗi và cách thiết bị của bạn nên phản hồi: Điều gì sẽ xảy ra nếu người dùng làm gián đoạn một tác vụ đang thực hiện? Điều gì sẽ xảy ra nếu người dùng yêu cầu một hành động từ thiết bị khi thiết bị đó đang ở trạng thái ngoại tuyến? Việc lên kế hoạch cho những vấn đề này và giúp người dùng khắc phục có thể tránh gây khó chịu cho người dùng và mang lại trải nghiệm chất lượng cao hơn cho thiết bị của bạn.

Hướng dẫn này cung cấp một số ví dụ về phản hồi ý định xử lý lỗi. Hãy xem phần Lỗi và trường hợp ngoại lệ để xem các giá trị errorCode hợp lệ cho lỗi và trường hợp ngoại lệ.

Ví dụ 1: Phản hồi lỗi cho ý định EXECUTE

Người dùng cuối đã cài đặt 2 đèn thông minh trong phòng khách. Người dùng đưa ra lệnh "bật đèn phòng khách" và Google đã gửi ý định EXECUTE đến URL thực hiện của bạn. Bạn nhận thấy rằng các thiết bị của người dùng đang ở trạng thái ngoại tuyến và không thể điều khiển được, vì vậy, quá trình thực hiện của bạn sẽ trả về phản hồi EXECUTEstatus ERRORerrorCode deviceOffline.

Ví dụ này minh hoạ cách trả về phản hồi EXECUTEerrorCode từ một thiết bị đèn như mô tả ở trên:

{
  "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 nhắc người dùng "thiết bị device hiện không hoạt động" sau khi nhận được phản hồi. Hãy nhớ rằng bạn vẫn cần gửi trạng thái ngoại tuyến cho các thiết bị ở trạng thái báo cáo sau khi gửi errorCode deviceOffline trong phản hồi EXECUTE.

Ví dụ 2: Trường hợp ngoại lệ không chặn cho ý định EXECUTE

Người dùng cố gắng khoá ổ khoá thông minh trên cửa trước bằng Assistant. Bạn có thể điều khiển ổ khoá của họ thành công nhưng nhận thấy pin của thiết bị đang yếu, vì vậy, quá trình thực hiện của bạn sẽ trả về phản hồi EXECUTEstatus SUCCESSexceptionCode lowBattery.

Ví dụ này minh hoạ cách gửi phản hồi EXECUTEexceptionCode từ một thiết bị khoá như mô tả ở trên:

{
  "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"
      }
    }]
  }
}

Trợ lý sẽ nhắc người dùng "thiết bị device sắp hết pin" sau khi nhận được phản hồi.Assistant

Ví dụ 3: Thông báo lỗi chủ động

Trong một số trường hợp, bạn có thể thông báo cho người dùng về lỗi, đặc biệt là đối với các chức năng mà người dùng mong đợi sẽ tự động hoàn tất. Đối với các đặc điểm hỗ trợ thông báo chủ động, bạn có thể chủ động thông báo cho người dùng khi xảy ra lỗi nếu đã triển khai smart home thông báo chủ động.

Máy sấy thông minh đang chạy và có người mở cửa trước khi chu trình kết thúc. Bạn có thể gọi phương thức của Google Home Graph API reportStateAndNotifications để gửi thông báo chủ động có errorCode:

Ví dụ này minh hoạ cách gửi thông báo chủ động có errorCode từ một thiết bị máy sấy như mô tả ở trên:

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 nhắc người dùng "cửa device door đã mở" sau khi nhận được thông báo. Bạn có thể gửi các trạng thái thiết bị tương ứng cùng với thông báo trong cùng một tải trọng.

Ví dụ 4: Thông báo tiếp nối

Đối với các lệnh đặc điểm hỗ trợ thông báo tiếp nối, bạn có thể gửi một thông báo tiếp nối cho người dùng khi xảy ra lỗi hoặc trường hợp ngoại lệ, nếu đã triển khai smart home thông báo tiếp nối.

Người dùng đưa ra lệnh đóng cửa nhà xe, nhưng cửa bị kẹt khi đóng. Bạn có thể gửi thông báo tiếp nối có 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
        }
      }
    }
  }
}

Trợ lý Assistant sẽ nhắc người dùng "cửa device bị kẹt" sau khi nhận được thông báo. Bạn có thể gửi các trạng thái thiết bị tương ứng cùng với thông báo trong cùng một tải trọng.

Để biết thêm thông tin và errorCodes chi tiết, hãy xem tài liệu tham khảo về Lỗi và trường hợp ngoại lệ.