वेबबुक की सदस्यताएं

Google Health API की मदद से, आपका ऐप्लिकेशन रीयल-टाइम में सूचनाएं पा सकता है. ये सूचनाएं तब मिलती हैं, जब किसी उपयोगकर्ता के सेहत के डेटा में बदलाव होता है. बदलावों के लिए पोल करने के बजाय, आपका सर्वर Google Health API में डेटा उपलब्ध होने पर, एचटीटीपीएस पोस्ट अनुरोध वाला वेबहुक पाता है.

डेटा टाइप, जो इस्तेमाल किए जा सकते हैं

वेबहुक सूचनाएं, इन डेटा टाइप के लिए उपलब्ध हैं:

  • ऐक्टिव ज़ोन मिनट
  • ऐक्टिविटी लेवल
  • ऊंचाई
  • ब्लड ग्लूकोज़
  • बॉडी फ़ैट
  • धड़कन की दर वाले ज़ोन में बर्न हुई कैलोरी
  • रोज़ाना की धड़कन की दर में उतार-चढ़ाव
  • रोज़ाना की धड़कन की दर वाले ज़ोन
  • रोज़ाना ऑक्सीजन की मात्रा
  • रोज़ाना सांस की दर
  • रोज़ाना आराम करते समय धड़कन की दर
  • रोज़ाना नींद के दौरान त्वचा के तापमान में बदलाव
  • दूरी
  • कसरत
  • फ़्लोर
  • धड़कन की दर
  • धड़कन की दर में उतार-चढ़ाव
  • ऊंचाई
  • हाइड्रेशन का लॉग
  • पोषण का लॉग
  • सांस की दर से जुड़ी नींद की खास जानकारी
  • दौड़ने के दौरान का 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

आईएएम के सेवा खाते

Google Health API के लिए सदस्यों को कॉन्फ़िगर करते समय, आईएएम के सेवा खाते का इस्तेमाल करना ज़रूरी नहीं है. हालांकि, हमारा सुझाव है कि आप इसका इस्तेमाल करें. सेवा खाते, ऐप्लिकेशन के वर्कलोड के लिए बेहतर सुरक्षा देते हैं. इसकी वजह यह है कि इनमें ये सुविधाएं मिलती हैं, जो सामान्य उपयोगकर्ता खातों में नहीं मिलतीं:

  • कम समय के लिए मान्य क्रेडेंशियल की सुविधा: सेवा खाते, Google Cloud के किसी भी एक्ज़ीक्यूशन एनवायरमेंट (जैसे, Compute Engine, Cloud Run या Google Kubernetes Engine) से जुड़ने पर, सुरक्षित और कम समय के लिए मान्य क्रेडेंशियल अपने-आप हासिल कर लेते हैं. साथ ही, ये क्रेडेंशियल समय-समय पर रोटेट होते रहते हैं. इससे, स्थायी स्टैटिक पासकोड को मैनेज करने और सेव करने का जोखिम खत्म हो जाता है.
  • ज़रूरत के हिसाब से अनुमतियां देने की सुविधा: सेवा खाते, वर्कलोड के लिए अलग-अलग आइडेंटिटी उपलब्ध कराते हैं. इन्हें सिर्फ़ वे अनुमतियां दी जा सकती हैं जिनकी ज़रूरत, सदस्यों के एंडपॉइंट को मैनेज करने के लिए होती है. इससे, Google Cloud के संसाधनों का ऐक्सेस सीमित किया जा सकता है.
  • लाइफ़साइकल की स्वतंत्रता: सेवा खाते, किसी भी उपयोगकर्ता के खाते से अलग काम करते हैं. इससे यह पक्का होता है कि कर्मचारियों के बदलने से, लंबे समय तक पुष्टि करने की प्रोसेस पर कोई असर नहीं पड़ता.

सेवा खाता सेट अप करना

