קמפיינים למיקסום הביצועים לענף התיירות והאירוח מאפשרים לכם ליצור מודעות למלונות שיוצגו בפלטפורמות של Google, כמו רשת החיפוש, רשת המדיה, YouTube ו-Discover. היתרונות כוללים גם הקצאת תקציב אוטומטית בין הערוצים, התאמת כתובת URL סופית, כיסוי מודעות מוגבר ברשת החיפוש והצעות לנכסים דיגיטליים שייווצרו כקבוצת נכסים לכל מלון.
כדי להשתמש בקמפיינים למיקסום הביצועים לענף התיירות והאירוח, צריך שיהיה לכם קישור פעיל לחשבון Hotel Center שמשויך לחשבון Google Ads שלכם, כדי לקשר קבוצת נכסים של מלונות באמצעות Campaign.hotel_property_asset_set. אתם יכולים לקשר את חשבון Hotel Center ל-Google Ads בממשק המשתמש של Google Ads, או לנהל את הזמנות הקישור באמצעות ProductLinkInvitationService (ראו הדרישות המוקדמות של מודעות להזמנת חדרים).
איך יוצרים קמפיין למיקסום הביצועים לענף התיירות והאירוח
כך יוצרים קמפיין למיקסום הביצועים לענף התיירות והאירוח:
- אחזור של קבוצת הנכסים של המלונות ונכסי המלונות שסונכרנו מחשבון Hotel Center המקושר.
- (מומלץ) לקבל הצעות לנכסים שאפשר להשתמש בהם כדי ליצור קבוצת נכסים.
- יוצרים קמפיין למיקסום הביצועים באמצעות קבוצת הנכסים והנכסים המוצעים.
אחזור ישויות של נכסים למאפייני המלון
כשאתם מקשרים את חשבון Hotel Center ל-Google Ads, מערכת Google Ads מקצה ומסנכרנת באופן אוטומטי את ישויות הנכסים של המלונות שלכם:
- קבוצת נכסים של מלונות שבה
AssetSet.typeמוגדר כ-AssetSetType.HOTEL_PROPERTY, והשדותAssetSet.hotel_property_dataמאוכלסים במזהה שלכם ב-Hotel Center ובשם השותף. - נכס לכל מלון בפיד המקושר של Hotel Center, שבו
Asset.hotel_property_assetמוגדר כ-HotelPropertyAssetומכיל אתplace_idשל המלון (מזהה ייחודי שמזהה מקום במפות Google, שאפשר לחפש באמצעות הכלי למציאת מזהי מקומות). AssetSetAssetשמקשר כל נכס של מלון אל קבוצת הנכסיםHOTEL_PROPERTY.
אחרי הוצאה משימוש של תעריפי לילה במלון מצד שלישי, קבוצות נכסים מסוג HOTEL_PROPERTY מאוכלסות באופן אוטומטי על ידי מסנכרן הפידים של Hotel Center כשהחשבון מקושר. יצירה של קבוצת נכסים מסוג HOTEL_PROPERTY ישירות באמצעות AssetSetService.MutateAssetSets מוגבלת לתהליכי סנכרון פנימיים שנכללים ברשימת ההיתרים, ומחזירה את השגיאה MutateError.MUTATE_NOT_ALLOWED.
שולחים שאילתה אל
asset_setכדי לאחזר את שם המשאב של קבוצת הנכסיםHOTEL_PROPERTYהמסונכרנת בחשבון Hotel Center המקושר. תשתמשו בשם המשאב הזה בשלבים הבאים:SELECT asset_set.resource_name, asset_set.name, asset_set.hotel_property_data.hotel_center_id, asset_set.hotel_property_data.partner_name FROM asset_set WHERE asset_set.type = 'HOTEL_PROPERTY' AND asset_set.status = 'ENABLED'שולחים שאילתה ל-
asset_set_assetכדי לאחזר את שמות המשאבים של הישויות המסונכרנות מסוגHotelPropertyAssetשמקושרות לקבוצת הנכסיםHOTEL_PROPERTY:SELECT asset_set_asset.asset_set, asset_set_asset.asset, asset.hotel_property_asset.place_id, asset.hotel_property_asset.hotel_name FROM asset_set_asset WHERE asset_set_asset.asset_set = '<ASSET_SET_RESOURCE_NAME>' AND asset_set_asset.status = 'ENABLED'אם אתם צריכים ליצור ישויות
HotelPropertyAssetנוספות (על ידי הגדרתAsset.hotel_property_assetוה-place_idשלה) ולקשר אותן לקבוצת הנכסים של המלונות באמצעותAssetSetAsset, עיינו בדוגמה הבאה:Java
private String createHotelAsset( GoogleAdsClient googleAdsClient, long customerId, String placeId, String hotelPropertyAssetSetResourceName) { // Uses the GoogleAdService to create an asset and asset set asset in a single request. List<MutateOperation> mutateOperations = new ArrayList<>(); String assetResourceName = ResourceNames.asset(customerId, ASSET_TEMPORARY_ID); // Creates a mutate operation for a hotel property asset. Asset hotelPropertyAsset = Asset.newBuilder() .setResourceName(assetResourceName) .setHotelPropertyAsset(HotelPropertyAsset.newBuilder().setPlaceId(placeId)) .build(); mutateOperations.add( MutateOperation.newBuilder() .setAssetOperation(AssetOperation.newBuilder().setCreate(hotelPropertyAsset)) .build()); // Creates a mutate operation for an asset set asset. AssetSetAsset assetSetAsset = AssetSetAsset.newBuilder() .setAsset(assetResourceName) .setAssetSet(hotelPropertyAssetSetResourceName) .build(); mutateOperations.add( MutateOperation.newBuilder() .setAssetSetAssetOperation(AssetSetAssetOperation.newBuilder().setCreate(assetSetAsset)) .build()); // Issues a mutate request to create all entities. try (GoogleAdsServiceClient googleAdsServiceClient = googleAdsClient.getLatestVersion().createGoogleAdsServiceClient()) { MutateGoogleAdsResponse mutateGoogleAdsResponse = googleAdsServiceClient.mutate(Long.toString(customerId), mutateOperations); System.out.println("Created the following entities for the hotel asset:"); printResponseDetails(mutateGoogleAdsResponse); // Returns the created asset resource name, which will be used later to create an asset // group. Other resource names are not used later. return mutateGoogleAdsResponse .getMutateOperationResponses(0) .getAssetResult() .getResourceName(); } }
C#
private string CreateHotelAsset( GoogleAdsClient client, long customerId, string placeId, string hotelPropertyAssetSetResourceName) { // Uses the GoogleAdService to create an asset and asset set asset in a single request. List<MutateOperation> mutateOperations = new List<MutateOperation>(); string assetResourceName = ResourceNames.Asset(customerId, ASSET_TEMPORARY_ID); // Creates a mutate operation for a hotel property asset. Asset hotelPropertyAsset = new Asset() { ResourceName = assetResourceName, HotelPropertyAsset = new HotelPropertyAsset { PlaceId = placeId } }; mutateOperations.Add(new MutateOperation { AssetOperation = new AssetOperation { Create = hotelPropertyAsset } }); // Creates a mutate operation for an asset set asset. AssetSetAsset assetSetAsset = new AssetSetAsset { Asset = assetResourceName, AssetSet = hotelPropertyAssetSetResourceName }; mutateOperations.Add(new MutateOperation { AssetSetAssetOperation = new AssetSetAssetOperation { Create = assetSetAsset } }); // Issues a mutate request to create all entities. GoogleAdsServiceClient googleAdsServiceClient = client.GetService(Services.V26.GoogleAdsService); MutateGoogleAdsResponse response = googleAdsServiceClient.Mutate(customerId.ToString(), mutateOperations); Console.WriteLine("Created the following entities for the hotel asset:"); PrintResponseDetails(response); return response.MutateOperationResponses[0].AssetResult.ResourceName; }
PHP
private static function createHotelAsset( GoogleAdsClient $googleAdsClient, int $customerId, string $placeId, string $assetSetResourceName ): string { // We use the GoogleAdService to create an asset and asset set asset in a single // request. $operations = []; $assetResourceName = ResourceNames::forAsset($customerId, self::ASSET_TEMPORARY_ID); // Creates a mutate operation for a hotel property asset. $operations[] = new MutateOperation( [ 'asset_operation' => new AssetOperation( [ // Creates a hotel property asset. 'create' => new Asset( [ 'resource_name' => $assetResourceName, // Creates a hotel property asset for the place ID. 'hotel_property_asset' => new HotelPropertyAsset(['place_id' => $placeId]), ] ) ] ) ] ); // Creates a mutate operation for an asset set asset. $operations[] = new MutateOperation( [ 'asset_set_asset_operation' => new AssetSetAssetOperation( [ // Creates an asset set asset. 'create' => new AssetSetAsset( [ 'asset' => $assetResourceName, 'asset_set' => $assetSetResourceName ] ) ] ) ] ); // Issues a mutate request to create all entities. $googleAdsService = $googleAdsClient->getGoogleAdsServiceClient(); /** * @var MutateGoogleAdsResponse $mutateGoogleAdsResponse */ $mutateGoogleAdsResponse = $googleAdsService->mutate(MutateGoogleAdsRequest::build($customerId, $operations)); print "Created the following entities for the hotel asset:" . PHP_EOL; self::printResponseDetails($mutateGoogleAdsResponse); // Returns the created asset resource name, which will be used later to create an asset // group. Other resource names are not used later. return $mutateGoogleAdsResponse->getMutateOperationResponses()[0]->getAssetResult() ->getResourceName(); }
Python
def create_hotel_asset( client: GoogleAdsClient, customer_id: str, place_id: str, asset_set_resource_name: str, ) -> str: """Creates a hotel property asset using the specified place ID. The place ID must belong to a hotel property. Then, links it to the specified asset set. Args: client: an initialized GoogleAdsClient instance. customer_id: a client customer ID. place_id: a place ID identifying a place in the Google Places database. asset_set_resource_name: an asset set resource name Returns: the created hotel property asset's resource name. """ googleads_service: GoogleAdsServiceClient = client.get_service( "GoogleAdsService" ) # We use the GoogleAdService to create an asset and asset set asset in a # single request. asset_resource_name: str = googleads_service.asset_path( customer_id, ASSET_TEMPORARY_ID ) # Creates a mutate operation for a hotel property asset. asset_mutate_operation: MutateOperation = client.get_type("MutateOperation") # Creates a hotel property asset. asset: Asset = asset_mutate_operation.asset_operation.create asset.resource_name = asset_resource_name # Creates a hotel property asset for the place ID. asset.hotel_property_asset.place_id = place_id # Creates a mutate operation for an asset set asset. asset_set_asset_mutate_operation: MutateOperation = client.get_type( "MutateOperation" ) # Creates an asset set asset. asset_set_asset: AssetSetAsset = ( asset_set_asset_mutate_operation.asset_set_asset_operation.create ) asset_set_asset.asset = asset_resource_name asset_set_asset.asset_set = asset_set_resource_name # Issues a mutate request to create all entities. response: MutateGoogleAdsResponse = googleads_service.mutate( customer_id=customer_id, mutate_operations=[ asset_mutate_operation, asset_set_asset_mutate_operation, ], ) print("Created the following entities for the hotel asset:") print_response_details(response) return response.mutate_operation_responses[0].asset_result.resource_name
Ruby
# Creates a hotel property asset using the specified place ID. # The place ID must belong to a hotel property. Then, links it to the # specified asset set. # See https://developers.google.com/places/web-service/place-id to search for a # hotel place ID. def create_hotel_asset( client, customer_id, place_id, hotel_property_asset_set_resource_name ) asset_operation = client.operation.create_resource.asset do |asset| asset.name = 'Ad Media Bundle' asset.hotel_property_asset = client.resource.hotel_property_asset do |hotel_asset| hotel_asset.place_id = place_id end end # Send the mutate request. response = client.service.asset.mutate_assets( customer_id: customer_id, operations: [asset_operation] ) asset_resource_name = response.results.first.resource_name # Creates a mutate operation for an asset set asset. asset_set_asset_operation = client.operation.create_resource.asset_set_asset do |asa| asa.asset = asset_resource_name asa.asset_set = hotel_property_asset_set_resource_name end # Sends the mutate request. response = client.service.asset_set_asset.mutate_asset_set_assets( customer_id: customer_id, operations: [asset_set_asset_operation] ) asset_resource_name end
Perl
sub create_hotel_asset { my ($api_client, $customer_id, $place_id, $asset_set_resource_name) = @_; # We use the GoogleAdService to create an asset and asset set asset in a single request. my $operations = []; my $asset_resource_name = Google::Ads::GoogleAds::V26::Utils::ResourceNames::asset($customer_id, ASSET_TEMPORARY_ID); # Create a mutate operation for a hotel property asset. push @$operations, Google::Ads::GoogleAds::V26::Services::GoogleAdsService::MutateOperation-> new({ assetOperation => Google::Ads::GoogleAds::V26::Services::AssetService::AssetOperation-> new({ create => Google::Ads::GoogleAds::V26::Resources::Asset->new({ resourceName => $asset_resource_name, hotelPropertyAsset => Google::Ads::GoogleAds::V26::Common::HotelPropertyAsset->new({ placeId => $place_id })})})}); # Create a mutate operation for an asset set asset. push @$operations, Google::Ads::GoogleAds::V26::Services::GoogleAdsService::MutateOperation-> new({ assetSetAssetOperation => Google::Ads::GoogleAds::V26::Services::AssetSetAssetService::AssetSetAssetOperation ->new({ create => Google::Ads::GoogleAds::V26::Resources::AssetSetAsset->new({ asset => $asset_resource_name, assetSet => $asset_set_resource_name })})}); # Issue a mutate request to create all entities. my $mutate_google_ads_response = $api_client->GoogleAdsService()->mutate({ customerId => $customer_id, mutateOperations => $operations }); printf "Created the following entities for the hotel asset:\n"; print_response_details($mutate_google_ads_response); # Return the created asset resource name, which will be used later to create an asset # group. Other resource names are not used later. return $mutate_google_ads_response->{mutateOperationResponses}[0] {assetResult}{resourceName}; }
curl
לקבל הצעות לנכסים שבהם אפשר להשתמש כדי ליצור קבוצת נכסים
אתם יכולים להשתמש ב-TravelAssetSuggestionService.SuggestTravelAssets כדי לקבל הצעות לנכסים בשביל המלונות שלכם. אחרי שתקבלו את ההצעות, תוכלו להשתמש בהן כדי ליצור נכסים בקבוצת הנכסים בשלב הבא.
Java
private HotelAssetSuggestion getHotelAssetSuggestion( GoogleAdsClient googleAdsClient, long customerId, String placeId) { try (TravelAssetSuggestionServiceClient travelAssetSuggestionServiceClient = googleAdsClient.getLatestVersion().createTravelAssetSuggestionServiceClient()) { // Sends a request to suggest assets to be created as an asset group for the Performance Max // for travel goals campaign. SuggestTravelAssetsResponse suggestTravelAssetsResponse = travelAssetSuggestionServiceClient.suggestTravelAssets( SuggestTravelAssetsRequest.newBuilder() .setCustomerId(Long.toString(customerId)) // Uses 'en-US' as an example. It can be any language specifications in BCP 47 // format. .setLanguageOption("en-US") // The service accepts several place IDs. We use only one here for demonstration. .addPlaceIds(placeId) .build()); System.out.printf("Fetched a hotel asset suggestion for the place ID '%s'.%n", placeId); return suggestTravelAssetsResponse.getHotelAssetSuggestions(0); } }
C#
private HotelAssetSuggestion GetHotelAssetSuggestion(GoogleAdsClient client, long customerId, string placeId) { // Get the TravelAssetSuggestionService client. TravelAssetSuggestionServiceClient travelAssetSuggestionService = client.GetService(Services.V26.TravelAssetSuggestionService); SuggestTravelAssetsRequest request = new SuggestTravelAssetsRequest { CustomerId = customerId.ToString(), LanguageOption = "en-US", }; request.PlaceIds.Add(placeId); SuggestTravelAssetsResponse response = travelAssetSuggestionService.SuggestTravelAssets( request ); Console.WriteLine($"Fetched a hotel asset suggestion for the place ID {placeId}"); return response.HotelAssetSuggestions[0]; }
PHP
private static function getHotelAssetSuggestion( GoogleAdsClient $googleAdsClient, int $customerId, string $placeId ): HotelAssetSuggestion { // Send a request to suggest assets to be created as an asset group for the Performance Max // for travel goals campaign. $travelAssetSuggestionServiceClient = $googleAdsClient->getTravelAssetSuggestionServiceClient(); // Uses 'en-US' as an example. It can be any language specifications in BCP 47 format. $request = SuggestTravelAssetsRequest::build($customerId, 'en-US'); // The service accepts several place IDs. We use only one here for demonstration. $request->setPlaceIds([$placeId]); $response = $travelAssetSuggestionServiceClient->suggestTravelAssets($request); printf("Fetched a hotel asset suggestion for the place ID '%s'.%s", $placeId, PHP_EOL); return $response->getHotelAssetSuggestions()[0]; }
Python
def get_hotel_asset_suggestion( client: GoogleAdsClient, customer_id: str, place_id: str ) -> HotelAssetSuggestion: """Returns hotel asset suggestion from TravelAssetsSuggestionService. Args: client: an initialized GoogleAdsClient instance. customer_id: a client customer ID. place_id: a place ID identifying a place in the Google Places database. Returns: A HotelAssetSuggestion instance. """ request: SuggestTravelAssetsRequest = client.get_type( "SuggestTravelAssetsRequest" ) request.customer_id = customer_id # Uses 'en-US' as an example. It can be any language specifications in # BCP 47 format. request.language_option = "en-US" # In this example we only use a single place ID for the purpose of # demonstration, but it's possible to append more than one here if needed. request.place_ids.append(place_id) travel_asset_suggestion_service: TravelAssetSuggestionServiceClient = ( client.get_service("TravelAssetSuggestionService") ) response: SuggestTravelAssetsResponse = ( travel_asset_suggestion_service.suggest_travel_assets(request=request) ) print(f"Fetched a hotel asset suggestion for the place ID: '{place_id}'.") # Since we sent a single operation in the request, it's guaranteed that # there will only be a single item in the response. return response.hotel_asset_suggestions[0]
Ruby
def get_hotel_asset_suggestion(client, customer_id, place_id) response = client.service.travel_asset_suggestion.suggest_travel_assets( customer_id: customer_id, language_option: 'en-US', place_ids: [place_id] ) response.hotel_asset_suggestions.first end
Perl
sub get_hotel_asset_suggestion { my ($api_client, $customer_id, $place_id) = @_; # Send a request to suggest assets to be created as an asset group for the Performance Max # for travel goals campaign. my $suggest_travel_assets_response = $api_client->TravelAssetSuggestionService()->suggest_travel_assets({ customerId => $customer_id, # Uses 'en-US' as an example. It can be any language specifications in BCP 47 format. languageOption => 'en-US', # The service accepts several place IDs. We use only one here for demonstration. placeIds => [$place_id], }); printf "Fetched a hotel asset suggestion for the place ID '%s'.\n", $place_id; return $suggest_travel_assets_response->{hotelAssetSuggestions}[0]; }
curl
נקודות שצריך לשים לב אליהן:
- השיטה הזו פועלת כמיטב היכולת, כך שיכול להיות שלא תקבלו הצעות.
- יכול להיות שהשירות לא יחזיר את כל הנכסים הנדרשים ליצירת קבוצת נכסים. במקרה כזה, צרו נכסים משלכם שעומדים בדרישות.
יוצרים קמפיין למיקסום הביצועים באמצעות קבוצת הנכסים והנכסים המוצעים
מכיוון שמדובר בסוג משנה של קמפיין למיקסום הביצועים, חלות עליו הדרישות וההגבלות הבסיסיות של קמפיין למיקסום הביצועים, כמו דרישות מינימליות לגבי נכסים והדרישה שאי אפשר לשתף את תקציב הקמפיין.
באופן כללי, אתם יכולים לפעול לפי רוב השלבים ליצירת קמפיין למיקסום הביצועים. אלה ההבדלים שחשוב לשים לב אליהם:
כשיוצרים קמפיין, מגדירים את
Campaign.hotel_property_asset_setלשם המשאב של קבוצת הנכסים מסוגHOTEL_PROPERTYמהשלב הראשון. החל מגרסה 26, כדי לציין אתCampaign.hotel_property_asset_setצריך קישור פעיל לחשבון Hotel Center (שאפשר להגדיר בממשק המשתמש של Google Ads או על ידי ניהול הזמנות באמצעותProductLinkInvitationService). אם לא תעמדו בדרישה הזו, תוחזר השגיאהCampaignError.HOTEL_PROPERTY_ASSET_SET_HOTEL_CENTER_LINK_REQUIRED.Java
private MutateOperation createCampaignOperation( long customerId, String hotelPropertyAssetSetResourceName) { Campaign performanceMaxCampaign = Campaign.newBuilder() .setName("Performance Max for travel goals campaign #" + getPrintableDateTime()) // Sets the campaign status as PAUSED. The campaign is the only entity in // the mutate request that should have its status set. .setStatus(CampaignStatus.PAUSED) // All Performance Max campaigns have an advertising_channel_type of // PERFORMANCE_MAX. The advertising_channel_sub_type should not be set. .setAdvertisingChannelType(AdvertisingChannelType.PERFORMANCE_MAX) // To create a Performance Max for travel goals campaign, you need to set // `hotel_property_asset_set`. .setHotelPropertyAssetSet(hotelPropertyAssetSetResourceName) // Bidding strategy must be set directly on the campaign. // Setting a portfolio bidding strategy by resource name is not supported. // Max Conversion and Maximize Conversion Value are the only strategies // supported for Performance Max campaigns. // An optional ROAS (Return on Advertising Spend) can be set for // maximize_conversion_value. The ROAS value must be specified as a ratio in // the API. It is calculated by dividing "total value" by "total spend". // For more information on Maximize Conversion Value, see the support // article: http://support.google.com/google-ads/answer/7684216. // A targetRoas of 3.5 corresponds to a 350% return on ad spend. .setMaximizeConversionValue( MaximizeConversionValue.newBuilder().setTargetRoas(3.5).build()) // Assigns the resource name with a temporary ID. .setResourceName(ResourceNames.campaign(customerId, CAMPAIGN_TEMPORARY_ID)) // Sets the budget using the given budget resource name. .setCampaignBudget(ResourceNames.campaignBudget(customerId, BUDGET_TEMPORARY_ID)) // Declares whether this campaign serves political ads targeting the EU. .setContainsEuPoliticalAdvertising(DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING) // Optional fields. .setStartDateTime(new DateTime().plusDays(1).toString("yyyy-MM-dd 00:00:00")) .setEndDateTime(new DateTime().plusDays(365).toString("yyyy-MM-dd 23:59:59")) .build(); return MutateOperation.newBuilder() .setCampaignOperation( CampaignOperation.newBuilder().setCreate(performanceMaxCampaign).build()) .build(); }
C#
private MutateOperation CreateCampaignOperation(long customerId, string hotelPropertyAssetSetResourceName) { Campaign performanceMaxCampaign = new Campaign { Name = "Performance Max for travel goals campaign #" + ExampleUtilities.GetRandomString(), // Sets the campaign status as PAUSED. The campaign is the only entity in // the mutate request that should have its status set. Status = CampaignStatus.Paused, // All Performance Max campaigns have an advertising_channel_type of // PERFORMANCE_MAX. The advertising_channel_sub_type should not be set. AdvertisingChannelType = AdvertisingChannelType.PerformanceMax, // To create a Performance Max for travel goals campaign, you need to set // `hotel_property_asset_set`. HotelPropertyAssetSet = hotelPropertyAssetSetResourceName, // Bidding strategy must be set directly on the campaign. // Setting a portfolio bidding strategy by resource name is not supported. // Max Conversion and Maximize Conversion Value are the only strategies // supported for Performance Max campaigns. // An optional ROAS (Return on Advertising Spend) can be set for // maximize_conversion_value. The ROAS value must be specified as a ratio in // the API. It is calculated by dividing "total value" by "total spend". // For more information on Maximize Conversion Value, see the support // article: http://support.google.com/google-ads/answer/7684216. // A targetRoas of 3.5 corresponds to a 350% return on ad spend. MaximizeConversionValue = new MaximizeConversionValue { TargetRoas = 3.5 }, // Assigns the resource name with a temporary ID. ResourceName = ResourceNames.Campaign(customerId, CAMPAIGN_TEMPORARY_ID), // Sets the budget using the given budget resource name. CampaignBudget = ResourceNames.CampaignBudget(customerId, BUDGET_TEMPORARY_ID), // Declare whether or not this campaign contains political ads targeting the EU. ContainsEuPoliticalAdvertising = EuPoliticalAdvertisingStatus.DoesNotContainEuPoliticalAdvertising, }; return new MutateOperation { CampaignOperation = new CampaignOperation { Create = performanceMaxCampaign } }; }
PHP
private static function createCampaignOperation( int $customerId, string $hotelPropertyAssetSetResourceName ): MutateOperation { // Creates a mutate operation that creates a campaign. return new MutateOperation( [ 'campaign_operation' => new CampaignOperation( [ 'create' => new Campaign( [ 'name' => 'Performance Max for travel goals campaign #' . Helper::getPrintableDatetime(), // Assigns the resource name with a temporary ID. 'resource_name' => ResourceNames::forCampaign( $customerId, self::CAMPAIGN_TEMPORARY_ID ), // Sets the budget using the given budget resource name. 'campaign_budget' => ResourceNames::forCampaignBudget( $customerId, self::BUDGET_TEMPORARY_ID ), // The campaign is the only entity in the mutate request that should have its // status set. // Recommendation: Set the campaign to PAUSED when creating it to prevent // the ads from immediately serving. 'status' => CampaignStatus::PAUSED, // Performance Max campaigns have an advertising_channel_type of // PERFORMANCE_MAX. The advertising_channel_sub_type should not be set. 'advertising_channel_type' => AdvertisingChannelType::PERFORMANCE_MAX, // Declare whether or not this campaign serves political ads targeting the EU. 'contains_eu_political_advertising' => EuPoliticalAdvertisingStatus::DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING, // To create a Performance Max for travel goals campaign, you need to set // `hotel_property_asset_set`. 'hotel_property_asset_set' => $hotelPropertyAssetSetResourceName, // Bidding strategy must be set directly on the campaign. // Setting a portfolio bidding strategy by resource name is not supported. // Max Conversion and Maximize Conversion Value are the only strategies // supported for Performance Max campaigns. // An optional ROAS (Return on Advertising Spend) can be set for // maximize_conversion_value. The ROAS value must be specified as a ratio in // the API. It is calculated by dividing "total value" by "total spend". // For more information on Maximize Conversion Value, see the support // article: https://support.google.com/google-ads/answer/7684216. // A target_roas of 3.5 corresponds to a 350% return on ad spend. 'maximize_conversion_value' => new MaximizeConversionValue( [ 'target_roas' => 3.5 ] ) ] ) ] ) ] ); }
Python
def create_campaign_operation( client: GoogleAdsClient, customer_id: str, hotel_property_asset_set_resource_name: str, ) -> MutateOperation: """Creates a mutate operation that creates a new Performance Max for travel goals campaign. Links the specified hotel property asset set to this campaign. A temporary ID will be assigned to this campaign budget so that it can be referenced by other objects being created in the same mutate request. Args: client: an initialized GoogleAdsClient instance. customer_id: a client customer ID. hotel_property_asset_set_resource_name: the resource name for a hotel property asset set. Returns: a MutateOperation message that creates a new Performance Max campaign. """ googleads_service: GoogleAdsServiceClient = client.get_service( "GoogleAdsService" ) # Creates a mutate operation that creates a campaign. operation: MutateOperation = client.get_type("MutateOperation") campaign: Campaign = operation.campaign_operation.create campaign.name = ( "Performance Max for travel goals campaign " f"#{get_printable_datetime()}" ) # Assigns the resource name with a temporary ID. campaign.resource_name = googleads_service.campaign_path( customer_id, CAMPAIGN_TEMPORARY_ID ) # Sets the budget using the given budget resource name. campaign.campaign_budget = googleads_service.campaign_budget_path( customer_id, BUDGET_TEMPORARY_ID ) # The campaign is the only entity in the mutate request that should have its # status set. # Recommendation: Set the campaign to PAUSED when creating it to prevent # the ads from immediately serving. campaign.status = client.enums.CampaignStatusEnum.PAUSED # Performance Max campaigns have an advertising_channel_type of # PERFORMANCE_MAX. The advertising_channel_sub_type should not be set. campaign.advertising_channel_type = ( client.enums.AdvertisingChannelTypeEnum.PERFORMANCE_MAX ) # 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 ) # To create a Performance Max for travel goals campaign, you need to set # the `hotel_property_asset_set` field. campaign.hotel_property_asset_set = hotel_property_asset_set_resource_name # Bidding strategy must be set directly on the campaign. # Setting a portfolio bidding strategy by resource name is not supported. # Max Conversion and Maximize Conversion Value are the only strategies # supported for Performance Max campaigns. # An optional ROAS (Return on Advertising Spend) can be set for # maximize_conversion_value. The ROAS value must be specified as a ratio in # the API. It is calculated by dividing "total value" by "total spend". # For more information on Maximize Conversion Value, see the support # article: https://support.google.com/google-ads/answer/7684216. # A target_roas of 3.5 corresponds to a 350% return on ad spend. campaign.maximize_conversion_value.target_roas = 3.5 return operation
Ruby
# Creates a MutateOperation that creates a new Performance Max 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. def create_performance_max_campaign_operation( client, customer_id, hotel_property_asset_set_resource_name ) client.operation.mutate do |m| m.campaign_operation = client.operation.create_resource.campaign do |c| c.name = "Performance Max for Travel Goals #{SecureRandom.uuid}" # Set the campaign status as PAUSED. The campaign is the only entity in # the mutate request that should have its status set. c.status = :PAUSED # All Performance Max campaigns have an advertising_channel_type of # PERFORMANCE_MAX. The advertising_channel_sub_type should not be set. c.advertising_channel_type = :PERFORMANCE_MAX # 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 # To create a Performance Max for travel goals campaign, you need to set hotel_property_asset_set c.hotel_property_asset_set = hotel_property_asset_set_resource_name # Bidding strategy must be set directly on the campaign. # Setting a portfolio bidding strategy by resource name is not supported. # Max Conversion and Maximize Conversion Value are the only strategies # supported for Performance Max campaigns. # An optional ROAS (Return on Advertising Spend) can be set for # maximize_conversion_value. The ROAS value must be specified as a ratio # in the API. It is calculated by dividing "total value" by "total spend". # For more information on Maximize Conversion Value, see the support # article: http://support.google.com/google-ads/answer/7684216. # A target_roas of 3.5 corresponds to a 350% return on ad spend. c.bidding_strategy_type = :MAXIMIZE_CONVERSION_VALUE c.maximize_conversion_value = client.resource.maximize_conversion_value do |mcv| mcv.target_roas = 3.5 end # Assign the resource name with a temporary ID. c.resource_name = client.path.campaign( customer_id, PERFORMANCE_MAX_CAMPAIGN_TEMPORARY_ID ) # Set the budget using the given budget resource name. c.campaign_budget = client.path.campaign_budget(customer_id, BUDGET_TEMPORARY_ID) end end end
Perl
sub create_campaign_operation { my ($customer_id, $hotel_property_asset_set_resource_name) = @_; # Create a mutate operation that creates a campaign operation. return Google::Ads::GoogleAds::V26::Services::GoogleAdsService::MutateOperation-> new({ campaignOperation => Google::Ads::GoogleAds::V26::Services::CampaignService::CampaignOperation ->new({ create => Google::Ads::GoogleAds::V26::Resources::Campaign->new({ # Assign the resource name with a temporary ID. resourceName => Google::Ads::GoogleAds::V26::Utils::ResourceNames::campaign( $customer_id, CAMPAIGN_TEMPORARY_ID ), name => "Performance Max for travel goals campaign #'" . uniqid(), # Set the budget using the given budget resource name. campaignBudget => Google::Ads::GoogleAds::V26::Utils::ResourceNames::campaign_budget( $customer_id, BUDGET_TEMPORARY_ID ), # Set the campaign status as PAUSED. The campaign is the only entity in # the mutate request that should have its status set. status => Google::Ads::GoogleAds::V26::Enums::CampaignStatusEnum::PAUSED, # All Performance Max campaigns have an advertisingChannelType of # PERFORMANCE_MAX. The advertisingChannelSubType should not be set. advertisingChannelType => PERFORMANCE_MAX, # To create a Performance Max for travel goals campaign, you need to set # `hotelPropertyAssetSet`. hotelPropertyAssetSet => $hotel_property_asset_set_resource_name, # 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, # Bidding strategy must be set directly on the campaign. # Setting a portfolio bidding strategy by resource name is not supported. # Max Conversion and Max Conversion Value are the only strategies # supported for Performance Max campaigns. # An optional ROAS (Return on Advertising Spend) can be set for # maximizeConversionValue. The ROAS value must be specified as a ratio in # the API. It is calculated by dividing "total value" by "total spend". # For more information on Max Conversion Value, see the support article: # http://support.google.com/google-ads/answer/7684216. # A targetRoas of 3.5 corresponds to a 350% return on ad spend. maximizeConversionValue => Google::Ads::GoogleAds::V26::Common::MaximizeConversionValue-> new({ targetRoas => 3.5 })})})}); }
curl
במקום ליצור קבוצת נכסים מאפס, אתם יכולים להשתמש בהצעה של
TravelAssetSuggestionService.SuggestTravelAssetsכשאתם יוצרים את קבוצת הנכסים. אם הנכסים המוצעים לא מספיקים, צריך להוסיף עוד נכסים כדי לעמוד בדרישות המינימליות לגבי נכסים בקמפיינים למיקסום הביצועים.כדי להשתמש בקמפיינים למיקסום הביצועים לענף התיירות והאירוח, צריך לקשר את כל הנכסים של המלון לקבוצת הנכסים שיוצרים. בלי הקישורים האלה, הקמפיין יהיה קמפיין רגיל למיקסום הביצועים.
Java
// Link the previously created hotel property asset to the asset group. In the real-world // scenario, you'd need to do this step several times for each hotel property asset. AssetGroupAsset hotelProperyAssetGroupAsset = AssetGroupAsset.newBuilder() .setAsset(hotelPropertyAssetResourceName) .setAssetGroup(assetGroupResourceName) .setFieldType(AssetFieldType.HOTEL_PROPERTY) .build(); // Adds an operation to link the hotel property asset to the asset group. mutateOperations.add( MutateOperation.newBuilder() .setAssetGroupAssetOperation( AssetGroupAssetOperation.newBuilder().setCreate(hotelProperyAssetGroupAsset)) .build());
C#
// Link the previously created hotel property asset to the asset group. In the // real-world scenario, you'd need to do this step several times for each hotel property // asset. AssetGroupAsset hotelPropertyAssetGroupAsset = new AssetGroupAsset { Asset = hotelPropertyAssetResourceName, AssetGroup = assetGroupResourceName, FieldType = AssetFieldType.HotelProperty }; // Adds an operation to link the hotel property asset to the asset group. mutateOperations.Add(new MutateOperation { AssetGroupAssetOperation = new AssetGroupAssetOperation { Create = hotelPropertyAssetGroupAsset } });
PHP
// Link the previously created hotel property asset to the asset group. In the real-world // scenario, you'd need to do this step several times for each hotel property asset. $operations[] = new MutateOperation( [ 'asset_group_asset_operation' => new AssetGroupAssetOperation( [ 'create' => new AssetGroupAsset( [ 'asset' => $hotelPropertyAssetResourceName, 'asset_group' => $assetGroupResourceName, 'field_type' => AssetFieldType::HOTEL_PROPERTY ] ) ] ) ] );
Python
# Link the previously created hotel property asset to the asset group. If # there are multiple assets, these steps to create a new operation need to # be performed for each asset. asset_group_asset_mutate_operation: MutateOperation = client.get_type( "MutateOperation" ) asset_group_asset_hotel: AssetGroupAsset = ( asset_group_asset_mutate_operation.asset_group_asset_operation.create ) asset_group_asset_hotel.asset = hotel_property_asset_resource_name asset_group_asset_hotel.asset_group = asset_group_resource_name asset_group_asset_hotel.field_type = ( client.enums.AssetFieldTypeEnum.HOTEL_PROPERTY ) operations.append(asset_group_asset_mutate_operation)
Ruby
# Link the previously created hotel property asset to the asset group. # In the real-world scenario, you'd need to do this step several times for # each hotel property asset. operations << client.operation.mutate do |m| m.asset_group_asset_operation = client.operation.create_resource.asset_group_asset do |aga| aga.field_type = :HOTEL_PROPERTY aga.asset_group = client.path.asset_group(customer_id, ASSET_GROUP_TEMPORARY_ID) aga.asset = hotel_property_asset_resource_name end end
Perl
# Link the previously created hotel property asset to the asset group. In the real-world # scenario, you'd need to do this step several times for each hotel property asset. push @$operations, Google::Ads::GoogleAds::V26::Services::GoogleAdsService::MutateOperation-> new({ assetGroupAssetOperation => Google::Ads::GoogleAds::V26::Services::AssetGroupAssetService::AssetGroupAssetOperation ->new({ create => Google::Ads::GoogleAds::V26::Resources::AssetGroupAsset->new({ asset => $hotel_property_asset_resource_name, assetGroup => $asset_group_resource_name, fieldType => HOTEL_PROPERTY })})});
curl