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

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

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

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

  • সক্রিয় অঞ্চলের মিনিট
  • কার্যকলাপের স্তর
  • উচ্চতা
  • রক্তে গ্লুকোজ
  • শরীরের চর্বি
  • হার্ট রেট জোনে ক্যালোরি
  • দৈনিক হৃদস্পন্দন পরিবর্তনশীলতা
  • দৈনিক হৃদস্পন্দন অঞ্চল
  • দৈনিক অক্সিজেন স্যাচুরেশন
  • দৈনিক শ্বাস-প্রশ্বাসের হার
  • দৈনিক বিশ্রামকালীন হৃদস্পন্দন
  • দৈনিক ঘুমের তাপমাত্রা নির্ণয়
  • দূরত্ব
  • ব্যায়াম
  • মেঝে
  • হৃদস্পন্দন
  • হৃদস্পন্দন পরিবর্তনশীলতা
  • উচ্চতা
  • হাইড্রেশন লগ
  • পুষ্টি লগ
  • শ্বাস-প্রশ্বাসের হার ঘুমের সারাংশ
  • রান Vo2 ম্যাক্স
  • নিষ্ক্রিয় সময়কাল
  • ঘুম
  • পদক্ষেপ
  • হার্ট রেট জোনে সময়
  • মোট ক্যালোরি
  • ওজন

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

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

আইএএম পরিষেবা অ্যাকাউন্ট

বাধ্যতামূলক না হলেও, গুগল হেলথ এপিআই-এর জন্য সাবস্ক্রাইবার কনফিগার করার সময় আমরা একটি আইএএম সার্ভিস অ্যাকাউন্ট ব্যবহার করার পরামর্শ দিই। সার্ভিস অ্যাকাউন্টগুলো নিম্নলিখিত বৈশিষ্ট্যগুলোর মাধ্যমে সাধারণ ইউজার অ্যাকাউন্টের তুলনায় অ্যাপ্লিকেশন ওয়ার্কলোডের জন্য উন্নততর নিরাপত্তা প্রদান করে:

  • স্বয়ংক্রিয় স্বল্পস্থায়ী ক্রেডেনশিয়াল: যখন কোনো গুগল ক্লাউড এক্সিকিউশন এনভায়রনমেন্টের (যেমন কম্পিউট ইঞ্জিন, ক্লাউড রান, বা গুগল কুবারনেটিস ইঞ্জিন) সাথে সংযুক্ত থাকে, তখন সার্ভিস অ্যাকাউন্টগুলো স্বয়ংক্রিয়ভাবে সুরক্ষিত ও স্বল্পস্থায়ী ক্রেডেনশিয়াল সংগ্রহ এবং পরিবর্তন করে। এর ফলে স্থায়ী স্ট্যাটিক কী পরিচালনা ও সংরক্ষণের ঝুঁকি দূর হয়।
  • ন্যূনতম বিশেষাধিকারের নীতি: সার্ভিস অ্যাকাউন্টগুলো ওয়ার্কলোডের জন্য নির্দিষ্ট পরিচয় প্রদান করে। আপনি সাবস্ক্রাইবার এন্ডপয়েন্টগুলো পরিচালনা করার জন্য শুধুমাত্র প্রয়োজনীয় নির্দিষ্ট অনুমতিগুলোই তাদের দিতে পারেন, যার ফলে আপনার গুগল ক্লাউড রিসোর্সগুলোতে ব্যাপকতর অ্যাক্সেস এড়ানো যায়।
  • জীবনচক্রের স্বাধীনতা: সার্ভিস অ্যাকাউন্টগুলো যেকোনো স্বতন্ত্র ব্যবহারকারীর অ্যাকাউন্ট থেকে স্বাধীনভাবে কাজ করে, যা নিশ্চিত করে যে কর্মী পরিবর্তন দীর্ঘমেয়াদী প্রমাণীকরণ স্থিতিশীলতাকে প্রভাবিত করবে না।

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

