توسعه تجربه‌های خواب با Google Health API

‫Google Health API انواع داده‌هایی را ارائه می‌دهد که الگوهای خواب کاربر را ردیابی می‌کنند، ازجمله مدت، کیفیت، و سنجه‌های فیزیولوژیکی درطول استراحت. این سنجه‌ها به برنامه‌ها کمک می‌کنند تا اطلاعات آماری درباره ریکاوری، بهداشت خواب، و روندهای سلامتی بلندمدت ارائه دهند.

سنجه‌های فیزیولوژیکی مانند تغییرپذیری ضربان قلب (HRV)، اشباع اکسیژن (SpO2)، و سرعت تنفس به‌طور خاص درطول خواب ثبت می‌شوند زیرا بدن در حالت پایدار و استراحت قرار دارد. این کار به میانای برنامه‌سازی کاربردی اجازه می‌دهد تا خط مبنایی از سلامت خودمختار و تنفسی کاربر را بدون تداخل عوامل استرس‌زای روزانه، فعالیت بدنی، یا شرایط محیطی متغیر ثبت کند.

تفاوت‌های بین این انواع داده را درک کنید تا تعیین کنید کدام سنجه‌ها برای برنامه شما مناسب است.

انواع داده‌های پشتیبانی‌شده

این API از انواع داده‌های زیر برای اندازه‌گیری خواب پشتیبانی می‌کند:

جدول: انواع داده‌های خواب Google Health API
نوع داده عملیات
دردسترس
حوزه
تغییرپذیری ضربان قلب روزانه
dataType: daily-heart-rate-variability
filter parameter: daily_heart_rate_variability
نوع ضبط: روزانه

دستگاه‌های سازگار

فهرست، تطبیق دادن .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
اشباع اکسیژن روزانه
dataType: daily-oxygen-saturation
filter parameter: daily_oxygen_saturation
نوع ضبط: روزانه

دستگاه‌های سازگار

فهرست، تطبیق دادن .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
سرعت تنفس روزانه
dataType: daily-respiratory-rate
filter parameter: daily_respiratory_rate
نوع ضبط: روزانه

دستگاه‌های سازگار

فهرست، تطبیق دادن .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
انحرافات دمای خواب روزانه
dataType: daily-sleep-temperature-derivations
filter parameter: daily_sleep_temperature_derivations
نوع ضبط: روزانه

دستگاه‌های سازگار

فهرست، تطبیق دادن .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
تغییرپذیری ضربان قلب
dataType: heart-rate-variability
filter parameter: heart_rate_variability
نوع گزارش: نمونه

دستگاه‌های سازگار

فهرست، تطبیق دادن .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
اشباع اکسیژن
dataType: oxygen-saturation
filter parameter: oxygen_saturation
نوع گزارش: نمونه
وضوح ذخیره‌سازی: ۱ دقیقه

دستگاه‌های سازگار

فهرست، تطبیق دادن .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
خلاصه اطلاعات خواب سرعت تنفس
dataType: respiratory-rate-sleep-summary
filter parameter: respiratory_rate_sleep_summary
نوع گزارش: نمونه

دستگاه‌های سازگار

فهرست، تطبیق دادن .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
خواب
dataType: sleep
filter parameter: sleep
نوع ضبط: جلسه

دستگاه‌های سازگار

list, get, reconcile, create, update, batchDelete .sleep.readonly
.sleep.writeonly

جلسه‌های خواب و بیداری‌های کوتاه

