账号预算

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

AccountBudget 对象表示应用提案后的最终结果。提案获得批准后,其更改(如有任何调整)将导致系统创建新的账号预算或更新现有账号预算。这取决于请求中指定的 proposal_type。

AccountBudgetProposalType 说明
CREATE 创建新的账号预算,必须先获得批准才能使用。
UPDATE 修改现有账号预算。
END 将账号预算的结束时间设置为当前时间。
REMOVE 在账号预算开始时间之前移除该预算。

以下部分介绍了每种提案类型的行为。

创建账号预算建议

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

请务必使用具有写入权限的支付账号的结算设置。有关详细信息,请参阅结算设置指南。

以下示例演示了如何创建新的预算提案。

Java

private void runExample(GoogleAdsClient googleAdsClient, long customerId, long billingSetupId) {
  // Creates an AccountBudgetProposal. This will be reviewed offline by Google Ads, and if
  // approved will become an AccountBudget.
  AccountBudgetProposal proposal =
      AccountBudgetProposal.newBuilder()
          .setBillingSetup(ResourceNames.billingSetup(customerId, billingSetupId))
          .setProposalType(AccountBudgetProposalType.CREATE)
          .setProposedName("Account Budget (example)")

          // Specifies the account budget starts immediately.
          .setProposedStartTimeType(TimeType.NOW)
          // Alternatively you can specify a specific start time. Refer to the
          // AccountBudgetProposal
          // resource documentation for allowed formats.
          //
          // .setProposedStartDateTime("2020-01-02 03:04:05")

          // Specifies that the budget runs forever.
          .setProposedEndTimeType(TimeType.FOREVER)
          // Alternatively you can specify a specific end time. Allowed formats are as above.
          // .setProposedEndDateTime("2021-02-03 04:05:06")

          // Optional: sets notes for the budget. These are free text and do not effect budget
          // delivery.
          // .setProposedNotes("Received prepayment of $0.01")

          // Sets the spending limit to 0.01, measured in the Google Ads account currency.
          .setProposedSpendingLimitMicros(10_000)

          // Optional: sets PO number for record keeping. This value is at the user's
          // discretion, and has no effect on Google Billing & Payments.
          // .setProposedPurchaseOrderNumber("PO number 12345")
          .build();

  // Creates an operation which will add the new AccountBudgetProposal.
  AccountBudgetProposalOperation operation =
      AccountBudgetProposalOperation.newBuilder().setCreate(proposal).build();

  try (AccountBudgetProposalServiceClient accountBudgetProposalServiceClient =
      googleAdsClient.getLatestVersion().createAccountBudgetProposalServiceClient()) {
    // Sends the request to the Account Budget Proposal Service.
    MutateAccountBudgetProposalResponse response =
        accountBudgetProposalServiceClient.mutateAccountBudgetProposal(
            String.valueOf(customerId), operation);

    System.out.printf(
        "Account budget proposal created: %s.%n", response.getResult().getResourceName());
  }
}
      

C#

public void Run(GoogleAdsClient client, long customerId, long billingSetupId)
{
    // Get the AccountBudgetProposalServiceClient.
    AccountBudgetProposalServiceClient proposalService =
        client.GetService(Services.V25.AccountBudgetProposalService);

    // Create an AccountBudgetProposal. The proposal will be reviewed offline by Google Ads,
    // and if approved will become an AccountBudget.
    AccountBudgetProposal proposal = new AccountBudgetProposal()
    {
        BillingSetup = ResourceNames.BillingSetup(customerId, billingSetupId),
        ProposalType = AccountBudgetProposalType.Create,
        ProposedName = "Account Budget (example)",

        // Specify the account budget starts immediately
        ProposedStartTimeType = TimeType.Now,
        // Alternatively, you can specify a specific start time. Refer to the
        // AccountBudgetProposal resource documentation for allowed formats.
        //
        //ProposedStartDateTime = "2020-01-02 03:04:05",

        // Specify that the budget runs forever.
        ProposedEndTimeType = TimeType.Forever,
        // Alternatively you can specify a specific end time. Allowed formats are as above.
        //ProposedEndDateTime = "2021-02-03 04:05:06",

        // Optional: set notes for the budget. These are free text and do not effect budget
        // delivery.
        //ProposedNotes = "Received prepayment of $0.01",

        // Set the spending limit to 0.01, measured in the Google Ads account currency.
        ProposedSpendingLimitMicros = 10_000

        // Optional: set PO number for record keeping. This value is at the user's
        // discretion, and has no effect on Google Billing & Payments.
        //ProposedPurchaseOrderNumber = "PO number 12345"
    };

    // Create an operation which will add the new AccountBudgetProposal
    AccountBudgetProposalOperation operation = new AccountBudgetProposalOperation()
    {
        Create = proposal
    };

    try
    {
        // Send the request to the Account Budget Proposal Service.
        MutateAccountBudgetProposalResponse response = proposalService.
            MutateAccountBudgetProposal(customerId.ToString(), operation);

        // Display the results.
        Console.WriteLine($"Account budget proposal '{response.Result.ResourceName}' " +
            "was created.");
    }
    catch (GoogleAdsException e)
    {
        Console.WriteLine("Failure:");
        Console.WriteLine($"Message: {e.Message}");
        Console.WriteLine($"Failure: {e.Failure}");
        Console.WriteLine($"Request ID: {e.RequestId}");
        throw;
    }
}
      

