अपने खाते के डेटा में बदलाव होने पर पुश नोटिफ़िकेशन पाएं

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

इस गाइड में, प्रॉडक्ट की स्थिति में होने वाले बदलावों की सूचनाएं मैनेज करने के तरीके से जुड़े उदाहरण दिए गए हैं. आप अपने अनुरोधों में registeredEvent फ़ील्ड की वैल्यू बदलकर दूसरे इवेंट की सूचनाएं मैनेज करने के लिए इन उदाहरणों का इस्तेमाल कर सकते हैं. इवेंट टाइप की पूरी सूची देखने के लिए, Merchant Notifications API का रेफ़रंस देखें.

सदस्यता लें

सूचनाएं पाने के लिए, आपको callBackUri की ज़रूरत होगी. आपके कॉलबैक यूआरआई को इन ज़रूरी शर्तों को पूरा करना होगा:

  • मान्य एसएसएल सर्टिफ़िकेट वाला ऐसा एचटीटीपीएस पता होना चाहिए जिसे सार्वजनिक तौर पर ऐक्सेस किया जा सके. साथ ही, इसे सर्टिफ़िकेट देने वाली संस्था या निकाय ने हस्ताक्षर किया हो.
  • Content-Typeहेडर औरapplication/json वैल्यू के साथ, एचटीटीपी POST अनुरोध स्वीकार किए जाने चाहिए.
  • यह स्वीकार करने के लिए कि सूचना मिल गई थी, नीचे दिए गए जवाब कोड में से कोई एक दिखाना होगा.
    • 102
    • 200
    • 201
    • 202
    • 204

एक से ज़्यादा सदस्यताओं के लिए, एक ही कॉलबैक यूआरआई का इस्तेमाल किया जा सकता है. हमारा सुझाव है कि किसी एक यूआरआई में पुश अनुरोधों का लोड कम करने के लिए, हर इवेंट टाइप के लिए हर बेहतर खाते के लिए, एक यूनीक कॉलबैक यूआरआई का इस्तेमाल किया जाए.

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

POST https://merchantapi.googleapis.com/notifications/v1beta/accounts/merchantId/notificationsubscriptions/
{
  "registeredEvent": "PRODUCT_STATUS_CHANGE",
  "targetAccount": "accounts/targetMerchantId",
  "callBackUri": "https://example.com"
}

कॉल पूरे होने पर, आपकी सदस्यता के लिए name दिखाया जाता है. इसमें सदस्यता आईडी भी शामिल होता है:

{
  "name":"accounts/merchantId/notificationsubscriptions/subscriptionId",
  "registeredEvent": "PRODUCT_STATUS_CHANGE",
  "targetAccount": "accounts/targetMerchantId",
  "callBackUri": "https://example.com"
}

इस name का इस्तेमाल GET और DELETE की अलग-अलग सदस्यताओं के लिए किया जा सकता है.

प्रॉडक्ट की स्थिति में बदलाव होने पर मिलने वाली सूचनाओं की सदस्यता लेने के लिए, आपको अपने सभी लिंक किए गए खातों में targetAccount के बजाय, "allManagedAccounts": true को शामिल करना होगा:

POST https://merchantapi.googleapis.com/notifications/v1beta/accounts/merchantId/notificationsubscriptions/

{
  "registeredEvent": "PRODUCT_STATUS_CHANGE",
  "allManagedAccounts": true,
  "callBackUri": "https://example.com"
}

आपको जो फ़ील्ड अपडेट करने हैं उनकी जानकारी देने और JSON के मुख्य हिस्से में नई वैल्यू तय करने के लिए, किसी मौजूदा सदस्यता को अपडेट करने के लिए, update_mask के साथ PATCH का इस्तेमाल करें:

PATCH /notifications/v1beta/accounts/merchantId/notificationsubscriptions/subscriptionId?update_mask=callBackUri

{
  "​callBackUri": "https://my-own-personal-domain.com"
}

सूचनाएं डिकोड करना

