最小要件を満たしていることを確認します。デマンド ジェネレーション キャンペーンのアセットは、Discover や YouTube など、視覚とエンターテイメントを重視したサーフェスに配信されるため、高い品質基準を満たしている必要があります。
デマンド ジェネレーション キャンペーンを作成するには:
- 予算を作成する。
- 適切な入札戦略を使用してデマンド ジェネレーション キャンペーンを作成します。
- タイプのない広告グループを作成します。
- オーディエンスを作成します。
- アセットとデマンド ジェネレーション広告を作成します。
GoogleAdsService.Mutate メソッドを使用して、必要なすべてのエンティティを 1 つの API リクエストで作成することをおすすめします。
Java
This example is not yet available in Java; you can take a look at the other languages.
C#
// The below methods create and return MutateOperations that we later provide to // the GoogleAdsService.Mutate method in order to create the entities in a single // request. Since the entities for a Demand Gen campaign are closely tied to one-another // it's considered a best practice to create them in a single Mutate request; the // entities will either all complete successfully or fail entirely, leaving no // orphaned entities. See: // https://developers.google.com/google-ads/api/docs/mutating/overview MutateOperation campaignBudgetOperation = CreateCampaignBudgetOperation(budgetResourceName); MutateOperation campaignOperation = CreateDemandGenCampaignOperation(campaignResourceName, budgetResourceName); MutateOperation adGroupOperation = CreateAdGroupOperation(adGroupResourceName, campaignResourceName); // Send the operations in a single mutate request. MutateGoogleAdsRequest mutateGoogleAdsRequest = new MutateGoogleAdsRequest { CustomerId = customerId.ToString() }; // It's important to create these entities in this order because they depend on // each other, for example the ad group depends on the // campaign, and the ad group ad depends on the ad group. mutateGoogleAdsRequest.MutateOperations.Add(campaignBudgetOperation); mutateGoogleAdsRequest.MutateOperations.Add(campaignOperation); mutateGoogleAdsRequest.MutateOperations.Add(adGroupOperation); mutateGoogleAdsRequest.MutateOperations.AddRange( CreateAssetOperations( videoAssetResourceName, videoId, logoResourceName, client.Config ) ); mutateGoogleAdsRequest.MutateOperations.Add( CreateDemandGenAdOperation( adGroupResourceName, videoAssetResourceName, logoResourceName ) ); MutateGoogleAdsResponse response = googleAdsServiceClient.Mutate(mutateGoogleAdsRequest);
PHP
This example is not yet available in PHP; you can take a look at the other languages.
Python
# The below methods create and return MutateOperations that we later provide # to the GoogleAdsService.Mutate method in order to create the entities in a # single request. Since the entities for a Demand Gen campaign are closely # tied to one-another it's considered a best practice to create them in a # single Mutate request; the entities will either all complete successfully # or fail entirely, leaving no orphaned entities. See: # https://developers.google.com/google-ads/api/docs/mutating/overview mutate_operations: List[MutateOperation] = [ # It's important to create these entities in this order because they # depend on each other, for example the ad group depends on the # campaign, and the ad group ad depends on the ad group. create_campaign_budget_operation(client, budget_resource_name), create_demand_gen_campaign_operation( client, campaign_resource_name, budget_resource_name ), create_ad_group_operation( client, ad_group_resource_name, campaign_resource_name ), *create_asset_operations( # Use iterable unpacking client, video_asset_resource_name, video_id, logo_asset_resource_name, ), create_demand_gen_ad_operation( client, ad_group_resource_name, video_asset_resource_name, logo_asset_resource_name, ), ] # Send the operations in a single mutate request. googleads_service.mutate( customer_id=customer_id, mutate_operations=mutate_operations )
Ruby
This example is not yet available in Ruby; you can take a look at the other languages.
Perl
This example is not yet available in Perl; you can take a look at the other languages.
予算の作成
予算を作成します。デマンド ジェネレーション キャンペーンでは共有予算を使用できません。1 日の予算として十分な金額(目標コンバージョン単価の 15 倍以上)をアカウントに設定することをおすすめします。詳細
Java
private static String addCampaignBudget(GoogleAdsClient googleAdsClient, long customerId) { CampaignBudget budget = CampaignBudget.newBuilder() .setName("Interplanetary Cruise Budget #" + getPrintableDateTime()) .setDeliveryMethod(BudgetDeliveryMethod.STANDARD) .setAmountMicros(500_000) .build(); CampaignBudgetOperation op = CampaignBudgetOperation.newBuilder().setCreate(budget).build(); try (CampaignBudgetServiceClient campaignBudgetServiceClient = googleAdsClient.getLatestVersion().createCampaignBudgetServiceClient()) { MutateCampaignBudgetsResponse response = campaignBudgetServiceClient.mutateCampaignBudgets( Long.toString(customerId), ImmutableList.of(op)); String budgetResourceName = response.getResults(0).getResourceName(); System.out.printf("Added budget: %s%n", budgetResourceName); return budgetResourceName; } }
C#
private static string CreateBudget(GoogleAdsClient client, long customerId) { // Get the BudgetService. CampaignBudgetServiceClient budgetService = client.GetService( Services.V21.CampaignBudgetService); // Create the campaign budget. CampaignBudget budget = new CampaignBudget() { Name = "Interplanetary Cruise Budget #" + ExampleUtilities.GetRandomString(), DeliveryMethod = BudgetDeliveryMethod.Standard, AmountMicros = 500000 }; // Create the operation. CampaignBudgetOperation budgetOperation = new CampaignBudgetOperation() { Create = budget }; // Create the campaign budget. MutateCampaignBudgetsResponse response = budgetService.MutateCampaignBudgets( customerId.ToString(), new CampaignBudgetOperation[] { budgetOperation }); return response.Results[0].ResourceName; }
PHP
private static function addCampaignBudget(GoogleAdsClient $googleAdsClient, int $customerId) { // Creates a campaign budget. $budget = new CampaignBudget([ 'name' => 'Interplanetary Cruise Budget #' . Helper::getPrintableDatetime(), 'delivery_method' => BudgetDeliveryMethod::STANDARD, 'amount_micros' => 500000 ]); // Creates a campaign budget operation. $campaignBudgetOperation = new CampaignBudgetOperation(); $campaignBudgetOperation->setCreate($budget); // Issues a mutate request. $campaignBudgetServiceClient = $googleAdsClient->getCampaignBudgetServiceClient(); $response = $campaignBudgetServiceClient->mutateCampaignBudgets( MutateCampaignBudgetsRequest::build($customerId, [$campaignBudgetOperation]) ); /** @var CampaignBudget $addedBudget */ $addedBudget = $response->getResults()[0]; printf("Added budget named '%s'%s", $addedBudget->getResourceName(), PHP_EOL); return $addedBudget->getResourceName(); }
Python
# Create a budget, which can be shared by multiple campaigns. campaign_budget_operation: CampaignBudgetOperation = client.get_type( "CampaignBudgetOperation" ) campaign_budget: CampaignBudget = campaign_budget_operation.create campaign_budget.name = f"Interplanetary Budget {uuid.uuid4()}" campaign_budget.delivery_method = ( client.enums.BudgetDeliveryMethodEnum.STANDARD ) campaign_budget.amount_micros = 500000 # Add budget. campaign_budget_response: MutateCampaignBudgetsResponse try: budget_operations: List[CampaignBudgetOperation] = [ campaign_budget_operation ] campaign_budget_response = ( campaign_budget_service.mutate_campaign_budgets( customer_id=customer_id, operations=budget_operations, ) ) except GoogleAdsException as ex: handle_googleads_exception(ex)
Ruby
# Create a budget, which can be shared by multiple campaigns. campaign_budget = client.resource.campaign_budget do |cb| cb.name = "Interplanetary Budget #{(Time.new.to_f * 1000).to_i}" cb.delivery_method = :STANDARD cb.amount_micros = 500000 end operation = client.operation.create_resource.campaign_budget(campaign_budget) # Add budget. return_budget = client.service.campaign_budget.mutate_campaign_budgets( customer_id: customer_id, operations: [operation], )
Perl
# Create a campaign budget, which can be shared by multiple campaigns. my $campaign_budget = Google::Ads::GoogleAds::V21::Resources::CampaignBudget->new({ name => "Interplanetary budget #" . uniqid(), deliveryMethod => STANDARD, amountMicros => 500000 }); # Create a campaign budget operation. my $campaign_budget_operation = Google::Ads::GoogleAds::V21::Services::CampaignBudgetService::CampaignBudgetOperation ->new({create => $campaign_budget}); # Add the campaign budget. my $campaign_budgets_response = $api_client->CampaignBudgetService()->mutate({ customerId => $customer_id, operations => [$campaign_budget_operation]});
キャンペーンと入札戦略を作成する
予算を作成したら、キャンペーンを作成できます。
デマンド ジェネレーション キャンペーンの AdvertisingChannelType
は DEMAND_GEN
です。AdvertisingChannelSubType
は設定しないでください。
キャンペーンのコンバージョン目標を設定します。
サポートされている入札戦略は、クリック数の最大化、目標アクション単価、コンバージョン数の最大化、目標広告費用対効果です。
Java
This example is not yet available in Java; you can take a look at the other languages.
C#
private MutateOperation CreateDemandGenCampaignOperation( string campaignResourceName, string budgetResourceName) { return new MutateOperation { CampaignOperation = new CampaignOperation { Create = new Campaign { Name = $"Demand Gen #{ExampleUtilities.GetRandomString()}", // Set the campaign status as PAUSED. Status = CampaignStatus.Paused, // AdvertisingChannelType must be DEMAND_GEN. AdvertisingChannelType = AdvertisingChannelType.DemandGen, // Assign the resource name with a temporary ID. ResourceName = campaignResourceName, // Set the budget using the given budget resource name. CampaignBudget = budgetResourceName, // Use the Target CPA bidding strategy. TargetCpa = new TargetCpa() { TargetCpaMicros = 1_000_000, }, ContainsEuPoliticalAdvertising = EuPoliticalAdvertisingStatus.DoesNotContainEuPoliticalAdvertising } } }; }
PHP
This example is not yet available in PHP; you can take a look at the other languages.
Python
def create_demand_gen_campaign_operation( client: GoogleAdsClient, campaign_resource_name: str, budget_resource_name: str, ) -> MutateOperation: """Creates a MutateOperation that creates a new Campaign. A temporary ID will be assigned to this campaign so that it can be referenced by other objects being created in the same Mutate request. Args: client: An initialized GoogleAdsClient instance. campaign_resource_name: The temporary resource name of the campaign. budget_resource_name: The resource name of the budget to assign. Returns: A MutateOperation for creating a Campaign. """ mutate_operation: MutateOperation = client.get_type("MutateOperation") campaign_operation: CampaignOperation = mutate_operation.campaign_operation campaign: Campaign = campaign_operation.create campaign.name = f"Demand Gen #{uuid4()}" # Set the campaign status as PAUSED. The campaign is the only entity in the # mutate request that should have its status set. campaign.status = client.enums.CampaignStatusEnum.PAUSED # AdvertisingChannelType must be DEMAND_GEN. campaign.advertising_channel_type = ( client.enums.AdvertisingChannelTypeEnum.DEMAND_GEN ) # Assign the resource name with a temporary ID. campaign.resource_name = campaign_resource_name # Set the budget using the given budget resource name. campaign.campaign_budget = budget_resource_name # Use the Target CPA bidding strategy. campaign.bidding_strategy_type = ( client.enums.BiddingStrategyTypeEnum.TARGET_CPA ) campaign.target_cpa.target_cpa_micros = 1_000_000 return mutate_operation
Ruby
This example is not yet available in Ruby; you can take a look at the other languages.
Perl
This example is not yet available in Perl; you can take a look at the other languages.
広告グループの作成
タイプのない広告グループを作成し、デマンド ジェネレーション キャンペーンに関連付けます。
デマンド ジェネレーションでは、地域とターゲット言語のグループ条件を広告グループ単位で設定できます。
広告グループを作成する際に、チャネル コントロールを設定して、広告の掲載先を指定することもできます。
Java
This example is not yet available in Java; you can take a look at the other languages.
C#
private MutateOperation CreateAdGroupOperation( string adGroupResourceName, string campaignResourceName ) { return new MutateOperation { AdGroupOperation = new AdGroupOperation { // Creates an ad group. Create = new AdGroup { ResourceName = adGroupResourceName, Name = $"Earth to Mars Cruises #{ExampleUtilities.GetRandomString()}", Status = AdGroupStatus.Enabled, Campaign = campaignResourceName, // Select the specific channels for the ad group. // For further information on Demand Gen channel controls, see // https://developers.google.com/google-ads/api/docs/demand-gen/channel-controls DemandGenAdGroupSettings = new DemandGenAdGroupSettings { ChannelControls = new DemandGenChannelControls { SelectedChannels = new DemandGenSelectedChannels { Gmail = false, Discover = false, Display = false, YoutubeInFeed = true, YoutubeInStream = true, YoutubeShorts = true, } } } } } }; }
PHP
This example is not yet available in PHP; you can take a look at the other languages.
Python
def create_ad_group_operation( client: GoogleAdsClient, ad_group_resource_name: str, campaign_resource_name: str, ) -> MutateOperation: """Creates a MutateOperation that creates a new AdGroup. Args: client: An initialized GoogleAdsClient instance. ad_group_resource_name: The temporary resource name of the ad group. campaign_resource_name: The temporary resource name of the campaign the ad group will belong to. Returns: A MutateOperation for creating an AdGroup. """ mutate_operation: MutateOperation = client.get_type("MutateOperation") ad_group_operation: AdGroupOperation = mutate_operation.ad_group_operation # Creates an ad group. ad_group: AdGroup = ad_group_operation.create ad_group.resource_name = ad_group_resource_name ad_group.name = f"Earth to Mars Cruises #{uuid4()}" ad_group.status = client.enums.AdGroupStatusEnum.ENABLED ad_group.campaign = campaign_resource_name # Select the specific channels for the ad group. For further information on # Demand Gen channel controls, see: # https://developers.google.com/google-ads/api/docs/demand-gen/channel-controls selected_channel_controls = ( ad_group.demand_gen_ad_group_settings.channel_controls.selected_channels ) selected_channel_controls.gmail = False selected_channel_controls.discover = False selected_channel_controls.display = False selected_channel_controls.youtube_in_feed = True selected_channel_controls.youtube_in_stream = True selected_channel_controls.youtube_shorts = True return mutate_operation
Ruby
This example is not yet available in Ruby; you can take a look at the other languages.
Perl
This example is not yet available in Perl; you can take a look at the other languages.
オーディエンスを作成
AdGroupCriterion
を使用してオーディエンスを作成して関連付けます。
アセットと広告を作成する
デマンド ジェネレーション キャンペーンでは、次の 3 種類の広告を利用できます。
まず、これらの広告タイプ用のアセットを作成します。各デマンド ジェネレーション広告タイプで利用できるアセットの一覧については、デマンド ジェネレーション キャンペーンのアセットの仕様とベスト プラクティス ガイドをご覧ください。このガイドには、必要なアセットと推奨されるアセットの数に関するガイダンスが記載されています。また、アセットのパフォーマンスを評価してクリエイティブを調整することもおすすめします。レポート セクションでは、デマンド ジェネレーション キャンペーンのパフォーマンス指標を取得する方法について説明しています。
DemandGenCarouselAdInfo
には、AdDemandGenCarouselCardAsset
という追加の特殊なアセットがあります。
アセットと広告を作成したら、広告を広告グループに追加します。
Java
This example is not yet available in Java; you can take a look at the other languages.
C#
private MutateOperation CreateDemandGenAdOperation( string adGroupResourceName, string videoAssetResourceName, string logoResourceName ) { Ad ad = new Ad { Name = "Demand gen video responsive ad", FinalUrls = { "http://example.com/demand_gen" }, DemandGenVideoResponsiveAd = new DemandGenVideoResponsiveAdInfo { BusinessName = new AdTextAsset { Text = "Interplanetary Cruises" }, } }; ad.DemandGenVideoResponsiveAd.Videos.Add(new AdVideoAsset { Asset = videoAssetResourceName }); ad.DemandGenVideoResponsiveAd.LogoImages.Add(new AdImageAsset { Asset = logoResourceName }); ad.DemandGenVideoResponsiveAd.Headlines.Add(new AdTextAsset { Text = "Interplanetary cruises" }); ad.DemandGenVideoResponsiveAd.LongHeadlines.Add(new AdTextAsset { Text = "Travel the World" }); ad.DemandGenVideoResponsiveAd.Descriptions.Add(new AdTextAsset { Text = "Book now for an extra discount" }); return new MutateOperation { AdGroupAdOperation = new AdGroupAdOperation { Create = new AdGroupAd { AdGroup = adGroupResourceName, Ad = ad } } }; }
PHP
This example is not yet available in PHP; you can take a look at the other languages.
Python
def create_demand_gen_ad_operation( client: GoogleAdsClient, ad_group_resource_name: str, video_asset_resource_name: str, logo_asset_resource_name: str, ) -> MutateOperation: """Creates a MutateOperation that creates a new Demand Gen Ad. Args: client: An initialized GoogleAdsClient instance. ad_group_resource_name: The ad group the ad will belong to. video_asset_resource_name: The video asset resource name. logo_asset_resource_name: The logo asset resource name. Returns: A MutateOperation for creating an AdGroupAd. """ mutate_operation: MutateOperation = client.get_type("MutateOperation") ad_group_ad_operation: AdGroupAdOperation = ( mutate_operation.ad_group_ad_operation ) ad_group_ad: AdGroupAd = ad_group_ad_operation.create ad_group_ad.ad_group = ad_group_resource_name ad_group_ad.status = client.enums.AdGroupAdStatusEnum.ENABLED ad: Ad = ad_group_ad.ad ad.name = "Demand gen multi asset ad" ad.final_urls.append(DEFAULT_FINAL_URL) demand_gen_ad: DemandGenVideoResponsiveAdInfo = ( ad.demand_gen_video_responsive_ad ) # Ensure business_name is an AssetLink and assign text to its text_asset.text demand_gen_ad.business_name.text = "Interplanetary Cruises" # If it needs to be an AssetLink to a text asset, # that would require creating another asset. # Create AssetLink for video video_asset_link: AdVideoAsset = client.get_type("AdVideoAsset") video_asset_link.asset = video_asset_resource_name demand_gen_ad.videos.append(video_asset_link) # Create AssetLink for logo logo_image_asset_link: AdImageAsset = client.get_type("AdImageAsset") logo_image_asset_link.asset = logo_asset_resource_name demand_gen_ad.logo_images.append(logo_image_asset_link) # Create AssetLink for headline headline_asset_link: AdTextAsset = client.get_type("AdTextAsset") headline_asset_link.text = "Interplanetary cruises" demand_gen_ad.headlines.append(headline_asset_link) # Create AssetLink for long headline long_headline_asset_link: AdTextAsset = client.get_type("AdTextAsset") long_headline_asset_link.text = "Travel the World" demand_gen_ad.long_headlines.append(long_headline_asset_link) # Create AssetLink for description description_asset_link: AdTextAsset = client.get_type("AdTextAsset") description_asset_link.text = "Book now for an extra discount" demand_gen_ad.descriptions.append(description_asset_link) return mutate_operation
Ruby
This example is not yet available in Ruby; you can take a look at the other languages.
Perl
This example is not yet available in Perl; you can take a look at the other languages.