دریافت اعلان لحظه‌ای برای تغییرات وضعیت محصول

می‌توانید در اعلان‌های PRODUCT_STATUS_CHANGE مشترک شوید تا هرگاه وضعیت تأیید محصول در حساب‌های Merchant Center شما تغییر کرد، هشدارهای هم‌زمان دریافت کنید. برای مثال، می‌توانید تشخیص دهید که چه زمانی محصولی رد می‌شود تا بتوانید مشکلات احتمالی کیفیت داده را برطرف کنید.

قبل‌از شروع، مطمئن شوید که URI فراخوان شما مطابق با الزامات شرح‌داده‌شده در نمای کلی زیر-API اعلان‌ها پیکربندی شده است.

مشترک شدن در تغییرات وضعیت محصول

برای مشترک شدن در تغییرات وضعیت محصول، درخواست POST را به منبع notificationsubscriptions ارسال کنید و registeredEvent را روی PRODUCT_STATUS_CHANGE تنظیم کنید.

مشترک شدن برای حساب هدف خاص

نمونه درخواست زیر برای تغییرات وضعیت محصول برای یک حساب فروشنده خاص مشترک می‌شود:

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

موارد زیر را جایگزین کنید:

  • ‫ACCOUNT_ID: شناسه حسابی که مالک اشتراک است و اعلان‌ها را دریافت می‌کند.
  • ‫TARGETACCOUNT_ID: شناسه حسابی که می‌خواهید درباره آن اعلان دریافت کنید.

اگر حساب Merchant Center شما حساب مستقلی است که هیچ حساب پیوندشده‌ای ندارد، از شناسه حساب خودتان برای هر دو متغیر استفاده کنید.

مشترک شدن برای همه حساب‌های مدیریت‌شده

اگر چندین حساب را مدیریت می‌کنید (مانند حساب پیشرفته با حساب‌های فرعی)، می‌توانید با تنظیم allManagedAccounts: true، در تغییرات وضعیت محصول در همه حساب‌های مدیریت‌شده مشترک شوید:

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

فراخوانی‌های موفق یک شناسه name برای اشتراک شما برمی‌گرداند، ازجمله شناسه اشتراک یکتا:

{
  "name":"accounts/{ACCOUNT_ID}/notificationsubscriptions/{SUBSCRIPTION_ID}",
  "registeredEvent": "PRODUCT_STATUS_CHANGE",
  "allManagedAccounts": true,
  "callBackUri": "https://example.com/callback"
}

رمزگشایی بار داده‌های تغییر وضعیت محصول

وقتی وضعیت محصول تغییر می‌کند، URI فراخوان شما پیامی با کدگذاری base64 دریافت می‌کند. وقتی رمزگشایی می‌شود، بار مفید با قالب ProductStatusChangeMessage مطابقت دارد:

{
  "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: نشان‌دهنده وضعیت قبلی و به‌روزشده است. مقادیر احتمالی عبارت‌اند از approved، pending، disapproved، یا رشته خالی ('').
    • اگر oldValue حذف شود، محصول جدیداً ایجاد می‌شود.
    • اگر newValue حذف شده باشد، محصول حذف شده است.
  • expirationTime: نشان می‌دهد پیشنهاد ویژه محصول چه زمانی منقضی می‌شود. وقتی محصولی حذف می‌شود، این فیلد حذف می‌شود.
  • reportingContext: سطح فهرستگان رایگان یا تبلیغاتی که وضعیت در آن تغییر کرده است. مقادیر پشتیبانی‌شده شامل SHOPPING_ADS، LOCAL_INVENTORY_ADS، YOUTUBE_SHOPPING، YOUTUBE_CHECKOUT، YOUTUBE_AFFILIATE، و FREE_LISTINGS_UCP_CHECKOUT از ReportingContextEnum است.
  • ‫eventTime: مُهر زمان تولید رویداد. از این مُهر زمان استفاده کنید تا مطمئن شوید رویدادها به‌درستی مرتب شده‌اند.

آزمایش اعلان‌های تغییر وضعیت محصول

از درخواست نمونه زیر برای آزمایش اینکه آیا نقطه پایانی فراخوانی شما پیام‌های تغییر وضعیت محصول را به‌درستی دریافت، تأیید، و رمزگشایی می‌کند استفاده کنید:

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

در پاسخ به این فراخوانی، URI فراخوان شما باید رمز وضعیت HTTP قابل‌قبولی (مانند 200 OK) برگرداند. پیام رمزگشایی‌شده حاوی محتوای زیر است:

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