গুগল হেলথ এপিআই দিয়ে ওয়ার্কআউটের অভিজ্ঞতা উন্নত করুন

গুগল হেলথ এপিআই ‘ exercise সেশন’ ডেটা টাইপ ব্যবহার করে ব্যবহারকারীর ওয়ার্কআউট সেশন এবং ব্যায়ামের ইতিহাস ট্র্যাক করে। একটি সেশন একটি কন্টেইনার হিসেবে কাজ করে, যা অ্যাক্টিভিটি মেটাডেটা, পজ ও রিজুম ইভেন্ট, ল্যাপ বা স্প্লিট এবং সারসংক্ষেপ মেট্রিক্সকে একত্রিত করে।

আপনার ব্যবহারকারীদের সর্বোত্তম অভিজ্ঞতা প্রদানের জন্য, আপনার অ্যাপ্লিকেশনে ওয়ার্কআউটগুলো কীভাবে পড়তে, লিখতে এবং সাজাতে হয় তা বুঝুন।

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

ওয়ার্কআউট এবং অ্যাক্টিভিটি সেশন ট্র্যাক করার জন্য এপিআই নিম্নলিখিত ডেটা টাইপ সমর্থন করে:

সারণি: গুগল হেলথ এপিআই ওয়ার্কআউট ডেটার প্রকারভেদ
ডেটা টাইপ
dataType
filter প্যারামিটার
রেকর্ড
প্রকার
উপলব্ধ
অপারেশন
পরিধি ওয়েবহুক
সমর্থন
প্রকৃত শূন্য
সমর্থন
ব্যায়াম
exercise
exercise
অধিবেশন তালিকা, প্রাপ্তি, সমন্বয়, তৈরি, হালনাগাদ, ব্যাচডিলিট কার্যকলাপ এবং ফিটনেস

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

নিম্নলিখিত সারণীটি exercise ডেটা টাইপের metricsSummary অবজেক্টের ভেতরের ফিল্ডগুলোকে Google Health API-এর সংশ্লিষ্ট raw telemetry ডেটা টাইপগুলোর সাথে সংযুক্ত করে:

সারাংশ ক্ষেত্র ( metricsSummary ) ইন্ট্রাডে টেলিমেট্রি ডেটা টাইপের নাম এপিআই টেলিমেট্রি ডেটা টাইপ আইডি
caloriesKcal সক্রিয় শক্তি ব্যয়িত active-energy-burned
distanceMillimeters দূরত্ব distance
steps পদক্ষেপ steps
averageHeartRateBeatsPerMinute হৃদস্পন্দন heart-rate
activeZoneMinutes সক্রিয় অঞ্চলের মিনিট active-zone-minutes

নিম্নলিখিত বিভাগগুলিতে exercise ডেটা টাইপের প্রযুক্তিগত বিবরণ দেওয়া হয়েছে, যার মধ্যে REST উপস্থাপনার উদাহরণ, GPS রুট হ্যান্ডলিং এবং ইন্টিগ্রেশন নির্দেশিকা অন্তর্ভুক্ত রয়েছে।

ওয়ার্কআউট সেশন

দৈনিক কার্যকলাপ বা ওয়ার্কআউটগুলিকে exercise সেশন ডেটা পয়েন্ট হিসাবে লিখুন। প্রতিটি ডেটা পয়েন্ট পুরো সেশনটির বর্ণনা দেয়, ইভেন্টের ব্যবধানের (যেমন বিরতি এবং পুনরায় শুরু করার মতো কাজ) বিবরণ দেয় এবং সারসংক্ষেপ মেট্রিক (যেমন মোট দূরত্ব, পদক্ষেপ এবং গড় হৃদস্পন্দন) সরবরাহ করে।

সেশনের বৈশিষ্ট্য

ব্যায়ামের ডেটা পয়েন্ট কাঠামোবদ্ধ করার সময়, নিম্নলিখিত মূল উপাদানগুলো যাচাই করুন:

  • সেশন টাইম ( interval ) : সম্পূর্ণ ওয়ার্কআউট সেশনের শুরু এবং শেষের সময়, এবং সেই সময়ে সক্রিয় টাইমজোন অফসেটসমূহ।
  • কার্যকলাপের ধরণ ( exerciseType ) : সম্পাদিত কার্যকলাপের বিভাগ (যেমন RUNNING , WALKING , BIKING বা AEROBIC_WORKOUT )। শারীরিক প্রশিক্ষণের সঠিক ধরণ উল্লেখ করুন।
  • প্রদর্শিত নাম ( displayName ) : ওয়ার্কআউট সেশনের জন্য একটি ব্যবহার-বান্ধব নাম (উদাহরণস্বরূপ, "বিকেলের ট্রেইল রান")।
  • সক্রিয় সময়কাল ( activeDuration ) : ওয়ার্কআউটের প্রকৃত সক্রিয় সময়, যা বিরতির সময়টুকু বাদ দিয়ে গণনা করা হয়। সাধারণ বিন্যাসে Duration ফরম্যাট ব্যবহার করা হয় (উদাহরণস্বরূপ, "1800s" )।

