Google Ads API is returning to beta status. Please read our blog post for more details.

帐号预算

通过帐号预算,您可以指定各种预算属性,如支出限额、开始时间和结束时间,以此控制帐号可在特定时间段内支出的费用。预算必须指向帐号的结算设置之一,以指明将对哪个特定的付款帐号进行结算。您可以通过发送 AccountBudgetProposal 对象创建、更新和移除 AccountBudget

AccountBudgetProposal 对象需要经过 Google 审核之后才能应用。审核通常会在 1 个小时内完成,但您应当确保预算的审批时间大幅度早于其要求的开始时间。

创建帐号预算提案

通过创建新的帐号预算,您可以控制客户的支出行为。使用 AccountBudgetProposalService 即可创建一个新的 AccountBudgetProposal。您应该将 AccountBudgetProposalType 设置为 CREATE,以指定应创建一项新预算。如需了解其他操作,请参阅本指南的管理部分。

请记住,一定要将结算设置与您具有写入权限的付款帐号配合使用。有关详细信息,请参阅结算设置指南

AccountBudgetProposal proposal = AccountBudgetProposal.newBuilder()
  .setBillingSetup(StringValue.of("customer/1234567890/billingSetups/1"))
  .setProposalType(AccountBudgetProposalType.CREATE)
  .setProposedName(StringValue.of("Example account budget"))
  .setProposedStartDateTime(StringValue.of("2020-01-02 03:03:03"))
  .setProposedEndDateTime(StringValue.of("2021-02-03 04:04:04"))
  .setProposedSpendingLimitMicros(Int64Value.of(10_000))
  .build();

// Send request to Google Ads API (not shown).

在帐号预算提案申请中,proposed_start_date_timeproposed_end_date_time 始终位于客户的帐号时区内;您不能指定时区。proposed_spending_limit 始终以帐号所用的币种为度量单位;指定此金额时,使用的是“微”单位,因此 $1.00 = 1,000,000。

或者,您可以添加一个采购订单编号,它会显示在帐单上的这些费用旁边。这对预算投放没有任何影响。

检索现有的帐号预算

AccountBudget 对象表示的是提案的最终应用结果。在提案获得批准后,对提案进行任何更改(这些更改可能还会出现任意调整)均将导致系统创建新的帐号预算,或更新现有的帐号预算,具体取决于请求中的 AccountBudgetProposalType。已获批准的 CREATE 请求将创建新的帐号预算。UPDATEENDREMOVE 请求将对现有的帐号预算执行适当的操作。

下面的查询将获取帐号中的所有帐号预算。

String query =
        "SELECT "
            + "account_budget.status, "
            + "account_budget.billing_setup, "
            + "account_budget.adjusted_spending_limit_micros, "
            + "account_budget.adjusted_spending_limit_type, "
            + "account_budget.approved_spending_limit_micros, "
            + "account_budget.approved_spending_limit_type, "
            + "account_budget.proposed_spending_limit_micros, "
            + "account_budget.proposed_spending_limit_type, "
            + "account_budget.approved_start_date_time, "
            + "account_budget.proposed_start_date_time, "
            + "account_budget.approved_end_date_time, "
            + "account_budget.approved_end_time_type,"
            + "account_budget.proposed_end_date_time, "
            + "account_budget.proposed_end_time_type "
            + "FROM account_budget";
try (GoogleAdsServiceClient googleAdsServiceClient =
    googleAdsClient.getGoogleAdsServiceClient()) {
  // Issues the search request.
  SearchPagedResponse searchPagedResponse =
      googleAdsServiceClient.search(Long.toString(customerId), query);

  // Iterates over all rows in all pages and prints the requested field values for the account
  // budget in each row.
  for (GoogleAdsRow googleAdsRow : searchPagedResponse.iterateAll()) {
    AccountBudget accountBudget = googleAdsRow.getAccountBudget();

    // Read the desired properties of the accountBudget (not shown).

  }
}

请注意,封装了帐号预算的开始时间、结束时间和支出限额的字段会具有多个变体,并带有 proposedapproved 等前缀,可用于比较最初提出的值与获得批准的值。支出限额带有包含 adjusted 前缀的附加字段,用于表示在对获得批准的金额进行任何调整后生效的最新支出限额。

帐号预算的已批准支出限额会随着时间的推移而出现调整,以反映由于预算超额投放、无效点击活动和促销优惠券等形成的赠送/返还金额。要详细了解帐号预算简介以及帐号赠送/返还金额和调整项,请访问 Google Ads 帮助中心。

凡是待批准的任何新帐号预算以及待更新的任何现有帐号预算,还会包含可以选择的 account_budget.pending_proposal 字段。该字段包含关联的 AccountBudgetProposal 对象的资源 ID。

管理现有的帐号预算

为客户创建帐号预算之后,您可以使用 AccountBudgetProposalService 管理各个预算参数。最常见的管理操作是更新 spending_limitend_date_time 字段。有关可变更字段的完整列表,请参阅 AccountBudgetProposal 文档。

您可以选择更新现有的帐号预算或创建全新的预算,这两个选项在本文均有显示。

更新现有的帐号预算

您可以通过发送 AccountBudgetProposal 对象(将其 AccountBudgetProposalType 设置为 UPDATE)来更新现有的帐号预算字段。

