Korzystaj z promocji, aby prezentować oferty specjalne dotyczące produktów, które sprzedajesz w Google. Promocje wyświetlają się w różnych usługach Google, w tym w wyszukiwarce Google, Zakupach i Chrome. Aby promocje zostały zatwierdzone, muszą spełniać określone kryteria. Więcej informacji znajdziesz w artykule Kryteria promocji.
Gdy dodasz promocję do swoich produktów, kupujący zobaczą link do oferty specjalnej. Na przykład „15% zniżki” lub „Bezpłatna dostawa”. Linki do oferty mogą zwiększyć atrakcyjność Twoich produktów i zachęcić klientów do zakupu. Wszystkie promocje są uwzględniane w momencie płatności lub w punkcie sprzedaży.
Więcej informacji znajdziesz w artykule Podstawowe informacje o promocjach.
Wymagania wstępne
Zanim będziemy mogli wyświetlać Twoje promocje, musisz podać konkretne informacje na temat swojej firmy i produktów. Musisz mieć:
- Aktywny plik danych o produktach w Google Merchant Center.
- Aktywny plik danych o promocjach w Google Merchant Center.
- konto Google Ads do kampanii produktowych;
Dodatkowo musisz zarejestrować swoje konto Merchant Center w programie Promocje. Jeśli nie masz pewności, czy jesteś już zarejestrowany(-a), sprawdź Merchant Center.
Jeśli nie masz konta, wypełnij formularz prośby. Zespół ds. promocji powiadomi Cię, kiedy będzie można rozpocząć korzystanie z tej funkcji.
Więcej informacji znajdziesz w kryteriach i zasadach uczestnictwa.
Tworzenie źródła danych
Aby utworzyć źródło danych o promocjach, możesz użyć metody accounts.dataSources.create. Jeśli dostępne jest istniejące źródło danych o promocjach, użyj metody
accounts.dataSources.list
do pobrania wszystkich źródeł danych. Następnie możesz użyć pola name źródła danych o promocjach, aby utworzyć promocje.
To żądanie pokazuje, jak utworzyć źródło danych do dodawania promocji:
POST https://merchantapi.googleapis.com/datasources/v1/accounts/{ACCOUNT_ID}/dataSources
{
"displayName": "{DISPLAY_NAME}",
"promotionDataSource": {
"contentLanguage": "{CONTENT_LANGUAGE}",
"targetCountry": "{TARGET_COUNTRY}"
}
}
Zastąp następujące elementy:
- {ACCOUNT_ID}: unikalny identyfikator Twojego konta widoczny w interfejsie Merchant Center.
- {DISPLAY_NAME}: wyświetlana nazwa źródła danych.
- {CONTENT_LANGUAGE}: dwuliterowy kod języka ISO 639-1 produktów w źródle danych.
- {TARGET_COUNTRY}: kod regionu CLDR kraju docelowego, w którym mają być widoczne promocje.
Po pomyślnym wykonaniu żądania zobaczysz odpowiedź zawierającą szczegóły nowo utworzonego źródła danych o promocjach:
{
"name": "accounts/{ACCOUNT_ID}/dataSources/{DATASOURCE_ID}",
"dataSourceId": "{DATASOURCE_ID}",
"displayName": "{DISPLAY_NAME}",
"promotionDataSource": {
"targetCountry": "{TARGET_COUNTRY}",
"contentLanguage": "{CONTENT_LANGUAGE}"
},
"input": "API"
}
Zorganizuj promocję
Do tworzenia lub aktualizowania promocji możesz użyć metody
accounts.promotions.insert. Metoda accounts.promotions.insert przyjmuje jako dane wejściowe zasób promotions i nazwę źródła danych. Jeśli operacja się uda, zwraca nową lub zaktualizowaną promocję.
Aby utworzyć promocję, musisz podać nazwę źródła danych. W żądaniu musisz też podać wartości tych pól:
contentLanguageredemptionChannelpromotionIdtargetCountryattributes.offerTypeattributes.genericRedemptionCodeattributes.couponValueTypeattributes.productApplicabilityattributes.promotionEffectiveTimePeriod.endTimeattributes.promotionEffectiveTimePeriod.startTimeattributes.longTitle
Google sprawdzi i zatwierdzi Twoje promocje, zanim zostaną rozpowszechnione. Więcej informacji znajdziesz w artykule Proces zatwierdzania promocji.
Zapoznaj się z zasadami dotyczącymi promocji, aby mieć pewność, że tworzone przez Ciebie promocje są wartościowe i zgodne z zasadami reklam produktowych.
To żądanie pokazuje, jak utworzyć promocję online:
HTTP
POST https://merchantapi.googleapis.com/promotions/v1/accounts/{ACCOUNT_ID}/promotions:insert
{
"promotion": {
"name": "{PROMOTION_NAME}",
"promotionId": "{PROMOTION_ID}",
"targetCountry": "{TARGET_COUNTRY}",
"redemptionChannel": [
"ONLINE"
],
"contentLanguage": "{CONTENT_LANGUAGE}",
"attributes": {
"promotionDisplayTimePeriod": {
"endTime": "{PROMOTION_END_TIME}",
"startTime": "{PROMOTION_START_TIME}"
},
"offerType": "{OFFER_TYPE}",
"longTitle": "{LONG_TITLE}"
}
},
"dataSource": "accounts/{ACCOUNT_ID}/dataSources/{DATASOURCE_ID}"
}
cURL
curl --request POST \
'https://merchantapi.googleapis.com/promotions/v1/accounts/{ACCOUNT_ID}/promotions:insert?key=[YOUR_API_KEY]' \
--header 'Authorization: Bearer {ACCESS_TOKEN}' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data '{"dataSource":"{DATASOURCE_ID}","promotion":{"name":"accounts/{ACCOUNT_ID}/promotions/{PROMOTION_ID}y","promotionId":"abc","contentLanguage":"en","targetCountry":"US","redemptionChannel":["ONLINE"]}}' \
--compressed
Informacje o regułach dotyczących ustawiania identyfikatora promocji znajdziesz w artykule Minimalne wymagania dotyczące atrybutu identyfikator promocji.
Prawidłowe wartości obowiązkowego pola offerType to NO_CODE i GENERIC_CODE. Jeśli nie podasz jednej z tych wartości, żądanie do interfejsu API zakończy się niepowodzeniem i zostanie zwrócona odpowiedź HTTP 400 [offer_type] validation/missing_required: Invalid or
missing required attribute: offer_type. Podobny komunikat o błędzie pojawi się, jeśli nie podasz żadnego z obowiązkowych pól.
Jeśli nie podasz wartości w polu attributes.genericRedemptionCode, żądanie zakończy się niepowodzeniem i zostanie zwrócona odpowiedź HTTP 400 [genericRedemptionCode] No
redemption code provided.
Wartości w polach promotion.attributes.promotionDisplayTimePeriod.startTime i promotion.attributes.promotionDisplayTimePeriod.endTime muszą być w formacie yyyy-mm-ddThh:mm:ssZ. Zastąp wartości w tych polach datami z przyszłości.
Więcej informacji znajdziesz w specyfikacji danych o promocjach.
Sprawdzone metody tworzenia promocji znajdziesz w artykule Sprawdzone metody dotyczące promocji.
Listę atrybutów związanych z promocjami znajdziesz w artykule Dodawanie atrybutów danych strukturalnych.
Po pomyślnym uruchomieniu żądania utworzenia promocji może minąć kilka minut, zanim będzie można ją pobrać za pomocą interfejsu API lub wyświetlić w Merchant Center.
Oto przykładowy kod, którego możesz użyć do asynchronicznego wstawiania wielu promocji:
Java
import com.google.api.core.ApiFuture;
import com.google.api.core.ApiFutureCallback;
import com.google.api.core.ApiFutures;
import com.google.api.gax.core.FixedCredentialsProvider;
import com.google.api.gax.grpc.InstantiatingGrpcChannelProvider;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.common.util.concurrent.MoreExecutors;
import com.google.protobuf.Timestamp;
import com.google.shopping.merchant.promotions.v1.Attributes;
import com.google.shopping.merchant.promotions.v1.CouponValueType;
import com.google.shopping.merchant.promotions.v1.InsertPromotionRequest;
import com.google.shopping.merchant.promotions.v1.OfferType;
import com.google.shopping.merchant.promotions.v1.ProductApplicability;
import com.google.shopping.merchant.promotions.v1.Promotion;
import com.google.shopping.merchant.promotions.v1.PromotionsServiceClient;
import com.google.shopping.merchant.promotions.v1.PromotionsServiceSettings;
import com.google.shopping.merchant.promotions.v1.RedemptionChannel;
import com.google.shopping.type.CustomAttribute;
import com.google.shopping.type.Destination.DestinationEnum;
import com.google.type.Interval;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.stream.Collectors;
import shopping.merchant.samples.utils.Authenticator;
import shopping.merchant.samples.utils.Config;
/** This class demonstrates how to insert multiple promotions asynchronously. */
public class InsertPromotionsAsyncSample {
private static String generateRandomString() {
String characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
Random random = new Random();
StringBuilder sb = new StringBuilder(8);
for (int i = 0; i < 8; i++) {
sb.append(characters.charAt(random.nextInt(characters.length())));
}
return sb.toString();
}
private static Promotion createPromotion(String accountId) {
String merchantPromotionId = generateRandomString();
Attributes attributes =
Attributes.newBuilder()
.setProductApplicability(ProductApplicability.ALL_PRODUCTS)
.setOfferType(OfferType.GENERIC_CODE)
.setGenericRedemptionCode("ABCD1234")
.setLongTitle("My promotion")
.setCouponValueType(CouponValueType.PERCENT_OFF)
.addPromotionDestinations(DestinationEnum.SHOPPING_ADS)
.setPercentOff(10)
// Note that promotions have a 6-month limit.
// For more information, read here: https://support.google.com/merchants/answer/2906014
// Also note that only promotions valid within the past 365 days are shown in the UI.
.setPromotionEffectiveTimePeriod(
Interval.newBuilder()
.setStartTime(Timestamp.newBuilder().setSeconds(1726842472))
.setEndTime(Timestamp.newBuilder().setSeconds(1726842473))
.build())
.build();
return Promotion.newBuilder()
.setName(String.format("accounts/%s/merchantPromotions/%s", accountId, merchantPromotionId))
.setPromotionId(merchantPromotionId)
.setContentLanguage("fr")
.setTargetCountry("CH")
.addRedemptionChannel(RedemptionChannel.ONLINE)
.setAttributes(attributes)
// Custom attributes allow you to add additional information which is not available in
// Attributes. For example, you might want to pilot experimental functionality.
.addCustomAttributes(
CustomAttribute.newBuilder()
.setName("another example name")
.setValue("another example value")
.build())
.build();
}
public static void asyncInsertPromotions(String accountId, String dataSourceId) throws Exception {
GoogleCredentials credential = new Authenticator().authenticate();
// Creates a channel provider. This provider manages a pool of gRPC channels
// to enhance throughput for bulk operations. Each individual channel in the pool
// can handle up to approximately 100 concurrent requests.
//
// Channel: A single connection pathway to the service.
// Pool: A collection of multiple channels managed by this provider.
// Requests are distributed across the channels in the pool.
//
// We recommend estimating the number of concurrent requests you'll make, divide by 50 (50%
// utilization of channel capacity), and set the pool size to that number.
InstantiatingGrpcChannelProvider channelProvider =
InstantiatingGrpcChannelProvider.newBuilder().setPoolSize(30).build();
PromotionsServiceSettings merchantPromotionsServiceSettings =
PromotionsServiceSettings.newBuilder()
.setCredentialsProvider(FixedCredentialsProvider.create(credential))
.setTransportChannelProvider(channelProvider)
.build();
try (PromotionsServiceClient merchantPromotionsServiceClient =
PromotionsServiceClient.create(merchantPromotionsServiceSettings)) {
// Arbitrarily creates five merchant promotions with random IDs.
List<InsertPromotionRequest> requests = new ArrayList<>();
for (int i = 0; i < 5; i++) {
InsertPromotionRequest request =
InsertPromotionRequest.newBuilder()
.setParent(String.format("accounts/%s", accountId))
.setPromotion(createPromotion(accountId))
.setDataSource(String.format("accounts/%s/dataSources/%s", accountId, dataSourceId))
.build();
requests.add(request);
}
// Inserts the merchant promotions.
List<ApiFuture<Promotion>> futures =
requests.stream()
.map(
request ->
merchantPromotionsServiceClient.insertPromotionCallable().futureCall(request))
.collect(Collectors.toList());
// Creates callback to handle the responses when all are ready.
ApiFuture<List<Promotion>> responses = ApiFutures.allAsList(futures);
ApiFutures.addCallback(
responses,
new ApiFutureCallback<List<Promotion>>() {
@Override
public void onSuccess(List<Promotion> results) {
System.out.println("Inserted merchant promotions below:");
System.out.println(results);
}
@Override
public void onFailure(Throwable throwable) {
System.out.println(throwable);
}
},
MoreExecutors.directExecutor());
} catch (Exception e) {
System.out.println(e);
}
}
public static void main(String[] args) throws Exception {
Config config = Config.load();
asyncInsertPromotions(config.getAccountId().toString(), "<YOUR_DATA_SOURCE_ID>");
}
}
Oto kilka przykładowych promocji, które możesz wykorzystać na początek.
Promocja lokalna obejmująca wszystkie produkty i wszystkie sklepy
Poniższa przykładowa prośba pokazuje, jak utworzyć promocję produktów dostępnych lokalnie, która obowiązuje w przypadku wszystkich produktów na koncie Merchant Center i wszystkich sklepów dodanych na połączonym koncie Profilu Firmy.
POST https://merchantapi.googleapis.com/promotions/v1/accounts/{ACCOUNT_ID}/promotions:insert
{
"promotion": {
"promotionId": "buy_2_get_10_off",
"contentLanguage": "en",
"targetCountry": "US",
"redemptionChannel": [
"IN_STORE"
],
"attributes": {
"longTitle": "Buy 2 and get 10$ OFF purchase",
"productApplicability": "ALL_PRODUCTS",
"offerType": "NO_CODE",
"couponValueType": "BUY_M_GET_MONEY_OFF",
"promotionDisplayTimePeriod": {
"startTime": "2024-2-06T00:47:44Z",
"endTime": "2024-5-06T00:47:44Z"
},
"promotionEffectiveTimePeriod": {
"startTime": "2024-2-06T00:47:44Z",
"endTime": "2024-5-06T00:47:44Z"
},
"moneyOffAmount": {
"amountMicros": "1000000",
"currencyCode": "USD"
},
"minimumPurchaseQuantity": 2,
"storeApplicability": "ALL_STORES",
"promotionUrl": "http://promotionnew4url.com/",
"promotionDestinations": [
"LOCAL_INVENTORY_ADS"
],
}
},
"dataSource": "accounts/{ACCOUNT_ID}/dataSources/{DATASOURCE_ID}"
}
Pole productApplicability jest wymagane. Określa, czy promocja dotyczy wszystkich produktów czy tylko konkretnych. Obsługiwane wartości to ALL_PRODUCTS i SPECIFIC_PRODUCTS. Więcej informacji znajdziesz w artykule Wybieranie produktów do promocji.
Pole couponValueType jest wymagane. Sygnalizuje typ promocji, którą prowadzisz. Listę obsługiwanych wartości znajdziesz w sekcji Typ wartości kuponu. W zależności od wybranego typu wartości kuponu niektóre atrybuty są wymagane.
Pole minimumPurchaseQuantity umożliwia ustawienie minimalnej wielkości zakupu wymaganej do skorzystania z oferty promocyjnej. Więcej informacji znajdziesz w artykule Minimalna wielkość zakupu dla promocji.
Podobnie możesz użyć pola minimumPurchaseAmount, aby ustawić minimalną kwotę zakupu wymaganą do skorzystania z promocji. Więcej informacji znajdziesz w artykule Minimalna kwota do zapłaty.
Więcej informacji o wartościach, które musisz podać, aby utworzyć promocję produktów dostępnych lokalnie, znajdziesz w artykule Specyfikacja źródeł danych w przypadku promocji produktów dostępnych lokalnie.
Promocja online obejmująca wybrane produkty z kodem promocyjnym
Poniższe przykładowe żądanie pokazuje, jak utworzyć promocję online, która dotyczy wybranych produktów z kodem rabatowym.
POST https://merchantapi.googleapis.com/promotions/v1/accounts/{ACCOUNT_ID}/promotions:insert
{
"promotion": {
"promotionId": "25_pct_off",
"contentLanguage": "en",
"targetCountry": "US",
"redemptionChannel": [
"ONLINE"
],
"attributes": {
"longTitle": "10% off on selected items",
"productApplicability": "SPECIFIC_PRODUCTS",
"offerType": "GENERIC_CODE",
"genericRedemptionCode": "SPRINGSALE",
"couponValueType": "PERCENT_OFF",
"promotionDisplayTimePeriod": {
"startTime": "2024-2-06T00:47:44Z",
"endTime": "2024-5-06T00:47:44Z"
},
"promotionEffectiveTimePeriod": {
"startTime": "2024-2-06T00:47:44Z",
"endTime": "2024-5-06T00:47:44Z"
},
"percentOff": 25,
"promotionDestinations": [
"FREE_LISTINGS"
],
"itemIdInclusion": [
"1499860100",
"1499860101",
"1499860102",
"1499860103",
"1499860104"
],
}
},
"dataSource": "accounts/{ACCOUNT_ID}/dataSources/1000000573361824"
}
Wyświetl promocje
Aby wyświetlić promocję, użyj właściwości accounts.promotions.get.
To żądanie GET jest tylko do odczytu. Wymaga podania merchantId i identyfikatora promocji. Metoda GET zwraca odpowiedni zasób promocji.
Na przykład:
HTTP
GET https://merchantapi.googleapis.com/promotions/v1/accounts/{ACCOUNT_ID}/promotions/{PROMOTION_ID}
cURL
curl \
'https://merchantapi.googleapis.com/promotions/v1/accounts/{ACCOUNT_ID}/promotions/{PROMOTION_ID}?key=[YOUR_API_KEY]' \
--header 'Authorization: Bearer {ACCESS_TOKEN}' \
--header 'Accept: application/json' \
--compressed
Zastąp następujące elementy:
- {ACCOUNT_ID}: unikalny identyfikator konta Merchant Center.
- {PROMOTION_ID}: unikalny identyfikator promocji, którą chcesz pobrać. Użyj formatu {CHANNEL} ~{CONTENT_LANGUAGE}~ {TARGET_COUNTRY}~{PROMOTION_ID} .
Pamiętaj, że nowo utworzona promocja będzie dostępna w interfejsie API dopiero po kilku minutach.
Wyświetlanie promocji lokalnej
Poniższe przykładowe żądanie pobiera promocję lokalną, której identyfikator promocji to in_store~en~US~buy_2_get_10_off.
GET https://merchantapi.googleapis.com/promotions/v1/accounts/{ACCOUNT_ID}/promotions/in_store~en~US~buy_2_get_10_off
Po pomyślnym przetworzeniu żądania zobaczysz tę odpowiedź:
{
"name": "accounts/{ACCOUNT_ID}/promotions/in_store~en~US~buy_2_get_10_off",
"promotionId": "buy_2_get_10_off",
"contentLanguage": "en",
"targetCountry": "US",
"redemptionChannel": [
"IN_STORE"
],
"attributes": {
"longTitle": "Buy 2 and get 10$ OFF purchase",
"productApplicability": "ALL_PRODUCTS",
"offerType": "NO_CODE",
"couponValueType": "BUY_M_GET_MONEY_OFF",
"promotionDisplayTimePeriod": {
"startTime": "2024-2-06T00:47:44Z",
"endTime": "2024-5-06T00:47:44Z"
},
"promotionEffectiveTimePeriod": {
"startTime": "2024-2-06T00:47:44Z",
"endTime": "2024-5-06T00:47:44Z"
},
"moneyOffAmount": {
"amountMicros": "1000000",
"currencyCode": "USD"
},
"minimumPurchaseQuantity": 2,
"storeApplicability": "ALL_STORES",
"promotionUrl": "http://promotionnew4url.com/",
"promotionDestinations": [
"LOCAL_INVENTORY_ADS"
],
}
"dataSource": "accounts/{ACCOUNT_ID}/dataSources/1000000573361824"
}
Pole moneyOffAmount w tym przykładzie zawiera rabat oferowany w ramach promocji. Więcej informacji znajdziesz w artykule Kwota rabatu pieniężnego w promocji.
Pole promotionUrl w tym przykładzie zawiera link do strony internetowej sklepu, na której kupujący mogą znaleźć więcej informacji o promocji. Promocje w reklamach lokalnego asortymentu produktów zwracają błąd, jeśli nie uwzględnisz pola promotionUrl.
Wyświetlanie promocji online
Ten przykładowy kod żądania pobiera promocję online, której identyfikator promocji to online~en~US~25_pct_off.
GET https://merchantapi.googleapis.com/promotions/v1/accounts/{ACCOUNT_ID}/promotions/online~en~US~25_pct_off
{
"name": "accounts/{ACCOUNT_ID}/promotions/online~en~US~25_pct_off",
"promotionId": "25_pct_off",
"contentLanguage": "en",
"targetCountry": "US",
"redemptionChannel": [
"ONLINE"
],
"attributes": {
"longTitle": "10% off on selected items",
"productApplicability": "SPECIFIC_PRODUCTS",
"offerType": "GENERIC_CODE",
"genericRedemptionCode": "WINTERGIFT",
"couponValueType": "PERCENT_OFF",
"promotionDisplayTimePeriod": {
"startTime": "2024-2-06T00:47:44Z",
"endTime": "2024-5-06T00:47:44Z"
},
"promotionEffectiveTimePeriod": {
"startTime": "2024-2-06T00:47:44Z",
"endTime": "2024-5-06T00:47:44Z"
},
"percentOff": 25,
"promotionDestinations": [
"FREE_LISTINGS"
],
"itemIdInclusion": [
"1499860100",
"1499860101",
"1499860102",
"1499860103",
"1499860104"
],
}
"dataSource": "accounts/{ACCOUNT_ID}/dataSources/{dataSource}"
}
Pole itemIdInclusion użyte w tym przykładzie zawiera informacje o produktach, które kwalifikują się do promocji. Więcej informacji znajdziesz w artykule Identyfikator produktu w promocji.
Wyświetlanie listy promocji
Aby wyświetlić wszystkie utworzone promocje, możesz użyć metody
promotions.list.
Przykładowe żądanie:
HTTP
GET https://merchantapi.googleapis.com/promotions/v1/{ACCOUNT_ID}/promotions
cURL
curl \
'https://merchantapi.googleapis.com/promotions/v1/accounts/{ACCOUNT_ID}/promotions?key=[YOUR_API_KEY]' \
--header 'Authorization: Bearer {ACCESS_TOKEN}' \
--header 'Accept: application/json' \
--compressed
Odpowiedź zawiera listę wszystkich promocji na Twoim koncie. W przypadku każdej promocji możesz zobaczyć szczegóły, takie jak promotionId, redemptionChannel, dataSource, promotionStatus i inne.
Wyświetlanie stanu promocji
Aby sprawdzić stan promocji, zobacz atrybut promotionStatus zwracany przez metodę
promotions.get
lub
promotions.list.
Pole promotionStatus może mieć te wartości:
IN_REVIEW: promocja jest nadal sprawdzana.REJECTED: promocja jest odrzucona.LIVE: promocja jest zatwierdzona i aktywna.STOPPED: promocja została zatrzymana przez konto.EXPIRED: promocja nie jest już aktywna.PENDING: promocja nie jest wstrzymana, a wszystkie opinie są zatwierdzone, ale data rozpoczęcia jest w przyszłości.STATE_UNSPECIFIED: Nieznany stan promocji.
Aby dowiedzieć się więcej o procesie zatwierdzania utworzonej przez Ciebie promocji, zapoznaj się z artykułem Proces zatwierdzania promocji.
Przykładowy stan promocji
Poniższe przykłady pokazują różnicę między udanymi i nieudanymi żądaniami.
Brak mapowania produktu
Poniższy tekst odpowiedzi pokazuje promocję online, która została odrzucona z powodu braku mapowania produktów.
"promotionStatus": {
"destinationStatuses": [
{
"reportingContext": "FREE_LISTINGS",
"status": "REJECTED"
}
],
"itemLevelIssues": [
{
"code": "promotion_sku_unmapped",
"severity": "DISAPPROVED",
"resolution": "merchant_action",
"reportingContext": "FREE_LISTINGS",
"description": "Unmapped",
"detail": "This promotion couldn't be tested during review because it doesn't apply to any products that are currently in your Products feed",
"documentation": "https://support.google.com/merchants/answer/2906014",
"applicableCountries": [
"US"
]
},
{
"code": "promotion_sku_additional_requirements",
"severity": "DISAPPROVED",
"resolution": "merchant_action",
"reportingContext": "FREE_LISTINGS",
"description": "Promotion conditions not allowed",
"detail": "This promotion has additional requirements that are not allowed such as requiring customers to verify additional details like phone number or ID before showing the promotion details",
"documentation": "https://support.google.com/merchants/answer/2906014",
"applicableCountries": [
"US"
]
}
]
}
Aby rozwiązać problemy z odrzuconymi promocjami i dowiedzieć się, jak uniknąć odrzucenia w przyszłości, przeczytaj artykuł Rozwiązywanie problemów z odrzuconymi promocjami.
Jeśli utworzona przez Ciebie promocja nie zostanie zatwierdzona, otrzymasz e-maila z powodem odrzucenia i instrukcjami dotyczącymi rozwiązania problemów.
Promocja jest w trakcie sprawdzania
Poniższa treść odpowiedzi pokazuje promocję, która jest nadal oceniana.
"promotionStatus": {
"destinationStatuses": [
{
"reportingContext": "FREE_LISTINGS",
"status": "PENDING"
},
{
"destination": "SHOPPING_ADS",
"status": "PENDING"
}
],
"itemLevelIssues": []
}
zatwierdzona i aktywna promocja;
Poniższa treść odpowiedzi pokazuje promocję widoczną dla kupujących.
"promotionStatus": {
"destinationStatuses": [
{
"reportingContext": "FREE_LISTINGS",
"status": "LIVE"
},
{
"destination": "SHOPPING_ADS",
"status": "LIVE"
} ],
"itemLevelIssues": []
}
Więcej informacji znajdziesz w artykule Najczęstsze pytania dotyczące stanu promocji.
Usuwanie promocji
Nie można usunąć promocji za pomocą interfejsu API. Aby usunąć promocję, musisz otworzyć interfejs Merchant Center. Więcej informacji znajdziesz w artykule Edytowanie promocji lub zmiana jej stanu.
Aby zakończyć istniejącą promocję, możesz użyć metody accounts.promotions.insert, aby zaktualizować pole attributes.promotionEffectiveTimePeriod.endTime na czas w przeszłości.
Więcej informacji
- Więcej informacji znajdziesz w Centrum pomocy dotyczącym promocji.
- Rozwiązania typowych problemów znajdziesz w artykule Rozwiązywanie problemów związanych z interfejsem API podrzędnym Promocje.
- Aby dowiedzieć się więcej o migracji z Content API for Shopping, przeczytaj artykuł Migracja zarządzania promocjami.