PHP

public static function runExample(
    GoogleAdsClient $googleAdsClient,
    int $customerId,
    int $billingSetupId
) {
    // Constructs an account budget proposal.
    $accountBudgetProposal = new AccountBudgetProposal([
        'billing_setup' => ResourceNames::forBillingSetup($customerId, $billingSetupId),
        'proposal_type' => AccountBudgetProposalType::CREATE,
        'proposed_name' => 'Account Budget (example)',
        // Specifies the account budget starts immediately.
        'proposed_start_time_type' => TimeType::NOW,
        // Alternatively you can specify a specific start time. Refer to the
        // AccountBudgetProposal class for allowed formats.
        //
        // 'proposed_start_date_time' => '2020-01-02 03:04:05',

        // Specify that the budget runs forever.
        'proposed_end_time_type' => TimeType::FOREVER,
        // Alternatively you can specify a specific end time. Allowed formats are as above.
        // 'proposed_end_date_time' => '2021-02-03 04:05:06',

        // Optional: set notes for the budget. These are free text and do not effect budget
        // delivery.
        // 'proposed_notes' => 'Received prepayment of $0.01',

        // Optional: set PO number for record keeping. This value is at the user's
        // discretion, and has no effect on Google Billing & Payments.
        // 'proposed_purchase_order_number' => 'PO number 12345',

        // Set the spending limit to 0.01, measured in the Google Ads account currency.
        'proposed_spending_limit_micros' => 10000
    ]);

    $accountBudgetProposalOperation = new AccountBudgetProposalOperation();
    $accountBudgetProposalOperation->setCreate($accountBudgetProposal);

    // Issues a mutate request to add the account budget proposal.
    $accountBudgetProposalServiceClient =
        $googleAdsClient->getAccountBudgetProposalServiceClient();
    $response = $accountBudgetProposalServiceClient->mutateAccountBudgetProposal(
        MutateAccountBudgetProposalRequest::build($customerId, $accountBudgetProposalOperation)
    );

    printf(
        "Added an account budget proposal with resource name '%s'.%s",
        $response->getResult()->getResourceName(),
        PHP_EOL
    );
}
      

Python

def main(client: GoogleAdsClient, customer_id: str, billing_setup_id: str):
    account_budget_proposal_service = client.get_service(
        "AccountBudgetProposalService"
    )
    billing_setup_service = client.get_service("BillingSetupService")

    account_budget_proposal_operation = client.get_type(
        "AccountBudgetProposalOperation"
    )
    proposal = account_budget_proposal_operation.create

    proposal.proposal_type = client.enums.AccountBudgetProposalTypeEnum.CREATE
    proposal.billing_setup = billing_setup_service.billing_setup_path(
        customer_id, billing_setup_id
    )
    proposal.proposed_name = "Account Budget Proposal (example)"

    # Specify the account budget starts immediately
    proposal.proposed_start_time_type = client.enums.TimeTypeEnum.NOW
    # Alternatively you can specify a specific start time. Refer to the
    # AccountBudgetProposal resource documentation for allowed formats.
    #
    # proposal.proposed_start_date_time = '2020-01-02 03:04:05'

    # Specify that the budget runs forever
    proposal.proposed_end_time_type = client.enums.TimeTypeEnum.FOREVER
    # Alternatively you can specify a specific end time. Allowed formats are as
    # above.
    #
    # proposal.proposed_end_date_time = '2021-01-02 03:04:05'

    # Optional: set notes for the budget. These are free text and do not effect
    # budget delivery.
    #
    # proposal.proposed_notes = 'Received prepayment of $0.01'
    proposal.proposed_spending_limit_micros = 10000

    account_budget_proposal_response = (
        account_budget_proposal_service.mutate_account_budget_proposal(
            customer_id=customer_id,
            operation=account_budget_proposal_operation,
        )
    )
    print(
        "Created account budget proposal "
        f'"{account_budget_proposal_response.result.resource_name}".'
    )
      

