Report State เป็นฟีเจอร์สําคัญที่ช่วยให้การดําเนินการ "Home" รายงานสถานะล่าสุดของอุปกรณ์ของผู้ใช้กลับไปเป็น Google Home Graph ได้โดยไม่ต้องรอความตั้งใจ QUERY
Report State รายงานสถานะของอุปกรณ์ของผู้ใช้ให้กับ Google ด้วยคําขอ agentUserId
ที่ระบุ (โดยใช้คําขอ SYNC
เดิม) เมื่อ Google Assistant ต้องการการดําเนินการที่ต้องอาศัยการทําความเข้าใจสถานะปัจจุบันของอุปกรณ์ ก็เพียงแค่ค้นหาข้อมูลสถานะใน Home Graph แทนการออก Intent ของ QUERY
ไปยังระบบคลาวด์ต่างๆ ของบุคคลที่สามก่อนจะออก Intent ของ EXECUTE
หากไม่ใช้ Report State หลอดไฟจากผู้ให้บริการหลายรายในห้องนั่งเล่น คําสั่ง Ok Google เพิ่มความสว่างให้ห้องนั่งเล่นของฉันจะต้องแก้ปัญหาความตั้งใจหลายรายการ QUERY
ที่ส่งไปยังระบบคลาวด์หลายชนิดแทนที่จะแค่ค้นหาค่าความสว่างปัจจุบันตามสิ่งที่รายงานไว้ก่อนหน้านี้ เพื่อประสบการณ์ของผู้ใช้ที่ดีที่สุด
Assistant จะต้องมีสถานะปัจจุบันของอุปกรณ์
โดยไม่จําเป็นต้องมีการส่งไป-กลับอุปกรณ์
หลังจาก SYNC
เริ่มต้นสําหรับอุปกรณ์ แพลตฟอร์มจะส่ง Intent ของ QUERY
ที่รวบรวมสถานะของอุปกรณ์เพื่อป้อนข้อมูล Home Graph
หลังจากนั้น Home Graph จะจัดเก็บสถานะที่ส่งด้วย Report State เท่านั้น
เมื่อโทรหา Report State โปรดระบุข้อมูลรัฐที่สมบูรณ์สําหรับลักษณะเฉพาะ Home Graph จะอัปเดตสถานะสําหรับแต่ละลักษณะ และเขียนทับข้อมูลทั้งหมดสําหรับลักษณะนั้นเมื่อเรียกใช้ Report State ตัวอย่างเช่น หากคุณรายงานสถานะสําหรับลักษณะเฉพาะของ StartStop เพย์โหลดจะต้องมีค่าสําหรับทั้ง isRunning
และ isPaused
เริ่มต้นใช้งาน
หากต้องการใช้งาน Report State ให้ทําตามขั้นตอนต่อไปนี้
เปิดใช้ Google HomeGraph API
-
ใน Google Cloud Platform Console ให้ไปที่หน้า HomeGraph API
ไปที่หน้า HomeGraph API - เลือกโปรเจ็กต์ที่ตรงกับรหัสโปรเจ็กต์ smart home
- คลิกเปิดใช้
สร้างคีย์บัญชีบริการ
ทําตามวิธีการต่อไปนี้เพื่อสร้างคีย์บัญชีบริการจาก GCP Console
-
ในGCP Console ให้ไปที่หน้าสร้างคีย์บัญชีบริการ
ไปที่หน้าสร้างคีย์บัญชีบริการ - จากรายการบัญชีบริการ ให้เลือกบัญชีบริการใหม่
- ป้อนชื่อในช่องชื่อบัญชีบริการ
- ป้อนรหัสในช่องรหัสบัญชีบริการ
จากรายการบทบาท ให้เลือกบัญชีบริการ > ผู้สร้างโทเค็นบัญชีบริการ
สําหรับประเภทคีย์ ให้เลือกตัวเลือก JSON
- คลิกสร้าง ไฟล์ JSON ที่มีการดาวน์โหลดคีย์ลงในคอมพิวเตอร์
เรียก API
เลือกตัวเลือกจากแท็บด้านล่าง
HTTP
Home Graph มีปลายทาง HTTP
- ใช้ไฟล์ JSON ของบัญชีบริการที่ดาวน์โหลดเพื่อสร้างโทเค็นเว็บ JSON (JWT) หากต้องการข้อมูลเพิ่มเติม โปรดดูการตรวจสอบสิทธิ์โดยใช้บัญชีบริการ
- รับโทเค็นเพื่อการเข้าถึง OAuth 2.0 ที่มีขอบเขต
https://www.googleapis.com/auth/homegraph
โดยใช้ oauth2l ดังนี้ - สร้างคําขอ JSON ด้วย
agentUserId
ต่อไปนี้คือตัวอย่างคําขอ JSON สําหรับสถานะการแจ้งเตือนและการแจ้งเตือน - รวมสถานะรายงานและ JSON การแจ้งเตือนและโทเค็นในคําขอ HTTP POST ไปยังปลายทางกราฟของ Google Home ตัวอย่างวิธีสร้างคําขอในบรรทัดคําสั่งโดยใช้
curl
เป็นการทดสอบ
oauth2l fetch --credentials service-account.json \ --scope https://www.googleapis.com/auth/homegraph
{ "requestId": "123ABC", "agentUserId": "user-123", "payload": { "devices": { "states": { "light-123": { "on": true } } } } }
curl -X POST -H "Authorization: Bearer ACCESS_TOKEN" \ -H "Content-Type: application/json" \ -d @request-body.json \ "https://homegraph.googleapis.com/v1/devices:reportStateAndNotification"
gRPC
Home Graph มีปลายทาง gRPC
- ดูคําจํากัดความของบริการบัฟเฟอร์โปรโตคอลสําหรับ Home Graph API
- ทําตามเอกสารสําหรับนักพัฒนาซอฟต์แวร์ gRPC เพื่อสร้างสตอรี่ไคลเอ็นต์สําหรับภาษาที่รองรับ
- เรียกเมธอด ReportStateAndNotification
Node.js
ไคลเอ็นต์ Google API Node.js มีการเชื่อมโยงสําหรับ Home Graph API
- เริ่มต้นบริการ
google.homegraph
โดยใช้ข้อมูลเข้าสู่ระบบเริ่มต้นของแอปพลิเคชัน - เรียกเมธอด
reportStateAndNotification
ด้วย ReportStateAndNotificationRequest โดยจะแสดงPromise
ที่มี ReportStateAndNotificationResponse
const homegraphClient = homegraph({ version: 'v1', auth: new GoogleAuth({ scopes: 'https://www.googleapis.com/auth/homegraph' }) }); const res = await homegraphClient.devices.reportStateAndNotification({ requestBody: { agentUserId: 'PLACEHOLDER-USER-ID', requestId: 'PLACEHOLDER-REQUEST-ID', payload: { devices: { states: { "PLACEHOLDER-DEVICE-ID": { on: true } } } } } });
Java
ไลบรารีของไคลเอ็นต์ HomeGraph API สําหรับ Java มีการเชื่อมโยงสําหรับ Home Graph API
- เริ่มต้น
HomeGraphApiService
โดยใช้ ข้อมูลเข้าสู่ระบบเริ่มต้นของแอปพลิเคชัน - เรียกเมธอด
reportStateAndNotification
ด้วยReportStateAndNotificationRequest
โดยจะแสดงผลReportStateAndNotificationResponse
// Get Application Default credentials. GoogleCredentials credentials = GoogleCredentials.getApplicationDefault() .createScoped(List.of("https://www.googleapis.com/auth/homegraph")); // Create Home Graph service client. HomeGraphService homegraphService = new HomeGraphService.Builder( GoogleNetHttpTransport.newTrustedTransport(), GsonFactory.getDefaultInstance(), new HttpCredentialsAdapter(credentials)) .setApplicationName("HomeGraphExample/1.0") .build(); // Build device state payload. Map<?, ?> states = Map.of("on", true); // Report device state. ReportStateAndNotificationRequest request = new ReportStateAndNotificationRequest() .setRequestId("PLACEHOLDER-REQUEST-ID") .setAgentUserId("PLACEHOLDER-USER-ID") .setPayload( new StateAndNotificationPayload() .setDevices( new ReportStateAndNotificationDevice() .setStates(Map.of("PLACEHOLDER-DEVICE-ID", states)))); homegraphService.devices().reportStateAndNotification(request); }
สถานะรายงานการทดสอบ
คุณต้องทดสอบReport Stateเพื่อเตรียมการดําเนินการให้ผ่านการรับรอง
สิ่งที่ต้องดำเนินการก่อน
ก่อนที่จะทดสอบการดําเนินการได้ คุณต้องใช้คีย์บัญชีบริการและ agentUserId
หากมีคีย์บัญชีบริการอยู่แล้วและ
agentUserId
โปรดดูหัวข้อใช้งานหน้าแดชบอร์ด Report State
ทําให้หน้าแดชบอร์ดสถานะรายงานใช้งานได้
เมื่อคุณมีคีย์บัญชีบริการและ User Agent รหัสสําหรับโปรเจ็กต์แล้ว ให้ดาวน์โหลดและทําให้เวอร์ชันล่าสุดใช้งานได้จากReport Stateหน้าแดชบอร์ด
เมื่อดาวน์โหลดเวอร์ชันล่าสุดแล้ว ให้ทําตามวิธีการจากไฟล์ README.MD
ที่รวมอยู่
หลังจากที่คุณทําให้หน้าแดชบอร์ด Report State ใช้งานได้แล้ว ให้เข้าถึงหน้าแดชบอร์ดจาก URL ต่อไปนี้ (แทนที่ your_project_id ด้วยรหัสโปรเจ็กต์
http://<your-project-id>.appspot.com
โดยทําตามขั้นตอนต่อไปนี้ในหน้าแดชบอร์ด
- เลือกไฟล์คีย์บัญชี
- เพิ่ม agentUserId
จากนั้นคลิกรายการ
อุปกรณ์ทั้งหมดอยู่ในรายการ เมื่อป้อนข้อมูลรายการแล้ว คุณสามารถใช้ปุ่มรีเฟรชเพื่ออัปเดตสถานะอุปกรณ์ หากสถานะอุปกรณ์มีการเปลี่ยนแปลง ระบบจะไฮไลต์แถวนั้นด้วยสีเขียว
การตอบกลับข้อผิดพลาด
คุณอาจได้รับการตอบกลับข้อผิดพลาดอย่างใดอย่างหนึ่งต่อไปนี้เมื่อเรียกใช้ Report State การตอบสนองเหล่านี้อยู่ในรูปแบบรหัสสถานะ HTTP
400 Bad Request
- เซิร์ฟเวอร์ไม่สามารถดําเนินการคําขอที่ไคลเอ็นต์ส่งเข้ามาได้ เนื่องจากมีไวยากรณ์ที่ไม่ถูกต้อง สาเหตุที่พบบ่อยมีดังนี้ JSON ที่มีรูปแบบไม่ถูกต้อง หรือใช้null
แทน "" สําหรับค่าสตริง404 Not Found
- ไม่พบทรัพยากรที่ขอ แต่อาจมีพร้อมใช้งานในอนาคต โดยทั่วไปหมายความว่าเราไม่พบอุปกรณ์ที่ขอ นอกจากนี้ยังอาจหมายความว่าบัญชีผู้ใช้ไม่ได้ลิงก์กับ Google หรือได้รับagentUserId
ที่ไม่ถูกต้อง ตรวจสอบว่าagentUserId
ตรงกับค่าที่ระบุไว้ในการตอบกลับ SYNC และคุณจัดการ Intent DISCONNECT อย่างเหมาะสม