Ürün verilerinizde yapılan değişikliklerle ilgili push bildirimleri alma

Ürün verilerindeki değişikliklerle ilgili push bildirimleri almak için Merchant Notifications API'yi kullanabilirsiniz. Örneğin, ürün durumu değişikliği bildirimlerine abone olursanız bir ürün onaylanmadığında anında bildirim alabilirsiniz. Alt hesaplarınızın veya diğer bağlı hesaplarınızın bildirimlerine abone olabilirsiniz.

Bu kılavuzda, ürün durumu değişiklikleriyle ilgili bildirimlerin nasıl yönetileceğine dair örnekler verilmiştir. İsteklerinizde registeredEvent alanının değerini değiştirerek diğer etkinliklerle ilgili bildirimleri yönetmek için bu örnekleri kullanabilirsiniz. Etkinlik türlerinin tam listesi için Satıcı Bildirimleri API referansına bakın.

Abone ol

Bildirim almak için callBackUri'e ihtiyacınız vardır. Geri çağırma URI'niz aşağıdaki koşulları karşılamalıdır:

  • Sertifika yetkilisi tarafından imzalanmış geçerli bir SSL sertifikasına sahip, herkese açık bir HTTPS adresi olmalıdır.
  • Content-Type başlığı ve application/json değeriyle HTTP POST isteklerini kabul etmelidir.
  • Bildirimin alındığını onaylamak için aşağıdaki yanıt kodlarından birini döndürmelidir.
    • 102
    • 200
    • 201
    • 202
    • 204

Birden fazla abonelik için aynı geri çağırma URI'sini kullanabilirsiniz. Tek bir URI'ye yapılan push isteği yükünü en aza indirmek için gelişmiş hesap başına, etkinlik türü başına benzersiz bir geri çağırma URI'si kullanmanızı öneririz.

Belirli bir satıcı hesabındaki ürün durumu değişiklikleriyle ilgili bildirimlere abone olmak için örnek bir istek aşağıda verilmiştir.

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

Aşağıdakini değiştirin:

  • MERCHANT_ID: Bildirimleri alması gereken hesabın benzersiz tanımlayıcısıdır.
  • TARGETMERCHANT_ID: Bildirim almak istediğiniz hesabın benzersiz tanımlayıcısı.

Merchant Center hesabınız bağlı hesabı olmayan bağımsız bir hesapsa ve kendi hesabınız için bildirim almak istiyorsanız bu iki değişkeni de hesap kimliğinizle değiştirin.

Başarılı aramalar, aboneliğiniz için abonelik kimliği içeren bir name döndürür:

{
  "name":"accounts/MERCHANT_ID/notificationsubscriptions/subscriptionId",
  "registeredEvent": "PRODUCT_STATUS_CHANGE",
  "targetAccount": "accounts/TARGETMERCHANT_ID",
  "callBackUri": "https://example.com"
}

Bu özelliği name ile GET arasındaki ve DELETE bağımsız aboneliklerde kullanabilirsiniz.

İsteğinize targetAccount yerine "allManagedAccounts": true ekleyerek bağlı hesaplarınızın tümünde ürün durumu değişiklikleriyle ilgili bildirimlere abone olabilirsiniz:

POST https://merchantapi.googleapis.com/notifications/v1/accounts/MERCHANT_ID/notificationsubscriptions/

{
  "registeredEvent": "PRODUCT_STATUS_CHANGE",
  "allManagedAccounts": true,
  "callBackUri": "https://example.com"
}

Mevcut bir aboneliği güncellemek için güncellemek istediğiniz alanları ve JSON gövdesinde yeni değerleri belirtmek üzere PATCH ile update_mask kullanın:

PATCH https://merchantapi.googleapis.com/notifications/v1/accounts/MERCHANT_ID/notificationsubscriptions/SUBSCRIPTION_ID?update_mask=callBackUri

{
  "​callBackUri": "https://my-own-personal-domain.com"
}

Bildirimlerin kodunu çözme

Abonelik oluşturduktan sonra, belirtilen callBackUri adresine aşağıdaki biçimde bildirim alırsınız:

{"message":{"data":"{base64_encoded_string}"}}

