Report State एक अहम सुविधा है. इसकी मदद से,
Google Home Action, उपयोगकर्ता के डिवाइस की मौजूदा स्थिति की जानकारी, Google Home Graph को पहले से ही भेजता रहता है. इसके लिए,
QUERY इंटेंट का इंतज़ार नहीं करना पड़ता.
Report State Google को उपयोगकर्ता के डिवाइसों की स्थिति की जानकारी देता है
साथ ही, उनके साथ जुड़ा 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 Web Token (JWT) बनाएं. ज़्यादा जानकारी के लिए, सेवा खाते का इस्तेमाल करके पुष्टि करना लेख पढ़ें.
- oauth2l का इस्तेमाल करके,
https://www.googleapis.com/auth/homegraphस्कोप के साथ OAuth 2.0 का ऐक्सेस टोकन हासिल करें: agentUserIdके साथ JSON अनुरोध बनाएं. यहां Report State और सूचना के लिए, JSON अनुरोध का एक उदाहरण दिया गया है:- Google Home Graph एंडपॉइंट को भेजे जाने वाले एचटीटीपी POST
अनुरोध में, Report State और सूचना के 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सेवा को शुरू करें. 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
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(); }
Report State को टेस्ट करना
Cloud-to-cloud इंटिग्रेशन को सर्टिफ़िकेशन के लिए तैयार करने के लिए, Report State को टेस्ट करना ज़रूरी है.
इसके लिए, हमारा सुझाव है कि आप Home Graph Viewer टूल का इस्तेमाल करें, यह एक स्टैंडअलोन वेब ऐप्लिकेशन है. इसे डाउनलोड या डिप्लॉय करने की ज़रूरत नहीं होती.
Report State डैशबोर्ड अब भी उपलब्ध है, लेकिन इसे बंद कर दिया गया है और अब यह काम नहीं करता.
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 जोड़ें
इसके बाद, सूची पर क्लिक करें.
आपके सभी डिवाइसों की सूची दिखती है. सूची भरने के बाद, डिवाइस की स्थितियों को अपडेट करने के लिए, रीफ़्रेश करें बटन का इस्तेमाल किया जा सकता है. अगर डिवाइस की स्थिति में कोई बदलाव होता है, तो उस पंक्ति को हरे रंग में हाइलाइट किया जाता है.
Report State में गड़बड़ी
क्वेरी के आधार पर, Report State की सटीक जानकारी से यह पता चलता है कि किसी डिवाइस के लिए, Report State की मौजूदा जानकारी, उपयोगकर्ता की क्वेरी करने पर डिवाइस की स्थिति से कितनी मेल खाती है. इस वैल्यू के 99.5% होने की उम्मीद है. अपने प्रोजेक्ट के Report State की सटीक जानकारी की मौजूदा स्थिति के बारे में ज़्यादा जानने के लिए, डिवाइस की स्थिति - की सटीक जानकारी लेख पढ़ें. Logs Explorer से, Report State में गड़बड़ी के लॉग की जानकारी भी देखी जा सकती है.
यहां Report State में गड़बड़ी के लॉग का एक उदाहरण दिया गया है:
{
"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"
}Report State में गड़बड़ी के लॉग के फ़ील्ड की परिभाषाएं
| फ़ील्ड का नाम | परिभाषा |
|---|---|
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 मिला है. SYNC
ReportState को कॉल करने पर, अगर 404 NOT_FOUND गड़बड़ी दिखती है, तो इसका मतलब है कि आपके क्लाउड और Home Graph के बीच सिंक करने में
गड़बड़ी है.
ऐसा तब हो सकता है, जब किसी डिवाइस को Home Graph से हटा दिया गया हो या अगर
किसी उपयोगकर्ता ने अपना खाता अनलिंक कर दिया हो.
Report State से मिलने वाली 404 गड़बड़ियों को ठीक करने के लिए, यह तरीका अपनाएं:
- उपयोगकर्ता खाते की स्थिति की जांच करना: उस
agentUserIdके लिएdevices.syncको कॉल करें जिससे 404 गड़बड़ी मिली है. इससे यह पता चलता है कि गड़बड़ी, उपयोगकर्ता के पूरे खाते के लिए है या किसी खास डिवाइस के लिए.- अगर
SYNCसे 404 गड़बड़ी मिलती है, तो इसका मतलब है कि उपयोगकर्ता का खाता अब Google से लिंक नहीं है. इस उपयोगकर्ता के डिवाइसों के लिए, Report State और Request Sync भेजना बंद करें. - अगर
SYNCसे 200 OK मिलता है, तो इसका मतलब है कि उपयोगकर्ता का खाता अब भी लिंक है. इसका मतलब है कि 404 गड़बड़ी, डिवाइस से जुड़ी है.
- अगर
- डिवाइसों की सूची को ठीक करना: अगर
SYNCसे 200 OK मिलता है, तो आपको यह पता लगाना होगा कि Google को अब कौनसे डिवाइसों की जानकारी नहीं है. हमारा सुझाव है कि आप Google के पास मौजूद उपयोगकर्ता के डिवाइसों की सूची की तुलना, अपने डिवाइस डेटाबेस से करें. साथ ही, अपने सिस्टम में उन डिवाइसों की पहचान करें जो Google की सूची में मौजूद नहीं हैं. अगर किसी डिवाइस को Google के साथ सिंक किया जाना चाहिए, लेकिन उसे अब तक Google के साथ शेयर नहीं किया गया है, तो पक्का करें कि डिवाइस, Google के साथ सिंक हो. इसके लिए,SYNCका इस्तेमाल करें. अगर किसी डिवाइस को 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": {},
}
}
}