ওয়েবহুক সাবস্ক্রিপশন


গুগল হেলথ এপিআই আপনার অ্যাপ্লিকেশনকে ব্যবহারকারীর স্বাস্থ্য সংক্রান্ত তথ্য পরিবর্তিত হলে রিয়েল-টাইম নোটিফিকেশন পেতে সাহায্য করে। পরিবর্তনের জন্য পোলিং করার পরিবর্তে, গুগল হেলথ এপিআই-তে ডেটা উপলব্ধ হওয়ামাত্রই আপনার সার্ভার একটি HTTPS POST রিকোয়েস্ট ( ওয়েবহুক ) গ্রহণ করে।

সমর্থিত ডেটা প্রকার

নিম্নলিখিত ডেটা টাইপগুলির জন্য ওয়েবহুক নোটিফিকেশন সমর্থিত:

  • পদক্ষেপ
  • উচ্চতা
  • দূরত্ব
  • মেঝে
  • ওজন
  • ঘুম

এই ডেটা টাইপগুলির জন্য নোটিফিকেশন শুধুমাত্র তখনই পাঠানো হয়, যখন কোনো ব্যবহারকারী সংশ্লিষ্ট স্কোপগুলির মধ্যে কোনো একটির জন্য সম্মতি প্রদান করেন:

  • অ্যাক্টিভিটি , যার মধ্যে স্টেপস, অল্টিটিউড, ডিসটেন্স এবং ফ্লোরস ডেটা টাইপগুলো অন্তর্ভুক্ত:
    • https://www.googleapis.com/auth/googlehealth.activity_and_fitness
    • https://www.googleapis.com/auth/googlehealth.activity_and_fitness.readonly
  • হেলথ মেট্রিক্স , যার মধ্যে ওজন ডেটা টাইপ অন্তর্ভুক্ত:
    • https://www.googleapis.com/auth/googlehealth.health_metrics_and_measurements
    • https://www.googleapis.com/auth/googlehealth.health_metrics_and_measurements.readonly
  • ঘুম , যা ঘুমের ডেটা টাইপকে অন্তর্ভুক্ত করে:
    • https://www.googleapis.com/auth/googlehealth.sleep
    • https://www.googleapis.com/auth/googlehealth.sleep.readonly

গ্রাহকদের পরিচালনা করুন

নোটিফিকেশন পাওয়ার আগে, আপনাকে অবশ্যই একজন সাবস্ক্রাইবার রেজিস্টার করতে হবে, যা আপনার অ্যাপ্লিকেশনের নোটিফিকেশন এন্ডপয়েন্ট হিসেবে কাজ করে। আপনি projects.subscribers -এ উপলব্ধ REST API ব্যবহার করে সাবস্ক্রাইবারদের পরিচালনা করতে পারেন।

আপনার সাবস্ক্রাইবার এন্ডপয়েন্টে অবশ্যই HTTPS (TLSv1.2+) ব্যবহার করতে হবে এবং এটি সর্বজনীনভাবে অ্যাক্সেসযোগ্য হতে হবে। সাবস্ক্রাইবার তৈরি এবং আপডেটের সময়, আপনি এন্ডপয়েন্ট URI-টির মালিক কিনা তা নিশ্চিত করার জন্য Google Health API একটি ভেরিফিকেশন চ্যালেঞ্জ সম্পাদন করে। ভেরিফিকেশন ব্যর্থ হলে, FailedPreconditionException ত্রুটির কারণে সাবস্ক্রাইবার তৈরি এবং আপডেট অপারেশনগুলো ব্যর্থ হয়।

একজন গ্রাহক তৈরি করুন

