建议页面可通过以下几种方式改进您的广告系列:
- 推出相关的新功能
- 通过改进后的出价、关键字和广告让您的预算发挥更大效用
- 提高广告系列的整体效果和效率
如需提高优化得分,您可以使用 RecommendationService
检索建议,然后相应地应用或拒绝建议。从 Google Ads API v15 开始,您还可以使用 RecommendationSubscriptionService
订阅自动采纳建议。
优化得分
优化得分是一个估算的分值,反映了您的 Google Ads 帐号在设置方面的优化程度,在 Customer
和 Campaign
一级提供。
Customer.optimization_score_weight
仅适用于非经理帐号,用于计算多个帐号的总体优化得分。获取帐号的优化得分和优化得分权重,并将它们相乘 (Customer.optimization_score * Customer.optimization_score_weight
) 即可计算出总体优化得分。
customer
和 campaign
报告提供与优化相关的指标:
metrics.optimization_score_url
提供该帐号的深层链接,可以在 Google Ads 界面中查看相关建议的相关信息。metrics.optimization_score_uplift
指示采纳所有相关建议后优化得分会提高多少。这是一个估算值,基于所有可用建议总体上得出的估算值,而不仅仅是各条建议的提升幅度得分总和。
如需对返回的建议进行分组和排序,您可以在查询中使用 segments.recommendation_type
,按建议类型对这两个指标进行细分。
推荐类型
完全支持的推荐类型
RecommendationType | 说明 |
---|---|
CAMPAIGN_BUDGET |
修正受到预算限制的广告系列 |
KEYWORD |
添加新关键字 |
TEXT_AD |
添加推荐广告 |
TARGET_CPA_OPT_IN |
使用目标每次转化费用出价 |
MAXIMIZE_CONVERSIONS_OPT_IN |
采用“尽可能提高转化次数”出价策略进行出价 |
MAXIMIZE_CONVERSION_VALUE_OPT_IN |
使用“尽可能提高转化价值”出价策略出价 |
ENHANCED_CPC_OPT_IN |
使用“智能点击付费”出价策略出价 |
MAXIMIZE_CLICKS_OPT_IN |
采用“尽可能争取更多点击次数”出价策略 |
OPTIMIZE_AD_ROTATION |
采用优化型广告轮播设置 |
MOVE_UNUSED_BUDGET |
将未使用的预算转给受限预算 |
TARGET_ROAS_OPT_IN |
使用“目标广告支出回报率”出价策略出价 |
FORECASTING_CAMPAIGN_BUDGET |
修正预计在未来会受预算限制的广告系列 |
RESPONSIVE_SEARCH_AD |
添加新的自适应搜索广告 |
MARGINAL_ROI_CAMPAIGN_BUDGET |
调整广告系列预算以提高投资回报率 |
USE_BROAD_MATCH_KEYWORD |
为基于转化的广告系列使用自动出价广泛匹配 |
RESPONSIVE_SEARCH_AD_ASSET |
向广告添加自适应搜索广告素材资源 |
RESPONSIVE_SEARCH_AD_IMPROVE_AD_STRENGTH |
提升自适应搜索广告的效果 |
DISPLAY_EXPANSION_OPT_IN |
更新广告系列以使用“将展示广告网络也纳入投放范围” |
SEARCH_PARTNERS_OPT_IN |
利用 Google 搜索网络合作伙伴扩大覆盖面 |
CUSTOM_AUDIENCE_OPT_IN |
创建自定义受众群体 |
IMPROVE_DISCOVERY_AD_STRENGTH |
提升需求开发广告系列中的广告效力 |
UPGRADE_SMART_SHOPPING_CAMPAIGN_TO_PERFORMANCE_MAX |
将智能购物广告系列升级为效果最大化广告系列 |
UPGRADE_LOCAL_CAMPAIGN_TO_PERFORMANCE_MAX |
将旧版本地广告系列升级为效果最大化广告系列 |
SHOPPING_MIGRATE_REGULAR_SHOPPING_CAMPAIGN_OFFERS_TO_PERFORMANCE_MAX |
将常规购物广告系列宣传的商品迁移到现有的效果最大化广告系列 |
MIGRATE_DYNAMIC_SEARCH_ADS_CAMPAIGN_TO_PERFORMANCE_MAX |
将动态搜索广告迁移到效果最大化广告系列 |
PERFORMANCE_MAX_OPT_IN |
在您的账号中制作效果最大化广告系列 |
IMPROVE_PERFORMANCE_MAX_AD_STRENGTH |
将效果最大化广告系列的素材资源组效力提升为“极佳”评分 |
PERFORMANCE_MAX_FINAL_URL_OPT_IN |
为效果最大化广告系列启用“最终到达网址扩展”功能 |
RAISE_TARGET_CPA_BID_TOO_LOW |
如果目标每次转化费用过低,且转化很少或完全没有,请提高目标每次转化费用 |
FORECASTING_SET_TARGET_ROAS |
在预计会增加流量的季节性活动之前提高预算,并将出价策略从“尽可能提高转化价值”更改为“目标广告支出回报率” |
LEAD_FORM |
向广告系列添加潜在客户表单素材资源 |
CALLOUT_ASSET |
将宣传信息素材资源添加到广告系列层级或客户层级 |
SITELINK_ASSET |
将站内链接素材资源添加到广告系列或客户一级 |
CALL_ASSET |
将电话素材资源添加到广告系列层级或客户层级 |
SHOPPING_ADD_AGE_GROUP |
请为因缺少年龄段而被降位的商品添加年龄段属性 |
SHOPPING_ADD_COLOR |
为因缺少颜色而被降位的商品添加颜色 |
SHOPPING_ADD_GENDER |
为因缺少适用性别而被降位的商品添加适用性别 |
SHOPPING_ADD_GTIN |
为因缺少 GTIN 而被降位的商品添加 GTIN(全球贸易项目代码) |
SHOPPING_ADD_MORE_IDENTIFIERS |
为因缺少标识码而被降位的商品添加更多标识码 |
SHOPPING_ADD_SIZE |
请为因缺少尺寸而降级的商品添加尺寸 |
SHOPPING_ADD_PRODUCTS_TO_CAMPAIGN |
为广告系列添加要投放的产品 |
SHOPPING_FIX_DISAPPROVED_PRODUCTS |
解决产品被拒登的问题 |
SHOPPING_TARGET_ALL_OFFERS |
制作定位到所有优惠的全包型广告系列 |
SHOPPING_FIX_SUSPENDED_MERCHANT_CENTER_ACCOUNT |
解决 Merchant Center 账号中止问题 |
SHOPPING_FIX_MERCHANT_CENTER_ACCOUNT_SUSPENSION_WARNING |
解决 Merchant Center 账号中止警告问题 |
DYNAMIC_IMAGE_EXTENSION_OPT_IN |
为账号启用动态图片附加信息 |
RAISE_TARGET_CPA |
提高目标每次转化费用 |
LOWER_TARGET_ROAS |
降低目标广告支出回报率 |
FORECASTING_SET_TARGET_CPA |
在预计会增加流量的季节性活动到来之前,为未指定目标每次转化费用的广告系列设置目标每次转化费用 |
SET_TARGET_CPA |
为未指定目标每次转化费用的广告系列设置目标每次转化费用 |
SET_TARGET_ROAS |
为未指定目标广告支出回报率的广告系列设置目标广告支出回报率 |
REFRESH_CUSTOMER_MATCH_LIST |
更新过去 90 天内未更新的客户名单 |
IMPROVE_GOOGLE_TAG_COVERAGE |
在更多网页上部署 Google 代码 |
CALLOUT_EXTENSION (已弃用) |
已弃用,请改用 CALLOUT_ASSET |
SITELINK_EXTENSION (已弃用) |
已弃用,请改用 SITELINK_ASSET |
CALL_EXTENSION (已弃用) |
已弃用,请改用 CALL_ASSET |
KEYWORD_MATCH_TYPE (已弃用) |
已弃用,请改用 USE_BROAD_MATCH_KEYWORD |
观看此视频了解详情
处理不受支持的类型
检索建议
与 Google Ads API 中的大多数其他实体一样,Recommendation
对象是通过结合使用 GoogleAdsService.SearchStream
和 Google Ads 查询语言查询来提取。
对于每种类型的建议,系统都会在特定于建议的字段中提供详细信息。例如,CAMPAIGN_BUDGET
建议详细信息位于 campaign_budget_recommendation
字段中,并封装在 CampaignBudgetRecommendation
对象中。
在 recommendation
并集字段中查找所有特定于建议的字段。
对建议的影响
某些建议类型会填充建议的 impact
字段。RecommendationImpact
包含采纳建议对帐号效果影响的估算值。impact.base_metrics
和 impact.potential_metrics
字段中提供以下建议指标:
impressions
clicks
cost_micros
conversions
all_conversions
(从 Google Ads API v16 开始提供)video_views
代码示例
以下示例代码会从帐号中检索类型为 TEXT_AD
的所有可用和已拒绝的建议,并输出其部分详细信息:
Java
private void runExample(GoogleAdsClient googleAdsClient, long customerId) { try (GoogleAdsServiceClient googleAdsServiceClient = googleAdsClient.getLatestVersion().createGoogleAdsServiceClient()) { String query = "SELECT recommendation.type, " + "recommendation.campaign, " + "recommendation.text_ad_recommendation " + "FROM recommendation " + "WHERE recommendation.type = TEXT_AD"; // Creates a request that will retrieve all recommendations using pages of the // specified page size. SearchGoogleAdsRequest request = SearchGoogleAdsRequest.newBuilder() .setCustomerId(Long.toString(customerId)) .setPageSize(PAGE_SIZE) .setQuery(query) .build(); // Issues the search request. SearchPagedResponse searchPagedResponse = googleAdsServiceClient.search(request); // Iterates over all rows in all pages and prints the requested field values for the // recommendation in each row. for (GoogleAdsRow googleAdsRow : searchPagedResponse.iterateAll()) { Recommendation recommendation = googleAdsRow.getRecommendation(); Ad recommendedAd = recommendation.getTextAdRecommendation().getAd(); System.out.printf( "Recommendation ('%s') was found for campaign '%s':%n", recommendation.getResourceName(), recommendation.getCampaign()); if (recommendedAd.hasExpandedTextAd()) { ExpandedTextAdInfo eta = recommendedAd.getExpandedTextAd(); System.out.printf( "\tHeadline 1 = '%s'%n" + "\tHeadline 2 = '%s'%n" + "\tDescription = '%s'%n", eta.getHeadlinePart1(), eta.getHeadlinePart2(), eta.getDescription()); } if (recommendedAd.getDisplayUrl() != null) { System.out.printf("\tDisplay URL = '%s'%n", recommendedAd.getDisplayUrl()); } for (String url : recommendedAd.getFinalUrlsList()) { System.out.printf("\tFinal URL = '%s'%n", url); } for (String url : recommendedAd.getFinalMobileUrlsList()) { System.out.printf("\tFinal Mobile URL = '%s'%n", url); } } } }
C#
public void Run(GoogleAdsClient client, long customerId) { // Get the GoogleAdsServiceClient . GoogleAdsServiceClient service = client.GetService(Services.V15.GoogleAdsService); string query = @"SELECT recommendation.type, recommendation.campaign, recommendation.text_ad_recommendation FROM recommendation WHERE recommendation.type = TEXT_AD"; // Create a request that will retrieve all recommendations using pages of the // specified page size. SearchGoogleAdsRequest request = new SearchGoogleAdsRequest() { CustomerId = customerId.ToString(), PageSize = PAGE_SIZE, Query = query }; try { // Issue the search request. PagedEnumerable<SearchGoogleAdsResponse, GoogleAdsRow> searchPagedResponse = service.Search(customerId.ToString(), query); // Iterates over all rows in all pages and prints the requested field values // for the recommendation in each row. foreach (GoogleAdsRow googleAdsRow in searchPagedResponse) { Recommendation recommendation = googleAdsRow.Recommendation; // ... } } catch (GoogleAdsException e) { Console.WriteLine("Failure:"); Console.WriteLine($"Message: {e.Message}"); Console.WriteLine($"Failure: {e.Failure}"); Console.WriteLine($"Request ID: {e.RequestId}"); throw; } }
PHP
public static function runExample(GoogleAdsClient $googleAdsClient, int $customerId) { $googleAdsServiceClient = $googleAdsClient->getGoogleAdsServiceClient(); // Creates a query that retrieves recommendations for text ads. $query = 'SELECT recommendation.type, recommendation.campaign, ' . 'recommendation.text_ad_recommendation ' . 'FROM recommendation ' . 'WHERE recommendation.type = TEXT_AD'; // Issues a search request by specifying page size. $response = $googleAdsServiceClient->search( SearchGoogleAdsRequest::build($customerId, $query)->setPageSize(self::PAGE_SIZE) ); // Iterates over all rows in all pages and prints the requested field values for // the recommendation in each row. foreach ($response->iterateAllElements() as $googleAdsRow) { /** @var GoogleAdsRow $googleAdsRow */ $recommendation = $googleAdsRow->getRecommendation(); printf( "Recommendation with resource name '%s' was found for campaign " . "with resource name '%s':%s", $recommendation->getResourceName(), $recommendation->getCampaign(), PHP_EOL ); $recommendedAd = $recommendation->getTextAdRecommendation()->getAd(); if (!is_null($recommendedAd->getExpandedTextAd())) { $recommendedExpandedTextAd = $recommendedAd->getExpandedTextAd(); printf( "\tHeadline part 1 is '%s'.%s", $recommendedExpandedTextAd->getHeadlinePart1(), PHP_EOL ); printf( "\tHeadline part 2 is '%s'.%s", $recommendedExpandedTextAd->getHeadlinePart2(), PHP_EOL ); printf( "\tDescription is '%s'%s", $recommendedExpandedTextAd->getDescription(), PHP_EOL ); } if (!is_null($recommendedAd->getDisplayUrl())) { printf("\tDisplay URL is '%s'.%s", $recommendedAd->getDisplayUrl(), PHP_EOL); } foreach ($recommendedAd->getFinalUrls() as $finalUrl) { /** @var string $finalUrl */ printf("\tFinal URL is '%s'.%s", $finalUrl, PHP_EOL); } foreach ($recommendedAd->getFinalMobileUrls() as $finalMobileUrl) { /** @var string $finalMobileUrl */ printf("\tFinal Mobile URL is '%s'.%s", $finalMobileUrl, PHP_EOL); } } }
Python
def main(client, customer_id): ga_service = client.get_service("GoogleAdsService") query = """ SELECT recommendation.type, recommendation.campaign, recommendation.text_ad_recommendation FROM recommendation WHERE recommendation.type = TEXT_AD""" search_request = client.get_type("SearchGoogleAdsStreamRequest") search_request.customer_id = customer_id search_request.query = query stream = ga_service.search_stream(request=search_request) for batch in stream: for row in batch.results: recommendation = row.recommendation recommended_ad = recommendation.text_ad_recommendation.ad print( f'Recommendation ("{recommendation.resource_name}") ' f'was found for campaign "{recommendation.campaign}".' ) if recommended_ad.display_url: print(f'\tDisplay URL = "{recommended_ad.display_url}"') for url in recommended_ad.final_urls: print(f'\tFinal URL = "{url}"') for url in recommended_ad.final_mobile_urls: print(f'\tFinal Mobile URL = "{url}"')
Ruby
def get_text_ad_recommendations(customer_id) # GoogleAdsClient will read a config file from # ENV['HOME']/google_ads_config.rb when called without parameters client = Google::Ads::GoogleAds::GoogleAdsClient.new ga_service = client.service.google_ads query = <<~QUERY SELECT recommendation.type, recommendation.campaign, recommendation.text_ad_recommendation FROM recommendation WHERE recommendation.type = TEXT_AD QUERY response = ga_service.search( customer_id: customer_id, query: query, page_size: PAGE_SIZE, ) response.each do |row| recommendation = row.recommendation recommended_ad = recommendation.text_ad_recommendation.ad puts "Recommendation ('#{recommendation.resource_name}') was found for "\ "campaign '#{recommendation.campaign}'." if recommended_ad.expanded_text_ad eta = recommended_ad.expanded_text_ad puts "\tHeadline 1 = '#{eta.headline_part1}'\n\tHeadline2 = '#{eta.headline_part2}'\n" + "\tDescription = '#{eta.description}'" end if recommended_ad.display_url puts "\tDisplay URL = '#{recommended_ad.display_url}'" end recommended_ad.final_urls.each do |url| puts "\tFinal Url = '#{url}'" end recommended_ad.final_mobile_urls.each do |url| puts "\tFinal Mobile Url = '#{url}'" end end end
Perl
sub get_text_ad_recommendations { my ($api_client, $customer_id) = @_; # Creates the search query. my $search_query = "SELECT recommendation.type, recommendation.campaign, " . "recommendation.text_ad_recommendation " . "FROM recommendation WHERE recommendation.type = TEXT_AD"; # Create a search Google Ads request that will retrieve all recommendations for # text ads using pages of the specified page size. my $search_request = Google::Ads::GoogleAds::V15::Services::GoogleAdsService::SearchGoogleAdsRequest ->new({ customerId => $customer_id, query => $search_query, pageSize => PAGE_SIZE }); # Get the GoogleAdsService. my $google_ads_service = $api_client->GoogleAdsService(); my $iterator = Google::Ads::GoogleAds::Utils::SearchGoogleAdsIterator->new({ service => $google_ads_service, request => $search_request }); # Iterate over all rows in all pages and print the requested field values for # the recommendation in each row. while ($iterator->has_next) { my $google_ads_row = $iterator->next; my $recommendation = $google_ads_row->{recommendation}; printf "Recommendation '%s' was found for campaign '%s':\n", $recommendation->{resourceName}, $recommendation->{campaign}; my $recommended_ad = $recommendation->{textAdRecommendation}{ad}; if ($recommended_ad->{expandedTextAd}) { my $recommended_expanded_text_ad = $recommended_ad->{expandedTextAd}; printf "\tHeadline part 1 is '%s'.\n" . "\tHeadline part 2 is '%s'.\n" . "\tDescription is '%s'.\n", $recommended_expanded_text_ad->{headlinePart1}, $recommended_expanded_text_ad->{headlinePart2}, $recommended_expanded_text_ad->{description}; } if ($recommended_ad->{displayUrl}) { printf "\tDisplay URL is '%s'.\n", $recommended_ad->{displayUrl}; } foreach my $final_url (@{$recommended_ad->{finalUrls}}) { printf "\tFinal URL is '%s'.\n", $final_url; } foreach my $final_mobile_url (@{$recommended_ad->{finalMobileUrls}}) { printf "\tFinal Mobile URL is '%s'.\n", $final_mobile_url; } } return 1; }
采取措施
可以采纳或拒绝任何检索到的建议。
根据建议类型,建议可能每天更改一次,甚至一天更改多次。如果发生这种情况,建议对象的 resource_name
可能会在检索到建议后过时。
建议在检索后尽快针对建议采取措施。
采纳建议
您可以使用 RecommendationService
的 ApplyRecommendation
方法采纳有效或已忽略的建议。
建议类型可以包含必需或可选参数。大多数建议都附带默认使用的建议值。
并非所有建议类型都支持为自动采纳建议设置帐号。不过,您可以为 Google Ads API 完全支持的建议类型实现类似的行为。如需了解详情,请参阅 DetectAndApplyRecommendations
代码示例。
使用 ApplyRecommendationOperation
的 apply_parameters
联合字段可应用具有特定参数值的建议。每种合适的建议类型都有自己的字段。未在 apply_parameters
字段中列出的任何建议类型都不会使用这些参数值。
代码示例
以下代码示例说明了如何通过推荐的应用参数来采纳建议:
Java
private void runExample( GoogleAdsClient googleAdsClient, long customerId, String recommendationId) { String recommendationResourceName = ResourceNames.recommendation(customerId, recommendationId); ApplyRecommendationOperation.Builder operationBuilder = ApplyRecommendationOperation.newBuilder().setResourceName(recommendationResourceName); // Each recommendation types has optional parameters to override the recommended values. // This is an example to override a recommended ad when a TextAdRecommendation is applied. // Please read // https://developers.google.com/google-ads/api/reference/rpc/latest/ApplyRecommendationOperation // for details. // Note that additional import statements are needed for this example to work. And also, please // replace INSERT_AD_ID_HERE with a valid ad ID below. // // Ad overrideAd = Ad.newBuilder().setId(Long.parseLong("INSERT_AD_ID_HERE")).build(); // operationBuilder.setTextAd(TextAdParameters.newBuilder(). // setAd(overrideAd).build()).build(); List<ApplyRecommendationOperation> operations = new ArrayList<>(); operations.add(operationBuilder.build()); try (RecommendationServiceClient recommendationServiceClient = googleAdsClient.getLatestVersion().createRecommendationServiceClient()) { ApplyRecommendationResponse response = recommendationServiceClient.applyRecommendation(Long.toString(customerId), operations); System.out.printf("Applied %d recommendation:%n", response.getResultsCount()); for (ApplyRecommendationResult result : response.getResultsList()) { System.out.println(result.getResourceName()); } } }
C#
public void Run(GoogleAdsClient client, long customerId, long recommendationId) { // Get the RecommendationServiceClient. RecommendationServiceClient service = client.GetService( Services.V15.RecommendationService); ApplyRecommendationOperation operation = new ApplyRecommendationOperation() { ResourceName = ResourceNames.Recommendation(customerId, recommendationId), // Each recommendation types has optional parameters to override the recommended // values. For example, you can override a recommended ad when a // TextAdRecommendation is applied, as shown below. // Please read https://developers.google.com/google-ads/api/reference/rpc/latest/ApplyRecommendationOperation // for details. // TextAd = new TextAdParameters() { // Ad = new Ad() { // Id = long.Parse("INSERT_AD_ID_HERE") // } // } }; try { ApplyRecommendationResponse response = service.ApplyRecommendation( customerId.ToString(), new ApplyRecommendationOperation[] { operation }); Console.WriteLine($"Applied {0} recommendation(s):", response.Results.Count); foreach (ApplyRecommendationResult result in response.Results) { Console.WriteLine($"- {result.ResourceName}"); } } catch (GoogleAdsException e) { Console.WriteLine("Failure:"); Console.WriteLine($"Message: {e.Message}"); Console.WriteLine($"Failure: {e.Failure}"); Console.WriteLine($"Request ID: {e.RequestId}"); throw; } }
PHP
public static function runExample( GoogleAdsClient $googleAdsClient, int $customerId, string $recommendationId ) { $recommendationResourceName = ResourceNames::forRecommendation($customerId, $recommendationId); $applyRecommendationOperation = new ApplyRecommendationOperation(); $applyRecommendationOperation->setResourceName($recommendationResourceName); // Each recommendation type has optional parameters to override the recommended values. // This is an example to override a recommended ad when a TextAdRecommendation is applied. // For details, please read // https://developers.google.com/google-ads/api/reference/rpc/latest/ApplyRecommendationOperation. /* $overridingAd = new Ad([ 'id' => 'INSERT_AD_ID_AS_INTEGER_HERE' ]); $applyRecommendationOperation->setTextAd(new TextAdParameters(['ad' => $overridingAd])); */ // Issues a mutate request to apply the recommendation. $recommendationServiceClient = $googleAdsClient->getRecommendationServiceClient(); $response = $recommendationServiceClient->applyRecommendation( ApplyRecommendationRequest::build($customerId, [$applyRecommendationOperation]) ); /** @var Recommendation $appliedRecommendation */ $appliedRecommendation = $response->getResults()[0]; printf( "Applied recommendation with resource name: '%s'.%s", $appliedRecommendation->getResourceName(), PHP_EOL ); }
Python
def main(client, customer_id, recommendation_id): recommendation_service = client.get_service("RecommendationService") apply_recommendation_operation = client.get_type( "ApplyRecommendationOperation" ) apply_recommendation_operation.resource_name = ( recommendation_service.recommendation_path( customer_id, recommendation_id ) ) # This is where we override the recommended ad when a TextAdRecommendation is applied. # override_ad = client.get_type("Ad") # override_ad.resource_name = "INSERT_AD_ID_HERE" # apply_recommendation_operation.text_ad.ad = override_ad recommendation_response = recommendation_service.apply_recommendation( customer_id=customer_id, operations=[apply_recommendation_operation] ) print( "Applied recommendation with resource name: " f"'{recommendation_response.results[0].resource_name}'" )
Ruby
def apply_recommendation(customer_id, recommendation_id) # GoogleAdsClient will read a config file from # ENV['HOME']/google_ads_config.rb when called without parameters client = Google::Ads::GoogleAds::GoogleAdsClient.new recommendation_resource = client.path.recommendation(customer_id, recommendation_id) apply_recommendation_operation = client.operation.apply_recommendation apply_recommendation_operation.resource_name = recommendation_resource # Each recommendation type has optional parameters to override the recommended # values. This is an example to override a recommended ad when a # TextAdRecommendation is applied. # For details, please read # https://developers.google.com/google-ads/api/reference/rpc/google.ads.google_ads.v1.services#google.ads.google_ads.v1.services.ApplyRecommendationOperation # # text_ad_parameters = client.resource.text_ad_parameters do |tap| # tap.ad = client.resource.ad do |ad| # ad.id = "INSERT_AD_ID_AS_INTEGER_HERE" # end # end # apply_recommendation_operation.text_ad = text_ad_parameters # Issues a mutate request to apply the recommendation. recommendation_service = client.service.recommendation response = recommendation_service.apply_recommendation( customer_id: customer_id, operations: [apply_recommendation_operation], ) applied_recommendation = response.results.first puts "Applied recommendation with resource name: '#{applied_recommendation.resource_name}'." end
Perl
sub apply_recommendation { my ($api_client, $customer_id, $recommendation_id) = @_; my $recommendation_resource_name = Google::Ads::GoogleAds::V15::Utils::ResourceNames::recommendation( $customer_id, $recommendation_id); # Create an apply recommendation operation. my $apply_recommendation_operation = Google::Ads::GoogleAds::V15::Services::RecommendationService::ApplyRecommendationOperation ->new({ resourceName => $recommendation_resource_name }); # Each recommendation type has optional parameters to override the recommended values. # This is an example to override a recommended ad when a TextAdRecommendation is applied. # For details, please read # https://developers.google.com/google-ads/api/reference/rpc/latest/ApplyRecommendationOperation. # # my $overriding_ad = Google::Ads::GoogleAds::V15::Resources::Ad->new({ # id => "INSERT_AD_ID_AS_INTEGER_HERE" # }); # my $text_ad_parameters = # Google::Ads::GoogleAds::V15::Services::RecommendationService::TextAdParameters # ->new({ad => $overriding_ad}); # $apply_recommendation_operation->{textAd} = $text_ad_parameters; # Apply the recommendation. my $apply_recommendation_response = $api_client->RecommendationService()->apply({ customerId => $customer_id, operations => [$apply_recommendation_operation]}); printf "Applied recommendation with resource name: '%s'.\n", $apply_recommendation_response->{results}[0]{resourceName}; return 1; }
观看这些视频以了解详情
应用参数
Bulk
错误数
测试
拒绝建议
您可以使用 RecommendationService
拒绝建议。代码结构与采纳建议类似,只不过您使用的是 DismissRecommendationOperation
和 RecommendationService.DismissRecommendation
。
观看这些视频以了解详情
Bulk
错误数
测试
自动采纳建议
从 Google Ads API v15 开始,您可以使用 RecommendationSubscriptionService
自动采纳特定类型的建议。
如需订阅特定的推荐类型,请创建一个 RecommendationSubscription
对象,将 type
字段设置为某个受支持的推荐类型,并将 status
字段设置为 ENABLED
。
订阅支持的建议类型
ENHANCED_CPC_OPT_IN
KEYWORD
KEYWORD_MATCH_TYPE
LOWER_TARGET_ROAS
MAXIMIZE_CLICKS_OPT_IN
OPTIMIZE_AD_ROTATION
RAISE_TARGET_CPA
RESPONSIVE_SEARCH_AD
RESPONSIVE_SEARCH_AD_IMPROVE_AD_STRENGTH
SEARCH_PARTNERS_OPT_IN
SEARCH_PLUS_OPT_IN
SET_TARGET_CPA
SET_TARGET_ROAS
TARGET_CPA_OPT_IN
TARGET_ROAS_OPT_IN
USE_BROAD_MATCH_KEYWORD
检索订阅
如需获取有关帐号的推荐订阅的信息,请查询 recommendation_subscription
资源。
如需查看自动应用的更改,请查询 change_event
资源,将 change_client_type
过滤为 GOOGLE_ADS_RECOMMENDATIONS_SUBSCRIPTION
。
广告系列制作方面的建议
从 Google Ads API v16 开始,您可以使用 RecommendationService.GenerateRecommendationsRequest
在广告系列制作期间针对一组给定的建议类型生成建议。
GenerateRecommendations
接受作为输入:客户 ID、广告渠道类型(必须是 SEARCH
或 PERFORMANCE_MAX
)、要生成的推荐类型列表,以及依赖于指定类型的各种数据点。它会根据您提供的数据输出 Recommendation
对象列表。如果没有足够的数据来为所请求的 recommendation_types
生成建议,或者广告系列已处于建议状态,则结果集将不会包含针对该类型的建议。请确保您的应用能够处理未针对请求的建议类型返回任何建议的情况。
下表介绍了 GenerateRecommendations
支持的建议类型,以及您必须提供的字段才能收到该类型的建议。最佳做法是,在收集到与请求的建议类型相关的所有信息之后,发送 GenerateRecommendations
请求。如需详细了解必填字段和选填字段(包括嵌套字段),请参阅参考文档。
RecommendationType | 必填字段 | 可选字段 |
---|---|---|
KEYWORD |
|
|
MAXIMIZE_CLICKS_OPT_IN |
|
|
MAXIMIZE_CONVERSIONS_OPT_IN |
|
|
MAXIMIZE_CONVERSION_VALUE_OPT_IN |
|
|
SET_TARGET_CPA |
|
|
SET_TARGET_ROAS |
|
|
SITELINK_ASSET
注意:返回的 SitelinkAssetRecommendation 对象将包含空列表。如果 GenerateRecommendations 响应包含 SitelinkAssetRecommendation ,则可以将其视为向广告系列添加至少一个站内链接素材资源的信号。 |
|
|
TARGET_CPA_OPT_IN |
|
|
TARGET_ROAS_OPT_IN |
|
使用流程示例
假设您的公司是一家为用户提供广告系列制作工作流程的广告代理机构,并且您希望在该流程中为用户提供建议。您可以使用 GenerateRecommendationsRequest
按需生成建议,并将这些建议整合到广告系列制作界面中。
使用流程可能如下所示:
有位用户前往您的应用制作效果最大化广告系列。
用户在广告系列制作流程中提供一些初始信息。例如,他们提供了构建单个
SitelinkAsset
所需的详细信息,并选择了TARGET_SPEND
作为智能出价策略。您发送了一个
GenerateRecommendationsRequest
,它会设置以下字段:campaign_sitelink_count
:设置为1
,这是进行中的广告系列中的站内链接素材资源的数量。bidding_info
:将嵌套的bidding_strategy_type
字段设置为TARGET_SPEND
。conversion_tracking_status
:设置为此客户的ConversionTrackingStatus
。如需了解如何检索此字段,请参阅转化管理的使用入门指南。recommendation_types
:设置为[SITELINK_ASSET, MAXIMIZE_CLICKS_OPT_IN]
。advertising_channel_type
:设置为PERFORMANCE_MAX
。customer_id
:设置为制作广告系列的客户的 ID。
您可以采用
GenerateRecommendationsResponse
中的建议(在本例中为SitelinkAssetRecommendation
和MaximizeClicksOptInRecommendation
),然后在广告系列制作界面中显示这些建议,从而向用户推荐这些建议。如果用户接受了建议,您就可以在用户完成广告系列制作流程后,将其纳入广告系列制作请求中。