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

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

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

सदस्यता लें

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

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

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

यहां किसी खास Merchant Center खाते के लिए, प्रॉडक्ट के स्टेटस में होने वाले बदलावों के नोटिफ़िकेशन की सदस्यता लेने का एक सैंपल अनुरोध दिया गया है.

POST https://merchantapi.googleapis.com/notifications/v1/accounts/{ACCOUNT_ID}/notificationsubscriptions/
{
  "registeredEvent": "PRODUCT_STATUS_CHANGE",
  "targetAccount": "accounts/{TARGETACCOUNT_ID}",
  "callBackUri": "https://example.com"
}

इनकी जगह ये डालें:

  • ACCOUNT_ID: उस खाते का यूनीक आइडेंटिफ़ायर जिसे नोटिफ़िकेशन मिलने चाहिए.
  • TARGETACCOUNT_ID: उस खाते का यूनीक आइडेंटिफ़ायर जिसके लिए आपको नोटिफ़िकेशन चाहिए.

अगर आपका Merchant Center खाता, लिंक किए गए खातों के बिना एक स्टैंडअलोन खाता है और आपको अपने खाते के लिए नोटिफ़िकेशन चाहिए, तो इन दोनों वैरिएबल की जगह अपने खाते का आईडी डालें.

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

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

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

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

POST https://merchantapi.googleapis.com/notifications/v1/accounts/{ACCOUNT_ID}/notificationsubscriptions/

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

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

PATCH https://merchantapi.googleapis.com/notifications/v1/accounts/{ACCOUNT_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/{TARGETACCOUNT_ID}",
  "managingAccount": "accounts/{ACCOUNT_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/{TARGETACCOUNT_ID}/products/ONLINE~en~US~1234",
  "expirationTime": "2024-10-22T02:43:47.461464Z",
  "eventTime": "2024-03-21T02:43:47.461464Z"
}

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

अगर प्रॉडक्ट मिटा दिया गया है, तो expirationTime फ़ील्ड मौजूद नहीं होगा.

reportingContext फ़ील्ड, ReportingContextEnum की इन वैल्यू को ही सपोर्ट करता है: (SHOPPING_ADS, LOCAL_INVENTORY_ADS, YOUTUBE_SHOPPING, YOUTUBE_CHECKOUT, YOUTUBE_AFFILIATE, FREE_LISTINGS_UCP_CHECKOUT).

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

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

ज़्यादा जानकारी के लिए, ProductStatusChangeMessage का फ़ॉर्मैट देखें.

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

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

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

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

{
  "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",
  "eventTime": "2024-03-21T02:43:47.461464Z"
}