กิจกรรม

เหตุการณ์เป็นแบบอะซิงโครนัสและจัดการโดย Google Cloud Pub/Sub ในหัวข้อเดียวต่อ Projectเหตุการณ์จะให้ข้อมูลอัปเดตสำหรับอุปกรณ์และโครงสร้างทั้งหมด และรับประกันการรับเหตุการณ์ตราบใดที่ผู้ใช้ไม่ได้เพิกถอนโทเค็นเพื่อการเข้าถึงและข้อความเหตุการณ์ยังไม่หมดอายุ

เปิดใช้กิจกรรม

เหตุการณ์เป็นฟีเจอร์ที่ไม่บังคับของ SDM API ดู เปิดใช้เหตุการณ์ เพื่อดูวิธีเปิดใช้เหตุการณ์สำหรับ Project

Google Cloud Pub/Sub

ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีการทำงานของ Pub/Sub ได้ที่เอกสารประกอบของ Google Cloud Pub/Sub โดยเฉพาะอย่างยิ่งฟีเจอร์ต่อไปนี้

การสมัครรับข้อมูลเหตุการณ์

ก่อนเดือนมกราคม 2025 หากเปิดใช้เหตุการณ์สำหรับ Projectคุณจะได้รับหัวข้อที่โฮสต์โดย Google ซึ่งเจาะจงสำหรับ Project รหัสนั้นในรูปแบบต่อไปนี้

projects/sdm-prod/topics/enterprise-project-id

ตอนนี้โปรเจ็กต์ทั้งหมดต้องโฮสต์หัวข้อ Pub/Sub ด้วยตนเองในโปรเจ็กต์ที่อยู่ในระบบคลาวด์ Google Cloud ของตนเอง (บังคับสำหรับโปรเจ็กต์ใหม่ตั้งแต่เดือนมกราคม 2025 และจำเป็นสำหรับโปรเจ็กต์ที่มีอยู่ทั้งหมดภายในวันที่ 30 พฤศจิกายน 2026) ในรูปแบบต่อไปนี้

projects/gcp-project-name/subscriptions/topic-id

หาก project ใช้หัวข้อที่โฮสต์เองในโปรเจ็กต์ Google Cloud ของคุณอยู่แล้ว ก็ไม่จำเป็นต้องดำเนินการใดๆ การย้ายข้อมูลการกำหนดค่าหัวข้อ Pub/Sub จะไม่ทำให้โทเค็นเพื่อการเข้าถึงของผู้ใช้หรือสิทธิ์ OAuth ที่มีอยู่ใช้งานไม่ได้ หัวข้อและการสมัครใช้บริการที่โฮสต์เองจะขึ้นอยู่กับราคา Google Cloud Pub/Sub มาตรฐาน (ซึ่งรวมถึงรุ่นฟรี 10 GB ต่อเดือน) ดูข้อมูลเพิ่มเติมได้ที่สร้างหัวข้อ

หากต้องการรับเหตุการณ์ ให้สร้างการสมัครใช้บริการแบบพุลหรือพุชในหัวข้อนั้น ทั้งนี้ขึ้นอยู่กับ Use Case ของคุณ ระบบรองรับการสมัครใช้บริการหัวข้อ SDM หลายรายการ ดูข้อมูลเพิ่มเติมได้ที่การจัดการการสมัครใช้บริการ

เหตุการณ์การเริ่มต้น

หากต้องการเริ่มเหตุการณ์เป็นครั้งแรกเมื่อสร้างการสมัครใช้บริการ Pub/Sub แล้ว ให้เรียกใช้ API devices.list เป็นทริกเกอร์แบบครั้งเดียว ระบบจะเผยแพร่เหตุการณ์สำหรับบ้านและอุปกรณ์ทั้งหมดหลังจากการเรียกนี้

ดูตัวอย่างได้ที่หน้าให้สิทธิ์ในคู่มือเริ่มใช้งานฉบับย่อ

ลำดับเหตุการณ์

Pub/Sub ไม่รับประกันการส่งเหตุการณ์ตามลำดับ และลำดับการรับเหตุการณ์อาจไม่สอดคล้องกับลำดับที่เหตุการณ์เกิดขึ้นจริง ใช้ช่อง timestamp เพื่อช่วยในการปรับยอดคำสั่งซื้อของกิจกรรม นอกจากนี้ เหตุการณ์อาจมาถึงทีละรายการหรือรวมกันเป็นข้อความเหตุการณ์เดียว