সারসংক্ষেপ মেট্রিক্স

metricsSummary নেস্টেড অবজেক্টটিতে অনুশীলন সেশনের সম্পূর্ণ সময়কাল জুড়ে গণনা করা মোট এবং গড় মেট্রিকগুলো থাকে:

  • caloriesKcal : ওয়ার্কআউটের সময় ব্যয় হওয়া মোট সক্রিয় ক্যালোরি, যা কিলোক্যালোরি ( kcal ) এককে পরিমাপ করা হয়।
  • distanceMillimeters : মোট অতিক্রান্ত দূরত্ব, যা বিভিন্ন এককে উচ্চ নির্ভুলতা বজায় রাখার জন্য মিলিমিটারে পরিমাপ করা হয়।
  • steps : ব্যায়াম চলাকালীন মোট গৃহীত পদক্ষেপ।
  • averageHeartRateBeatsPerMinute : সেশনের সক্রিয় মিনিটগুলিতে ব্যবহারকারীর গড় হৃদস্পন্দন।
  • activeZoneMinutes : ওয়ার্কআউটের সময় অর্জিত মোট অ্যাক্টিভ জোন মিনিট।
  • averageSpeedMillimetersPerSecond : প্রতি সেকেন্ডে মিলিমিটারে গড় চলাচলের গতি।
  • averagePaceSecondsPerMeter : সেশনের সক্রিয় মিনিটগুলিতে গড় গতি, যা প্রতি মিটারে সেকেন্ডে পরিমাপ করা হয়।
  • elevationGainMillimeters : সেশন চলাকালীন মোট উচ্চতা বৃদ্ধি।

ল্যাপ এবং স্প্লিট

যেসব ওয়ার্কআউটে ল্যাপ দিতে হয় (যেমন ট্র্যাক রান বা পুল সুইমিং), সেগুলোর জন্য splitSummaries ব্যবহার করুন।

প্রতিটি স্প্লিটে রয়েছে:

  • একটি নির্দিষ্ট startTime এবং endTime
  • একটি activeDuration যা প্রকৃত ল্যাপ টাইমকে নির্দেশ করে।
  • একটি metricsSummary যা শুধুমাত্র সেই সেগমেন্টের জন্য সীমাবদ্ধ।
  • বিভাজনের সীমানা নির্ধারণের জন্য একটি splitType (যেমন DISTANCE , DURATION বা MANUAL )।

ব্যায়ামের ঘটনা

সক্রিয় থাকার সময়কাল সঠিকভাবে গণনা করতে, exerciseEvents ব্যবহার করে অবস্থার পরিবর্তন (যেমন ম্যানুয়াল বা স্বয়ংক্রিয় পজ ইভেন্ট) ট্র্যাক করুন।

প্রতিটি ইভেন্টে টাইমস্ট্যাম্প ( eventTime ) এবং টাইপ থাকে:

  • START / STOP : ব্যবহারকারী কখন স্পষ্টভাবে রেকর্ডটি শুরু বা বন্ধ করেছেন, তার সীমানার টাইমস্ট্যাম্প নির্দেশ করে।
  • PAUSE / RESUME : সেশনটি কখন ম্যানুয়ালি বিরতি দেওয়া বা পুনরায় শুরু করা হয়েছিল তা নির্দেশ করে।
  • AUTO_PAUSE / AUTO_RESUME : সেন্সর-চালিত স্বয়ংক্রিয় বিরতি/পুনরায় চালু হওয়া নির্দেশ করে।

একটি ওয়ার্কআউট সেশন লিখুন