अपने सदस्य ऐप्लिकेशन को सेवा खाते का इस्तेमाल करके पुष्टि करने के लिए कॉन्फ़िगर करने का तरीका:

  1. सेवा खाता बनाना: Google Cloud Console में, अपने प्रोजेक्ट के आईएएम और एडमिन पेज पर जाएं. इसके बाद, उपयोगकर्ता के मैनेज किए जाने वाले नए सेवा खाते को बनाएं.
  2. आईएएम की ज़रूरी भूमिकाएं देना: सेवा खाते को ज़रूरी भूमिकाएं असाइन करें जो Google Cloud प्रोजेक्ट पर सदस्यों को मैनेज करने के लिए ज़रूरी हैं.
  3. सेवा खाते को अपने वर्कलोड से जोड़ना: अपने सदस्य लॉजिक को होस्ट करने वाले एनवायरमेंट को, नए सेवा खाते के तौर पर चलाने के लिए कॉन्फ़िगर करें. इससे, आपके ऐप्लिकेशन का कोड (जैसे, Google API क्लाइंट लाइब्रेरी), projects.subscribers REST API को कॉल करते समय, सेवा खाते के कम समय के लिए मान्य क्रेडेंशियल को अपने-आप पहचान लेता है और उनका इस्तेमाल करता है.

सीपीई की भूमिकाएं

Google Health API के सदस्यों या सदस्यताओं को मैनेज करने के लिए, आपको एपीआई कॉल करने वाले, इंपर्सनेट किए गए सेवा खाते को सही भूमिका देनी होगी. ज़रूरत के हिसाब से ऐक्सेस लेवल के आधार पर, इनमें से कोई एक भूमिका असाइन करें:

  • Google Health API रीड
  • Google Health API एडिटर
  • Google Health API एडमिन

Google Health API की आईएएम भूमिकाओं और अनुमतियों के बारे में ज़्यादा जानें.

सदस्यों को मैनेज करना

सूचनाएं पाने के लिए, आपको सदस्य रजिस्टर करना होगा. यह आपके ऐप्लिकेशन के सूचना एंडपॉइंट को दिखाता है. सदस्यों को मैनेज करने के लिए, REST API का इस्तेमाल किया जा सकता है. यह API projects.subscribers पर उपलब्ध है.

आपके सदस्य एंडपॉइंट को एचटीटीपीएस (TLSv1.2+) का इस्तेमाल करना होगा. साथ ही, यह सार्वजनिक तौर पर ऐक्सेस किया जा सकता है. सदस्य बनाने और अपडेट करने के दौरान, Google Health API, पुष्टि करने की चुनौती देता है. इससे यह पक्का किया जाता है कि आपके पास एंडपॉइंट यूआरआई का मालिकाना हक है. अगर पुष्टि नहीं हो पाती है, तो सदस्य बनाने और अपडेट करने की कार्रवाइयां FailedPreconditionException के साथ पूरी नहीं हो पाती हैं.

सदस्य बनाना

अपने प्रोजेक्ट के लिए नया सदस्य रजिस्टर करने के लिए, create एंडपॉइंट का इस्तेमाल करें. आपको यह जानकारी देनी होगी:

  • project-id: वह प्रोजेक्ट नंबर जहां वेबहुक सेवा खाता बनाया गया था.
  • subscriberId: एक यूनीक आइडेंटिफ़ायर, जो सदस्य के लिए दिया जाता है. यह आईडी, 4 से 36 वर्णों के बीच होना चाहिए. साथ ही, यह रेगुलर एक्सप्रेशन ([a-z]([a-z0-9-]{2,34}[a-z0-9])) से मेल खाना चाहिए.
  • endpointUri: वेबहुक सूचनाओं के लिए डेस्टिनेशन यूआरएल.
  • subscriberConfigs: वे डेटा टाइप जिनके लिए आपको सूचनाएं चाहिए. साथ ही, हर डेटा टाइप के लिए सदस्यता की नीति.
  • endpointAuthorization: आपके एंडपॉइंट के लिए अनुमति देने का तरीका. इसमें, आपके दिए गए secret की जानकारी होनी चाहिए. secret की वैल्यू, हर सूचना मैसेज के साथ Authorization हेडर में भेजी जाती है. इस टोकन का इस्तेमाल करके, यह पुष्टि की जा सकती है कि आने वाले अनुरोध, 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 में, उन फ़ील्ड के नामों की कॉमा से अलग की गई सूची होनी चाहिए जिन्हें आपको अपडेट करना है. इसके लिए, फ़ील्ड के नामों के लिए कैमल केस का इस्तेमाल करें. उदाहरण के लिए, endpointUri. अनुरोध के मुख्य हिस्से में, सदस्य ऑब्जेक्ट का वह हिस्सा होना चाहिए जिसमें उन फ़ील्ड की नई वैल्यू शामिल हों जिन्हें आपको अपडेट करना है. सिर्फ़ updateMask में बताए गए फ़ील्ड अपडेट किए जाते हैं. अगर अनुरोध के मुख्य हिस्से में ऐसे फ़ील्ड शामिल किए जाते हैं जो updateMask में नहीं हैं, तो उन्हें अनदेखा कर दिया जाता है.

