Omówienie podinterfejsu Promotions

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 kryteriach 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 ofert 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ć:

Musisz też zarejestrować swoje konto Merchant Center w programie Promocje. Jeśli nie masz pewności, czy Twoja firma jest już zarejestrowana, sprawdź Merchant Center.

Jeśli nie masz zarejestrowanego 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 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 obszaru 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:

  • contentLanguage
  • redemptionChannel
  • promotionId
  • targetCountry
  • attributes.offerType
  • attributes.genericRedemptionCode
  • attributes.couponValueType
  • attributes.productApplicability
  • attributes.promotionEffectiveTimePeriod.endTime
  • attributes.promotionEffectiveTimePeriod.startTime
  • attributes.longTitle

Google sprawdzi i zatwierdzi Twoje promocje, zanim zostaną rozpowszechnione. Więcej informacji znajdziesz w artykule Proces zatwierdzania promocji.

Zalecamy zapoznanie się z zasadami dotyczącymi promocji, aby mieć pewność, że tworzone przez Ciebie promocje są wartościowe i zgodne z zasadami dotyczącymi 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 [YOUR_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 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 pól promotion.attributes.promotionDisplayTimePeriod.startTimepromotion.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 zanim pojawi się w Merchant Center.

Oto przykład, 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.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();

    PromotionsServiceSettings merchantPromotionsServiceSettings =
        PromotionsServiceSettings.newBuilder()
            .setCredentialsProvider(FixedCredentialsProvider.create(credential))
            .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

Przykładowa prośba poniżej pokazuje, jak utworzyć promocję produktów dostępnych lokalnie, która ma zastosowanie do wszystkich produktów na koncie Merchant Center i wszystkich sklepów dodanych na połączonym koncie Profil 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. Wskazuje, czy promocja dotyczy wszystkich czy tylko konkretnych produktów. Obsługiwane wartości to ALL_PRODUCTSSPECIFIC_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 wartości 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 zakupu.

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 on 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 [YOUR_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ć. Format to {CHANNEL} ~{CONTENT_LANGUAGE}~ {TARGET_COUNTRY}~{PROMOTION_ID} .

Pamiętaj, że pobranie nowo utworzonej promocji za pomocą interfejsu API może potrwać kilka minut.

Wyświetlanie promocji lokalnej

Poniższe przykładowe żądanie pobiera promocję lokalną, której identyfikator 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 witryny sklepu, w 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 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 [YOUR_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, zapoznaj się z atrybutem promotionStatus zwracanym przez metodę promotions.get lub promotions.list.

Pole promotionStatus może mieć te wartości:

  • IN_REVIEW: promocja jest nadal sprawdzana.
  • REJECTED: promocja została 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 weryfikacje 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, zapoznaj się z artykułem 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