Ruby

def add_account_budget_proposal(customer_id, billing_setup_id)
  # GoogleAdsClient will read a config file from
  # ENV['HOME']/google_ads_config.rb when called without parameters
  client = Google::Ads::GoogleAds::GoogleAdsClient.new


  operation = client.operation.create_resource.account_budget_proposal do |proposal|
    proposal.billing_setup = client.path.billing_setup(customer_id, billing_setup_id)
    proposal.proposal_type = :CREATE
    proposal.proposed_name = 'Account Budget (example)'

    # Specify the account budget starts immediately
    proposal.proposed_start_time_type = :NOW
    # Alternatively you can specify a specific start time. Refer to the
    # AccountBudgetProposal resource documentation for allowed formats.
    #
    # proposal.proposed_start_date_time = '2020-01-02 03:04:05'

    # Specify that the budget runs forever.
    proposal.proposed_end_time_type = :FOREVER
    # Alternatively you can specify a specific end time. Allowed formats are as
    # above.
    #
    # proposal.proposed_end_date_time = '2021-01-02 03:04:05'

    # Optional: set notes for the budget. These are free text and do not affect
    # budget delivery.
    #
    # proposal.proposed_notes = 'Received prepayment of $0.01'

    # Set the spending limit to 0.01, measured in the Google Ads account currency.
    proposal.proposed_spending_limit_micros = 10_000
  end

  account_budget_proposal_service = client.service.account_budget_proposal
  # Add budget proposal.
  response = account_budget_proposal_service.mutate_account_budget_proposal(
    customer_id: customer_id,
    operation: operation,
  )

  puts sprintf("Created budget proposal %s.",
      response.results.first.resource_name)
end
      

Perl

sub add_account_budget_proposal {
  my ($api_client, $customer_id, $billing_setup_id) = @_;

  # Create an account budget proposal.
  my $account_budget_proposal =
    Google::Ads::GoogleAds::V25::Resources::AccountBudgetProposal->new({
      billingSetup =>
        Google::Ads::GoogleAds::V25::Utils::ResourceNames::billing_setup(
        $customer_id, $billing_setup_id
        ),
      proposalType => CREATE,
      proposedName => "Account Budget (example)",
      # Specify that the account budget starts immediately.
      proposedStartTimeType => NOW,
      # Alternatively you can specify a specific start time. Refer to the
      # AccountBudgetProposal class for allowed formats.
      #
      # proposedStartDateTime => "2020-01-02 03:04:05",

      # Specify that the account budget runs forever.
      proposedEndDateTime => FOREVER,
      # Alternatively you can specify a specific end time. Allowed formats are as below.
      # proposedEndDateTime => "2021-02-03 04:05:06",

      # Optional: set notes for the budget. These are free text and do not effect budget
      # delivery.
      # proposedNotes => "Received prepayment of $0.01",

      # Optional: set PO number for record keeping. This value is at the user's
      # discretion, and has no effect on Google Billing & Payments.
      # proposedPurchaseOrderNumber => "PO number 12345",

      # Set the spending limit to 0.01, measured in the Google Ads account currency.
      proposedSpendingLimitMicros => 10000
    });

  # Create an account budget proposal operation.
  my $account_budget_proposal_operation =
    Google::Ads::GoogleAds::V25::Services::AccountBudgetProposalService::AccountBudgetProposalOperation
    ->new({
      create => $account_budget_proposal
    });

  # Add the account budget proposal.
  my $account_budget_proposal_response =
    $api_client->AccountBudgetProposalService()->mutate({
      customerId => $customer_id,
      operation  => $account_budget_proposal_operation
    });

  printf "Created account budget proposal '%s'.\n",
    $account_budget_proposal_response->{result}{resourceName};

  return 1;
}
      

curl

在账号预算提案请求中,proposed_start_date_time 和 proposed_end_date_time 始终采用客户账号的时区,您无法指定时区。建议的支出限额始终以账号的币种来衡量;请使用“微”单位指定此限额,因此 1.00 美元 = 1,000,000 微美元。

您还可以选择添加采购订单编号,该编号将显示在账单上这些费用旁边。这对预算投放没有任何影响。

移除待批的账号预算建议

您可以通过发送包含账号预算建议资源名称的 AccountBudgetProposalOperation.remove 请求来移除整个待处理的预算建议。不过,请注意,预算提案通常会在几分钟内生效。

Java
AccountBudgetProposalOperation operation = AccountBudgetProposalOperation.newBuilder()
  .setRemove(ResourceNames.accountBudgetProposal(customerId, accountBudgetProposalId))
  .build();

