เหตุการณ์เป็นแบบอะซิงโครนัสและจัดการโดย Google Cloud Pub/Sub ในหัวข้อเดียวต่อ Projectเหตุการณ์จะให้ข้อมูลอัปเดตสำหรับอุปกรณ์และโครงสร้างทั้งหมด และรับประกันการรับเหตุการณ์ตราบใดที่ผู้ใช้ไม่ได้เพิกถอนโทเค็นเพื่อการเข้าถึงและข้อความเหตุการณ์ยังไม่หมดอายุ
เปิดใช้กิจกรรม
เหตุการณ์เป็นฟีเจอร์ที่ไม่บังคับของ SDM API ดู เปิดใช้เหตุการณ์ เพื่อดูวิธีเปิดใช้เหตุการณ์สำหรับ Project
Google Cloud Pub/Sub
ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีการทำงานของ Pub/Sub ได้ที่เอกสารประกอบของ Google Cloud Pub/Sub โดยเฉพาะอย่างยิ่งฟีเจอร์ต่อไปนี้
- ดูข้อมูลเบื้องต้นเกี่ยวกับ Pub/Sub ได้จากคำแนะนำวิธีใช้
- ทำความเข้าใจวิธีการทำงานของการตรวจสอบสิทธิ์
- เลือกไลบรารีของไคลเอ็นต์ที่มีให้ หรือเขียนไลบรารีของคุณเองและใช้แพลตฟอร์ม REST/HTTP หรือ gRPC API
การสมัครรับข้อมูลเหตุการณ์
ก่อนเดือนมกราคม 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 ดังนี้
- เปิดใช้ Cloud Pub/Sub API ใน Google Cloud
- สร้างบัญชีบริการและคีย์บัญชีบริการตามที่อธิบายไว้ในหัวข้อการสร้างบัญชีบริการ เราขอแนะนำให้มอบบทบาท Pub/Sub Subscriber เท่านั้น อย่าลืมดาวน์โหลดคีย์บัญชีบริการลงในเครื่องที่จะใช้ Pub/Sub API
- ระบุข้อมูลรับรองการตรวจสอบสิทธิ์ (คีย์บัญชีบริการ) ให้กับโค้ดของแอปพลิเคชันโดยทำตามวิธีการในหน้าของขั้นตอนก่อนหน้า หรือรับโทเค็นเพื่อการเข้าถึงด้วยตนเองโดยใช้
oauth2lหากต้องการทดสอบการเข้าถึง API อย่างรวดเร็ว - ใช้ข้อมูลเข้าสู่ระบบของบัญชีบริการหรือโทเค็นเพื่อการเข้าถึงกับ Pub/Sub
project.subscriptionsAPI เพื่อดึงและรับทราบข้อความ
oauth2l
Google oauth2l เป็นเครื่องมือบรรทัดคำสั่งสำหรับ OAuth ที่เขียนด้วย Go โดยติดตั้งสำหรับ Mac หรือ Linux โดยใช้ Go
- หากไม่มี Go ในระบบ ให้ดาวน์โหลดและติดตั้งก่อน
- เมื่อติดตั้ง Go แล้ว ให้ติดตั้ง
oauth2lและเพิ่มตำแหน่งลงในตัวแปรสภาพแวดล้อมPATHดังนี้go install github.com/google/oauth2l@latestexport PATH=$PATH:~/go/bin - ใช้
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-platformya29.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