একটি ওয়ার্কআউট সেশন তৈরি, আপডেট বা ইম্পোর্ট করতে, exercise ডেটা টাইপ কালেকশনে একটি ডেটা পয়েন্ট লিখুন। এর জন্য create data points` এন্ডপয়েন্টটি ব্যবহার করুন।

REST উপস্থাপনার উদাহরণ

নিম্নলিখিত উদাহরণটি দেখায় কিভাবে একটি POST পদ্ধতি ব্যবহার করে একটি ওয়ার্কআউট সেশন লিখতে হয়:

অনুরোধ

POST https://health.googleapis.com/v4/users/me/dataTypes/exercise/dataPoints
Authorization: Bearer access-token
Content-Type: application/json

{
  "dataSource": {
    "recordingMethod": "ACTIVELY_MEASURED"
  },
  "exercise": {
    "interval": {
      "startTime": "2026-04-20T08:00:00Z",
      "startUtcOffset": "0s",
      "endTime": "2026-04-20T08:35:00Z",
      "endUtcOffset": "0s"
    },
    "exerciseType": "RUNNING",
    "displayName": "Morning Trail Run",
    "activeDuration": "1800s",
    "metricsSummary": {
      "caloriesKcal": 380.0,
      "distanceMillimeters": 5000000.0,
      "steps": "6200",
      "averageSpeedMillimetersPerSecond": 2777.78,
      "averagePaceSecondsPerMeter": 360.0,
      "averageHeartRateBeatsPerMinute": "148",
      "activeZoneMinutes": "30"
    },
    "exerciseMetadata": {
      "hasGps": true
    },
    "exerciseEvents": [
      {
        "eventTime": "2026-04-20T08:15:00Z",
        "eventUtcOffset": "0s",
        "exerciseEventType": "PAUSE"
      },
      {
        "eventTime": "2026-04-20T08:20:00Z",
        "eventUtcOffset": "0s",
        "exerciseEventType": "RESUME"
      }
    ],
    "splitSummaries": [
      {
        "startTime": "2026-04-20T08:00:00Z",
        "startUtcOffset": "0s",
        "endTime": "2026-04-20T08:15:00Z",
        "endUtcOffset": "0s",
        "splitType": "DISTANCE",
        "metricsSummary": {
          "distanceMillimeters": 2500000.0,
          "caloriesKcal": 190.0
        }
      }
    ]
  }
}

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

{
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.devicesandservices.health.v4main.DataPoint",
    "name": "users/me/dataTypes/exercise/dataPoints/morning-trail-run-123456",
    "dataSource": {
      "recordingMethod": "ACTIVELY_MEASURED",
      "application": {
        "packageName": "com.example.workoutapp"
      },
      "platform": "GOOGLE_WEB_API"
    },
    "exercise": {
      "interval": {
        "startTime": "2026-04-20T08:00:00Z",
        "startUtcOffset": "0s",
        "endTime": "2026-04-20T08:35:00Z",
        "endUtcOffset": "0s"
      },
      "exerciseType": "RUNNING",
      "displayName": "Morning Trail Run",
      "activeDuration": "1800s",
      "metricsSummary": {
        "caloriesKcal": 380.0,
        "distanceMillimeters": 5000000.0,
        "steps": "6200",
        "averageSpeedMillimetersPerSecond": 2777.78,
        "averagePaceSecondsPerMeter": 360.0,
        "averageHeartRateBeatsPerMinute": "148",
        "activeZoneMinutes": "30"
      },
      "exerciseMetadata": {
        "hasGps": true
      },
      "exerciseEvents": [
        {
          "eventTime": "2026-04-20T08:15:00Z",
          "eventUtcOffset": "0s",
          "exerciseEventType": "PAUSE"
        },
        {
          "eventTime": "2026-04-20T08:20:00Z",
          "eventUtcOffset": "0s",
          "exerciseEventType": "RESUME"
        }
      ],
      "splitSummaries": [
        {
          "startTime": "2026-04-20T08:00:00Z",
          "startUtcOffset": "0s",
          "endTime": "2026-04-20T08:15:00Z",
          "endUtcOffset": "0s",
          "activeDuration": "900s",
          "splitType": "DISTANCE",
          "metricsSummary": {
            "distanceMillimeters": 2500000.0,
            "caloriesKcal": 190.0
          }
        }
      ]
    }
  }
}

জিপিএস রুট এবং অবস্থান ট্র্যাকিং

এপিআইটি সেশনের প্রাথমিক সারাংশ সরাসরি exercise ডেটা পয়েন্টের মধ্যেই সংরক্ষণ করে, কিন্তু বিস্তারিত অবস্থানের ইতিহাস এবং জিপিএস রুটের স্থানাঙ্ক একটি পৃথক স্ট্রিম হিসেবে পরিচালনা করে।

আউটডোর সেশনের বিস্তারিত রুট ডেটা ডাউনলোড করতে, ` exportExerciseTcx কাস্টম মেথডটি কল করুন। এই এন্ডপয়েন্টটি ইন্ডাস্ট্রি-স্ট্যান্ডার্ড ট্রেনিং সেন্টার এক্সএমএল (TCX) ফরম্যাটে রুটটি রিটার্ন করে।