// Send request to Google Ads API (not shown).
C#
AccountBudgetProposalOperation operation = new AccountBudgetProposalOperation()
{
    Remove = ResourceNames.AccountBudgetProposal(customerId, accountBudgetProposalId)
};

// Send request to Google Ads API (not shown).
PHP
$accountBudgetProposalOperation = new AccountBudgetProposalOperation();
$accountBudgetProposalOperation->setRemove(ResourceNames::forAccountBudgetProposal($customerId, $accountBudgetProposalId));

// Send request to Google Ads API (not shown).
Python
account_budget_proposal_service = client.get_service('AccountBudgetProposalService')
account_budget_proposal_operation = client.get_type('AccountBudgetProposalOperation')
account_budget_proposal_operation.remove = (
    account_budget_proposal_service.account_budget_proposal_path(
        customer_id, account_budget_proposal_id
    )
)

# Send request to Google Ads API (not shown).
Ruby
operation = client.operation.remove_resource.account_budget_proposal(client.path.account_budget_proposal(customer_id, account_budget_proposal_id))

# Send request to Google Ads API (not shown).
Perl
my $account_budget_proposal_operation =
  Google::Ads::GoogleAds::V25::Services::AccountBudgetProposalService::AccountBudgetProposalOperation
    ->new({
      remove => Google::Ads::GoogleAds::V25::Utils::ResourceNames::account_budget_proposal(
          $customer_id, $account_budget_proposal_id
        )
    });

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

如果您在原始提案中犯了错误,可以重新提交提案,并将其作为 UPDATE 操作。请参阅更新现有账号预算。

检索现有账号预算

以下 Google Ads 查询语言 (GAQL) 查询会提取账号中的所有现有账号预算:

SELECT
  account_budget.resource_name,
  account_budget.id,
  account_budget.name,
  account_budget.status,
  account_budget.billing_setup,
  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.adjusted_spending_limit_micros,
  account_budget.adjusted_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

封装了账号预算的开始时间、结束时间和支出限额的字段有多种变体,带有 proposed 和 approved 等前缀,可用于比较最初提议的值与已获批准的值。支出限额具有以 adjusted 为前缀的其他字段,用于指示在对批准的金额进行任何调整后生效的当前支出限额。

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

任何待批准的新账号预算,以及任何有待更新的现有账号预算,也会填充到 pending_proposal 嵌套消息中,其子字段可在 GAQL 查询中选择(例如 account_budget_proposal,作为 account_budget.pending_proposal.account_budget_proposal 进行查询,用于关联的 AccountBudgetProposal 对象的资源名称)。

管理现有账号预算

为客户创建账号预算后,您可以使用 AccountBudgetProposalService 管理预算参数。最常见的管理操作是更新 proposed_spending_limit_micros 和 proposed_end_date_time 字段。如需查看可变字段的完整列表,请参阅 AccountBudgetProposal 参考文档。

您可以选择更新现有账号预算,也可以创建全新的预算;这两种方式都会显示在此处。

更新现有的账号预算

您可以通过发送 AccountBudgetProposal 对象(并将 AccountBudgetProposalType 设置为 UPDATE)来更新现有的账号预算字段。请注意,您还必须在操作的 update_mask 实参中指明要更新的字段。

以下代码段演示了如何更新现有账号预算的建议支出上限。

Java
AccountBudgetProposal proposal = AccountBudgetProposal.newBuilder()
  .setProposalType(AccountBudgetProposalType.UPDATE)
  .setAccountBudget(accountBudget.getResourceName())
  .setProposedSpendingLimitMicros(
    accountBudget.getProposedSpendingLimitMicros() + increaseAmount)
  .build();

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

// Send request to Google Ads API (not shown).
C#
AccountBudgetProposal proposal = new AccountBudgetProposal()
{
  ProposalType = AccountBudgetProposalType.Update,
  AccountBudget = accountBudget.ResourceName,
  ProposedSpendingLimitMicros = accountBudget.ProposedSpendingLimitMicros + increaseAmount
};

AccountBudgetProposalOperation operation = new AccountBudgetProposalOperation()
{
  Create = proposal,
  UpdateMask = new FieldMask()
  {
    Paths = { "proposed_spending_limit_micros" }
  }
};

// Send request to Google Ads API (not shown).
PHP
$accountBudgetProposal = new AccountBudgetProposal([
  'proposal_type' => AccountBudgetProposalType::UPDATE,
  'account_budget' => $accountBudget->getResourceName(),
  'proposed_spending_limit_micros' =>
    $accountBudget->getProposedSpendingLimitMicros() + $increaseAmount
]);

