تلقّي إشعارات فورية بشأن التغييرات في حالة المنتج

يمكنك الاشتراك في إشعارات PRODUCT_STATUS_CHANGE لتلقّي تنبيهات في الوقت الفعلي عندما تتغيّر حالات الموافقة على المنتجات في حساباتك على Merchant Center. على سبيل المثال، يمكنك رصد حالات رفض المنتجات لتتمكّن من حلّ المشاكل المحتملة في جودة البيانات.

قبل البدء، تأكَّد من ضبط معرّف الموارد المنتظم (URI) لمعاودة الاتصال وفقًا للمتطلبات الموضّحة في نظرة عامة على واجهة برمجة التطبيقات الفرعية للإشعارات.

الاشتراك في خدمة تلقّي إشعارات بشأن التغييرات في حالة المنتجات

للاشتراك في التغييرات في حالة المنتج، أرسِل طلب 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"
}