ดูข้อมูลเพิ่มเติมได้ที่การจัดลำดับข้อความ

รหัสผู้ใช้

หากการติดตั้งใช้งานของคุณอิงตามผู้ใช้ (แทนที่จะเป็นโครงสร้างหรืออุปกรณ์) ให้ใช้ช่อง userID จากเพย์โหลดเหตุการณ์เพื่อเชื่อมโยงทรัพยากรและเหตุการณ์ ช่องนี้เป็นรหัสที่ปรับให้ยากต่อการอ่าน (Obfuscate) ซึ่งแสดงถึงผู้ใช้ที่เฉพาะเจาะจง

นอกจากนี้ userID ยังมีอยู่ในส่วนหัวการตอบกลับ HTTP ของการเรียก API แต่ละครั้งด้วย

เหตุการณ์ความสัมพันธ์

เหตุการณ์ความสัมพันธ์แสดงถึงการอัปเดตเชิงสัมพันธ์สำหรับทรัพยากร เช่น เมื่อมีการเพิ่มอุปกรณ์ลงในบ้าน หรือเมื่อมีการลบอุปกรณ์ออกจากบ้าน

เหตุการณ์ความสัมพันธ์มี 3 ประเภท ได้แก่

  • CREATED
  • ลบแล้ว
  • อัปเดตแล้ว

เพย์โหลดสำหรับเหตุการณ์ความสัมพันธ์มีดังนี้

เพย์โหลด

{
  "eventId" : "1a2e13bc-c23c-4bc4-8366-6b5669607f0e",
  "timestamp" : "2019-01-01T00:00:01Z",
  "relationUpdate" : {
    "type" : "CREATED",
    "subject" : "enterprises/project-id/structures/structure-id",
    "object" : "enterprises/project-id/devices/device-id"
  },
  "userId": "AVPHwEuBfnPOnTqzVFT4IONX2Qqhu9EJ4ubO-bNnQ-yi"
}

ในเหตุการณ์ความสัมพันธ์ object คือทรัพยากรที่เรียกเหตุการณ์ให้แสดงขึ้น และ subject คือทรัพยากรที่ object มีความสัมพันธ์ด้วยในขณะนี้ ในตัวอย่างข้างต้น user ได้ให้สิทธิ์เข้าถึงอุปกรณ์ที่เฉพาะเจาะจงนี้แก่ developerและตอนนี้อุปกรณ์ที่ได้รับอนุญาตของ userก็เกี่ยวข้องกับบ้านที่ได้รับอนุญาต ซึ่งจะทริกเกอร์เหตุการณ์

subject เป็นได้เฉพาะห้องหรือบ้านเท่านั้น หาก a developer ไม่มีสิทธิ์ดูโครงสร้างของ usersubjectจะว่างเปล่าเสมอ

ช่อง

ช่อง คำอธิบาย ประเภทข้อมูล
eventId ตัวระบุที่ไม่ซ้ำกันสำหรับกิจกรรม string
ตัวอย่าง: "a121b435-e3bb-4ba1-9dea-945686b7dabf"
timestamp เวลาที่เกิดเหตุการณ์ string
ตัวอย่าง: "2019-01-01T00:00:01Z"
relationUpdate ออบเจ็กต์ที่แสดงรายละเอียดข้อมูลเกี่ยวกับการอัปเดตความสัมพันธ์ object
userId ตัวระบุที่ไม่ซ้ำกันและปรับให้ยากต่อการอ่าน (Obfuscate) ซึ่งแสดงถึงผู้ใช้ string
ตัวอย่าง: "AVPHwEuBfnPOnTqzVFT4IONX2Qqhu9EJ4ubO-bNnQ-yi"

ดูข้อมูลเพิ่มเติมเกี่ยวกับเหตุการณ์ประเภทต่างๆ และวิธีการทำงานได้ที่เหตุการณ์

ตัวอย่าง

เพย์โหลดของเหตุการณ์จะแตกต่างกันไปตามประเภทของเหตุการณ์ความสัมพันธ์แต่ละประเภท ดังนี้

