إنشاء تسويات موسمية

التسويات الموسمية هي أداة متقدّمة يمكن استخدامها لإعلام ميزة "عروض الأسعار الذكية" بالتغيُّرات المتوقّعة في معدّلات الإحالات الناجحة للفعاليات المستقبلية القادمة. للحصول على مزيد من التفاصيل عن آلية عمل التسويات الموسمية، يُرجى الرجوع إلى صفحة مساعدة التسويات الموسمية.

يمكنك إنشاء تسوية موسمية آليًا باستخدام BiddingSeasonalityAdjustments.

النطاق

تحتوي BiddingSeasonalityAdjustments على scope مطلوب يمكن ضبطه على القيم التالية: يتم ضبط خيارات الضبط الإضافية الخاصة بالنطاق حسب النطاق المستخدَم.

  • CAMPAIGN - يتم تطبيق التسوية على حملات معيّنة. اضبط الحقل campaigns على قائمة بأسماء موارد الحملات التي سيتم تطبيق هذا التعديل عليها.
    • الحدّ الأقصى لعدد الحملات لكلّ BiddingSeasonalityAdjustment هو 2,000 حملة.
  • CHANNEL - يتم تطبيق التعديل على الحملات التي تنتمي إلى أنواع قنوات معيّنة. اضبط الحقل advertising_channel_types على قائمة AdvertisingChannelTypes التي ستنطبق عليها هذه التسوية.

الأجهزة

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

التواريخ والأوقات ومعدّل التحويل

بالإضافة إلى النطاق والأجهزة الاختيارية، تحتوي كل تسوية موسمية على start_date_time وend_date_time و conversion_rate_modifier. يحدِّد التاريخ والأوقات الفاصل الزمني المستقبلي الذي ينطبق عليه التعديل، ويمثّل المُعدِّل المُضاعِف المتوقّع لمعدّل الإحالات الناجحة الذي سيتم تطبيقه. يتم عرض التواريخ الأوقات حسب المنطقة الزمنية لحسابك.

مثال

يوضّح المثال التالي كيفية إنشاء تسوية موسمية بنطاق CHANNEL. توضّح الأقسام التي تمّت إضافة تعليقات توضيحية إليها كيفية تحديد الحملات إذا كنت تريد بدلاً من ذلك ضبط نطاق CAMPAIGN.

BiddingSeasonalityAdjustment seasonalityAdjustment =
    BiddingSeasonalityAdjustment.newBuilder()
        // A unique name is required for every seasonality adjustment.
        .setName("Seasonality adjustment #" + getPrintableDateTime())
        // The CHANNEL scope applies the conversionRateModifier to all campaigns of specific
        // advertising channel types. In this example, the conversionRateModifier will only
        // apply to Search campaigns. Use the CAMPAIGN scope to instead limit the scope to
        // specific campaigns.
        .setScope(SeasonalityEventScope.CHANNEL)
        .addAdvertisingChannelTypes(AdvertisingChannelType.SEARCH)
        // If setting scope CAMPAIGN, add individual campaign resource name(s) according to
        // the commented out line below.
        // .addCampaigns("INSERT_CAMPAIGN_RESOURCE_NAME_HERE")
        .setStartDateTime(startDateTime)
        .setEndDateTime(endDateTime)
        // The conversionRateModifier is the expected future conversion rate change. When this
        // field is unset or set to 1.0, no adjustment will be applied to traffic. The allowed
        // range is 0.1 to 10.0.
        .setConversionRateModifier(conversionRateModifier)
        .build();

BiddingSeasonalityAdjustmentOperation operation =
    BiddingSeasonalityAdjustmentOperation.newBuilder()
        .setCreate(seasonalityAdjustment)
        .build();

MutateBiddingSeasonalityAdjustmentsResponse response =
    seasonalityAdjustmentServiceClient.mutateBiddingSeasonalityAdjustments(
        customerId.toString(), ImmutableList.of(operation));
System.out.printf(
    "Added seasonality adjustment with resource name: %s%n",
    response.getResults(0).getResourceName());
      
