نتيجة التحسين والاقتراحات

فيديو: نظرة معمّقة

يمكن أن تساعد الاقتراحات على تحسين حملاتك بعدة طرق:

  • تقديم ميزات جديدة وذات صلة
  • الاستفادة بشكلٍ أفضل من ميزانيتك باستخدام عروض أسعار وكلمات رئيسية وإعلانات محسّنة
  • رفع مستوى أداء حملاتك وكفاءتها بوجه عام

لزيادة نتائج التحسين، يمكنك استخدام RecommendationService لاسترداد الاقتراحات، ثم تطبيقها أو رفضها وفقًا لذلك.

نتيجة التحسين

الفيديو: نتيجة التحسين

نتيجة التحسين هي تقدير لمدى جودة أداء حسابك على "إعلانات Google" وتوفّرها على المستويَين Customer وCampaign.

ولا تتوفّر Customer.optimization_score_weight إلا للحسابات غير الإدارية، ويتم استخدامها لاحتساب نتيجة التحسين الإجمالية لحسابات متعددة. يمكنك استرداد نتيجة التحسين ووزن نتيجة التحسين للحسابات وضربها معًا (Customer.optimization_score * Customer.optimization_score_weight) لاحتساب نتيجة التحسين الإجمالية.

تتوفّر مقاييس متعلقة بالتحسينات لتقارير customer وcampaign:

  1. توفّر وحدة metrics.optimization_score_url رابطًا لصفحة في الحساب لعرض معلومات عن الاقتراحات ذات الصلة في واجهة مستخدم "إعلانات Google".
  2. توضّح metrics.optimization_score_uplift مدى الارتفاع في نتيجة التحسين إذا تم تطبيق جميع الاقتراحات ذات الصلة. وهذه القيمة تقديرية تستند إلى جميع الاقتراحات المتاحة ككل، وليس فقط مجموع نتائج التحسين لكل اقتراح.

لتجميع الاقتراحات المعروضة وترتيبها، يمكنك تقسيم كلا هذين المقياسَين حسب نوع الاقتراح باستخدام segments.recommendation_type في طلب البحث.

أنواع الاقتراحات

تتيح Google Ads API استخدام أنواع الاقتراحات التالية بالكامل:

نوع الاقتراح الوصف
CAMPAIGN_BUDGET إصلاح الحملات المقيَّدة بالميزانية
KEYWORD إضافة كلمات رئيسية جديدة
TEXT_AD إضافة اقتراحات الإعلانات
TARGET_CPA_OPT_IN تقديم عروض أسعار باستخدام التكلفة المستهدفة للإجراء
MAXIMIZE_CONVERSIONS_OPT_IN تقديم عروض أسعار باستخدام "تحقيق الحد الأقصى من الإحالات الناجحة"
ENHANCED_CPC_OPT_IN تقديم عروض أسعار باستخدام تكلفة النقرة المحسّنة
SEARCH_PARTNERS_OPT_IN توسيع مدى الوصول من خلال الشركاء في شبكة بحث Google
MAXIMIZE_CLICKS_OPT_IN تقديم عروض أسعار باستخدام "الحصول على الحد الأقصى من النقرات"
OPTIMIZE_AD_ROTATION استخدام عرض الإعلانات بالتناوب المحسّن
CALLOUT_EXTENSION (متوقف) تم الإيقاف نهائيًا، ويمكنك استخدام CALLOUT_ASSET بدلاً منها.
SITELINK_EXTENSION (متوقف) تم الإيقاف نهائيًا، ويمكنك استخدام SITELINK_ASSET بدلاً منها.
CALL_EXTENSION (متوقف) تم الإيقاف نهائيًا، ويمكنك استخدام CALL_ASSET بدلاً منها.
KEYWORD_MATCH_TYPE (متوقف) تم الإيقاف نهائيًا، ويمكنك استخدام USE_BROAD_MATCH_KEYWORD بدلاً منها.
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 إضافة مواد عرض الإعلانات المتجاوبة على شبكة البحث إلى إعلان
UPGRADE_SMART_SHOPPING_CAMPAIGN_TO_PERFORMANCE_MAX ترقية حملة Shopping الذكية إلى حملة أداء أفضل
RESPONSIVE_SEARCH_AD_IMPROVE_AD_STRENGTH تحسين قوة إعلان متجاوب على شبكة البحث
DISPLAY_EXPANSION_OPT_IN تعديل حملة لاستخدام ميزة "الانتشار على الشبكة الإعلانية"
UPGRADE_LOCAL_CAMPAIGN_TO_PERFORMANCE_MAX ترقية حملة محلية قديمة إلى حملة "الأداء الأفضل"
RAISE_TARGET_CPA_BID_TOO_LOW اقتراح زيادة التكلفة المستهدفة للإجراء عندما تكون منخفضة جدًا وعندما يكون عدد الإحالات الناجحة قليلًا أو منخفضًا جدًا
FORECASTING_SET_TARGET_ROAS اقتراح لرفع الميزانية مسبقًا قبل فعالية موسمية من المتوقّع أن تزيد عدد الزيارات، وتغيير استراتيجية عروض الأسعار من تحقيق الحد الأقصى من قيمة الإحالات الناجحة إلى عائد الإنفاق الإعلاني المستهدف
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
SHOPPING_MIGRATE_REGULAR_SHOPPING_CAMPAIGN_OFFERS_TO_PERFORMANCE_MAX نقل العروض التي تستهدفها حملات Shopping العادية إلى حملات الأداء الأفضل الحالية

