Mendapatkan notifikasi push untuk perubahan status produk

Anda dapat berlangganan notifikasi PRODUCT_STATUS_CHANGE untuk menerima pemberitahuan real-time setiap kali status persetujuan produk berubah di akun Merchant Center Anda. Misalnya, Anda dapat mendeteksi kapan produk ditolak sehingga Anda dapat memperbaiki potensi masalah kualitas data.

Sebelum memulai, pastikan URI callback Anda dikonfigurasi sesuai dengan persyaratan yang dijelaskan dalam Ringkasan sub-API Notifikasi.

Berlangganan perubahan status produk

Untuk berlangganan perubahan status produk, kirim permintaan POST ke resource notificationsubscriptions dengan registeredEvent ditetapkan ke PRODUCT_STATUS_CHANGE.

Berlangganan untuk akun target tertentu

Contoh permintaan berikut berlangganan perubahan status produk untuk akun penjual tertentu:

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

Ganti kode berikut:

  • ACCOUNT_ID: ID akun yang memiliki langganan dan menerima notifikasi.
  • TARGETACCOUNT_ID: ID akun yang ingin Anda terima notifikasinya.

Jika akun Merchant Center Anda adalah akun mandiri tanpa akun tertaut, gunakan ID akun Anda sendiri untuk kedua variabel.

Berlangganan untuk semua akun terkelola

Jika mengelola beberapa akun (seperti akun tingkat lanjut dengan sub-akun), Anda dapat berlangganan perubahan status produk di semua akun yang dikelola dengan menetapkan allManagedAccounts: true:

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

Panggilan yang berhasil akan menampilkan ID name untuk langganan Anda, termasuk ID langganan unik:

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

Mendekode payload perubahan status produk

Saat terjadi perubahan status produk, URI callback Anda akan menerima pesan berenkode base64. Saat didekode, payload akan sesuai dengan format 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"
}

Kolom dan aturan payload

  • oldValue dan newValue: Mewakili status sebelumnya dan yang diperbarui. Nilai yang mungkin adalah approved, pending, disapproved, atau string kosong ('').
    • Jika oldValue dihilangkan, produk akan baru dibuat.
    • Jika newValue dihilangkan, produk akan dihapus.
  • expirationTime: Menunjukkan kapan penawaran produk berakhir. Kolom ini dihilangkan saat produk dihapus.
  • reportingContext: Permukaan iklan atau listingan gratis tempat status berubah. Nilai yang didukung mencakup SHOPPING_ADS, LOCAL_INVENTORY_ADS, YOUTUBE_SHOPPING, YOUTUBE_CHECKOUT, YOUTUBE_AFFILIATE, dan FREE_LISTINGS_UCP_CHECKOUT dari ReportingContextEnum.
  • eventTime: Stempel waktu saat peristiwa dibuat. Gunakan stempel waktu ini untuk memastikan urutan peristiwa yang tepat.

Menguji notifikasi perubahan status produk

Gunakan contoh permintaan berikut untuk menguji apakah endpoint callback Anda menerima, mengonfirmasi, dan mendekode pesan perubahan status produk dengan benar:

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=="}}'

Sebagai respons terhadap panggilan ini, URI callback Anda harus menampilkan kode status HTTP yang dapat diterima (seperti 200 OK). Pesan yang didekode memiliki konten berikut:

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