จัดการข้อผิดพลาดและข้อยกเว้น

เมื่ออุปกรณ์หรือคำขอไม่ทำงานตามที่คาดไว้ คุณควรจัดการข้อผิดพลาดและการสื่อสารที่ดีสำหรับผู้ใช้ เพื่อให้ผู้ใช้เข้าใจสิ่งที่เกิดขึ้น และวิธีแก้ไขหากเป็นไปได้ โปรดพิจารณาถึง สถานการณ์ที่อาจเกิดข้อผิดพลาดและวิธีที่อุปกรณ์ควรตอบสนอง: จะเกิดอะไรขึ้นหากผู้ใช้ ขัดจังหวะงานที่กำลังดำเนินการอยู่ จะเกิดอะไรขึ้นหากผู้ใช้ขอให้ดำเนินการจากอุปกรณ์ ขณะที่อุปกรณ์ออฟไลน์ การวางแผนรับมือปัญหาเหล่านี้และการช่วยเหลือผู้ใช้ให้กู้คืน จากปัญหาดังกล่าวจะช่วยหลีกเลี่ยงความไม่พอใจของผู้ใช้และสร้างประสบการณ์การใช้งานที่มีคุณภาพสูงขึ้น สำหรับอุปกรณ์ของคุณ

คู่มือนี้แสดงตัวอย่างการตอบกลับ Intent ที่จัดการข้อผิดพลาด ดูข้อผิดพลาดและข้อยกเว้นเพื่อตรวจสอบค่า errorCode ที่ถูกต้องสำหรับข้อผิดพลาดและข้อยกเว้น

ตัวอย่างที่ 1: การตอบกลับข้อผิดพลาดสำหรับเจตนา EXECUTE

ผู้ใช้ปลายทางติดตั้งหลอดไฟอัจฉริยะ 2 ดวงในห้องนั่งเล่น ผู้ใช้ ออกคำสั่ง "เปิดไฟห้องนั่งเล่น" และ Google ส่งEXECUTE Intent ไปยัง 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 จะแจ้งให้ผู้ใช้ทราบว่า "อุปกรณ์ไม่พร้อมใช้งานในขณะนี้" หลังจากได้รับคำตอบ โปรดทราบว่าคุณยังคงต้องส่งสถานะออฟไลน์สำหรับอุปกรณ์ในสถานะรายงานหลังจากส่ง errorCode deviceOffline ในการตอบกลับ EXECUTE

ตัวอย่างที่ 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 การแจ้งเตือนเชิงรุก

เครื่องอบผ้าอัจฉริยะกำลังทำงาน และมีคนเปิดประตูเครื่องก่อนที่รอบการอบจะเสร็จสิ้น คุณเรียกใช้เมธอด 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 จะแจ้งให้ผู้ใช้ทราบว่า "ประตูอุปกรณ์ เปิดอยู่" หลังจากได้รับการแจ้งเตือน คุณสามารถส่งสถานะอุปกรณ์ที่เกี่ยวข้องพร้อมกับการแจ้งเตือนในเพย์โหลดเดียวกันได้

ตัวอย่างที่ 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โดยละเอียดได้ที่เอกสารอ้างอิงข้อผิดพลาดและข้อยกเว้น