Как создать группы предложений для Things to do

Группы предложений для рекламы Things to do создаются по той же иерархической структуре и по тому же принципу, что и группы предложений для рекламы отелей.

Чтобы разделить инвентарь Things to do, используйте специальные параметры действий, доступные в ListingDimensionInfo:

  • ActivityCountryInfo – фильтрация по целевой стране (value) с использованием названия ресурса Geo Target Constant (geoTargetConstants/{criterion_id}, например "geoTargetConstants/2840" для США).
  • ActivityStateInfo – фильтрация по штату или региону назначения (value) с использованием названия ресурса Geo Target Constant (geoTargetConstants/{criterion_id}).
  • ActivityCityInfo – фильтрация по городу назначения (value) с использованием названия ресурса Geo Target Constant (geoTargetConstants/{criterion_id}, например "geoTargetConstants/1023191" для Нью-Йорка).
  • ActivityRatingInfo – фильтрация по количеству звезд или средней оценке пользователей (value, целое число от 1 до 5, где 5 – наивысшая оценка).
  • ActivityIdInfo – фильтрация по идентификатору занятия, указанному в фиде Things to do Center (value).

Правила иерархии параметров

При создании дерева групп предложений Things to do соблюдайте следующие правила:

  1. Корневой узел. Каждое дерево групп предложений должно начинаться с одного корневого узла AdGroupCriterion, у которого listing_group.type имеет значение SUBDIVISION (или UNIT, если вы хотите использовать один узел, включающий все элементы), а case_value не задано.
  2. Подразделения и единицы. Для промежуточных ветвей в поле type должно быть указано значение SUBDIVISION, а для конечных узлов – typeUNIT. Задавать cpc_bid_micros в узлах UNIT для кампаний Things to do необязательно, поскольку ставки назначаются автоматически в соответствии со стратегией MaximizeConversionValue. Чтобы исключить дочерний блок из показа, задайте для его параметра AdGroupCriterion значение negative = true.
  3. Резервные узлы ("Все остальное"). Каждое подразделение должно быть полностью разделено. Все дочерние элементы подразделения должны использовать один и тот же подтип ListingDimensionInfo, а один из дочерних элементов должен быть пустым экземпляром этого подтипа, чтобы охватить весь оставшийся инвентарь.

Ниже показана допустимая иерархия, разделенная по странам, городам и идентификаторам действий.

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)

Пример кода

В следующем примере на Python создается корневой элемент SUBDIVISION с временным идентификатором (-1), который разделяется по ActivityCountryInfo на целевой элемент для США ("geoTargetConstants/2840") и исключенный резервный элемент для всех остальных стран:

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
)

Дальнейшие действия