BiddingSeasonalityAdjustment seasonalityAdjustment =
    new BiddingSeasonalityAdjustment()
    {
        // A unique name is required for every seasonality adjustment.
        Name = "Seasonality adjustment #" + ExampleUtilities.GetRandomString(),
        // The CHANNEL scope applies the conversionRateModifier to all campaigns of
        // specific advertising channel types. In this example, the
        // conversionRateModifier will only apply to Search campaigns. Use the
        // CAMPAIGN scope to instead limit the scope to specific campaigns.
        Scope = SeasonalityEventScope.Channel,
        AdvertisingChannelTypes = { AdvertisingChannelType.Search },
        // If setting scope CAMPAIGN, add individual campaign resource name(s)
        // according to the commented out line below.
        // Campaigns = { "INSERT_CAMPAIGN_RESOURCE_NAME_HERE" },
        // The date range should be less than 14 days.
        StartDateTime = startDateTime,
        EndDateTime = endDateTime,
        // The conversionRateModifier is the expected future conversion rate change.
        // When this field is unset or set to 1.0, no adjustment will be applied to
        // traffic. The allowed range is 0.1 to 10.0.
        ConversionRateModifier = conversionRateModifier
    };

BiddingSeasonalityAdjustmentOperation operation =
    new BiddingSeasonalityAdjustmentOperation()
    {
        Create = seasonalityAdjustment
    };

try
{
    MutateBiddingSeasonalityAdjustmentsResponse response =
        biddingSeasonalityAdjustmentService.MutateBiddingSeasonalityAdjustments(
            customerId.ToString(), new[] { operation });
    Console.WriteLine($"Added seasonality adjustment with resource name: " +
        $"{response.Results[0].ResourceName}");
}
catch (GoogleAdsException e)
{
    Console.WriteLine("Failure:");
    Console.WriteLine($"Message: {e.Message}");
    Console.WriteLine($"Failure: {e.Failure}");
    Console.WriteLine($"Request ID: {e.RequestId}");
    throw;
}
      
// Creates a bidding seasonality adjustment.
$seasonalityAdjustment = new BiddingSeasonalityAdjustment([
    // A unique name is required for every seasonality adjustment.
    'name' => 'Seasonality adjustment #' . Helper::getPrintableDatetime(),
    // The CHANNEL scope applies the conversionRateModifier to all campaigns of specific
    // advertising channel types. In this example, the conversionRateModifier will only
    // apply to Search campaigns. Use the CAMPAIGN scope to instead limit the scope to
    // specific campaigns.
    'scope' => SeasonalityEventScope::CHANNEL,
    'advertising_channel_types' => [AdvertisingChannelType::SEARCH],
    // If setting scope CAMPAIGN, add individual campaign resource name(s) according to
    // the commented out line below.
    // 'campaigns' => ['INSERT_CAMPAIGN_RESOURCE_NAME_HERE'],
    'start_date_time' => $startDateTime,
    'end_date_time' => $endDateTime,
    // The conversionRateModifier is the expected future conversion rate change. When this
    // field is unset or set to 1.0, no adjustment will be applied to traffic. The allowed
    // range is 0.1 to 10.0.
    'conversion_rate_modifier' => $conversionRateModifier
]);

// Creates a bidding seasonality adjustment operation.
$biddingSeasonalityAdjustmentOperation = new BiddingSeasonalityAdjustmentOperation();
$biddingSeasonalityAdjustmentOperation->setCreate($seasonalityAdjustment);

// Submits the bidding seasonality adjustment operation to add the bidding seasonality
// adjustment.
$biddingSeasonalityAdjustmentServiceClient =
    $googleAdsClient->getBiddingSeasonalityAdjustmentServiceClient();
$response = $biddingSeasonalityAdjustmentServiceClient->mutateBiddingSeasonalityAdjustments(
    MutateBiddingSeasonalityAdjustmentsRequest::build(
        $customerId,
        [$biddingSeasonalityAdjustmentOperation]
    )
);

printf(
    "Added seasonality adjustment with resource name: '%s'.%s",
    $response->getResults()[0]->getResourceName(),
    PHP_EOL
);
      