«جلسه خواب» (Sleep) نشان‌دهنده یک رویداد خواب مجزا است، مانند یک خواب شبانه یا چرت روزانه. این شامل تفکیک دقیق مراحل خواب غیرهم‌پوشان درکنار فواصل کوتاه انتقال به بیداری است که به‌عنوان بیداری‌های کوتاه شناخته می‌شود.

  • جلسه خواب (Sleep): نشان‌دهنده رویداد خواب مجزا (LIGHT، DEEP، REM، AWAKE فاصله‌های زمانی مرحله) است که خط زمان پیوسته استراحت اصلی را تقسیم می‌کند.
  • بیداری‌های کوتاه (shortAwakenings): گذارهای کوتاه به بیداری یا بیداری‌هایی که درطول استراحت رخ می‌دهد. برخلاف فواصل استاندارد مرحله AWAKE (که پیشرفت مرحله خواب پیوسته غیرهم‌پوشان را تقسیم می‌کند)، بیداری‌های کوتاه بخش‌های متمایزی هستند که می‌توانند با مراحل خواب اطراف هم‌پوشانی داشته باشند. این حسگرها دیدی دقیق از بی‌قراری و بیداری‌های جزئی ارائه می‌دهند، بدون اینکه ساختار اصلی مراحل خواب را مختل کنند.
  • بیداری‌های شبانه: بیداری‌های نیمه‌شب (مانند بلند شدن برای آب خوردن) بااستفاده از ادغام حسگرهای روی دستگاه (شتاب‌سنج، ژیروسکوپ، و تعداد قدم‌ها) شناسایی می‌شوند. برنامه‌ها می‌توانند بیداری‌های شبانه را با فیلتر کردن stages برای فاصله‌های زمانی با type: "AWAKE" (استفاده‌شده در هر دو گزارش خواب CLASSIC و STAGES) یا با بررسی outOfBedSegments تشخیص دهند.

مثال

{
  "name": "users/user-id/dataTypes/sleep/dataPoints/data-point-id",
  "sleep": {
    "interval": {
      "startTime": "2026-04-20T22:30:00Z",
      "startUtcOffset": "-14400s",
      "endTime": "2026-04-21T06:30:00Z",
      "endUtcOffset": "-14400s"
    },
    "type": "STAGES",
    "stages": [
      {
        "startTime": "2026-04-20T22:30:00Z",
        "startUtcOffset": "-14400s",
        "endTime": "2026-04-20T23:45:00Z",
        "endUtcOffset": "-14400s",
        "type": "LIGHT"
      },
      {
        "startTime": "2026-04-20T23:45:00Z",
        "startUtcOffset": "-14400s",
        "endTime": "2026-04-21T01:15:00Z",
        "endUtcOffset": "-14400s",
        "type": "DEEP"
      }
    ],
    "shortAwakenings": [
      {
        "startTime": "2026-04-20T23:10:00Z",
        "startUtcOffset": "-14400s",
        "endTime": "2026-04-20T23:11:30Z",
        "endUtcOffset": "-14400s",
        "type": "AWAKE"
      }
    ],
    "summary": {
      "minutesInSleepPeriod": "480",
      "minutesAsleep": "455",
      "minutesAwake": "25",
      "minutesToFallAsleep": "15",
      "minutesAfterWakeUp": "10"
    }
  }
}

ایجاد جلسه خواب

برای ایجاد ورودی جلسه خواب، درخواست POST را به نقطه پایانی نقاط داده sleep ارسال کنید. پاسخ شامل فیلد name است که حاوی data-point-id است، که می‌تواند در درخواست به‌روزرسانی (وصله) یا حذف استفاده شود.

درخواست

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

{
  "sleep": {
    "interval": {
      "startTime": "2026-06-07T22:00:00Z",
      "startUtcOffset": "-14400s",
      "endTime": "2026-06-08T06:00:00Z",
      "endUtcOffset": "-14400s"
    },
    "type": "STAGES",
    "stages": [
      {
        "startTime": "2026-06-07T22:00:00Z",
        "startUtcOffset": "-14400s",
        "endTime": "2026-06-07T22:30:00Z",
        "endUtcOffset": "-14400s",
        "type": "LIGHT"
      },
      {
        "startTime": "2026-06-07T22:30:00Z",
        "startUtcOffset": "-14400s",
        "endTime": "2026-06-07T23:45:00Z",
        "endUtcOffset": "-14400s",
        "type": "DEEP"
      },
      {
        "startTime": "2026-06-07T23:45:00Z",
        "startUtcOffset": "-14400s",
        "endTime": "2026-06-08T02:15:00Z",
        "endUtcOffset": "-14400s",
        "type": "LIGHT"
      },
      {
        "startTime": "2026-06-08T02:15:00Z",
        "startUtcOffset": "-14400s",
        "endTime": "2026-06-08T02:45:00Z",
        "endUtcOffset": "-14400s",
        "type": "REM"
      },
      {
        "startTime": "2026-06-08T02:45:00Z",
        "startUtcOffset": "-14400s",
        "endTime": "2026-06-08T05:15:00Z",
        "endUtcOffset": "-14400s",
        "type": "LIGHT"
      },
      {
        "startTime": "2026-06-08T05:15:00Z",
        "startUtcOffset": "-14400s",
        "endTime": "2026-06-08T06:00:00Z",
        "endUtcOffset": "-14400s",
        "type": "REM"
      }
    ]
  }
}

