Les recommandations peuvent améliorer vos campagnes de plusieurs façons :
- Présenter de nouvelles fonctionnalités pertinentes
- Exploitez au mieux votre budget en optimisant vos enchères, vos mots clés et vos annonces
- Améliorer les performances globales et l'efficacité de vos campagnes
Pour augmenter les scores d'optimisation, vous pouvez utiliser RecommendationService pour récupérer des recommandations, puis les appliquer ou les ignorer en conséquence. Vous pouvez également vous abonner pour appliquer automatiquement les recommandations à l'aide de RecommendationSubscriptionService.
Score d'optimisation
Le score d'optimisation est une estimation des performances de votre compte Google Ads. Il est disponible aux niveaux Customer et Campaign.
Des métriques liées à l'optimisation sont disponibles pour les rapports customer et campaign :
metrics.optimization_score_urlfournit un lien profond vers le compte pour afficher des informations sur les recommandations associées dans l'UI Google Ads.- Le
metrics.optimization_score_upliftindique l'augmentation du score d'optimisation si toutes les recommandations associées sont appliquées. Il s'agit d'une estimation basée sur l'ensemble des recommandations disponibles, et non de la somme des scores d'amélioration de chaque recommandation.
Pour regrouper et ordonner les recommandations renvoyées, vous pouvez segmenter ces deux métriques par type de recommandation à l'aide de segments.recommendation_type dans votre requête.
Types de recommandation
Le tableau suivant liste les types de recommandations compatibles avec l'API Google Ads pour récupérer, appliquer et ignorer des recommandations. Si un compte comporte des types de recommandations dans l'UI Google Ads qui ne sont pas compatibles avec l'API, vous pouvez utiliser metrics.optimization_score_url pour rediriger les utilisateurs directement vers la page "Recommandations" de l'UI Google Ads afin qu'ils puissent examiner ces recommandations et agir en conséquence.
Types de recommandations entièrement compatibles
| RecommendationType | Description |
|---|---|
CAMPAIGN_BUDGET |
Corriger les campagnes limitées par leur budget |
KEYWORD |
Ajouter de nouveaux mots clés |
TEXT_AD |
Ajouter des suggestions d'annonces |
TARGET_CPA_OPT_IN |
Enchérir avec le CPA cible |
MAXIMIZE_CONVERSIONS_OPT_IN |
Enchérir avec "Maximiser les conversions" |
MAXIMIZE_CONVERSION_VALUE_OPT_IN |
Enchérir avec "Maximiser la valeur de conversion" |
ENHANCED_CPC_OPT_IN |
Enchérir avec le CPC optimisé |
MAXIMIZE_CLICKS_OPT_IN |
Enchérir avec la stratégie "Maximiser les clics" |
OPTIMIZE_AD_ROTATION |
Utiliser la rotation optimisée des annonces |
MOVE_UNUSED_BUDGET |
Réaffecter les budgets inutilisés aux budgets limités |
TARGET_ROAS_OPT_IN |
Enchérir avec le ROAS cible |
FORECASTING_CAMPAIGN_BUDGET |
Corriger les campagnes qui devraient être limitées par leur budget à l'avenir |
RESPONSIVE_SEARCH_AD |
Ajouter une annonce responsive sur le Réseau de Recherche |
MARGINAL_ROI_CAMPAIGN_BUDGET |
Ajustez le budget de la campagne pour augmenter le ROI |
USE_BROAD_MATCH_KEYWORD |
Utilisez la requête large pour les campagnes basées sur les conversions avec enchères automatiques. |
RESPONSIVE_SEARCH_AD_ASSET |
Ajouter des composants d'annonces responsives sur le Réseau de Recherche à une annonce |
RESPONSIVE_SEARCH_AD_IMPROVE_AD_STRENGTH |
Améliorer l'efficacité d'une annonce responsive sur le Réseau de Recherche |
DISPLAY_EXPANSION_OPT_IN |
Mettre à jour une campagne pour utiliser l'expansion au Réseau Display |
SEARCH_PARTNERS_OPT_IN |
Élargir la couverture grâce aux partenaires du Réseau de Recherche de Google |
CUSTOM_AUDIENCE_OPT_IN |
Créer une audience personnalisée |
IMPROVE_DEMAND_GEN_AD_STRENGTH |
Améliorer l'efficacité des annonces dans les campagnes Demand Gen |
UPGRADE_SMART_SHOPPING_CAMPAIGN_TO_PERFORMANCE_MAX |
Migrer une campagne Shopping intelligente vers une campagne Performance Max |
UPGRADE_LOCAL_CAMPAIGN_TO_PERFORMANCE_MAX |
Migrer une ancienne campagne locale vers une campagne Performance Max |
SHOPPING_MIGRATE_REGULAR_SHOPPING_CAMPAIGN_OFFERS_TO_PERFORMANCE_MAX
|
Migrer les offres ciblées par des campagnes Shopping standards vers des campagnes Performance Max existantes |
MIGRATE_DYNAMIC_SEARCH_ADS_CAMPAIGN_TO_PERFORMANCE_MAX
|
Migrer des annonces dynamiques du Réseau de Recherche vers des campagnes Performance Max |
PERFORMANCE_MAX_OPT_IN |
Créer des campagnes Performance Max dans votre compte |
IMPROVE_PERFORMANCE_MAX_AD_STRENGTH |
Améliorez l'efficacité du groupe de composants d'une campagne Performance Max pour obtenir la note "Excellente" |
PERFORMANCE_MAX_FINAL_URL_OPT_IN |
Activer l'extension d'URL finale pour vos campagnes Performance Max |
RAISE_TARGET_CPA_BID_TOO_LOW |
Augmentez le CPA cible lorsqu'il est trop faible et qu'il n'y a que très peu ou pas de conversions. |
FORECASTING_SET_TARGET_ROAS |
Augmentez le budget avant un événement saisonnier qui devrait accroître le trafic, et remplacez la stratégie d'enchères "Maximiser la valeur de conversion" par "ROAS cible". |
LEAD_FORM_ASSET |
Ajouter des composants Formulaire de lead à une campagne |
CALLOUT_ASSET |
Ajouter des composants Accroche au niveau de la campagne ou du client |
SITELINK_ASSET |
Ajouter des composants Lien annexe au niveau de la campagne ou du client |
CALL_ASSET |
Ajouter des composants Appel au niveau de la campagne ou du compte client |
SHOPPING_ADD_AGE_GROUP |
Ajoutez l'attribut tranche d'âge aux offres rétrogradées en raison d'une tranche d'âge manquante. |
SHOPPING_ADD_COLOR |
Ajoutez une couleur aux offres rétrogradées en raison d'une couleur manquante |
SHOPPING_ADD_GENDER |
Ajoutez un sexe aux offres qui sont rétrogradées, car il n'est pas indiqué |
SHOPPING_ADD_GTIN |
Ajoutez un code GTIN (code article international) aux offres rétrogradées, car il leur manque un code GTIN. |
SHOPPING_ADD_MORE_IDENTIFIERS |
Ajoutez d'autres identifiants aux offres qui sont rétrogradées en raison d'identifiants manquants |
SHOPPING_ADD_SIZE |
Ajouter la taille aux offres rétrogradées en raison d'une taille manquante |
SHOPPING_ADD_PRODUCTS_TO_CAMPAIGN |
Ajoutez des produits pour diffuser une campagne |
SHOPPING_FIX_DISAPPROVED_PRODUCTS |
Corriger les produits refusés |
SHOPPING_TARGET_ALL_OFFERS |
Créer une campagne catch-all ciblant toutes les offres |
SHOPPING_FIX_SUSPENDED_MERCHANT_CENTER_ACCOUNT |
Résoudre les problèmes de suspension de compte Merchant Center |
SHOPPING_FIX_MERCHANT_CENTER_ACCOUNT_SUSPENSION_WARNING
|
Résoudre les problèmes d'avertissement de suspension du compte Merchant Center |
DYNAMIC_IMAGE_EXTENSION_OPT_IN |
Activer les extensions d'image dynamiques dans le compte |
RAISE_TARGET_CPA |
Augmenter le CPA cible |
LOWER_TARGET_ROAS |
Diminuer le ROAS cible |
FORECASTING_SET_TARGET_CPA |
Définissez un CPA cible pour les campagnes qui n'en ont pas, avant un événement saisonnier qui devrait augmenter le trafic. |
SET_TARGET_CPA |
Définissez un CPA cible pour les campagnes qui n'en ont pas. |
SET_TARGET_ROAS |
Définissez un ROAS cible pour les campagnes qui n'en ont pas. |
REFRESH_CUSTOMER_MATCH_LIST |
Mettre à jour une liste de clients qui n'a pas été mise à jour au cours des 90 derniers jours |
IMPROVE_GOOGLE_TAG_COVERAGE |
Déployer la balise Google sur d'autres pages |
CAMPAIGN_SPECIFIC_APP_GOAL |
Ajouter un objectif de conversion d'application propre à la campagne |
RAISE_TARGET_CPA_PERFORMANCE_BID_TOO_LOW |
Augmenter le CPA cible lorsqu'il est trop faible pour les campagnes sur le Réseau de Recherche |
LOWER_TARGET_ROAS_PERFORMANCE_BID_TOO_LOW |
Diminuer le ROAS cible lorsqu'il est trop bas pour les campagnes sur le Réseau de Recherche |
RAISE_BUDGET_PERFORMANCE_TOO_LOW |
Augmentez le budget des campagnes sur le Réseau de Recherche lorsqu'il est trop faible. Disponible à partir de la v26. Les détails de la recommandation sont renvoyés dans Recommendation.raise_budget_performance_too_low_recommendation et appliqués à l'aide de ApplyRecommendationOperation.raise_budget_performance_too_low. |
KEYWORD_MATCH_TYPE (obsolète) |
Obsolète : utilisez USE_BROAD_MATCH_KEYWORD à la place. |
Récupérer des recommandations
Comme la plupart des autres entités de l'API Google Ads, les objets Recommendation sont récupérés à l'aide de GoogleAdsService.SearchStream avec une requête en langage de requête Google Ads.
Pour chaque type de recommandation, des détails sont fournis dans un champ spécifique à la recommandation. Par exemple, les détails de la recommandation CAMPAIGN_BUDGET se trouvent dans le champ campaign_budget_recommendation et sont encapsulés dans un objet CampaignBudgetRecommendation.
Vous trouverez tous les champs spécifiques aux recommandations dans le champ d'union recommendation.
Impact de la recommandation
Certains types de recommandations renseignent le champ impact de la recommandation.
RecommendationImpact contient une estimation de l'impact de l'application de la recommandation sur les performances du compte. Les métriques de recommandation suivantes sont disponibles dans les champs impact.base_metrics et impact.potential_metrics :
impressionsclickscost_microsconversionsall_conversionsvideo_views
Même lorsque le champ impact est renseigné, la disponibilité des métriques varie en fonction du type de recommandation et du type de campagne, entre autres facteurs. En général, vérifiez la disponibilité de chaque métrique d'impact avant d'essayer de l'utiliser.
Exemple de code
L'exemple de code suivant récupère toutes les recommandations disponibles et ignorées de type KEYWORD d'un compte, puis affiche certains de leurs détails :
Java
try (GoogleAdsServiceClient googleAdsServiceClient = googleAdsClient.getLatestVersion().createGoogleAdsServiceClient(); RecommendationServiceClient recommendationServiceClient = googleAdsClient.getLatestVersion().createRecommendationServiceClient()) { // Creates a query that retrieves keyword recommendations. String query = "SELECT recommendation.resource_name, " + " recommendation.campaign, " + " recommendation.keyword_recommendation " + "FROM recommendation " + "WHERE recommendation.type = KEYWORD"; // Constructs the SearchGoogleAdsStreamRequest. SearchGoogleAdsStreamRequest request = SearchGoogleAdsStreamRequest.newBuilder() .setCustomerId(Long.toString(customerId)) .setQuery(query) .build(); // Issues the search stream request to detect keyword recommendations that exist for the // customer account. ServerStream<SearchGoogleAdsStreamResponse> stream = googleAdsServiceClient.searchStreamCallable().call(request); // Creates apply operations for all the recommendations found. List<ApplyRecommendationOperation> applyRecommendationOperations = new ArrayList<>(); for (SearchGoogleAdsStreamResponse response : stream) { for (GoogleAdsRow googleAdsRow : response.getResultsList()) { Recommendation recommendation = googleAdsRow.getRecommendation(); System.out.printf( "Keyword recommendation '%s' was found for campaign '%s'%n", recommendation.getResourceName(), recommendation.getCampaign()); KeywordInfo keyword = recommendation.getKeywordRecommendation().getKeyword(); System.out.printf("\tKeyword = '%s'%n", keyword.getText()); System.out.printf("\tMatch type = '%s'%n", keyword.getMatchType()); // Creates an ApplyRecommendationOperation that will apply this recommendation, and adds // it to the list of operations. applyRecommendationOperations.add(buildRecommendationOperation(recommendation)); } }
C#
// Get the GoogleAdsServiceClient. GoogleAdsServiceClient googleAdsService = client.GetService( Services.V25.GoogleAdsService); // Creates a query that retrieves keyword recommendations. string query = "SELECT recommendation.resource_name, " + "recommendation.campaign, recommendation.keyword_recommendation " + "FROM recommendation WHERE " + $"recommendation.type = KEYWORD"; List<ApplyRecommendationOperation> operations = new List<ApplyRecommendationOperation>(); try { // Issue a search request. googleAdsService.SearchStream(customerId.ToString(), query, delegate (SearchGoogleAdsStreamResponse resp) { Console.WriteLine($"Found {resp.Results.Count} recommendations."); foreach (GoogleAdsRow googleAdsRow in resp.Results) { Recommendation recommendation = googleAdsRow.Recommendation; Console.WriteLine("Keyword recommendation " + $"{recommendation.ResourceName} was found for campaign " + $"{recommendation.Campaign}."); if (recommendation.KeywordRecommendation != null) { KeywordInfo keyword = recommendation.KeywordRecommendation.Keyword; Console.WriteLine($"Keyword = {keyword.Text}, type = " + "{keyword.MatchType}"); } operations.Add( BuildApplyRecommendationOperation(recommendation.ResourceName) ); } } ); } catch (GoogleAdsException e) { Console.WriteLine("Failure:"); Console.WriteLine($"Message: {e.Message}"); Console.WriteLine($"Failure: {e.Failure}"); Console.WriteLine($"Request ID: {e.RequestId}"); throw; }
PHP
$googleAdsServiceClient = $googleAdsClient->getGoogleAdsServiceClient(); // Creates a query that retrieves keyword recommendations. $query = 'SELECT recommendation.resource_name, recommendation.campaign, ' . 'recommendation.keyword_recommendation ' . 'FROM recommendation ' . 'WHERE recommendation.type = KEYWORD '; // Issues a search request to detect keyword recommendations that exist for the // customer account. $response = $googleAdsServiceClient->search(SearchGoogleAdsRequest::build($customerId, $query)); $operations = []; // Iterates over all rows in all pages and prints the requested field values for // the recommendation in each row. foreach ($response->iterateAllElements() as $googleAdsRow) { /** @var GoogleAdsRow $googleAdsRow */ $recommendation = $googleAdsRow->getRecommendation(); printf( "Keyword recommendation with resource name '%s' was found for campaign " . "with resource name '%s':%s", $recommendation->getResourceName(), $recommendation->getCampaign(), PHP_EOL ); if (!is_null($recommendation->getKeywordRecommendation())) { $keyword = $recommendation->getKeywordRecommendation()->getKeyword(); printf( "\tKeyword = '%s'%s\ttype = '%s'%s", $keyword->getText(), PHP_EOL, KeywordMatchType::name($keyword->getMatchType()), PHP_EOL ); } // Creates an ApplyRecommendationOperation that will be used to apply this // recommendation, and adds it to the list of operations. $operations[] = self::buildRecommendationOperation($recommendation->getResourceName()); }
Python
googleads_service = client.get_service("GoogleAdsService") query: str = """ SELECT recommendation.campaign, recommendation.keyword_recommendation FROM recommendation WHERE recommendation.type = KEYWORD""" # Detects keyword recommendations that exist for the customer account. response: Iterable[GoogleAdsRow] = googleads_service.search( customer_id=customer_id, query=query ) operations: List[ApplyRecommendationOperation] = [] for row in response: recommendation = row.recommendation print( f"Keyword recommendation ('{recommendation.resource_name}') " f"was found for campaign '{recommendation.campaign}." ) keyword = recommendation.keyword_recommendation.keyword print( f"\tKeyword = '{keyword.text}'\n" f"\tType = '{keyword.match_type}'" ) # Create an ApplyRecommendationOperation that will be used to apply # this recommendation, and add it to the list of operations. operations.append( build_recommendation_operation(client, recommendation.resource_name) )
Ruby
query = <<~QUERY SELECT recommendation.resource_name, recommendation.campaign, recommendation.keyword_recommendation FROM recommendation WHERE recommendation.type = KEYWORD QUERY google_ads_service = client.service.google_ads response = google_ads_service.search( customer_id: customer_id, query: query, ) operations = response.each do |row| recommendation = row.recommendation puts "Keyword recommendation ('#{recommendation.resource_name}') was found for "\ "campaign '#{recommendation.campaign}'." if recommendation.keyword_recommendation keyword = recommendation.keyword_recommendation.keyword puts "\tKeyword = '#{keyword.text}'" puts "\ttype = '#{keyword.match_type}'" end build_recommendation_operation(client, recommendation.resource_name) end
Perl
# Create the search query. my $search_query = "SELECT recommendation.resource_name, " . "recommendation.campaign, recommendation.keyword_recommendation " . "FROM recommendation " . "WHERE recommendation.type = KEYWORD"; # Get the GoogleAdsService. my $google_ads_service = $api_client->GoogleAdsService(); my $search_stream_handler = Google::Ads::GoogleAds::Utils::SearchStreamHandler->new({ service => $google_ads_service, request => { customerId => $customer_id, query => $search_query }}); # Create apply operations for all the recommendations found. my $apply_recommendation_operations = (); $search_stream_handler->process_contents( sub { my $google_ads_row = shift; my $recommendation = $google_ads_row->{recommendation}; printf "Keyword recommendation '%s' was found for campaign '%s'.\n", $recommendation->{resourceName}, $recommendation->{campaign}; my $keyword = $recommendation->{keywordRecommendation}{keyword}; printf "\tKeyword = '%s'\n", $keyword->{text}; printf "\tMatch type = '%s'\n", $keyword->{matchType}; # Creates an ApplyRecommendationOperation that will apply this recommendation, and adds # it to the list of operations. push @$apply_recommendation_operations, build_recommendation_operation($recommendation); });
curl
# Gets keyword recommendations. # # Variables: # API_VERSION, # CUSTOMER_ID, # 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
Intervenir
Toute recommandation récupérée peut être appliquée ou ignorée.
Selon le type de recommandation, les recommandations peuvent changer quotidiennement, voire plusieurs fois par jour. Dans ce cas, l'attribut resource_name d'un objet de recommandation peut devenir obsolète après la récupération de la recommandation.
Il est recommandé de passer à l'action concernant les recommandations peu de temps après les avoir récupérées.
Appliquer les recommandations
Vous pouvez appliquer les recommandations actives ou ignorées avec la méthode ApplyRecommendation de RecommendationService.
Les types de recommandations peuvent comporter des paramètres obligatoires ou facultatifs. La plupart des recommandations sont accompagnées de valeurs recommandées qui sont utilisées par défaut.
La configuration des comptes pour l'application automatique des recommandations n'est pas possible pour tous les types de recommandations. Toutefois, vous pouvez implémenter un comportement similaire pour les types de recommandations entièrement compatibles avec l'API Google Ads.
Pour en savoir plus, consultez l'exemple de code DetectAndApplyRecommendations.
Utilisez le champ d'union apply_parameters de ApplyRecommendationOperation pour appliquer des recommandations avec des valeurs de paramètres spécifiques. Chaque type de recommandation approprié possède son propre champ. Tout type de recommandation non listé dans le champ apply_parameters n'utilise pas ces valeurs de paramètre.
Exemple de code
Le code suivant montre comment créer l'ApplyRecommendationOperation et comment remplacer les valeurs recommandées si vous souhaitez les remplacer par les vôtres.
Java
/** Creates and returns an ApplyRecommendationOperation to apply the given recommendation. */ private ApplyRecommendationOperation buildRecommendationOperation(Recommendation recommendation) { // If you have a recommendation ID instead of a resource name, you can create a resource name // like this: // String resourceName = ResourceNames.recommendation(customerId, recommendationId); // Creates a builder to construct the operation. Builder operationBuilder = ApplyRecommendationOperation.newBuilder(); // Each recommendation type has optional parameters to override the recommended values. Below is // an example showing how to override a recommended ad when a TextAdRecommendation is applied. // operationBuilder.getTextAdBuilder().getAdBuilder().setResourceName("INSERT_AD_RESOURCE_NAME"); // Sets the operation's resource name to the resource name of the recommendation to apply. operationBuilder.setResourceName(recommendation.getResourceName()); return operationBuilder.build(); }
C#
private ApplyRecommendationOperation BuildApplyRecommendationOperation( string recommendationResourceName ) { // If you have a recommendation_id instead of the resource_name you can create a // resource name from it like this: // string recommendationResourceName = // ResourceNames.Recommendation(customerId, recommendationId) // Each recommendation type has optional parameters to override the recommended values. // This is an example to override a recommended ad when a TextAdRecommendation is // applied. // For details, please read // https://developers.google.com/google-ads/api/reference/rpc/latest/ApplyRecommendationOperation. /* Ad overridingAd = new Ad() { Id = "INSERT_AD_ID_AS_LONG_HERE" }; applyRecommendationOperation.TextAd = new TextAdParameters() { Ad = overridingAd }; */ ApplyRecommendationOperation applyRecommendationOperation = new ApplyRecommendationOperation() { ResourceName = recommendationResourceName }; return applyRecommendationOperation; }
PHP
private static function buildRecommendationOperation( string $recommendationResourceName ): ApplyRecommendationOperation { // If you have a recommendation_id instead of the resource name, you can create a resource // name from it like this: /* $recommendationResourceName = ResourceNames::forRecommendation($customerId, $recommendationId); */ // Each recommendation type has optional parameters to override the recommended values. // This is an example to override a recommended ad when a TextAdRecommendation is applied. // For details, please read // https://developers.google.com/google-ads/api/reference/rpc/latest/ApplyRecommendationOperation. /* $overridingAd = new Ad([ 'id' => 'INSERT_AD_ID_AS_INTEGER_HERE' ]); $applyRecommendationOperation->setTextAd(new TextAdParameters(['ad' => $overridingAd])); */ // Issues a mutate request to apply the recommendation. $applyRecommendationOperation = new ApplyRecommendationOperation(); $applyRecommendationOperation->setResourceName($recommendationResourceName); return $applyRecommendationOperation; }
Python
def build_recommendation_operation( client: GoogleAdsClient, recommendation: str ) -> ApplyRecommendationOperation: """Creates a ApplyRecommendationOperation to apply the given recommendation. Args: client: an initialized GoogleAdsClient instance. recommendation: a resource name for the recommendation to be applied. """ # If you have a recommendation ID instead of a resource name, you can create # a resource name like this: # # googleads_service = client.get_service("GoogleAdsService") # resource_name = googleads_service.recommendation_path( # customer_id, recommendation.id # ) operation: ApplyRecommendationOperation = client.get_type( "ApplyRecommendationOperation" ) # Each recommendation type has optional parameters to override the # recommended values. Below is an example showing how to override a # recommended ad when a TextAdRecommendation is applied. # # operation.text_ad.ad.resource_name = "INSERT_AD_RESOURCE_NAME" # # For more details, see: # https://developers.google.com/google-ads/api/reference/rpc/latest/ApplyRecommendationOperation#apply_parameters operation.resource_name = recommendation return operation
Ruby
def build_recommendation_operation(client, recommendation) # If you have a recommendation_id instead of the resource_name # you can create a resource name from it like this: # recommendation_resource = # client.path.recommendation(customer_id, recommendation_id) operations = client.operation.apply_recommendation operations.resource_name = recommendation_resource # Each recommendation type has optional parameters to override the recommended # values. This is an example to override a recommended ad when a # TextAdRecommendation is applied. # # text_ad_parameters = client.resource.text_ad_parameters do |tap| # tap.ad = client.resource.ad do |ad| # ad.id = "INSERT_AD_ID_AS_INTEGER_HERE" # end # end # operation.text_ad = text_ad_parameters # # For more details, see: # https://developers.google.com/google-ads/api/reference/rpc/latest/ApplyRecommendationOperation#apply_parameters return operation end
Perl
sub build_recommendation_operation { my ($recommendation) = @_; # If you have a recommendation ID instead of a resource name, you can create a resource # name like this: # my $recommendation_resource_name = # Google::Ads::GoogleAds::V25::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::V25::Resources::Ad->new({ # id => "INSERT_AD_ID_AS_INTEGER_HERE" # }); # my $text_ad_parameters = # Google::Ads::GoogleAds::V25::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::V25::Services::RecommendationService::ApplyRecommendationOperation ->new({ resourceName => $recommendation->{resourceName}}); return $apply_recommendation_operation; }
curl
L'exemple suivant appelle ApplyRecommendation, en envoyant les opérations d'application de recommandations créées dans le code précédent.
Java
// Issues a mutate request to apply the recommendations. ApplyRecommendationResponse applyRecommendationsResponse = recommendationServiceClient.applyRecommendation( Long.toString(customerId), applyRecommendationOperations); for (ApplyRecommendationResult applyRecommendationResult : applyRecommendationsResponse.getResultsList()) { System.out.printf( "Applied recommendation with resource name: '%s'.%n", applyRecommendationResult.getResourceName()); }
C#
private void ApplyRecommendation(GoogleAdsClient client, long customerId, List<ApplyRecommendationOperation> operations) { // Get the RecommendationServiceClient. RecommendationServiceClient recommendationService = client.GetService( Services.V25.RecommendationService); ApplyRecommendationRequest applyRecommendationRequest = new ApplyRecommendationRequest() { CustomerId = customerId.ToString(), }; applyRecommendationRequest.Operations.AddRange(operations); ApplyRecommendationResponse response = recommendationService.ApplyRecommendation(applyRecommendationRequest); foreach (ApplyRecommendationResult result in response.Results) { Console.WriteLine("Applied a recommendation with resource name: " + result.ResourceName); } }
PHP
private static function applyRecommendations( GoogleAdsClient $googleAdsClient, int $customerId, array $operations ): void { // Issues a mutate request to apply the recommendations. $recommendationServiceClient = $googleAdsClient->getRecommendationServiceClient(); $response = $recommendationServiceClient->applyRecommendation( ApplyRecommendationRequest::build($customerId, $operations) ); foreach ($response->getResults() as $appliedRecommendation) { /** @var Recommendation $appliedRecommendation */ printf( "Applied a recommendation with resource name: '%s'.%s", $appliedRecommendation->getResourceName(), PHP_EOL ); } }
Python
def apply_recommendations( client: GoogleAdsClient, customer_id: str, operations: List[ApplyRecommendationOperation], ) -> None: """Applies a batch of recommendations. Args: client: an initialized GoogleAdsClient instance. customer_id: a client customer ID. operations: a list of ApplyRecommendationOperation messages. """ # Issues a mutate request to apply the recommendations. recommendation_service = client.get_service("RecommendationService") response: ApplyRecommendationResult = ( recommendation_service.apply_recommendation( customer_id=customer_id, operations=operations ) ) for result in response.results: print( "Applied a recommendation with resource name: " f"'{result.resource_name}'." )
Ruby
def apply_recommendations(client, customer_id, operations) # Issues a mutate request to apply the recommendation. recommendation_service = client.service.recommendation response = recommendation_service.apply_recommendation( customer_id: customer_id, operations: [operations], ) response.results.each do |applied_recommendation| puts "Applied recommendation with resource name: '#{applied_recommendation.resource_name}'." end end
Perl
# Issue a mutate request to apply the recommendations. my $apply_recommendation_response = $api_client->RecommendationService()->apply({ customerId => $customer_id, operations => $apply_recommendation_operations }); foreach my $result (@{$apply_recommendation_response->{results}}) { printf "Applied recommendation with resource name: '%s'.\n", $result->{resourceName}; }
curl
# Applies a recommendation. # # Variables: # API_VERSION, # CUSTOMER_ID, # DEVELOPER_TOKEN, # MANAGER_CUSTOMER_ID, # OAUTH2_ACCESS_TOKEN: # See https://developers.google.com/google-ads/api/rest/auth#request_headers # for details. # # RECOMMENDATION_RESOURCE_NAME: The resource name of the recommendation to # apply, from the previous request. curl -f --request POST \ "https://googleads.googleapis.com/v${API_VERSION}/customers/${CUSTOMER_ID}/recommendations:apply" \ --header "Content-Type: application/json" \ --header "developer-token: ${DEVELOPER_TOKEN}" \ --header "login-customer-id: ${MANAGER_CUSTOMER_ID}" \ --header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \ --data @- <<EOF { "operations": [ { "resourceName": "${RECOMMENDATION_RESOURCE_NAME}" } ] } EOF
Masquer les recommandations
Vous pouvez ignorer les recommandations à l'aide de l'icône RecommendationService. La structure du code est semblable à celle de l'application des recommandations, mais vous utilisez DismissRecommendationOperation et RecommendationService.DismissRecommendation.
Opérations groupées et gestion des erreurs
ApplyRecommendation et DismissRecommendation acceptent jusqu'à 100 opérations par requête. Lorsque vous envoyez plusieurs opérations dans une même requête, gardez à l'esprit les comportements suivants :
- Mélange de types de recommandations : par défaut (
partial_failure = false), toutes les opérations d'une même requête doivent cibler le même type de recommandation. Sinon, l'API renvoieRecommendationError.DIFFERENT_TYPES_NOT_SUPPORTED. Pour appliquer ou ignorer des recommandations de différents types dans la même requête, définissezpartial_failuresurtruedans la requête afin que les opérations valides réussissent indépendamment. - Erreurs de cycle de vie : étant donné que les recommandations sont évaluées de manière dynamique, l'état d'une recommandation peut changer entre la récupération et l'action. Si une recommandation a déjà été appliquée, déjà ignorée ou n'est plus applicable, l'API renvoie
RECOMMENDATION_ALREADY_APPLIED,RECOMMENDATION_ALREADY_DISMISSEDouRECOMMENDATION_INVALIDATEDdansRecommendationError.
Appliquez automatiquement les recommandations
Vous pouvez utiliser RecommendationSubscriptionService pour appliquer automatiquement des recommandations d'un type spécifique.
Pour vous abonner à un type de recommandation particulier, créez un objet RecommendationSubscription, définissez le champ type sur l'un des types de recommandations compatibles, puis définissez le champ status sur ENABLED.
Types de recommandations compatibles avec les abonnements
ENHANCED_CPC_OPT_INKEYWORDKEYWORD_MATCH_TYPELOWER_TARGET_ROASMAXIMIZE_CLICKS_OPT_INOPTIMIZE_AD_ROTATIONRAISE_TARGET_CPARESPONSIVE_SEARCH_ADRESPONSIVE_SEARCH_AD_IMPROVE_AD_STRENGTHSEARCH_PARTNERS_OPT_INSET_TARGET_CPASET_TARGET_ROASTARGET_CPA_OPT_INTARGET_ROAS_OPT_INUSE_BROAD_MATCH_KEYWORD
Récupérer des abonnements
Pour obtenir des informations sur les abonnements aux recommandations d'un compte, interrogez la ressource recommendation_subscription.
Pour afficher les modifications qui ont été appliquées automatiquement, interrogez la ressource change_event en filtrant change_event.client_type sur GOOGLE_ADS_RECOMMENDATIONS_SUBSCRIPTION.
Recommandations lors de la création d'une campagne
Vous pouvez utiliser RecommendationService.GenerateRecommendationsRequest pour générer des recommandations lors de la création d'une campagne, pour un ensemble donné de types de recommandations.
GenerateRecommendations accepte comme entrée un numéro client, un type de canal publicitaire qui doit être SEARCH ou PERFORMANCE_MAX, une liste de types de recommandations à générer et divers points de données en fonction des types spécifiés. Il génère une liste d'objets Recommendation en fonction des données que vous fournissez. S'il n'y a pas suffisamment de données pour générer une recommandation pour le recommendation_types demandé ou si la campagne est déjà dans l'état recommandé, l'ensemble de résultats ne contiendra pas de recommandation pour ce type.
Assurez-vous que votre application gère le cas où aucune recommandation n'est renvoyée pour les types de recommandations demandés.
Le tableau suivant décrit les types de recommandations compatibles avec GenerateRecommendations, ainsi que les champs que vous devez fournir pour recevoir des recommandations de ce type. Nous vous recommandons d'envoyer la requête GenerateRecommendations après avoir collecté toutes les informations liées aux types de recommandations demandés. Pour en savoir plus sur les champs obligatoires et facultatifs, y compris les champs imbriqués, consultez la documentation de référence.
| RecommendationType | Champs obligatoires | Champs facultatifs |
|---|---|---|
CAMPAIGN_BUDGET |
Pour les campagnes sur le Réseau de Recherche et Performance Max, les champs suivants sont obligatoires :
|
|
KEYWORD |
|
|
MAXIMIZE_CLICKS_OPT_IN |
|
|
MAXIMIZE_CONVERSIONS_OPT_IN |
|
|
MAXIMIZE_CONVERSION_VALUE_OPT_IN |
|
|
SET_TARGET_CPA |
|
|
SET_TARGET_ROAS |
|
|
SITELINK_ASSET
Remarque : L'objet SitelinkAssetRecommendation renvoyé contiendra des listes vides. Si la réponse GenerateRecommendations contient un SitelinkAssetRecommendation, cela peut être considéré comme un signal pour ajouter au moins un composant Lien annexe à la campagne. |
|
|
TARGET_CPA_OPT_IN |
|
|
TARGET_ROAS_OPT_IN |
|
Exemple de flux d'utilisation
Supposons que votre entreprise soit une agence publicitaire qui fournit un workflow de création de campagne aux utilisateurs et que vous souhaitiez leur proposer des suggestions pendant ce workflow. Vous pouvez utiliser GenerateRecommendationsRequest pour générer des recommandations à la demande et les intégrer à l'interface utilisateur de création de vos campagnes.
Le flux d'utilisation peut se présenter comme suit :
Un utilisateur accède à votre application pour créer une campagne Performance Max.
L'utilisateur fournit des informations initiales dans le flux de création de campagne. Par exemple, ils fournissent des informations pour créer un seul
SitelinkAssetet sélectionnentTARGET_SPENDcomme stratégie d'enchères intelligentes.Vous envoyez un
GenerateRecommendationsRequestqui définit les champs suivants :campaign_sitelink_count: défini sur1, qui correspond au nombre de composants Lien annexe dans la campagne en cours.bidding_info: définissez le champbidding_strategy_typeimbriqué surTARGET_SPEND.conversion_tracking_status: défini sur l'ConversionTrackingStatusde ce client. Pour savoir comment récupérer ce champ, consultez le guide de démarrage pour la gestion des conversions.recommendation_types: défini sur[SITELINK_ASSET, MAXIMIZE_CLICKS_OPT_IN].advertising_channel_type: défini surPERFORMANCE_MAX.customer_id: défini sur l'ID du client qui crée la campagne.
Vous pouvez prendre les recommandations de
GenerateRecommendationsResponse(dans ce cas, unSitelinkAssetRecommendationet unMaximizeClicksOptInRecommendation) et les suggérer à l'utilisateur en les affichant dans l'interface de création de votre campagne. Si l'utilisateur accepte une suggestion, vous pouvez l'intégrer à la demande de création de campagne une fois qu'il a terminé le processus de création de campagne.