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 báo và cách xử lý lỗi phù hợp cho người dùng để họ hiểu được chuyện gì đã xảy ra và cách khắc phục (nếu có thể). Hãy đảm bảo bạn đã cân nhắc kỹ các trường hợp có thể xảy ra lỗi và cách thiết bị 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 nhiệm vụ đang thực hiện? Điều gì sẽ xảy ra nếu người dùng yêu cầu thực hiện một hành động trên thiết bị khi thiết bị đó không có mạng? Việc lên kế hoạch cho những vấn đề này và giúp người dùng khôi phục có thể tránh gây thất vọng cho người dùng và tạo ra 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à ngoại lệ để xem các giá trị errorCode hợp lệ cho lỗi và ngoại lệ.
Ví dụ 1: Phản hồi lỗi cho ý định EXECUTE
Người dùng cuối đã lắp đặt hai đè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 thiết bị của người dùng đang không có mạng và không thể điều khiển được, vì vậy, phương thức thực hiện của bạn trả về phản hồi EXECUTE có status ERROR và errorCode deviceOffline.
Ví dụ này minh hoạ cách trả về phản hồi EXECUTE bằng errorCode từ một thiết bị đèn như mô tả trước đó:
{ "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 bằng câu "thiết bị hiện không hoạt động" sau khi nhận được phản hồi. Xin lưu ý rằng bạn vẫn cần gửi trạng thái ngoại tuyến cho các thiết bị trong trạng thái báo cáo sau khi gửi errorCode deviceOffline trong phản hồi EXECUTE.
Ví dụ 2: 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 thành công khoá của họ nhưng
bạn thấy pin của thiết bị sắp hết, vì vậy, phương thức thực hiện của bạn sẽ trả về một phản hồi EXECUTE
với status SUCCESS và exceptionCode lowBattery.
Ví dụ này minh hoạ cách gửi phản hồi EXECUTE bằng exceptionCode 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" } }] } }
Assistant nhắc người dùng bằng câu "thiết bị sắp hết pin" sau khi nhận được phản hồi.
Ví dụ 3: Thông báo lỗi chủ động
Trong một số trường hợp, việc thông báo cho người dùng về lỗi có thể hữu ích, đặc biệt là đối với các chức năng mà người dùng muốn hoàn tất tự động. Đối với những đặ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 reportStateAndNotifications của API Google Home Graph để gửi thông báo chủ động bằng errorCode:
Ví dụ này minh hoạ cách gửi thông báo chủ động bằng errorCode 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 bằng thông báo "cửa thiết bị đã mở" sau khi nhận được thông báo. Bạn có thể gửi 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 theo
Đối với các lệnh đặc điểm hỗ trợ thông báo tiếp theo, bạn có thể gửi thông báo tiếp theo cho người dùng khi xảy ra lỗi hoặc ngoại lệ, nếu bạn đã triển khai smart home thông báo tiếp theo.
Người dùng ra lệnh đóng cửa nhà xe, nhưng cửa bị kẹt trong khi đóng. Bạn có thể gửi thông báo tiếp theo bằng 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 nhắc người dùng bằng thông báo "thiết bị bị kẹt" sau khi nhận được thông báo. Bạn có thể gửi 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à ngoại lệ.