Créer des groupes de fiches "Activités à découvrir"

La création de groupes de fiches pour les groupes d'annonces Activités à découvrir suit la même hiérarchie structurelle et le même processus de création d'arborescence que les groupes de fiches d'annonces d'hôtel.

Pour partitionner votre inventaire d'activités à découvrir, utilisez les dimensions d'activité spécialisées disponibles dans ListingDimensionInfo :

  • ActivityCountryInfo : filtre par pays de destination (value) à l'aide d'un nom de ressource de cible géographique constante (geoTargetConstants/{criterion_id}, par exemple "geoTargetConstants/2840" pour les États-Unis).
  • ActivityStateInfo : filtre par région ou État de destination (value) à l'aide d'un nom de ressource GeoTargetConstant (geoTargetConstants/{criterion_id}).
  • ActivityCityInfo : filtre par ville de destination (value) à l'aide d'un nom de ressource GeoTargetConstant (geoTargetConstants/{criterion_id}, par exemple "geoTargetConstants/1023191" pour New York).
  • ActivityRatingInfo : filtre par nombre d'étoiles ou note des visiteurs (value, un entier compris entre 1 et 5, 5 étant la meilleure note).
  • ActivityIdInfo : filtre par ID d'activité spécifique défini dans votre flux Things to do Center (value).

Règles de hiérarchie des dimensions

Lorsque vous créez une arborescence de groupes de fiches d'activités à découvrir, suivez ces règles :

  1. Nœud racine : chaque arborescence de groupe de fiches doit commencer par un seul nœud racine AdGroupCriterion dont le listing_group.type est SUBDIVISION (ou UNIT si vous souhaitez un seul nœud catch-all) et dont le case_value n'est pas défini.
  2. Subdivisions et unités : les branches intermédiaires doivent définir type sur SUBDIVISION, tandis que les nœuds feuilles doivent définir type sur UNIT. La définition de cpc_bid_micros sur les nœuds UNIT est facultative pour les campagnes Activités à découvrir, car les enchères sont gérées automatiquement par la stratégie MaximizeConversionValue de la campagne. Pour exclure une unité feuille de la diffusion, définissez negative = true sur son AdGroupCriterion.
  3. Nœuds de remplacement ("Tout le reste") : chaque subdivision doit être entièrement partitionnée. Tous les enfants immédiats d'une subdivision doivent utiliser le même sous-type ListingDimensionInfo, et un enfant doit être une instance vide de ce sous-type pour capturer tout l'inventaire restant.

L'arborescence suivante illustre une hiérarchie valide partitionnée par pays, ville et ID d'activité :

Root (SUBDIVISION)
 ├── ActivityCountryInfo: "geoTargetConstants/2840" (US, SUBDIVISION)
 │    ├── ActivityCityInfo: "geoTargetConstants/1023191" (New York, SUBDIVISION)
 │    │    ├── ActivityIdInfo: "activity_123" (UNIT, biddable)
 │    │    └── ActivityIdInfo: <empty> (UNIT, "Everything else in New York")
 │    └── ActivityCityInfo: <empty> (UNIT, "Everything else in US")
 └── ActivityCountryInfo: <empty> (UNIT, negative=true, excluded)

Exemple de code

L'exemple Python suivant crée un SUBDIVISION racine à l'aide d'un ID temporaire (-1) et le partitionne par ActivityCountryInfo en une unité ciblée pour les États-Unis ("geoTargetConstants/2840") et une unité de remplacement exclue pour tous les autres pays :

ad_group_service = client.get_service("AdGroupService")
ad_group_criterion_service = client.get_service("AdGroupCriterionService")
ad_group_resource_name = ad_group_service.ad_group_path(
    customer_id, ad_group_id
)
operations = []

# 1. Create the root SUBDIVISION node with temporary criterion ID -1.
root_op = client.get_type("AdGroupCriterionOperation")
root = root_op.create
root.resource_name = ad_group_criterion_service.ad_group_criterion_path(
    customer_id, ad_group_id, -1
)
root.status = client.enums.AdGroupCriterionStatusEnum.ENABLED
root.listing_group.type_ = client.enums.ListingGroupTypeEnum.SUBDIVISION
operations.append(root_op)

# 2. Create a child UNIT node targeting activities in the US.
us_op = client.get_type("AdGroupCriterionOperation")
us_unit = us_op.create
us_unit.ad_group = ad_group_resource_name
us_unit.status = client.enums.AdGroupCriterionStatusEnum.ENABLED
us_unit.listing_group.type_ = client.enums.ListingGroupTypeEnum.UNIT
us_unit.listing_group.parent_ad_group_criterion = root.resource_name
us_unit.listing_group.case_value.activity_country.value = "geoTargetConstants/2840"
operations.append(us_op)

# 3. Create the required fallback ("Everything else") UNIT node.
other_op = client.get_type("AdGroupCriterionOperation")
other_unit = other_op.create
other_unit.ad_group = ad_group_resource_name
other_unit.negative = True
other_unit.listing_group.type_ = client.enums.ListingGroupTypeEnum.UNIT
other_unit.listing_group.parent_ad_group_criterion = root.resource_name
client.copy_from(
    other_unit.listing_group.case_value.activity_country,
    client.get_type("ActivityCountryInfo"),
)
operations.append(other_op)

response = ad_group_criterion_service.mutate_ad_group_criteria(
    customer_id=customer_id, operations=operations
)

Étape suivante