التعامل مع الأنواع غير المتوافقة

استرداد الاقتراحات

الفيديو: الترميز المباشر

مثل معظم الكيانات الأخرى في Google Ads API، يتم جلب Recommendation Objects باستخدام GoogleAdsService.SearchStream طلب البحث بلغة "إعلانات Google".

بالنسبة إلى كل نوع من أنواع الاقتراحات، يتم توفير تفاصيل الاقتراحات في حقل recommendation محدَّد مع نوع معيّن:

نوع الاقتراح اقتراح Type
CAMPAIGN_BUDGET campaign_budget_recommendation CampaignBudgetRecommendation
KEYWORD keyword_recommendation KeywordRecommendation
TEXT_AD text_ad_recommendation TextAdRecommendation
TARGET_CPA_OPT_IN target_cpa_opt_in_recommendation TargetCpaOptInRecommendation
MAXIMIZE_CONVERSIONS_OPT_IN maximize_conversions_opt_in_recommendation MaximizeConversionsOptInRecommendation
ENHANCED_CPC_OPT_IN enhanced_cpc_opt_in_recommendation EnhancedCpcOptInRecommendation
SEARCH_PARTNERS_OPT_IN search_partners_opt_in_recommendation SearchPartnersOptInRecommendation
MAXIMIZE_CLICKS_OPT_IN maximize_clicks_opt_in_recommendation MaximizeClicksOptInRecommendation
OPTIMIZE_AD_ROTATION optimize_ad_rotation_recommendation OptimizeAdRotationRecommendation
CALLOUT_EXTENSION (متوقف) callout_extension_recommendation CalloutExtensionRecommendation
SITELINK_EXTENSION (متوقف) sitelink_extension_recommendation SitelinkExtensionRecommendation
CALL_EXTENSION (متوقف) call_extension_recommendation CallExtensionRecommendation
KEYWORD_MATCH_TYPE (متوقف) keyword_match_type_recommendation KeywordMatchTypeRecommendation
MOVE_UNUSED_BUDGET move_unused_budget_recommendation MoveUnusedBudgetRecommendation
TARGET_ROAS_OPT_IN target_roas_opt_in_recommendation TargetRoasOptInRecommendation
FORECASTING_CAMPAIGN_BUDGET forecasting_campaign_budget_recommendation CampaignBudgetRecommendation
RESPONSIVE_SEARCH_AD responsive_search_ad_recommendation ResponsiveSearchAdRecommendation
MARGINAL_ROI_CAMPAIGN_BUDGET marginal_roi_campaign_budget_recommendation CampaignBudgetRecommendation
USE_BROAD_MATCH_KEYWORD use_broad_match_keyword_recommendation UseBroadMatchKeywordRecommendation
RESPONSIVE_SEARCH_AD_ASSET responsive_search_ad_asset_recommendation ResponsiveSearchAdAssetRecommendation
DISPLAY_EXPANSION_OPT_IN display_expansion_opt_in_recommendation DisplayExpansionOptInRecommendation
UPGRADE_LOCAL_CAMPAIGN_TO_PERFORMANCE_MAX upgrade_local_campaign_to_performance_max_recommendation UpgradeLocalCampaignToPerformanceMaxRecommendation
RAISE_TARGET_CPA_BID_TOO_LOW raise_target_cpa_bid_too_low_recommendation RaiseTargetCpaBidTooLowRecommendation
FORECASTING_SET_TARGET_ROAS forecasting_set_target_roas_recommendation ForecastingSetTargetRoasRecommendation
CALLOUT_ASSET callout_asset_recommendation CalloutAssetRecommendation
SITELINK_ASSET sitelink_asset_recommendation SitelinkAssetRecommendation
CALL_ASSET call_asset_recommendation CallAssetRecommendation
SHOPPING_ADD_AGE_GROUP shopping_add_age_group_recommendation ShoppingOfferAttributeRecommendation
SHOPPING_ADD_COLOR shopping_add_color_recommendation ShoppingOfferAttributeRecommendation
SHOPPING_ADD_GENDER shopping_add_gender_recommendation ShoppingOfferAttributeRecommendation
SHOPPING_ADD_GTIN shopping_add_gtin_recommendation ShoppingOfferAttributeRecommendation
SHOPPING_ADD_MORE_IDENTIFIERS shopping_add_more_identifiers_recommendation ShoppingOfferAttributeRecommendation
SHOPPING_ADD_SIZE shopping_add_size_recommendation ShoppingOfferAttributeRecommendation
SHOPPING_ADD_PRODUCTS_TO_CAMPAIGN shopping_add_products_to_campaign_recommendation ShoppingAddProductsToCampaignRecommendation
SHOPPING_FIX_DISAPPROVED_PRODUCTS shopping_fix_disapproved_products_recommendation ShoppingFixDisapprovedProductsRecommendation
SHOPPING_TARGET_ALL_OFFERS shopping_target_all_offers_recommendation ShoppingTargetAllOffersRecommendation
SHOPPING_FIX_SUSPENDED_MERCHANT_CENTER_ACCOUNT shopping_fix_suspended_merchant_center_account_recommendation ShoppingMerchantCenterAccountSuspensionRecommendation
SHOPPING_FIX_MERCHANT_CENTER_ACCOUNT_SUSPENSION_WARNING shopping_fix_merchant_center_account_suspension_warning_recommendation ShoppingMerchantCenterAccountSuspensionRecommendation
SHOPPING_MIGRATE_REGULAR_SHOPPING_CAMPAIGN_OFFERS_TO_PERFORMANCE_MAX shopping_migrate_regular_shopping_campaign_offers_to_performance_max_recommendation ShoppingMigrateRegularShoppingCampaignOffersToPerformanceMaxRecommendation