เวลาที่สร้าง

สร้างบ้านแล้ว

"relationUpdate" : {
  "type" : "CREATED",
  "subject" : "",
  "object" : "enterprises/project-id/structures/structure-id"
}

สร้างอุปกรณ์แล้ว

"relationUpdate" : {
  "type" : "CREATED",
  "subject" : "enterprises/project-id/structures/structure-id",
  "object" : "enterprises/project-id/devices/device-id"
}

สร้างอุปกรณ์แล้ว

"relationUpdate" : {
  "type" : "CREATED",
  "subject" : "enterprises/project-id/structures/structure-id/rooms/room-id",
  "object" : "enterprises/project-id/devices/device-id"
}

อัปเดตแล้ว

ย้ายอุปกรณ์แล้ว

"relationUpdate" : {
  "type" : "UPDATED",
  "subject" : "enterprises/project-id/structures/structure-id/rooms/room-id",
  "object" : "enterprises/project-id/devices/device-id"
}

ลบแล้ว

ลบบ้านแล้ว

"relationUpdate" : {
  "type" : "DELETED",
  "subject" : "",
  "object" : "enterprises/project-id/structures/structure-id"
}

ลบอุปกรณ์แล้ว

"relationUpdate" : {
  "type" : "DELETED",
  "subject" : "enterprises/project-id/structures/structure-id",
  "object" : "enterprises/project-id/devices/device-id"
}

ลบอุปกรณ์แล้ว

"relationUpdate" : {
  "type" : "DELETED",
  "subject" : "enterprises/project-id/structures/structure-id/rooms/room-id",
  "object" : "enterprises/project-id/devices/device-id"
}

ระบบจะไม่ส่งเหตุการณ์ความสัมพันธ์ในกรณีต่อไปนี้

  • มีการลบห้องแชท

เหตุการณ์ของทรัพยากร

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

เหตุการณ์ที่สร้างขึ้นเพื่อตอบสนองต่อการเปลี่ยนแปลงค่าของฟิลด์ลักษณะจะมีออบเจ็กต์ traits ซึ่งคล้ายกับการเรียก GET ของอุปกรณ์

เพย์โหลด

{
  "eventId" : "caec1000-1cab-43d3-946f-bc3c5f8615c9",
  "timestamp" : "2019-01-01T00:00:01Z",
  "resourceUpdate" : {
    "name" : "enterprises/project-id/devices/device-id",
    "traits" : {
      "sdm.devices.traits.ThermostatMode" : {
        "mode" : "COOL"
      }
    }
  },
  "userId": "AVPHwEuBfnPOnTqzVFT4IONX2Qqhu9EJ4ubO-bNnQ-yi",
  "resourceGroup" : [
    "enterprises/project-id/devices/device-id"
  ]
}

ใช้เอกสารประกอบเกี่ยวกับลักษณะเฉพาะแต่ละรายการเพื่อทำความเข้าใจรูปแบบเพย์โหลดสำหรับเหตุการณ์ทรัพยากรการเปลี่ยนแปลงช่องลักษณะเฉพาะ

เหตุการณ์ที่สร้างขึ้นเพื่อตอบสนองต่อการดำเนินการของอุปกรณ์ซึ่งไม่ได้เปลี่ยนฟิลด์ลักษณะจะมีเพย์โหลดที่มีออบเจ็กต์ resourceUpdate ด้วย แต่จะมีออบเจ็กต์ events แทนออบเจ็กต์ traits ดังนี้

เพย์โหลด

{
  "eventId" : "0111d3f2-5e7d-4ecf-88ed-8f3b0324f75c",
"timestamp" : "2019-01-01T00:00:01Z",
"resourceUpdate" : { "name" : "enterprises/project-id/devices/device-id", "events" : { "sdm.devices.events.CameraMotion.Motion" : { "eventSessionId" : "CjY5Y3VKaTZwR3o4Y19YbTVfMF...", "eventId" : "jOvQqNOSL76837k_JxTR4BJ6nw...", } } } "userId" : "AVPHwEuBfnPOnTqzVFT4IONX2Qqhu9EJ4ubO-bNnQ-yi",
"eventThreadId" : "d67cd3f7-86a7-425e-8bb3-462f92ec9f59",
"eventThreadState" : "STARTED",
"resourceGroup" : [ "enterprises/project-id/devices/device-id" ] }