একটি পরিষেবা অ্যাকাউন্ট ব্যবহার করে প্রমাণীকরণের জন্য আপনার গ্রাহক অ্যাপ্লিকেশনটি কনফিগার করতে:

  1. একটি পরিষেবা অ্যাকাউন্ট তৈরি করুন: গুগল ক্লাউড কনসোলে, আপনার প্রোজেক্টের IAM ও অ্যাডমিন পৃষ্ঠায় গিয়ে একটি নতুন ব্যবহারকারী-পরিচালিত পরিষেবা অ্যাকাউন্ট তৈরি করুন
  2. প্রয়োজনীয় IAM রোল প্রদান করুন: আপনার Google Cloud প্রোজেক্টে সাবস্ক্রাইবারদের পরিচালনা করার জন্য সার্ভিস অ্যাকাউন্টটিকে প্রয়োজনীয় উপযুক্ত রোলগুলো বরাদ্দ করুন
  3. আপনার ওয়ার্কলোডের সাথে সার্ভিস অ্যাকাউন্টটি সংযুক্ত করুন: আপনার সাবস্ক্রাইবার লজিক হোস্টকারী এনভায়রনমেন্টটিকে নতুন সার্ভিস অ্যাকাউন্ট হিসেবে চালানোর জন্য কনফিগার করুন । এর ফলে, আপনার অ্যাপ্লিকেশন কোড (যেমন গুগল এপিআই ক্লায়েন্ট লাইব্রেরি) projects.subscribers REST API কল করার সময় স্বয়ংক্রিয়ভাবে সার্ভিস অ্যাকাউন্টের স্বল্পস্থায়ী ক্রেডেনশিয়ালগুলো শনাক্ত ও ব্যবহার করতে পারে।

সিপিই ভূমিকা

Google Health API সাবস্ক্রাইবার বা সাবস্ক্রিপশন পরিচালনা করতে, আপনাকে অবশ্যই এপিআই কলকারী ছদ্মবেশী সার্ভিস অ্যাকাউন্টটিকে উপযুক্ত ভূমিকা প্রদান করতে হবে। প্রয়োজনীয় অ্যাক্সেসের স্তরের উপর নির্ভর করে, নিম্নলিখিত ভূমিকাগুলির মধ্যে একটি বরাদ্দ করুন:

  • গুগল হেলথ এপিআই পড়ুন
  • গুগল হেলথ এপিআই এডিটর
  • গুগল হেলথ এপিআই অ্যাডমিন

গুগল হেলথ এপিআই আইএএম রোল এবং পারমিশন সম্পর্কে আরও জানুন

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

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

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

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

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

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

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": {
    "secret": "Bearer example-secret-token"
  }
}

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

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

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

আপনার প্রোজেক্টের জন্য নিবন্ধিত সকল সাবস্ক্রাইবারকে খুঁজে পেতে 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",
      "subscriberConfigs": [
        {
          "dataTypes": ["steps", "altitude", "distance", "floors", "weight"],
          "subscriptionCreatePolicy": "AUTOMATIC"
        },
        {
          "dataTypes": ["sleep"],
          "subscriptionCreatePolicy": "MANUAL"
        }
      ],
      "endpointAuthorization": {
        "authorizationTokenSet": true
      }
    }
  ],
  "totalSize": 1
}

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

আপনার প্রোজেক্টে কোনো সাবস্ক্রাইবার আপডেট করতে 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",
  "subscriberConfigs": [
    {
      "dataTypes": ["steps", "altitude", "distance", "floors", "weight"],
      "subscriptionCreatePolicy": "AUTOMATIC"
    },
    {
      "dataTypes": ["sleep"],
      "subscriptionCreatePolicy": "MANUAL"
    }
  ]
}

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

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

অনুরোধ

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

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

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

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