مثال للرمز

يسترِد الرمز النموذجي التالي جميع الاقتراحات المتاحة والمرفوضة من النوع TEXT_AD من أحد الحسابات ويطبع بعض التفاصيل:

لغة Java

private void runExample(GoogleAdsClient googleAdsClient, long customerId) {
  try (GoogleAdsServiceClient googleAdsServiceClient =
      googleAdsClient.getLatestVersion().createGoogleAdsServiceClient()) {
    String query =
        "SELECT recommendation.type, "
            + "recommendation.campaign, "
            + "recommendation.text_ad_recommendation "
            + "FROM recommendation "
            + "WHERE recommendation.type = TEXT_AD";

    // Creates a request that will retrieve all recommendations using pages of the
    // specified page size.
    SearchGoogleAdsRequest request =
        SearchGoogleAdsRequest.newBuilder()
            .setCustomerId(Long.toString(customerId))
            .setPageSize(PAGE_SIZE)
            .setQuery(query)
            .build();
    // Issues the search request.
    SearchPagedResponse searchPagedResponse = googleAdsServiceClient.search(request);

    // Iterates over all rows in all pages and prints the requested field values for the
    // recommendation in each row.
    for (GoogleAdsRow googleAdsRow : searchPagedResponse.iterateAll()) {
      Recommendation recommendation = googleAdsRow.getRecommendation();
      Ad recommendedAd = recommendation.getTextAdRecommendation().getAd();

      System.out.printf(
          "Recommendation ('%s') was found for campaign '%s':%n",
          recommendation.getResourceName(), recommendation.getCampaign());
      if (recommendedAd.hasExpandedTextAd()) {
        ExpandedTextAdInfo eta = recommendedAd.getExpandedTextAd();
        System.out.printf(
            "\tHeadline 1 = '%s'%n" + "\tHeadline 2 = '%s'%n" + "\tDescription = '%s'%n",
            eta.getHeadlinePart1(), eta.getHeadlinePart2(), eta.getDescription());
      }
      if (recommendedAd.getDisplayUrl() != null) {
        System.out.printf("\tDisplay URL = '%s'%n", recommendedAd.getDisplayUrl());
      }
      for (String url : recommendedAd.getFinalUrlsList()) {
        System.out.printf("\tFinal URL = '%s'%n", url);
      }
      for (String url : recommendedAd.getFinalMobileUrlsList()) {
        System.out.printf("\tFinal Mobile URL = '%s'%n", url);
      }
    }
  }
}
      

