امتیاز بهینه‌سازی و توصیه‌ها

توصیه‌ها می‌توانند کمپین‌هایتان را به چند روش بهبود دهند:

  • معرفی ویژگی‌های جدید و مرتبط
  • با بهبود دادن قیمت‌های پیشنهادی، کلیدواژه‌ها، و آگهی‌ها، از بودجه‌تان بهره بیشتری ببرید
  • افزایش عملکرد و کارایی کلی پویش‌هایتان

برای افزایش امتیازهای بهینه‌سازی، می‌توانید از RecommendationService برای بازیابی توصیه‌ها استفاده کنید و سپس آن‌ها را اعمال یا رد کنید. همچنین می‌توانید بااستفاده از RecommendationSubscriptionService، در اعمال خودکار توصیه‌ها مشترک شوید.

امتیاز بهینه‌سازی

امتیاز بهینه‌سازی برآوردی از میزان موفقیت حساب Google Ads شما است و در سطوح Customer و Campaign دردسترس است.

سنجه‌های مربوط به بهینه‌سازی برای customer و campaign گزارش دردسترس است:

  1. metrics.optimization_score_url پیوند عمیقی به حساب ارائه می‌دهد تا اطلاعات مربوط به توصیه‌های مرتبط را در واسط کاربری Google Ads مشاهده کنید.
  2. metrics.optimization_score_uplift نشان می‌دهد که اگر همه توصیه‌های مرتبط اعمال شوند، امتیاز بهینه‌سازی چقدر افزایش می‌یابد. این تخمینی است که براساس همه توصیه‌های دردسترس به‌طور کلی ارائه می‌شود، نه فقط مجموع امتیازهای بهینه‌گر برای هر توصیه.

برای گروه‌بندی و مرتب کردن توصیه‌های برگردانده‌شده، می‌توانید هر دو این سنجه‌ها را براساس نوع توصیه بااستفاده از segments.recommendation_type در پُرسمانتان بخش‌بندی کنید.

انواع توصیه

جدول زیر انواع توصیه‌هایی را که در Google Ads API برای بازیابی، اعمال، و رد کردن توصیه‌ها پشتیبانی می‌شوند فهرست می‌کند. اگر حسابی در میانای کاربری Google Ads انواع توصیه‌هایی دارد که در میانای برنامه‌سازی کاربردی پشتیبانی نمی‌شود، می‌توانید از metrics.optimization_score_url برای پیوند دادن کاربران مستقیماً به صفحه «توصیه‌ها» در میانای کاربری Google Ads استفاده کنید تا آن توصیه‌ها را مرور کنند و براساس آن‌ها اقدام کنند.

انواع توصیه که به‌طور کامل پشتیبانی می‌شوند

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_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 پیشنهادهای هدف‌یابی‌شده توسط «پویش‌های Shopping معمولی» را به پویش‌های «بیشینه‌سازی عملکرد» موجود منتقل کنید
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 به‌روزرسانی فهرست مشتری که در ۹۰ روز گذشته به‌روزرسانی نشده است
IMPROVE_GOOGLE_TAG_COVERAGE «برچسب Google» را در صفحه‌های بیشتری پیاده‌سازی کنید
CAMPAIGN_SPECIFIC_APP_GOAL هدف تبدیل برنامه خاص پویش را اضافه کنید
RAISE_TARGET_CPA_PERFORMANCE_BID_TOO_LOW افزایش کنش‌بهای هدف وقتی برای پویش‌های «شبکه جستجو» خیلی پایین است
LOWER_TARGET_ROAS_PERFORMANCE_BID_TOO_LOW وقتی «برگشت هزینه‌های تبلیغات هدف» برای پویش‌های «جستجو» خیلی پایین است، آن را افزایش دهید
RAISE_BUDGET_PERFORMANCE_TOO_LOW وقتی بودجه برای کمپین‌های «جستجو» خیلی کم است، آن را افزایش دهید. دردسترس از v26. جزئیات توصیه در Recommendation.raise_budget_performance_too_low_recommendation برگردانده می‌شود و بااستفاده از ApplyRecommendationOperation.raise_budget_performance_too_low اعمال می‌شود.
‫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

  • video_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.V26.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
      

پرل

# 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,
#   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 "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 شیء توصیه ممکن است پس‌از بازیابی توصیه منسوخ شود.

روال مطلوب این است که بلافاصله پس‌از بازیابی توصیه‌ها، اقدام لازم را انجام دهید.

اعمال کردن توصیه‌ها

می‌توانید توصیه‌های فعال یا بسته‌شده را بااستفاده از روش ApplyRecommendation RecommendationService اعمال کنید.