$accountBudgetProposalOperation = new AccountBudgetProposalOperation();
$accountBudgetProposalOperation->setCreate($accountBudgetProposal);
$accountBudgetProposalOperation->setUpdateMask(
  FieldMasks::allSetFieldsOf($accountBudgetProposal)
);

// Send request to Google Ads API (not shown).
Python
account_budget_proposal_operation = client.get_type('AccountBudgetProposalOperation')

proposal = account_budget_proposal_operation.create
proposal.proposal_type = client.get_type('AccountBudgetProposalTypeEnum').AccountBudgetProposalType.UPDATE
proposal.account_budget = account_budget.resource_name
proposal.proposed_spending_limit_micros = account_budget.proposed_spending_limit_micros + increase_amount

field_mask = protobuf_helpers.field_mask(None, proposal._pb)
account_budget_proposal_operation.update_mask.CopyFrom(field_mask)

# Send request to Google Ads API (not shown).
Ruby
proposal = client.resource.account_budget_proposal
proposal.proposal_type = :UPDATE

mask = client.field_mask.with proposal do
  proposal.account_budget = account_budget.resource_name
  proposal.proposed_spending_limit_micros = account_budget.proposed_spending_limit_micros + increase_amount
end

operation = client.operation.account_budget_proposal do |op|
  op.create = proposal
  op.update_mask = mask
end

# Send request to Google Ads API (not shown).
Perl
my $account_budget_proposal =
  Google::Ads::GoogleAds::V25::Resources::AccountBudgetProposal->new({
    proposalType => UPDATE,
    accountBudget => $account_budget->{resourceName},
    proposedSpendingLimitMicros => $account_budget->{proposedSpendingLimitMicros} + $increaseAmount});

my $account_budget_proposal_operation =
  Google::Ads::GoogleAds::V25::Services::AccountBudgetProposalService::AccountBudgetProposalOperation
    ->new({
      create => $account_budget_proposal,
      updateMask => all_set_fields_of($account_budget_proposal)});

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

账号预算链

除了更新现有预算之外,Google Ads 还允许您将多个账号预算串联起来,以便按顺序使用。在下面的示例中,客户每个月的支出限额并不相同。

图表:显示了一系列账号预算,每个月的支出限额各不相同。
账号预算链示例。

为此,您可以创建三个 AccountBudgetProposal 对象,并在单独的 MutateAccountBudgetProposal 请求中将每个 AccountBudgetProposalOperation 发送到 AccountBudgetProposalService(因为 MutateAccountBudgetProposalRequest 每次调用只接受一个 operation)。

以下代码段演示了如何使用现有结算设置创建此类链。

Java
AccountBudgetProposal proposalMay = AccountBudgetProposal.newBuilder()
  .setBillingSetup(ResourceNames.billingSetup(customerId, billingSetupId))
  .setProposalType(AccountBudgetProposalType.CREATE)
  .setProposedName("May budget")
  .setProposedStartDateTime("2027-05-01 00:00:00")
  .setProposedEndDateTime("2027-06-01 00:00:00")
  .setProposedSpendingLimitMicros(1_000_000_000L)
  .build();

AccountBudgetProposalOperation operationMay = AccountBudgetProposalOperation.newBuilder()
  .setCreate(proposalMay)
  .build();

AccountBudgetProposal proposalJune = AccountBudgetProposal.newBuilder()
  .setBillingSetup(ResourceNames.billingSetup(customerId, billingSetupId))
  .setProposalType(AccountBudgetProposalType.CREATE)
  .setProposedName("June budget")
  .setProposedStartDateTime("2027-06-01 00:00:00")
  .setProposedEndDateTime("2027-07-01 00:00:00")
  .setProposedSpendingLimitMicros(5_000_000_000L)
  .build();

AccountBudgetProposalOperation operationJune = AccountBudgetProposalOperation.newBuilder()
  .setCreate(proposalJune)
  .build();

AccountBudgetProposal proposalJuly = AccountBudgetProposal.newBuilder()
  .setBillingSetup(ResourceNames.billingSetup(customerId, billingSetupId))
  .setProposalType(AccountBudgetProposalType.CREATE)
  .setProposedName("July budget")
  .setProposedStartDateTime("2027-07-01 00:00:00")
  .setProposedEndDateTime("2027-08-01 00:00:00")
  .setProposedSpendingLimitMicros(1_000_000_000L)
  .build();

AccountBudgetProposalOperation operationJuly = AccountBudgetProposalOperation.newBuilder()
  .setCreate(proposalJuly)
  .build();