C#‎

public void Run(GoogleAdsClient client, long customerId)
{
    // Get the GoogleAdsServiceClient .
    GoogleAdsServiceClient service = client.GetService(Services.V13.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;
    }
}
      

‫2,999

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($customerId, $query, ['pageSize' => 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::V13::Services::GoogleAdsService::SearchGoogleAdsRequest
    ->new({
      customerId => $customer_id,
      query      => $search_query,
      pageSize   => PAGE_SIZE
    });

  # Get the GoogleAdsService.
  my $google_ads_service = $api_client->GoogleAdsService();

  my $iterator = Google::Ads::GoogleAds::Utils::SearchGoogleAdsIterator->new({
    service => $google_ads_service,
    request => $search_request
  });

  # Iterate over all rows in all pages and print the requested field values for
  # the recommendation in each row.
  while ($iterator->has_next) {
    my $google_ads_row = $iterator->next;
    my $recommendation = $google_ads_row->{recommendation};
    printf
      "Recommendation '%s' was found for campaign '%s':\n",
      $recommendation->{resourceName},
      $recommendation->{campaign};

    my $recommended_ad = $recommendation->{textAdRecommendation}{ad};
    if ($recommended_ad->{expandedTextAd}) {
      my $recommended_expanded_text_ad = $recommended_ad->{expandedTextAd};

      printf "\tHeadline part 1 is '%s'.\n" .
        "\tHeadline part 2 is '%s'.\n" . "\tDescription is '%s'.\n",
        $recommended_expanded_text_ad->{headlinePart1},
        $recommended_expanded_text_ad->{headlinePart2},
        $recommended_expanded_text_ad->{description};
    }

    if ($recommended_ad->{displayUrl}) {
      printf "\tDisplay URL is '%s'.\n", $recommended_ad->{displayUrl};
    }

    foreach my $final_url (@{$recommended_ad->{finalUrls}}) {
      printf "\tFinal URL is '%s'.\n", $final_url;
    }

    foreach my $final_mobile_url (@{$recommended_ad->{finalMobileUrls}}) {
      printf "\tFinal Mobile URL is '%s'.\n", $final_mobile_url;
    }
  }

  return 1;
}
      

الإجراءات

ويمكن تطبيق أي اقتراح تم استرداده أو رفضه.

وبناءً على نوع الاقتراح، يمكن أن تتغير الاقتراحات على أساس يومي أو حتى عدة مرات في اليوم. وعند حدوث ذلك، يصبح عنصر الكائن resource_name قديمًا بعد استرداد الاقتراح.

من الممارسات الجيدة اتخاذ إجراءات بشأن الاقتراحات بعد الاسترجاع.

تطبيق الاقتراحات

فيديو: تطبيق الاقتراحات

لا تتوفر إمكانية ضبط الحسابات للتطبيق التلقائي للاقتراحات في Google Ads API، لكن يمكنك تنفيذ سلوك مشابه لأنواع الاقتراحات المتوافقة بالكامل مع Google Ads API. اطّلِع على مثال DetectAndApplyRecommendations للرمز لمعرفة مزيد من المعلومات.

يمكنك تطبيق الاقتراحات النشطة أو المرفوضة باستخدام الطريقة ApplyRecommendation في RecommendationService.

يمكن أن تحتوي أنواع الاقتراحات على معلّمات إلزامية أو اختيارية. تأتي معظم الاقتراحات مع القيم المقترحة التي يتم استخدامها بشكل تلقائي، ويمكنك الاطّلاع على تفاصيل الاقتراحات.

استخدِم حقل apply_parameters ApplyRecommendationOperation لتطبيق الاقتراحات باستخدام قيم مَعلمات محدّدة. ولكل نوع مناسب من الاقتراحات حقله الخاص. أي نوع مقترح غير متوفر في الجدول لا يستخدم قيم المعلمات هذه.

نوع الاقتراح تطبيق المعلّمات Type
CAMPAIGN_BUDGET campaign_budget CampaignBudgetParameters
KEYWORD keyword KeywordParameters
TEXT_AD text_ad TextAdParameters
TARGET_CPA_OPT_IN target_cpa_opt_in TargetCpaOptInParameters
CALLOUT_EXTENSION (متوقف) callout_extension CalloutExtensionParameters
SITELINK_EXTENSION (متوقف) sitelink_extension SitelinkExtensionParameters
CALL_EXTENSION (متوقف) call_extension CallExtensionParameters
MOVE_UNUSED_BUDGET move_unused_budget MoveUnusedBudgetParameters
TARGET_ROAS_OPT_IN target_roas_opt_in TargetRoasOptInParameters
FORECASTING_CAMPAIGN_BUDGET campaign_budget CampaignBudgetParameters
RESPONSIVE_SEARCH_AD responsive_search_ad ResponsiveSearchAdParameters
MARGINAL_ROI_CAMPAIGN_BUDGET campaign_budget CampaignBudgetParameters
USE_BROAD_MATCH_KEYWORD use_broad_match_keyword UseBroadMatchKeywordRecommendation
RESPONSIVE_SEARCH_AD_ASSET responsive_search_ad_asset ResponsiveSearchAdAssetParameters
CALLOUT_ASSET callout_asset CalloutAssetParameters
SITELINK_ASSET sitelink_asset SitelinkAssetParameters
CALL_ASSET call_asset CallAssetParameters

مثال للرمز

يوضّح مثال الرمز التالي كيفية تطبيق اقتراح باستخدام معلَمات التطبيق المقترَحة:

لغة 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.V13.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;
    }
}
      

‫2,999

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(
        $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::V13::Utils::ResourceNames::recommendation(
    $customer_id, $recommendation_id);

  # Create an apply recommendation operation.
  my $apply_recommendation_operation =
    Google::Ads::GoogleAds::V13::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::V13::Resources::Ad->new({
  #   id => "INSERT_AD_ID_AS_INTEGER_HERE"
  # });
  # my $text_ad_parameters =
  #   Google::Ads::GoogleAds::V13::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;
}
      

شاهِد هذه الفيديوهات للحصول على المزيد من المعلومات.

تطبيق المعلمات

مجمَّع

الأخطاء

الاختبارات

رفض الاقتراحات

الفيديو: رفض الاقتراحات

يمكنك رفض الاقتراحات باستخدام RecommendationService. تتشابه بنية الرمز مع تطبيق الاقتراحات، ولكنك بدلاً من ذلك تستخدم DismissRecommendationOperation و RecommendationService.DismissRecommendation.

شاهِد هذه الفيديوهات للحصول على المزيد من المعلومات.

مجمَّع

الأخطاء

الاختبارات