پاسخ

{
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.devicesandservices.health.v4.DataPoint",
    "name": "users/user-id/dataTypes/sleep/dataPoints/data-point-id",
    "sleep": {
      "interval": {
        "startTime": "2026-06-07T22:00:00Z",
        "startUtcOffset": "-14400s",
        "endTime": "2026-06-08T06:00:00Z",
        "endUtcOffset": "-14400s"
      },
      "type": "STAGES",
      "stages": [
        {
          "startTime": "2026-06-07T22:00:00Z",
          "startUtcOffset": "-14400s",
          "endTime": "2026-06-07T22:30:00Z",
          "endUtcOffset": "-14400s",
          "type": "LIGHT"
        },
        {
          "startTime": "2026-06-07T22:30:00Z",
          "startUtcOffset": "-14400s",
          "endTime": "2026-06-07T23:45:00Z",
          "endUtcOffset": "-14400s",
          "type": "DEEP"
        },
        {
          "startTime": "2026-06-07T23:45:00Z",
          "startUtcOffset": "-14400s",
          "endTime": "2026-06-08T02:15:00Z",
          "endUtcOffset": "-14400s",
          "type": "LIGHT"
        },
        {
          "startTime": "2026-06-08T02:15:00Z",
          "startUtcOffset": "-14400s",
          "endTime": "2026-06-08T02:45:00Z",
          "endUtcOffset": "-14400s",
          "type": "REM"
        },
        {
          "startTime": "2026-06-08T02:45:00Z",
          "startUtcOffset": "-14400s",
          "endTime": "2026-06-08T05:15:00Z",
          "endUtcOffset": "-14400s",
          "type": "LIGHT"
        },
        {
          "startTime": "2026-06-08T05:15:00Z",
          "startUtcOffset": "-14400s",
          "endTime": "2026-06-08T06:00:00Z",
          "endUtcOffset": "-14400s",
          "type": "REM"
        }
      ]
    }
  }
}

سنجه‌های کارایی و تأخیر خواب

علاوه‌بر مراحل خواب و سنجه‌های فیزیولوژیکی، این API سنجه‌های کلیدی‌ای ارائه می‌دهد که کیفیت خواب و شروع خواب را کمی‌سازی می‌کنند. بازده خواب و تأخیر شروع خواب سنجه‌های بالینی استانداردی هستند که توصیف می‌کنند کاربر نسبت‌به کل زمانی که در تخت‌خواب می‌گذراند چقدر به‌طور مؤثر استراحت می‌کند و اطلاعاتی درباره بهداشت خواب و آرامش ارائه می‌دهند.

امتیاز بازده خواب

بازده خواب سنجه‌ای استاندارد است که به‌صورت نسبت زمان خواب به کل زمان سپری‌شده در تخت‌خواب تعریف می‌شود. میانای برنامه‌سازی کاربردی بازده خواب را بااستفاده از فرمول زیر محاسبه می‌کند:

Sleep Efficiency Score = round( (Total Minutes Asleep / Total Minutes In Bed) * 100 )

امتیاز کارایی درست قبل‌از تقسیم‌بندی سطح (مراحل) خواب محاسبه می‌شود. مجموع دقایق خواب برگردانده‌شده در پاسخ میانای برنامه‌سازی کاربردی (در فیلد summary.minutesAsleep) نتیجه نهایی را پس‌از محاسبه سطوح خواب منعکس می‌کند.

اگر کاربر یا پژوهشگر زمان شروع یا پایان گزارش خواب را به‌طور دستی اصلاح کند، میانای برنامه‌سازی کاربردی امتیاز بازده خواب را دوباره محاسبه می‌کند و بخش‌های مرحله را براساس داده‌های حسگر ثبت‌شده در محدوده جدید زمان خواب و زمان بیداری تنظیم می‌کند.

تأخیر شروع خواب

تأخیر شروع خواب مدت زمان سپری‌شده از وقتی که کاربر قصد خوابیدن دارد (شروع زمان «در تخت» یا «خاموشی») تا شروع خواب را اندازه‌گیری می‌کند.