เหตุการณ์ของทรัพยากรประเภทเหล่านี้จะกำหนดไว้ในลักษณะเฉพาะ ตัวอย่างเช่น เหตุการณ์การเคลื่อนไหวจะกำหนดไว้ในลักษณะ CameraMotion ดูเอกสารประกอบของแต่ละลักษณะเพื่อทำความเข้าใจรูปแบบเพย์โหลดสำหรับเหตุการณ์ทรัพยากรประเภทเหล่านี้

ช่อง

ช่อง คำอธิบาย ประเภทข้อมูล
eventId ตัวระบุที่ไม่ซ้ำกันสำหรับกิจกรรม string
ตัวอย่าง: "0111d3f2-5e7d-4ecf-88ed-8f3b0324f75c"
timestamp เวลาที่เกิดเหตุการณ์ string
ตัวอย่าง: "2019-01-01T00:00:01Z"
resourceUpdate ออบเจ็กต์ที่แสดงรายละเอียดข้อมูลเกี่ยวกับการอัปเดตทรัพยากร object
userId ตัวระบุที่ไม่ซ้ำกันและปรับให้ยากต่อการอ่าน (Obfuscate) ซึ่งแสดงถึงผู้ใช้ string
ตัวอย่าง: "AVPHwEuBfnPOnTqzVFT4IONX2Qqhu9EJ4ubO-bNnQ-yi"
eventThreadId ตัวระบุที่ไม่ซ้ำกันสำหรับชุดข้อความของเหตุการณ์ string
เช่น "d67cd3f7-86a7-425e-8bb3-462f92ec9f59"
eventThreadState สถานะของชุดข้อความเหตุการณ์ string
ค่า: "STARTED", "UPDATED", "ENDED"
resourceGroup ออบเจ็กต์ที่ระบุทรัพยากรที่อาจมีการอัปเดตที่คล้ายกับเหตุการณ์นี้ ทรัพยากรของกิจกรรม (จากออบเจ็กต์ resourceUpdate) จะแสดงในออบเจ็กต์นี้เสมอ object

ดูข้อมูลเพิ่มเติมเกี่ยวกับเหตุการณ์ประเภทต่างๆ และวิธีการทำงานได้ที่เหตุการณ์

การแจ้งเตือนที่อัปเดตได้

คุณสามารถใช้การแจ้งเตือนตามเหตุการณ์ของทรัพยากรในแอป เช่น สำหรับ Android หรือ iOS เพื่อลดจำนวนการแจ้งเตือนที่ส่ง ระบบอาจใช้ฟีเจอร์ที่เรียกว่าการแจ้งเตือนที่อัปเดตได้ ซึ่งจะอัปเดตการแจ้งเตือนที่มีอยู่ด้วยข้อมูลใหม่ตามเหตุการณ์ที่ตามมาในชุดข้อความเหตุการณ์เดียวกัน

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

ชุดข้อความของกิจกรรมไม่เหมือนกับเซสชันของกิจกรรม ชุดข้อความของเหตุการณ์จะระบุสถานะที่อัปเดตสำหรับเหตุการณ์ก่อนหน้าในชุดข้อความเดียวกัน เซสชันเหตุการณ์จะระบุเหตุการณ์แยกต่างหากที่เกี่ยวข้องซึ่งกันและกัน และอาจมีชุดข้อความเหตุการณ์หลายชุดสำหรับเซสชันเหตุการณ์หนึ่งๆ

เพื่อวัตถุประสงค์ในการแจ้งเตือน ระบบจะจัดกลุ่มเหตุการณ์ประเภทต่างๆ ไว้ในชุดข้อความที่แตกต่างกัน

Google จะเป็นผู้จัดการตรรกะการจัดกลุ่มและการกำหนดเวลาของชุดข้อความนี้ และอาจมีการเปลี่ยนแปลงได้ทุกเมื่อ A developer ควรอัปเดตการแจ้งเตือนตามชุดข้อความและเซสชันของเหตุการณ์ที่ SDM API ระบุ

สถานะชุดข้อความ

