יצירה של קבוצות של כרטיסי מוצר

סרטון: כדאי לצפות בהרצאה על קבוצות של כרטיסי מוצר מהסדנה של 2019

קבוצות של מודעות להזמנת חדרים תומכות בחלוקה של המלונות שלכם לקבוצות רבות של כרטיסי מלון, לפי כמה מאפיינים, כדי שתוכלו לשנות את הצעות המחיר לכל קבוצה בהתאם. בדוגמה הבאה, ברמה הראשונה המלונות מחולקים באופן כללי למלונות 5 כוכבים, למלונות 4 כוכבים ולרמות אחרות של מלונות. ברמה השנייה, המלונות ברמות אחרות של מלונות חולקו למלונות בארצות הברית, למלונות בבריטניה ולמלונות באזורים אחרים.

כל צומת בעץ הוא חלוקה משנה או יחידה, כפי שמוגדר על ידי ListingGroupType. חלוקה משנה מוסיפה רמה חדשה לעץ, ואילו יחידות הן עלים בעץ. כל חלוקה משנית חייבת תמיד להיות מחולקת לחלוטין, כך שהיא חייבת לכלול צומת שמייצג את אחר. בדוגמה הזו, הצומת ברמה הבסיסית והצומת Hotel Class: (Other) הם חלוקות משנה. מבנה העץ הזה עם חלוקות משנה ויחידות מאפשר להגדיר הצעות מחיר ברמת היחידה, וגם מבטיח שכל דף מלון ייכלל בצומת יחידה אחד בלבד בעץ.

צמתים הם אובייקטים מהקלאס ListingGroupInfo, שמכיל את השדה ListingGroupType שמציין אם הצמתים הם יחידה או חלוקת משנה. הגדרת ListingGroupInfo לערך listing_group של AdGroupCriterion תקשר אותו ל-AdGroup.

הגדרת הצעות מחיר לפי אחוז מהעלות לקליק

מותר להגדיר את percent_cpc_bid_micros של AdGroupCriterion רק בצמתי יחידה. ניסיון לעשות זאת בצמתים של חלוקה משנה נכשל עם הודעת שגיאה.

מאפייני כרטיסי מוצר

ל-ListingGroupInfo יש גם case_value, שהוא ListingDimensionInfo שמכיל אחד מכמה סוגי מאפיינים. הערך ListingGroupInfo מייצג את הערכים המשויכים למלונות שלכם, כמו מזהה המלון, המדינה שבה נמצא המלון או דירוג המלון. תיאור מלא של סוגי ListingDimensionInfo הזמינים זמין במסמכי העזרה.

לכל צאצא מיידי של חלוקה משנה חייב להיות case_value מאותו תת-סוג ListingDimensionInfo. רק לצומת הבסיס אין case_value.

חשוב לזכור שכל חלוקה משנית חייבת לכלול case_value "ריק" מהסוג הנכון, שמייצג את "כל שאר הערכים".

לפרטים נוספים, אפשר לעיין בקטע הקוד הבא שמוסיף את הרמה הראשונה של עץ קבוצת כרטיסי המוצר.

Java