AccountBudgetProposal proposal = AccountBudgetProposal.newBuilder()
  .setProposalType(AccountBudgetProposalType.UPDATE)
  .setAccountBudget(StringValue.of("customers/1234567890/accountBudgets/1"))
  .setProposedSpendingLimitMicros(Int64Value.of(spendingLimit + increaseAmount))
  .setProposedEndDateTime(StringValue.of("2049-01-01"))
  .build();

AccountBudgetProposalOperation.newBuilder()
  .setCreate(proposal)
  .setUpdateMask(
      FieldMask.newBuilder().addAllPaths(Arrays
          .asList("proposed_spending_limit", "proposed_end_date_time")).build())
  .build();

// Send request to Google Ads API (not shown).

帐号预算链

作为一种更新现有预算的替代方案,Google Ads 允许您将多项帐号预算链接起来进行连续投放。在下面的示例中,客户每个月的支出限额并不相同。

您可以创建 3 个 AccountBudgetProposal 对象并将其发送到 AccountBudgetProposalService 实现这一效果。

AccountBudgetProposal proposalMay = AccountBudgetProposal.newBuilder()
  .setBillingSetup(StringValue.of("customer/1234567890/billingSetups/1"))
  .setProposalType(AccountBudgetProposalType.CREATE)
  .setProposedName(StringValue.of("May budget"))
  .setProposedStartDateTime(StringValue.of("2018-05-01"))
  .setProposedEndDateTime(StringValue.of("2018-06-01"))
  .setProposedSpendingLimitMicros(Int64Value.of(1_000_000_000L))
  .build();

AccountBudgetProposal proposalJune = AccountBudgetProposal.newBuilder()
  .setBillingSetup(StringValue.of("customer/1234567890/billingSetups/1"))
  .setProposalType(AccountBudgetProposalType.CREATE)
  .setProposedName(StringValue.of("June budget"))
  .setProposedStartDateTime(StringValue.of("2018-06-01"))
  .setProposedEndDateTime(StringValue.of("2018-07-01"))
  .setProposedSpendingLimitMicros(Int64Value.of(5_000_000_000L))
  .build();

AccountBudgetProposal proposalJuly = AccountBudgetProposal.newBuilder()
  .setBillingSetup(StringValue.of("customer/1234567890/billingSetups/1"))
  .setProposalType(AccountBudgetProposalType.CREATE)
  .setProposedName(StringValue.of("July budget"))
  .setProposedStartDateTime(StringValue.of("2018-07-01"))
  .setProposedEndDateTime(StringValue.of("2018-08-01"))
  .setProposedSpendingLimitMicros(Int64Value.of(1_000_000_000L))
  .build();

// Send request to Google Ads API (not shown).

请注意,对每个提案使用 AccountBudgetProposalType= CREATE 时,它将创建 3 项不同的预算,而不是对同一预算执行 3 次更新操作。

终止帐号预算

帐号预算可以在有效期内结束,并在开始审批之前或待审批期间完全移除。

结束有效的帐号预算

有效的帐号预算是无法移除的。不过,您可以将结束时间设置为当前时间。要做到这点,最简单的方法是发送一个包含 AccountBudgetProposalType= END 的提案。

AccountBudgetProposal.newBuilder()
  .setAccountBudget(StringValue.of("customers/1234567890/accountBudgets/1"))
  .setProposalType(AccountBudgetProposalType.END)
  .build();

// Send request to Google Ads API (not shown).

这相当于将结束日期这一时间设置为 NOW,具体代码如下:

AccountBudgetProposal proposal = AccountBudgetProposal.newBuilder()
  .setAccountBudget(StringValue.of("customers/9882804443/accountBudgets/476626184"))
  .setProposalType(AccountBudgetProposalType.UPDATE)
  .setProposedEndTimeType(TimeType.NOW)
  .build();

AccountBudgetProposalOperation operation = AccountBudgetProposalOperation.newBuilder()
  .setCreate(proposal)
  .setUpdateMask(
      FieldMask.newBuilder().addAllPaths(Arrays
          .asList("proposed_end_date_time")).build())
  .build();

// Send request to Google Ads API (not shown).

在开始时间之前移除已获批准的帐号预算

如果您打算以后再启用某项帐号预算,则可以通过发送 REMOVE 提案类型的方式,在开始时间之前将其完全移除。

AccountBudgetProposal proposal = AccountBudgetProposal.newBuilder()
  .setAccountBudget(StringValue.of("customers/1234567890/accountBudgets/1"))
  .setProposalType(AccountBudgetProposalType.REMOVE)
  .build();

AccountBudgetProposalOperation operation = AccountBudgetProposalOperation.newBuilder()
  .setCreate(proposal)
  .build();

// Send request to Google Ads API (not shown).

移除待处理的帐号预算提案

您可以通过设置 AccountBudgetProposalType= REMOVE 的方式完全移除待处理的预算提案。但请记住,预算提案的应用时间通常很短,可能也就几分钟,因此往往无法实现完全移除。

AccountBudgetProposalOperation operation = AccountBudgetProposalOperation.newBuilder()
  .setRemove("customers/9882804443/accountBudgetProposal/476626184")
  .build();