Report State एक अहम सुविधा है. इसकी मदद से, Google Home ऐक्शन, उपयोगकर्ता के डिवाइस की नई स्थिति की जानकारी Google Home Graph को तुरंत दे सकता है. इसके लिए, उसे QUERY इंटेंट का इंतज़ार नहीं करना पड़ता.
Report State, Google को उपयोगकर्ता के डिवाइसों की स्थिति की जानकारी देता है. इसके लिए, वह डिवाइसों से जुड़े agentUserId का इस्तेमाल करता है. यह जानकारी, ओरिजनल SYNC अनुरोध में भेजी जाती है. जब Google Assistant को कोई ऐसी कार्रवाई करनी होती है जिसके लिए डिवाइस की मौजूदा स्थिति को समझना ज़रूरी होता है, तो वह Home Graph में स्थिति की जानकारी देख सकता है. इसके लिए, उसे EXECUTE इंटेंट जारी करने से पहले, तीसरे पक्ष के अलग-अलग क्लाउड को QUERY इंटेंट जारी करने की ज़रूरत नहीं होती.
Report State के बिना, अगर किसी लिविंग रूम में अलग-अलग कंपनियों की लाइटें लगी हैं, तो Ok Google, मेरे लिविंग रूम की लाइटें तेज़ करो निर्देश देने पर, अलग-अलग क्लाउड पर भेजे गए कई QUERY इंटेंट को रिज़ॉल्व करना पड़ता है. इसके बजाय, पहले से रिपोर्ट की गई जानकारी के आधार पर, रोशनी की मौजूदा वैल्यू को देखा जा सकता है. उपयोगकर्ता को बेहतरीन अनुभव देने के लिए,
Assistant को डिवाइस की मौजूदा स्थिति की जानकारी होनी चाहिए.
इसके लिए, डिवाइस से बार-बार जानकारी लेने की ज़रूरत नहीं पड़नी चाहिए.
किसी डिवाइस के लिए शुरुआती SYNC के बाद, प्लैटफ़ॉर्म QUERY इंटेंट भेजता है. यह इंटेंट, डिवाइस की स्थिति की जानकारी इकट्ठा करता है, ताकि Home Graph को भरा जा सके.
इसके बाद, Home Graph सिर्फ़ उस स्थिति को सेव करता है जो Report State के साथ भेजी जाती है.
Report State को कॉल करते समय, पक्का करें कि आपने किसी विशेषता के लिए, स्थिति का पूरा डेटा दिया हो. Home Graph, हर trait के हिसाब से states को अपडेट करता है. साथ ही, Report State कॉल किए जाने पर, उस trait के लिए मौजूद सारा डेटा ओवरराइट कर देता है. उदाहरण के लिए, अगर 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 वेब टोकन (JWT) बनाने के लिए, डाउनलोड की गई सेवा खाते की JSON फ़ाइल का इस्तेमाल करें. ज़्यादा जानकारी के लिए, सेवा खाते का इस्तेमाल करके पुष्टि करना लेख पढ़ें.
- oauth2l का इस्तेमाल करके,
https://www.googleapis.com/auth/homegraphस्कोप के साथ OAuth 2.0 का ऐक्सेस टोकन हासिल करें: agentUserIdका इस्तेमाल करके, JSON अनुरोध बनाएं. यहां Report State और Notification के लिए, JSON अनुरोध का एक सैंपल दिया गया है:- Google Home Graph एंडपॉइंट पर भेजे जाने वाले एचटीटीपी POST अनुरोध में, रिपोर्ट स्टेट और सूचना 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 इंटिग्रेशन को टेस्ट करने से पहले, आपको सेवा खाते की कुंजी और agentUserId की ज़रूरत होगी. अगर आपके पास पहले से ही सेवा खाते की कुंजी है, तो agentUserId Report State डैशबोर्ड डिप्लॉय करें देखें.
Report State डैशबोर्ड को डिप्लॉय करना
अपने प्रोजेक्ट के लिए सेवा खाते की कुंजी और एजेंट का यूज़र आईडी मिलने के बाद,
Report State
डैशबोर्ड से नया वर्शन डाउनलोड करें और उसे डिप्लॉय करें.
नया वर्शन डाउनलोड करने के बाद, शामिल की गई README.MD फ़ाइल में दिए गए निर्देशों का पालन करें.
Report State डैशबोर्ड को डिप्लॉय करने के बाद, इस यूआरएल से डैशबोर्ड को ऐक्सेस करें. इसके लिए, your_project_id को अपने प्रोजेक्ट आईडी से बदलें:
http://<your-project-id>.appspot.com
डैशबोर्ड पर, यह तरीका अपनाएं:
- अपने खाते की पासकोड फ़ाइल चुनना
- अपना agentUserId जोड़ें
इसके बाद, सूची पर क्लिक करें.
आपके सभी डिवाइसों की सूची दिखेगी. सूची में जानकारी भरने के बाद, डिवाइस की स्थितियों को अपडेट करने के लिए, रीफ़्रेश करें बटन का इस्तेमाल किया जा सकता है. अगर डिवाइस की स्थिति में कोई बदलाव होता है, तो पंक्ति को हरे रंग से हाइलाइट किया जाता है.
राज्य के डेटा में अंतर की शिकायत करना
क्वेरी पर आधारित रिपोर्ट की स्थिति की सटीक जानकारी से पता चलता है कि किसी डिवाइस के लिए रिपोर्ट की गई नई स्थिति, उस डिवाइस की स्थिति से कितनी मेल खाती है, जब कोई उपयोगकर्ता उसके बारे में क्वेरी करता है. यह वैल्यू 99.5% होने की उम्मीद है. अपने प्रोजेक्ट की स्थिति की सटीक जानकारी की मौजूदा स्थिति के बारे में ज़्यादा जानने के लिए, डिवाइस की स्थिति - की सटीक जानकारी देखें. Logs Explorer में जाकर, Report State Discrepancy Log की जानकारी भी देखी जा सकती है.
यहां 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 को Report State की सूचना मिलने का सटीक टाइमस्टैंप. |
agentId |
आपके प्रोजेक्ट का यूनीक आइडेंटिफ़ायर. आम तौर पर, यह Google Home Developer Console में मौजूद प्रोजेक्ट आईडी होता है. |
requestId |
QUERY इंटेंट के जवाब से जुड़ा यूनीक कोरिलेशन आईडी. |
queryReportStateDifferences |
कोई ऑब्जेक्ट या सूची, जिसमें डिवाइस की स्थिति के उन खास एट्रिब्यूट को हाइलाइट किया गया हो जो QUERY के जवाब और Report State के डेटा के बीच अलग-अलग हों. |
गड़बड़ी के रिस्पॉन्स
Report State को कॉल करने पर, आपको गड़बड़ी के इनमें से कोई एक जवाब मिल सकता है. ये जवाब, एचटीटीपी स्टेटस कोड के तौर पर मिलते हैं.
400 खराब अनुरोध
अमान्य सिंटैक्स की वजह से, सर्वर क्लाइंट के अनुरोध को प्रोसेस नहीं कर सका. इसकी सामान्य वजहों में, गलत तरीके से फ़ॉर्मैट किया गया JSON या स्ट्रिंग वैल्यू के लिए "" के बजाय null का इस्तेमाल करना शामिल है.
पेज नहीं मिला
अनुरोध किया गया संसाधन नहीं मिला. हालांकि, हो सकता है कि यह आने वाले समय में उपलब्ध हो.
आम तौर पर, इसका मतलब है कि हमें अनुरोध किया गया डिवाइस नहीं मिला. इसका यह भी मतलब हो सकता है कि उपयोगकर्ता खाता, Google से लिंक नहीं है या हमें अमान्य agentUserId मिला है. पक्का करें कि agentUserId, आपके SYNC रिस्पॉन्स में दी गई वैल्यू से मेल खाता हो. साथ ही, DISCONNECT इंटेंट को सही तरीके से मैनेज किया जा रहा हो.
जब ReportState कॉल 404 NOT_FOUND गड़बड़ी के साथ फ़ेल हो जाता है, तो इसका मतलब है कि आपके क्लाउड और Home Graph के बीच सिंक नहीं हो पा रहा है.
ऐसा तब हो सकता है, जब किसी डिवाइस को Home Graph से हटा दिया गया हो या किसी उपयोगकर्ता ने अपना खाता अनलिंक कर दिया हो.
Report State से जुड़ी 404 गड़बड़ियों को ठीक करने के लिए, यह तरीका अपनाएं:
- उपयोगकर्ता खाते की स्थिति देखना: 404 गड़बड़ी दिखाने वाले
agentUserIdके लिए,devices.syncको कॉल करें. इससे यह पता लगाने में मदद मिलती है कि गड़बड़ी पूरे उपयोगकर्ता खाते के लिए है या किसी खास डिवाइस के लिए.- अगर
SYNCसे 404 गड़बड़ी का कोड मिलता है, तो इसका मतलब है कि उपयोगकर्ता का खाता अब Google से लिंक नहीं है. इस उपयोगकर्ता के डिवाइसों के लिए, स्थिति की जानकारी भेजना और सिंक करने का अनुरोध करना बंद करें. - अगर
SYNCसे 200 OK मिलता है, तो इसका मतलब है कि उपयोगकर्ता खाता अब भी लिंक है. साथ ही, 404 गड़बड़ी सिर्फ़ उस डिवाइस पर है.
- अगर
- डिवाइस की सूची का मिलान करना: अगर
SYNCसे 200 OK मिलता है, तो आपको यह पता लगाना होगा कि Google को किन डिवाइसों की जानकारी नहीं है. हमारा सुझाव है कि आप उपयोगकर्ता के लिए Google के पास मौजूद डिवाइसों की सूची की तुलना, अपने डिवाइस के डेटाबेस से करें. साथ ही, अपने सिस्टम में मौजूद उन डिवाइसों की पहचान करें जो Google की सूची में नहीं हैं. अगर किसी डिवाइस को Google के साथ सिंक करना है, लेकिन उसे अब तक Google के साथ शेयर नहीं किया गया है, तोSYNCका इस्तेमाल करके पक्का करें कि डिवाइस, Google के साथ सिंक हो. अगर किसी डिवाइस को Google से अनलिंक करना है, तो उस डिवाइस की स्थिति की जानकारी देना बंद करें. साथ ही, उसagentUserIdके तहत आने वाले अन्य मान्य डिवाइसों की जानकारी देना जारी रखें.
ऑनलाइन और ऑफ़लाइन स्थिति की रिपोर्टिंग
जब कोई डिवाइस ऑफ़लाइन हो, तो आपको डिवाइस के व्यवहार के पांच मिनट के अंदर, <code{"online": code="" dir="ltr" false}<="" translate="no"> को Report State पर रिपोर्ट करना चाहिए. इसके उलट, जब कोई डिवाइस ऑनलाइन स्थिति में वापस आता है, तो आपको डिवाइस के व्यवहार के पांच मिनट के अंदर, <code{"online": code="" dir="ltr" translate="no" true}<=""> को Report State पर रिपोर्ट करना चाहिए. जब भी कोई डिवाइस फिर से ऑनलाइन आता है, तो पार्टनर कोreportStateAndNotification एपीआई का इस्तेमाल करके, डिवाइस की सभी मौजूदा स्थितियों की जानकारी देनी चाहिए.
इस उदाहरण से पता चलता है कि light डिवाइस टाइप ऑनलाइन है और डिवाइस की सभी मौजूदा स्थितियों की जानकारी देता है.
"requestId": "test-request-id",
"agentUserId": "agent-user-1",
"payload":{
"devices": {
"states": {
"device-id-1": {
"brightness": 65,
"on": true,
"online": true
}
"notifications": {},
}
}
}