제품 상태 변경에 대한 푸시 알림 받기

PRODUCT_STATUS_CHANGE 알림을 구독하여 판매자 센터 계정에서 제품 승인 상태가 변경될 때마다 실시간 알림을 받을 수 있습니다. 예를 들어 제품이 비승인된 시점을 감지하여 잠재적인 데이터 품질 문제를 해결할 수 있습니다.

시작하기 전에 콜백 URI가 알림 하위 API 개요에 설명된 요구사항에 따라 구성되어 있는지 확인하세요.

제품 상태 변경사항 구독

제품 상태 변경사항을 구독하려면 registeredEventPRODUCT_STATUS_CHANGE로 설정된 notificationsubscriptions 리소스에 POST 요청을 보냅니다.

특정 타겟 계정 구독

다음 샘플 요청은 특정 판매자 계정의 제품 상태 변경을 구독합니다.

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: 알림을 수신하려는 계정의 식별자입니다.

판매자 센터 계정이 연결된 계정이 없는 단독 계정인 경우 두 변수 모두에 자체 계정 ID를 사용하세요.

모든 관리 계정 구독

여러 계정 (예: 하위 계정이 있는 고급 계정)을 관리하는 경우 allManagedAccounts: true를 설정하여 관리되는 모든 계정의 제품 상태 변경을 구독할 수 있습니다.

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

호출이 성공하면 고유한 구독 ID를 포함하여 구독의 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"
}

페이로드 필드 및 규칙

  • oldValuenewValue: 이전 상태와 업데이트된 상태를 나타냅니다. 가능한 값은 approved, pending, disapproved 또는 빈 문자열 ('')입니다.
    • oldValue가 생략되면 제품이 새로 생성됩니다.
    • newValue가 생략되면 제품이 삭제된 것입니다.
  • expirationTime: 제품 혜택이 만료되는 시점을 나타냅니다. 제품이 삭제되면 이 필드는 생략됩니다.
  • reportingContext: 상태가 변경된 광고 또는 무료 등록정보 표시 경로입니다. 지원되는 값은 ReportingContextEnumSHOPPING_ADS, LOCAL_INVENTORY_ADS, YOUTUBE_SHOPPING, YOUTUBE_CHECKOUT, YOUTUBE_AFFILIATE, FREE_LISTINGS_UCP_CHECKOUT입니다.
  • 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"
}