bidding_seasonality_adjustment_service = client.get_service(
    "BiddingSeasonalityAdjustmentService"
)
operation = client.get_type("BiddingSeasonalityAdjustmentOperation")
bidding_seasonality_adjustment = operation.create
# A unique name is required for every seasonality adjustment.
bidding_seasonality_adjustment.name = f"Seasonality adjustment #{uuid4()}"
# The CHANNEL scope applies the conversion_rate_modifier to all campaigns of
# specific advertising channel types. In this example, the
# conversion_rate_modifier will only apply to Search campaigns. Use the
# CAMPAIGN scope to instead limit the scope to specific campaigns.
bidding_seasonality_adjustment.scope = (
    client.enums.SeasonalityEventScopeEnum.CHANNEL
)
bidding_seasonality_adjustment.advertising_channel_types.append(
    client.enums.AdvertisingChannelTypeEnum.SEARCH
)
# If setting scope CAMPAIGN, add individual campaign resource name(s)
# according to the commented out line below.
#
# bidding_seasonality_adjustment.campaigns.append(
#     "INSERT_CAMPAIGN_RESOURCE_NAME_HERE"
# )

bidding_seasonality_adjustment.start_date_time = start_date_time
bidding_seasonality_adjustment.end_date_time = end_date_time
# The conversion_rate_modifier is the expected future conversion rate
# change. When this field is unset or set to 1.0, no adjustment will be
# applied to traffic. The allowed range is 0.1 to 10.0.
bidding_seasonality_adjustment.conversion_rate_modifier = (
    conversion_rate_modifier
)

response = bidding_seasonality_adjustment_service.mutate_bidding_seasonality_adjustments(
    customer_id=customer_id, operations=[operation]
)

resource_name = response.results[0].resource_name

print(f"Added seasonality adjustment with resource name: '{resource_name}'")
      
client = Google::Ads::GoogleAds::GoogleAdsClient.new

operation = client.operation.create_resource.bidding_seasonality_adjustment do |bsa|
  # A unique name is required for every seasonality adjustment.
  bsa.name = "Seasonality Adjustment #{(Time.new.to_f * 1000).to_i}"

  # The CHANNEL scope applies the conversion_rate_modifier to all campaigns
  # of specific advertising channel types. In this example, the
  # conversion_rate_modifier will only apply to Search campaigns. Use the
  # CAMPAIGN scope to instead limit the scope to specific campaigns.
  bsa.scope = :CHANNEL
  bsa.advertising_channel_types << :SEARCH

  # If setting scope CAMPAIGN, add individual campaign resource name(s)
  # according to the commented out line below.
  #
  # bsa.campaigns << "INSERT_CAMPAIGN_RESOURCE_NAME_HERE"

  bsa.start_date_time = start_date_time
  bsa.end_date_time = end_date_time

  # The conversion_rate_modifier is the expected future conversion rate
  # change. When this field is unset or set to 1.0, no adjustment will be
  # applied to traffic. The allowed range is 0.1 to 10.0.
  bsa.conversion_rate_modifier = conversion_rate_modifier
end

response = client.service.bidding_seasonality_adjustment.mutate_bidding_seasonality_adjustments(
  customer_id: customer_id,
  operations: [operation],
)

puts "Added seasonality adjustment with resource name #{response.results.first.resource_name}"
      
my $seasonality_adjustment =
  Google::Ads::GoogleAds::V19::Resources::BiddingSeasonalityAdjustment->new({
    # A unique name is required for every seasonality adjustment.
    name => "Seasonality adjustment #" . uniqid(),
    # The CHANNEL scope applies the conversion_rate_modifier to all campaigns
    # of specific advertising channel types. In this example, the conversion_rate_modifier
    # will only apply to Search campaigns. Use the CAMPAIGN scope to instead
    # limit the scope to specific campaigns.
    scope                   => CHANNEL,
    advertisingChannelTypes => [SEARCH],
    # If setting scope CAMPAIGN, add individual campaign resource name(s)
    # according to the commented out line below.
    # campaigns     => ["INSERT_CAMPAIGN_RESOURCE_NAME_HERE"],
    startDateTime => $start_date_time,
    endDateTime   => $end_date_time,
    # The conversion_rate_modifier is the expected future conversion rate change.
    # When this field is unset or set to 1.0, no adjustment will be applied to traffic.
    # The allowed range is 0.1 to 10.0.
    conversionRateModifier => $conversion_rate_modifier
  });

my $operation =
  Google::Ads::GoogleAds::V19::Services::BiddingSeasonalityAdjustmentService::BiddingSeasonalityAdjustmentOperation
  ->new({
    create => $seasonality_adjustment
  });

my $response = $api_client->BiddingSeasonalityAdjustmentService()->mutate({
    customerId => $customer_id,
    operations => [$operation]});

printf "Added seasonality adjustment with resource name: '%s'.\n",
  $response->{results}[0]{resourceName};