private static String addLevel1Nodes(
    long customerId,
    long adGroupId,
    String rootResourceName,
    List<AdGroupCriterionOperation> operations,
    long percentCpcBidMicroAmount) {
  // Creates hotel class info and dimension info for 5-star hotels.
  ListingDimensionInfo fiveStarredDimensionInfo =
      ListingDimensionInfo.newBuilder()
          .setHotelClass(HotelClassInfo.newBuilder().setValue(5).build())
          .build();
  // Creates listing group info for 5-star hotels as a UNIT node.
  ListingGroupInfo fiveStarredUnit =
      ListingGroupInfo.newBuilder()
          .setType(ListingGroupType.UNIT)
          .setParentAdGroupCriterion(rootResourceName)
          .setCaseValue(fiveStarredDimensionInfo)
          .build();
  // Creates an ad group criterion for 5-star hotels.
  AdGroupCriterion fiveStarredAdGroupCriterion =
      createAdGroupCriterion(customerId, adGroupId, fiveStarredUnit, percentCpcBidMicroAmount);
  // Decrements the temp ID for the next ad group criterion.
  AdGroupCriterionOperation operation = generateCreateOperation(fiveStarredAdGroupCriterion);
  operations.add(operation);

  // You can also create more UNIT nodes for other hotel classes by copying the above code in
  // this method and modifying the value passed to HotelClassInfo() to the value you want.
  // For instance, passing 4 instead of 5 in the above code will create a UNIT node of 4-star
  // hotels instead.

  // Creates hotel class info and dimension info for other hotel classes by not specifying
  // any attributes on those object.
  ListingDimensionInfo otherHotelsDimensionInfo =
      ListingDimensionInfo.newBuilder()
          .setHotelClass(HotelClassInfo.newBuilder().build())
          .build();
  // Creates listing group info for other hotel classes as a SUBDIVISION node, which will be
  // used as a parent node for children nodes of the next level.
  ListingGroupInfo otherHotelsSubdivision =
      createListingGroupInfo(
          ListingGroupType.SUBDIVISION, rootResourceName, otherHotelsDimensionInfo);
  // Creates an ad group criterion for other hotel classes.
  AdGroupCriterion otherHotelsAdGroupCriterion =
      createAdGroupCriterion(
          customerId, adGroupId, otherHotelsSubdivision, percentCpcBidMicroAmount);
  operation = generateCreateOperation(otherHotelsAdGroupCriterion);
  operations.add(operation);

  return otherHotelsAdGroupCriterion.getResourceName();
}
      

C#‎

private string AddLevel1Nodes(long customerId, long adGroupId, string rootResourceName,
    List<AdGroupCriterionOperation> operations, long percentCpcBidMicroAmount)
{
    // Create listing dimension info for 5-star class hotels.
    ListingDimensionInfo fiveStarredListingDimensionInfo = new ListingDimensionInfo
    {
        HotelClass = new HotelClassInfo
        {
            Value = 5
        }
    };

    // Create a listing group info for 5-star hotels as a UNIT node.
    ListingGroupInfo fiveStarredUnit = CreateListingGroupInfo(ListingGroupType.Unit,
        rootResourceName, fiveStarredListingDimensionInfo);

    // Create an ad group criterion for 5-star hotels.
    AdGroupCriterion fiveStarredAdGroupCriterion = CreateAdGroupCriterion(customerId,
        adGroupId, fiveStarredUnit, percentCpcBidMicroAmount);

    // Create an operation and add it to the list of operations.
    operations.Add(new AdGroupCriterionOperation
    {
        Create = fiveStarredAdGroupCriterion
    });

    // Decrement the temp ID for the next ad group criterion.
    nextTempId--;

    // You can also create more UNIT nodes for other hotel classes by copying the above code
    // in this method and modifying the value passed to HotelClassInfo().
    // For instance, passing 4 instead of 5 in the above code will instead create a UNIT
    // node of 4-star hotels.

    // Create hotel class info and dimension info for other hotel classes by *not*
    // specifying any attributes on those object.
    ListingDimensionInfo otherHotelsListingDimensionInfo = new ListingDimensionInfo
    {
        HotelClass = new HotelClassInfo()
    };

    // Create listing group info for other hotel classes as a SUBDIVISION node, which will
    // be used as a parent node for children nodes of the next level.
    ListingGroupInfo otherHotelsSubdivisionListingGroupInfo = CreateListingGroupInfo
        (ListingGroupType.Subdivision, rootResourceName, otherHotelsListingDimensionInfo);

    // Create an ad group criterion for other hotel classes.
    AdGroupCriterion otherHotelsAdGroupCriterion = CreateAdGroupCriterion(customerId,
        adGroupId, otherHotelsSubdivisionListingGroupInfo, percentCpcBidMicroAmount);

    // Create an operation and add it to the list of operations.
    operations.Add(new AdGroupCriterionOperation
    {
        Create = otherHotelsAdGroupCriterion
    });

    // Decrement the temp ID for the next ad group criterion.
    nextTempId--;

    return otherHotelsAdGroupCriterion.ResourceName;
}
      

