Google Health API ช่วยให้แอปพลิเคชันของคุณได้รับการแจ้งเตือนแบบเรียลไทม์ เมื่อข้อมูลสุขภาพของผู้ใช้มีการเปลี่ยนแปลง แทนที่จะสำรวจการเปลี่ยนแปลง เซิร์ฟเวอร์ของคุณจะได้รับคำขอ HTTPS POST (Webhook) ทันทีที่มีข้อมูลใน Google Health API
ประเภทข้อมูลที่รองรับ
ระบบรองรับการแจ้งเตือน Webhook สำหรับประเภทข้อมูลต่อไปนี้
- ขั้นตอน
- ระดับความสูง
- ระยะทาง
- ชั้น
- น้ำหนัก
- การนอนหลับ
ระบบจะส่งการแจ้งเตือนสำหรับข้อมูลประเภทเหล่านี้ก็ต่อเมื่อผู้ใช้ให้ความยินยอม สำหรับขอบเขตที่เกี่ยวข้องอย่างใดอย่างหนึ่งต่อไปนี้
- กิจกรรม ซึ่งครอบคลุมประเภทข้อมูลจำนวนก้าว ความสูง ระยะทาง และชั้น
https://www.googleapis.com/auth/googlehealth.activity_and_fitnesshttps://www.googleapis.com/auth/googlehealth.activity_and_fitness.readonly
- ตัวชี้วัดสุขภาพซึ่งครอบคลุมประเภทข้อมูลน้ำหนัก
https://www.googleapis.com/auth/googlehealth.health_metrics_and_measurementshttps://www.googleapis.com/auth/googlehealth.health_metrics_and_measurements.readonly
- การนอนหลับ ซึ่งครอบคลุมประเภทข้อมูลการนอนหลับต่อไปนี้
https://www.googleapis.com/auth/googlehealth.sleephttps://www.googleapis.com/auth/googlehealth.sleep.readonly
จัดการผู้ติดตาม
คุณต้องลงทะเบียนผู้ติดตามซึ่งแสดงถึงปลายทางการแจ้งเตือนของแอปพลิเคชันก่อนจึงจะรับการแจ้งเตือนได้ คุณจัดการผู้ติดตามได้โดยใช้ REST API ที่มีอยู่ที่ projects.subscribers
ปลายทางของผู้ติดตามต้องใช้ HTTPS (TLSv1.2+) และเข้าถึงได้แบบสาธารณะ
ในระหว่างการสร้างและการอัปเดตผู้ติดตาม Google Health API จะดำเนินการตรวจสอบเพื่อยืนยันว่าคุณเป็นเจ้าของ URI ของปลายทาง หากยืนยันไม่สำเร็จ การดำเนินการสร้างและอัปเดตผู้ติดตามจะล้มเหลวพร้อมกับFailedPreconditionException
สร้างผู้ติดตาม
หากต้องการลงทะเบียนผู้ติดตามใหม่สำหรับโปรเจ็กต์ ให้ใช้ปลายทาง
create คุณต้องระบุข้อมูลต่อไปนี้
endpointUri: URL ปลายทางสำหรับการแจ้งเตือนผ่านเว็บฮุคsubscriberConfigs: ประเภทข้อมูลที่คุณต้องการรับการแจ้งเตือน และนโยบายการสมัครใช้บริการสำหรับแต่ละประเภทendpointAuthorization: กลไกการให้สิทธิ์สำหรับปลายทาง ซึ่งต้องมีauthorization_tokenที่คุณระบุ ระบบจะส่งค่าของauthorization_tokenในส่วนหัวAuthorizationพร้อมกับข้อความแจ้งเตือนแต่ละรายการ คุณสามารถใช้โทเค็นนี้เพื่อยืนยันว่าคำขอขาเข้ามาจาก Google Health API เช่น คุณตั้งค่าauthorization_tokenเป็นBearer R4nd0m5tr1ng123สำหรับการตรวจสอบสิทธิ์ Bearer หรือBasic dXNlcjpwYXNzd29yZA==สำหรับการตรวจสอบสิทธิ์พื้นฐานได้subscriberId: ตัวระบุที่ไม่ซ้ำกันซึ่งคุณระบุสำหรับ ผู้ติดตาม รหัสนี้ต้องมีความยาวระหว่าง 4 ถึง 36 อักขระ และตรงกับ นิพจน์ทั่วไป ([a-z]([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) เนื้อหาคำขอต้องมีออบเจ็กต์สมาชิกบางส่วนที่มีค่าใหม่สำหรับฟิลด์ที่คุณต้องการอัปเดต ระบบจะอัปเดตเฉพาะฟิลด์ที่ระบุ
ใน updateMask หากคุณระบุฟิลด์ในเนื้อหาคำขอที่ไม่ได้อยู่ใน updateMask ระบบจะไม่สนใจฟิลด์ดังกล่าว
หากคุณอัปเดต endpointUri หรือ endpointAuthorization ระบบจะทำการยืนยันอุปกรณ์ปลายทาง
โปรดดูรายละเอียดในหัวข้อการยืนยันอุปกรณ์ปลายทาง
เมื่ออัปเดต subscriberConfigs โปรดทราบว่าเป็นการแทนที่ทั้งหมด ไม่ใช่การผสาน หากรวม subscriberConfigs ไว้ใน updateMask ระบบจะเขียนทับการกำหนดค่าที่จัดเก็บไว้ทั้งหมด
สำหรับผู้ติดตามรายนั้นด้วยรายการที่ระบุในเนื้อหาคำขอ
หากต้องการเพิ่มหรือนำการกำหนดค่าออก คุณต้องระบุชุดการกำหนดค่าทั้งหมด หากคุณกำลังอัปเดตช่องอื่นๆ และต้องการคงการกำหนดค่าปัจจุบันไว้ ให้ละเว้น subscriberConfigs จาก updateMask
ส่งคำขอ
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
}
}การยืนยันปลายทาง
Google Health API จะดำเนินการจับมือยืนยันแบบ 2 ขั้นตอนที่จำเป็นทุกครั้งที่คุณสร้างผู้ติดตามหรืออัปเดตการกำหนดค่าปลายทาง (endpointUri หรือendpointAuthorization) เพื่อให้มั่นใจถึงความปลอดภัยและความน่าเชื่อถือของการนำส่งการแจ้งเตือน กระบวนการนี้จะดำเนินการแบบซิงโครนัสระหว่างการเรียก API บริการจะส่งคำขอ POST อัตโนมัติ 2 รายการไปยัง URI ของปลายทาง โดยใช้ User-Agent Google-Health-API-Webhooks-Verifier พร้อมกับเนื้อหา JSON {"type": "verification"}
- การแฮนด์เชคที่ได้รับอนุญาต: คำขอแรกจะส่งพร้อมกับส่วนหัว
Authorizationที่กำหนดค่าไว้ เซิร์ฟเวอร์ของคุณต้องตอบกลับด้วยสถานะ200 OKหรือ201 Created - การท้าทายที่ไม่ได้รับอนุญาต: คำขอที่ 2 จะส่งโดยไม่มีข้อมูลเข้าสู่ระบบ
เซิร์ฟเวอร์ของคุณต้องตอบกลับด้วยสถานะ
401 Unauthorizedหรือ403 Forbidden
การยืนยันนี้เป็นการยืนยันว่าอุปกรณ์ปลายทางของคุณใช้งานอยู่และบังคับใช้
การรักษาความปลอดภัยอย่างถูกต้อง หากขั้นตอนใดขั้นตอนหนึ่งล้มเหลว คำขอ API จะล้มเหลวพร้อมข้อผิดพลาด
FAILED_PRECONDITION ระบบจะบันทึกและเปิดใช้งานผู้ติดตามให้รับการแจ้งเตือนข้อมูลสุขภาพได้หลังจากที่การแฮนด์เชคนี้สำเร็จแล้วเท่านั้น
การหมุนเวียนคีย์
หากต้องการหมุนเวียนคีย์สำหรับ endpointAuthorization ให้ทำตามขั้นตอนต่อไปนี้
- กำหนดค่าปลายทางให้ยอมรับทั้ง
endpointAuthorizationค่าเก่าและค่าใหม่ - อัปเดตการกำหนดค่าผู้ติดตามด้วยค่า
endpointAuthorizationใหม่ โดยใช้คำขอpatchที่มี?updateMask=endpointAuthorization - กำหนดค่าปลายทางให้ยอมรับเฉพาะค่า
endpointAuthorizationใหม่ หลังจากยืนยันว่าขั้นตอนที่ 2 สำเร็จแล้ว
ลบผู้ติดตาม
ใช้delete ปลายทางเพื่อนำสมาชิกออกจากโปรเจ็กต์ เมื่อลบแล้ว ผู้ติดตาม
จะไม่ได้รับการแจ้งเตือนอีกต่อไป
ส่งคำขอ
DELETE https://health.googleapis.com/v4/projects/project-id/subscribers/subscriber-id
การตอบกลับ
ระบบจะแสดงเนื้อหาการตอบกลับที่ว่างเปล่าพร้อมสถานะ HTTP `200 OK` หากลบสำเร็จ{}การสมัครใช้บริการของผู้ใช้
Google Health API ช่วยให้คุณจัดการการสมัครใช้บริการของผู้ใช้ได้อย่างมีประสิทธิภาพ ซึ่งจะช่วยลดความจำเป็นในการลงทะเบียนด้วยตนเองในระหว่างการเตรียมความพร้อมผู้ใช้งานใหม่
การสมัครใช้บริการอัตโนมัติ
เราขอแนะนำให้ใช้การสมัครใช้บริการอัตโนมัติ หากต้องการเปิดใช้ฟีเจอร์นี้ ให้ตั้งค่า
subscriptionCreatePolicy เป็น AUTOMATIC ใน subscriberConfigs สำหรับ
ประเภทข้อมูลที่เฉพาะเจาะจง dataTypes ที่คุณระบุด้วยนโยบาย AUTOMATIC จะเป็นประเภทข้อมูลเดียวกันกับที่ Google Health API ส่งการแจ้งเตือน หากผู้ใช้ให้ความยินยอมของผู้ใช้สำหรับประเภทข้อมูลเหล่านั้นด้วย
เมื่อผู้ใช้ให้ความยินยอมในการสมัครใช้ขอบเขตที่สอดคล้องกับประเภทข้อมูลที่มีAUTOMATICนโยบาย Google Health API จะติดตามและส่งการแจ้งเตือนโดยอัตโนมัติสำหรับประเภทข้อมูลที่เกิดจากการตัดกันระหว่างประเภทข้อมูลที่ผู้ใช้ยินยอมกับประเภทข้อมูลการกำหนดค่าผู้ติดตามอัตโนมัติสำหรับผู้ใช้รายนั้น จากนั้นระบบจะส่งการแจ้งเตือนไปยังอุปกรณ์ปลายทาง
เมื่อใดก็ตามที่ผู้ใช้สร้างข้อมูลใหม่สำหรับประเภทเหล่านั้น ซึ่งใช้ได้กับผู้ใช้ที่ให้ความยินยอมทั้งก่อนและหลังที่คุณสร้างผู้ติดตาม ระบบจะไม่ทดแทนการแจ้งเตือนสำหรับข้อมูลที่สร้างขึ้นก่อนที่จะสร้างผู้ติดตาม
หากผู้ใช้เพิกถอนความยินยอม การแจ้งเตือนสำหรับประเภทข้อมูลที่เกี่ยวข้องจะหยุดลง Google เป็นผู้จัดการการสมัครใช้บริการอัตโนมัติ และไม่สามารถแสดงหรือ ลบการสมัครใช้บริการแต่ละรายการได้ โดยระบบจะนำการสมัครใช้บริการออกเมื่อมีการลบผู้สมัครใช้บริการหลักเท่านั้น
การสมัครใช้บริการด้วยตนเอง
หากต้องการจัดการการสมัครใช้บริการสำหรับผู้ใช้แต่ละรายด้วยตนเอง ให้ตั้งค่า
subscriptionCreatePolicy เป็น MANUAL ใน subscriberConfigs นโยบายนี้จะทำให้ระบบไม่สร้างการสมัครใช้บริการของผู้ใช้โดยอัตโนมัติ ระบบจะใช้ฟังก์ชันนี้ในอนาคตเมื่อมี API สำหรับจัดการการสมัครใช้บริการด้วยตนเอง
พร้อมให้บริการ เราขอแนะนำให้ใช้AUTOMATIC
การติดตามจนกว่า API เหล่านี้จะพร้อมใช้งาน
การแจ้งเตือน
เมื่อข้อมูลของผู้ใช้มีการเปลี่ยนแปลงสำหรับประเภทข้อมูลที่สมัครใช้บริการ Google Health API จะส่งคำขอ HTTPS POST ไปยัง URL ปลายทางของผู้สมัครใช้บริการ
รูปแบบการแจ้งเตือน
เพย์โหลดการแจ้งเตือนคือออบเจ็กต์ 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: ส่งเมื่อผู้ใช้ลบข้อมูล หรือเมื่อระบบนำข้อมูลออกเนื่องจาก เหตุการณ์ในระบบ เช่น ผู้ใช้เพิกถอนสิทธิ์หรือลบบัญชี
เราขอแนะนำให้สร้างตรรกะการจัดการการแจ้งเตือนให้เป็นแบบ Idempotent โดยเฉพาะสำหรับการดำเนินการ UPSERT เนื่องจากความพยายามอีกครั้งอาจทำให้ระบบส่งการแจ้งเตือนที่ซ้ำกัน
ฟิลด์ clientProvidedSubscriptionName เป็นตัวระบุที่ไม่ซ้ำกัน สำหรับ
การติดตามที่มีMANUALนโยบาย ฟิลด์นี้จะมีชื่อการติดตามที่คงอยู่ซึ่งนักพัฒนาแอปเป็นผู้ระบุเมื่อสร้างการติดตาม
ซึ่งจะให้รหัสที่เสถียรสำหรับการจัดการการสมัครใช้บริการด้วยตนเอง สำหรับการสมัครใช้บริการที่สร้างขึ้นด้วยนโยบาย AUTOMATIC Google Health API จะสร้างและกำหนดตัวระบุที่ไม่ซ้ำกัน (UUID แบบสุ่ม) ให้กับฟิลด์นี้โดยอัตโนมัติสำหรับแต่ละการแจ้งเตือน
การรวม clientProvidedSubscriptionName สำหรับทั้งนโยบายแบบกำหนดเองและแบบอัตโนมัติ
จะช่วยให้มั่นใจได้ว่ารูปแบบเพย์โหลดการแจ้งเตือนจะสอดคล้องกันใน
การสมัครใช้บริการทุกประเภท
healthUserId คือตัวระบุ Google Health API สำหรับผู้ใช้ที่มี
การเปลี่ยนแปลงข้อมูล หากแอปพลิเคชันรองรับผู้ใช้หลายราย คุณอาจได้รับการแจ้งเตือนสำหรับผู้ใช้ที่ให้ความยินยอมแก่แอปพลิเคชัน เมื่อได้รับ
การแจ้งเตือน ให้ใช้ healthUserId เพื่อระบุข้อมูลของผู้ใช้รายใดที่มีการเปลี่ยนแปลง
เพื่อให้คุณใช้ข้อมูลเข้าสู่ระบบ OAuth ของผู้ใช้เพื่อค้นหาข้อมูลได้
หากต้องการแมปข้อมูลเข้าสู่ระบบ OAuth ของผู้ใช้กับ healthUserId ให้ใช้ปลายทาง getIdentity เรียกใช้ปลายทางนี้ด้วยข้อมูลเข้าสู่ระบบของผู้ใช้ในระหว่างการเริ่มต้นใช้งานผู้ใช้เพื่อดึงข้อมูลhealthUserId และจัดเก็บการแมปนี้ การแมปนี้จะไม่เปลี่ยนแปลงเมื่อเวลาผ่านไป
จึงแคชไว้ได้เรื่อยๆ ดูตัวอย่างได้ที่
รับรหัสผู้ใช้ ซึ่งจะช่วยให้คุณเลือก
ข้อมูลเข้าสู่ระบบของผู้ใช้ที่ถูกต้องเมื่อค้นหาข้อมูลตามhealthUserIdใน
การแจ้งเตือน
ตอบกลับการแจ้งเตือน
เซิร์ฟเวอร์ของคุณต้องตอบกลับการแจ้งเตือนด้วยรหัสสถานะ HTTP 204 No Content
ทันที ประมวลผลเพย์โหลดการแจ้งเตือนแบบไม่พร้อมกันหลังจากส่งการตอบกลับเพื่อหลีกเลี่ยงการหมดเวลา หาก Google Health API ได้รับรหัสสถานะอื่นๆ
หรือคำขอหมดเวลา ระบบจะลองส่งการแจ้งเตือนอีกครั้งในภายหลัง
ตัวอย่าง Node.js (Express)
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) Google Health API จะจัดเก็บการแจ้งเตือนที่รอดำเนินการไว้ไม่เกิน 7 วัน และจะลองส่งอีกครั้งโดยใช้ Exponential Backoff
เมื่ออุปกรณ์ปลายทางกลับมาออนไลน์และตอบกลับด้วย 204 แล้ว API
จะส่งข้อความที่ค้างไว้ซึ่งจัดเก็บไว้โดยอัตโนมัติ ระบบจะทิ้งการแจ้งเตือนที่เก่ากว่า 7 วันและกู้คืนไม่ได้