পণ্যের ডেটাতে কোনো পরিবর্তনের জন্য পুশ নোটিফিকেশন পেতে আপনি মার্চেন্ট নোটিফিকেশনস এপিআই (Merchant Notifications API) ব্যবহার করতে পারেন। উদাহরণস্বরূপ, আপনি যদি পণ্যের স্ট্যাটাস পরিবর্তনের নোটিফিকেশনের জন্য সাবস্ক্রাইব করেন, তাহলে কোনো পণ্য বাতিল হলে আপনাকে রিয়েল টাইমে জানানো হবে। আপনি আপনার যেকোনো সাব-অ্যাকাউন্ট বা অন্যান্য লিঙ্ক করা অ্যাকাউন্টের জন্য নোটিফিকেশন সাবস্ক্রাইব করতে পারেন।
এই নির্দেশিকায় পণ্যের অবস্থার পরিবর্তনের জন্য নোটিফিকেশন কীভাবে পরিচালনা করতে হয় তার উদাহরণ দেওয়া হয়েছে। আপনার অনুরোধগুলিতে registeredEvent ফিল্ডের মান পরিবর্তন করে আপনি এই উদাহরণগুলি ব্যবহার করে অন্যান্য ইভেন্টের জন্য নোটিফিকেশন পরিচালনা করতে পারেন। ইভেন্টের প্রকারগুলির সম্পূর্ণ তালিকার জন্য, মার্চেন্ট নোটিফিকেশন এপিআই রেফারেন্স দেখুন।
সাবস্ক্রাইব করুন
নোটিফিকেশন পেতে আপনার একটি callBackUri প্রয়োজন। আপনার কলব্যাক ইউআরআই-কে অবশ্যই নিম্নলিখিত শর্তগুলো পূরণ করতে হবে:
- অবশ্যই একটি সর্বজনীনভাবে প্রবেশযোগ্য HTTPS ঠিকানা হতে হবে, যার একটি বৈধ SSL সার্টিফিকেট এবং সার্টিফিকেট কর্তৃপক্ষ দ্বারা স্বাক্ষরিত থাকতে হবে।
-
Content-Typeহেডার এবংapplication/jsonভ্যালু সহ HTTPPOSTরিকোয়েস্ট অবশ্যই গ্রহণ করতে হবে। - বিজ্ঞপ্তিটি গৃহীত হয়েছে তা স্বীকার করার জন্য নিম্নলিখিত প্রতিক্রিয়া কোডগুলির মধ্যে একটি অবশ্যই ফেরত দিতে হবে।
-
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 : যে অ্যাকাউন্টটির বিষয়ে আপনি বিজ্ঞপ্তি পেতে চান, তার অনন্য শনাক্তকারী।
যদি আপনার মার্চেন্ট সেন্টার অ্যাকাউন্টটি কোনো লিঙ্ক করা অ্যাকাউন্ট ছাড়া একটি স্বতন্ত্র অ্যাকাউন্ট হয় এবং আপনি নিজের অ্যাকাউন্টের জন্য নোটিফিকেশন পেতে চান, তাহলে এই দুটি ভেরিয়েবলের জায়গায় আপনার অ্যাকাউন্ট আইডি বসিয়ে দিন।
সফল কলগুলো আপনার সাবস্ক্রিপশনের একটি 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"
}
বিদ্যমান সাবস্ক্রিপশন আপডেট করতে, আপনি যে ফিল্ডগুলি আপডেট করতে চান এবং JSON বডিতে নতুন মানগুলি নির্দিষ্ট করার জন্য একটি update_mask সহ PATCH ব্যবহার করুন:
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 enum ভ্যালু থেকে শুধুমাত্র ( SHOPPING_ADS , LOCAL_INVENTORY_ADS , YOUTUBE_SHOPPING , YOUTUBE_CHECKOUT , YOUTUBE_AFFILIATE , FREE_LISTINGS_UCP_CHECKOUT ) সমর্থন করে।
পণ্যের স্ট্যাটাস পরিবর্তনের ইভেন্টের জন্য, 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"
}