حالة التقرير

Report State هي ميزة مهمة تتيح لGoogle Home الإجراء الإبلاغ بشكل استباقي عن أحدث حالة لجهاز العميل إلى 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، تأكَّد من تقديم بيانات state كاملة لسمة معيّنة. يعدّل Home Graph الحالات على أساس كل سمة على حدة ويحلّ محلّ جميع البيانات الخاصة بهذه السمة عند إجراء مكالمة Report State. على سبيل المثال، إذا كنت تُبلغ عن حالة السمة StartStop، يجب أن تتضمّن الحمولة القيمتَين isRunning وisPaused.

البدء

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

تفعيل Google HomeGraph API

  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 الإلكتروني.

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

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

HTTPgRPCNode.jsJava

يقدّم Home Graph نقطة نهاية HTTP.

  1. استخدِم ملف 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"
    

يقدّم Home Graph نقطة نهاية gRPC.

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

يقدّم عميل 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
          }
        }
      }
    }
  }
});
    

توفّر مكتبة عميل HomeGraph API للغة Java عمليات ربط لواجهة برمجة التطبيقات HomeGraph 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 Viewer، وهي تطبيق ويب مستقل لا يتطلّب تنزيله أو نشره.

لا تزال لوحة بيانات Report State متاحة، ولكنها متوقّفة نهائيًا ولم تعُد معتمدة.

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

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

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

اتّبِع التعليمات التالية لإنشاء مفتاح حساب خدمة من 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 الإلكتروني.

اتّبِع الخطوات التالية لاسترداد agentUserId:

  1. افتح أداة OAuth Playground.
  2. انقر على رمز الترس في أعلى يسار الصفحة لفتح مربّع حوار إعداد بروتوكول OAuth 2.0.
  3. في حقل نقاط نهاية OAuth، اختَر مخصّص.
  4. حدِّد مَعلمات ربط الحساب التالية باستخدام القيم التي ضبطتها في وحدة تحكّم "المهام" عند إنشاء مشروع المنزل الذكي. انقر على إغلاق لحفظ تغييراتك.
    • نقطة نهاية التفويض: اضبط هذه المَعلمة على عنوان URL الخاص بالتفويض في وحدة التحكّم.
    • نقطة نهاية الرمز المميّز: اضبط هذه المَعلمة على عنوان URL للرمز المميّز في وحدة التحكّم.
    • معرّف عميل OAuth: اضبط هذه المَعلمة على القيمة نفسها المُستخدَمة في وحدة التحكّم.
    • سرّ عميل OAuth: اضبط هذه المَعلمة على القيمة نفسها المُستخدَمة في وحدة التحكّم.
    الشكل 1: ضبط إعدادات OAuth 2.0
  5. وسِّع الخطوة 1: اختيار واجهات برمجة التطبيقات وتفويضها. في حقل النص الذي يظهر فيه العنوان "إدخال نطاقاتك الخاصة"، أدخِل "الأجهزة" وانقر على تفويض واجهات برمجة التطبيقات.
  6. إذا تمت الخطوة السابقة بنجاح، ستتم إعادة توجيهك إلى نقطة نهاية OAuth. سجِّل الدخول باستخدام حساب المستخدم الذي تريد اختباره. بعد تسجيل الدخول بنجاح، ستتم إعادة توجيهك إلى "ساحة OAuth" مع توسيع الخطوة 2 وملؤها برمز التفويض الذي تم إنشاؤه لك.
  7. انقر على Exchange authorized code for tokens (تبديل رمز التفويض بالرموز المميّزة) للحصول على رمز مميّز لإعادة التحميل ورمز مميّز للدخول.
  8. في الخطوة 3: ضبط طلب واجهة برمجة التطبيقات، اتّبِع الخطوات التالية:
    1. اضبط طريقة HTTP على POST.
    2. اضبط عنوان URI للطلب على عنوان URL الخاص بصفحة الدفع.
    3. انقر على إدخال نص الطلب وأضِف نموذج الإدخال التالي:

      {
        "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
        "inputs": [{
          "intent": "action.devices.SYNC"
        }]
      }
              
    4. انقر على إرسال الطلب.
  9. ابحث عن قيمة حقل agentUserId في الاستجابة.

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

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

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

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

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

  • اختيار ملف مفتاح الحساب
  • أضِف agentUserId.

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

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

الردود على الأخطاء

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

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