রিপোর্ট স্টেট

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

Report State Google-কে ব্যবহারকারীর ডিভাইসের স্ট্যাটাস সম্পর্কে রিপোর্ট করে যেখানে নির্দিষ্ট agentUserId সেগুলির সাথে যুক্ত (মূল SYNC অনুরোধে পাঠানো হয়েছে)। Google Assistant যখন এমন কোনও অ্যাকশন নিতে চান যার জন্য ডিভাইসের বর্তমান অবস্থা বোঝা প্রয়োজন, তখন QUERY ইনটেন্ট ইস্যু করার আগে বিভিন্ন থার্ড-পার্টি ক্লাউডে EXECUTE ইনটেন্ট ইস্যু করার পরিবর্তে, এটি 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 চালু করুন

  1. Google Cloud Console-এ গিয়ে HomeGraph API পৃষ্ঠায় যান।

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

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

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

মনে রাখবেন: এইসব ধাপগুলি অনুসরণ করার সময় আপনি সঠিক GCP প্রোজেক্ট ব্যবহার করছেন কিনা তা নিশ্চিত করুন। এটি সেই প্রোজেক্ট যা আপনার 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 সহায়তা সাইটে পরিষেবা অ্যাকাউন্ট কী তৈরি ও মুছে দিন দেখুন।

API কল করা

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

HTTP

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

  1. JSON ওয়েব টোকেন (JWT) তৈরি করতে ডাউনলোড করা পরিষেবা অ্যাকাউন্ট JSON ফাইল ব্যবহার করুন। আরও তথ্যের জন্য, সার্ভিস অ্যাকাউন্ট ব্যবহার করে যাচাইকরণ দেখুন।
  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. Google Home Graph এন্ডপয়েন্টে আপনার 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"
    

gRPC

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

  1. Home Graph API-এর জন্য প্রোটোকল বাফার পরিষেবা সংজ্ঞা পান।
  2. কাজ করে এমন ভাষাগুলির মধ্যে একটির জন্য ক্লায়েন্ট স্টাব তৈরি করতে, gRPC ডেভেলপার ডকুমেন্টেশন অনুসরণ করুন।
  3. ReportStateAndNotification মেথড কল করুন।

Node.js

Google APIs Node.js ক্লায়েন্ট Home Graph API-এর জন্য বাইন্ডিং প্রদান করে।

  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
          }
        }
      }
    }
  }
});
    

Java

Java-র জন্য HomeGraph API ক্লায়েন্ট লাইব্রেরি Home Graph API-এর জন্য বাইন্ডিং প্রদান করে।

  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 ইন্টিগ্রেশন পরীক্ষা করার আগে, আপনার পরিষেবা অ্যাকাউন্ট কী এবং আপনার agentUserId প্রয়োজন। আপনার কাছে আগে থেকেই পরিষেবা অ্যাকাউন্ট কী থাকলে, agentUserId ডিপ্লয় করুন Report State ড্যাশবোর্ড দেখুন।

রিপোর্ট স্টেট ড্যাশবোর্ড ডেপ্লয় করা

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

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

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

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

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

তারপর, তালিকা বিকল্পে ক্লিক করুন।

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

রাজ্যের তথ্য সংক্রান্ত অসঙ্গতি সম্পর্কে অভিযোগ জানানো

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

রিপোর্ট করা ডেটা ও প্রকৃত ডেটার মধ্যে পার্থক্য সংক্রান্ত লগ-এর একটি উদাহরণ এখানে দেওয়া হল:

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

সমস্যার উত্তর

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

400 ত্রুটিপূর্ণ অনুরোধ

ক্লায়েন্টের পাঠানো অনুরোধটি ভুল সিনট্যাক্স থাকার কারণে সার্ভার প্রসেস করতে পারেনি। সাধারণ কারণগুলির মধ্যে রয়েছে ভুল JSON বা স্ট্রিং ভ্যালুর জন্য ""-এর পরিবর্তে null ব্যবহার করা।

404 পাওয়া যায়নি