আপনার প্রোজেক্টে একজন নতুন সাবস্ক্রাইবার নিবন্ধন করতে, create এন্ডপয়েন্টটি ব্যবহার করুন। আপনাকে নিম্নলিখিত তথ্য প্রদান করতে হবে:

  • endpointUri : ওয়েবহুক নোটিফিকেশনের জন্য গন্তব্য ইউআরএল।
  • subscriberConfigs : যে ডেটা টাইপগুলোর জন্য আপনি নোটিফিকেশন পেতে চান, এবং প্রতিটির জন্য সাবস্ক্রিপশন পলিসি।
  • endpointAuthorization : আপনার এন্ডপয়েন্টের জন্য অনুমোদন প্রক্রিয়া। এতে অবশ্যই একটি authorization_token থাকতে হবে যা আপনি প্রদান করবেন। authorization_token এর মান প্রতিটি নোটিফিকেশন বার্তার সাথে Authorization হেডারে পাঠানো হয়। আগত অনুরোধগুলো যে Google Health API থেকে আসছে, তা যাচাই করতে আপনি এই টোকেনটি ব্যবহার করতে পারেন। উদাহরণস্বরূপ, আপনি Bearer authentication-এর জন্য authorization_token কে Bearer R4nd0m5tr1ng123 , অথবা Basic authentication-এর জন্য Basic dXNlcjpwYXNzd29yZA== হিসেবে সেট করতে পারেন।
  • subscriberId : গ্রাহকের জন্য আপনার দেওয়া একটি অনন্য শনাক্তকারী। এই আইডিটি অবশ্যই ৪ থেকে ৩৬ অক্ষরের মধ্যে হতে হবে এবং রেগুলার এক্সপ্রেশন ( [az]([a-z0-9-]{2,34}[a-z0-9]) ) এর সাথে মিলতে হবে।

subscriberConfigs এ আপনাকে প্রতিটি ডেটা টাইপের জন্য subscriptionCreatePolicy সেট করতে হবে। স্বয়ংক্রিয় সাবস্ক্রিপশন ব্যবহার করতে এটিকে AUTOMATIC এ সেট করুন, অথবা যদি আপনি ব্যবহারকারীর সাবস্ক্রিপশন নিজে পরিচালনা করতে চান তবে MANUAL সেট করুন। প্রতিটি বিকল্প সম্পর্কে আরও বিস্তারিত জানতে স্বয়ংক্রিয় সাবস্ক্রিপশন এবং ম্যানুয়াল সাবস্ক্রিপশন দেখুন।

অনুরোধ

POST https://health.googleapis.com/v4/projects/project-id/subscribers?subscriberId=subscriber-id
{
  "endpointUri": "https://myapp.com/webhooks/health",
  "subscriberConfigs": [
    {
      "dataTypes": ["steps", "altitude", "distance", "floors", "weight"],
      "subscriptionCreatePolicy": "AUTOMATIC"
    },
    {
      "dataTypes": ["sleep"],
      "subscriptionCreatePolicy": "MANUAL"
    }
  ],
  "endpointAuthorization": {
    "authorization_token": "Bearer example-secret-token"
  }
}

প্রতিক্রিয়া

{
  "name": "projects/project-id/subscribers/subscriber-id",
  "endpointUri": "https://myapp.com/webhooks/health",
  "state": "ACTIVE",
  "subscriberConfigs": [
    {
      "dataTypes": ["steps", "altitude", "distance", "floors", "weight"],
      "subscriptionCreatePolicy": "AUTOMATIC"
    },
    {
      "dataTypes": ["sleep"],
      "subscriptionCreatePolicy": "MANUAL"
    }
  ],
  "endpointAuthorization": {
    "authorizationTokenSet": true
  }
}

তালিকাভুক্ত গ্রাহকদের

আপনার প্রোজেক্টের জন্য নিবন্ধিত সকল সাবস্ক্রাইবারকে খুঁজে পেতে list এন্ডপয়েন্টটি ব্যবহার করুন।

অনুরোধ

GET https://health.googleapis.com/v4/projects/project-id/subscribers

প্রতিক্রিয়া

{
  "subscribers": [
    {
      "name": "projects/project-id/subscribers/subscriber-id",
      "endpointUri": "https://myapp.com/webhooks/health",
      "state": "ACTIVE",
      "subscriberConfigs": [
        {
          "dataTypes": ["steps", "altitude", "distance", "floors", "weight"],
          "subscriptionCreatePolicy": "AUTOMATIC"
        },
        {
          "dataTypes": ["sleep"],
          "subscriptionCreatePolicy": "MANUAL"
        }
      ],
      "endpointAuthorization": {
        "authorizationTokenSet": true
      }
    }
  ],
  "nextPageToken": ""
}

