Report State هي ميزة مهمة تتيح لـ
Google Home الإبلاغ بشكل استباقي عن أحدث حالة لـ
جهاز المستخدم إلى Google Home Graph بدلاً من انتظار هدف
QUERY.
Report State تُبلغ Google بحالات أجهزة المستخدمين
التي تتضمّن agentUserId المحدّد المرتبط بها (المرسَل في طلب
SYNC الأصلي). عندما يريد Google Assistant اتّخاذ إجراء
يتطلّب فهم الحالة الحالية لجهاز، يمكنه ببساطة البحث
عن معلومات الحالة في Home Graph بدلاً
من إصدار هدف QUERY إلى العديد من السُحب الإلكترونية التابعة لجهات خارجية قبل إصدار هدف
EXECUTE.
بدون Report State، إذا كانت هناك مصابيح من عدّة مورّدين في
غرفة المعيشة، يتطلّب الأمر حلّ عدّة أهداف QUERY يتم إرسالها إلى عدّة سُحب إلكترونية، بدلاً من
البحث ببساطة عن قيم السطوع الحالية استنادًا إلى ما تم
الإبلاغ عنه سابقًا، وذلك لتنفيذ الأمر Ok Google, brighten my living room. للحصول على أفضل تجربة للمستخدم،
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 لحساب الخدمة.
انقر على متابعة.
انقر على تم.
اختَر حساب الخدمة الذي أنشأته للتو من قائمة حسابات الخدمة، و انقر على إدارة المفاتيح من قائمة الإجراءات.
انقر على إضافة مفتاح > إنشاء مفتاح جديد.
بالنسبة إلى نوع المفتاح، اختَر خيار JSON.
انقر على إنشاء. يتم تنزيل ملف JSON يحتوي على مفتاحك على جهاز الكمبيوتر.
استدعاء واجهة برمجة التطبيقات
اختَر خيارًا من علامات التبويب أدناه:
HTTP
يوفر Home Graph نقطة نهاية HTTP
- استخدِم ملف JSON الذي تم تنزيله لحساب الخدمة لإنشاء رمز JSON المميّز للويب (JWT). لمزيد من المعلومات، يُرجى الاطّلاع على المصادقة باستخدام حساب خدمة.
- احصل على رمز دخول OAuth 2.0 مميّز بنطاق
https://www.googleapis.com/auth/homegraphباستخدام oauth2l: - أنشِئ طلب JSON باستخدام
agentUserId. في ما يلي نموذج لطلب JSON لـ Report State والإشعار: - اجمِع JSON الخاص بـ Report State والإشعار والرمز المميّز في طلب HTTP POST
إلى نقطة نهاية Google Home Graph. في ما يلي مثال على كيفية
إجراء الطلب في سطر الأوامر باستخدام
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 } } } } } });
جافا
توفر مكتبة عميل 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).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، يمكنك الوصول إلى لوحة البيانات من عنوان URL التالي (استبدِل your_project_id برقم تعريف مشروعك):
http://<your-project-id>.appspot.com
على لوحة البيانات، نفِّذ ما يلي:
- اختَر ملف مفتاح حسابك
- أضِف agentUserId
بعد ذلك، انقر على قائمة.
يتم عرض جميع أجهزتك. بعد ملء القائمة، يمكنك استخدام الزر إعادة تحميل لتعديل حالات الأجهزة. إذا طرأ تغيير على حالة الجهاز، يتم تمييز الصف باللون الأخضر.
التناقضات في Report State
يقيس مدى دقة حالة التقرير المستندة إلى طلب البحث مدى تطابُق أحدث حالة تقرير لجهاز مع حالة الجهاز عندما يطلبها المستخدم. من المفترض أن تكون هذه القيمة %99.5. لمزيد من التفاصيل حول الحالة الحالية لل دقة Report State في مشروعك، يُرجى الاطّلاع على حالة الجهاز - دقة الحالة. يمكنك أيضًا الاطّلاع على تفاصيل سجلّ التناقضات في 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. تأتي هذه الاستجابات في شكل رموز حالة HTTP.
400 طلب غير صالح
تعذّر على الخادم معالجة الطلب الذي أرسله العميل بسبب
بنية غير صالحة. تشمل الأسباب الشائعة ملف JSON غير مكتوب بشكل صحيح أو استخدام null بدلاً من "" لقيمة سلسلة.
404 لم يتم العثور على الصفحة
تعذَّر العثور على المورد المطلوب، ولكن قد يكون متاحًا في المستقبل.
يعني هذا عادةً أنّه لا يمكننا العثور على الجهاز المطلوب. قد يعني أيضًا أنّ حساب المستخدم غير مرتبط بـ Google أو أنّنا تلقّينا agentUserId غير صالح. تأكَّد من أنّ agentUserId يطابق القيمة المقدَّمة في استجابة
SYNC، وأنّك تتعامل بشكل صحيح مع أهداف
DISCONNECT.
عندما يفشل طلب ReportState بسبب الخطأ 404 NOT_FOUND، يشير ذلك إلى عدم تطابُق المزامنة بين السحابة الإلكترونية وHome Graph.
يمكن أن يحدث ذلك إذا تمت إزالة جهاز من Home Graph أو إذا
ألغى المستخدم ربط حسابه.
للتعامل مع أخطاء 404 من Report State، استخدِم الإجراء التالي:
- التحقّق من حالة حساب المستخدم: استدعِ
devices.syncلـagentUserIdالذي عرض الخطأ 404. يساعد ذلك في تحديد ما إذا كان الخطأ يخص حساب المستخدم بالكامل أو جهازًا معيّنًا.- إذا عرض
SYNCالخطأ 404، لم يعُد حساب المستخدم مرتبطًا بـ Google. توقَّف عن إرسال Report State وطلب المزامنة لأجهزة هذا المستخدم. - إذا عرض
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": {},
}
}
}