เหตุการณ์ที่รองรับการแจ้งเตือนที่อัปเดตได้จะมีช่อง eventThreadState ซึ่งระบุสถานะของชุดข้อความของเหตุการณ์ ณ จุดเวลานั้นด้วย ช่องนี้มีค่าต่อไปนี้

  • STARTED — เหตุการณ์แรกในชุดข้อความของเหตุการณ์
  • UPDATED — เหตุการณ์ในชุดข้อความของเหตุการณ์ที่ดำเนินอยู่ อาจไม่มีเลยหรือมีมากกว่า 1 เหตุการณ์ที่มีสถานะนี้ในชุดข้อความเดียว
  • ENDED — เหตุการณ์สุดท้ายในชุดข้อความเหตุการณ์ ซึ่งอาจซ้ำกับเหตุการณ์ UPDATED ล่าสุด ทั้งนี้ขึ้นอยู่กับประเภทชุดข้อความ

ฟิลด์นี้ใช้เพื่อติดตามความคืบหน้าของชุดข้อความเหตุการณ์และเวลาที่สิ้นสุดได้

การกรองเหตุการณ์

ในบางกรณี ระบบอาจกรองเหตุการณ์ที่อุปกรณ์ตรวจพบออกจากการเผยแพร่ไปยังหัวข้อ Pub/Sub ของ SDM ลักษณะการทำงานนี้เรียกว่าการกรองเหตุการณ์ วัตถุประสงค์ของการกรองเหตุการณ์คือเพื่อหลีกเลี่ยงการเผยแพร่ข้อความเหตุการณ์ที่คล้ายกันมากเกินไปในระยะเวลาสั้นๆ

ตัวอย่างเช่น ระบบอาจเผยแพร่ข้อความไปยังหัวข้อ SDM สำหรับเหตุการณ์การเคลื่อนไหวครั้งแรก ข้อความอื่นๆ สำหรับ Motion หลังจากนั้นจะถูกกรองออกจากการเผยแพร่จนกว่าจะผ่านระยะเวลาที่กำหนด เมื่อระยะเวลาดังกล่าวผ่านไปแล้ว ระบบอาจเผยแพร่ข้อความเหตุการณ์สำหรับประเภทเหตุการณ์นั้นอีกครั้ง

ในแอป Google Home (GHA) เหตุการณ์ที่กรองออกจะยังคงแสดงในประวัติเหตุการณ์ของ userอย่างไรก็ตาม เหตุการณ์ดังกล่าวจะไม่สร้างการแจ้งเตือนของแอป (แม้ว่าจะเปิดใช้การแจ้งเตือนประเภทนั้นไว้ก็ตาม)

เหตุการณ์แต่ละประเภทมีตรรกะการกรองเหตุการณ์ของตัวเอง ซึ่งกำหนดโดย Google และอาจเปลี่ยนแปลงได้ทุกเมื่อ ตรรกะการกรองเหตุการณ์นี้เป็นอิสระจากชุดข้อความเหตุการณ์และตรรกะเซสชัน

บัญชีบริการ

เราขอแนะนำให้ใช้บัญชีบริการเพื่อจัดการการสมัครใช้บริการ SDM API และข้อความเหตุการณ์ บัญชีบริการจะใช้โดยแอปพลิเคชันหรือเครื่องเสมือน ไม่ใช่บุคคล และมีคีย์บัญชีที่ไม่ซ้ำกันของตัวเอง

การให้สิทธิ์บัญชีบริการสำหรับ Pub/Sub API จะใช้ OAuth แบบ 2 ทาง (2LO)

ในขั้นตอนการให้สิทธิ์ 2LO ให้ทำดังนี้

  • developer จะขอโทเค็นเพื่อการเข้าถึงโดยใช้คีย์บริการ
  • developer จะใช้โทเค็นเพื่อการเข้าถึงกับการเรียก API

ดูข้อมูลเพิ่มเติมเกี่ยวกับ Google 2LO และวิธีตั้งค่าได้ที่หัวข้อการใช้ OAuth 2.0 สำหรับแอปพลิเคชันแบบเซิร์ฟเวอร์ต่อเซิร์ฟเวอร์

การให้สิทธิ์