// Send requests to Google Ads API, one MutateAccountBudgetProposal call per operation (not shown).
C#
AccountBudgetProposal proposalMay = new AccountBudgetProposal()
{
  BillingSetup = ResourceNames.BillingSetup(customerId, billingSetupId),
  ProposalType = AccountBudgetProposalType.Create,
  ProposedName = "May budget",
  ProposedStartDateTime = "2027-05-01 00:00:00",
  ProposedEndDateTime = "2027-06-01 00:00:00",
  ProposedSpendingLimitMicros = 1_000_000_000
};

AccountBudgetProposalOperation operationMay = new AccountBudgetProposalOperation()
{
  Create = proposalMay
};

AccountBudgetProposal proposalJune = new AccountBudgetProposal()
{
  BillingSetup = ResourceNames.BillingSetup(customerId, billingSetupId),
  ProposalType = AccountBudgetProposalType.Create,
  ProposedName = "June budget",
  ProposedStartDateTime = "2027-06-01 00:00:00",
  ProposedEndDateTime = "2027-07-01 00:00:00",
  ProposedSpendingLimitMicros = 5_000_000_000
};

AccountBudgetProposalOperation operationJune = new AccountBudgetProposalOperation()
{
  Create = proposalJune
};

AccountBudgetProposal proposalJuly = new AccountBudgetProposal()
{
  BillingSetup = ResourceNames.BillingSetup(customerId, billingSetupId),
  ProposalType = AccountBudgetProposalType.Create,
  ProposedName = "July budget",
  ProposedStartDateTime = "2027-07-01 00:00:00",
  ProposedEndDateTime = "2027-08-01 00:00:00",
  ProposedSpendingLimitMicros = 1_000_000_000
};

AccountBudgetProposalOperation operationJuly = new AccountBudgetProposalOperation()
{
  Create = proposalJuly
};

// Send requests to Google Ads API, one MutateAccountBudgetProposal call per operation (not shown).
PHP
$proposalMay = new AccountBudgetProposal([
  'billing_setup' => ResourceNames::forBillingSetup($customerId, $billingSetupId),
  'proposal_type' => AccountBudgetProposalType::CREATE,
  'proposed_name' => 'May budget',
  'proposed_start_date_time' => '2027-05-01 00:00:00',
  'proposed_end_date_time' => '2027-06-01 00:00:00',
  'proposed_spending_limit_micros' => 1000000000
]);
$operationMay = new AccountBudgetProposalOperation();
$operationMay->setCreate($proposalMay);

$proposalJune = new AccountBudgetProposal([
  'billing_setup' => ResourceNames::forBillingSetup($customerId, $billingSetupId),
  'proposal_type' => AccountBudgetProposalType::CREATE,
  'proposed_name' => 'June budget',
  'proposed_start_date_time' => '2027-06-01 00:00:00',
  'proposed_end_date_time' => '2027-07-01 00:00:00',
  'proposed_spending_limit_micros' => 5000000000
]);
$operationJune = new AccountBudgetProposalOperation();
$operationJune->setCreate($proposalJune);

$proposalJuly = new AccountBudgetProposal([
  'billing_setup' => ResourceNames::forBillingSetup($customerId, $billingSetupId),
  'proposal_type' => AccountBudgetProposalType::CREATE,
  'proposed_name' => 'July budget',
  'proposed_start_date_time' => '2027-07-01 00:00:00',
  'proposed_end_date_time' => '2027-08-01 00:00:00',
  'proposed_spending_limit_micros' => 1000000000
]);
$operationJuly = new AccountBudgetProposalOperation();
$operationJuly->setCreate($proposalJuly);

// Send requests to Google Ads API, one MutateAccountBudgetProposal call per operation (not shown).
Python
billing_setup_service = client.get_service('BillingSetupService')

may_account_budget_proposal_operation = client.get_type('AccountBudgetProposalOperation')
proposal_may = may_account_budget_proposal_operation.create
proposal_may.proposal_type = client.get_type('AccountBudgetProposalTypeEnum').AccountBudgetProposalType.CREATE
proposal_may.billing_setup = billing_setup_service.billing_setup_path(customer_id, billing_setup_id)
proposal_may.proposed_name = 'May budget'
proposal_may.proposed_start_date_time = '2027-05-01 00:00:00'
proposal_may.proposed_end_date_time = '2027-06-01 00:00:00'
proposal_may.proposed_spending_limit_micros = 1000000000

june_account_budget_proposal_operation = client.get_type('AccountBudgetProposalOperation')
proposal_june = june_account_budget_proposal_operation.create
proposal_june.proposal_type = client.get_type('AccountBudgetProposalTypeEnum').AccountBudgetProposalType.CREATE
proposal_june.billing_setup = billing_setup_service.billing_setup_path(customer_id, billing_setup_id)
proposal_june.proposed_name = 'June budget'
proposal_june.proposed_start_date_time = '2027-06-01 00:00:00'
proposal_june.proposed_end_date_time = '2027-07-01 00:00:00'
proposal_june.proposed_spending_limit_micros = 5000000000

