계정 예산

계정 예산은 지출 한도, 시작 시간, 종료 시간과 같은 예산 속성을 정의하여 특정 기간 동안 계정에서 지출할 수 있는 금액을 관리합니다. 어떤 특정 결제 계정에 청구할지 나타내기 위해 계정의 결제 설정 중 하나를 가리켜야 합니다. AccountBudgetProposal 객체를 전송하여 Google Ads API에서 AccountBudget를 생성, 업데이트, 삭제할 수 있습니다.

AccountBudget 객체는 제안을 적용한 최종 결과를 나타냅니다. 제안이 승인되면 변경사항 (조정 대상)에 따라 새 계정 예산이 생성되거나 기존 예산이 업데이트됩니다. 이는 요청에 지정된 proposal_type에 따라 다릅니다.

AccountBudgetProposalType 설명
CREATE 사용하기 전에 승인을 받아야 하는 새 계정 예산을 만듭니다.
UPDATE 기존 계정 예산을 수정합니다.
END 계정 예산의 종료 시간을 현재 시간으로 설정합니다.
REMOVE 시작 시간 전에 계정 예산을 삭제합니다.

다음 섹션에서는 각 제안서 유형의 동작을 설명합니다.

계정 예산 제안 만들기

새 계정 예산을 만들면 고객의 지출 행동을 관리할 수 있습니다. AccountBudgetProposalService를 사용하여 새 AccountBudgetProposal을 만듭니다. 새 예산을 만들어야 함을 지정하려면 proposal_type을 CREATE로 설정해야 합니다. 다른 작업은 이 가이드의 관리 섹션을 참고하세요.

쓰기 액세스 권한이 있는 결제 계정으로 결제 설정을 사용해야 합니다. 자세한 내용은 결제 설정 가이드를 참고하세요.

다음 예에서는 새 예산 제안을 만드는 방법을 보여줍니다.

자바

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 요청을 전송하여 대기 중인 전체 예산 제안을 삭제할 수 있습니다. 하지만 예산 제안은 일반적으로 몇 분 이내에 적용됩니다.

자바
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 쿼리에서 선택할 수 있습니다 (예: 연결된 AccountBudgetProposal 객체의 리소스 이름인 account_budget_proposal은 account_budget.pending_proposal.account_budget_proposal로 쿼리됨).

기존 계정 예산 관리

고객의 계정 예산을 만든 후 AccountBudgetProposalService를 사용하여 예산 매개변수를 관리할 수 있습니다. 가장 일반적인 관리 작업은 proposed_spending_limit_micros 및 proposed_end_date_time 필드를 업데이트하는 것입니다. 변경 가능한 필드의 전체 목록은 AccountBudgetProposal 참고 문서를 참고하세요.

기존 계정 예산을 업데이트하거나 완전히 새로운 예산을 만들 수 있습니다. 여기에는 두 가지 모두 표시됩니다.

기존 계정 예산 업데이트

AccountBudgetProposalType이 UPDATE로 설정된 AccountBudgetProposal 객체를 전송하여 기존 계정 예산 필드를 업데이트할 수 있습니다. 작업의 update_mask 인수에서 업데이트되는 필드도 표시해야 합니다.

다음 스니펫은 기존 계정 예산의 제안된 지출 한도를 업데이트하는 방법을 보여줍니다.

자바
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 객체 3개를 만들고 각 AccountBudgetProposalOperation를 별도의 MutateAccountBudgetProposal 요청에서 AccountBudgetProposalService에 전송하면 됩니다 (MutateAccountBudgetProposalRequest는 호출당 하나의 operation를 허용하므로).

다음 스니펫은 기존 결제 설정을 사용하여 이러한 체인을 만드는 방법을 보여줍니다.

자바
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을 사용하여 제안서를 보내는 것입니다.

다음 스니펫은 기존 계정 예산을 종료하는 방법을 보여줍니다.

자바
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 제안 유형을 전송하여 시작 시간 전에 완전히 삭제할 수 있습니다.

다음 스니펫은 기존 미래 계정 예산을 삭제하는 방법을 보여줍니다.

자바
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).