PHP

private static function addLevel1Nodes(
    int $customerId,
    int $adGroupId,
    string $rootResourceName,
    array &$operations,
    int $percentCpcBidMicroAmount
) {
    // Creates hotel class info and dimension info for 5-star hotels.
    $fiveStarredDimensionInfo = new ListingDimensionInfo([
        'hotel_class' => new HotelClassInfo(['value' => 5])
    ]);
    // Creates listing group info for 5-star hotels as a UNIT node.
    $fiveStarredUnit = self::createListingGroupInfo(
        ListingGroupType::UNIT,
        $rootResourceName,
        $fiveStarredDimensionInfo
    );
    // Creates an ad group criterion for 5-star hotels.
    $fiveStarredAdGroupCriterion = self::createAdGroupCriterion(
        $customerId,
        $adGroupId,
        $fiveStarredUnit,
        $percentCpcBidMicroAmount
    );
    // Decrements the temp ID for the next ad group criterion.
    self::$nextTempId--;
    $operation = self::generateCreateOperation($fiveStarredAdGroupCriterion);
    $operations[] = $operation;

    // You can also create more UNIT nodes for other hotel classes by copying the above code in
    // this method and modifying the value passed to HotelClassInfo() to the value you want.
    // For instance, passing 4 instead of 5 in the above code will create a UNIT node of 4-star
    // hotels instead.

    // Creates hotel class info and dimension info for other hotel classes by *not* specifying
    // any attributes on those object.
    $othersHotelsDimensionInfo = new ListingDimensionInfo([
        'hotel_class' => new HotelClassInfo()
    ]);
    // Creates listing group info for other hotel classes as a SUBDIVISION node, which will be
    // used as a parent node for children nodes of the next level.
    $otherHotelsSubDivision = self::createListingGroupInfo(
        ListingGroupType::SUBDIVISION,
        $rootResourceName,
        $othersHotelsDimensionInfo
    );
    // Creates an ad group criterion for other hotel classes.
    $otherHotelsAdGroupCriterion = self::createAdGroupCriterion(
        $customerId,
        $adGroupId,
        $otherHotelsSubDivision,
        $percentCpcBidMicroAmount
    );
    $operation = self::generateCreateOperation($otherHotelsAdGroupCriterion);
    $operations[] = $operation;

    self::$nextTempId--;
    return $otherHotelsAdGroupCriterion->getResourceName();
}
      

Python