july_account_budget_proposal_operation = client.get_type('AccountBudgetProposalOperation')
proposal_july = july_account_budget_proposal_operation.create
proposal_july.proposal_type = client.get_type('AccountBudgetProposalTypeEnum').AccountBudgetProposalType.CREATE
proposal_july.billing_setup = billing_setup_service.billing_setup_path(customer_id, billing_setup_id)
proposal_july.proposed_name = 'July budget'
proposal_july.proposed_start_date_time = '2027-07-01 00:00:00'
proposal_july.proposed_end_date_time = '2027-08-01 00:00:00'
proposal_july.proposed_spending_limit_micros = 1000000000

# Send requests to Google Ads API, one MutateAccountBudgetProposal call per operation (not shown).
Ruby
operation_may = client.operation.create_resource.account_budget_proposal do |proposal|
  proposal.billing_setup = client.path.billing_setup(customer_id, billing_setup_id)
  proposal.proposal_type = :CREATE
  proposal.proposed_name = 'May budget'
  proposal.proposed_start_date_time = '2027-05-01 00:00:00'
  proposal.proposed_end_date_time = '2027-06-01 00:00:00'
  proposal.proposed_spending_limit_micros = 1_000_000_000
end

operation_june = client.operation.create_resource.account_budget_proposal do |proposal|
  proposal.billing_setup = client.path.billing_setup(customer_id, billing_setup_id)
  proposal.proposal_type = :CREATE
  proposal.proposed_name = 'June budget'
  proposal.proposed_start_date_time = '2027-06-01 00:00:00'
  proposal.proposed_end_date_time = '2027-07-01 00:00:00'
  proposal.proposed_spending_limit_micros = 5_000_000_000
end

operation_july = client.operation.create_resource.account_budget_proposal do |proposal|
  proposal.billing_setup = client.path.billing_setup(customer_id, billing_setup_id)
  proposal.proposal_type = :CREATE
  proposal.proposed_name = 'July budget'
  proposal.proposed_start_date_time = '2027-07-01 00:00:00'
  proposal.proposed_end_date_time = '2027-08-01 00:00:00'
  proposal.proposed_spending_limit_micros = 1_000_000_000
end

# Send requests to Google Ads API, one MutateAccountBudgetProposal call per operation (not shown).
Perl
my $may_proposal =
  Google::Ads::GoogleAds::V25::Resources::AccountBudgetProposal->new({
    billingSetup =>
      Google::Ads::GoogleAds::V25::Utils::ResourceNames::billing_setup(
      $customer_id, $billing_setup_id
      ),
    proposalType => CREATE,
    proposedName => "May budget",
    proposedStartDateTime => "2027-05-01 00:00:00",
    proposedEndDateTime => "2027-06-01 00:00:00",
    proposedSpendingLimitMicros => 1000000000
  });
my $may_operation =
  Google::Ads::GoogleAds::V25::Services::AccountBudgetProposalService::AccountBudgetProposalOperation
    ->new({create => $may_proposal});

my $june_proposal =
  Google::Ads::GoogleAds::V25::Resources::AccountBudgetProposal->new({
    billingSetup =>
      Google::Ads::GoogleAds::V25::Utils::ResourceNames::billing_setup(
      $customer_id, $billing_setup_id
      ),
    proposalType => CREATE,
    proposedName => "June budget",
    proposedStartDateTime => "2027-06-01 00:00:00",
    proposedEndDateTime => "2027-07-01 00:00:00",
    proposedSpendingLimitMicros => 5000000000
  });
my $june_operation =
  Google::Ads::GoogleAds::V25::Services::AccountBudgetProposalService::AccountBudgetProposalOperation
    ->new({create => $june_proposal});

my $july_proposal =
  Google::Ads::GoogleAds::V25::Resources::AccountBudgetProposal->new({
    billingSetup =>
      Google::Ads::GoogleAds::V25::Utils::ResourceNames::billing_setup(
      $customer_id, $billing_setup_id
      ),
    proposalType => CREATE,
    proposedName => "July budget",
    proposedStartDateTime => "2027-07-01 00:00:00",
    proposedEndDateTime => "2027-08-01 00:00:00",
    proposedSpendingLimitMicros => 1000000000
  });
my $july_operation =
  Google::Ads::GoogleAds::V25::Services::AccountBudgetProposalService::AccountBudgetProposalOperation
    ->new({create => $july_proposal});

# Send requests to Google Ads API, one MutateAccountBudgetProposal call per operation (not shown).

