일괄 변경

단일 요청에서 여러 리소스 유형을 변경하거나 모든 변경사항을 통합 엔드포인트로 전송하려면 GoogleAdsService.Mutate를 사용하세요. 지원되는 작업의 전체 목록은 MutateOperation 참조를 확인하세요.

변형 작업

각 MutateGoogleAdsRequest은 mutate_operations 필드에서 반복되는 MutateOperation을 허용합니다.

  • 리소스 변이 작업 (지원되는 모든 버전): 각 항목은 하나의 리소스 유형에 대해 단일 create, update 또는 remove 작업을 지정할 수 있습니다.
  • 작업 작업 (v23 이상): 각 항목은 book_campaigns_operation 또는 quote_campaigns_operation과 같은 작업 작업도 지정할 수 있습니다 (v22에서는 MutateOperation만 리소스 변이 작업을 지원함).

단일 GoogleAdsService.Mutate 호출에서 종속 항목 (예: 캠페인 및 광고 그룹)을 만들려면 MutateOperation 항목 두 개를 만듭니다 (하나는 CampaignOperation을 포함하고 다른 하나는 AdGroupOperation을 포함). 광고 그룹 작업이 동일한 요청에서 이를 참조할 수 있도록 음수 ID (예: customers/CUSTOMER_ID/campaigns/-1)가 있는 임시 리소스 이름을 캠페인에 할당합니다.

Python

import uuid

campaign_budget_service = client.get_service("CampaignBudgetService")
campaign_service = client.get_service("CampaignService")
googleads_service = client.get_service("GoogleAdsService")

campaign_budget_resource_name = campaign_budget_service.campaign_budget_path(
    customer_id, budget_id
)
temp_campaign_resource_name = campaign_service.campaign_path(customer_id, "-1")

mutate_operation1 = client.get_type("MutateOperation")
campaign = mutate_operation1.campaign_operation.create
campaign.resource_name = temp_campaign_resource_name
campaign.name = f"Bulk Mutate Campaign #{uuid.uuid4()}"
campaign.advertising_channel_type = (
    client.enums.AdvertisingChannelTypeEnum.SEARCH
)
campaign.status = client.enums.CampaignStatusEnum.PAUSED
campaign.manual_cpc = client.get_type("ManualCpc")
campaign.campaign_budget = campaign_budget_resource_name
campaign.contains_eu_political_advertising = (
    client.enums.EuPoliticalAdvertisingStatusEnum.DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING
)

mutate_operation2 = client.get_type("MutateOperation")
ad_group = mutate_operation2.ad_group_operation.create
ad_group.name = "Bulk Mutate Ad Group"
ad_group.campaign = temp_campaign_resource_name
ad_group.status = client.enums.AdGroupStatusEnum.ENABLED

response = googleads_service.mutate(
    customer_id=customer_id,
    mutate_operations=[mutate_operation1, mutate_operation2],
)

for op_response in response.mutate_operation_responses:
    result_type = op_response._pb.WhichOneof("response")
    result = getattr(op_response, result_type)
    print(f"Created {result_type}: {result.resource_name}")

Ruby

campaign_budget_resource_name =
  client.path.campaign_budget(customer_id, budget_id)
temp_campaign_resource_name =
  client.path.campaign(customer_id, -1)

mutate_operation1 = client.operation.mutate do |m|
  m.campaign_operation = client.operation.create_resource.campaign do |c|
    c.resource_name = temp_campaign_resource_name
    c.name = "Bulk Mutate Campaign #{(Time.new.to_f * 1000).to_i}"
    c.advertising_channel_type = :SEARCH
    c.status = :PAUSED
    c.manual_cpc = client.resource.manual_cpc
    c.campaign_budget = campaign_budget_resource_name
    c.contains_eu_political_advertising = :DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING
  end
end

mutate_operation2 = client.operation.mutate do |m|
  m.ad_group_operation = client.operation.create_resource.ad_group do |ag|
    ag.name = "Bulk Mutate Ad Group"
    ag.campaign = temp_campaign_resource_name
    ag.status = :ENABLED
  end
end

response = client.service.google_ads.mutate(
  customer_id: customer_id,
  mutate_operations: [mutate_operation1, mutate_operation2]
)

response.mutate_operation_responses.each do |op_response|
  result = op_response.send(op_response.response)
  puts "Created #{op_response.response}: #{result.resource_name}"
end

원자성 및 부분 실패

기본적으로 GoogleAdsService.Mutate 요청의 작업은 원자적으로 실행됩니다. 모든 작업이 함께 성공하거나 작업에 오류가 포함된 경우 전체 요청이 실패합니다.

개별 리소스 서비스와 마찬가지로 이 엔드포인트는 다음 옵션을 지원합니다.

  • 부분 실패 (partial_failure = true): 유효한 작업을 커밋하고 partial_failure_error에서 실패한 작업의 오류를 반환합니다.
  • 유효성 검사 모드 (validate_only = true): 계정에 변경사항을 커밋하지 않고 오류가 있는지 작업을 확인합니다.
    • 리소스 변이 작업: 유효성 검사 오류만 반환하고 결과를 생략합니다.
    • 작업 작업 (v23 이상): 유효성 검사가 성공하면 작업 결과 (예: quote_campaigns_result 또는 book_campaigns_result)를 반환합니다. 유효성 검사 오류가 발생하면 작업 결과가 MutateOperationResponse에서 생략됩니다 (견적은 ErrorDetails.reservation_error_details에 계속 반환될 수 있음). quote_campaigns_operation에는 validate_only = true 및 partial_failure = false가 필요합니다.