บัญชีบริการควรได้รับสิทธิ์ให้ใช้กับ Pub/Sub API ดังนี้

  1. เปิดใช้ Cloud Pub/Sub API ใน Google Cloud
  2. สร้างบัญชีบริการและคีย์บัญชีบริการตามที่อธิบายไว้ในหัวข้อการสร้างบัญชีบริการ เราขอแนะนำให้มอบบทบาท Pub/Sub Subscriber เท่านั้น อย่าลืมดาวน์โหลดคีย์บัญชีบริการลงในเครื่องที่จะใช้ Pub/Sub API
  3. ระบุข้อมูลรับรองการตรวจสอบสิทธิ์ (คีย์บัญชีบริการ) ให้กับโค้ดของแอปพลิเคชันโดยทำตามวิธีการในหน้าของขั้นตอนก่อนหน้า หรือรับโทเค็นเพื่อการเข้าถึงด้วยตนเองโดยใช้ oauth2l หากต้องการทดสอบการเข้าถึง API อย่างรวดเร็ว
  4. ใช้ข้อมูลเข้าสู่ระบบของบัญชีบริการหรือโทเค็นเพื่อการเข้าถึงกับ Pub/Sub project.subscriptions API เพื่อดึงและรับทราบข้อความ

oauth2l

Google oauth2l เป็นเครื่องมือบรรทัดคำสั่งสำหรับ OAuth ที่เขียนด้วย Go โดยติดตั้งสำหรับ Mac หรือ Linux โดยใช้ Go

  1. หากไม่มี Go ในระบบ ให้ดาวน์โหลดและติดตั้งก่อน
  2. เมื่อติดตั้ง Go แล้ว ให้ติดตั้ง oauth2l และเพิ่มตำแหน่งลงในตัวแปรสภาพแวดล้อม PATH ดังนี้
    go install github.com/google/oauth2l@latest
    export PATH=$PATH:~/go/bin
  3. ใช้ oauth2l เพื่อรับโทเค็นเพื่อการเข้าถึงสำหรับ API โดยใช้ขอบเขต OAuth ที่เหมาะสม ดังนี้
    oauth2l fetch --credentials path-to-service-key.json --scope https://www.googleapis.com/auth/pubsub
    https://www.googleapis.com/auth/cloud-platform
    ตัวอย่างเช่น หากคีย์บริการอยู่ที่ ~/myServiceKey-eb0a5f900ee3.json:
    oauth2l fetch --credentials ~/myServiceKey-eb0a5f900ee3.json --scope https://www.googleapis.com/auth/pubsub
    https://www.googleapis.com/auth/cloud-platform
    ya29.c.Elo4BmHXK5...

ดูข้อมูลการใช้งานเพิ่มเติมได้ที่ oauth2l README

ไลบรารีของไคลเอ็นต์ Google API

มีไลบรารีของไคลเอ็นต์หลายรายการที่พร้อมใช้งานสำหรับ Google APIs ที่ใช้ OAuth 2.0 ดูข้อมูลเพิ่มเติมเกี่ยวกับภาษาที่คุณเลือกได้ที่ไลบรารีของไคลเอ็นต์ Google API

เมื่อใช้ไลบรารีเหล่านี้กับ Pub/Sub APIให้ใช้สตริงขอบเขตต่อไปนี้

https://www.googleapis.com/auth/pubsub
https://www.googleapis.com/auth/cloud-platform

ข้อผิดพลาด

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

ข้อความแสดงข้อผิดพลาด RPC การแก้ปัญหา
รูปภาพจากกล้องไม่พร้อมให้ดาวน์โหลดอีกต่อไป DEADLINE_EXCEEDED รูปภาพเหตุการณ์จะหมดอายุหลังจากเผยแพร่เหตุการณ์ 30 วินาที โปรดดาวน์โหลดก่อนที่รูปภาพจะหมดอายุ
รหัสเหตุการณ์ไม่ได้เป็นของกล้อง FAILED_PRECONDITION ใช้ eventID ที่ถูกต้องซึ่งแสดงโดยเหตุการณ์จากกล้อง

ดูรายการรหัสข้อผิดพลาดทั้งหมดของ API ได้ที่ข้อมูลอ้างอิงรหัสข้อผิดพลาดของ API