รับข้อความ Push สำหรับการเปลี่ยนแปลงสถานะผลิตภัณฑ์

คุณสามารถสมัครรับการแจ้งเตือนของ PRODUCT_STATUS_CHANGE เพื่อรับการแจ้งเตือนแบบเรียลไทม์เมื่อสถานะการอนุมัติผลิตภัณฑ์เปลี่ยนแปลงในบัญชี Merchant Center เช่น คุณสามารถตรวจจับได้เมื่อผลิตภัณฑ์ไม่ได้รับอนุมัติ เพื่อให้คุณแก้ไขปัญหาด้านคุณภาพของข้อมูลที่อาจเกิดขึ้นได้

ก่อนเริ่มต้น โปรดตรวจสอบว่าได้กำหนดค่า URI Callback ตามข้อกำหนดที่อธิบายไว้ในภาพรวมของ 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 เป็นบัญชีแบบสแตนด์อโลนที่ไม่มีบัญชีที่ลิงก์ ให้ใช้รหัสบัญชีของคุณเองสำหรับตัวแปรทั้ง 2 รายการ

สมัครใช้บริการสำหรับบัญชีที่จัดการทั้งหมด

หากคุณจัดการหลายบัญชี (เช่น บัญชีขั้นสูงที่มีบัญชีย่อย) คุณสามารถสมัครรับข้อมูลการเปลี่ยนแปลงสถานะผลิตภัณฑ์ในบัญชีที่จัดการทั้งหมดได้โดยตั้งค่า 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 Callback จะได้รับข้อความที่เข้ารหัส 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: การประทับเวลาเมื่อสร้างเหตุการณ์ ใช้การประทับเวลานี้เพื่อตรวจสอบว่าเหตุการณ์ต่างๆ มีการจัดลำดับอย่างถูกต้อง

ทดสอบการแจ้งเตือนการเปลี่ยนแปลงสถานะผลิตภัณฑ์

ใช้คำขอตัวอย่างต่อไปนี้เพื่อทดสอบว่าปลายทาง Callback ได้รับ รับทราบ และถอดรหัสข้อความการเปลี่ยนแปลงสถานะผลิตภัณฑ์อย่างถูกต้องหรือไม่

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 Callback ควรแสดงรหัสสถานะ 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"
}