حالة التقرير

Report State هي ميزة مهمة تتيح Google Home Action إرسال تقرير استباقي إلى Google Home Graph عن آخر حالة لجهاز المستخدم بدلاً من انتظار طلب QUERY.

ترسل Report State إلى Google حالات أجهزة المستخدمين التي تتضمّن agentUserId المحدّدة المرتبطة بها (يتم إرسالها في طلب SYNC الأصلي). عندما يريد "Google Assistant" اتّخاذ إجراء يتطلّب فهم الحالة الحالية لجهاز، يمكنه ببساطة البحث عن معلومات الحالة في Home Graph بدلاً من إصدار هدف QUERY إلى مختلف الخدمات السحابية التابعة لجهات خارجية قبل إصدار الهدف EXECUTE.

بدون 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

  1. في Google Cloud Console، انتقِل إلى صفحة HomeGraph API.

    الانتقال إلى صفحة HomeGraph API
  2. اختَر المشروع الذي يتطابق مع رقم تعريف مشروع smart home.
  3. انقر على تفعيل.

إنشاء مفتاح حساب خدمة

اتّبِع التعليمات التالية لإنشاء مفتاح حساب خدمة من Google Cloud Console:

ملاحظة: تأكَّد من استخدام مشروع Google Cloud Platform الصحيح عند تنفيذ هذه الخطوات. هذا هو المشروع الذي يتطابق مع رقم تعريف مشروعك smart home.
  1. في Google Cloud Console، انتقِل إلى صفحة حسابات الخدمة.

    انتقِل إلى صفحة "حسابات الخدمة".

    قد تحتاج إلى اختيار مشروع قبل الانتقال إلى صفحة "حسابات الخدمة".

  2. انقر على إنشاء حساب خدمة.

  3. في حقل اسم حساب الخدمة، أدخِل اسمًا.

  4. في حقل معرّف حساب الخدمة، أدخِل معرّفًا.

  5. في حقل وصف حساب الخدمة، أدخِل وصفًا.

  6. انقر على إنشاء ومتابعة.

  7. من القائمة المنسدلة الدور، اختَر حسابات الخدمة > أداة إنشاء الرمز المميز لهوية OpenID Connect لحساب الخدمة.

  8. انقر على متابعة.

  9. انقر على تم.

  10. اختَر حساب الخدمة الذي أنشأته للتو من قائمة حسابات الخدمة، ثم اختَر إدارة المفاتيح من قائمة الإجراءات.

  11. انقر على إضافة مفتاح > إنشاء مفتاح جديد.

  12. بالنسبة إلى نوع المفتاح، اختَر الخيار JSON.

  13. انقر على إنشاء. سيتم تنزيل ملف JSON يحتوي على مفتاحك إلى جهاز الكمبيوتر.

للحصول على تعليمات مفصّلة ومعلومات حول إنشاء مفاتيح حسابات الخدمة، يُرجى الاطّلاع على إنشاء مفاتيح حسابات الخدمة وحذفها على موقع "مساعدة Google Cloud Console".

استدعاء واجهة برمجة التطبيقات

اختَر خيارًا من علامات التبويب أدناه:

HTTP

يوفّر Home Graph نقطة نهاية HTTP

  1. استخدِم ملف JSON لحساب الخدمة الذي تم تنزيله لإنشاء رمز JSON المميّز للويب (JWT). لمزيد من المعلومات، يُرجى الاطّلاع على المصادقة باستخدام حساب خدمة.
  2. احصل على رمز دخول OAuth 2.0 المميز باستخدام النطاق https://www.googleapis.com/auth/homegraph باستخدام oauth2l:
  3. oauth2l fetch --credentials service-account.json \
      --scope https://www.googleapis.com/auth/homegraph
    
  4. أنشئ طلب JSON باستخدام agentUserId. في ما يلي نموذج لطلب JSON بشأن حالة التقرير والإشعار:
  5. {
      "requestId": "123ABC",
      "agentUserId": "user-123",
      "payload": {
        "devices": {
          "states": {
            "light-123": {
              "on": true
            }
          }
        }
      }
    }
  6. اجمع بين JSON الخاص بـ "حالة التقرير" و"الإشعار" والرمز المميّز في طلب HTTP POST الذي ترسله إلى نقطة نهاية Google Home Graph. في ما يلي مثال على كيفية تقديم الطلب في سطر الأوامر باستخدام curl، وذلك كاختبار:
  7. 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

  1. احصل على تعريف خدمة مخازن البروتوكولات لواجهة Home Graph API.
  2. اتّبِع مستندات مطوّري gRPC لإنشاء طرق كعب العميل لإحدى اللغات المتوافقة.
  3. اتّصِل بطريقة ReportStateAndNotification.