def add_level1_nodes(
    client,
    customer_id,
    ad_group_id,
    root_resource_name,
    operations,
    percent_cpc_bid_micro_amount,
):
    """Creates child nodes on level 1, partitioned by the hotel class info.

    Args:
        client: The Google Ads API client.
        customer_id: The Google Ads customer ID.
        ad_group_id: The ad group ID to which the hotel listing group will be
            added.
        root_resource_name: The string resource name of the listing group's root
            node.
        operations: A list of AdGroupCriterionOperations.
        percent_cpc_bid_micro_amount: The CPC bid micro amount to be set on
            created ad group criteria.

    Returns:
        The string resource name of the "other hotel classes" node, which serves
        as the parent node for the next level of the listing tree.
    """
    global next_temp_id

    # Create listing dimension info for 5-star class hotels.
    five_starred_listing_dimension_info = client.get_type(
        "ListingDimensionInfo"
    )
    five_starred_listing_dimension_info.hotel_class.value = 5

    # Create a listing group info for 5-star hotels as a UNIT node.
    five_starred_unit = create_listing_group_info(
        client,
        client.enums.ListingGroupTypeEnum.UNIT,
        root_resource_name,
        five_starred_listing_dimension_info,
    )

    # Create an ad group criterion for 5-star hotels.
    five_starred_ad_group_criterion = create_ad_group_criterion(
        client,
        customer_id,
        ad_group_id,
        five_starred_unit,
        percent_cpc_bid_micro_amount,
    )

    # Create an operation and add it to the list of operations.
    five_starred_ad_group_criterion_operation = client.get_type(
        "AdGroupCriterionOperation"
    )
    client.copy_from(
        five_starred_ad_group_criterion_operation.create,
        five_starred_ad_group_criterion,
    )
    operations.append(five_starred_ad_group_criterion_operation)

    # Decrement the temp ID for the next ad group criterion.
    next_temp_id -= 1

    # You can also create more UNIT nodes for other hotel classes by copying the
    # above code in this method and modifying the hotel class value.
    # For instance, passing 4 instead of 5 in the above code will instead create
    # a UNIT node of 4-star hotels.

    # Create hotel class info and dimension info without any specifying
    # attributes. This node will then represent hotel classes other than those
    # already covered by UNIT nodes at this level.
    other_hotels_listing_dimension_info = client.get_type(
        "ListingDimensionInfo"
    )
    # Set "hotel_class" as the oneof field on the ListingDimensionInfo object
    # without specifying the optional hotel_class field.
    client.copy_from(
        other_hotels_listing_dimension_info.hotel_class,
        client.get_type("HotelClassInfo"),
    )

    # Create listing group info for other hotel classes as a SUBDIVISION node,
    # which will be used as a parent node for children nodes of the next level.
    other_hotels_subdivision_listing_group_info = create_listing_group_info(
        client,
        client.enums.ListingGroupTypeEnum.SUBDIVISION,
        root_resource_name,
        other_hotels_listing_dimension_info,
    )

    # Create an ad group criterion for other hotel classes.
    other_hotels_ad_group_criterion = create_ad_group_criterion(
        client,
        customer_id,
        ad_group_id,
        other_hotels_subdivision_listing_group_info,
        percent_cpc_bid_micro_amount,
    )

    # Create an operation and add it to the list of operations.
    other_hotels_ad_group_criterion_operation = client.get_type(
        "AdGroupCriterionOperation"
    )
    client.copy_from(
        other_hotels_ad_group_criterion_operation.create,
        other_hotels_ad_group_criterion,
    )
    operations.append(other_hotels_ad_group_criterion_operation)

    # Decrement the temp ID for the next ad group criterion.
    next_temp_id -= 1

    return other_hotels_ad_group_criterion.resource_name
      

Ruby

def add_level1_nodes(
  client,
  customer_id,
  ad_group_id,
  root_resource_name,
  operations,
  percent_cpc_bid_micro_amount)
  # Creates hotel class info and dimension info for 5-star hotels.
  five_starred_dimension_info = client.resource.listing_dimension_info do |d|
    d.hotel_class = client.resource.hotel_class_info do |c|
      c.value = 5
    end
  end

  # Creates listing group info for 5-star hotels as a UNIT node.
  five_starred_unit = create_listing_group_info(
    client,
    :UNIT,
    root_resource_name,
    five_starred_dimension_info,
  )

  # Creates an ad group criterion for 5-star hotels.
  five_starred_ad_group_criterion = create_ad_group_criterion(
    client,
    customer_id,
    ad_group_id,
    five_starred_unit,
    percent_cpc_bid_micro_amount,
  )

  operations << generate_create_operation(
    client,
    five_starred_ad_group_criterion,
  )

  # You can also create more UNIT nodes for other hotel classes by copying the
  # above code in this method and modifying the value passed to HotelClassInfo()
  # to the value you want.
  # For instance, passing 4 instead of 5 in the above code will create a UNIT
  # node of 4-star hotels instead.

  # Creates hotel class info and dimension info for other hotel classes
  # by *not* specifying any attributes on those object.
  other_hotels_dimention_info = client.resource.listing_dimension_info do |d|
    d.hotel_class = client.resource.hotel_class_info
  end

  # Creates listing group info for other hotel classes as a SUBDIVISION node,
  # which will be used as a parent node for children nodes of the next level.
  other_hotels_subdivision = create_listing_group_info(
    client,
    :SUBDIVISION,
    root_resource_name,
    other_hotels_dimention_info,
  )

  # Creates an ad group criterion for other hotel classes.
  other_hotels_ad_group_criterion = create_ad_group_criterion(
    client,
    customer_id,
    ad_group_id,
    other_hotels_subdivision,
    percent_cpc_bid_micro_amount,
  )

  operations << generate_create_operation(
    client,
    other_hotels_ad_group_criterion,
  )

  other_hotels_ad_group_criterion.resource_name