انواع توصیه می‌توانند پارامترهای اجباری یا اختیاری داشته باشند. بیشتر توصیه‌ها با مقادیر توصیه‌شده‌ای ارائه می‌شوند که به‌طور پیش‌فرض استفاده می‌شوند.

تنظیم حساب‌ها برای توصیه‌های اِعمال خودکار برای همه انواع توصیه‌ها پشتیبانی نمی‌شود. اما می‌توانید رفتار مشابهی را برای انواع توصیه‌هایی که Google Ads API کاملاً از آن‌ها پشتیبانی می‌کند پیاده‌سازی کنید. برای اطلاعات بیشتر، به DetectAndApplyRecommendations کد مثال مراجعه کنید.

از فیلد اتحاد apply_parameters ApplyRecommendationOperation برای اعمال توصیه‌ها با مقادیر پارامتر خاص استفاده کنید. هر نوع توصیه مناسب فیلد خودش را دارد. هر نوع توصیه‌ای که در فیلد 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
      

پرل

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::V26::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::V26::Resources::Ad->new({
  #   id => "INSERT_AD_ID_AS_INTEGER_HERE"
  # });
  # my $text_ad_parameters =
  #   Google::Ads::GoogleAds::V26::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::V26::Services::RecommendationService::ApplyRecommendationOperation
    ->new({
      resourceName => $recommendation->{resourceName}});

  return $apply_recommendation_operation;
}
      

curl

مثال بعدی 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.V26.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
      

پرل

# 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 استفاده می‌کنید.

عملیات انبوه و رسیدگی به خطا

هر دو ApplyRecommendation و DismissRecommendation تا ۱۰۰ عملیات در هر درخواست را می‌پذیرند. هنگام ارسال چند عملیات در یک درخواست، رفتارهای زیر را به‌خاطر داشته باشید:

  • ترکیب کردن انواع توصیه: به‌طور پیش‌فرض (partial_failure = false)، همه عملیات‌ها در یک درخواست باید نوع توصیه یکسانی را هدف قرار دهند؛ درغیراین‌صورت، API RecommendationError.DIFFERENT_TYPES_NOT_SUPPORTED را برمی‌گرداند. برای اعمال یا رد کردن توصیه‌های انواع مختلف در یک درخواست، partial_failure را روی true در درخواست تنظیم کنید تا عملیات معتبر به‌طور مستقل موفق شوند.
  • خطاهای چرخه حیات: ازآنجایی‌که توصیه‌ها به‌صورت پویا ارزیابی می‌شوند، وضعیت توصیه می‌تواند بین بازیابی و اقدام تغییر کند. اگر توصیه‌ای قبلاً اعمال شده باشد، قبلاً رد شده باشد، یا دیگر قابل‌اعمال نباشد، میانای برنامه‌سازی کاربردی RECOMMENDATION_ALREADY_APPLIED، RECOMMENDATION_ALREADY_DISMISSED، یا RECOMMENDATION_INVALIDATED را در RecommendationError برمی‌گرداند.

اِعمال خودکار توصیه‌ها

می‌توانید از 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
  • SET_TARGET_CPA
  • SET_TARGET_ROAS
  • TARGET_CPA_OPT_IN
  • TARGET_ROAS_OPT_IN
  • USE_BROAD_MATCH_KEYWORD

بازیابی اشتراک‌ها

برای دریافت اطلاعات درباره اشتراک‌های توصیه حساب، منبع recommendation_subscription را پُرسمان کنید.

برای مشاهده تغییراتی که به‌طور خودکار اعمال شده‌اند، منبع change_event را جستجو کنید و change_event.client_type را روی GOOGLE_ADS_RECOMMENDATIONS_SUBSCRIPTION فیلتر کنید.

توصیه‌ها در ساخت پویش

می‌توانید از RecommendationService.GenerateRecommendationsRequest برای تولید توصیه‌ها درطول ساخت پویش، برای مجموعه معینی از انواع توصیه استفاده کنید.

GenerateRecommendations شناسه مشتری، نوع کانال تبلیغات که باید SEARCH یا PERFORMANCE_MAX باشد، فهرستی از انواع توصیه‌هایی که باید تولید شود، و نقاط داده مختلفی را که به انواع مشخص‌شده بستگی دارد به‌عنوان ورودی می‌پذیرد. این ویژگی فهرستی از Recommendation شیء را براساس داده‌هایی که ارائه می‌دهید تولید می‌کند. اگر داده‌های کافی برای تولید توصیه برای recommendation_types درخواست‌شده وجود نداشته باشد، یا اگر پویش ازقبل در وضعیت توصیه‌شده باشد، مجموعه نتایج حاوی توصیه‌ای برای آن نوع نخواهد بود. مطمئن شوید که برنامه شما شرایطی را که هیچ توصیه‌ای برای انواع توصیه درخواست‌شده برگردانده نمی‌شود مدیریت می‌کند.

جدول زیر انواع توصیه‌هایی را که GenerateRecommendations پشتیبانی می‌کند و فیلدهایی را که باید برای دریافت توصیه‌های آن نوع ارائه دهید شرح می‌دهد. به‌عنوان روال مطلوب، درخواست GenerateRecommendations را پس‌از جمع‌آوری همه اطلاعات مربوط به انواع توصیه درخواستی ارسال کنید. برای جزئیات بیشتر درباره فیلدهای الزامی و اختیاری، ازجمله فیلدهای تودرتو، به اسناد مرجع مراجعه کنید.

RecommendationType قسمت‌های الزامی فیلدهای اختیاری
CAMPAIGN_BUDGET برای هر دو پویش «جستجو» و «عملکرد بیشینه»، فیلدهای زیر الزامی است:
  • asset_group_info
  • final_url
  • bidding_strategy_type
فقط برای پویش‌های «جستجو»، فیلدهای زیر نیز الزامی است:
  • country_code
  • language_code
  • ‫positive_location_id یا negative_location_id
  • ad_group_info.keywords
  • bidding_info.
    bidding_strategy_target_info.
    target_impression_share_info
    اگر راهبرد پیشنهاد قیمت روی TARGET_IMPRESSION_SHARE تنظیم شده باشد
  • budget_info
  • برای پویش‌های «عملکرد بیشینه»، مقداری در فیلد merchant_center_account_id ارائه دهید تا به RecommendationsService نشان دهید که توصیه‌هایی برای پویش‌های «عملکرد بیشینه» خرده‌فروشی، به‌جای پویش‌های استاندارد، تولید کند.
KEYWORD
  • seed_info
  • ad_group_info
MAXIMIZE_CLICKS_OPT_IN
  • conversion_tracking_status
  • bidding_info
MAXIMIZE_CONVERSIONS_OPT_IN
  • conversion_tracking_status
  • bidding_info
MAXIMIZE_CONVERSION_VALUE_OPT_IN
  • conversion_tracking_status
  • bidding_info
SET_TARGET_CPA
  • conversion_tracking_status
  • bidding_info
SET_TARGET_ROAS
  • conversion_tracking_status
  • bidding_info
SITELINK_ASSET
توجه: شیء SitelinkAssetRecommendation برگردانده‌شده حاوی فهرست‌های خالی خواهد بود. اگر GenerateRecommendations پاسخ حاوی SitelinkAssetRecommendation باشد، می‌تواند به‌عنوان نشان برای افزودن حداقل یک دارایی سایت‌پیوند به پویش درنظر گرفته شود.
  • campaign_sitelink_count
TARGET_CPA_OPT_IN
  • conversion_tracking_status
  • bidding_info
TARGET_ROAS_OPT_IN
  • conversion_tracking_status
  • bidding_info

جریان استفاده نمونه

فرض کنید شرکت شما یک آژانس تبلیغاتی است که گردش کار ساخت پویش را به کاربران ارائه می‌دهد و می‌خواهید درطول این گردش کار، پیشنهادهایی به کاربران ارائه دهید. می‌توانید از GenerateRecommendationsRequest برای تولید توصیه‌ها به‌صورت درخواستی استفاده کنید و این توصیه‌ها را در میانای کاربر ساخت پویش خود بگنجانید.

جریان استفاده ممکن است به‌صورت زیر باشد:

  1. کاربری برای ایجاد پویش «عملکرد بیشینه» به برنامه شما می‌آید.

  2. کاربر برخی اطلاعات اولیه را به‌عنوان بخشی از جریان ساخت پویش ارائه می‌دهد. برای مثال، جزئیاتی را برای ساختن یک SitelinkAsset ارائه می‌دهند و TARGET_SPEND را به‌عنوان استراتژی پیشنهاد قیمت هوشمند خود انتخاب می‌کنند.

  3. ‫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: روی شناسه مشتری‌ای که پویش را ایجاد می‌کند تنظیم شده است.

  4. می‌توانید توصیه‌های موجود در GenerateRecommendationsResponse — در این مورد، SitelinkAssetRecommendation و MaximizeClicksOptInRecommendation — را بپذیرید و با نمایش آن‌ها در میانای ساخت پویش، به کاربر پیشنهاد دهید. اگر کاربر پیشنهادی را بپذیرد، می‌توانید آن را در درخواست ایجاد پویش بگنجانید، به‌شرطی که کاربر جریان ساخت پویش را تکمیل کند.