برای گزارش‌های تولیدشده به‌طور خودکار (metadata.manuallyEdited برابر با false است)، summary.minutesToFallAsleep به‌طور پیش‌فرض روی "0" تنظیم می‌شود زیرا هیچ قصد صریحی برای به‌خواب رفتن ثبت نشده است. وقتی زمان‌های شروع در رختخواب به‌صورت دستی ضبط یا ویرایش می‌شوند (metadata.manuallyEdited برابر با true است)، میانای برنامه‌سازی کاربردی summary.minutesToFallAsleep را به‌همراه summary.minutesAfterWakeUp محاسبه و تکمیل می‌کند.

راهنمایی برای پژوهش و ثبت دستی

وقتی شرکت‌کنندگان زمان شروع و پایان در رختخواب بودن را به‌صورت دستی ضبط یا اصلاح می‌کنند:

  1. به‌روزرسانی مرزهای زمان خواب، interval (و summary.minutesInSleepPeriod) خواب را تغییر می‌دهد.
  2. سطوح خواب و بخش‌های مرحله به‌طور خودکار تنظیم می‌شوند تا داده‌های حسگر را در پنجره جدید ارزیابی کنند.
  3. امتیاز بازده خواب، summary.minutesToFallAsleep، و summary.minutesAfterWakeUp براساس پنجره زمانی به‌روزشده دوباره مشتق می‌شوند.

انحرافات دمای خواب روزانه

«انحرافات دمای خواب روزانه» تغییرات دمای پوست کاربر را درطول خواب درمقایسه با خط مبنای او اندازه‌گیری می‌کند. این داده‌ها معمولاً یک‌بار در روز پس‌از جلسه خواب اصلی گزارش می‌شود.

سرعت تنفس

سرعت تنفس تعداد نفس‌های کاربر در دقیقه را اندازه‌گیری می‌کند. درطول خواب، این سنجه کلیدی برای نظارت بر کیفیت خواب و اختلالات احتمالی است. این میانای برنامه‌سازی کاربردی از نمونه نرخ تنفس (respiratory-rate)، خلاصه‌های روزانه (daily-respiratory-rate)، و خلاصه‌های خواب در سطح جلسه (respiratory-rate-sleep-summary) پشتیبانی می‌کند.

تغییرپذیری ضربان قلب (HRV)

«تغییرپذیری ضربان قلب» تغییرات زمانی بین هر ضربان قلب را اندازه‌گیری می‌کند. این شاخص کلیدی وضعیت سیستم عصبی خودمختار است؛ «تغییرپذیری ضربان قلب» بالا درطول خواب معمولاً نشان‌دهنده بازیابی و آمادگی بهتر است، درحالی‌که «تغییرپذیری ضربان قلب» پایین می‌تواند نشان‌دهنده استرس یا تمرین بیش‌ازحد باشد. این میانای برنامه‌سازی کاربردی از نمونه HRV (heart-rate-variability) و خلاصه‌های روزانه (daily-heart-rate-variability) پشتیبانی می‌کند.

اشباع اکسیژن

اشباع اکسیژن خون (SpO2) نشان‌دهنده درصد هموگلوبین اشباع‌شده با اکسیژن نسبت‌به کل هموگلوبین خون است. پایش SpO2 درطول خواب به تشخیص اختلالات تنفسی احتمالی کمک می‌کند و تأیید می‌کند که آیا کاربر سطح اکسیژن کافی را درطول شب حفظ می‌کند یا نه. این API از نمونه SpO2 (oxygen-saturation) و خلاصه‌های روزانه (daily-oxygen-saturation) پشتیبانی می‌کند.

وقتی oxygen-saturation را در سطح دقیقه جستجو می‌کنید، Google Health API فقط نقاط داده معتبر را برمی‌گرداند و اندازه‌گیری‌های نامعتبر ناشی از حرکت بازو، شل بودن مچ‌بند، یا اطمینان پایین حسگر (زیر ۵۰٪)، و همچنین خوانش‌های مجاور نویز حرکتی را فیلتر می‌کند. چون دقیقه‌های نامعتبر مستثنی می‌شوند، پوشش در سطح دقیقه می‌تواند پراکنده باشد و انتظار می‌رود که در مُهرهای زمان فاصله وجود داشته باشد. هر دو oxygen-saturation و daily-oxygen-saturation به خوانش‌های معتبر یکسانی متکی هستند. برای جزئیات مربوط به معیارهای اعتبارسنجی، به فیلتر کردن SpO2 در سطح دقیقه و اعتبار داده‌ها مراجعه کنید.

