广告系列预算

预算用于管理您的 AdWords 广告系列的费用金额。本指南全面介绍了在 AdWords API 中使用预算时所需了解的信息,包括共享、分配、移除和跟踪预算效果。

共享预算

预算可以应用于单个广告系列,也可以在多个广告系列之间共享。

当您使用 AdWords API 创建新的 Budget 时,默认情况下可以共享它。您可以通过对 BudgetService 进行 API 调用来检查 isExplicitlyShared 的值,以此验证这一点:

  • isExplicitlyShared = true 表示可以在多个广告系列之间共享预算
  • isExplicitlyShared = false 表示预算只能由一个广告系列使用

明确共享的预算会显示在 AdWords 界面中帐号的共享库中,而未共享的预算只会显示在其关联广告系列的设置中。

为广告系列分配预算

要为广告系列分配预算,请使用 BudgetService 创建 Budget 对象,然后在后续调用 CampaignService 时使用生成的预算 ID。注意,如果广告系列操作失败,但预算操作成功,则仍然会创建孤立预算(未与广告系列关联的预算)。我们建议您重复使用或移除此类预算。

新广告系列

对于新广告系列,在 CampaignService.mutate() ADD 操作中,将广告系列的 budget 属性设置为 Budget 对象,将其 budgetId 设置为预算 ID,如以下 Java 代码示例所示。在示例中,因为 isExplicitlyShared 采用默认值 true,所以创建了共享预算。

// Get the BudgetService.
BudgetServiceInterface budgetService =
    adWordsServices.get(session, BudgetServiceInterface.class);

// Create a budget, which can be shared by multiple campaigns.
Budget sharedBudget = new Budget();
sharedBudget.setName("Interplanetary Cruise #" + System.currentTimeMillis());
Money budgetAmount = new Money();
budgetAmount.setMicroAmount(50000000L);
sharedBudget.setAmount(budgetAmount);
sharedBudget.setDeliveryMethod(BudgetBudgetDeliveryMethod.STANDARD);
BudgetOperation budgetOperation = new BudgetOperation();
budgetOperation.setOperand(sharedBudget);
budgetOperation.setOperator(Operator.ADD);

// Execute the new budget operation and save the assigned budget ID.
Long budgetId =
    budgetService.mutate(new BudgetOperation[] {budgetOperation}).getValue(0).getBudgetId();
Campaign campaign = new Campaign();
campaign.setName("Interplanetary Cruise #" + System.currentTimeMillis());
// Recommendation: Set the campaign to PAUSED when creating it to stop
// the ads from immediately serving. Set to ENABLED once you've added
// targeting and the ads are ready to serve.
campaign.setStatus(CampaignStatus.PAUSED);
campaign.setAdvertisingChannelType(AdvertisingChannelType.SEARCH);

// Set the bidding strategy configuration.
BiddingStrategyConfiguration biddingStrategyConfiguration =
    new BiddingStrategyConfiguration();
biddingStrategyConfiguration.setBiddingStrategyType(BiddingStrategyType.MANUAL_CPC);
campaign.setBiddingStrategyConfiguration(biddingStrategyConfiguration);

// Only the budgetId should be set.
Budget budget = new Budget();
budget.setBudgetId(budgetId);
campaign.setBudget(budget);
CampaignServiceInterface campaignService =
    adWordsServices.get(session, CampaignServiceInterface.class);
CampaignOperation operation = new CampaignOperation();
operation.setOperand(campaign);
operation.setOperator(Operator.ADD);
CampaignOperation[] operations = new CampaignOperation[] {operation};
CampaignReturnValue result = campaignService.mutate(operations);

替换广告系列的预算

要替换现有广告系列的预算,请使用 CampaignService.mutate() SET 操作,将广告系列的 budget 属性设置为 Budget 对象,将其 budgetId 设置为现有预算的 ID(同时设置所需的任何其他广告系列字段)。请注意,因为广告系列一次只能与一个预算相关联,因此这会将分配给广告系列的现有预算替换为 budgetId 指定的预算。

取消广告系列与预算的关联

广告系列必须始终与预算相关联。您可以通过更改与广告系列相关联的预算 ID,将其替换为其他预算,从而从广告系列中移除预算。要找出使用特定预算的广告系列,请参阅提取特定预算的广告系列列表