অনুরোধ করা রিসোর্স খুঁজে পাওয়া যায়নি, তবে ভবিষ্যতে উপলভ্য হতে পারে। সাধারণত, এর অর্থ হল আমরা অনুরোধ করা ডিভাইসটি খুঁজে পাচ্ছি না। এর অর্থ হতে পারে যে ব্যবহারকারীর অ্যাকাউন্ট Google-এর সাথে লিঙ্ক করা নেই অথবা আমরা কোনও ভুল agentUserId পেয়েছি। agentUserId আপনার SYNC উত্তরে দেওয়া ভ্যালুর সাথে মিলছে কিনা এবং আপনি DISCONNECT ইনটেন্ট সঠিকভাবে হ্যান্ডেল করছেন কিনা তা নিশ্চিত করুন।

404 NOT_FOUND সমস্যার কারণে ReportState কল ব্যর্থ হলে, এটি আপনার ক্লাউড ও Home Graph-এর মধ্যে সিঙ্ক্রোনাইজেশন সংক্রান্ত অমিল নির্দেশ করে। Home Graph থেকে কোনও ডিভাইস সরিয়ে দেওয়া হলে অথবা কোনও ব্যবহারকারী তার অ্যাকাউন্ট আনলিঙ্ক করলে এটি হতে পারে।

'রিপোর্ট স্টেট' থেকে পাওয়া 404 সংক্রান্ত সমস্যার সমাধান করতে, নিম্নলিখিত পদ্ধতি ব্যবহার করুন:

  1. ব্যবহারকারীর অ্যাকাউন্ট স্ট্যাটাস চেক করুন: যে agentUserId থেকে 404 এরর ফিরে এসেছে তার জন্য devices.sync কল করুন। এর ফলে, সমস্যাটি ব্যবহারকারীর সম্পূর্ণ অ্যাকাউন্ট নাকি কোনও নির্দিষ্ট ডিভাইসে হয়েছে তা নির্ধারণ করা যায়।
    • SYNC যদি 404 সমস্যা দেখায়, তাহলে ব্যবহারকারীর অ্যাকাউন্ট আর Google-এর সাথে লিঙ্ক করা নেই। এই ব্যবহারকারীর ডিভাইসের জন্য Report State পাঠানো এবং সিঙ্ক করার অনুরোধ করা বন্ধ করুন।
    • SYNC 200 OK স্ট্যাটাস কোড দেখালে, ব্যবহারকারীর অ্যাকাউন্ট এখনও লিঙ্ক করা আছে, অর্থাৎ 404 সমস্যাটি ডিভাইস-নির্দিষ্ট।
  2. ডিভাইসের তালিকা মিলিয়ে নেওয়া: SYNC 200 OK স্ট্যাটাস কোড দেখালে, আপনাকে কোন ডিভাইস(গুলি) Google আর চেনে না তা শনাক্ত করতে হবে। আমরা সাজেস্ট করি যে আপনি Google-এর কাছে থাকা ব্যবহারকারীর ডিভাইসের তালিকা আপনার ডিভাইস ডেটাবেসের সাথে তুলনা করুন এবং আপনার সিস্টেমে এমন ডিভাইস শনাক্ত করুন যা Google-এর তালিকায় নেই। কোনও ডিভাইস Google-এ সিঙ্ক করা উচিত হলেও সেটি এখনও Google-এর সাথে শেয়ার করা না থাকলে, SYNC ব্যবহার করে নিশ্চিত করুন যে ডিভাইসটি Google-এর সাথে সিঙ্ক করা আছে। কোনও ডিভাইসকে Google থেকে আনলিঙ্ক করতে হলে, সেই নির্দিষ্ট ডিভাইসের জন্য স্টেট রিপোর্ট করা বন্ধ করুন এবং সেই agentUserId-এর অধীনে থাকা অন্যান্য বৈধ ডিভাইসের জন্য রিপোর্ট করা চালিয়ে যান।

অনলাইন ও অফলাইন স্ট্যাটাস রিপোর্টিং

কোনও ডিভাইস অফলাইন থাকলে, ডিভাইসটির আচরণ দেখার পাঁচ মিনিটের মধ্যে আপনাকে রিপোর্ট স্টেট-এ <code{"online": code="" dir="ltr" false}<="" translate="no"> রিপোর্ট করতে হবে। অন্যদিকে, কোনও ডিভাইস অনলাইন হলে, আপনাকে ডিভাইসের আচরণ লক্ষ্য করার পাঁচ মিনিটের মধ্যে রিপোর্ট স্টেট-এ <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": {},
        }
      }
    }
</code{"online":></code{"online":>