نمای همه‌جانبه از سلامت خواب و بازیابی

اگرچه هر سنجه اطلاعات آماری خاصی ارائه می‌دهد، اما این سنجه‌ها عمیقاً با یکدیگر مرتبط هستند و باهم دیدی جامع از بهبودی کاربر ارائه می‌دهند. مراحل خواب (سبک، عمیق، REM) پایه ساختاری استراحت را فراهم می‌کنند، درحالی‌که نشانگرهای فیزیولوژیکی مانند HRV و SpO2 نشان می‌دهند که بدن چگونه به‌طور فیزیکی به آن استراحت پاسخ می‌دهد. برای مثال، یک جلسه خواب باکیفیت با خواب «عمیق» بهینه اغلب با «تغییرپذیری ضربان قلب» بالاتر همبستگی دارد که نشان‌دهنده بازیابی مؤثر سیستم عصبی خودمختار است.

ترکیب این موارد با مشتقات نرخ تنفس و دمای خواب به برنامه‌ها امکان می‌دهد اختلالات احتمالی را شناسایی کنند. افزایش ناگهانی نرخ تنفس یا انحراف در دمای خواب می‌تواند توضیح دهد که چرا کاربر ممکن است زمان کمتری را در مراحل ترمیمی گذرانده باشد. توسعه‌دهندگان با تجزیه‌وتحلیل این نوع داده‌ها به‌صورت هم‌زمان می‌توانند ارزیابی جامعی از بهداشت خواب و روندهای سلامتی بلندمدت ارائه دهند.

رهنمودها

هنگام ادغام سنجه‌های خواب در برنامه‌تان، از این دستورالعمل‌ها استفاده کنید:

  • جزئیات جلسه: برای نشان دادن مراحل خواب کاربر (سبک، عمیق، REM، بیدار) و بیداری‌های کوتاه، نوع داده sleep را پُرسمان کنید.
  • بیدار شدن‌های شبانه: برای ردیابی رویدادهای بیدار شدن در نیمه‌شب بدون جاری‌سازی‌های حسگر خام، فاصله‌های زمانی مرحله sleep را بررسی کنید و موارد دارای type: "AWAKE" را فیلتر کنید (برای هر دو گزارش خواب STAGES و CLASSIC) یا outOfBedSegments را بررسی کنید.
  • تأخیر و کارایی: از summary.minutesToFallAsleep و فرمول کارایی خواب برای تحلیل تأخیر خواب استفاده کنید. توجه داشته باشید که summary.minutesToFallAsleep زمانی پر می‌شود که گزارش‌های خواب به‌صورت دستی ویرایش شده باشند (metadata.manuallyEdited برابر با true است) یا به‌طور صریح ثبت شده باشند.
  • پایش فیزیولوژیکی: برای پایش پیشرفته سلامتی، داده‌های جلسه خواب را با سنجه‌های فیزیولوژیکی و بهبودی مانند respiratory-rate-sleep-summary، daily-sleep-temperature-derivations، daily-heart-rate-variability، و daily-oxygen-saturation ترکیب کنید.
  • تطبیق: از عملیات reconcile استفاده کنید تا مطمئن شوید که گزارش‌های خواب هم‌پوشان از دستگاه‌های مختلف (برای مثال، یک دستگاه پوشیدنی و یک حسگر تشک) در یک سابقه خواب «اصلی» واحد ادغام می‌شوند.

محاسبه کل زمان خواب عمیق

برای محاسبه کل زمانی که کاربر در مرحله خواب عمیق ترمیمی برای یک شب خاص سپری کرده است:

  1. نوع داده sleep را برای محدوده زمانی مشخص‌شده پُرسمان کنید.
  2. در فهرست مراحل تکرار کنید و فاصله‌هایی را که type DEEP است شناسایی کنید.
  3. مدت زمان (زمان پایان - زمان شروع) را برای هر فاصله خواب عمیق محاسبه کنید و آن‌ها را جمع کنید.

مجموع حاصل، کل مدت فیزیکی خواب عمیق را برای آن جلسه ارائه می‌دهد.