রিপোর্ট রাজ্য

Report State একটি গুরুত্বপূর্ণ ফিচার, যা Google Home অ্যাকশনকে QUERY ইন্টেন্টের জন্য অপেক্ষা না করেই ব্যবহারকারীর ডিভাইসের সর্বশেষ স্ট্যাটাস সক্রিয়ভাবে Google Home Graph রিপোর্ট করতে দেয়।

Report State মূল SYNC অনুরোধে পাঠানো নির্দিষ্ট agentUserId যুক্ত ব্যবহারকারীর ডিভাইসগুলোর অবস্থা গুগলকে জানায়। যখন Google Assistant এমন কোনো কাজ করতে চায় যার জন্য ডিভাইসের বর্তমান অবস্থা বোঝার প্রয়োজন হয়, তখন এটি EXECUTE ইন্টেন্ট পাঠানোর আগে বিভিন্ন থার্ড-পার্টি ক্লাউডে QUERY ইন্টেন্ট পাঠানোর পরিবর্তে সরাসরি Home Graph থেকে অবস্থার তথ্য দেখে নিতে পারে।

Report State ছাড়া, একটি লিভিং রুমে একাধিক প্রোভাইডারের লাইট থাকলে, ‘ওকে গুগল, আমার লিভিং রুম উজ্জ্বল করো’ (Ok Google, brighten my living room) কমান্ডটির জন্য একাধিক ক্লাউডে পাঠানো একাধিক কোয়েরি ইন্টেন্ট QUERY intent) সমাধান করতে হয়, যেখানে আগে রিপোর্ট করা তথ্যের উপর ভিত্তি করে সহজেই বর্তমান উজ্জ্বলতার মান খুঁজে বের করা যেত। সর্বোত্তম ইউজার এক্সপেরিয়েন্সের জন্য, Assistant কোনো ডিভাইসে পুনরায় ফিরে না গিয়েই সেটির বর্তমান অবস্থা জানা প্রয়োজন।

কোনো ডিভাইসের প্রাথমিক SYNC পরে, প্ল্যাটফর্মটি একটি QUERY ইন্টেন্ট পাঠায় যা Home Graph তথ্য যোগ করার জন্য ডিভাইসটির অবস্থা সংগ্রহ করে। এরপর থেকে, Home Graph শুধুমাত্র Report State সাথে পাঠানো অবস্থাটিই সংরক্ষণ করে।

Report State কল করার সময়, একটি নির্দিষ্ট ট্রেইটের জন্য সম্পূর্ণ স্টেট ডেটা প্রদান করা নিশ্চিত করুন। Home Graph প্রতিটি ট্রেইটের জন্য আলাদাভাবে স্টেট আপডেট করে এবং যখন একটি Report State কল করা হয়, তখন সেই ট্রেইটের সমস্ত ডেটা ওভাররাইট করে দেয়। উদাহরণস্বরূপ, আপনি যদি StartStop ট্রেইটের জন্য স্টেট রিপোর্ট করেন, তাহলে পেলোডে isRunning এবং isPaused উভয়ের ভ্যালু অন্তর্ভুক্ত করতে হবে।

শুরু করুন

Report State বাস্তবায়ন করতে, এই ধাপগুলো অনুসরণ করুন:

Google HomeGraph API সক্রিয় করুন

  1. Google Cloud Console , HomeGraph API পৃষ্ঠায় যান।

    হোমগ্রাফ এপিআই পৃষ্ঠায় যান
  2. আপনার smart home প্রজেক্ট আইডির সাথে মেলে এমন প্রজেক্টটি নির্বাচন করুন।
  3. সক্ষম করুন- এ ক্লিক করুন।

একটি পরিষেবা অ্যাকাউন্ট কী তৈরি করুন

Google Cloud Console থেকে একটি সার্ভিস অ্যাকাউন্ট কী তৈরি করতে এই নির্দেশাবলী অনুসরণ করুন:

