प्रॉडक्ट डेटा में हुए बदलावों के बारे में पुश नोटिफ़िकेशन पाने के लिए, Merchant Notifications API का इस्तेमाल किया जा सकता है. उदाहरण के लिए, अगर आपने प्रॉडक्ट के स्टेटस में हुए बदलाव की सूचनाओं की सदस्यता ली है, तो किसी प्रॉडक्ट के अस्वीकार होने पर आपको रीयल टाइम में सूचना दी जा सकती है. आपके पास अपने किसी भी सब-खाते या लिंक किए गए अन्य खातों के लिए सूचनाएं पाने की सदस्यता लेने का विकल्प होता है.
इस गाइड में, प्रॉडक्ट की स्थिति में होने वाले बदलावों के लिए सूचनाएं मैनेज करने के उदाहरण दिए गए हैं. इन उदाहरणों का इस्तेमाल करके, अन्य इवेंट की सूचनाएं मैनेज की जा सकती हैं. इसके लिए, अपने अनुरोधों में registeredEvent
फ़ील्ड की वैल्यू बदलें. इवेंट टाइप की पूरी सूची के लिए, व्यापारी/कंपनी/कारोबारी को सूचना देने वाले एपीआई का रेफ़रंस देखें.
सदस्यता लें
सूचनाएं पाने के लिए, आपके पास callBackUri
होना चाहिए. आपका कॉलबैक यूआरआई इन ज़रूरी शर्तों के मुताबिक होना चाहिए:
- यह ऐसा एचटीटीपीएस पता होना चाहिए जिसे कोई भी ऐक्सेस कर सके. साथ ही, इसमें मान्य एसएसएल सर्टिफ़िकेट होना चाहिए, जिस पर सर्टिफ़िकेट देने वाली संस्था का हस्ताक्षर हो.
Content-Type
हेडर औरapplication/json
वैल्यू वाले एचटीटीपीPOST
अनुरोध स्वीकार करने चाहिए.- सूचना मिलने की पुष्टि करने के लिए, इनमें से कोई एक रिस्पॉन्स कोड दिखाना ज़रूरी है.
102
200
201
202
204
एक से ज़्यादा सदस्यताओं के लिए, एक ही कॉलबैक यूआरआई का इस्तेमाल किया जा सकता है. हमारा सुझाव है कि हर ऐडवांस खाते और हर इवेंट टाइप के लिए, एक यूनीक कॉलबैक यूआरआई का इस्तेमाल करें. इससे, किसी एक यूआरआई पर पुश अनुरोधों का लोड कम हो जाता है.
यहां किसी खास व्यापारी/कंपनी/कारोबारी के खाते के लिए, प्रॉडक्ट की स्थिति में हुए बदलावों के बारे में सूचनाएं पाने के लिए, अनुरोध का एक सैंपल दिया गया है.
POST https://merchantapi.googleapis.com/notifications/v1/accounts/MERCHANT_ID/notificationsubscriptions/
{
"registeredEvent": "PRODUCT_STATUS_CHANGE",
"targetAccount": "accounts/TARGETMERCHANT_ID",
"callBackUri": "https://example.com"
}
इनकी जगह ये डालें:
- MERCHANT_ID: उस खाते का यूनीक आइडेंटिफ़ायर जिसे सूचनाएं मिलनी चाहिए.
- TARGETMERCHANT_ID: उस खाते का यूनीक आइडेंटिफ़ायर, जिसके लिए आपको सूचनाएं चाहिए.
अगर आपका Merchant Center खाता स्टैंडअलोन खाता है और उससे कोई खाता लिंक नहीं है और आपको अपने खाते के लिए सूचनाएं चाहिए, तो इन दोनों वैरिएबल को अपने खाते के आईडी से बदलें.
सही कॉल से आपकी सदस्यता के लिए 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/v1/accounts/MERCHANT_ID/notificationsubscriptions/
{
"registeredEvent": "PRODUCT_STATUS_CHANGE",
"allManagedAccounts": true,
"callBackUri": "https://example.com"
}
किसी मौजूदा सदस्यता को अपडेट करने के लिए, PATCH
के साथ update_mask
का इस्तेमाल करें. इससे, आपको उन फ़ील्ड की जानकारी देनी होगी जिन्हें अपडेट करना है. साथ ही, JSON बॉडी में नई वैल्यू भी देनी होंगी:
PATCH https://merchantapi.googleapis.com/notifications/v1/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",
"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"
}