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

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

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

सदस्यता लें

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

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

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

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

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"
}

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

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",
  "managingAccount": "accounts/merchantId",
  "resourceType": "PRODUCT",
  "attribute": "STATUS",
  "changes": [{
    "oldValue": "eligible",
    "newValue": "disapproved",
    "regionCode": "US",
    "reportingContext": "SHOPPING_ADS"
  }, {
    "oldValue": "eligible",
    "newValue": "disapproved",
    "regionCode": "JP",
    "reportingContext": "SHOPPING_ADS"
  },{
    "oldValue": "eligible",
    "newValue": "disapproved",
    "regionCode": "GE",
    "reportingContext": "SHOPPING_ADS"
  }],
  "resourceId": "ONLINE~en~US~1234",
  "resource": "accounts/targetMerchantId/products/ONLINE~en~US~1234",
  "expirationTime": "2024-10-22T02:43:47.461464Z"
}

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

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

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

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

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

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

{
  "account": "accounts/1234",
  "managingAccount": "accounts/5678",
  "resourceType": "PRODUCT",
  "attribute": "STATUS",
  "changes": [{
    "oldValue": "eligible",
    "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"
}