দ্রষ্টব্য : এই ধাপগুলো অনুসরণ করার সময় নিশ্চিত করুন যে আপনি সঠিক GCP প্রজেক্ট ব্যবহার করছেন। এটি সেই প্রজেক্ট যা আপনার smart home প্রজেক্ট আইডির সাথে মেলে।
  1. Google Cloud Console , সার্ভিস অ্যাকাউন্টস পেজে যান।

    সার্ভিস অ্যাকাউন্টস পৃষ্ঠায় যান

    সার্ভিস অ্যাকাউন্টস পৃষ্ঠায় যাওয়ার আগে আপনাকে একটি প্রজেক্ট নির্বাচন করতে হতে পারে।

  2. সার্ভিস অ্যাকাউন্ট তৈরি করতে ক্লিক করুন।

  3. সার্ভিস অ্যাকাউন্ট নেম ফিল্ডে একটি নাম লিখুন।

  4. সার্ভিস অ্যাকাউন্ট আইডি ফিল্ডে একটি আইডি প্রবেশ করান।

  5. সার্ভিস অ্যাকাউন্ট বিবরণ ফিল্ডে একটি বিবরণ লিখুন।

  6. তৈরি করুন-এ ক্লিক করুন এবং চালিয়ে যান

  7. Role ড্রপডাউন থেকে, Service Accounts > Service Account OpenID Connect Identity Token Creator নির্বাচন করুন।

  8. চালিয়ে যান-এ ক্লিক করুন।

  9. সম্পন্ন ক্লিক করুন।

  10. সার্ভিস অ্যাকাউন্টগুলির তালিকা থেকে আপনার এইমাত্র তৈরি করা সার্ভিস অ্যাকাউন্টটি নির্বাচন করুন এবং Actions মেনু থেকে Manage keys নির্বাচন করুন।

  11. অ্যাড কী > ক্রিয়েট নিউ কী নির্বাচন করুন।

  12. Key type- এর জন্য JSON অপশনটি নির্বাচন করুন।

  13. Create-এ ক্লিক করুন। আপনার কম্পিউটারে আপনার কী (key) সম্বলিত একটি JSON ফাইল ডাউনলোড হবে।

সার্ভিস অ্যাকাউন্ট কী তৈরি করার বিষয়ে বিস্তারিত নির্দেশাবলী ও তথ্যের জন্য, গুগল ক্লাউড কনসোল হেল্প সাইটে “Create and delete service account keys” অংশটি দেখুন।

এপিআই কল করুন

নিচের ট্যাবগুলো থেকে একটি বিকল্প নির্বাচন করুন:

HTTP

Home Graph একটি HTTP এন্ডপয়েন্ট প্রদান করে।

  1. ডাউনলোড করা সার্ভিস অ্যাকাউন্ট JSON ফাইলটি ব্যবহার করে একটি JSON ওয়েব টোকেন (JWT) তৈরি করুন। আরও তথ্যের জন্য, “সার্ভিস অ্যাকাউন্ট ব্যবহার করে প্রমাণীকরণ” দেখুন।
  2. oauth2l ব্যবহার করে https://www.googleapis.com/auth/homegraph স্কোপের একটি OAuth 2.0 অ্যাক্সেস টোকেন সংগ্রহ করুন:
  3. oauth2l fetch --credentials service-account.json \
      --scope https://www.googleapis.com/auth/homegraph
    
  4. agentUserId দিয়ে JSON রিকোয়েস্টটি তৈরি করুন। নিচে রিপোর্ট স্টেট এবং নোটিফিকেশনের জন্য একটি নমুনা JSON রিকোয়েস্ট দেওয়া হলো:
  5. {
      "requestId": "123ABC",
      "agentUserId": "user-123",
      "payload": {
        "devices": {
          "states": {
            "light-123": {
              "on": true
            }
          }
        }
      }
    }
  6. গুগল হোম গ্রাফ এন্ডপয়েন্টে আপনার HTTP POST অনুরোধে রিপোর্ট স্টেট ও নোটিফিকেশন JSON এবং টোকেন একত্রিত করুন। পরীক্ষা হিসেবে, কমান্ড লাইনে 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. হোম গ্রাফ এপিআই-এর জন্য প্রোটোকল বাফার পরিষেবা সংজ্ঞাটি পান।
  2. সমর্থিত ভাষাগুলোর মধ্যে যেকোনো একটির জন্য ক্লায়েন্ট স্টাব তৈরি করতে gRPC ডেভেলপার ডকুমেন্টেশন অনুসরণ করুন।
  3. ReportStateAndNotification মেথডটি কল করুন।