একজন গ্রাহককে আপডেট করুন

আপনার প্রোজেক্টে কোনো সাবস্ক্রাইবার আপডেট করতে patch এন্ডপয়েন্ট ব্যবহার করুন। যে ফিল্ডগুলো আপডেট করা যায় সেগুলো হলো endpointUri , subscriberConfigs এবং endpointAuthorization

আপনি একটি updateMask কোয়েরি প্যারামিটার এবং একটি রিকোয়েস্ট বডি প্রদান করে ফিল্ড আপডেট করেন। ` updateMask এ অবশ্যই কমা দিয়ে আলাদা করা ফিল্ডের নামের একটি তালিকা থাকতে হবে, যা আপনি আপডেট করতে চান এবং ফিল্ডের নামগুলো ক্যামেল কেস (camel case) ব্যবহার করে লিখতে হবে (উদাহরণস্বরূপ, endpointUri )। রিকোয়েস্ট বডিতে অবশ্যই একটি পার্শিয়াল `Subscriber` অবজেক্ট থাকতে হবে, যেখানে আপনি যে ফিল্ডগুলো আপডেট করতে চান সেগুলোর নতুন ভ্যালু থাকবে। শুধুমাত্র updateMask এ উল্লেখিত ফিল্ডগুলোই আপডেট করা হয়। যদি আপনি রিকোয়েস্ট বডিতে এমন কোনো ফিল্ড দেন যা updateMask এ নেই, তবে সেগুলো উপেক্ষা করা হবে।

আপনি endpointUri বা endpointAuthorization আপডেট করলে, এন্ডপয়েন্ট যাচাইকরণ সম্পন্ন হয়। বিস্তারিত জানতে এন্ডপয়েন্ট যাচাইকরণ দেখুন।

subscriberConfigs আপডেট করার সময় মনে রাখবেন যে এটি একটি সম্পূর্ণ প্রতিস্থাপন , মার্জ নয়। যদি updateMasksubscriberConfigs অন্তর্ভুক্ত থাকে, তাহলে সেই সাবস্ক্রাইবারের জন্য সংরক্ষিত সমস্ত কনফিগারেশন রিকোয়েস্ট বডিতে দেওয়া তালিকা দ্বারা ওভাররাইট হয়ে যাবে। কোনো কনফিগারেশন যোগ বা অপসারণ করতে, আপনাকে অবশ্যই কনফিগারেশনের সম্পূর্ণ সেটটি প্রদান করতে হবে। আপনি যদি অন্যান্য ফিল্ড আপডেট করেন এবং আপনার বর্তমান কনফিগারেশনগুলো রাখতে চান, তাহলে updateMask থেকে subscriberConfigs বাদ দিন।

অনুরোধ

PATCH https://health.googleapis.com/v4/projects/project-id/subscribers/subscriber-id?updateMask=endpointUri
{
  "endpointUri": "https://myapp.com/new-webhooks/health"
}

প্রতিক্রিয়া

{
  "name": "projects/project-id/subscribers/subscriber-id",
  "endpointUri": "https://myapp.com/new-webhooks/health",
  "state": "ACTIVE",
  "subscriberConfigs": [
    {
      "dataTypes": ["steps", "altitude", "distance", "floors", "weight"],
      "subscriptionCreatePolicy": "AUTOMATIC"
    },
    {
      "dataTypes": ["sleep"],
      "subscriptionCreatePolicy": "MANUAL"
    }
  ],
  "endpointAuthorization": {
    "authorizationTokenSet": true
  }
}

এন্ডপয়েন্ট যাচাইকরণ

আপনার নোটিফিকেশন ডেলিভারির নিরাপত্তা এবং নির্ভরযোগ্যতা নিশ্চিত করতে, যখনই আপনি কোনো সাবস্ক্রাইবার তৈরি করেন বা তার এন্ডপয়েন্ট কনফিগারেশন ( endpointUri বা endpointAuthorization ) আপডেট করেন, Google Health API একটি বাধ্যতামূলক দ্বি-পদক্ষেপ যাচাইকরণ হ্যান্ডশেক সম্পন্ন করে। এই প্রক্রিয়াটি API কলের সময় সিনক্রোনাসভাবে সম্পাদিত হয়। পরিষেবাটি Google-Health-API-Webhooks-Verifier ইউজার-এজেন্ট ব্যবহার করে আপনার এন্ডপয়েন্ট URI-তে {"type": "verification"} JSON বডি সহ দুটি স্বয়ংক্রিয় POST অনুরোধ পাঠায়।

  • অনুমোদিত হ্যান্ডশেক : প্রথম অনুরোধটি আপনার কনফিগার করা Authorization হেডার সহ পাঠানো হয়। আপনার সার্ভারকে অবশ্যই 200 OK অথবা 201 Created স্ট্যাটাস দিয়ে সাড়া দিতে হবে।
  • অননুমোদিত চ্যালেঞ্জ : দ্বিতীয় অনুরোধটি ক্রেডেনশিয়াল ছাড়া পাঠানো হয়েছে। আপনার সার্ভারকে অবশ্যই 401 Unauthorized অথবা 403 Forbidden স্ট্যাটাস দিয়ে সাড়া দিতে হবে।

এই হ্যান্ডশেকটি নিশ্চিত করে যে আপনার এন্ডপয়েন্টটি সক্রিয় এবং সঠিকভাবে নিরাপত্তা প্রয়োগ করছে। যদি কোনো একটি ধাপ ব্যর্থ হয়, তাহলে FAILED_PRECONDITION ত্রুটির সাথে API অনুরোধটি ব্যর্থ হয়। শুধুমাত্র এই হ্যান্ডশেকটি সফল হওয়ার পরেই আপনার সাবস্ক্রাইবারকে সংরক্ষণ করা হয় এবং স্বাস্থ্য সংক্রান্ত ডেটার বিজ্ঞপ্তি পাওয়ার জন্য সক্রিয় করা হয়।

চাবি ঘূর্ণন

endpointAuthorization এর জন্য কী-গুলো ঘোরানোর প্রয়োজন হলে, এই ধাপগুলো অনুসরণ করুন:

  1. আপনার এন্ডপয়েন্টকে পুরাতন এবং নতুন উভয় endpointAuthorization মান গ্রহণ করার জন্য কনফিগার করুন।
  2. ?updateMask=endpointAuthorization সহ একটি patch অনুরোধ ব্যবহার করে নতুন endpointAuthorization মান দিয়ে সাবস্ক্রাইবার কনফিগারেশন আপডেট করুন।
  3. ধাপ ২ সফলভাবে নিশ্চিত করার পর, আপনার এন্ডপয়েন্টটি এমনভাবে কনফিগার করুন যাতে এটি শুধুমাত্র নতুন endpointAuthorization ভ্যালু গ্রহণ করে।

একজন গ্রাহককে মুছে ফেলুন

আপনার প্রজেক্ট থেকে কোনো সাবস্ক্রাইবারকে মুছে ফেলার জন্য delete এন্ডপয়েন্টটি ব্যবহার করুন। একবার মুছে ফেলা হলে, সাবস্ক্রাইবারটি আর কোনো নোটিফিকেশন পাবে না।

অনুরোধ

DELETE https://health.googleapis.com/v4/projects/project-id/subscribers/subscriber-id

প্রতিক্রিয়া

মুছে ফেলার প্রক্রিয়া সফল হলে `200 OK` HTTP স্ট্যাটাস সহ একটি খালি রেসপন্স বডি ফেরত দেওয়া হয়।
{}

ব্যবহারকারীর সাবস্ক্রিপশন

গুগল হেলথ এপিআই আপনাকে ব্যবহারকারীর সাবস্ক্রিপশন দক্ষতার সাথে পরিচালনা করতে সাহায্য করে, যার ফলে ব্যবহারকারী অন্তর্ভুক্তিকরণের সময় ম্যানুয়াল নিবন্ধনের প্রয়োজনীয়তা কমে যায়।

স্বয়ংক্রিয় সাবস্ক্রিপশন

আমরা স্বয়ংক্রিয় সাবস্ক্রিপশন ব্যবহার করার পরামর্শ দিই। এই ফিচারটি চালু করতে, নির্দিষ্ট ডেটা টাইপগুলোর জন্য আপনার subscriberConfigssubscriptionCreatePolicy কে AUTOMATIC এ সেট করুন। একটি AUTOMATIC পলিসির মাধ্যমে আপনি যে dataTypes নির্দিষ্ট করেন, Google Health API সেই একই ডেটা টাইপগুলোর জন্য নোটিফিকেশন পাঠায়, যদি সেই ডেটা টাইপগুলোর জন্য ব্যবহারকারীর সম্মতিও দেওয়া থাকে।

যখন কোনো ব্যবহারকারী AUTOMATIC পলিসিযুক্ত ডেটা টাইপের সাথে সম্পর্কিত স্কোপগুলোর জন্য অ্যাপ্লিকেশন সম্মতি প্রদান করেন, তখন Google Health API স্বয়ংক্রিয়ভাবে সেই ব্যবহারকারীর সম্মতিপ্রাপ্ত ডেটা টাইপ এবং স্বয়ংক্রিয় সাবস্ক্রাইবার কনফিগারেশন ডেটা টাইপের সংযোগ থেকে উদ্ভূত ডেটা টাইপগুলোর জন্য নোটিফিকেশন ট্র্যাক করে এবং পাঠায়। এরপর যখনই সেই ব্যবহারকারী ওই টাইপগুলোর জন্য নতুন ডেটা তৈরি করেন, তখন আপনার এন্ডপয়েন্টে নোটিফিকেশন পাঠানো হয়। আপনি সাবস্ক্রাইবার তৈরি করার আগে বা পরে যে ব্যবহারকারীরাই সম্মতি প্রদান করুন না কেন, এই ব্যবস্থাটি তাদের উভয়ের জন্যই কাজ করে। সাবস্ক্রাইবার তৈরি হওয়ার আগে তৈরি হওয়া ডেটার জন্য নোটিফিকেশনগুলো ব্যাকফিল করা হয় না।

যদি কোনো ব্যবহারকারী সম্মতি প্রত্যাহার করেন, তাহলে সংশ্লিষ্ট ডেটা টাইপগুলোর জন্য নোটিফিকেশন বন্ধ হয়ে যাবে। স্বয়ংক্রিয় সাবস্ক্রিপশনগুলো গুগল দ্বারা পরিচালিত হয় এবং এগুলোকে আলাদাভাবে তালিকাভুক্ত বা মুছে ফেলা যায় না; এগুলো কেবল তখনই সরানো হয় যখন মূল সাবস্ক্রাইবারকে মুছে ফেলা হয়।

ম্যানুয়াল সাবস্ক্রিপশন

আপনি যদি প্রতিটি ব্যবহারকারীর জন্য সাবস্ক্রিপশন ম্যানুয়ালি পরিচালনা করতে চান, তাহলে subscriberConfigssubscriptionCreatePolicy কে MANUAL এ সেট করুন। এই পলিসির ফলে ব্যবহারকারীর সাবস্ক্রিপশন স্বয়ংক্রিয়ভাবে তৈরি হয় না। ভবিষ্যতে যখন ম্যানুয়াল সাবস্ক্রিপশন পরিচালনার জন্য এপিআই (API) উপলব্ধ হবে, তখন এই কার্যকারিতাটি ব্যবহার করা যাবে। এই এপিআইগুলো উপলব্ধ না হওয়া পর্যন্ত, আমরা AUTOMATIC সাবস্ক্রিপশন ব্যবহার করার পরামর্শ দিই।

বিজ্ঞপ্তি

যখন কোনো ব্যবহারকারীর সাবস্ক্রাইব করা ডেটা টাইপের তথ্য পরিবর্তিত হয়, তখন গুগল হেলথ এপিআই সাবস্ক্রাইবার এন্ডপয়েন্ট ইউআরএল-এ একটি HTTPS POST রিকোয়েস্ট পাঠায়।

বিজ্ঞপ্তির বিন্যাস

নোটিফিকেশন পেলোড হলো একটি JSON অবজেক্ট, যাতে ডেটা পরিবর্তনের বিবরণ থাকে। এতে ইউজার আইডি, ডেটা টাইপ এবং সময় ব্যবধান অন্তর্ভুক্ত থাকে, যা ব্যবহার করে আপনি আপডেট করা ডেটা কোয়েরি করতে পারেন।

{
  "data": {
    "version": "1",
    "clientProvidedSubscriptionName": "subscription-name",
    "healthUserId": "health-user-id",
    "operation": "UPSERT",
    "dataType": "steps",
    "intervals": [
      {
        "physicalTimeInterval": {
          "startTime": "2026-03-0B01:29:00Z",
          "endTime": "2026-03-08T01:34:00Z"
        },
        "civilDateTimeInterval": {
          "startDateTime": {
            "date": {
              "year": 2026,
              "month": 3,
              "day": 7
            },
            "time": {
              "hours": 17,
              "minutes": 29
            }
          },
          "endDateTime": {
            "date": {
              "year": 2026,
              "month": 3,
              "day": 7
            },
            "time": {
              "hours": 17,
              "minutes": 34
            }
          }
        },
        "civilIso8601TimeInterval": {
          "startTime": "2026-03-07T17:29:00",
          "endTime": "2026-03-07T17:34:00"
        }
      }
    ]
  }
}

operation ফিল্ডটি সেই পরিবর্তনের ধরন নির্দেশ করে যার কারণে নোটিফিকেশনটি পাঠানো হয়েছে:

  • UPSERT : যেকোনো ডেটা সংযোজন বা পরিবর্তনের জন্য পাঠানো হয়।
  • DELETE : যখন কোনো ব্যবহারকারী ডেটা মুছে ফেলেন, অথবা যখন কোনো সিস্টেম ইভেন্টের কারণে ডেটা অপসারিত হয়, যেমন ব্যবহারকারী অনুমতি প্রত্যাহার করলে বা নিজের অ্যাকাউন্ট মুছে ফেললে, তখন এই বার্তাটি পাঠানো হয়।

আমরা আপনার নোটিফিকেশন হ্যান্ডলিং লজিককে আইডম্পোটেন্ট করার পরামর্শ দিই, বিশেষ করে UPSERT অপারেশনের ক্ষেত্রে, কারণ পুনরায় চেষ্টা করার ফলে একই নোটিফিকেশন একাধিকবার পাঠানো হতে পারে।

clientProvidedSubscriptionName ফিল্ডটি একটি অনন্য শনাক্তকারী। MANUAL পলিসির সাবস্ক্রিপশনগুলোর ক্ষেত্রে, এই ফিল্ডটিতে ডেভেলপারের দেওয়া স্থায়ী সাবস্ক্রিপশন নামটি থাকে, যা সাবস্ক্রিপশন তৈরির সময় নির্দিষ্ট করা হয়। এটি ম্যানুয়াল সাবস্ক্রিপশনগুলো পরিচালনার জন্য একটি স্থিতিশীল আইডি প্রদান করে। ` AUTOMATIC পলিসির মাধ্যমে তৈরি সাবস্ক্রিপশনগুলোর জন্য, Google Health API প্রতিটি নোটিফিকেশনের জন্য এই ফিল্ডে স্বয়ংক্রিয়ভাবে একটি অনন্য শনাক্তকারী (একটি র‍্যান্ডম UUID) তৈরি করে এবং বরাদ্দ করে। ম্যানুয়াল এবং অটোমেটিক উভয় পলিসির জন্যই clientProvidedSubscriptionName অন্তর্ভুক্ত করা হলে, সব ধরনের সাবস্ক্রিপশনের জন্য একটি সামঞ্জস্যপূর্ণ নোটিফিকেশন পেলোড ফরম্যাট নিশ্চিত হয়।