सदस्यता बनाने के बाद, आपको बताए गए callBackUri पर इस फ़ॉर्मैट में सूचनाएं मिलती हैं:

{"message":{"data":"{base64_encoded_string}"}}

सूचना का डेटा, कोड में बदला गया होता है. लागू करने में इस्तेमाल करने के लिए, डेटा को पढ़ने लायक टेक्स्ट फ़ॉर्मैट में डिकोड किया जा सकता है. यहां एक सैंपल स्प्रिंग बूट कंट्रोलर दिया गया है, जिसका इस्तेमाल करके कोड में बदले गए डेटा को प्रोसेस किया जा सकता है:

@RestController
public class ExampleController {
@RequestMapping(value = "/push",
  method = RequestMethod.POST,
  consumes = {"application/json"},
  produces = {"text/plain"})
  @ResponseStatus(HttpStatus.OK)
  public void doStuff(@RequestBody String message) {
        //wrapped message
        JSONObject jsonObject = new JSONObject(message);
        JSONObject jsonMessage = jsonObject.getJSONObject("message");
        message = jsonMessage.getString("data");
        byte[] decodedBytes = Base64.getDecoder().decode(message);
        String decodedMessage = new String(decodedBytes);
        // Implement your business logic here
  }
}

यहां base64_encoded_string का एक उदाहरण दिया गया है, जिसे डिकोड किया गया है:

"account": "accounts/targetMerchantId"
"managing_account": "accounts/merchantId"
"resource_type": PRODUCT
"attribute": STATUS
"changes": {
  "old_value": "eligible"
  "new_value": "disapproved"
  "region_code": "GE"
  "reporting_context": SHOPPING_ADS
},
"changes" {
  "old_value": "eligible"
  "new_value": "disapproved"
  "region_code": "JP"
  "reporting_context": SHOPPING_ADS
},
changes {
  "old_value": "eligible"
  "new_value": "disapproved"
  "region_code": "US"
  "reporting_context": SHOPPING_ADS
}
resource_id: "ONLINE~en~US~1234"
resource: "accounts/targetMerchantId/products/ONLINE~en~US~1234"

आपने जो लागू किया है उसकी जांच करना

यहां एक सैंपल सूचना दी गई है, जिसका इस्तेमाल अपने कॉलबैक यूआरआई और डिकोडिंग की जांच करने के लिए किया जा सकता है:

curl --header "Content-Type: application/json" --header "Accept: text/plain" --request POST --data '{"message":{"data":
"ImFjY291bnQiOiAiYWNjb3VudHMvMTIzNCIKIm1hbmFnaW5nX2FjY291bnQiOiAiYWNjb3VudHMvNTY3OCIKInJlc291cmNlX3R5cGUiOiBQUk9EVUNUCiJhdHRyaWJ1dGUiOiBTVEFUVVMKImNoYW5nZXMiOiB7CiAgIm9sZF92YWx1ZSI6ICJlbGlnaWJsZSIKICAicmVnaW9uX2NvZGUiOiAiVVMiCiAgInJlcG9ydGluZ19jb250ZXh0IjogU0hPUFBJTkdfQURTCn0KInJlc291cmNlX2lkIjogIk9OTElORX5lbn5VU34wMDAwMDAwMDAwMDAiCiJyZXNvdXJjZSI6ICJhY2NvdW50cy8xMjM0L3Byb2R1Y3RzL09OTElORX5lbn5VU34wMDAwMDAwMDAwMDAi"}}' https://{callBackUri}

इस कॉल के जवाब में, आपके कॉलबैक यूआरआई को एक सफल रिस्पॉन्स कोड मिलना चाहिए. डिकोड किए गए मैसेज में यह वैल्यू होनी चाहिए:

"account": "accounts/1234"
"managing_account": "accounts/5678"
"resource_type": PRODUCT
"attribute": STATUS
"changes": {
  "old_value": "eligible"
  "region_code": "US"
  "reporting_context": SHOPPING_ADS
}
"resource_id": "ONLINE~en~US~000000000000"
"resource": "accounts/1234/products/ONLINE~en~US~000000000000"