end
      

Perl

sub add_level_1_nodes {
  my ($customer_id, $ad_group_id, $root_resource_name, $operations,
    $percent_cpc_bid_micro_amount)
    = @_;

  # Create hotel class info and dimension info for 5-star hotels.
  my $five_starred_dimension_info =
    Google::Ads::GoogleAds::V19::Common::ListingDimensionInfo->new({
      hotelClass => Google::Ads::GoogleAds::V19::Common::HotelClassInfo->new({
          value => 5
        })});

  # Create listing group info for 5-star hotels as a UNIT node.
  my $five_starred_unit = create_listing_group_info(UNIT, $root_resource_name,
    $five_starred_dimension_info);

  # Create an ad group criterion for 5-star hotels.
  my $five_starred_ad_group_criterion =
    create_ad_group_criterion($customer_id, $ad_group_id, $five_starred_unit,
    $percent_cpc_bid_micro_amount);

  my $operation = generate_create_operation($five_starred_ad_group_criterion);
  push @$operations, $operation;

  # You can also create more UNIT nodes for other hotel classes by copying the
  # above code in this method and modifying the value passed to HotelClassInfo
  # to the value you want. For instance, passing 4 instead of 5 in the above code
  #  will create a UNIT node of 4-star hotels instead.

  # Create hotel class info and dimension info for other hotel classes by *not*
  # specifying any attributes on those object.
  my $others_hotels_dimension_info =
    Google::Ads::GoogleAds::V19::Common::ListingDimensionInfo->new({
      hotelClass => Google::Ads::GoogleAds::V19::Common::HotelClassInfo->new()}
    );

  # Create listing group info for other hotel classes as a SUBDIVISION node, which
  # will be used as a parent node for children nodes of the next level.
  my $other_hotels_subdivision =
    create_listing_group_info(SUBDIVISION, $root_resource_name,
    $others_hotels_dimension_info);

  # Create an ad group criterion for other hotel classes.
  my $other_hotels_ad_group_criterion =
    create_ad_group_criterion($customer_id, $ad_group_id,
    $other_hotels_subdivision, $percent_cpc_bid_micro_amount);

  $operation = generate_create_operation($other_hotels_ad_group_criterion);
  push @$operations, $operation;

  return $other_hotels_ad_group_criterion->{resourceName};
}
      

המאפיינים הזמינים של ListingDimensionInfo

סוגי ה-ListingDimensionInfo הבאים זמינים למודעות להזמנת חדרים:

תעודות מזהות זמניות

המערכת לא מקצה מזהי קריטריונים לקבוצות של מודעות עד שהשרת מעבד את בקשת השינוי (mutate) שיוצרת אותם. עם זאת, ה-ListingGroupInfo לא תקף עד שהוא הושלם, ולכן בכל פעם שיוצרים חלוקת משנה צריך ליצור גם לפחות אחד מהצאצאים שלה באותה פעולה.

כדי שתוכלו להגדיר את parent_ad_group_criterion של ListingGroupInfo לצמתים הצאצאים, תוכלו להשתמש במזהי קריטריונים זמניים. אלה מזהים ייחודיים מקומיים (ולא מזהים ייחודיים גלובליים) שחלים רק בהקשר של בקשת שינוי אחת. אפשר להשתמש בכל מספר שלם שלילי (לדוגמה, -1) בתור מזהה זמני.

כשהבקשה עוברת עיבוד, לכל AdGroupCriterion מוקצה מזהה גלובלי חיובי כרגיל.