জিপিএস রুট রপ্তানি করুন

অনুরোধ

GET https://health.googleapis.com/v4/users/me/dataTypes/exercise/dataPoints/exercise-data-point-id:exportExerciseTcx?alt=media
Authorization: Bearer access-token

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

Content-Type: application/tcx+xml সহ একটি HTTP পেলোড এবং ফাইলটি সংরক্ষণ করার জন্য ব্রাউজারকে নির্দেশ প্রদানকারী হেডারসমূহ।

<?xml version="1.0" encoding="UTF-8"?>
<TrainingCenterDatabase xmlns="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2">
  <Activities>
    <Activity Sport="Running">
      <Id>2026-04-20T08:00:00Z</Id>
      <Lap StartTime="2026-04-20T08:00:00Z">
        <TotalTimeSeconds>1800</TotalTimeSeconds>
        <DistanceMeters>5000</DistanceMeters>
        <Calories>380</Calories>
        <Intensity>Active</Intensity>
        <TriggerMethod>Manual</TriggerMethod>
        <Track>
          <Trackpoint>
            <Time>2026-04-20T08:00:00Z</Time>
            <Position>
              <LatitudeDegrees>37.7749</LatitudeDegrees>
              <LongitudeDegrees>-122.4194</LongitudeDegrees>
            </Position>
            <AltitudeMeters>15.0</AltitudeMeters>
            <DistanceMeters>0.0</DistanceMeters>
          </Trackpoint>
        </Track>
      </Lap>
    </Activity>
  </Activities>
</TrainingCenterDatabase>

প্রয়োজনীয় পরিধি এবং অবস্থান

GPS রুট এবং অবস্থান ট্র্যাকিংয়ের জন্য ডেটা পড়তে বা লিখতে, আপনার অ্যাপ্লিকেশনের অ্যাক্সেস টোকেনে নিম্নলিখিত OAuth স্কোপগুলির জন্য অনুরোধ করুন:

  • পঠন অ্যাক্সেস: 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.location.readonly

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

নির্দেশিকা

আপনার অ্যাপে ওয়ার্কআউট ট্র্যাকিং যুক্ত করার সময়, এই ডিজাইন ও বাস্তবায়ন নির্দেশিকাগুলো অনুসরণ করুন।

সক্রিয় বনাম মোট সময়কাল

গতি বা পেস মেট্রিক গণনা করার জন্য, startTime এবং endTime এর পার্থক্যের পরিবর্তে সর্বদা activeDuration ব্যবহার করুন। এটি বিরতি নেওয়া সময়কে আপনার মেট্রিকের মান বিকৃত করা থেকে বিরত রাখে।

উদাহরণস্বরূপ, যদি কোনো ব্যবহারকারী সকাল ৮:০০ টায় একটি ওয়ার্কআউট শুরু করে এবং ৮:৩৫ টায় শেষ করে, তাহলে ওয়ার্কআউটটির মোট অতিবাহিত সময় হবে ২,১০০ সেকেন্ড। যদি ব্যবহারকারী ওয়ার্কআউটটি ৫ মিনিটের (৩০০ সেকেন্ড) জন্য বিরতি দেয়, তাহলে activeDuration "1800s" (২,১০০ - ৩০০) এ সেট করুন। API গড় গণনা করার জন্য সক্রিয় সময়কাল ব্যবহার করে, এবং মোট দূরত্বকে ২,১০০ সেকেন্ডের পরিবর্তে ১,৮০০ সেকেন্ড দিয়ে ভাগ করে।

অবস্থান আগেভাগে অনুরোধ করুন।

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

