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

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

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

सदस्यता लें

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

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

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

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

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 किया जा सकता है.

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

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

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

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

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) को सपोर्ट करता है.

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

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

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

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

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

curl --header "Content-Type: application/json" --header "Accept: text/plain" --request POST --data '{"message":{"data":
"ewogICJhY2NvdW50IjogImFjY291bnRzLzEyMzQiLAogICJtYW5hZ2luZ0FjY291bnQiOiAiYWNjb3VudHMvNTY3OCIsCiAgInJlc291cmNlVHlwZSI6ICJQUk9EVUNUIiwKICAiYXR0cmlidXRlIjogIlNUQVRVUyIsCiAgImNoYW5nZXMiOiBbewogICAgIm9sZFZhbHVlIjogImFwcHJvdmVkIiwKICAgICJyZWdpb25Db2RlIjogIlVTIiwKICAgICJyZXBvcnRpbmdDb250ZXh0IjogIlNIT1BQSU5HX0FEUyIKICB9XSwKICAicmVzb3VyY2VJZCI6ICJPTkxJTkV+ZW5+VVN+MDAwMDAwMDAwMDAwIiwKICAicmVzb3VyY2UiOiAiYWNjb3VudHMvMTIzNC9wcm9kdWN0cy9PTkxJTkV+ZW5+VVN+MDAwMDAwMDAwMDAwIiwKICAiZXhwaXJhdGlvblRpbWUiOiAiMjAyNC0xMC0yMlQwMjo0Mzo0Ny40NjE0NjRaIiwKICAiZXZlbnRUaW1lIjogIjIwMjQtMDMtMjFUMDI6NDM6NDcuNDYxNDY0WiIKfQ=="}}' 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",
  "eventTime": "2024-03-21T02:43:47.461464Z"
}