请注意每个提案中 AccountBudgetProposalType.CREATE 的用法。这样会创建三个不同的预算,而不是更新同一预算三次。

终止账号预算

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

结束有效账号预算

有效的账号预算是无法移除的。不过,您可以将结束时间设置为当前时间。实现此目的的最简单方法是发送包含 AccountBudgetProposalType.END 的提案。

以下代码段演示了如何结束现有账号预算。

Java
AccountBudgetProposal proposal = AccountBudgetProposal.newBuilder()
  .setProposalType(AccountBudgetProposalType.END)
  .setAccountBudget(accountBudget.getResourceName())
  .build();

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

// Send request to Google Ads API (not shown).
C#
AccountBudgetProposal proposal = new AccountBudgetProposal()
{
  ProposalType = AccountBudgetProposalType.End,
  AccountBudget = accountBudget.ResourceName
};

AccountBudgetProposalOperation operation = new AccountBudgetProposalOperation()
{
  Create = proposal
};

// Send request to Google Ads API (not shown).
PHP
$accountBudgetProposal = new AccountBudgetProposal([
  'proposal_type' => AccountBudgetProposalType::END,
  'account_budget' => $accountBudget->getResourceName()
]);

$accountBudgetProposalOperation = new AccountBudgetProposalOperation();
$accountBudgetProposalOperation->setCreate($accountBudgetProposal);

// Send request to Google Ads API (not shown).
Python
account_budget_proposal_operation = client.get_type('AccountBudgetProposalOperation')
proposal = account_budget_proposal_operation.create
proposal.proposal_type = client.get_type('AccountBudgetProposalTypeEnum').AccountBudgetProposalType.END
proposal.account_budget = account_budget.resource_name

# Send request to Google Ads API (not shown).
Ruby
operation = client.operation.create_resource.account_budget_proposal do |proposal|
  proposal.proposal_type = :END
  proposal.account_budget = account_budget.resource_name
end

# Send request to Google Ads API (not shown).
Perl
my $account_budget_proposal =
  Google::Ads::GoogleAds::V25::Resources::AccountBudgetProposal->new({
    proposalType => END,
    accountBudget => $account_budget->{resourceName}
  });

my $account_budget_proposal_operation =
  Google::Ads::GoogleAds::V25::Services::AccountBudgetProposalService::AccountBudgetProposalOperation
    ->new({create => $account_budget_proposal});

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

这相当于通过将结束日期时间设置为 TimeType.NOW 来更新账号预算。

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

如果您提议了未来开始的账号预算,可以在开始时间之前发送 AccountBudgetProposalType.REMOVE 提案类型来完全移除该预算。

以下代码段演示了如何移除现有的未来账号预算。

Java
AccountBudgetProposal proposal = AccountBudgetProposal.newBuilder()
  .setProposalType(AccountBudgetProposalType.REMOVE)
  .setAccountBudget(accountBudget.getResourceName())
  .build();

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

// Send request to Google Ads API (not shown).
C#
AccountBudgetProposal proposal = new AccountBudgetProposal()
{
  ProposalType = AccountBudgetProposalType.Remove,
  AccountBudget = accountBudget.ResourceName
};

AccountBudgetProposalOperation operation = new AccountBudgetProposalOperation()
{
  Create = proposal
};

// Send request to Google Ads API (not shown).
PHP
$accountBudgetProposal = new AccountBudgetProposal([
  'proposal_type' => AccountBudgetProposalType::REMOVE,
  'account_budget' => $accountBudget->getResourceName()
]);

$accountBudgetProposalOperation = new AccountBudgetProposalOperation();
$accountBudgetProposalOperation->setCreate($accountBudgetProposal);

// Send request to Google Ads API (not shown).
Python
account_budget_proposal_operation = client.get_type('AccountBudgetProposalOperation')
proposal = account_budget_proposal_operation.create
proposal.proposal_type = client.get_type('AccountBudgetProposalTypeEnum').AccountBudgetProposalType.REMOVE
proposal.account_budget = account_budget.resource_name

# Send request to Google Ads API (not shown).
Ruby
operation = client.operation.create_resource.account_budget_proposal do |proposal|
  proposal.proposal_type = :REMOVE
  proposal.account_budget = account_budget.resource_name
end

# Send request to Google Ads API (not shown).
Perl
my $account_budget_proposal =
  Google::Ads::GoogleAds::V25::Resources::AccountBudgetProposal->new({
    proposalType => REMOVE,
    accountBudget => $account_budget->{resourceName}
  });

my $account_budget_proposal_operation =
  Google::Ads::GoogleAds::V25::Services::AccountBudgetProposalService::AccountBudgetProposalOperation
    ->new({create => $account_budget_proposal});

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