Node.js

يوفر عميل Google APIs Node.js عمليات ربط لواجهة برمجة التطبيقات Home Graph.

  1. ابدأ خدمة google.homegraph باستخدام بيانات الاعتماد التلقائية للتطبيق.
  2. استدعِ طريقة 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.

  1. ابدأ HomeGraphApiService باستخدام بيانات الاعتماد التلقائية للتطبيق.
  2. استدعِ الطريقة 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);
}
    

حالة تقرير الاختبار

الأدوات المقترَحة لهذه المهمة

لكي تكون عملية دمج Cloud-to-cloud جاهزة للحصول على شهادة الاعتماد، من المهم اختبار Report State.

لإجراء ذلك، ننصحك باستخدام Home Graph أداة العرض، وهي تطبيق ويب مستقل لا يتطلّب التنزيل أو النشر.

لا يزال بإمكانك استخدام &quot;لوحة بيانات Report State&quot;، ولكن تم إيقافها نهائيًا ولم تعُد متاحة.

لوحة بيانات حالة التقرير

المتطلبات الأساسية

قبل أن تتمكّن من اختبار عملية دمج Cloud-to-cloud، يجب أن يتوفّر لديك مفتاح حساب الخدمة وagentUserId. إذا كان لديك مفتاح حساب الخدمة وظهرت لك عملية نشر Report Stateلوحة البيانات.agentUserId

نشر لوحة بيانات "حالة التقرير"

بعد الحصول على مفتاح حساب الخدمة ومعرّف مستخدم الوكيل لمشروعك، نزِّل أحدث إصدار من Report State لوحة البيانات ونشِّطه. بعد تنزيل أحدث إصدار، اتّبِع التعليمات الواردة في ملف README.MD المضمّن.

بعد نشر لوحة بيانات Report State، يمكنك الوصول إليها من عنوان URL التالي (استبدِل your_project_id برقم تعريف مشروعك):

http://<your-project-id>.appspot.com

في لوحة البيانات، اتّبِع الخطوات التالية:

  • اختيار ملف مفتاح الحساب
  • إضافة agentUserId

بعد ذلك، انقر على قائمة.

سيتم عرض جميع أجهزتك. بعد ملء القائمة، يمكنك استخدام الزر إعادة تحميل لتعديل حالات الأجهزة. في حال حدوث تغيير في حالة الجهاز، سيتم تمييز الصف باللون الأخضر.

التناقض في حالة التقرير

يقيس مقياس دقة حالة التقرير المستند إلى طلب البحث مدى تطابق أحدث حالة تقرير لجهاز مع حالة الجهاز عندما يطلب المستخدم معلومات عنه. ومن المتوقّع أن تبلغ هذه القيمة %99.5.

ردود الأخطاء

قد تتلقّى إحدى رسائل الخطأ التالية عند الاتصال بـ Report State. تأتي هذه الردود في شكل رموز حالة HTTP.

  • 400 Bad Request: تعذّر على الخادم معالجة الطلب الذي أرسله العميل بسبب بنية غير صالحة. تشمل الأسباب الشائعة JSON غير صالح أو استخدام null بدلاً من "" لقيمة السلسلة.
  • 404 Not Found - تعذّر العثور على المورد المطلوب، ولكن قد يصبح متاحًا في المستقبل. يعني ذلك عادةً أنّه لا يمكننا العثور على الجهاز المطلوب. قد يعني ذلك أيضًا أنّ حساب المستخدم غير مرتبط بحساب Google أو أنّنا تلقّينا agentUserId غير صالح. تأكَّد من أنّ agentUserId يتطابق مع القيمة المقدَّمة في رد SYNC، وأنّك تتعامل بشكل صحيح مع طلبات DISCONNECT.

إعداد تقارير عن حالة الاتصال بالإنترنت وبلا إنترنت

عندما يكون الجهاز غير متصل بالإنترنت، عليك إرسال <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": {},
        }
      }
    }
</code{"online":></code{"online":>