移除预算

与广告系列类似,预算也无法完全删除,您只能将其状态设置为 REMOVED。为此,请先确保没有 ENABLEDPAUSED 广告系列正在使用该预算。然后,发送含有该预算 ID 的 BudgetService.mutate() REMOVE 请求。如果其 ReferenceCount 字段大于 0,则说明仍有 ENABLEDPAUSED 广告系列在使用该预算。(可以作为 BudgetService.get() 操作中的 ReferenceCount 字段或 CampaignService.get() 操作中的 BudgetReferenceCount 字段提取预算的 ReferenceCount 字段)。

// Retrieve a budget with budget ID of interest
Long budgetId =  Long.parseLong("INSERT_BUDGET_ID_HERE");
Selector selector = new SelectorBuilder()
    .fields(BudgetField.BudgetId, BudgetField.BudgetReferenceCount)
    .orderAscBy(BudgetField.BudgetId)
    .equals(BudgetField.BudgetId, budgetId.toString())
    .build();
// (Code Excluded) Get a Budget object from the result of BudgetService.get
// Remove the budget only if its referenceCount == 0 (no campaigns are using it)
if (budget.getReferenceCount() == 0) {
    BudgetServiceInterface budgetService =
        adWordsServices.get(session, BudgetServiceInterface.class);
    BudgetOperation operation = new BudgetOperation();
    operation.setOperand(budget);
    operation.setOperator(Operator.REMOVE);
    BudgetOperation[] operations = new BudgetOperation[] {operation};
    BudgetReturnValue result = budgetService.mutate(operations);
}

此外,您可以通过移除某个广告系列,来移除该广告系列正在使用的非共享预算。将此类广告系列的状态设置为 REMOVED 时,其非共享预算的状态也会自动设置为 REMOVED

提取指定预算的广告系列列表

获取使用同一预算的广告系列列表有助于平衡预算利用率。执行 CampaignService.get() 操作以及 BudgetId 等于所需预算 ID 的谓词,操作至少请求 Id 字段:

Long budgetId =  Long.parseLong("INSERT_BUDGET_ID_HERE");
Selector selector = new SelectorBuilder()
    .fields(CampaignField.Id, CampaignField.BudgetId)
    .orderAscBy(CampaignField.Id)
    .equals(CampaignField.BudgetId, budgetId.toString())
    .build();

或者,您可以使用此 AWQL 语句获得相同的结果:

SELECT BudgetId, BudgetName, Amount, IsBudgetExplicitlyShared,
       AssociatedCampaignId, Impressions
FROM BUDGET_PERFORMANCE_REPORT
WHERE BudgetId = <YOUR_BUDGET_ID>

跟踪效果

您可以使用预算效果报告提取广告系列的预算效果统计信息,其中包括默认情况下在预算级别汇总的所有统计信息,每个预算一行。如果使用细分字段,则每个预算可能会出现多行。有关详情,请参阅细分

使用限制

任何启用了广告系列实验的广告系列都必须拥有自己的非共享预算。

常见错误

错误 说明
BudgetError.CANNOT_UPDATE_BUDGET_TO_IMPLICITLY_SHARED 表示您尝试在 SET 操作中将预算的 isExplicitlyShared 值从 true 设置为 false。一旦明确共享预算(isExplicitlyShared = true),您就无法将 isExplicitlyShared 更改回 false
EntityCountLimitExceeded.ACCOUNT_LIMIT 表示您已达到帐号的预算上限
CampaignError.CAMPAIGN_CANNOT_USE_SHARED_BUDGET 您尝试添加预算的广告系列正在使用广告系列实验,且其他广告系列已使用该预算。
BudgetError.CANNOT_EDIT_SHARED_BUDGET 您尝试使用 CampaignService 修改与广告系列关联的预算。您只能通过 BudgetService 修改预算。
BudgetError.BUDGET_IN_USE 您尝试移除与一个或多个活动广告系列或已暂停广告系列相关联的预算。

发送以下问题的反馈:

此网页
AdWords API
AdWords API
需要帮助?请访问我们的支持页面