healthUserId হলো সেই ব্যবহারকারীর জন্য একটি গুগল হেলথ এপিআই আইডেন্টিফায়ার, যার ডেটা পরিবর্তিত হয়েছে। যদি আপনার অ্যাপ্লিকেশন একাধিক ব্যবহারকারীকে সাপোর্ট করে, তবে আপনি এমন যেকোনো ব্যবহারকারীর জন্য নোটিফিকেশন পেতে পারেন যিনি আপনার অ্যাপ্লিকেশনকে সম্মতি দিয়েছেন। যখন আপনি কোনো নোটিফিকেশন পাবেন, তখন কোন ব্যবহারকারীর ডেটা পরিবর্তিত হয়েছে তা শনাক্ত করতে healthUserId ব্যবহার করুন, যাতে আপনি তাদের OAuth ক্রেডেনশিয়াল ব্যবহার করে তাদের ডেটা কোয়েরি করতে পারেন।

কোনো ব্যবহারকারীর OAuth ক্রেডেনশিয়ালকে তার healthUserId সাথে ম্যাপ করতে, getIdentity এন্ডপয়েন্টটি ব্যবহার করুন। ব্যবহারকারী অনবোর্ডিংয়ের সময় ব্যবহারকারীর ক্রেডেনশিয়াল দিয়ে এই এন্ডপয়েন্টটি কল করে তার healthUserId সংগ্রহ করুন এবং এই ম্যাপিংটি সংরক্ষণ করুন। এই ম্যাপিংটি সময়ের সাথে সাথে পরিবর্তিত হয় না, তাই এটি অনির্দিষ্টকালের জন্য ক্যাশ করে রাখা যেতে পারে। একটি উদাহরণের জন্য, "ব্যবহারকারীর আইডি পান" দেখুন। এটি আপনাকে একটি নোটিফিকেশনে healthUserId এর উপর ভিত্তি করে ডেটা কোয়েরি করার সময় সঠিক ব্যবহারকারীর ক্রেডেনশিয়াল নির্বাচন করতে সাহায্য করে।

