Ü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 herhangi biri için bildirimlere abone olabilirsiniz.

Bu kılavuzda, ürün durumu değişiklikleriyle ilgili bildirimlerin nasıl yönetileceğine dair örnekler verilmektedir. İsteklerinizdeki 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 Merchant Notifications API referansına bakın.

Abone ol

Bildirim almak için callBackUri gerekir. Geri arama URI'niz aşağıdaki koşulları karşılamalıdır:

  • Bir sertifika yetkilisi tarafından imzalanmış geçerli bir SSL sertifikasına sahip, herkese açık bir HTTPS adresi olmalıdır.
  • Content-Type üstbilgisi 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 gönderilen push isteklerinin 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ının ürün durumu değişiklikleriyle ilgili bildirimlere abone olma isteği örneğini aşağıda bulabilirsiniz.

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

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

  • ACCOUNT_ID: Bildirimleri alması gereken hesabın benzersiz tanımlayıcısı.
  • TARGETACCOUNT_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ızla ilgili bildirimler almak istiyorsanız bu iki değişkeni de hesap kimliğinizle değiştirin.

Başarılı çağrılar, abonelik kimliği de dahil olmak üzere aboneliğiniz için name döndürür:

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

Bu name ile GET ve DELETE işlemlerini ayrı ayrı abonelikler için yapabilirsiniz.

İ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/ACCOUNT_ID/notificationsubscriptions/

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

Mevcut bir aboneliği güncellemek için PATCH ile birlikte update_mask kullanarak güncellemek istediğiniz alanları ve JSON gövdesindeki yeni değerleri belirtin:

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

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

Kod çözme bildirimleri

Bir abonelik oluşturduktan sonra, belirtilen callBackUri için aşağıdaki biçimde bildirimler alırsınız:

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

Bildirim verileri kodlanmıştır. Uygulamanızda kullanmak için verileri okunabilir metin biçimine çözebilirsiniz. Kodlanmış verileri işlemek için kullanabileceğiniz örnek bir Spring Boot denetleyicisini aşağıda bulabilirsiniz:

@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/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"
}

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 silindiyse 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ğinde oldValue ve newValue alanları şu değerlerden birini alır : (approved, pending, disapproved, ``).

eventTime alanı, etkinliğin oluşturulma zamanını içerir. İletileri sıralamak istiyorsanız bu alandaki değere güvenmeli ve iletilerin alınma sırasına güvenmemelisiniz.

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

Uygulamanızı test etme

Geri arama URI'nizi ve kod çözme işlemini test etmek için kullanabileceğiniz örnek bir bildirimi aşağıda bulabilirsiniz:

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 arama URI'niz başarılı bir yanıt kodu döndürmelidir. Kod çözme işleminden sonraki mesajın değeri şu 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"
}