নোড.জেএস

গুগল এপিআই নোড.জেএস ক্লায়েন্ট Home Graph এপিআই-এর জন্য বাইন্ডিং প্রদান করে।

  1. অ্যাপ্লিকেশন ডিফল্ট ক্রেডেনশিয়াল ব্যবহার করে google.homegraph সার্ভিসটি ইনিশিয়ালাইজ করুন।
  2. 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
          }
        }
      }
    }
  }
});
    

জাভা

জাভার জন্য হোমগ্রাফ এপিআই ক্লায়েন্ট লাইব্রেরিটি হোম গ্রাফ এপিআই-এর জন্য বাইন্ডিং প্রদান করে।

  1. অ্যাপ্লিকেশনের ডিফল্ট ক্রেডেনশিয়াল ব্যবহার করে HomeGraphApiService টি ইনিশিয়ালাইজ করুন।
  2. 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 ইন্টিগ্রেশন পরীক্ষা করার আগে, আপনার সার্ভিস অ্যাকাউন্ট কী (Service Account Key) এবং agentUserId প্রয়োজন। যদি আপনার কাছে ইতিমধ্যেই সার্ভিস অ্যাকাউন্ট কী এবং agentUserId থাকে, Report State Dashboard) অংশটি দেখুন।

রিপোর্ট স্টেট ড্যাশবোর্ড স্থাপন করুন

আপনার প্রোজেক্টের সার্ভিস অ্যাকাউন্ট কী এবং এজেন্ট ইউজার আইডি পেয়ে গেলে, Report State ড্যাশবোর্ড থেকে সর্বশেষ সংস্করণটি ডাউনলোড ও ডেপ্লয় করুন। সর্বশেষ সংস্করণটি ডাউনলোড করার পর, এর সাথে থাকা README.MD ফাইলের নির্দেশাবলী অনুসরণ করুন।

Report State ড্যাশবোর্ডটি ডিপ্লয় করার পর, নিম্নলিখিত URL থেকে ড্যাশবোর্ডটি অ্যাক্সেস করুন ( your_project_id- এর জায়গায় আপনার প্রজেক্ট আইডি বসান):

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

ড্যাশবোর্ডে, নিম্নলিখিত কাজগুলো করুন:

  • আপনার অ্যাকাউন্ট কী ফাইলটি বেছে নিন
  • আপনার এজেন্টইউজারআইডি যোগ করুন

তারপর, তালিকা (List)-তে ক্লিক করুন।

আপনার সমস্ত ডিভাইস তালিকাভুক্ত করা আছে। তালিকাটি পূরণ হয়ে গেলে, আপনি ডিভাইসের অবস্থা আপডেট করতে রিফ্রেশ বাটনটি ব্যবহার করতে পারেন। ডিভাইসের অবস্থায় কোনো পরিবর্তন হলে, সারিটি সবুজ রঙে হাইলাইট করা হয়।

রাজ্যের অমিলের প্রতিবেদন

কোয়েরি-ভিত্তিক রিপোর্ট স্টেট অ্যাকুরেসি পরিমাপ করে যে, যখন কোনো ব্যবহারকারী একটি ডিভাইসের জন্য কোয়েরি করেন, তখন সেটির সর্বশেষ রিপোর্ট স্টেট ডিভাইসটির স্ট্যাটাসের সাথে কতটা ভালোভাবে মেলে। এই মান ৯৯.৫% হওয়ার কথা। আপনার প্রোজেক্টের রিপোর্ট স্টেট অ্যাকুরেসি -র বর্তমান অবস্থা সম্পর্কে আরও বিস্তারিত জানতে, ডিভাইস হেলথ - স্টেট অ্যাকুরেসি দেখুন। এছাড়াও আপনি লগস এক্সপ্লোরার থেকে রিপোর্ট স্টেট ডিসক্রিপেন্সি লগ- এর বিস্তারিত দেখতে পারেন।

রিপোর্ট স্টেট ডিসক্রিপেন্সি লগ- এর একটি উদাহরণ নিচে দেওয়া হলো:

{
  "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 একটি ডায়াগনস্টিক সারাংশ যা রিপোর্ট স্টেট পেলোড এবং QUERY ইনটেন্ট রেসপন্সের মধ্যেকার নির্দিষ্ট অমিলটি ব্যাখ্যা করে।
queriedTime ফুলফিলমেন্ট প্রোভাইডারের কাছ থেকে গুগল যখন QUERY প্রতিক্রিয়া পেয়েছিল, তার সুনির্দিষ্ট টাইমস্ট্যাম্প।
reportedTime গুগল কর্তৃক 'রিপোর্ট স্টেট' নোটিফিকেশনটি সফলভাবে গৃহীত হওয়ার সুনির্দিষ্ট টাইমস্ট্যাম্প।
agentId আপনার প্রোজেক্টের অনন্য শনাক্তকারী (সাধারণত Google Home Developer Console প্রোজেক্ট আইডি )।
requestId নির্দিষ্ট QUERY ইনটেন্ট রেসপন্সের সাথে যুক্ত অনন্য কোরিলেশন আইডি।
queryReportStateDifferences একটি অবজেক্ট বা তালিকা যা QUERY প্রতিক্রিয়া এবং Report State ডেটার মধ্যে ভিন্ন নির্দিষ্ট ডিভাইস অবস্থার বৈশিষ্ট্যগুলিকে তুলে ধরে।

ত্রুটিপূর্ণ প্রতিক্রিয়া

Report State কল করার সময় আপনি নিম্নলিখিত ত্রুটি প্রতিক্রিয়াগুলির মধ্যে একটি পেতে পারেন। এই প্রতিক্রিয়াগুলি HTTP স্ট্যাটাস কোড আকারে আসে।

  • 400 Bad Request - ভুল সিনট্যাক্সের কারণে সার্ভার ক্লায়েন্ট কর্তৃক প্রেরিত অনুরোধটি প্রসেস করতে পারেনি। এর সাধারণ কারণগুলোর মধ্যে রয়েছে ত্রুটিপূর্ণ JSON অথবা স্ট্রিং ভ্যালুর জন্য ''' এর পরিবর্তে null ব্যবহার করা।
  • 404 Not Found - অনুরোধ করা রিসোর্সটি খুঁজে পাওয়া যায়নি, তবে ভবিষ্যতে এটি উপলব্ধ হতে পারে। সাধারণত, এর মানে হলো আমরা অনুরোধ করা ডিভাইসটি খুঁজে পাচ্ছি না। এর আরও একটি অর্থ হতে পারে যে ব্যবহারকারীর অ্যাকাউন্টটি গুগলের সাথে লিঙ্ক করা নেই অথবা আমরা একটি অবৈধ agentUserId পেয়েছি। নিশ্চিত করুন যে agentUserId আপনার SYNC রেসপন্সে দেওয়া মানের সাথে মেলে এবং আপনি DISCONNECT ইন্টেন্টগুলো সঠিকভাবে হ্যান্ডেল করছেন।

অনলাইন এবং অফলাইন রাজ্য প্রতিবেদন

যখন কোনো ডিভাইস অফলাইন থাকে, তখন আপনার রিপোর্ট করা উচিত। ডিভাইসের আচরণের পাঁচ মিনিটের মধ্যে অবস্থা রিপোর্ট করতে হবে। বিপরীতভাবে, যখন একটি ডিভাইস অনলাইন অবস্থায় ফিরে আসে, তখন আপনার রিপোর্ট করা উচিত। ডিভাইসটির আচরণের পাঁচ মিনিটের মধ্যে অবস্থা প্রতিবেদন করতে হবে। যখনই কোনো ডিভাইস পুনরায় অনলাইন হয়, পার্টনারের উচিত reportStateAndNotification API ব্যবহার করে ডিভাইসটির সমস্ত বর্তমান অবস্থা রিপোর্ট করা। এই উদাহরণটি দেখায় যে একটি light ডিভাইস টাইপ অনলাইন হয়েছে এবং ডিভাইসটির সমস্ত বর্তমান অবস্থা রিপোর্ট করছে।
"requestId": "test-request-id",
  "agentUserId": "agent-user-1",
    "payload":{
      "devices": {
        "states": {
          "device-id-1": {
            "brightness": 65,
            "on": true,
            "online": true
          }
          "notifications": {},
        }
      }
    }