একটি বিজ্ঞপ্তিতে প্রতিক্রিয়া জানান

আপনার সার্ভারকে অবশ্যই HTTP 204 No Content স্ট্যাটাস কোড দিয়ে নোটিফিকেশনের জবাবে অবিলম্বে সাড়া দিতে হবে। টাইমআউট এড়াতে, প্রতিক্রিয়া পাঠানোর পর নোটিফিকেশন পেলোডটি অ্যাসিঙ্ক্রোনাসভাবে প্রসেস করুন। যদি Google Health API অন্য কোনো স্ট্যাটাস কোড পায় বা অনুরোধটি টাইমআউট হয়ে যায়, তবে এটি পরে আবার নোটিফিকেশন পাঠানোর চেষ্টা করে।

নোড.জেএস (এক্সপ্রেস) উদাহরণ:

app.post('/webhook-receiver', (req, res) => {
    // 1. Immediately acknowledge the notification
    res.status(204).send();

    // 2. Process the data asynchronously in the background
    const notification = req.body;
    setImmediate(() => {
        console.log(`Update for user ${notification.data.healthUserId} of type ${notification.data.dataType}`);
        // Trigger your data retrieval logic here
    });
});

সাবস্ক্রাইবারের অবস্থা এবং পুনরুদ্ধার

যদি আপনার সাবস্ক্রাইবার এন্ডপয়েন্ট অনুপলব্ধ হয়ে যায় বা কোনো ত্রুটিপূর্ণ স্ট্যাটাস কোড ( 204 ব্যতীত অন্য কিছু) ফেরত দেয়, তাহলে গুগল হেলথ এপিআই অপেক্ষাধীন নোটিফিকেশনগুলো ৭ দিন পর্যন্ত সংরক্ষণ করে এবং এক্সপোনেনশিয়াল ব্যাকঅফ সহ পুনরায় ডেলিভারির চেষ্টা করে।

আপনার এন্ডপয়েন্টটি পুনরায় অনলাইন হয়ে 204 কোড দিয়ে সাড়া দিলে, এপিআই স্বয়ংক্রিয়ভাবে সংরক্ষিত মেসেজগুলোর ব্যাকলগ সরবরাহ করে। ৭ দিনের বেশি পুরোনো নোটিফিকেশনগুলো বাতিল হয়ে যায় এবং পুনরুদ্ধার করা যায় না।