宣傳活動子 API 總覽

使用促銷活動,在 Google 上展示你銷售產品的特價優惠。 促銷活動會顯示在各項 Google 資源中,包括 Google 搜尋、購物和 Chrome。促銷活動必須符合特定條件才能獲得核准。詳情請參閱升級條件

為產品新增促銷活動後,購物者就會看到特價優惠連結。 例如「85 折」或「免運費」。優惠連結可提高產品的吸引力,並引起購物者的購買慾。所有促銷活動只能在結帳時或銷售點使用。

詳情請參閱「宣傳活動基本概念」。

必要條件

商家須提供與自身業務和產品相關的資訊,Google 才會顯示商家的促銷活動。你必須具備以下條件:

此外,你必須在促銷活動計畫中註冊 Merchant Center 帳戶。如果不確定是否已註冊,請查看 Merchant Center

如果尚未註冊,請填寫申請表單。促銷活動團隊會通知你何時可以開始建立促銷活動。

詳情請參閱「參加條件與政策」一文。

建立資料來源

你可以使用 accounts.dataSources.create 方法建立促銷活動資料來源。如有現有的促銷活動資料來源,請使用 accounts.dataSources.list 方法擷取所有資料來源。然後使用促銷活動資料來源的 name 欄位建立促銷活動

下列要求顯示如何建立資料來源,以便新增促銷活動:

POST https://merchantapi.googleapis.com/datasources/v1/accounts/{ACCOUNT_ID}/dataSources

{
  "displayName": "{DISPLAY_NAME}",
  "promotionDataSource": {
    "contentLanguage": "{CONTENT_LANGUAGE}",
    "targetCountry": "{TARGET_COUNTRY}"
  }
}

更改下列內容:

  • {ACCOUNT_ID}:帳戶的專屬 ID,顯示在 Merchant Center 使用者介面中。
  • {DISPLAY_NAME}:資料來源的顯示名稱。
  • {CONTENT_LANGUAGE}:資料來源中產品的雙字母 ISO 639-1 語言代碼。
  • {TARGET_COUNTRY}:目標國家/地區的 CLDR 地域代碼,促銷活動會顯示在該國家/地區。

要求順利執行後,您會看到下列回應,其中包含新建立的促銷活動資料來源詳細資料:

{
  "name": "accounts/{ACCOUNT_ID}/dataSources/{DATASOURCE_ID}",
  "dataSourceId": "{DATASOURCE_ID}",
  "displayName": "{DISPLAY_NAME}",
  "promotionDataSource": {
    "targetCountry": "{TARGET_COUNTRY}",
    "contentLanguage": "{CONTENT_LANGUAGE}"
  },
  "input": "API"
}

舉辦宣傳活動

您可以使用 accounts.promotions.insert 方法建立或更新促銷活動。accounts.promotions.insert 方法會將 promotions 資源和資料來源名稱做為輸入內容。如果成功,系統會傳回新的或更新的促銷活動。

建立促銷活動時,需要資料來源的名稱。 您也必須在要求中提供下列欄位的值:

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

Google 會先審核並核准促銷活動,然後才會進行發布。詳情請參閱「促銷活動核准程序」。

建議您詳閱促銷活動政策,確保建立的促銷活動能增加價值,並遵守購物廣告政策。

下列要求示範如何建立線上促銷活動:

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

如要瞭解設定促銷活動 ID 時適用的規則,請參閱「促銷活動 ID 屬性的基本規定」。

必填的 offerType 欄位有效值為 NO_CODEGENERIC_CODE。如果未提供其中一個值,API 要求會失敗,並傳回 HTTP 400 回應 [offer_type] validation/missing_required: Invalid or missing required attribute: offer_type。如果未提供任何必填欄位,系統也會傳回類似的錯誤訊息。

如果未提供 attributes.genericRedemptionCode 欄位的值,要求會失敗並傳回 HTTP 400 回應 [genericRedemptionCode] No redemption code provided

promotion.attributes.promotionDisplayTimePeriod.startTimepromotion.attributes.promotionDisplayTimePeriod.endTime 欄位的值必須採用 yyyy-mm-ddThh:mm:ssZ 格式。請務必將這些欄位的值替換為未來的日期。

詳情請參閱促銷活動資料規格

如需建立促銷活動的最佳做法,請參閱促銷活動最佳做法

如需促銷活動相關屬性清單,請參閱「新增結構化資料屬性」。

促銷活動建立要求成功執行後,可能需要幾分鐘,促銷活動才能透過 API 擷取,或顯示在 Merchant Center 中。

以下是可用的範例,用於非同步插入多項促銷活動:

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>");
  }
}

以下提供一些促銷活動範例,供您參考。

適用於所有產品和商店的店面促銷活動

以下範例要求說明如何建立店面促銷活動,適用於 Merchant Center 帳戶中的所有產品,以及連結商家檔案帳戶中新增的所有商店。

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