endpointUri या endpointAuthorization को अपडेट करने पर, एंडपॉइंट की पुष्टि की जाती है. ज़्यादा जानकारी के लिए, एंडपॉइंट की पुष्टि देखें.

subscriberConfigs को अपडेट करते समय, ध्यान दें कि यह पूरी तरह से बदलता है, न कि मर्ज होता है. अगर subscriberConfigs को updateMask में शामिल किया जाता है, तो उस सदस्य के लिए सेव किए गए सभी कॉन्फ़िगरेशन, अनुरोध के मुख्य हिस्से में दी गई सूची से बदल दिए जाते हैं. किसी कॉन्फ़िगरेशन को जोड़ने या हटाने के लिए, आपको कॉन्फ़िगरेशन का पूरा सेट देना होगा. अगर आपको दूसरे फ़ील्ड अपडेट करने हैं और मौजूदा कॉन्फ़िगरेशन को बनाए रखना है, तो 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` के साथ, खाली जवाब का मुख्य हिस्सा मिलता है.
{}

एंडपॉइंट की पुष्टि

सूचनाएं सुरक्षित और भरोसेमंद तरीके से डिलीवर हों, इसके लिए Google Health API, दो चरणों में पुष्टि करने की प्रोसेस पूरी करता है. यह प्रोसेस, सदस्य बनाते समय या उसके एंडपॉइंट कॉन्फ़िगरेशन (endpointUri या endpointAuthorization) को अपडेट करते समय पूरी की जाती है. यह प्रोसेस, एपीआई कॉल के दौरान सिंक्रोनस तरीके से पूरी की जाती है. सेवा, आपके एंडपॉइंट यूआरआई पर दो ऑटोमेटेड पोस्ट अनुरोध भेजती है. इसके लिए, User-Agent Google-Health-API-Webhooks और JSON का मुख्य हिस्सा {"type": "verification"} इस्तेमाल किया जाता है.

  • अनुमति वाली हैंडशेक प्रोसेस: पहला अनुरोध, आपके कॉन्फ़िगर किए गए Authorization हेडर के साथ भेजा जाता है. आपके सर्वर को 200 OK या 201 Created स्टेटस के साथ जवाब देना होगा.
  • बिना अनुमति वाली चुनौती: दूसरा अनुरोध, क्रेडेंशियल के बिना भेजा जाता है. आपके सर्वर को 401 Unauthorized या 403 Forbidden स्टेटस के साथ जवाब देना होगा.

इस हैंडशेक प्रोसेस से पुष्टि होती है कि आपका एंडपॉइंट चालू है और सुरक्षा से जुड़े नियमों का सही तरीके से पालन कर रहा है. अगर इनमें से कोई भी चरण पूरा नहीं होता है, तो एपीआई अनुरोध, FAILED_PRECONDITION गड़बड़ी के साथ पूरा नहीं हो पाता. इस हैंडशेक प्रोसेस के पूरा होने के बाद ही, आपका सदस्य सेव होता है और सेहत का डेटा की सूचनाएं पाने के लिए चालू होता है.

डेटा सुरक्षित करने वाली कुंजी का नया वर्शन बनाना

अगर आपको endpointAuthorization के लिए कुंजियों का नया वर्शन बनाना है, तो यह तरीका अपनाएं:

  1. अपने एंडपॉइंट को, endpointAuthorization की पुरानी और नई, दोनों वैल्यू स्वीकार करने के लिए कॉन्फ़िगर करें.
  2. सदस्य के कॉन्फ़िगरेशन को नई endpointAuthorization वैल्यू के साथ अपडेट करें. इसके लिए, patch अनुरोध का इस्तेमाल करें.?updateMask=endpointAuthorization
  3. दूसरे चरण के पूरा होने की पुष्टि करने के बाद, अपने एंडपॉइंट को endpointAuthorization की सिर्फ़ नई वैल्यू स्वीकार करने के लिए कॉन्फ़िगर करें.

उपयोगकर्ता की सदस्यताएं

Google Health API की मदद से, उपयोगकर्ता की सदस्यताओं को आसानी से मैनेज किया जा सकता है. इससे, उपयोगकर्ता के ऑनबोर्डिंग के दौरान, मैन्युअल तरीके से रजिस्ट्रेशन करने की ज़रूरत कम हो जाती है.

अपने-आप सदस्यताएं

हमारा सुझाव है कि आप अपने-आप सदस्यताएं पाने की सुविधा का इस्तेमाल करें. इस सुविधा को चालू करने के लिए, खास डेटा टाइप के लिए अपने subscriberConfigs में subscriptionCreatePolicy को AUTOMATIC पर सेट करें. AUTOMATIC नीति के साथ बताए गए dataTypes वही डेटा टाइप होते हैं जिनके लिए Google Health API सूचनाएं भेजता है. हालांकि, इसके लिए यह ज़रूरी है कि उपयोगकर्ता ने उन डेटा टाइप के लिए सहमति दी हो.

जब कोई उपयोगकर्ता, AUTOMATIC नीति वाले डेटा टाइप से जुड़े स्कोप के लिए ऐप्लिकेशन को सहमति देता है, तो Google Health API, उपयोगकर्ता की सहमति वाले डेटा टाइप और उस उपयोगकर्ता के लिए, अपने-आप सदस्य के कॉन्फ़िगरेशन वाले डेटा टाइप के इंटरसेक्शन से मिलने वाले डेटा टाइप को अपने-आप ट्रैक करता है और उनकी सूचनाएं भेजता है. इसके बाद, जब भी वह उपयोगकर्ता उन टाइप के लिए नया डेटा जनरेट करता है, तो आपके एंडपॉइंट को सूचनाएं भेजी जाती हैं. यह सुविधा, उन उपयोगकर्ताओं के लिए काम करती है जिन्होंने सदस्य बनाने से पहले या बाद में सहमति दी है. सदस्य बनाने से पहले जनरेट किए गए डेटा के लिए, सूचनाएं बैकफ़िल नहीं की जाती हैं.

अगर कोई उपयोगकर्ता सहमति वापस ले लेता है, तो उससे जुड़े डेटा टाइप के लिए सूचनाएं नहीं भेजी जाएंगी. अपने-आप सदस्यताएं, Google मैनेज करता है. इन्हें अलग-अलग सूची में शामिल नहीं किया जा सकता या मिटाया नहीं जा सकता. इन्हें सिर्फ़ तब हटाया जाता है, जब पैरंट सदस्य को मिटाया जाता है.

मैन्युअल सदस्यताएं

अगर आपका सदस्य, खास डेटा टाइप के लिए subscription_create_policy को `MANUAL` पर सेट करके कॉन्फ़िगर किया गया है, तो आपको हर उपयोगकर्ता के लिए, सदस्यताओं को साफ़ तौर पर बनाना और मैनेज करना होगा. सदस्यता, डेटा टाइप के तय सेट के लिए, किसी खास उपयोगकर्ता को आपके सदस्य एंडपॉइंट से लिंक करती है. डेवलपर, इन कामों के लिए खास एपीआई का इस्तेमाल कर सकते हैं:

  • healthUserId के हिसाब से (मैन्युअल) सदस्यताएं बनाना - किसी खास उपयोगकर्ता के लिए नई सदस्यता बनाता है. इस तरीके के लिए, ज़रूरी है कि सदस्य के पास अनुरोध किए गए डेटा टाइप के लिए SubscriptionCreatePolicy को MANUAL पर सेट किया गया हो.
  • (मैन्युअल) सदस्यता अपडेट करना - किसी मौजूदा उपयोगकर्ता की सदस्यता के लिए डेटा टाइप अपडेट करता है.
  • (मैन्युअल) सदस्यता मिटाना - किसी खास उपयोगकर्ता की सदस्यता मिटाता है. सदस्यता मिटाने के बाद, आपके सदस्य एंडपॉइंट को इस उपयोगकर्ता के लिए, जुड़े डेटा टाइप के लिए सूचनाएं नहीं मिलेंगी.
  • (मैन्युअल) सदस्यताओं की सूची - किसी दिए गए सदस्य के लिए, चालू सभी सदस्यताओं की सूची दिखाता है. नतीजों को उपयोगकर्ता या डेटा टाइप के हिसाब से फ़िल्टर किया जा सकता है.

सूचनाएं

जब किसी सदस्य के डेटा टाइप में बदलाव होता है, तो Google Health API, सदस्य एंडपॉइंट यूआरएल पर एचटीटीपीएस पोस्ट अनुरोध भेजता है.

सूचना का फ़ॉर्मैट

सूचना का पेलोड, 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 हर सूचना के लिए, इस फ़ील्ड में एक यूनीक आइडेंटिफ़ायर (रैंडम यूयूआईडी) अपने-आप जनरेट करता है और असाइन करता है. मैन्युअल और अपने-आप सदस्यताएं पाने की, दोनों नीतियों के लिए clientProvidedSubscriptionName को शामिल करने से, सभी तरह की सदस्यताओं के लिए सूचना के पेलोड का फ़ॉर्मैट एक जैसा रहता है.

healthUserId, उस उपयोगकर्ता के लिए Google Health API का आइडेंटिफ़ायर है जिसका डेटा बदला गया है. अगर आपका ऐप्लिकेशन एक से ज़्यादा उपयोगकर्ताओं के लिए काम करता है, तो आपको उस उपयोगकर्ता के लिए सूचनाएं मिल सकती हैं जिसने आपके ऐप्लिकेशन को सहमति दी है. सूचना मिलने पर, healthUserId का इस्तेमाल करके यह पहचानें कि किस उपयोगकर्ता का डेटा बदला गया है. इससे, उसके डेटा के बारे में क्वेरी करने के लिए, उसके OAuth क्रेडेंशियल का इस्तेमाल किया जा सकता है.

किसी उपयोगकर्ता के OAuth क्रेडेंशियल को उनके healthUserId से मैप करने के लिए, getIdentity एंडपॉइंट का इस्तेमाल करें. उपयोगकर्ता के ऑनबोर्डिंग के दौरान, उसके क्रेडेंशियल के साथ इस एंडपॉइंट को कॉल करें, ताकि उसका healthUserId वापस पाया जा सके. इसके बाद, इस मैपिंग को सेव करें. यह मैपिंग समय के साथ नहीं बदलती है. इसलिए, इसे हमेशा के लिए कैश किया जा सकता है. उदाहरण के लिए, उपयोगकर्ता आईडी पाना देखें. इससे, सूचना में मौजूद healthUserId के आधार पर डेटा के बारे में क्वेरी करते समय, उपयोगकर्ता के सही क्रेडेंशियल चुने जा सकते हैं.

किसी सूचना का जवाब देना

आपके सर्वर को, सूचनाओं का जवाब तुरंत एचटीटीपी 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
    });
});

सबसे सही तरीके

डेटा अपडेट को भरोसेमंद और असरदार तरीके से मैनेज करने के लिए, इन सबसे सही तरीकों को अपनाएं:

  • सदस्यता एपीआई का इस्तेमाल करना: एंडपॉइंट को पोल करने के बजाय, सदस्यता एपीआई का इस्तेमाल करें. इससे आपको तब सूचना मिलेगी , जब किसी उपयोगकर्ता के पास डाउनलोड करने के लिए नया डेटा होगा.
  • सूचनाओं को अलग-अलग प्रोसेस करना और उन्हें क्यू में रखना: सदस्यता की सूचनाएं मिलने पर, उन्हें क्यू में रखें. इसके बाद, अपने सिस्टम के संसाधनों के आधार पर, उन्हें अलग-अलग प्रोसेस करें. अनुरोध को तुरंत स्वीकार करके, वेबहुक एंडपॉइंट को हल्का रखें.

हस्ताक्षर की पुष्टि

वेबहुक की सूचनाओं की पुष्टि करने के लिए, हर आउटगोकिंग वेबहुक सूचना के रॉ JSON पेलोड पर, Tink's PublicKeySign का इस्तेमाल करके निजी पासकोड से हस्ताक्षर किया जाता है. इससे, अनुरोध में GOOGLE-HEALTH-API-SIGNATURE HTTP हेडर में Base64-एन्कोडेड हस्ताक्षर मिलता है. हस्ताक्षर करने वाली इन कुंजियों को हर 30 दिनों में अपने-आप रोटेट किया जाता है. साथ ही, इनसे जुड़े आधिकारिक सार्वजनिक कीसेट को JSON फ़ाइल के तौर पर, स्थायी यूआरएल https://www.gstatic.com/googlehealthapi/webhooks/webhooks_public_keyset.json पर डिस्ट्रिब्यूट किया जाता है.

हस्ताक्षर की पुष्टि करने का तरीका

Tink का इस्तेमाल करना (सुझाया जाता है): डेवलपर, Tink के PublicKeyVerify प्रिमिटिव का इस्तेमाल करके हस्ताक्षर की पुष्टि कर सकते हैं. स्थायी यूआरएल से सार्वजनिक कीसेट फ़ेच करें. इसके बाद, कीसेट के साथ PublicKeyVerify प्रिमिटिव को इंस्टैंशिएट करें. साथ ही, रॉ वेबहुक JSON पेलोड के मुकाबले, डिकोड किए गए GOOGLE-HEALTH-API-SIGNATURE हेडर की पुष्टि करें.

मैन्युअल तरीके से पुष्टि करना (Tink के बिना): अगर डेवलपर Tink का इस्तेमाल नहीं करना चाहते हैं, तो वे मैन्युअल तरीके से हस्ताक्षर की पुष्टि कर सकते हैं. इसके लिए, यह तरीका अपनाएं:

  1. GOOGLE-HEALTH-API-SIGNATURE हेडर को Base64-डिकोड करें, ताकि 5-बाइट Tink प्रीफ़िक्स (जिसमें 1-बाइट वर्शन प्रीफ़िक्स और 4-बाइट keyId शामिल है) को, DER-एन्कोडेड असली हस्ताक्षर से अलग किया जा सके.
  2. https://www.gstatic.com/googlehealthapi/webhooks/webhooks_public_keyset.json से JSON कीसेट फ़ेच करें.
  3. पार्स किए गए keyId से मेल खाने वाली कुंजी ढूंढें. इसके बाद, उसके वैल्यू फ़ील्ड को Base64-डिकोड करें. इसमें, क्रम से लगाया गया EcdsaPublicKey प्रोटोकॉल बफ़र शामिल होता है.
  4. इस बाइनरी पेलोड से, बड़े-एंडियन x और y कोऑर्डिनेट (Protobuf टैग 3 और 4) निकालें.
  5. निकाले गए x और y कोऑर्डिनेट का इस्तेमाल करके, बिल्ट-इन क्रिप्टोग्राफ़ी लाइब्रेरी में, स्टैंडर्ड ECDSA P-256 सार्वजनिक पासकोड को इंस्टैंशिएट करें.
  6. SHA-256 एल्गोरिदम का इस्तेमाल करके, निकाले गए DER हस्ताक्षर के मुकाबले, रॉ वेबहुक JSON पेलोड की पुष्टि करें.

सदस्यता की स्थिति और उसे वापस पाना

अगर आपका सदस्य एंडपॉइंट उपलब्ध नहीं है या गड़बड़ी का स्टेटस कोड (204 के अलावा कोई भी कोड) दिखाता है, तो Google Health API, सात दिनों तक सूचनाओं को सेव रखता है. इसके बाद, वह एक्सपोनेंशियल बैकऑफ़ के साथ, उन्हें डिलीवर करने की कोशिश करता है.

जब आपका एंडपॉइंट फिर से ऑनलाइन हो जाता है और 204 के साथ जवाब देता है, तो एपीआई, सेव किए गए मैसेज के बैकलॉग को अपने-आप डिलीवर कर देता है. सात दिनों से ज़्यादा पुरानी सूचनाएं हटा दी जाती हैं. इन्हें वापस नहीं पाया जा सकता.

आम तौर पर होने वाली गड़बड़ियां

गड़बड़ी का कोड मैसेज ब्यौरा सुझाव
400 खराब अनुरोध संसाधन के नाम में प्रोजेक्ट नंबर अमान्य है सदस्यता मिटाते या अपडेट करते समय, अनुरोध के यूआरएल में प्रोजेक्ट नंबर के बजाय, Google Cloud प्रोजेक्ट आईडी का इस्तेमाल करने पर. यह projects.subscribers एंडपॉइंट का इस्तेमाल करने वाली वेबहुक सदस्यताओं पर लागू होता है. अनुरोध के यूआरएल में, प्रोजेक्ट आईडी के बजाय, Google Cloud प्रोजेक्ट नंबर का इस्तेमाल करें.
403 निषिद्ध कॉल करने वाले के पास अनुमति नहीं है सदस्यता बनाते या उनकी सूची देखते समय, अनुरोध के यूआरएल में प्रोजेक्ट नंबर के बजाय, Google Cloud प्रोजेक्ट आईडी का इस्तेमाल करने पर. यह projects.subscribers एंडपॉइंट का इस्तेमाल करने वाली वेबहुक सदस्यताओं पर लागू होता है. अनुरोध के यूआरएल में, प्रोजेक्ट आईडी के बजाय, Google Cloud प्रोजेक्ट नंबर का इस्तेमाल करें.