Report State एक अहम सुविधा है. इसकी मदद से, Google Home Action, उपयोगकर्ता के डिवाइस की मौजूदा स्थिति के बारे में Google Home Graph को तुरंत सूचना दे सकता है. इसके लिए, उसे QUERY इंटेंट का इंतज़ार नहीं करना पड़ता.
Report State, Google को उपयोगकर्ता के डिवाइसों की स्थिति के बारे में बताता है. इन डिवाइसों से, तय किया गया agentUserId जुड़ा होता है. यह agentUserId, ओरिजनल SYNC अनुरोध में भेजा जाता है. जब Google Assistant को कोई ऐसी कार्रवाई करनी होती है जिसके लिए डिवाइस की मौजूदा स्थिति को समझना ज़रूरी है, तो वह EXECUTE इंटेंट जारी करने से पहले, अलग-अलग तीसरे पक्ष के क्लाउड को QUERY इंटेंट जारी करने के बजाय, Home Graph में डिवाइस की स्थिति की जानकारी देख सकता है.
Report State के बिना, लिविंग रूम में अलग-अलग कंपनियों की लाइटें होने पर, Ok Google, मेरे लिविंग रूम की लाइटें तेज़ करो कमांड को पूरा करने के लिए, कई QUERY इंटेंट को हल करना पड़ता है. ये इंटेंट, अलग-अलग क्लाउड को भेजे जाते हैं. इसके उलट, पहले से रिपोर्ट की गई जानकारी के आधार पर, रोशनी की मौजूदा वैल्यू को आसानी से देखा जा सकता है. उपयोगकर्ताओं को बेहतर अनुभव देने के लिए, Assistant को डिवाइस की मौजूदा स्थिति के बारे में पता होना चाहिए. इसके लिए, डिवाइस से राउंड-ट्रिप करने की ज़रूरत नहीं होनी चाहिए.
किसी डिवाइस के लिए शुरुआती SYNC के बाद, प्लैटफ़ॉर्म एक QUERY इंटेंट भेजता है. यह डिवाइस की स्थिति की जानकारी इकट्ठा करता है, ताकि Home Graph को भरा जा सके.
इसके बाद, Home Graph सिर्फ़ उस राज्य की जानकारी सेव करता है जिसे Report State के साथ भेजा जाता है.
Report State को कॉल करते समय, पक्का करें कि आपने किसी खास ट्रेट के लिए पूरा स्टेट डेटा दिया हो. Home Graph हर विशेषता के हिसाब से स्थितियां अपडेट करता है. साथ ही, Report State कॉल किए जाने पर, उस विशेषता के लिए मौजूद सभी डेटा को बदल देता है. उदाहरण के लिए, अगर आपको StartStop ट्रेट के लिए स्थिति की जानकारी देनी है, तो पेलोड में isRunning और isPaused, दोनों के लिए वैल्यू शामिल होनी चाहिए.
अपनी प्रोफ़ाइल बनाना शुरू करें
Report State को लागू करने के लिए, यह तरीका अपनाएं:
Google HomeGraph API चालू करना
-
Google Cloud Console में, HomeGraph API पेज पर जाएं.
HomeGraph API पेज पर जाएं - वह प्रोजेक्ट चुनें जो आपके smart home प्रोजेक्ट आईडी से मेल खाता हो.
- चालू करें पर क्लिक करें.
सेवा खाते की कुंजी बनाना
Google Cloud Console से सेवा खाते का पासकोड जनरेट करने के लिए, इन निर्देशों का पालन करें:
-
Google Cloud Console में, सेवा खाते पेज पर जाएं.
सेवा खातों के पेज पर जाएं.आपको सेवा खातों वाले पेज पर ले जाने से पहले, कोई प्रोजेक्ट चुनना पड़ सकता है.
सेवा खाता बनाएं पर क्लिक करें.
सेवा खाते का नाम फ़ील्ड में, कोई नाम डालें.
सेवा खाते का आईडी फ़ील्ड में, कोई आईडी डालें.
सेवा खाते की जानकारी फ़ील्ड में, जानकारी डालें.
बनाएं और जारी रखें पर क्लिक करें.
भूमिका ड्रॉपडाउन से, सेवा खाते > सेवा खाता OpenID Connect आइडेंटिटी टोकन क्रिएटर चुनें.
जारी रखें पर क्लिक करें.
हो गया पर क्लिक करें.
सेवा खातों की सूची से, अभी-अभी बनाया गया सेवा खाता चुनें. इसके बाद, कार्रवाइयां मेन्यू से कुंजियां मैनेज करें चुनें.
कुंजी जोड़ें > नई कुंजी बनाएं को चुनें.
की टाइप के लिए, JSON विकल्प चुनें.
बनाएं पर क्लिक करें. आपके कंप्यूटर पर एक JSON फ़ाइल डाउनलोड होगी, जिसमें आपकी कुंजी मौजूद होगी.
एपीआई को कॉल करना
नीचे दिए गए टैब में से कोई विकल्प चुनें:
HTTP
Home Graph, एचटीटीपी एंडपॉइंट उपलब्ध कराता है
- डाउनलोड की गई सेवा खाते की JSON फ़ाइल का इस्तेमाल करके, JSON वेब टोकन (JWT) बनाएं. ज़्यादा जानकारी के लिए, सेवा खाते का इस्तेमाल करके पुष्टि करना लेख पढ़ें.
- oauth2l का इस्तेमाल करके,
https://www.googleapis.com/auth/homegraphस्कोप के साथ OAuth 2.0 का ऐक्सेस टोकन पाएं: agentUserIdकी मदद से JSON फ़ॉर्मैट में अनुरोध बनाएं. यहां रिपोर्ट की स्थिति और सूचना के लिए, JSON अनुरोध का एक सैंपल दिया गया है:- Google Home Graph के एंडपॉइंट पर एचटीटीपी पोस्ट अनुरोध में, रिपोर्ट की स्थिति और सूचना के JSON और टोकन को एक साथ जोड़ें. यहां एक उदाहरण दिया गया है, जिसमें टेस्ट के तौर पर
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 APIs Node.js Client, Home Graph API के लिए बाइंडिंग उपलब्ध कराता है.
- ऐप्लिकेशन के डिफ़ॉल्ट क्रेडेंशियल का इस्तेमाल करके,
google.homegraphसेवा को शुरू करें. - ReportStateAndNotificationRequest के साथ
reportStateAndNotificationतरीके को कॉल करें. यह ReportStateAndNotificationResponse के साथPromiseदिखाता है.
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
Java के लिए HomeGraph API क्लाइंट लाइब्रेरी, Home Graph API के लिए बाइंडिंग उपलब्ध कराती है.
- ऐप्लिकेशन के डिफ़ॉल्ट क्रेडेंशियल का इस्तेमाल करके,
HomeGraphApiServiceको शुरू करें. ReportStateAndNotificationRequestके साथreportStateAndNotificationतरीके को कॉल करें. यह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).execute(); }
जांच की रिपोर्ट की स्थिति
Cloud-to-cloud इंटिग्रेशन को सर्टिफ़िकेशन के लिए तैयार करने के लिए, Report State की जांच करना ज़रूरी है.
इसके लिए, हमारा सुझाव है कि Home Graph व्यूअर टूल का इस्तेमाल करें. यह एक स्टैंडअलोन वेब ऐप्लिकेशन है. इसे डाउनलोड या डिप्लॉय करने की ज़रूरत नहीं होती.
Report State डैशबोर्ड अब भी उपलब्ध है. हालांकि, यह अब काम नहीं करता.
स्टेटस डैशबोर्ड की रिपोर्ट करें
ज़रूरी शर्तें
Cloud-to-cloud इंटिग्रेशन को टेस्ट करने से पहले, आपको सेवा खाते की कुंजी और Cloud-to-cloud की ज़रूरत होगी.agentUserId अगर आपके पास पहले से ही सेवा खाते की कुंजी है, तो agentUserId Report State डैशबोर्ड डिप्लॉय करें देखें.
'डिवाइस की स्थिति की रिपोर्ट' डैशबोर्ड डिप्लॉय करना
अपने प्रोजेक्ट के लिए सेवा खाते की कुंजी और एजेंट उपयोगकर्ता आईडी मिलने के बाद, Report State डैशबोर्ड से नया वर्शन डाउनलोड करें और उसे डिप्लॉय करें.
नया वर्शन डाउनलोड करने के बाद, README.MD फ़ाइल में दिए गए निर्देशों का पालन करें.
Report State डैशबोर्ड को डिप्लॉय करने के बाद, इस यूआरएल से डैशबोर्ड को ऐक्सेस करें. your_project_id की जगह अपना प्रोजेक्ट आईडी डालें:
http://<your-project-id>.appspot.com
डैशबोर्ड पर, यह तरीका अपनाएं:
- अपनी खाता कुंजी फ़ाइल चुनें
- अपना agentUserId जोड़ें
इसके बाद, सूची पर क्लिक करें.
आपके सभी डिवाइसों की सूची दिखती है. सूची भरने के बाद, डिवाइस की स्थितियों को अपडेट करने के लिए, रीफ़्रेश करें बटन का इस्तेमाल किया जा सकता है. अगर डिवाइस की स्थिति में कोई बदलाव होता है, तो लाइन को हरे रंग में हाइलाइट किया जाता है.
डिवाइस की स्थिति में अंतर होने की शिकायत करना
क्वेरी के आधार पर रिपोर्ट की गई स्थिति के सटीक होने का मतलब है कि किसी डिवाइस के लिए रिपोर्ट की गई मौजूदा स्थिति, उपयोगकर्ता की क्वेरी के समय डिवाइस की स्थिति से कितनी मेल खाती है. यह वैल्यू 99.5% होनी चाहिए. अपने प्रोजेक्ट के डिवाइस की स्थिति की सटीक जानकारी रिपोर्ट करें की मौजूदा स्थिति के बारे में ज़्यादा जानने के लिए, डिवाइस की स्थिति - की सटीक जानकारी देखें. लॉग एक्सप्लोरर में जाकर, रिपोर्ट की स्थिति में अंतर के लॉग की जानकारी भी देखी जा सकती है.
यहां Report State Discrepancy Log का एक उदाहरण दिया गया है:
{
"insertId": "abcdefgh",
"jsonPayload": {
"reportStateLog": {
"result": "INACCURATE",
"detailedAccuracyResult": "DETAILED_ACCURACY_RESULT_INACCURATE",
"isOffline": false,
"queriedTime": "2026-01-17T03:22:01.732938Z",
"reportedTime": "2024-11-30T15:24:34.052751Z",
"agentId": "google-smart-home-agent-id-example",
"requestId": "84920571364829501736",
"queryReportStateDifferences": {
"queryState": "on_off \t {\n on: true\n}\n",
"reportState": "on_off \t {\n on: false\n}\n"
},
"traitName": "TRAIT_ON_OFF",
"snapshotTime": "2026-01-17T03:22:01.732938Z",
"isMissingField": false,
"deviceType": "action.devices.types.OUTLET",
"stateName": "on",
"deviceId": "sample-device-id",
"accuracy": "INACCURATE"
}
},
"resource": {
"type": "assistant_action_project",
"labels": {
"project_id": "google-smart-home-agent-id-example"
}
},
"timestamp": "2026-01-17T07:16:13.712708257Z",
"severity": "ERROR",
"logName": "projects/google-smart-home-agent-id-example/logs/assistant_smarthome%2Fassistant_smarthome_logs",
"receiveTimestamp": "2026-01-17T07:16:13.712708257Z"
}रिपोर्ट के स्टेटस में अंतर होने की वजह से बने लॉग फ़ील्ड की जानकारी
| फ़ील्ड का नाम | परिभाषा |
|---|---|
detailedAccuracyResult |
डाइग्नोस्टिक की खास जानकारी, जिसमें Report State पेलोड और QUERY इंटेंट रिस्पॉन्स के बीच के अंतर के बारे में बताया गया है. |
queriedTime |
वह सटीक टाइमस्टैंप, जब Google को फ़ुलफ़िलमेंट की सेवा देने वाली कंपनी से QUERY का जवाब मिला. |
reportedTime |
वह सटीक टाइमस्टैंप, जब Google को रिपोर्ट की स्थिति से जुड़ी सूचना मिली. |
agentId |
आपके प्रोजेक्ट का यूनीक आइडेंटिफ़ायर. आम तौर पर, यह Google Home Developer Console में मौजूद प्रोजेक्ट आईडी होता है. |
requestId |
किसी खास QUERY इंटेंट रिस्पॉन्स से जुड़ा यूनीक कोरिलेशन आईडी. |
queryReportStateDifferences |
यह एक ऑब्जेक्ट या सूची होती है. इसमें डिवाइस की स्थिति के उन एट्रिब्यूट को हाइलाइट किया जाता है जो QUERY रिस्पॉन्स और रिपोर्ट की स्थिति के डेटा के बीच अलग-अलग होते हैं. |
गड़बड़ी के रिस्पॉन्स
Report State को कॉल करते समय, आपको गड़बड़ी के ये जवाब मिल सकते हैं. ये जवाब, एचटीटीपी स्टेटस कोड के तौर पर मिलते हैं.
400 खराब अनुरोध
क्लाइंट से भेजे गए अनुरोध को सर्वर प्रोसेस नहीं कर सका, क्योंकि
सिंटैक्स अमान्य है. इस गड़बड़ी की सामान्य वजहों में, गलत तरीके से बनाया गया JSON या स्ट्रिंग वैल्यू के लिए "" के बजाय null
का इस्तेमाल करना शामिल है.
पेज नहीं मिला
अनुरोध किया गया संसाधन नहीं मिला. हालांकि, आने वाले समय में यह उपलब्ध हो सकता है.
आम तौर पर, इसका मतलब है कि हमें वह डिवाइस नहीं मिल सका जिसके लिए आपने अनुरोध किया है. इसका यह मतलब भी हो सकता है कि उपयोगकर्ता का खाता Google से लिंक नहीं है या हमें अमान्य agentUserId मिला है. पक्का करें कि agentUserId की वैल्यू, SYNC रिस्पॉन्स में दी गई वैल्यू से मेल खाती हो. साथ ही, DISCONNECT इंटेंट को सही तरीके से हैंडल किया जा रहा हो.
जब ReportState कॉल, 404 NOT_FOUND गड़बड़ी की वजह से पूरा नहीं होता है, तो इसका मतलब है कि आपके क्लाउड और Home Graph के बीच सिंक्रनाइज़ेशन मेल नहीं खा रहा है.
ऐसा तब हो सकता है, जब किसी डिवाइस को Home Graph से हटा दिया गया हो या किसी उपयोगकर्ता ने अपना खाता अनलिंक कर दिया हो.
रिपोर्ट की स्थिति से जुड़ी 404 गड़बड़ियों को ठीक करने के लिए, यह तरीका अपनाएं:
- उपयोगकर्ता खाते की स्थिति देखें: 404 गड़बड़ी दिखाने वाले
agentUserIdके लिए,devices.syncको कॉल करें. इससे यह पता लगाने में मदद मिलती है कि गड़बड़ी पूरे उपयोगकर्ता खाते के लिए है या किसी डिवाइस के लिए.- अगर
SYNCसे 404 गड़बड़ी का कोड मिलता है, तो इसका मतलब है कि उपयोगकर्ता का खाता अब Google से लिंक नहीं है. इस उपयोगकर्ता के डिवाइसों के लिए, Report State और Request Sync भेजने की सुविधा बंद करें. - अगर
SYNCसे 200 OK मिलता है, तो इसका मतलब है कि उपयोगकर्ता खाता अब भी लिंक है. इसका मतलब है कि 404 गड़बड़ी, डिवाइस से जुड़ी है.
- अगर
- डिवाइस की सूची को फिर से मिलाएं: अगर
SYNCसे 200 OK स्टेटस कोड मिलता है, तो आपको यह पता लगाना होगा कि Google को अब कौनसे डिवाइसों के बारे में जानकारी नहीं है. हमारा सुझाव है कि आप Google के पास मौजूद उपयोगकर्ता के डिवाइसों की सूची की तुलना, अपने डिवाइस के डेटाबेस से करें. साथ ही, अपने सिस्टम में उन डिवाइसों की पहचान करें जो Google की सूची में मौजूद नहीं हैं. अगर किसी डिवाइस को Google के साथ सिंक किया जाना चाहिए, लेकिन उसे अब तक Google के साथ शेयर नहीं किया गया है, तोSYNCका इस्तेमाल करके पक्का करें कि डिवाइस को Google के साथ सिंक किया गया हो. अगर किसी डिवाइस को Google से अनलिंक करना है, तो उस डिवाइस के लिए स्थिति की जानकारी देना बंद करें. साथ ही, उसagentUserIdके तहत अन्य मान्य डिवाइसों के लिए स्थिति की जानकारी देना जारी रखें.
ऑनलाइन और ऑफ़लाइन स्थिति की रिपोर्टिंग
जब कोई डिवाइस ऑफ़लाइन हो, तब आपको डिवाइस के व्यवहार के पांच मिनट के अंदर, Report State को <code{"online": code="" dir="ltr" false}<="" translate="no"> रिपोर्ट करना चाहिए. इसके उलट, जब कोई डिवाइस ऑनलाइन हो जाता है, तब आपको डिवाइस के ऑनलाइन होने के पांच मिनट के अंदर, Report State को <code{"online": code="" dir="ltr" translate="no" true}<=""> रिपोर्ट करना चाहिए. जब भी कोई डिवाइस फिर से ऑनलाइन हो जाता है, तो पार्टनर कोreportStateAndNotification API का इस्तेमाल करके, डिवाइस की मौजूदा स्थिति की जानकारी देनी चाहिए.
इस उदाहरण में दिखाया गया है कि light डिवाइस टाइप ऑनलाइन है और डिवाइस की सभी मौजूदा स्थितियों की जानकारी देता है.
"requestId": "test-request-id",
"agentUserId": "agent-user-1",
"payload":{
"devices": {
"states": {
"device-id-1": {
"brightness": 65,
"on": true,
"online": true
}
"notifications": {},
}
}
}