Page Summary
-
This code example demonstrates how to create a hotel campaign, a hotel ad group, and a hotel ad group ad using the Google Ads API.
-
A prerequisite for running this example is having access to the Hotel Ads Center, which requires integration with Google Hotels.
-
The process involves creating a campaign budget, then a hotel campaign linked to that budget and a specified Hotel Center account ID, followed by a hotel ad group within the campaign, and finally a hotel ad group ad within the ad group.
-
Hotel campaigns have specific settings, including the advertising channel type set to HOTEL, hotel setting info with the Hotel Center ID, and network settings targeting only Google Search.
-
Bidding strategies for hotel campaigns are limited to Manual CPC and Percent CPC, with the example using Percent CPC and allowing a bid ceiling to be set.
Java
// Copyright 2018 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package com.google.ads.googleads.examples.travel ; import static com.google.ads.googleads.examples.utils.CodeSampleHelper.getPrintableDateTime ; import static com.google.ads.googleads.v22.enums.EuPoliticalAdvertisingStatusEnum.EuPoliticalAdvertisingStatus.DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING ; import com.beust.jcommander.Parameter ; import com.google.ads.googleads.examples.utils.ArgumentNames ; import com.google.ads.googleads.examples.utils.CodeSampleParams ; import com.google.ads.googleads.lib.GoogleAdsClient ; import com.google.ads.googleads.v22.common.HotelAdInfo ; import com.google.ads.googleads.v22.common.PercentCpc ; import com.google.ads.googleads.v22.enums.AdGroupAdStatusEnum.AdGroupAdStatus ; import com.google.ads.googleads.v22.enums.AdGroupStatusEnum.AdGroupStatus ; import com.google.ads.googleads.v22.enums.AdGroupTypeEnum.AdGroupType ; import com.google.ads.googleads.v22.enums.AdvertisingChannelTypeEnum.AdvertisingChannelType ; import com.google.ads.googleads.v22.enums.BudgetDeliveryMethodEnum.BudgetDeliveryMethod ; import com.google.ads.googleads.v22.enums.CampaignStatusEnum.CampaignStatus ; import com.google.ads.googleads.v22.errors.GoogleAdsError ; import com.google.ads.googleads.v22.errors.GoogleAdsException ; import com.google.ads.googleads.v22.resources.Ad ; import com.google.ads.googleads.v22.resources.AdGroup ; import com.google.ads.googleads.v22.resources.AdGroupAd ; import com.google.ads.googleads.v22.resources.Campaign ; import com.google.ads.googleads.v22.resources.Campaign.HotelSettingInfo ; import com.google.ads.googleads.v22.resources.Campaign.NetworkSettings ; import com.google.ads.googleads.v22.resources.CampaignBudget ; import com.google.ads.googleads.v22.services.AdGroupAdOperation ; import com.google.ads.googleads.v22.services.AdGroupAdServiceClient ; import com.google.ads.googleads.v22.services.AdGroupOperation ; import com.google.ads.googleads.v22.services.AdGroupServiceClient ; import com.google.ads.googleads.v22.services.CampaignBudgetOperation ; import com.google.ads.googleads.v22.services.CampaignBudgetServiceClient ; import com.google.ads.googleads.v22.services.CampaignOperation ; import com.google.ads.googleads.v22.services.CampaignServiceClient ; import com.google.ads.googleads.v22.services.MutateAdGroupAdResult ; import com.google.ads.googleads.v22.services.MutateAdGroupResult ; import com.google.ads.googleads.v22.services.MutateCampaignBudgetsResponse ; import com.google.ads.googleads.v22.services.MutateCampaignResult ; import com.google.ads.googleads.v22.services.MutateCampaignsResponse ; import com.google.common.collect.ImmutableList ; import java.io.FileNotFoundException ; import java.io.IOException ; import java.util.Collections ; /** * Creates a hotel campaign, a hotel ad group and a hotel ad group ad. * * <p>Prerequisite: You need to have access to the Hotel Ads Center, which can be granted during * integration with Google Hotels. The integration instructions can be found at: * https://support.google.com/hotelprices/answer/6101897. */ public class AddHotelAd { private static class AddHotelAdParams extends CodeSampleParams { @Parameter ( names = ArgumentNames . CUSTOMER_ID , required = true ) private Long customerId ; @Parameter ( names = ArgumentNames . HOTEL_CENTER_ACCOUNT_ID , required = true ) private Long hotelCenterAccountId ; @Parameter ( names = ArgumentNames . CPC_BID_CEILING_MICRO_AMOUNT ) private Long cpcBidCeilingMicroAmount = 20_000_000L ; } public static void main ( String [] args ) { AddHotelAdParams params = new AddHotelAdParams (); if ( ! params . parseArguments ( args )) { // Either pass the required parameters for this example on the command line, or insert them // into the code here. See the parameter class definition above for descriptions. params . customerId = Long . parseLong ( "INSERT_CUSTOMER_ID_HERE" ); params . hotelCenterAccountId = Long . parseLong ( "INSERT_HOTEL_CENTER_ACCOUNT_ID_HERE" ); params . cpcBidCeilingMicroAmount = Long . parseLong ( "INSERT_CPC_BID_CEILING_MICRO_AMOUNT_HERE" ); } GoogleAdsClient googleAdsClient = null ; try { googleAdsClient = GoogleAdsClient . newBuilder (). fromPropertiesFile (). build (); } catch ( FileNotFoundException fnfe ) { System . err . printf ( "Failed to load GoogleAdsClient configuration from file. Exception: %s%n" , fnfe ); System . exit ( 1 ); } catch ( IOException ioe ) { System . err . printf ( "Failed to create GoogleAdsClient. Exception: %s%n" , ioe ); System . exit ( 1 ); } try { new AddHotelAd () . runExample ( googleAdsClient , params . customerId , params . hotelCenterAccountId , params . cpcBidCeilingMicroAmount ); } catch ( GoogleAdsException gae ) { // GoogleAdsException is the base class for most exceptions thrown by an API request. // Instances of this exception have a message and a GoogleAdsFailure that contains a // collection of GoogleAdsErrors that indicate the underlying causes of the // GoogleAdsException. System . err . printf ( "Request ID %s failed due to GoogleAdsException. Underlying errors:%n" , gae . getRequestId ()); int i = 0 ; for ( GoogleAdsError googleAdsError : gae . getGoogleAdsFailure (). getErrorsList ()) { System . err . printf ( " Error %d: %s%n" , i ++ , googleAdsError ); } System . exit ( 1 ); } } /** * Runs the example. * * @param googleAdsClient the Google Ads API client. * @param customerId the client customer ID. * @param hotelCenterAccountId the Hotel Center account ID. * @param cpcBidCeilingMicroAmount the maximum bid limit that can be set when creating a campaign * using the Percent CPC bidding strategy. * @throws GoogleAdsException if an API request failed with one or more service errors. */ private void runExample ( GoogleAdsClient googleAdsClient , long customerId , long hotelCenterAccountId , long cpcBidCeilingMicroAmount ) { // Creates a budget to be used by the campaign that will be created below. String budgetResourceName = addCampaignBudget ( googleAdsClient , customerId ); // Creates a hotel campaign. String campaignResourceName = addHotelCampaign ( googleAdsClient , customerId , budgetResourceName , hotelCenterAccountId , cpcBidCeilingMicroAmount ); // Creates a hotel ad group. String adGroupResourceName = addHotelAdGroup ( googleAdsClient , customerId , campaignResourceName ); // Creates a hotel ad group ad. addHotelAdGroupAd ( googleAdsClient , customerId , adGroupResourceName ); } /** * Creates a new campaign budget in the specified client account. * * @param googleAdsClient the Google Ads API client. * @param customerId the client customer ID. * @return resource name of the newly created budget. * @throws GoogleAdsException if an API request failed with one or more service errors. */ private String addCampaignBudget ( GoogleAdsClient googleAdsClient , long customerId ) { CampaignBudget budget = CampaignBudget . newBuilder () . setName ( "Interplanetary Cruise Budget #" + getPrintableDateTime ()) . setDeliveryMethod ( BudgetDeliveryMethod . STANDARD ) . setAmountMicros ( 5_000_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 a budget with resource name: '%s'%n" , budgetResourceName ); return budgetResourceName ; } } /** * Creates a new hotel campaign in the specified client account. * * @param googleAdsClient the Google Ads API client. * @param customerId the client customer ID. * @param budgetResourceName the resource name of the budget for the campaign. * @param hotelCenterAccountId the Hotel Center account ID. * @param cpcBidCeilingMicroAmount the maximum bid limit that can be set when creating a campaign * using the Percent CPC bidding strategy. * @return resource name of the newly created campaign. * @throws GoogleAdsException if an API request failed with one or more service errors. */ private String addHotelCampaign ( GoogleAdsClient googleAdsClient , long customerId , String budgetResourceName , long hotelCenterAccountId , long cpcBidCeilingMicroAmount ) { // Configures the hotel settings. HotelSettingInfo hotelSettingInfo = HotelSettingInfo . newBuilder (). setHotelCenterId ( hotelCenterAccountId ). build (); // Configures the campaign network options. Only Google Search is allowed for // hotel campaigns. NetworkSettings networkSettings = NetworkSettings . newBuilder (). setTargetGoogleSearch ( true ). build (); // Creates the campaign. Campaign campaign = Campaign . newBuilder () . setName ( "Interplanetary Cruise #" + getPrintableDateTime ()) // Configures settings related to hotel campaigns including advertising channel type // and hotel setting info. . setAdvertisingChannelType ( AdvertisingChannelType . HOTEL ) . setHotelSetting ( hotelSettingInfo ) // Recommendation: Sets the campaign to PAUSED when creating it to prevent // the ads from immediately serving. Set to ENABLED once you've added // targeting and the ads are ready to serve . setStatus ( CampaignStatus . PAUSED ) // Sets the bidding strategy to Percent CPC. Only Manual CPC and Percent CPC can be used // for hotel campaigns. . setPercentCpc ( PercentCpc . newBuilder (). setCpcBidCeilingMicros ( cpcBidCeilingMicroAmount ). build ()) // Sets the budget. . setCampaignBudget ( budgetResourceName ) // Adds the networkSettings configured above. . setNetworkSettings ( networkSettings ) // Declares whether this campaign serves political ads targeting the EU. . setContainsEuPoliticalAdvertising ( DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING ) . build (); // Creates a campaign operation. CampaignOperation operation = CampaignOperation . newBuilder (). setCreate ( campaign ). build (); // Issues a mutate request to add the campaign. try ( CampaignServiceClient campaignServiceClient = googleAdsClient . getLatestVersion (). createCampaignServiceClient ()) { MutateCampaignsResponse response = campaignServiceClient . mutateCampaigns ( Long . toString ( customerId ), Collections . singletonList ( operation )); MutateCampaignResult result = response . getResults ( 0 ); System . out . printf ( "Added a hotel campaign with resource name: '%s'%n" , result . getResourceName ()); return result . getResourceName (); } } /** * Creates a new hotel ad group in the specified campaign. * * @param googleAdsClient the Google Ads API client. * @param customerId the client customer ID. * @param campaignResourceName the resource name of the campaign that the new ad group will belong * to. * @return resource name of the newly created ad group. * @throws GoogleAdsException if an API request failed with one or more service errors. */ private String addHotelAdGroup ( GoogleAdsClient googleAdsClient , long customerId , String campaignResourceName ) { // Creates an ad group. AdGroup adGroup = AdGroup . newBuilder () . setName ( "Earth to Mars Cruises #" + getPrintableDateTime ()) . setCampaign ( campaignResourceName ) // Sets the ad group type to HOTEL_ADS. This cannot be set to other types. . setType ( AdGroupType . HOTEL_ADS ) . setCpcBidMicros ( 1_000_000L ) . setStatus ( AdGroupStatus . ENABLED ) . build (); // Creates an ad group operation. AdGroupOperation operation = AdGroupOperation . newBuilder (). setCreate ( adGroup ). build (); // Issues a mutate request to add an ad group. try ( AdGroupServiceClient adGroupServiceClient = googleAdsClient . getLatestVersion (). createAdGroupServiceClient ()) { MutateAdGroupResult mutateAdGroupResult = adGroupServiceClient . mutateAdGroups ( Long . toString ( customerId ), Collections . singletonList ( operation )) . getResults ( 0 ); System . out . printf ( "Added a hotel ad group with resource name: '%s'%n" , mutateAdGroupResult . getResourceName ()); return mutateAdGroupResult . getResourceName (); } } /** * Creates a new hotel ad group ad in the specified ad group. * * @param googleAdsClient the Google Ads API client. * @param customerId the client customer ID. * @param adGroupResourceName the resource name of the ad group that the new ad group ad will * belong to. * @return resource name of the newly created ad group ad. * @throws GoogleAdsException if an API request failed with one or more service errors. */ private String addHotelAdGroupAd ( GoogleAdsClient googleAdsClient , long customerId , String adGroupResourceName ) { // Creates a new hotel ad. Ad ad = Ad . newBuilder (). setHotelAd ( HotelAdInfo . newBuilder (). build ()). build (); // Creates a new ad group ad and sets the hotel ad to it. AdGroupAd adGroupAd = AdGroupAd . newBuilder () // Sets the ad to the ad created above. . setAd ( ad ) // Set the ad group ad to enabled. Setting this to paused will cause an error // for hotel campaigns. For hotels pausing should happen at either the ad group or // campaign level. . setStatus ( AdGroupAdStatus . ENABLED ) // Sets the ad group. . setAdGroup ( adGroupResourceName ) . build (); // Creates an ad group ad operation. AdGroupAdOperation operation = AdGroupAdOperation . newBuilder (). setCreate ( adGroupAd ). build (); // Issues a mutate request to add an ad group ad. try ( AdGroupAdServiceClient adGroupAdServiceClient = googleAdsClient . getLatestVersion (). createAdGroupAdServiceClient ()) { MutateAdGroupAdResult mutateAdGroupAdResult = adGroupAdServiceClient . mutateAdGroupAds ( Long . toString ( customerId ), Collections . singletonList ( operation )) . getResults ( 0 ); System . out . printf ( "Added a hotel ad group ad with resource name: '%s'%n" , mutateAdGroupAdResult . getResourceName ()); return mutateAdGroupAdResult . getResourceName (); } } }
C#
// Copyright 2019 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. using CommandLine ; using Google.Ads.Gax.Examples ; using Google.Ads.GoogleAds.Lib ; using Google.Ads.GoogleAds.V22.Common ; using Google.Ads.GoogleAds.V22.Errors ; using Google.Ads.GoogleAds.V22.Resources ; using Google.Ads.GoogleAds.V22.Services ; using System ; using static Google . Ads . GoogleAds . V22 . Enums . AdGroupAdStatusEnum . Types ; using static Google . Ads . GoogleAds . V22 . Enums . AdGroupStatusEnum . Types ; using static Google . Ads . GoogleAds . V22 . Enums . AdGroupTypeEnum . Types ; using static Google . Ads . GoogleAds . V22 . Enums . AdvertisingChannelTypeEnum . Types ; using static Google . Ads . GoogleAds . V22 . Enums . BudgetDeliveryMethodEnum . Types ; using static Google . Ads . GoogleAds . V22 . Enums . CampaignStatusEnum . Types ; using static Google . Ads . GoogleAds . V22 . Enums . EuPoliticalAdvertisingStatusEnum . Types ; using static Google . Ads . GoogleAds . V22 . Resources . Campaign . Types ; namespace Google.Ads.GoogleAds.Examples.V22 { /// <summary> /// This code example creates a hotel campaign, a hotel ad group and hotel ad group ad. /// /// Prerequisite: You need to have access to the Hotel Ads Center, which can be granted during /// integration with Google Hotels. The integration instructions can be found at: /// https://support.google.com/hotelprices/answer/6101897. /// </summary> public class AddHotelAd : ExampleBase { /// <summary> /// Command line options for running the <see cref="AddHotelAd"/> example. /// </summary> public class Options : OptionsBase { /// <summary> /// The customer ID for which the call is made. /// </summary> [Option("customerId", Required = true, HelpText = "The customer ID for which the call is made.")] public long CustomerId { get ; set ; } /// <summary> /// The Hotels account ID. You can see how to find the account ID /// in the Hotel Ads Center at: https://support.google.com/hotelprices/answer/6399770. /// This ID is the same account ID that you use in API requests to the Travel /// Partner APIs (https://developers.google.com/hotels/hotel-ads/api-reference/). /// </summary> [Option("hotelCenterAccountId", Required = true, HelpText = "The Hotels account ID. You can see how to find the account ID in the Hotel Ads " + "Center at: https://support.google.com/hotelprices/answer/6399770. This ID is " + "the same account ID that you use in API requests to the Travel Partner APIs " + "(https://developers.google.com/hotels/hotel-ads/api-reference/).")] public long HotelCenterAccountId { get ; set ; } /// <summary> /// The CPC bid ceiling micro amount. /// </summary> [Option("cpcBidCeilingMicroAmount", Required = false, HelpText = "The maximum bid limit that can be set when creating a campaign using the Percent" + " CPC bidding strategy.", Default = CPC_BID_CEILING_MICRO_AMOUNT)] public long CpcBidCeilingMicroAmount { get ; set ; } } /// <summary> /// Main method, to run this code example as a standalone application. /// </summary> /// <param name="args">The command line arguments.</param> public static void Main ( string [] args ) { Options options = ExampleUtilities . ParseCommandLine<Options> ( args ); AddHotelAd codeExample = new AddHotelAd (); Console . WriteLine ( codeExample . Description ); codeExample . Run ( new GoogleAdsClient (), options . CustomerId , options . HotelCenterAccountId , options . CpcBidCeilingMicroAmount ); } // Specify maximum bid limit that can be set when creating a campaign using the Percent CPC // bidding strategy. private const long CPC_BID_CEILING_MICRO_AMOUNT = 20000000 ; /// <summary> /// Returns a description about the code example. /// </summary> public override string Description = > "This code example creates a hotel campaign, a hotel ad group and hotel ad group ad." + "\n\n Prerequisite: You need to have access to the Hotel Ads Center, which can be " + "granted during integration with Google Hotels. The integration instructions can be " + "found at: https://support.google.com/hotelprices/answer/6101897." ; /// <summary> /// Runs the code example. /// </summary> /// <param name="client">The Google Ads client.</param> /// <param name="customerId">The customer ID for which the call is made.</param> /// <param name="hotelCenterAccountId">The Hotel Center account ID.</param> /// <param name="cpcBidCeilingMicroAmount">The CPC bid ceiling micro amount.</param> public void Run ( GoogleAdsClient client , long customerId , long hotelCenterAccountId , long cpcBidCeilingMicroAmount ) { try { // Create a budget to be used by the campaign that will be created below. string budgetResourceName = AddCampaignBudget ( client , customerId ); // Create a hotel campaign. string campaignResourceName = AddHotelCampaign ( client , customerId , budgetResourceName , hotelCenterAccountId , cpcBidCeilingMicroAmount ); // Create a hotel ad group. string adGroupResourceName = AddHotelAdGroup ( client , customerId , campaignResourceName ); // Create a hotel ad group ad. AddHotelAdGroupAd ( client , customerId , adGroupResourceName ); } catch ( GoogleAdsException e ) { Console . WriteLine ( "Failure:" ); Console . WriteLine ( $"Message: {e.Message}" ); Console . WriteLine ( $"Failure: {e.Failure}" ); Console . WriteLine ( $"Request ID: {e.RequestId}" ); throw ; } } /// <summary> /// Creates a new campaign budget in the specified client account. /// </summary> /// <param name="client">The Google Ads client.</param> /// <param name="customerId">The Google Ads customer ID for which the call is made.</param> /// <returns>The resource name of the newly created budget.</returns> private static string AddCampaignBudget ( GoogleAdsClient client , long customerId ) { // Get the CampaignBudgetService. CampaignBudgetServiceClient service = client . GetService ( Services . V22 . CampaignBudgetService ); // Create a campaign budget. CampaignBudget budget = new CampaignBudget () { Name = "Interplanetary Cruise Budget #" + ExampleUtilities . GetRandomString (), DeliveryMethod = BudgetDeliveryMethod . Standard , AmountMicros = 50000000 }; // Create a campaign budget operation. CampaignBudgetOperation campaignBudgetOperation = new CampaignBudgetOperation () { Create = budget }; // Create the budget. MutateCampaignBudgetsResponse response = service . MutateCampaignBudgets ( customerId . ToString (), new CampaignBudgetOperation [] { campaignBudgetOperation }); string budgetResourceName = response . Results [ 0 ]. ResourceName ; Console . WriteLine ( $"Added a budget with resource name: '{budgetResourceName}'." ); return budgetResourceName ; } /// <summary> /// Creates a new hotel campaign in the specified client account. /// </summary> /// <param name="client">The Google Ads client.</param> /// <param name="customerId">The Google Ads customer ID for which the call is made.</param> /// <param name="budgetResourceName">The resource name of budget for a new campaign. /// </param> /// <param name="hotelCenterAccountId">The Hotel Center account ID.</param> /// <param name="cpcBidCeilingMicroAmount">The CPC bid ceiling micro amount.</param> /// <returns>The resource name of the newly created campaign.</returns> private static string AddHotelCampaign ( GoogleAdsClient client , long customerId , string budgetResourceName , long hotelCenterAccountId , long cpcBidCeilingMicroAmount ) { // Get the CampaignService. CampaignServiceClient service = client . GetService ( Services . V22 . CampaignService ); // Create a campaign. Campaign campaign = new Campaign () { Name = "Interplanetary Cruise Campaign #" + ExampleUtilities . GetRandomString (), // Configure settings related to hotel campaigns including advertising channel type // and hotel setting info. AdvertisingChannelType = AdvertisingChannelType . Hotel , HotelSetting = new HotelSettingInfo () { HotelCenterId = hotelCenterAccountId }, // Recommendation: Set the campaign to PAUSED when creating it to prevent // the ads from immediately serving. Set to ENABLED once you've added // targeting and the ads are ready to serve. Status = CampaignStatus . Paused , // Sets the bidding strategy to PercentCpc. Only Manual CPC and Percent CPC can // be used for hotel campaigns. PercentCpc = new PercentCpc () { CpcBidCeilingMicros = cpcBidCeilingMicroAmount }, // Set the budget. CampaignBudget = budgetResourceName , // Configure the campaign network options. Only Google Search is allowed for // hotel campaigns. NetworkSettings = new NetworkSettings () { TargetGoogleSearch = true }, // Declare whether or not this campaign contains political ads targeting the EU. ContainsEuPoliticalAdvertising = EuPoliticalAdvertisingStatus . DoesNotContainEuPoliticalAdvertising , }; // Create a campaign operation. CampaignOperation campaignOperation = new CampaignOperation () { Create = campaign }; // Issue a mutate request to add campaigns. MutateCampaignsResponse response = service . MutateCampaigns ( customerId . ToString (), new CampaignOperation [] { campaignOperation }); return response . Results [ 0 ]. ResourceName ; } /// <summary> /// Adds the hotel ad group. /// </summary> /// <param name="client">The Google Ads client.</param> /// <param name="customerId">The Google Ads customer ID for which the call is made.</param> /// <param name="campaignResourceName">The resource name of campaign that a new ad group /// will belong to.</param> /// <returns>The resource name of the newly created ad group.</returns> private static string AddHotelAdGroup ( GoogleAdsClient client , long customerId , string campaignResourceName ) { // Get the AdGroupService. AdGroupServiceClient service = client . GetService ( Services . V22 . AdGroupService ); // Create an ad group. AdGroup adGroup = new AdGroup () { Name = "Earth to Mars Cruise #" + ExampleUtilities . GetRandomString (), // Sets the campaign. Campaign = campaignResourceName , // Optional: Sets the ad group type to HOTEL_ADS. // This cannot be set to other types. Type = AdGroupType . HotelAds , CpcBidMicros = 10000000 , Status = AdGroupStatus . Enabled }; // Create an ad group operation. AdGroupOperation adGroupOperation = new AdGroupOperation () { Create = adGroup }; // Issue a mutate request to add an ad group. MutateAdGroupsResponse response = service . MutateAdGroups ( customerId . ToString (), new AdGroupOperation [] { adGroupOperation }); return response . Results [ 0 ]. ResourceName ; } /// <summary> /// Creates a new hotel ad group ad in the specified ad group. /// </summary> /// <param name="client">The Google Ads client.</param> /// <param name="customerId">The Google Ads customer ID for which the call is made.</param> /// <param name="adGroupResourceName">The resource name of ad group that a new ad group /// ad will belong to</param> private static void AddHotelAdGroupAd ( GoogleAdsClient client , long customerId , string adGroupResourceName ) { // Get the AdGroupAdService. AdGroupAdServiceClient service = client . GetService ( Services . V22 . AdGroupAdService ); // Create a new ad group ad and sets the hotel ad to it. AdGroupAd adGroupAd = new AdGroupAd () { // Create a new hotel ad. Ad = new Ad () { HotelAd = new HotelAdInfo (), }, // Set the ad group. AdGroup = adGroupResourceName , // Set the ad group ad to enabled. Setting this to paused will cause an error // for hotel campaigns. For hotels pausing should happen at either the ad group or // campaign level. Status = AdGroupAdStatus . Enabled }; // Create an ad group ad operation. AdGroupAdOperation adGroupAdOperation = new AdGroupAdOperation () { Create = adGroupAd }; // Issue a mutate request to add an ad group ad. MutateAdGroupAdsResponse response = service . MutateAdGroupAds ( customerId . ToString (), new AdGroupAdOperation [] { adGroupAdOperation }); MutateAdGroupAdResult addedAdGroupAd = response . Results [ 0 ]; Console . WriteLine ( $"Added a hotel ad group ad with resource name " + $"{addedAdGroupAd.ResourceName}." ); } } }
PHP
< ?php /** * Copyright 2018 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ namespace Google\Ads\GoogleAds\Examples\Travel; require __DIR__ . '/../../vendor/autoload.php'; use GetOpt\GetOpt; use Google\Ads\GoogleAds\Examples\Utils\ArgumentNames; use Google\Ads\GoogleAds\Examples\Utils\ArgumentParser; use Google\Ads\GoogleAds\Examples\Utils\Helper; use Google\Ads\GoogleAds\Lib\V22\GoogleAdsClient; use Google\Ads\GoogleAds\Lib\V22\GoogleAdsClientBuilder; use Google\Ads\GoogleAds\Lib\V22\GoogleAdsException; use Google\Ads\GoogleAds\Lib\OAuth2TokenBuilder; use Google\Ads\GoogleAds\V22\Common\HotelAdInfo; use Google\Ads\GoogleAds\V22\Common\PercentCpc; use Google\Ads\GoogleAds\V22\Enums\AdGroupAdStatusEnum\AdGroupAdStatus; use Google\Ads\GoogleAds\V22\Enums\AdGroupStatusEnum\AdGroupStatus; use Google\Ads\GoogleAds\V22\Enums\AdGroupTypeEnum\AdGroupType; use Google\Ads\GoogleAds\V22\Enums\AdvertisingChannelTypeEnum\AdvertisingChannelType; use Google\Ads\GoogleAds\V22\Enums\BudgetDeliveryMethodEnum\BudgetDeliveryMethod; use Google\Ads\GoogleAds\V22\Enums\CampaignStatusEnum\CampaignStatus; use Google\Ads\GoogleAds\V22\Enums\EuPoliticalAdvertisingStatusEnum\EuPoliticalAdvertisingStatus; use Google\Ads\GoogleAds\V22\Errors\GoogleAdsError; use Google\Ads\GoogleAds\V22\Resources\Ad; use Google\Ads\GoogleAds\V22\Resources\AdGroup; use Google\Ads\GoogleAds\V22\Resources\AdGroupAd; use Google\Ads\GoogleAds\V22\Resources\Campaign; use Google\Ads\GoogleAds\V22\Resources\Campaign\HotelSettingInfo; use Google\Ads\GoogleAds\V22\Resources\Campaign\NetworkSettings; use Google\Ads\GoogleAds\V22\Resources\CampaignBudget; use Google\Ads\GoogleAds\V22\Services\AdGroupAdOperation; use Google\Ads\GoogleAds\V22\Services\AdGroupOperation; use Google\Ads\GoogleAds\V22\Services\CampaignBudgetOperation; use Google\Ads\GoogleAds\V22\Services\CampaignOperation; use Google\Ads\GoogleAds\V22\Services\MutateAdGroupAdsRequest; use Google\Ads\GoogleAds\V22\Services\MutateAdGroupsRequest; use Google\Ads\GoogleAds\V22\Services\MutateCampaignBudgetsRequest; use Google\Ads\GoogleAds\V22\Services\MutateCampaignsRequest; use Google\ApiCore\ApiException; /** * This example creates a hotel campaign, a hotel ad group and hotel ad group ad. * * <p> Prerequisite: You need to have an access to the Hotel Ads Center, which can be granted during * integration with Google Hotels. The integration instructions can be found at: * https://support.google.com/hotelprices/answer/6101897. */ class AddHotelAd { private const CUSTOMER_ID = 'INSERT_CUSTOMER_ID_HERE'; // Specify your Hotels account ID below. You can see how to find the account ID in the Hotel // Ads Center at: https://support.google.com/hotelprices/answer/6399770. // This ID is the same account ID that you use in API requests to the Travel Partner APIs // (https://developers.google.com/hotels/hotel-ads/api-reference/). private const HOTEL_CENTER_ACCOUNT_ID = 'INSERT_HOTEL_CENTER_ACCOUNT_ID_HERE'; // Specify maximum bid limit that can be set when creating a campaign using the Percent CPC // bidding strategy. private const CPC_BID_CEILING_MICRO_AMOUNT = 20000000; public static function main() { // Either pass the required parameters for this example on the command line, or insert them // into the constants above. $options = (new ArgumentParser())->parseCommandArguments([ ArgumentNames::CUSTOMER_ID => GetOpt::REQUIRED_ARGUMENT, ArgumentNames::HOTEL_CENTER_ACCOUNT_ID => GetOpt::REQUIRED_ARGUMENT, ArgumentNames::CPC_BID_CEILING_MICRO_AMOUNT => GetOpt::OPTIONAL_ARGUMENT ]); // Generate a refreshable OAuth2 credential for authentication. $oAuth2Credential = (new OAuth2TokenBuilder())->fromFile()->build(); // Construct a Google Ads client configured from a properties file and the // OAuth2 credentials above. $googleAdsClient = (new GoogleAdsClientBuilder())->fromFile() ->withOAuth2Credential($oAuth2Credential) ->build(); try { self::runExample( $googleAdsClient, $options[ArgumentNames::CUSTOMER_ID] ?: self::CUSTOMER_ID, $options[ArgumentNames::HOTEL_CENTER_ACCOUNT_ID] ?: self::HOTEL_CENTER_ACCOUNT_ID, $options[ArgumentNames::CPC_BID_CEILING_MICRO_AMOUNT] ?: self::CPC_BID_CEILING_MICRO_AMOUNT ); } catch (GoogleAdsException $googleAdsException) { printf( "Request with ID '%s' has failed.%sGoogle Ads failure details:%s", $googleAdsException->getRequestId(), PHP_EOL, PHP_EOL ); foreach ($googleAdsException->getGoogleAdsFailure()->getErrors() as $error) { /** @var GoogleAdsError $error */ printf( "\t%s: %s%s", $error->getErrorCode()->getErrorCode(), $error->getMessage(), PHP_EOL ); } exit(1); } catch (ApiException $apiException) { printf( "ApiException was thrown with message '%s'.%s", $apiException->getMessage(), PHP_EOL ); exit(1); } } /** * Runs the example. * * @param GoogleAdsClient $googleAdsClient the Google Ads API client * @param int $customerId the customer ID * @param int $hotelCenterAccountId the Hotel Center account ID * @param int $cpcBidCeilingMicroAmount the CPC bid ceiling micro amount */ public static function runExample( GoogleAdsClient $googleAdsClient, int $customerId, int $hotelCenterAccountId, int $cpcBidCeilingMicroAmount ) { // Creates a budget to be used by the campaign that will be created below. $budgetResourceName = self::addCampaignBudget($googleAdsClient, $customerId); // Creates a hotel campaign. $campaignResourceName = self::addHotelCampaign( $googleAdsClient, $customerId, $budgetResourceName, $hotelCenterAccountId, $cpcBidCeilingMicroAmount ); // Creates a hotel ad group. $adGroupResourceName = self::addHotelAdGroup($googleAdsClient, $customerId, $campaignResourceName); // Creates a hotel ad group ad. self::addHotelAdGroupAd($googleAdsClient, $customerId, $adGroupResourceName); } /** * Creates a new campaign budget in the specified client account. * * @param GoogleAdsClient $googleAdsClient the Google Ads API client * @param int $customerId the customer ID * @return string the resource name of the newly created budget */ 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, // Sets the amount of budget. 'amount_micros' => 50000000, // Makes the budget explicitly shared. 'explicitly_shared' => true ]); // 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 a budget with resource name '%s'.%s", $addedBudget->getResourceName(), PHP_EOL ); return $addedBudget->getResourceName(); } /** * Creates a new hotel campaign in the specified client account. * * @param GoogleAdsClient $googleAdsClient the Google Ads API client * @param int $customerId the customer ID * @param string $budgetResourceName the resource name of budget for a new campaign * @param int $hotelCenterAccountId the Hotel Center account ID * @param int $cpcBidCeilingMicroAmount the CPC bid ceiling micro amount * @return string the resource name of the newly created campaign */ private static function addHotelCampaign( GoogleAdsClient $googleAdsClient, int $customerId, string $budgetResourceName, int $hotelCenterAccountId, int $cpcBidCeilingMicroAmount ) { // Creates a campaign. $campaign = new Campaign([ 'name' => 'Interplanetary Cruise Campaign #' . Helper::getPrintableDatetime(), // Configures settings related to hotel campaigns including advertising channel type // and hotel setting info. 'advertising_channel_type' => AdvertisingChannelType::HOTEL, 'hotel_setting' => new HotelSettingInfo(['hotel_center_id' => $hotelCenterAccountId]), // Recommendation: Set the campaign to PAUSED when creating it to prevent // the ads from immediately serving. Set to ENABLED once you've added // targeting and the ads are ready to serve. 'status' => CampaignStatus::PAUSED, // Sets the bidding strategy to PercentCpc. Only Manual CPC and Percent CPC can be used // for hotel campaigns. 'percent_cpc' => new PercentCpc([ 'cpc_bid_ceiling_micros' => $cpcBidCeilingMicroAmount ]), // Sets the budget. 'campaign_budget' => $budgetResourceName, // Configures the campaign network options. Only Google Search is allowed for // hotel campaigns. 'network_settings' => new NetworkSettings([ 'target_google_search' => true, ]), // Declare whether or not this campaign serves political ads targeting the EU. 'contains_eu_political_advertising' = > EuPoliticalAdvertisingStatus::DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING ]); // Creates a campaign operation. $campaignOperation = new CampaignOperation(); $campaignOperation->setCreate($campaign); // Issues a mutate request to add campaigns. $campaignServiceClient = $googleAdsClient->getCampaignServiceClient(); $response = $campaignServiceClient->mutateCampaigns( MutateCampaignsRequest::build($customerId, [$campaignOperation]) ); /** @var Campaign $addedCampaign */ $addedCampaign = $response->getResults()[0]; printf( "Added a hotel campaign with resource name '%s'.%s", $addedCampaign->getResourceName(), PHP_EOL ); return $addedCampaign->getResourceName(); } /** * Creates a new hotel ad group in the specified campaign. * * @param GoogleAdsClient $googleAdsClient the Google Ads API client * @param int $customerId the customer ID * @param string $campaignResourceName the resource name of campaign that a new ad group will * belong to * @return string the resource name of the newly created ad group */ private static function addHotelAdGroup( GoogleAdsClient $googleAdsClient, int $customerId, string $campaignResourceName ) { // Creates an ad group. $adGroup = new AdGroup([ 'name' => 'Earth to Mars Cruise #' . Helper::getPrintableDatetime(), // Sets the campaign. 'campaign' => $campaignResourceName, // Sets the ad group type to HOTEL_ADS. // This cannot be set to other types. 'type' => AdGroupType::HOTEL_ADS, 'cpc_bid_micros' => 10000000, 'status' => AdGroupStatus::ENABLED, ]); // Creates an ad group operation. $adGroupOperation = new AdGroupOperation(); $adGroupOperation->setCreate($adGroup); // Issues a mutate request to add an ad group. $adGroupServiceClient = $googleAdsClient->getAdGroupServiceClient(); $response = $adGroupServiceClient->mutateAdGroups( MutateAdGroupsRequest::build($customerId, [$adGroupOperation]) ); /** @var AdGroup $addedAdGroup */ $addedAdGroup = $response->getResults()[0]; printf( "Added a hotel ad group with resource name '%s'.%s", $addedAdGroup->getResourceName(), PHP_EOL ); return $addedAdGroup->getResourceName(); } /** * Creates a new hotel ad group ad in the specified ad group. * * @param GoogleAdsClient $googleAdsClient the Google Ads API client * @param int $customerId the customer ID * @param string $adGroupResourceName the resource name of ad group that a new ad group ad will * belong to */ private static function addHotelAdGroupAd( GoogleAdsClient $googleAdsClient, int $customerId, string $adGroupResourceName ) { // Creates a new hotel ad. $ad = new Ad([ 'hotel_ad' => new HotelAdInfo(), ]); // Creates a new ad group ad and sets the hotel ad to it. $adGroupAd = new AdGroupAd([ 'ad' => $ad, // Set the ad group ad to enabled. Setting this to paused will cause an error // for hotel campaigns. For hotels pausing should happen at either the ad group or // campaign level. 'status' => AdGroupAdStatus::ENABLED, // Sets the ad group. 'ad_group' => $adGroupResourceName ]); // Creates an ad group ad operation. $adGroupAdOperation = new AdGroupAdOperation(); $adGroupAdOperation->setCreate($adGroupAd); // Issues a mutate request to add an ad group ad. $adGroupAdServiceClient = $googleAdsClient->getAdGroupAdServiceClient(); $response = $adGroupAdServiceClient->mutateAdGroupAds( MutateAdGroupAdsRequest::build($customerId, [$adGroupAdOperation]) ); /** @var AdGroupAd $addedAdGroupAd */ $addedAdGroupAd = $response->getResults()[0]; printf( "Added a hotel ad group ad with resource name '%s'.%s", $addedAdGroupAd->getResourceName(), PHP_EOL ); } } AddHotelAd::main();
Python
#!/usr/bin/env python # Copyright 2018 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. """This example adds a hotel campaign, ad group, and ad group ad. Prerequisite: You need to have access to the Hotel Ads Center, which can be granted during integration with Google Hotels. The integration instructions can be found at: https://support.google.com/hotelprices/answer/6101897. """ import argparse import sys import uuid from google.ads.googleads.client import GoogleAdsClient from google.ads.googleads.errors import GoogleAdsException from google.ads.googleads.v22.resources.types.ad_group import AdGroup from google.ads.googleads.v22.resources.types.ad_group_ad import AdGroupAd from google.ads.googleads.v22.resources.types.campaign import Campaign from google.ads.googleads.v22.resources.types.campaign_budget import ( CampaignBudget , ) from google.ads.googleads.v22.services.services.ad_group_ad_service import ( AdGroupAdServiceClient , ) from google.ads.googleads.v22.services.services.ad_group_service import ( AdGroupServiceClient , ) from google.ads.googleads.v22.services.services.campaign_budget_service import ( CampaignBudgetServiceClient , ) from google.ads.googleads.v22.services.services.campaign_service import ( CampaignServiceClient , ) from google.ads.googleads.v22.services.types.ad_group_ad_service import ( AdGroupAdOperation , MutateAdGroupAdsResponse , ) from google.ads.googleads.v22.services.types.ad_group_service import ( AdGroupOperation , MutateAdGroupsResponse , ) from google.ads.googleads.v22.services.types.campaign_budget_service import ( CampaignBudgetOperation , MutateCampaignBudgetsResponse , ) from google.ads.googleads.v22.services.types.campaign_service import ( CampaignOperation , MutateCampaignsResponse , ) def main ( client : GoogleAdsClient , customer_id : str , hotel_center_account_id : int , cpc_bid_ceiling_micro_amount : int , ) - > None : budget_resource_name : str = add_budget ( client , customer_id ) campaign_resource_name : str = add_hotel_campaign ( client , customer_id , budget_resource_name , hotel_center_account_id , cpc_bid_ceiling_micro_amount , ) ad_group_resource_name : str = add_hotel_ad_group ( client , customer_id , campaign_resource_name ) add_hotel_ad ( client , customer_id , ad_group_resource_name ) def add_budget ( client : GoogleAdsClient , customer_id : str ) - > str : campaign_budget_service : CampaignBudgetServiceClient = client . get_service ( "CampaignBudgetService" ) # 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 = ( campaign_budget_service . mutate_campaign_budgets ( customer_id = customer_id , operations = [ campaign_budget_operation ] ) ) budget_resource_name : str = campaign_budget_response . results [ 0 ] . resource_name print ( f "Created budget with resource name ' { budget_resource_name } '." ) return budget_resource_name def add_hotel_ad ( client : GoogleAdsClient , customer_id : str , ad_group_resource_name : str ) - > str : ad_group_ad_service : AdGroupAdServiceClient = client . get_service ( "AdGroupAdService" ) # Creates a new ad group ad and sets the hotel ad to it. ad_group_ad_operation : AdGroupAdOperation = client . get_type ( "AdGroupAdOperation" ) ad_group_ad : AdGroupAd = ad_group_ad_operation . create ad_group_ad . ad_group = ad_group_resource_name # Set the ad group ad to enabled. Setting this to paused will cause an error # for hotel campaigns. For hotels pausing should happen at either the ad group or # campaign level. ad_group_ad . status = client . enums . AdGroupAdStatusEnum . ENABLED client . copy_from ( ad_group_ad . ad . hotel_ad , client . get_type ( "HotelAdInfo" )) # Add the ad group ad. ad_group_ad_response : MutateAdGroupAdsResponse = ( ad_group_ad_service . mutate_ad_group_ads ( customer_id = customer_id , operations = [ ad_group_ad_operation ] ) ) ad_group_ad_resource_name : str = ad_group_ad_response . results [ 0 ] . resource_name print ( f "Created hotel ad with resource name ' { ad_group_ad_resource_name } '." ) return ad_group_resource_name def add_hotel_ad_group ( client : GoogleAdsClient , customer_id : str , campaign_resource_name : str ) - > str : ad_group_service : AdGroupServiceClient = client . get_service ( "AdGroupService" ) # Create ad group. ad_group_operation : AdGroupOperation = client . get_type ( "AdGroupOperation" ) ad_group : AdGroup = ad_group_operation . create ad_group . name = f "Earth to Mars cruise { uuid . uuid4 () } " ad_group . status = client . enums . AdGroupStatusEnum . ENABLED ad_group . campaign = campaign_resource_name # Sets the ad group type to HOTEL_ADS. This cannot be set to other types. ad_group . type_ = client . enums . AdGroupTypeEnum . HOTEL_ADS ad_group . cpc_bid_micros = 10000000 # Add the ad group. ad_group_response : MutateAdGroupsResponse = ( ad_group_service . mutate_ad_groups ( customer_id = customer_id , operations = [ ad_group_operation ] ) ) ad_group_resource_name : str = ad_group_response . results [ 0 ] . resource_name print ( "Added a hotel ad group with resource name ' {ad_group_resource_name} '." ) return ad_group_resource_name def add_hotel_campaign ( client : GoogleAdsClient , customer_id : str , budget_resource_name : str , hotel_center_account_id : int , cpc_bid_ceiling_micro_amount : int , ) - > str : campaign_service : CampaignServiceClient = client . get_service ( "CampaignService" ) # Create campaign. campaign_operation : CampaignOperation = client . get_type ( "CampaignOperation" ) campaign : Campaign = campaign_operation . create campaign . name = f "Interplanetary Cruise Campaign { uuid . uuid4 () } " # Configures settings related to hotel campaigns including advertising # channel type and hotel setting info. campaign . advertising_channel_type = ( client . enums . AdvertisingChannelTypeEnum . HOTEL ) campaign . hotel_setting . hotel_center_id = hotel_center_account_id # Recommendation: Set the campaign to PAUSED when creating it to prevent the # ads from immediately serving. Set to ENABLED once you've added targeting # and the ads are ready to serve. campaign . status = client . enums . CampaignStatusEnum . PAUSED # Set the bidding strategy to PercentCpc. Only Manual CPC and Percent CPC # can be used for hotel campaigns. campaign . percent_cpc . cpc_bid_ceiling_micros = cpc_bid_ceiling_micro_amount # Sets the budget. campaign . campaign_budget = budget_resource_name # Set the campaign network options. Only Google Search is allowed for hotel # campaigns. campaign . network_settings . target_google_search = True # Declare whether or not this campaign serves political ads targeting the # EU. Valid values are: # CONTAINS_EU_POLITICAL_ADVERTISING # DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING campaign . contains_eu_political_advertising = ( client . enums . EuPoliticalAdvertisingStatusEnum . DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING ) # Add the campaign. campaign_response : MutateCampaignsResponse = ( campaign_service . mutate_campaigns ( customer_id = customer_id , operations = [ campaign_operation ] ) ) campaign_resource_name : str = campaign_response . results [ 0 ] . resource_name print ( "Added a hotel campaign with resource name ' {campaign_resource_name} '." ) return campaign_resource_name if __name__ == "__main__" : parser : argparse . ArgumentParser = argparse . ArgumentParser ( description = ( "Adds an expanded text ad to the specified ad group ID, " "for the given customer ID." ) ) # The following argument(s) should be provided to run the example. parser . add_argument ( "-c" , "--customer_id" , type = str , required = True , help = "The Google Ads customer ID." , ) parser . add_argument ( "-b" , "--cpc_bid_ceiling_micro_amount" , type = int , required = True , help = ( "The cpc bid ceiling micro amount for the hotel campaign." ), ) parser . add_argument ( "-a" , "--hotel_center_account_id" , type = int , required = True , help = "The hotel center account ID." , ) args : argparse . Namespace = parser . parse_args () # GoogleAdsClient will read the google-ads.yaml configuration file in the # home directory if none is specified. googleads_client : GoogleAdsClient = GoogleAdsClient . load_from_storage ( version = "v22" ) try : main ( googleads_client , args . customer_id , args . hotel_center_account_id , args . cpc_bid_ceiling_micro_amount , ) except GoogleAdsException as ex : print ( f 'Request with ID " { ex . request_id } " failed with status ' f '" { ex . error . code () . name } " and includes the following errors:' ) for error in ex . failure . errors : print ( f ' \t Error with message " { error . message } ".' ) if error . location : for field_path_element in error . location . field_path_elements : print ( f " \t\t On field: { field_path_element . field_name } " ) sys . exit ( 1 )
Ruby
#!/usr/bin/env ruby # Encoding: utf-8 # # Copyright 2018 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # # This example creates a hotel campaign, a hotel ad group, and a hotel ad group # ad. # # Prerequisite: You need to have access to the Hotel Ads Center, which can be # granted during integration with Google Hotels. The integration instructions # can be found at: # https://support.google.com/hotelprices/answer/6101897 require 'optparse' require 'google/ads/google_ads' require 'date' def add_hotel_ads ( customer_id , hotel_center_account_id , cpc_bid_ceiling_micro_amount ) # GoogleAdsClient will read a config file from # ENV['HOME']/google_ads_config.rb when called without parameters client = Google :: Ads :: GoogleAds :: GoogleAdsClient . new # Create a budget to be used by the campaign that will be created below. budget_resource = add_campaign_budget ( client , customer_id ) # Create a hotel campaign. campaign_resource = add_hotel_campaign ( client , customer_id , budget_resource , hotel_center_account_id , cpc_bid_ceiling_micro_amount ) # Create a hotel ad group. ad_group_resource = add_hotel_ad_group ( client , customer_id , campaign_resource ) # Create a hotel ad group ad. add_hotel_ad_group_ad ( client , customer_id , ad_group_resource ) end # Creates a new campaign budget in the specified client account. def add_campaign_budget ( client , customer_id ) # Create the budget and set relevant fields. campaign_budget_operation = client . operation . create_resource . campaign_budget do | cb | cb . name = generate_random_name_field ( "Interplanetary Cruise Budget" ) cb . delivery_method = :STANDARD cb . amount_micros = 50_000_000 end # Issue a mutate request. campaign_budget_service = client . service . campaign_budget response = campaign_budget_service . mutate_campaign_budgets ( customer_id : customer_id , operations : [ campaign_budget_operation ] , ) # Fetch the new budget's resource name. budget_resource = response . results . first . resource_name puts "Added budget with resource name ' #{ budget_resource } '." budget_resource end # Creates a new campaign in the specified client account. def add_hotel_campaign ( client , customer_id , budget_resource , hotel_center_account_id , cpc_bid_ceiling_micro_amount ) # Create a campaign. campaign_operation = client . operation . create_resource . campaign do | c | c . name = generate_random_name_field ( "Interplanetary Cruise Campaign" ) # Configure settings related to hotel campaigns. c . advertising_channel_type = :HOTEL c . hotel_setting = client . resource . hotel_setting_info do | hsi | hsi . hotel_center_id = hotel_center_account_id end # Recommendation: Set the campaign to PAUSED when creating it to prevent the # ads from immediately serving. Set to ENABLED once you've added targeting and # the ads are ready to serve. c . status = :PAUSED # Set the bidding strategy to PercentCpc. Only Manual CPC and Percent CPC can # be used for hotel campaigns. c . percent_cpc = client . resource . percent_cpc do | pcpc | pcpc . cpc_bid_ceiling_micros = cpc_bid_ceiling_micro_amount end # Set the budget. c . campaign_budget = budget_resource # Configures the campaign network options. Only Google Search is allowed for # hotel campaigns. c . network_settings = client . resource . network_settings do | ns | ns . target_google_search = true end # Declare whether or not this campaign serves political ads targeting the EU. # Valid values are CONTAINS_EU_POLITICAL_ADVERTISING and # DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING. c . contains_eu_political_advertising = :DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING end # Issue a mutate request to add the campaign. campaign_service = client . service . campaign response = campaign_service . mutate_campaigns ( customer_id : customer_id , operations : [ campaign_operation ] , ) # Fetch the new campaign's resource name. campaign_resource = response . results . first . resource_name puts "Added hotel campaign with resource name ' #{ campaign_resource } '." campaign_resource end # Creates a new hotel ad group in the specified campaign. def add_hotel_ad_group ( client , customer_id , campaign_resource ) # Create an ad group. ad_group_operation = client . operation . create_resource . ad_group do | ag | ag . name = generate_random_name_field ( "Earth to Mars Cruise" ) # Set the campaign. ag . campaign = campaign_resource # Optional: Set the ad group type to HOTEL_ADS. # This cannot be set to other types. ag . type = :HOTEL_ADS ag . cpc_bid_micros = 10_000_000 ag . status = :ENABLED end # Issue a mutate request to add the ad group. ad_group_service = client . service . ad_group response = ad_group_service . mutate_ad_groups ( customer_id : customer_id , operations : [ ad_group_operation ] ) # Fetch the new ad group's resource name. ad_group_resource = response . results . first . resource_name puts "Added hotel ad group with resource name ' #{ ad_group_resource } '." ad_group_resource end # Creates a new hotel ad group ad in the specified ad group. def add_hotel_ad_group_ad ( client , customer_id , ad_group_resource ) # Create a new hotel ad. ad_group_ad_operation = client . operation . create_resource . ad_group_ad do | aga | # Create a new ad group ad and sets the hotel ad to it. aga . ad = client . resource . ad do | ad | ad . hotel_ad = client . resource . hotel_ad_info end # Set the ad group ad to enabled. Setting this to paused will cause an error # for hotel campaigns. For hotels pausing should happen at either the ad group or # campaign level. aga . status = :ENABLED # Set the ad group. aga . ad_group = ad_group_resource end # Issue a mutate request to add the ad group ad. ad_group_ad_service = client . service . ad_group_ad response = ad_group_ad_service . mutate_ad_group_ads ( customer_id : customer_id , operations : [ ad_group_ad_operation ] , ) # Fetch the new ad group ad's resource name. ad_group_ad_resource = response . results . first . resource_name puts "Added hotel ad group ad with resource name ' #{ ad_group_ad_resource } '." end # Appends a random number to the provided description text and returns it as a # string-wrapped value def generate_random_name_field ( text ) " #{ text } # #{ ( Time . new . to_f * 100 ) . to_i } " end if __FILE__ == $0 options = {} # The following parameter(s) should be provided to run the example. You can # either specify these by changing the INSERT_XXX_ID_HERE values below, or on # the command line. # # Parameters passed on the command line will override any parameters set in # code. # # Running the example with -h will print the command line usage. options [ :customer_id ] = 'INSERT_CUSTOMER_ID_HERE' options [ :hotel_center_account_id ] = 'INSERT_HOTEL_CENTER_ACCOUNT_ID_HERE' options [ :cpc_bid_ceiling_micro_amount ] = 20_000_000 OptionParser . new do | opts | opts . banner = sprintf ( 'Usage: %s [options]' , File . basename ( __FILE__ )) opts . separator '' opts . separator 'Options:' opts . on ( '-C' , '--customer-id CUSTOMER-ID' , String , 'Customer ID' ) do | v | options [ :customer_id ] = v end opts . on ( '-H' , '--hotel-center-account-id HOTEL-CENTER-ACCOUNT-ID' , Integer , 'Hotel Center Account ID' ) do | v | options [ :hotel_center_account_id ] = v end opts . on ( '-B' , '--cpc-bid-ceiling-micro-amount CPC-BID-CEILING-MICRO_AMOUNT' , Integer , 'CPC Bid Ceiling Micro Amount' ) do | v | options [ :cpc_bid_ceiling_micro_amount ] = v end opts . separator '' opts . separator 'Help:' opts . on_tail ( '-h' , '--help' , 'Show this message' ) do puts opts exit end end . parse! begin add_hotel_ads ( options . fetch ( :customer_id ) . tr ( "-" , "" ), options [ :hotel_center_account_id ] , options [ :cpc_bid_ceiling_micro_amount ] ) rescue Google :: Ads :: GoogleAds :: Errors :: GoogleAdsError = > e e . failure . errors . each do | error | STDERR . printf ( "Error with message: %s \n " , error . message ) if error . location error . location . field_path_elements . each do | field_path_element | STDERR . printf ( " \t On field: %s \n " , field_path_element . field_name ) end end error . error_code . to_h . each do | k , v | next if v == :UNSPECIFIED STDERR . printf ( " \t Type: %s \n\t Code: %s \n " , k , v ) end end raise end end
Perl
#!/usr/bin/perl -w # # Copyright 2019, Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # # This example creates a hotel campaign, a hotel ad group and hotel ad # group ad. # # Prerequisite: You need to have access to the Hotel Ads Center, which can be # granted during integration with Google Hotels. The integration instructions # can be found at: # https://support.google.com/hotelprices/answer/6101897 use strict ; use warnings ; use utf8 ; use FindBin qw($Bin) ; use lib "$Bin/../../lib" ; use Google::Ads::GoogleAds::Client ; use Google::Ads::GoogleAds::Utils::GoogleAdsHelper ; use Google::Ads::GoogleAds::V22::Resources::CampaignBudget ; use Google::Ads::GoogleAds::V22::Resources::Campaign ; use Google::Ads::GoogleAds::V22::Resources::HotelSettingInfo ; use Google::Ads::GoogleAds::V22::Resources::NetworkSettings ; use Google::Ads::GoogleAds::V22::Resources::AdGroup ; use Google::Ads::GoogleAds::V22::Resources::AdGroupAd ; use Google::Ads::GoogleAds::V22::Resources::Ad ; use Google::Ads::GoogleAds::V22::Common::PercentCpc ; use Google::Ads::GoogleAds::V22::Common::HotelAdInfo ; use Google::Ads::GoogleAds::V22::Enums::BudgetDeliveryMethodEnum qw(STANDARD) ; use Google::Ads::GoogleAds::V22::Enums::AdvertisingChannelTypeEnum qw(HOTEL) ; use Google::Ads::GoogleAds::V22::Enums::AdGroupTypeEnum qw(HOTEL_ADS) ; use Google::Ads::GoogleAds::V22::Enums::CampaignStatusEnum ; use Google::Ads::GoogleAds::V22::Enums::AdGroupStatusEnum ; use Google::Ads::GoogleAds::V22::Enums::AdGroupAdStatusEnum ; use Google::Ads::GoogleAds::V22::Enums::EuPoliticalAdvertisingStatusEnum qw(DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING) ; use Google::Ads::GoogleAds::V22::Services::CampaignBudgetService::CampaignBudgetOperation ; use Google::Ads::GoogleAds::V22::Services::CampaignService::CampaignOperation ; use Google::Ads::GoogleAds::V22::Services::AdGroupService::AdGroupOperation ; use Google::Ads::GoogleAds::V22::Services::AdGroupAdService::AdGroupAdOperation ; use Getopt::Long qw(:config auto_help) ; use Pod::Usage ; use Cwd qw(abs_path) ; use Data::Uniqid qw(uniqid) ; # The following parameter(s) should be provided to run the example. You can # either specify these by changing the INSERT_XXX_ID_HERE values below, or on # the command line. # # Parameters passed on the command line will override any parameters set in # code. # # Running the example with -h will print the command line usage. my $customer_id = "INSERT_CUSTOMER_ID_HERE" ; # Specify your Hotels Ads Center account ID below. You can see how to find the # account ID in the Hotel Ads Center at: # https://support.google.com/hotelprices/answer/6399770. # This ID is the same account ID that you use in API requests to the Travel # Partner APIs at: # https://developers.google.com/hotels/hotel-ads/api-reference/. my $hotel_center_account_id = "INSERT_HOTEL_CENTER_ACCOUNT_ID_HERE" ; # Specify maximum bid limit that can be set when creating a campaign using the # Percent CPC bidding strategy. my $cpc_bid_ceiling_micro_amount = 20000000 ; sub add_hotel_ad { my ( $api_client , $customer_id , $hotel_center_account_id , $cpc_bid_ceiling_micro_amount ) = @_ ; # Create a budget to be used by the campaign that will be created below. my $budget_resource_name = add_campaign_budget ( $api_client , $customer_id ); # Create a hotel campaign. my $campaign_resource_name = add_hotel_campaign ( $api_client , $customer_id , $budget_resource_name , $hotel_center_account_id , $cpc_bid_ceiling_micro_amount ); # Create a hotel ad group. my $ad_group_resource_name = add_hotel_ad_group ( $api_client , $customer_id , $campaign_resource_name ); # Create a hotel ad group ad. add_hotel_ad_group_ad ( $api_client , $customer_id , $ad_group_resource_name ); return 1 ; } # Creates a new campaign budget in the specified client account. sub add_campaign_budget { my ( $api_client , $customer_id ) = @_ ; # Create a campaign budget. my $campaign_budget = Google::Ads::GoogleAds::V22::Resources:: CampaignBudget - > new ({ name = > "Interplanetary Cruise Budget #" . uniqid (), deliveryMethod = > STANDARD , # Set the amount of budget. amountMicros = > 5000000 , # Make the budget explicitly shared. explicitlyShared = > "true" }); # Create a campaign budget operation. my $campaign_budget_operation = Google::Ads::GoogleAds::V22::Services::CampaignBudgetService:: CampaignBudgetOperation - > new ({ create = > $campaign_budget }); # Add the campaign budget. my $campaign_budget_resource_name = $api_client - > CampaignBudgetService () - > mutate ({ customerId = > $customer_id , operations = > [ $campaign_budget_operation ]}) - > { results }[ 0 ]{ resourceName }; printf "Added a budget with resource name: '%s'.\n" , $campaign_budget_resource_name ; return $campaign_budget_resource_name ; } # Creates a new hotel campaign in the specified client account. sub add_hotel_campaign { my ( $api_client , $customer_id , $budget_resource_name , $hotel_center_account_id , $cpc_bid_ceiling_micro_amount ) = @_ ; # Create a hotel campaign. my $campaign = Google::Ads::GoogleAds::V22::Resources:: Campaign - > new ({ name = > "Interplanetary Cruise Campaign #" . uniqid (), # Configure settings related to hotel campaigns including advertising # channel type and hotel setting info. advertisingChannelType = > HOTEL , hotelSetting = > Google::Ads::GoogleAds::V22::Resources:: HotelSettingInfo - > new ({ hotelCenterId = > $hotel_center_account_id } ), # Recommendation: Set the campaign to PAUSED when creating it to prevent # the ads from immediately serving. Set to ENABLED once you've added # targeting and the ads are ready to serve. status = > Google::Ads::GoogleAds::V22::Enums::CampaignStatusEnum:: PAUSED , # Set the bidding strategy to PercentCpc. Only Manual CPC and Percent CPC # can be used for hotel campaigns. percentCpc = > Google::Ads::GoogleAds::V22::Common:: PercentCpc - > new ( { cpcBidCeilingMicros = > $cpc_bid_ceiling_micro_amount } ), # Declare whether or not this campaign serves political ads targeting the EU. # Valid values are CONTAINS_EU_POLITICAL_ADVERTISING and # DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING. containsEuPoliticalAdvertising = > DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING , # Set the budget. campaignBudget = > $budget_resource_name , # Configure the campaign network options. Only Google Search is allowed for # hotel campaigns. networkSettings = > Google::Ads::GoogleAds::V22::Resources:: NetworkSettings - > new ({ targetGoogleSearch = > "true" })}); # Create a campaign operation. my $campaign_operation = Google::Ads::GoogleAds::V22::Services::CampaignService:: CampaignOperation - > new ({ create = > $campaign }); # Add the campaign. my $campaign_resource_name = $api_client - > CampaignService () - > mutate ({ customerId = > $customer_id , operations = > [ $campaign_operation ]}) - > { results }[ 0 ]{ resourceName }; printf "Added a hotel campaign with resource name: '%s'.\n" , $campaign_resource_name ; return $campaign_resource_name ; } # Creates a new hotel ad group in the specified campaign. sub add_hotel_ad_group { my ( $api_client , $customer_id , $campaign_resource_name ) = @_ ; # Create an ad group. my $ad_group = Google::Ads::GoogleAds::V22::Resources:: AdGroup - > new ({ name = > "Earth to Mars Cruise #" . uniqid (), # Set the campaign. campaign = > $campaign_resource_name , # Set the ad group type to HOTEL_ADS. # This cannot be set to other types. type = > HOTEL_ADS , cpcBidMicros = > 1000000 , status = > Google::Ads::GoogleAds::V22::Enums::AdGroupStatusEnum:: ENABLED }); # Create an ad group operation. my $ad_group_operation = Google::Ads::GoogleAds::V22::Services::AdGroupService:: AdGroupOperation - > new ({ create = > $ad_group }); # Add the ad group. my $ad_group_resource_name = $api_client - > AdGroupService () - > mutate ({ customerId = > $customer_id , operations = > [ $ad_group_operation ]}) - > { results }[ 0 ]{ resourceName }; printf "Added a hotel ad group with resource name: '%s'.\n" , $ad_group_resource_name ; return $ad_group_resource_name ; } # Creates a new hotel ad group ad in the specified ad group. sub add_hotel_ad_group_ad { my ( $api_client , $customer_id , $ad_group_resource_name ) = @_ ; # Create an ad group ad and set a hotel ad to it. my $ad_group_ad = Google::Ads::GoogleAds::V22::Resources:: AdGroupAd - > new ({ # Set the ad group. adGroup = > $ad_group_resource_name , # Set the ad to a new shopping product ad. ad = > Google::Ads::GoogleAds::V22::Resources:: Ad - > new ({ hotelAd = > Google::Ads::GoogleAds::V22::Common:: HotelAdInfo - > new ()} ), status = > Google::Ads::GoogleAds::V22::Enums::AdGroupAdStatusEnum:: ENABLED }); # Create an ad group ad operation. my $ad_group_ad_operation = Google::Ads::GoogleAds::V22::Services::AdGroupAdService:: AdGroupAdOperation - > new ({ create = > $ad_group_ad }); # Add the ad group ad. my $ad_group_ad_resource_name = $api_client - > AdGroupAdService () - > mutate ({ customerId = > $customer_id , operations = > [ $ad_group_ad_operation ]}) - > { results }[ 0 ]{ resourceName }; printf "Added a hotel ad group ad with resource name: '%s'.\n" , $ad_group_ad_resource_name ; return $ad_group_ad_resource_name ; } # Don't run the example if the file is being included. if ( abs_path ( $0 ) ne abs_path ( __FILE__ )) { return 1 ; } # Get Google Ads Client, credentials will be read from ~/googleads.properties. my $api_client = Google::Ads::GoogleAds:: Client - > new (); # By default examples are set to die on any server returned fault. $api_client - > set_die_on_faults ( 1 ); # Parameters passed on the command line will override any parameters set in code. GetOptions ( "customer_id=s" = > \ $customer_id , "hotel_center_account_id=i" = > \ $hotel_center_account_id , "cpc_bid_ceiling_micro_amount=i" = > \ $cpc_bid_ceiling_micro_amount ); # Print the help message if the parameters are not initialized in the code nor # in the command line. pod2usage ( 2 ) if not check_params ( $customer_id , $hotel_center_account_id , $cpc_bid_ceiling_micro_amount ); # Call the example. add_hotel_ad ( $api_client , $customer_id =~ s/-//g r , $hotel_center_account_id , $cpc_bid_ceiling_micro_amount ); =pod =head1 NAME add_hotel_ad =head1 DESCRIPTION This example creates a hotel campaign, a hotel ad group and hotel ad group ad. Prerequisite: You need to have access to the Hotel Ads Center, which can be granted during integration with Google Hotels. The integration instructions can be found at: https://support.google.com/hotelprices/answer/6101897 =head1 SYNOPSIS add_hotel_ad.pl [options] -help Show the help message. -customer_id The Google Ads customer ID. -hotel_center_account_id The Hotel Ads Center account ID. -cpc_bid_ceiling_micro_amount [optional] The CPC bid ceiling micro amount. =cut