Bildirim verileri kodlanır. Uygulamanızda kullanmak için verilerin kodunu okunabilir bir metin biçimine dönüştürebilirsiniz. Kodlanmış verileri işlemek için kullanabileceğiniz örnek bir Spring Boot denetleyicisi aşağıda verilmiştir:

@RestController
public class ExampleController {
@RequestMapping(value = "/push",
  method = RequestMethod.POST,
  consumes = {"application/json"},
  produces = {"text/plain"})
  @ResponseStatus(HttpStatus.OK)
  public void doStuff(@RequestBody String message) {
        //wrapped message
        JSONObject jsonObject = new JSONObject(message);
        JSONObject jsonMessage = jsonObject.getJSONObject("message");
        message = jsonMessage.getString("data");
        byte[] decodedBytes = Base64.getDecoder().decode(message);
        String decodedMessage = new String(decodedBytes);
        // Implement your business logic here
  }
}

Aşağıda, kodu çözülmüş bir base64_encoded_string örneği verilmiştir:

{
  "account": "accounts/TARGETMERCHANT_ID",
  "managingAccount": "accounts/MERCHANT_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/TARGETMERCHANT_ID/products/ONLINE~en~US~1234",
  "expirationTime": "2024-10-22T02:43:47.461464Z",
  "eventTime": "2024-03-21T02:43:47.461464Z"
}

Bildirimde oldValue alanı yoksa hesabınıza yeni bir ürün eklenmiştir. newValue alanı yoksa ürün hesabınızdan silinmiştir.

Ürün silinmişse expirationTime alanı mevcut olmaz.

reportingContext alanı, ReportingContextEnum enum değerinden yalnızca (SHOPPING_ADS, LOCAL_INVENTORY_ADS, YOUTUBE_SHOPPING, YOUTUBE_CHECKOUT, YOUTUBE_AFFILIATE) değerlerini destekler.

Ürün durumu değişikliği etkinliği için oldValue ve newValue alanlarında şu değerlerden biri bulunur : (approved, pending, disapproved, ``).

eventTime alanı, etkinliğin oluşturulma zamanını içerir. Mesajları sıralamak istiyorsanız bu alandaki değere güvenmeniz gerekir, iletilerin alındığı sıraya güvenmeyin.

Daha fazla bilgi için ProductStatusChangeMessage biçimini kullanın.

Uygulamanızı test etme

Geri çağırma URI'nizi ve kod çözme işlemini test etmek için kullanabileceğiniz örnek bir bildirim aşağıda verilmiştir:

curl --header "Content-Type: application/json" --header "Accept: text/plain" --request POST --data '{"message":{"data":
"ewogICJhY2NvdW50IjogImFjY291bnRzLzEyMzQiLAogICJtYW5hZ2luZ0FjY291bnQiOiAiYWNjb3VudHMvNTY3OCIsCiAgInJlc291cmNlVHlwZSI6ICJQUk9EVUNUIiwKICAiYXR0cmlidXRlIjogIlNUQVRVUyIsCiAgImNoYW5nZXMiOiBbewogICAgIm9sZFZhbHVlIjogImFwcHJvdmVkIiwKICAgICJyZWdpb25Db2RlIjogIlVTIiwKICAgICJyZXBvcnRpbmdDb250ZXh0IjogIlNIT1BQSU5HX0FEUyIKICB9XSwKICAicmVzb3VyY2VJZCI6ICJPTkxJTkV+ZW5+VVN+MDAwMDAwMDAwMDAwIiwKICAicmVzb3VyY2UiOiAiYWNjb3VudHMvMTIzNC9wcm9kdWN0cy9PTkxJTkV+ZW5+VVN+MDAwMDAwMDAwMDAwIiwKICAiZXhwaXJhdGlvblRpbWUiOiAiMjAyNC0xMC0yMlQwMjo0Mzo0Ny40NjE0NjRaIiwKICAiZXZlbnRUaW1lIjogIjIwMjQtMDMtMjFUMDI6NDM6NDcuNDYxNDY0WiIKfQ=="}}' https://{callBackUri}

Bu çağrıya yanıt olarak geri çağırma URI'niz başarılı yanıt kodu döndürmelidir. Kodu çözülmüş mesajın değeri aşağıdaki gibi olmalıdır:

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