推荐 可以通过以下几种方式改进您的营销活动:
- 推出新的相关功能
- 通过优化出价、关键词和广告,让您的预算发挥更大作用。
- 提升营销活动的整体效果和效率
为了提高优化得分,您可以使用 RecommendationService 来检索建议,然后根据情况应用或忽略它们。您还可以使用 RecommendationSubscriptionService 订阅 自动应用 推荐。
优化得分
优化得分是对您的 Google Ads 账号设置效果的估计,可在Customer和Campaign级别中使用。
customer 和 campaign 报告中提供了与优化相关的指标:
metrics.optimization_score_url提供了一个深入账号的链接,以便在 Google Ads UI 中查看有关相关推荐的信息。metrics.optimization_score_uplift表示如果应用所有相关建议,优化得分将提高多少。这是基于所有可用推荐的整体估算,而不仅仅是每条推荐的提升分数之和。
要对返回的推荐结果进行分组和排序,您可以使用查询中的 segments.recommendation_type 按推荐类型对这两个指标进行细分。
推荐类型
完全支持的建议类型
| RecommendationType | 说明 |
|---|---|
CAMPAIGN_BUDGET |
修复受预算限制的活动 |
KEYWORD |
添加新关键字 |
TEXT_AD |
添加推荐广告 |
TARGET_CPA_OPT_IN |
使用目标每次转化费用 (CPA) 出价 |
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_DEMAND_GEN_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_ASSET |
向广告系列添加潜在客户表单素材资源 |
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 代码 |
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 字段中提供以下建议指标:
impressionsclickscost_microsconversionsall_conversionsvideo_views
即使 impact 字段已填充,指标的可用性也会因推荐类型和广告系列类型等因素而异。一般来说,在使用任何影响指标之前,请先检查该指标是否可用。
代码示例
以下示例代码从账号中检索所有可用的和已忽略的 KEYWORD 类型的推荐,并打印其中一些详细信息:
Java
try (GoogleAdsServiceClient googleAdsServiceClient = googleAdsClient.getLatestVersion().createGoogleAdsServiceClient(); RecommendationServiceClient recommendationServiceClient = googleAdsClient.getLatestVersion().createRecommendationServiceClient()) { // Creates a query that retrieves keyword recommendations. String query = "SELECT recommendation.resource_name, " + " recommendation.campaign, " + " recommendation.keyword_recommendation " + "FROM recommendation " + "WHERE recommendation.type = KEYWORD"; // Constructs the SearchGoogleAdsStreamRequest. SearchGoogleAdsStreamRequest request = SearchGoogleAdsStreamRequest.newBuilder() .setCustomerId(Long.toString(customerId)) .setQuery(query) .build(); // Issues the search stream request to detect keyword recommendations that exist for the // customer account. ServerStream<SearchGoogleAdsStreamResponse> stream = googleAdsServiceClient.searchStreamCallable().call(request); // Creates apply operations for all the recommendations found. List<ApplyRecommendationOperation> applyRecommendationOperations = new ArrayList<>(); for (SearchGoogleAdsStreamResponse response : stream) { for (GoogleAdsRow googleAdsRow : response.getResultsList()) { Recommendation recommendation = googleAdsRow.getRecommendation(); System.out.printf( "Keyword recommendation '%s' was found for campaign '%s'%n", recommendation.getResourceName(), recommendation.getCampaign()); KeywordInfo keyword = recommendation.getKeywordRecommendation().getKeyword(); System.out.printf("\tKeyword = '%s'%n", keyword.getText()); System.out.printf("\tMatch type = '%s'%n", keyword.getMatchType()); // Creates an ApplyRecommendationOperation that will apply this recommendation, and adds // it to the list of operations. applyRecommendationOperations.add(buildRecommendationOperation(recommendation)); } }
C#
// Get the GoogleAdsServiceClient. GoogleAdsServiceClient googleAdsService = client.GetService( Services.V22.GoogleAdsService); // Creates a query that retrieves keyword recommendations. string query = "SELECT recommendation.resource_name, " + "recommendation.campaign, recommendation.keyword_recommendation " + "FROM recommendation WHERE " + $"recommendation.type = KEYWORD"; List<ApplyRecommendationOperation> operations = new List<ApplyRecommendationOperation>(); try { // Issue a search request. googleAdsService.SearchStream(customerId.ToString(), query, delegate (SearchGoogleAdsStreamResponse resp) { Console.WriteLine($"Found {resp.Results.Count} recommendations."); foreach (GoogleAdsRow googleAdsRow in resp.Results) { Recommendation recommendation = googleAdsRow.Recommendation; Console.WriteLine("Keyword recommendation " + $"{recommendation.ResourceName} was found for campaign " + $"{recommendation.Campaign}."); if (recommendation.KeywordRecommendation != null) { KeywordInfo keyword = recommendation.KeywordRecommendation.Keyword; Console.WriteLine($"Keyword = {keyword.Text}, type = " + "{keyword.MatchType}"); } operations.Add( BuildApplyRecommendationOperation(recommendation.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
$googleAdsServiceClient = $googleAdsClient->getGoogleAdsServiceClient(); // Creates a query that retrieves keyword recommendations. $query = 'SELECT recommendation.resource_name, recommendation.campaign, ' . 'recommendation.keyword_recommendation ' . 'FROM recommendation ' . 'WHERE recommendation.type = KEYWORD '; // Issues a search request to detect keyword recommendations that exist for the // customer account. $response = $googleAdsServiceClient->search(SearchGoogleAdsRequest::build($customerId, $query)); $operations = []; // 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( "Keyword recommendation with resource name '%s' was found for campaign " . "with resource name '%s':%s", $recommendation->getResourceName(), $recommendation->getCampaign(), PHP_EOL ); if (!is_null($recommendation->getKeywordRecommendation())) { $keyword = $recommendation->getKeywordRecommendation()->getKeyword(); printf( "\tKeyword = '%s'%s\ttype = '%s'%s", $keyword->getText(), PHP_EOL, KeywordMatchType::name($keyword->getMatchType()), PHP_EOL ); } // Creates an ApplyRecommendationOperation that will be used to apply this // recommendation, and adds it to the list of operations. $operations[] = self::buildRecommendationOperation($recommendation->getResourceName()); }
Python
googleads_service = client.get_service("GoogleAdsService") query: str = """ SELECT recommendation.campaign, recommendation.keyword_recommendation FROM recommendation WHERE recommendation.type = KEYWORD""" # Detects keyword recommendations that exist for the customer account. response: Iterable[GoogleAdsRow] = googleads_service.search( customer_id=customer_id, query=query ) operations: List[ApplyRecommendationOperation] = [] for row in response: recommendation = row.recommendation print( f"Keyword recommendation ('{recommendation.resource_name}') " f"was found for campaign '{recommendation.campaign}." ) keyword = recommendation.keyword_recommendation.keyword print( f"\tKeyword = '{keyword.text}'\n" f"\tType = '{keyword.match_type}'" ) # Create an ApplyRecommendationOperation that will be used to apply # this recommendation, and add it to the list of operations. operations.append( build_recommendation_operation(client, recommendation.resource_name) )
Ruby
query = <<~QUERY SELECT recommendation.resource_name, recommendation.campaign, recommendation.keyword_recommendation FROM recommendation WHERE recommendation.type = KEYWORD QUERY google_ads_service = client.service.google_ads response = google_ads_service.search( customer_id: customer_id, query: query, ) operations = response.each do |row| recommendation = row.recommendation puts "Keyword recommendation ('#{recommendation.resource_name}') was found for "\ "campaign '#{recommendation.campaign}'." if recommendation.keyword_recommendation keyword = recommendation.keyword_recommendation.keyword puts "\tKeyword = '#{keyword.text}'" puts "\ttype = '#{keyword.match_type}'" end build_recommendation_operation(client, recommendation.resource_name) end
Perl
# Create the search query. my $search_query = "SELECT recommendation.resource_name, " . "recommendation.campaign, recommendation.keyword_recommendation " . "FROM recommendation " . "WHERE recommendation.type = KEYWORD"; # Get the GoogleAdsService. my $google_ads_service = $api_client->GoogleAdsService(); my $search_stream_handler = Google::Ads::GoogleAds::Utils::SearchStreamHandler->new({ service => $google_ads_service, request => { customerId => $customer_id, query => $search_query }}); # Create apply operations for all the recommendations found. my $apply_recommendation_operations = (); $search_stream_handler->process_contents( sub { my $google_ads_row = shift; my $recommendation = $google_ads_row->{recommendation}; printf "Keyword recommendation '%s' was found for campaign '%s'.\n", $recommendation->{resourceName}, $recommendation->{campaign}; my $keyword = $recommendation->{keywordRecommendation}{keyword}; printf "\tKeyword = '%s'\n", $keyword->{text}; printf "\tMatch type = '%s'\n", $keyword->{matchType}; # Creates an ApplyRecommendationOperation that will apply this recommendation, and adds # it to the list of operations. push @$apply_recommendation_operations, build_recommendation_operation($recommendation); });
curl
# Gets keyword recommendations. # # Variables: # API_VERSION, # CUSTOMER_ID, # DEVELOPER_TOKEN, # MANAGER_CUSTOMER_ID, # OAUTH2_ACCESS_TOKEN: # See https://developers.google.com/google-ads/api/rest/auth#request_headers # for details. curl -f --request POST \ "https://googleads.googleapis.com/v${API_VERSION}/customers/${CUSTOMER_ID}/googleAds:search" \ --header "Content-Type: application/json" \ --header "developer-token: ${DEVELOPER_TOKEN}" \ --header "login-customer-id: ${MANAGER_CUSTOMER_ID}" \ --header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \ --data @- <<EOF { "query": " SELECT recommendation.campaign, recommendation.keyword_recommendation FROM recommendation WHERE recommendation.type = KEYWORD " } EOF
采取行动
任何检索到的建议都可以被采纳或忽略。
根据推荐类型的不同,推荐内容可能会每天变化,甚至一天变化多次。当这种情况发生时,推荐对象的 resource_name 在检索推荐后可能会过时。
您最好在检索后尽快根据建议采取行动。
采纳建议
您可以使用 RecommendationService 的 ApplyRecommendation 方法应用已激活或已驳回的建议。
建议类型可以包含必需参数或可选参数。大多数推荐方案都附带默认使用的推荐值。
并非所有类型的建议都支持为账号设置自动采纳建议。不过,您可以针对 Google Ads API 完全支持的建议类型实现类似的行为。
如需了解详情,请参阅 DetectAndApplyRecommendations 代码示例。
使用 ApplyRecommendationOperation 的 apply_parameters 联合字段可应用具有特定参数值的建议。每种合适的推荐类型都有其专属字段。
apply_parameters 字段中未列出的任何建议类型都不会使用这些参数值。
代码示例
以下代码演示了如何构建 ApplyRecommendationOperation 以及如何替换建议值(如果您想使用自己的值)。
Java
/** Creates and returns an ApplyRecommendationOperation to apply the given recommendation. */ private ApplyRecommendationOperation buildRecommendationOperation(Recommendation recommendation) { // If you have a recommendation ID instead of a resource name, you can create a resource name // like this: // String resourceName = ResourceNames.recommendation(customerId, recommendationId); // Creates a builder to construct the operation. Builder operationBuilder = ApplyRecommendationOperation.newBuilder(); // Each recommendation type has optional parameters to override the recommended values. Below is // an example showing how to override a recommended ad when a TextAdRecommendation is applied. // operationBuilder.getTextAdBuilder().getAdBuilder().setResourceName("INSERT_AD_RESOURCE_NAME"); // Sets the operation's resource name to the resource name of the recommendation to apply. operationBuilder.setResourceName(recommendation.getResourceName()); return operationBuilder.build(); }
C#
private ApplyRecommendationOperation BuildApplyRecommendationOperation( string recommendationResourceName ) { // If you have a recommendation_id instead of the resource_name you can create a // resource name from it like this: // string recommendationResourceName = // ResourceNames.Recommendation(customerId, recommendationId) // 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. /* Ad overridingAd = new Ad() { Id = "INSERT_AD_ID_AS_LONG_HERE" }; applyRecommendationOperation.TextAd = new TextAdParameters() { Ad = overridingAd }; */ ApplyRecommendationOperation applyRecommendationOperation = new ApplyRecommendationOperation() { ResourceName = recommendationResourceName }; return applyRecommendationOperation; }
PHP
private static function buildRecommendationOperation( string $recommendationResourceName ): ApplyRecommendationOperation { // If you have a recommendation_id instead of the resource name, you can create a resource // name from it like this: /* $recommendationResourceName = ResourceNames::forRecommendation($customerId, $recommendationId); */ // 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. $applyRecommendationOperation = new ApplyRecommendationOperation(); $applyRecommendationOperation->setResourceName($recommendationResourceName); return $applyRecommendationOperation; }
Python
def build_recommendation_operation( client: GoogleAdsClient, recommendation: str ) -> ApplyRecommendationOperation: """Creates a ApplyRecommendationOperation to apply the given recommendation. Args: client: an initialized GoogleAdsClient instance. recommendation: a resource name for the recommendation to be applied. """ # If you have a recommendation ID instead of a resource name, you can create # a resource name like this: # # googleads_service = client.get_service("GoogleAdsService") # resource_name = googleads_service.recommendation_path( # customer_id, recommendation.id # ) operation: ApplyRecommendationOperation = client.get_type( "ApplyRecommendationOperation" ) # Each recommendation type has optional parameters to override the # recommended values. Below is an example showing how to override a # recommended ad when a TextAdRecommendation is applied. # # operation.text_ad.ad.resource_name = "INSERT_AD_RESOURCE_NAME" # # For more details, see: # https://developers.google.com/google-ads/api/reference/rpc/latest/ApplyRecommendationOperation#apply_parameters operation.resource_name = recommendation return operation
Ruby
def build_recommendation_operation(client, recommendation) # If you have a recommendation_id instead of the resource_name # you can create a resource name from it like this: # recommendation_resource = # client.path.recommendation(customer_id, recommendation_id) operations = client.operation.apply_recommendation operations.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. # # 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 # operation.text_ad = text_ad_parameters # # For more details, see: # https://developers.google.com/google-ads/api/reference/rpc/latest/ApplyRecommendationOperation#apply_parameters return operation end
Perl
sub build_recommendation_operation { my ($recommendation) = @_; # If you have a recommendation ID instead of a resource name, you can create a resource # name like this: # my $recommendation_resource_name = # Google::Ads::GoogleAds::V22::Utils::ResourceNames::recommendation( # $customer_id, $recommendation_id); # Each recommendation type has optional parameters to override the recommended values. # Below is an example showing how to override a recommended ad when a TextAdRecommendation # is applied. # my $overriding_ad = Google::Ads::GoogleAds::V22::Resources::Ad->new({ # id => "INSERT_AD_ID_AS_INTEGER_HERE" # }); # my $text_ad_parameters = # Google::Ads::GoogleAds::V22::Services::RecommendationService::TextAdParameters # ->new({ad => $overriding_ad}); # $apply_recommendation_operation->{textAd} = $text_ad_parameters; # Create an apply recommendation operation. my $apply_recommendation_operation = Google::Ads::GoogleAds::V22::Services::RecommendationService::ApplyRecommendationOperation ->new({ resourceName => $recommendation->{resourceName}}); return $apply_recommendation_operation; }
下一个示例调用 ApplyRecommendation,发送在前面代码中创建的应用推荐操作。
Java
// Issues a mutate request to apply the recommendations. ApplyRecommendationResponse applyRecommendationsResponse = recommendationServiceClient.applyRecommendation( Long.toString(customerId), applyRecommendationOperations); for (ApplyRecommendationResult applyRecommendationResult : applyRecommendationsResponse.getResultsList()) { System.out.printf( "Applied recommendation with resource name: '%s'.%n", applyRecommendationResult.getResourceName()); }
C#
private void ApplyRecommendation(GoogleAdsClient client, long customerId, List<ApplyRecommendationOperation> operations) { // Get the RecommendationServiceClient. RecommendationServiceClient recommendationService = client.GetService( Services.V22.RecommendationService); ApplyRecommendationRequest applyRecommendationRequest = new ApplyRecommendationRequest() { CustomerId = customerId.ToString(), }; applyRecommendationRequest.Operations.AddRange(operations); ApplyRecommendationResponse response = recommendationService.ApplyRecommendation(applyRecommendationRequest); foreach (ApplyRecommendationResult result in response.Results) { Console.WriteLine("Applied a recommendation with resource name: " + result.ResourceName); } }
PHP
private static function applyRecommendations( GoogleAdsClient $googleAdsClient, int $customerId, array $operations ): void { // Issues a mutate request to apply the recommendations. $recommendationServiceClient = $googleAdsClient->getRecommendationServiceClient(); $response = $recommendationServiceClient->applyRecommendation( ApplyRecommendationRequest::build($customerId, $operations) ); foreach ($response->getResults() as $appliedRecommendation) { /** @var Recommendation $appliedRecommendation */ printf( "Applied a recommendation with resource name: '%s'.%s", $appliedRecommendation->getResourceName(), PHP_EOL ); } }
Python
def apply_recommendations( client: GoogleAdsClient, customer_id: str, operations: List[ApplyRecommendationOperation], ) -> None: """Applies a batch of recommendations. Args: client: an initialized GoogleAdsClient instance. customer_id: a client customer ID. operations: a list of ApplyRecommendationOperation messages. """ # Issues a mutate request to apply the recommendations. recommendation_service = client.get_service("RecommendationService") response: ApplyRecommendationResult = ( recommendation_service.apply_recommendation( customer_id=customer_id, operations=operations ) ) for result in response.results: print( "Applied a recommendation with resource name: " f"'{result.resource_name}'." )
Ruby
def apply_recommendations(client, customer_id, operations) # Issues a mutate request to apply the recommendation. recommendation_service = client.service.recommendation response = recommendation_service.apply_recommendation( customer_id: customer_id, operations: [operations], ) response.results.each do |applied_recommendation| puts "Applied recommendation with resource name: '#{applied_recommendation.resource_name}'." end end
Perl
# Issue a mutate request to apply the recommendations. my $apply_recommendation_response = $api_client->RecommendationService()->apply({ customerId => $customer_id, operations => $apply_recommendation_operations }); foreach my $result (@{$apply_recommendation_response->{results}}) { printf "Applied recommendation with resource name: '%s'.\n", $result->{resourceName}; }
curl
# Applies a recommendation. # # Variables: # API_VERSION, # CUSTOMER_ID, # DEVELOPER_TOKEN, # MANAGER_CUSTOMER_ID, # OAUTH2_ACCESS_TOKEN: # See https://developers.google.com/google-ads/api/rest/auth#request_headers # for details. # # RECOMMENDATION_RESOURCE_NAME: The resource name of the recommendation to # apply, from the previous request. curl -f --request POST \ "https://googleads.googleapis.com/v${API_VERSION}/customers/${CUSTOMER_ID}/recommendations:apply" \ --header "Content-Type: application/json" \ --header "developer-token: ${DEVELOPER_TOKEN}" \ --header "login-customer-id: ${MANAGER_CUSTOMER_ID}" \ --header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \ --data @- <<EOF { "operations": [ { "resourceName": "${RECOMMENDATION_RESOURCE_NAME}" } ] } EOF
观看这些视频了解更多信息
应用参数
批量
错误
测试
忽略建议
您可以使用 RecommendationService 忽略建议。代码结构与应用建议类似,但您需要使用 DismissRecommendationOperation 和 RecommendationService.DismissRecommendation。
观看以下视频,详细了解相关信息
批量
错误
测试
自动采纳建议
您可以使用 RecommendationSubscriptionService 自动应用特定类型的建议。
要订阅特定推荐类型,请创建一个 RecommendationSubscription 对象,将 type 字段设置为支持的推荐类型之一 types,并将 status 字段设置为 ENABLED。
支持订阅的建议类型
ENHANCED_CPC_OPT_INKEYWORDKEYWORD_MATCH_TYPELOWER_TARGET_ROASMAXIMIZE_CLICKS_OPT_INOPTIMIZE_AD_ROTATIONRAISE_TARGET_CPARESPONSIVE_SEARCH_ADRESPONSIVE_SEARCH_AD_IMPROVE_AD_STRENGTHSEARCH_PARTNERS_OPT_INSEARCH_PLUS_OPT_INSET_TARGET_CPASET_TARGET_ROASTARGET_CPA_OPT_INTARGET_ROAS_OPT_INUSE_BROAD_MATCH_KEYWORD
检索订阅
要获取有关账号推荐订阅的信息,请查询 recommendation_subscription 资源。
如需查看自动应用的更改,请查询 change_event 资源,并将 change_event.client_type 过滤为 GOOGLE_ADS_RECOMMENDATIONS_SUBSCRIPTION。
竞选活动构建方面的建议
您可以使用 RecommendationService.GenerateRecommendationsRequest 在广告系列构建期间,针对给定的一组推荐类型生成推荐。
GenerateRecommendations 接受客户 ID、广告渠道类型(必须是 SEARCH 或 PERFORMANCE_MAX)、要生成的推荐类型列表以及取决于指定类型的各种数据点作为输入。它会根据你提供的数据输出一个包含 Recommendation 个对象的列表。如果没有足够的数据来生成所请求的recommendation_types的推荐,或者如果广告系列已经处于推荐状态,则结果集将不包含该类型的推荐。请确保您的应用程序能够处理请求的推荐类型没有返回任何推荐结果的情况。
下表描述了 GenerateRecommendations 支持的推荐类型,以及要接收该类型的推荐必须提供的字段。作为最佳实践,发送GenerateRecommendations要求后所有与所请求的推荐类型相关的信息均已收集完毕。有关必填字段和可选字段(包括嵌套字段)的更多详细信息,请参阅 参考文档。
| RecommendationType | 必填字段 | 可选字段 |
|---|---|---|
CAMPAIGN_BUDGET |
对于搜索广告系列和效果广告系列,以下字段均为必填项:
|
|
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 按需生成建议,并将这些建议整合到您的广告系列构建用户界面中。
使用流程可能如下所示:
用户通过您的应用程序创建 Performance Max 广告系列。
用户在活动创建流程中提供一些初始信息。例如,他们提供了构建单个
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——并通过在您的活动构建界面中显示这些建议来向用户推荐它们。如果用户接受了建议,那么在用户完成营销活动创建流程后,您可以将该建议纳入营销活动创建请求中。