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

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

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

सदस्यता लें

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

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

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

किसी खास व्यापारी/कंपनी/कारोबारी खाते के लिए, प्रॉडक्ट की स्थिति में हुए बदलावों की सूचनाएं पाने के लिए, अनुरोध का एक सैंपल यहां दिया गया है. अनुरोध के यूआरएल में, उस खाते के व्यापारी/कंपनी/कारोबारी आईडी का इस्तेमाल करें जिसे सूचनाएं मिलनी चाहिए. साथ ही, अनुरोध के मुख्य हिस्से में, उस खाते के व्यापारी/कंपनी/कारोबारी आईडी का इस्तेमाल करें जिसे सूचनाएं मिलनी चाहिए.merchantIdtargetMerchantId अगर आपका खाता स्टैंडअलोन खाता है और उससे कोई खाता लिंक नहीं है, तो आपको अपने खाते के लिए सूचनाएं चाहिए, तो दोनों जगहों पर अपने Merchant Center खाते का आईडी डालें.

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

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

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

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

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

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

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

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

PATCH https://merchantapi.googleapis.com/notifications/v1beta/accounts/MERCHANT_ID/notificationsubscriptions/SUBSCRIPTION_ID?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/TARGETMERCHANT_ID",
  "managingAccount": "accounts/MERCHANT_ID",
  "resourceType": "PRODUCT",
  "attribute": "STATUS",
  "changes": [{
    "oldValue": "approved",
    "newValue": "disapproved",
    "regionCode": "US",
    "reportingContext": "SHOPPING_ADS"
  }, {
    "oldValue": "approved",
    "newValue": "disapproved",
    "regionCode": "JP",
    "reportingContext": "SHOPPING_ADS"
  },{
    "oldValue": "approved",
    "newValue": "disapproved",
    "regionCode": "GE",
    "reportingContext": "SHOPPING_ADS"
  }],
  "resourceId": "ONLINE~en~US~1234",
  "resource": "accounts/TARGETMERCHANT_ID/products/ONLINE~en~US~1234",
  "expirationTime": "2024-10-22T02:43:47.461464Z"
}

अगर सूचना में कोई oldValue फ़ील्ड नहीं है, तो इसका मतलब है कि आपके खाते में एक नया प्रॉडक्ट जोड़ा गया है. अगर newValue फ़ील्ड नहीं है, तो इसका मतलब है कि प्रॉडक्ट को आपके खाते से मिटा दिया गया है.

reportingContext फ़ील्ड में, ReportingContextEnum की इनम वैल्यू में से सिर्फ़ (SHOPPING_ADS, LOCAL_INVENTORY_ADS, YOUTUBE_SHOPPING, YOUTUBE_CHECKOUT, YOUTUBE_AFFILIATE) का इस्तेमाल किया जा सकता है.

प्रॉडक्ट के स्टेटस में बदलाव होने के इवेंट के लिए, oldValue और newValue फ़ील्ड में इनमें से कोई एक वैल्यू होगी : (approved, pending, disapproved, ``).

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

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

curl --header "Content-Type: application/json" --header "Accept: text/plain" --request POST --data '{"message":{"data":
"ewogICJhY2NvdW50IjogImFjY291bnRzLzEyMzQiLAogICJtYW5hZ2luZ0FjY291bnQiOiAiYWNjb3VudHMvNTY3OCIsCiAgInJlc291cmNlVHlwZSI6ICJQUk9EVUNUIiwKICAiYXR0cmlidXRlIjogIlNUQVRVUyIsCiAgImNoYW5nZXMiOiBbewogICAgIm9sZFZhbHVlIjogImFwcHJvdmVkIiwKICAgICJyZWdpb25Db2RlIjogIlVTIiwKICAgICJyZXBvcnRpbmdDb250ZXh0IjogIlNIT1BQSU5HX0FEUyIKICB9XSwKICAicmVzb3VyY2VJZCI6ICJPTkxJTkV+ZW5+VVN+MDAwMDAwMDAwMDAwIiwKICAicmVzb3VyY2UiOiAiYWNjb3VudHMvMTIzNC9wcm9kdWN0cy9PTkxJTkV+ZW5+VVN+MDAwMDAwMDAwMDAwIiwKICAiZXhwaXJhdGlvblRpbWUiOiAiMjAyNC0xMC0yMlQwMjo0Mzo0Ny40NjE0NjRaIgp9"}}' https://{callBackUri}

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

{
  "account": "accounts/1234",
  "managingAccount": "accounts/5678",
  "resourceType": "PRODUCT",
  "attribute": "STATUS",
  "changes": [{
    "oldValue": "approved",
    "regionCode": "US",
    "reportingContext": "SHOPPING_ADS"
  }],
  "resourceId": "ONLINE~en~US~000000000000",
  "resource": "accounts/1234/products/ONLINE~en~US~000000000000",
  "expirationTime": "2024-10-22T02:43:47.461464Z"
}