আপনার নোটিফিকেশন ডেলিভারির নিরাপত্তা এবং নির্ভরযোগ্যতা নিশ্চিত করতে, যখনই আপনি কোনো সাবস্ক্রাইবার তৈরি করেন বা তার এন্ডপয়েন্ট কনফিগারেশন ( 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 ভ্যালু গ্রহণ করে।

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

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

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

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

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

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

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

যদি আপনার সাবস্ক্রাইবার নির্দিষ্ট ডেটা টাইপের জন্য একটি ম্যানুয়াল subscription_create_policy দিয়ে কনফিগার করা থাকে, তাহলে আপনাকে অবশ্যই প্রতিটি ব্যবহারকারীর জন্য সাবস্ক্রিপশনগুলো স্পষ্টভাবে তৈরি এবং পরিচালনা করতে হবে। একটি সাবস্ক্রিপশন একজন নির্দিষ্ট ব্যবহারকারীকে একটি সংজ্ঞায়িত ডেটা টাইপের সেটের জন্য আপনার সাবস্ক্রাইবার এন্ডপয়েন্টের সাথে সংযুক্ত করে। ডেভেলপাররা নির্দিষ্ট এপিআই ব্যবহার করে নিম্নলিখিত কাজগুলো করতে পারেন:

  • healthUserId অনুযায়ী (ম্যানুয়াল) সাবস্ক্রিপশন তৈরি করুন - এটি একজন নির্দিষ্ট ব্যবহারকারীর জন্য একটি নতুন সাবস্ক্রিপশন তৈরি করে। এই পদ্ধতির জন্য সাবস্ক্রাইবারের SubscriptionCreatePolicy অনুরোধকৃত ডেটা টাইপগুলোর জন্য MANUAL এ সেট করা থাকতে হবে।
  • (ম্যানুয়াল) সাবস্ক্রিপশন আপডেট - বিদ্যমান ব্যবহারকারী সাবস্ক্রিপশনের ডেটা টাইপগুলো আপডেট করে।
  • (ম্যানুয়াল) সাবস্ক্রিপশন মুছুন - একজন নির্দিষ্ট ব্যবহারকারীর সাবস্ক্রিপশন মুছে দেয়। একবার মুছে ফেলা হলে, আপনার সাবস্ক্রাইবার এন্ডপয়েন্ট এই ব্যবহারকারীর জন্য সংশ্লিষ্ট ডেটা টাইপগুলোর আর কোনো নোটিফিকেশন পাবে না।
  • (ম্যানুয়াল) সাবস্ক্রিপশন তালিকা - কোনো নির্দিষ্ট সাবস্ক্রাইবারের সমস্ত সক্রিয় সাবস্ক্রিপশন তালিকাভুক্ত করে। আপনি ব্যবহারকারী বা ডেটা টাইপ অনুসারে ফলাফল ফিল্টার করতে পারেন।

বিজ্ঞপ্তি

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

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

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

{
  "data": {
    "version": "1",
    "clientProvidedSubscriptionName": "subscription-name",
    "healthUserId": "health-user-id",
    "operation": "UPSERT",
    "dataType": "steps",
    "intervals": [
      {
        "physicalTimeInterval": {
          "startTime": "2026-03-08T01: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
    });
});

স্বাক্ষর যাচাইকরণ

ওয়েবহুক নোটিফিকেশনের সত্যতা নিশ্চিত করার জন্য, প্রতিটি বহির্গামী ওয়েবহুক নোটিফিকেশনের মূল JSON পেলোডটি Tink-এর PublicKeySign ব্যবহার করে একটি প্রাইভেট কী দ্বারা স্বাক্ষরিত হয় এবং অনুরোধের GOOGLE-HEALTH-API-SIGNATURE HTTP হেডারে Base64-এনকোডেড স্বাক্ষরটি প্রদান করা হয়। এই স্বাক্ষরকারী কীগুলো প্রতি ৩০ দিন পর পর স্বয়ংক্রিয়ভাবে পরিবর্তিত হয় এবং এর সংশ্লিষ্ট অফিসিয়াল পাবলিক কীসেটটি https://www.gstatic.com/googlehealthapi/webhooks/webhooks_public_keyset.json এই স্থায়ী URL-এ একটি JSON ফাইল হিসেবে বিতরণ করা হয়।

স্বাক্ষর যাচাই করার পদ্ধতি

Tink ব্যবহার (প্রস্তাবিত) : ডেভেলপাররা Tink-এর PublicKeyVerify প্রিমিটিভ ব্যবহার করে সিগনেচারটি যাচাই করতে পারেন। পার্মানেন্ট URL থেকে পাবলিক কীসেটটি ফেচ করুন, সেই কীসেট দিয়ে PublicKeyVerify প্রিমিটিভটি ইনস্ট্যানশিয়েট করুন এবং ডিকোড করা GOOGLE-HEALTH-API-SIGNATURE হেডারটিকে র ওয়েবহুক JSON পেলোডের সাথে মিলিয়ে যাচাই করুন।

ম্যানুয়াল যাচাইকরণ (Tink ছাড়া) : যদি ডেভেলপাররা Tink ব্যবহার না করার সিদ্ধান্ত নেন, তাহলে তারা নিম্নলিখিত ধাপগুলি অনুসরণ করে ম্যানুয়ালি স্বাক্ষরটি যাচাই করতে পারেন:

  1. প্রকৃত DER-এনকোডেড সিগনেচার থেকে ৫-বাইটের টিঙ্ক প্রিফিক্স (যার মধ্যে একটি ১-বাইটের ভার্সন প্রিফিক্স এবং একটি ৪-বাইটের keyId থাকে) আলাদা করার জন্য GOOGLE-HEALTH-API-SIGNATURE হেডারটিকে Base64-ডিকোড করা হয়।
  2. https://www.gstatic.com/googlehealthapi/webhooks/webhooks_public_keyset.json থেকে JSON কীসেটটি সংগ্রহ করুন।
  3. পার্স করা keyId-এর সাথে মেলে এমন কী-টি সনাক্ত করুন এবং এর ভ্যালু ফিল্ডটি Base64-ডিকোড করুন, যেটিতে একটি সিরিয়ালাইজড EcdsaPublicKey প্রোটোকল বাফার রয়েছে।
  4. এই বাইনারি পেলোড থেকে বিগ-এন্ডিয়ান x এবং y স্থানাঙ্ক (প্রোটোবাফ ট্যাগ ৩ এবং ৪) বের করুন।
  5. নিষ্কাশিত x এবং y স্থানাঙ্ক ব্যবহার করে একটি অন্তর্নির্মিত ক্রিপ্টোগ্রাফি লাইব্রেরিতে একটি স্ট্যান্ডার্ড ECDSA P-256 পাবলিক কী ইনস্ট্যানশিয়েট করুন।
  6. SHA-256 অ্যালগরিদম ব্যবহার করে নিষ্কাশিত DER স্বাক্ষরের সাথে মূল ওয়েবহুক JSON পেলোডটি যাচাই করুন।

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

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

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

সাধারণ ভুল

ত্রুটি কোড বার্তা বর্ণনা সুপারিশ
৪০০টি ত্রুটিপূর্ণ অনুরোধ রিসোর্স নামে অবৈধ প্রজেক্ট নম্বর প্রজেক্ট নম্বরের পরিবর্তে রিকোয়েস্ট URL-এ আপনার Google Cloud প্রজেক্ট আইডি ব্যবহার করে কোনো সাবস্ক্রাইবারকে ডিলিট বা আপডেট করার সময়। এটি projects.subscribers এন্ডপয়েন্ট ব্যবহার করে ওয়েবহুক সাবস্ক্রিপশনের ক্ষেত্রে প্রযোজ্য। অনুরোধ URL-এ আপনার Google Cloud প্রজেক্ট নম্বর ব্যবহার করুন, প্রজেক্ট আইডি নয়।
৪০৩ নিষিদ্ধ কলারের অনুমতি নেই প্রজেক্ট নম্বরের পরিবর্তে রিকোয়েস্ট URL-এ আপনার Google Cloud প্রজেক্ট আইডি ব্যবহার করে সাবস্ক্রাইবার তৈরি বা তালিকাভুক্ত করার সময়। এটি projects.subscribers এন্ডপয়েন্ট ব্যবহার করে ওয়েবহুক সাবস্ক্রিপশনের ক্ষেত্রে প্রযোজ্য। অনুরোধ URL-এ আপনার Google Cloud প্রজেক্ট নম্বর ব্যবহার করুন, প্রজেক্ট আইডি নয়।