Đề xuất có thể cải thiện chiến dịch của bạn theo một số cách:
- Ra mắt các tính năng mới và phù hợp
- Sử dụng ngân sách hiệu quả hơn bằng cách cải thiện giá thầu, từ khóa và quảng cáo
- Tăng hiệu suất và hiệu quả tổng thể của chiến dịch
Để tăng điểm tối ưu hoá, bạn có thể sử dụng RecommendationService
để truy xuất các đề xuất, sau đó áp dụng hoặc loại bỏ các đề xuất đó cho phù hợp. Kể từ phiên bản 15
của API Google Ads, bạn cũng có thể đăng ký nhận các đề xuất tự động áp dụng
bằng cách sử dụng RecommendationSubscriptionService
.
Điểm tối ưu hóa
Điểm tối ưu hoá là
điểm số ước tính về mức độ hiệu quả của tài khoản Google Ads của bạn và hiện có
ở cấp Customer
và
Campaign
.
Customer.optimization_score_weight
chỉ dành cho các tài khoản không phải tài khoản người quản lý và được dùng để tính điểm tối ưu hoá tổng thể của nhiều tài khoản. Truy xuất điểm tối ưu hoá và trọng số của điểm tối ưu hoá của các tài khoản rồi nhân các tài khoản đó với nhau (Customer.optimization_score * Customer.optimization_score_weight
) để tính toán điểm tối ưu hoá tổng thể.
Có các chỉ số liên quan đến việc tối ưu hoá trong báo cáo customer
và campaign
:
metrics.optimization_score_url
cung cấp một đường liên kết sâu đến tài khoản để xem thông tin về các đề xuất có liên quan trong giao diện người dùng Google Ads.metrics.optimization_score_uplift
cho biết điểm tối ưu hoá sẽ tăng bao nhiêu nếu bạn áp dụng tất cả các đề xuất liên quan. Đây là số liệu ước tính dựa trên tất cả các đề xuất có sẵn nói chung, không chỉ là tổng điểm mức tăng cho từng đề xuất.
Để nhóm và sắp xếp các đề xuất được trả về, bạn có thể phân đoạn cả hai chỉ số này theo loại đề xuất bằng cách sử dụng segments.recommendation_type
trong truy vấn của mình.
Loại đề xuất
Các loại đề xuất được hỗ trợ đầy đủ
RecommendationType | Nội dung mô tả |
---|---|
CAMPAIGN_BUDGET |
Khắc phục chiến dịch bị giới hạn ngân sách |
KEYWORD |
Thêm từ khoá mới |
TEXT_AD |
Thêm đề xuất quảng cáo |
TARGET_CPA_OPT_IN |
Đặt giá thầu với CPA mục tiêu |
MAXIMIZE_CONVERSIONS_OPT_IN |
Đặt giá thầu bằng Tối đa hóa lượt chuyển đổi |
MAXIMIZE_CONVERSION_VALUE_OPT_IN |
Đặt giá thầu bằng chiến lược Tối đa hoá giá trị lượt chuyển đổi |
ENHANCED_CPC_OPT_IN |
Đặt giá thầu bằng cách sử dụng chiến lược CPC nâng cao |
MAXIMIZE_CLICKS_OPT_IN |
Đặt giá thầu với Tối đa hóa số nhấp chuột |
OPTIMIZE_AD_ROTATION |
Sử dụng xoay vòng quảng cáo được tối ưu hóa |
MOVE_UNUSED_BUDGET |
Chuyển chưa sử dụng sang ngân sách bị ràng buộc |
TARGET_ROAS_OPT_IN |
Đặt giá thầu với lợi tức mục tiêu trên chi tiêu quảng cáo |
FORECASTING_CAMPAIGN_BUDGET |
Khắc phục các chiến dịch dự kiến sẽ bị giới hạn theo ngân sách trong tương lai |
RESPONSIVE_SEARCH_AD |
Thêm quảng cáo tìm kiếm thích ứng mới |
MARGINAL_ROI_CAMPAIGN_BUDGET |
Điều chỉnh ngân sách chiến dịch để tăng ROI |
USE_BROAD_MATCH_KEYWORD |
Sử dụng kiểu khớp mở rộng cho chiến dịch dựa trên lượt chuyển đổi có đặt giá thầu tự động |
RESPONSIVE_SEARCH_AD_ASSET |
Thêm thành phần quảng cáo tìm kiếm thích ứng vào quảng cáo |
RESPONSIVE_SEARCH_AD_IMPROVE_AD_STRENGTH |
Cải thiện độ mạnh của quảng cáo tìm kiếm thích ứng |
DISPLAY_EXPANSION_OPT_IN |
Cập nhật chiến dịch để sử dụng tính năng Mở rộng hiển thị |
SEARCH_PARTNERS_OPT_IN |
Mở rộng phạm vi tiếp cận bằng cách thêm các đối tác tìm kiếm của Google |
CUSTOM_AUDIENCE_OPT_IN |
Tạo đối tượng tùy chỉnh |
IMPROVE_DISCOVERY_AD_STRENGTH |
Cải thiện độ mạnh của quảng cáo trong chiến dịch Tạo nhu cầu |
UPGRADE_SMART_SHOPPING_CAMPAIGN_TO_PERFORMANCE_MAX |
Nâng cấp chiến dịch Mua sắm thông minh lên chiến dịch Tối đa hoá hiệu suất |
UPGRADE_LOCAL_CAMPAIGN_TO_PERFORMANCE_MAX |
Nâng cấp chiến dịch địa phương cũ lên chiến dịch Tối đa hoá hiệu suất |
SHOPPING_MIGRATE_REGULAR_SHOPPING_CAMPAIGN_OFFERS_TO_PERFORMANCE_MAX |
Di chuyển những ưu đãi mà chiến dịch Mua sắm thông thường nhắm đến sang chiến dịch Tối đa hoá hiệu suất hiện có |
MIGRATE_DYNAMIC_SEARCH_ADS_CAMPAIGN_TO_PERFORMANCE_MAX |
Di chuyển quảng cáo Tìm kiếm động sang chiến dịch Tối đa hoá hiệu suất |
PERFORMANCE_MAX_OPT_IN |
Tạo chiến dịch Tối đa hoá hiệu suất trong tài khoản |
IMPROVE_PERFORMANCE_MAX_AD_STRENGTH |
Cải thiện độ mạnh của nhóm thành phần của chiến dịch Tối đa hoá hiệu suất lên điểm xếp hạng "Rất tốt" |
PERFORMANCE_MAX_FINAL_URL_OPT_IN |
Bật tính năng Mở rộng URL cuối cùng cho chiến dịch Tối đa hoá hiệu suất |
RAISE_TARGET_CPA_BID_TOO_LOW |
Tăng CPA mục tiêu khi nó quá thấp và có rất ít hoặc không có lượt chuyển đổi nào |
FORECASTING_SET_TARGET_ROAS |
Tăng ngân sách trước khi diễn ra một sự kiện theo mùa được dự đoán sẽ tăng lưu lượng truy cập và thay đổi chiến lược đặt giá thầu từ tối đa hoá giá trị lượt chuyển đổi thành lợi tức mục tiêu trên chi tiêu quảng cáo |
LEAD_FORM |
Thêm thành phần biểu mẫu khách hàng tiềm năng vào chiến dịch |
CALLOUT_ASSET |
Thêm thành phần chú thích vào cấp chiến dịch hoặc cấp khách hàng |
SITELINK_ASSET |
Thêm thành phần đường liên kết của trang web vào cấp chiến dịch hoặc khách hàng |
CALL_ASSET |
Thêm thành phần cuộc gọi vào cấp chiến dịch hoặc cấp khách hàng |
SHOPPING_ADD_AGE_GROUP |
Thêm thuộc tính nhóm tuổi vào những mặt hàng bị giảm hạng do thiếu nhóm tuổi |
SHOPPING_ADD_COLOR |
Thêm màu cho những mặt hàng bị giảm hạng do thiếu màu |
SHOPPING_ADD_GENDER |
Thêm giới tính cho những mặt hàng bị giảm hạng do thiếu giới tính |
SHOPPING_ADD_GTIN |
Thêm GTIN (Mã số sản phẩm thương mại toàn cầu) vào các mặt hàng bị giảm hạng do thiếu GTIN |
SHOPPING_ADD_MORE_IDENTIFIERS |
Thêm giá trị nhận dạng khác vào những mặt hàng bị giảm hạng do thiếu giá trị nhận dạng |
SHOPPING_ADD_SIZE |
Thêm kích thước vào những mặt hàng bị giảm hạng do thiếu kích thước |
SHOPPING_ADD_PRODUCTS_TO_CAMPAIGN |
Thêm sản phẩm để chiến dịch phân phát |
SHOPPING_FIX_DISAPPROVED_PRODUCTS |
Khắc phục sản phẩm bị từ chối |
SHOPPING_TARGET_ALL_OFFERS |
Tạo một chiến dịch toàn diện nhắm đến tất cả ưu đãi |
SHOPPING_FIX_SUSPENDED_MERCHANT_CENTER_ACCOUNT |
Khắc phục các vấn đề về việc tạm ngưng tài khoản Merchant Center |
SHOPPING_FIX_MERCHANT_CENTER_ACCOUNT_SUSPENSION_WARNING |
Khắc phục các vấn đề về cảnh báo tạm ngưng tài khoản Merchant Center |
DYNAMIC_IMAGE_EXTENSION_OPT_IN |
Bật phần mở rộng về hình ảnh linh hoạt trên tài khoản |
RAISE_TARGET_CPA |
Tăng CPA mục tiêu |
LOWER_TARGET_ROAS |
Giảm lợi tức mục tiêu trên chi tiêu quảng cáo |
FORECASTING_SET_TARGET_CPA |
Đặt CPA mục tiêu cho những chiến dịch không được chỉ định CPA trước khi diễn ra một sự kiện theo mùa được dự đoán sẽ tăng lưu lượng truy cập |
SET_TARGET_CPA |
Đặt CPA mục tiêu cho những chiến dịch chưa chỉ định CPA |
SET_TARGET_ROAS |
Đặt lợi tức mục tiêu trên chi tiêu quảng cáo cho những chiến dịch chưa được chỉ định |
REFRESH_CUSTOMER_MATCH_LIST |
Cập nhật danh sách khách hàng chưa được cập nhật trong 90 ngày qua |
IMPROVE_GOOGLE_TAG_COVERAGE |
Triển khai Thẻ Google trên nhiều trang hơn |
CALLOUT_EXTENSION (không dùng nữa) |
Không dùng nữa, chuyển sang dùng CALLOUT_ASSET |
SITELINK_EXTENSION (không dùng nữa) |
Không dùng nữa, chuyển sang dùng SITELINK_ASSET |
CALL_EXTENSION (không dùng nữa) |
Không dùng nữa, chuyển sang dùng CALL_ASSET |
KEYWORD_MATCH_TYPE (không dùng nữa) |
Không dùng nữa, chuyển sang dùng USE_BROAD_MATCH_KEYWORD |
Xem video này để tìm hiểu thêm
Xử lý các loại không được hỗ trợ
Truy xuất đề xuất
Giống như hầu hết các thực thể khác trong API Google Ads, đối tượng Recommendation
được tìm nạp bằng cách sử dụng GoogleAdsService.SearchStream
với truy vấn Ngôn ngữ truy vấn Google Ads.
Đối với mỗi loại đề xuất, thông tin chi tiết được cung cấp trong trường dành riêng cho đề xuất. Ví dụ: thông tin chi tiết về đề xuất CAMPAIGN_BUDGET
nằm trong trường campaign_budget_recommendation
và được bao bọc trong đối tượng CampaignBudgetRecommendation
.
Tìm tất cả trường dành riêng cho đề xuất trong trường hợp nhất recommendation
.
Tác động của nội dung đề xuất
Một số loại đề xuất sẽ điền sẵn vào trường impact
của đề xuất.
RecommendationImpact
chứa số liệu ước tính về mức tác động đối với hiệu suất của tài khoản khi áp dụng đề xuất. Các chỉ số đề xuất sau đây có trong các trường impact.base_metrics
và impact.potential_metrics
:
impressions
clicks
cost_micros
conversions
all_conversions
(có từ phiên bản 16 của API Google Ads)video_views
Ví dụ về mã
Mã mẫu sau đây truy xuất mọi đề xuất hiện có và đã bị loại bỏ thuộc loại TEXT_AD
từ một tài khoản, đồng thời in một số thông tin chi tiết của các đề xuất đó:
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; } }
1.199
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; }
Chọn cách giải quyết
Bạn có thể áp dụng hoặc loại bỏ mọi đề xuất đã truy xuất.
Tuỳ thuộc vào loại đề xuất, các đề xuất có thể thay đổi hằng ngày hoặc thậm chí nhiều lần trong một ngày. Khi điều đó xảy ra, resource_name
của đối tượng đề xuất có thể trở nên lỗi thời sau khi đề xuất được truy xuất.
Bạn nên thực hiện hành động dựa trên đề xuất ngay sau khi truy xuất.
Áp dụng đề xuất
Bạn có thể áp dụng các đề xuất đang hoạt động hoặc đã loại bỏ bằng phương thức ApplyRecommendation
của RecommendationService
.
Các loại đề xuất có thể có tham số bắt buộc hoặc không bắt buộc. Hầu hết các đề xuất đều đi kèm với các giá trị được đề xuất và được sử dụng theo mặc định.
Tính năng đặt tính năng tự động áp dụng đề xuất không được hỗ trợ cho một số loại đề xuất. Tuy nhiên, bạn có thể triển khai hành vi tương tự cho những loại đề xuất được API Google Ads hỗ trợ đầy đủ.
Hãy tham khảo ví dụ về mã DetectAndApplyRecommendations
để tìm hiểu thêm.
Sử dụng trường hợp nhất apply_parameters
của ApplyRecommendationOperation
để áp dụng các đề xuất bằng các giá trị thông số cụ thể. Mỗi loại đề xuất phù hợp đều có trường riêng.
Mọi loại đề xuất không được liệt kê trong trường apply_parameters
đều không sử dụng các giá trị tham số này.
Ví dụ về mã
Ví dụ về mã sau đây minh hoạ cách áp dụng một đề xuất bằng các thông số áp dụng được đề xuất:
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; } }
1.199
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; }
Xem những video này để tìm hiểu thêm
Áp dụng tham số
Hàng loạt
Lỗi
Kiểm thử
Loại bỏ đề xuất
Bạn có thể loại bỏ các đề xuất bằng RecommendationService
. Cấu trúc mã tương tự như việc áp dụng các đề xuất, nhưng thay vào đó, bạn sử dụng DismissRecommendationOperation
và RecommendationService.DismissRecommendation
.
Xem những video này để tìm hiểu thêm
Hàng loạt
Lỗi
Kiểm thử
Tự động áp dụng nội dung đề xuất
Kể từ phiên bản 15 của API Google Ads, bạn có thể dùng
RecommendationSubscriptionService
để tự động áp dụng các đề xuất thuộc một loại cụ thể.
Để đăng ký theo dõi một loại đề xuất cụ thể, hãy tạo một đối tượng RecommendationSubscription
, đặt trường type
thành một trong các loại đề xuất được hỗ trợ, và đặt trường status
thành ENABLED
.
Các loại đề xuất có hỗ trợ gói thuê bao
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
Truy xuất gói thuê bao
Để biết thông tin về gói thuê bao đề xuất của một tài khoản, hãy truy vấn tài nguyên recommendation_subscription
.
Để xem những thay đổi được tự động áp dụng, hãy truy vấn tài nguyên change_event
, lọc change_client_type
thành GOOGLE_ADS_RECOMMENDATIONS_SUBSCRIPTION
.
Đề xuất trong quá trình tạo chiến dịch
Kể từ phiên bản 16 của API Google Ads, bạn có thể sử dụng
RecommendationService.GenerateRecommendationsRequest
để tạo đề xuất trong quá trình tạo chiến dịch, cho một nhóm
các loại đề xuất nhất định.
GenerateRecommendations
chấp nhận dữ liệu đầu vào làm mã khách hàng, một loại kênh quảng cáo phải là SEARCH
hoặc PERFORMANCE_MAX
, danh sách các loại đề xuất cần tạo và nhiều điểm dữ liệu phụ thuộc vào loại được chỉ định. Công cụ này sẽ xuất ra một danh sách các đối tượng Recommendation
dựa trên dữ liệu mà bạn cung cấp. Nếu không có đủ dữ liệu để tạo đề xuất cho recommendation_types
được yêu cầu hoặc nếu chiến dịch đã ở trạng thái được đề xuất, thì tập hợp kết quả sẽ không chứa đề xuất cho loại đó. Hãy đảm bảo ứng dụng của bạn xử lý trường hợp không có đề xuất nào được trả về cho các loại đề xuất đã yêu cầu.
Bảng sau đây mô tả các loại đề xuất mà GenerateRecommendations
hỗ trợ và các trường mà bạn phải cung cấp để nhận được đề xuất cho loại đó. Cách tốt nhất là gửi yêu cầu GenerateRecommendations
sau khi tất cả thông tin liên quan đến các loại đề xuất đã yêu cầu đã được thu thập. Để biết thêm thông tin chi tiết về các trường bắt buộc và không bắt buộc, bao gồm cả các trường lồng nhau, vui lòng xem tài liệu tham khảo.
RecommendationType | Các trường bắt buộc | Trường không bắt buộc |
---|---|---|
KEYWORD |
|
|
MAXIMIZE_CLICKS_OPT_IN |
|
|
MAXIMIZE_CONVERSIONS_OPT_IN |
|
|
MAXIMIZE_CONVERSION_VALUE_OPT_IN |
|
|
SET_TARGET_CPA |
|
|
SET_TARGET_ROAS |
|
|
SITELINK_ASSET
Lưu ý: Đối tượng SitelinkAssetRecommendation
được trả về sẽ chứa các danh sách trống. Nếu phản hồi GenerateRecommendations
chứa SitelinkAssetRecommendation , thì đó có thể
được coi là tín hiệu để thêm ít nhất một thành phần đường liên kết của trang web vào chiến dịch. |
|
|
TARGET_CPA_OPT_IN |
|
|
TARGET_ROAS_OPT_IN |
|
Quy trình sử dụng mẫu
Giả sử công ty của bạn là đại lý quảng cáo cung cấp quy trình tạo chiến dịch
cho người dùng và bạn muốn cung cấp đề xuất cho người dùng
trong quy trình đó. Bạn có thể sử dụng
GenerateRecommendationsRequest
để tạo các đề xuất theo yêu cầu và tích hợp các đề xuất đó
vào giao diện người dùng tạo chiến dịch.
Quy trình sử dụng có thể như sau:
Người dùng truy cập vào ứng dụng của bạn để tạo chiến dịch Tối đa hoá hiệu suất.
Người dùng cung cấp một số thông tin ban đầu trong quy trình tạo chiến dịch. Ví dụ: họ cung cấp thông tin chi tiết để tạo một
SitelinkAsset
duy nhất và chọnTARGET_SPEND
làm chiến lược Đặt giá thầu thông minh.Bạn gửi
GenerateRecommendationsRequest
để đặt các trường sau:campaign_sitelink_count
: đặt thành1
, là số lượng thành phần đường liên kết của trang web trên chiến dịch đang hoạt động.bidding_info
: đặt trườngbidding_strategy_type
lồng thànhTARGET_SPEND
.conversion_tracking_status
: đặt thànhConversionTrackingStatus
của khách hàng này. Để biết hướng dẫn về cách truy xuất trường này, hãy xem hướng dẫn Bắt đầu để quản lý lượt chuyển đổi.recommendation_types
: đã đặt thành[SITELINK_ASSET, MAXIMIZE_CLICKS_OPT_IN]
.advertising_channel_type
: đã đặt thànhPERFORMANCE_MAX
.customer_id
: đặt thành mã nhận dạng của khách hàng tạo chiến dịch.
Bạn có thể lấy các đề xuất trong
GenerateRecommendationsResponse
— trong trường hợp này làSitelinkAssetRecommendation
vàMaximizeClicksOptInRecommendation
—rồi đề xuất cho người dùng bằng cách hiển thị các đề xuất đó trong giao diện tạo chiến dịch của bạn. Nếu người dùng chấp nhận đề xuất, thì bạn có thể đưa đề xuất đó vào yêu cầu tạo chiến dịch sau khi người dùng hoàn tất quy trình tạo chiến dịch.