추천을 사용하면 다음과 같은 몇 가지 방법으로 캠페인을 개선할 수 있습니다.
- 새롭고 관련성 있는 기능 소개
- 개선된 입찰, 키워드, 광고로 예산 대비 효과 극대화
- 캠페인의 전반적인 실적과 효율성 높이기
최적화 점수를 높이려면 RecommendationService을 사용하여 추천을 가져온 다음 적절하게 적용하거나 거부하면 됩니다. RecommendationSubscriptionService을 사용하여 추천을 자동으로 적용하도록 설정할 수도 있습니다.
최적화 점수
최적화 점수는 Google Ads 계정이 실적을 내기 위해 얼마나 잘 설정되어 있는지를 추정한 수치이며 Customer 및 Campaign 수준에서 확인할 수 있습니다.
Customer.optimization_score_weight는 관리자 계정이 아닌 계정에서만 사용할 수 있으며 여러 계정의 전체 최적화 점수를 계산하는 데 사용됩니다. 계정의 최적화 점수와 최적화 점수 가중치를 가져와 곱하여(Customer.optimization_score * Customer.optimization_score_weight) 전체 최적화 점수를 계산합니다.
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 |
향상된 CPC 입찰기능으로 입찰 |
MAXIMIZE_CLICKS_OPT_IN |
클릭수 최대화로 입찰 |
OPTIMIZE_AD_ROTATION |
최적화된 광고 로테이션 사용 |
MOVE_UNUSED_BUDGET |
사용하지 않는 예산을 예산 제약이 있는 예산으로 이동 |
TARGET_ROAS_OPT_IN |
타겟 ROAS로 입찰 |
FORECASTING_CAMPAIGN_BUDGET |
향후 예산 제약이 발생할 것으로 예상되는 캠페인 수정 |
RESPONSIVE_SEARCH_AD |
새 반응형 검색 광고 추가 |
MARGINAL_ROI_CAMPAIGN_BUDGET |
캠페인 예산을 조정하여 ROI 늘리기 |
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 |
실적 최대화 캠페인에서 최종 URL 확장 사용 설정하기 |
RAISE_TARGET_CPA_BID_TOO_LOW |
타겟 CPA가 너무 낮고 전환이 거의 또는 전혀 없는 경우 타겟 CPA를 높입니다. |
FORECASTING_SET_TARGET_ROAS |
트래픽이 증가할 것으로 예상되는 시즌 이벤트에 앞서 예산을 늘리고 입찰 전략을 전환 가치 극대화에서 타겟 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 |
판매자 센터 계정 정지 문제 해결 |
SHOPPING_FIX_MERCHANT_CENTER_ACCOUNT_SUSPENSION_WARNING |
판매자 센터 계정 정지 경고 문제 해결 |
DYNAMIC_IMAGE_EXTENSION_OPT_IN |
계정에서 동적 이미지 광고 확장 사용 설정 |
RAISE_TARGET_CPA |
타겟 CPA 상향 조정 |
LOWER_TARGET_ROAS |
타겟 ROAS 낮추기 |
FORECASTING_SET_TARGET_CPA |
트래픽 증가가 예상되는 시즌성 이벤트에 대비하여 지정되지 않은 캠페인에 타겟 CPA를 설정하세요. |
SET_TARGET_CPA |
지정되지 않은 캠페인의 타겟 CPA 설정 |
SET_TARGET_ROAS |
타겟 ROAS가 지정되지 않은 캠페인에 타겟 ROAS 설정 |
REFRESH_CUSTOMER_MATCH_LIST |
지난 90일 동안 업데이트되지 않은 고객 목록을 업데이트합니다. |
IMPROVE_GOOGLE_TAG_COVERAGE |
더 많은 페이지에 Google 태그 배포 |
KEYWORD_MATCH_TYPE(지원 중단됨) |
지원 중단되었으므로 대신 USE_BROAD_MATCH_KEYWORD을 사용하세요. |
자세한 내용은 동영상을 시청하세요
지원되지 않는 유형 처리
추천 가져오기
Google Ads API의 다른 대부분의 항목과 마찬가지로 Recommendation 객체는 Google Ads 쿼리 언어 쿼리와 함께 GoogleAdsService.SearchStream를 사용하여 가져옵니다.
각 추천 유형에 대해 추천별 필드에 세부정보가 제공됩니다. 예를 들어 CAMPAIGN_BUDGET 추천 세부정보는 campaign_budget_recommendation 필드에 있으며 CampaignBudgetRecommendation 객체로 래핑됩니다.
recommendation 결합 필드에서 추천 관련 필드를 모두 찾습니다.
추천 영향
일부 권장사항 유형은 권장사항의 impact 필드를 채웁니다.
RecommendationImpact에는 추천을 적용한 결과로 계정 실적에 미치는 영향에 대한 추정치가 포함되어 있습니다. 다음 추천 측정항목은 impact.base_metrics 및 impact.potential_metrics 필드에서 사용할 수 있습니다.
impressionsclickscost_microsconversionsall_conversionsvideo_views
impact 필드가 채워져 있더라도 측정항목 사용 가능 여부는 추천 유형, 캠페인 유형 등 여러 요인에 따라 달라집니다. 일반적으로 각 영향 측정항목을 사용하기 전에 사용 가능 여부를 확인합니다.
코드 예
다음 샘플 코드는 계정에서 사용 가능하고 닫힌 KEYWORD 유형의 추천을 모두 가져와 세부정보를 일부 출력합니다.
자바
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를 빌드하는 방법과 추천 값을 자체 값으로 대체하려는 경우 추천 값을 재정의하는 방법을 보여줍니다.
자바
/** 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를 호출하여 이전 코드에서 생성된 추천 적용 작업을 전송합니다.
자바
// 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 필드를 지원되는 추천 유형 중 하나로 설정하고 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를 사용하여 주문형 추천을 생성하고 이러한 추천을 캠페인 구성 사용자 인터페이스에 통합할 수 있습니다.
사용 흐름은 다음과 같을 수 있습니다.
사용자가 애플리케이션에 와서 실적 최대화 캠페인을 만듭니다.
사용자가 캠페인 구성 흐름의 일부로 초기 정보를 제공합니다. 예를 들어 단일
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)의 추천을 가져와 캠페인 구성 인터페이스 내에 표시하여 사용자에게 추천할 수 있습니다. 사용자가 추천을 수락하면 사용자가 캠페인 구성 흐름을 완료한 후 캠페인 생성 요청에 이를 통합할 수 있습니다.