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 saat 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 Anda 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 perubahan status produk terjadi, URI callback Anda akan menerima pesan yang dienkode base64. Saat didekode, payload 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 tidak ada, produk baru dibuat.
    • Jika newValue tidak ada, produk telah dihapus.
  • expirationTime: Menunjukkan kapan penawaran produk berakhir. Kolom ini dihilangkan saat produk dihapus.
  • reportingContext: Platform 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"
}