যখন আপনার অ্যাপ লোকেশন স্কোপের ( https://www.googleapis.com/auth/googlehealth.location.readonly ) জন্য অনুরোধ করে, তখন Google OAuth ব্যবহারকারীকে একটি সম্মতির অনুরোধ দেখায়। আপনার ব্যবহারকারীদের বুঝিয়ে বলুন যে রুট ওভারলে রেন্ডার করতে এবং GPS ট্র্যাক ফাইল (TCX) এক্সপোর্ট করতে এই অনুমতিটি প্রয়োজন। যদি কোনো ব্যবহারকারী অ্যাক্টিভিটি স্কোপের অনুমতি দেয় কিন্তু লোকেশনের অনুমতি না দেয়, তাহলে exportExerciseTcx একটি অথরাইজেশন এরর দেখাবে, যদিও আপনি metricsSummary তে সেশন অ্যাগ্রিগেটগুলো অ্যাক্সেস করতে পারবেন।

ওয়েবহুক ব্যবহার করে রিয়েল-টাইম সিঙ্ক

নতুন ওয়ার্কআউট ডেটা উপলব্ধ হলে ওয়েবহুক ব্যবহার করে আপনার ব্যাকএন্ডকে অবহিত করতে exercise ডেটা টাইপটিতে সাবস্ক্রাইব করুন। এর মাধ্যমে আপনি রিয়েল টাইমে ওয়ার্কআউট-পরবর্তী অভিজ্ঞতাগুলো চালু করতে পারবেন।

যখন আপনার সার্ভার একটি ওয়েবহুক নোটিফিকেশন পায়, তখন তাতে healthUserId এবং ওয়ার্কআউটের নির্দিষ্ট শারীরিক সময়কাল থাকে। আপনার সার্ভারের উচিত নোটিফিকেশনটি অ্যাসিঙ্ক্রোনাসভাবে প্রসেস করা এবং তারপর /users/me/dataTypes/exercise/dataPoints এন্ডপয়েন্ট থেকে নতুন exercise ডেটা পয়েন্টের জন্য অনুরোধ করা। সাবস্ক্রিপশন কীভাবে সেট আপ করতে হয় সে সম্পর্কে বিস্তারিত জানতে, ওয়েবহুক সাবস্ক্রিপশন দেখুন।

সামঞ্জস্যপূর্ণ মেট্রিক বজায় রাখুন

একটি সম্পূর্ণ ওয়ার্কআউট অভিজ্ঞতা প্রদানের জন্য, আপনার অ্যাপকে অবশ্যই সামগ্রিক exercise সেশনের পাশাপাশি উচ্চ-ফ্রিকোয়েন্সির টেলিমেট্রি ডেটা পয়েন্টগুলো সিঙ্ক্রোনাইজ করতে হবে। এটি নিশ্চিত করে যে ব্যবহারকারীর দৈনিক মোট স্কোর, ঐতিহাসিক প্রবণতা এবং বিস্তারিত চার্টগুলো সম্পূর্ণরূপে সামঞ্জস্যপূর্ণ থাকে।

টেলিমেট্রি এবং সেশন সিঙ্ক করুন (রাইট পাথ)

গুগল হেলথ এপিআই-তে কোনো সম্পূর্ণ ওয়ার্কআউট ইম্পোর্ট বা রাইট করার সময়, একটি মাল্টি-স্টেপ রাইট প্যাটার্ন প্রয়োগ করুন:

  1. সেশনটি লিখুন : POST /users/me/dataTypes/exercise/dataPoints -এ একটি ডেটা পয়েন্ট পোস্ট করে সামারি ইভেন্টটি ফাইল করুন।
  2. টাইম-সিরিজ ইন্টারভাল লিখুন : ওয়ার্কআউটের সময় লগ করা সূক্ষ্ম ডেটা পয়েন্টগুলি (উদাহরণস্বরূপ, মিনিট-প্রতি-মিনিটের পদক্ষেপ বা ক্যালোরি বার্ন ইন্টারভাল) একযোগে তাদের নিজ নিজ সংগ্রহে লিখুন:
    • POST /users/me/dataTypes/steps/dataPoints
    • POST /users/me/dataTypes/active-energy-burned/dataPoints
    • POST /users/me/dataTypes/heart-rate/dataPoints

চার্টের বিস্তারিত ডেটা অনুসন্ধান করুন (পড়ার পথ)

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

  1. সেশন সারাংশগুলো অনুসন্ধান করুন : সামগ্রিক ওয়ার্কআউটের বিবরণ এবং চূড়ান্ত metricsSummary ) পেতে /users/me/dataTypes/exercise/dataPoints কল করুন।
  2. চার্ট মেট্রিক্স সংগ্রহ করুন : ওয়ার্কআউটের interval.startTime এবং interval.endTime পরীক্ষা করুন। ঐ নির্দিষ্ট সময়সীমার জন্য টেলিমেট্রি কালেকশনগুলিতে দ্বিতীয়বার GET কল করুন:
    • GET /users/me/dataTypes/heart-rate/dataPoints?startTime=2026-04-20T08:00:00Z&endTime=2026-04-20T08:35:00Z
  3. জিপিএস রুট সংগ্রহ করুন : যদি সেশনের মেটাডেটা জিপিএস ডেটার উপস্থিতি নির্দেশ করে ( exerciseMetadata.hasGps true হয়), তাহলে রুটের স্থানাঙ্ক ডাউনলোড করতে exportExerciseTcx হেল্পার মেথডটি কল করুন।