productApplicability 欄位為必填欄位。這項屬性會指出促銷活動適用於所有產品,或是僅適用於特定產品。支援的值為 ALL_PRODUCTSSPECIFIC_PRODUCTS。詳情請參閱「為宣傳活動選擇產品」。

couponValueType 欄位為必填欄位。這項屬性會指出你放送的促銷活動類型。如需支援的值清單,請參閱「優待券值類型」。視你選取的優待券值類型而定,部分屬性為必填

minimumPurchaseQuantity 欄位可讓你設定兌換促銷活動優惠所需的最低購買數量。詳情請參閱「促銷活動最低購買數量」。

同樣地,你可以使用 minimumPurchaseAmount 欄位設定兌換促銷活動優惠所需的最低消費金額。詳情請參閱「最低購買金額」。

如要進一步瞭解建立店面促銷活動時需要提供的價值,請參閱「店面促銷活動的資料來源規格」。

線上促銷活動,適用於特定產品,並提供兌換代碼

下列範例要求說明如何建立線上促銷活動,並將兌換代碼套用至所選產品。

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

查看促銷優惠

如要查看宣傳活動,請使用 accounts.promotions.get。這項 GET 要求為唯讀,您需要提供 merchantId 和宣傳活動 ID。GET 方法會傳回對應的促銷活動資源。

例如:

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

更改下列內容:

  • {ACCOUNT_ID}:Merchant Center 帳戶的專屬 ID。
  • {PROMOTION_ID}:要擷取的促銷活動專屬 ID。格式為 {CHANNEL} ~{CONTENT_LANGUAGE}~ {TARGET_COUNTRY}~{PROMOTION_ID}

請注意,新建立的促銷活動需要幾分鐘的時間,才能透過 API 擷取。

查看店面促銷活動

下列範例要求會擷取促銷活動 ID 為 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

要求成功後,您會看到以下回應:

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

這個範例中的 moneyOffAmount 欄位提供促銷活動提供的折扣。詳情請參閱「促銷活動的折扣金額」。

這個範例中的 promotionUrl 欄位提供商店網站的連結,購物者可透過該連結進一步瞭解促銷活動。如果未加入 promotionUrl 欄位,本地店面商品目錄廣告促銷活動會傳回錯誤。

查看線上促銷活動

下列範例要求會擷取促銷活動 ID 為 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}"
}

本範例中使用的 itemIdInclusion 欄位會提及符合促銷活動資格的產品。詳情請參閱「促銷活動的產品 ID」。

列出促銷活動

您可以使用 promotions.list 方法查看所有已建立的促銷活動。

以下是範例要求:

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

回應會列出帳戶中的所有促銷活動。你可以查看各項促銷活動的詳細資料,例如promotionIdredemptionChanneldataSourcepromotionStatus 等。

查看促銷活動狀態

如要查看促銷活動的狀態,請參閱 promotions.getpromotions.list 方法傳回的 promotionStatus 屬性。

promotionStatus 欄位可包含下列值:

  • IN_REVIEW:促銷活動仍在審查中。
  • REJECTED:促銷活動遭拒登。
  • LIVE:促銷活動已獲准並生效。
  • STOPPED:促銷活動已由帳戶停止。
  • EXPIRED:促銷活動已失效。
  • PENDING:促銷活動未停止,所有審查都已通過,但生效日期在未來。
  • STATE_UNSPECIFIED:不明的宣傳活動狀態。

如要瞭解你建立的促銷活動核准程序,請參閱「促銷活動核准程序」一文。

促銷活動狀態範例

下列範例說明成功和失敗要求的差異。

缺少產品對應

以下回應主體顯示因缺少產品對應而遭拒的線上促銷活動。

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

如要排解促銷活動遭拒的問題,以及瞭解如何避免日後遭拒,請參閱「修正促銷活動遭拒的問題」。

如果建立的促銷活動未獲准,你會收到電子郵件,說明遭拒原因並提供修正問題的指示。

促銷活動評估中

以下回應主體顯示仍在評估中的促銷活動。

  "promotionStatus": {
    "destinationStatuses": [
      {
        "reportingContext": "FREE_LISTINGS",
        "status": "PENDING"
      },
      {
        "destination": "SHOPPING_ADS",
        "status": "PENDING"
      }
    ],
    "itemLevelIssues": []
  }

已核准並上線的促銷活動

以下回應主體顯示購物者可看到的促銷活動。

  "promotionStatus": {
    "destinationStatuses": [
      {
        "reportingContext": "FREE_LISTINGS",
        "status": "LIVE"
      },
      {
        "destination": "SHOPPING_ADS",
        "status": "LIVE"
 }  ],
    "itemLevelIssues": []
  }

詳情請參閱「宣傳活動狀態常見問題」。

刪除促銷活動

無法使用 API 刪除促銷活動。如要刪除促銷活動,請前往 Merchant Center 使用者介面。詳情請參閱「編輯促銷活動或變更促銷活動狀態」。

如要結束現有促銷活動,可以使用 accounts.promotions.insert 方法,將 attributes.promotionEffectiveTimePeriod.endTime 欄位更新為過去的時間。

瞭解詳情