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

يمكنك الاشتراك في تلقّي إشعارات 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"
}