Hesap verilerindeki değişikliklerle ilgili push bildirimleri almak için Satıcı Bildirimleri API'sini kullanabilirsiniz. Örneğin, ürün durumu değişikliği bildirimlerine abone olursanız bir ürün onaylanmadığında gerçek zamanlı olarak bilgilendirilebilirsiniz. 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ık veapplication/json
değerine sahip HTTPPOST
istekleri kabul edilmelidir.- Bildirimin alındığını onaylamak için aşağıdaki yanıt kodlarından birini döndürmelidir.
102
200
201
202
204
Aynı geri çağırma URI'sini birden fazla abonelik için kullanabilirsiniz. Tek bir URI'ya aktarma isteklerinin yükünü en aza indirmek için her etkinlik türü için gelişmiş hesap başına benzersiz bir geri çağırma URI'si kullanmanızı öneririz.
Aşağıda, belirli bir satıcı hesabındaki ürün durumu değişiklikleriyle ilgili bildirimlere abone olmanıza yönelik örnek bir istek verilmiştir. Bildirimleri alması gereken hesabın satıcı kimliğini istek URL'sinde merchantId
olarak, bildirim almak için hesabın satıcı kimliğini de istek gövdesinde targetMerchantId
olarak kullanın. Hesabınız bağlı hesabı olmayan bağımsız bir hesapsa ve kendi hesabınızla ilgili bildirim almak istiyorsanız her iki yerde de kendi satıcı kimliğinizi kullanın.
POST https://merchantapi.googleapis.com/notifications/v1beta/accounts/merchantId/notificationsubscriptions/
{
"registeredEvent": "PRODUCT_STATUS_CHANGE",
"targetAccount": "accounts/targetMerchantId",
"callBackUri": "https://example.com"
}
Başarılı aramalar, aboneliğiniz için abonelik kimliği içeren bir name
döndürür:
{
"name":"accounts/merchantId/notificationsubscriptions/subscriptionId",
"registeredEvent": "PRODUCT_STATUS_CHANGE",
"targetAccount": "accounts/targetMerchantId",
"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 tüm bağlı hesaplarınız için ürün durumu değişiklikleriyle ilgili bildirimlere abone olabilirsiniz:
POST https://merchantapi.googleapis.com/notifications/v1beta/accounts/merchantId/notificationsubscriptions/
{
"registeredEvent": "PRODUCT_STATUS_CHANGE",
"allManagedAccounts": true,
"callBackUri": "https://example.com"
}
Mevcut bir aboneliği güncellemek için, güncellemek istediğiniz alanları belirtmek üzere PATCH
öğesini bir update_mask
ile, JSON gövdesindeki yeni değerleri de kullanın:
PATCH /notifications/v1beta/accounts/merchantId/notificationsubscriptions/subscriptionId?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/targetMerchantId",
"managingAccount": "accounts/merchantId",
"resourceType": "PRODUCT",
"attribute": "STATUS",
"changes": [{
"oldValue": "eligible",
"newValue": "disapproved",
"regionCode": "US",
"reportingContext": "SHOPPING_ADS"
}, {
"oldValue": "eligible",
"newValue": "disapproved",
"regionCode": "JP",
"reportingContext": "SHOPPING_ADS"
},{
"oldValue": "eligible",
"newValue": "disapproved",
"regionCode": "GE",
"reportingContext": "SHOPPING_ADS"
}],
"resourceId": "ONLINE~en~US~1234",
"resource": "accounts/targetMerchantId/products/ONLINE~en~US~1234",
"expirationTime": "2024-10-22T02: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.
reportingContext
alanı, ReportingContextEnum enum değerinden yalnızca (SHOPPING_ADS
, LOCAL_INVENTORY_ADS
, YOUTUBE_SHOPPING
, YOUTUBE_CHECKOUT
) değerlerini destekler.
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":
"ewogICJhY2NvdW50IjogImFjY291bnRzLzEyMzQiLAogICJtYW5hZ2luZ0FjY291bnQiOiAiYWNjb3VudHMvNTY3OCIsCiAgInJlc291cmNlVHlwZSI6ICJQUk9EVUNUIiwKICAiYXR0cmlidXRlIjogIlNUQVRVUyIsCiAgImNoYW5nZXMiOiBbewogICAgIm9sZFZhbHVlIjogImVsaWdpYmxlIiwKICAgICJyZWdpb25Db2RlIjogIlVTIiwKICAgICJyZXBvcnRpbmdDb250ZXh0IjogIlNIT1BQSU5HX0FEUyIKICB9XSwKICAicmVzb3VyY2VJZCI6ICJPTkxJTkV+ZW5+VVN+MDAwMDAwMDAwMDAwIiwKICAicmVzb3VyY2UiOiAiYWNjb3VudHMvMTIzNC9wcm9kdWN0cy9PTkxJTkV+ZW5+VVN+MDAwMDAwMDAwMDAwIiwKICAiZXhwaXJhdGlvblRpbWUiOiAiMjAyNC0xMC0yMlQwMjo0Mzo0Ny40NjE0NjRaIgp9"}}' https://{callBackUri}
Geri çağırma URI'niz bu çağrıya yanıt olarak 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": "eligible",
"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"
}