Google, kampanya oluşturmak için kullanabileceğiniz çeşitli ürünler ve kitleler sunar ancak nasıl bir plan oluşturacağınızı bilmiyor olabilirsiniz. Bu konuda yardımcı olması için ReachPlanService, eğri oluşturmak üzere kullanabileceğiniz keşif yöntemleri sunar.
Kitle hedefleme
Medya planının ilk bileşeni, kitle hedeflemedir. Kitle hedefleme, aşağıdaki hedef ölçütlerini içerebilir:
- Kitleler: Yakın ilgi alanı, pazardaki ve kullanıcı listesi kitlelerini kullanarak hedefleyin
targeting.audience_targeting(AudienceTargeting). Desteklenen sorgu ölçütleri kullanılarakReachPlanService.ListPlannableUserInterestsveReachPlanService.ListPlannableUserLists. - Yaş aralıkları: Hedef yaş gruplarını
ReachPlanAgeRangeenum'ını kullanarak belirtin. - Cinsiyetler:
GenderInfoölçütünü kullanarak belirli cinsiyetleri hedefleyin. - Cihazlar:
DeviceInfoölçütünü kullanarak belirli cihazları hedefleyin. - Konumlar: Desteklenen konum kimliklerini bulmak için
ListPlannableLocationskullanın. - Ağlar:
ListPlannableProductskullanarak bir konum ve ürün için desteklenen ağları görüntüleyin. Bu ağlar ürüne ve bölgeye göre değişebilir. - Ebeveynlik durumu:
ParentalStatusInfoölçütünü kullanarak belirli ebeveynlik durumlarını hedefleyin (v25ve sonraki sürümlerde kullanılabilir). - YouTube Select kanal listeleri: YouTube'da seçilmiş içeriklerdeki ilgili kitlelere ulaşmak için erişim planlarınızda
YouTubeSelectSettingskullanarak belirli kanal listelerini hedefleyin.
Ürün karışımı
Hedefleme bilgilerine ek olarak, bir eğri oluşturmak için ürün karması belirtmeniz gerekir.
ListPlannableProducts yöntemi, ReachPlanService üzerinde belirli bir yer kodu için kullanılabilen en son biçimleri gösterir. Bunlar, ProductMetadata içinde aşağıdaki alanlarla gösterilir:
plannable_product_codeplannable_product_nameplannable_product_description(v24ve sonraki sürümlerde kullanılabilir)plannable_product_core_attributes(v24ve sonraki sürümlerde kullanılabilir): Aşağıdakiler de dahil olmak üzere bir ürünün özelliklerini tanımlamak için kullanılan bir özellikler koleksiyonu (ProductCoreAttributes):plannable_targeting: Ürün için izin verilen hedefleme ayarları (ör. yaş aralıkları, cinsiyetler, cihazlar, ağlar vev25ile sonraki sürümlerde ebeveynlik durumları).
Bu değerlerin düzenli olarak değiştiğini unutmayın. Bu nedenle, yanıtları çevrimdışı olarak saklamak yerine kullanıcılarınıza canlı sonuçlar sunmanız en iyisidir.
Aşağıda, bazı hedef ölçütler için ürün karmasının nasıl alınacağına dair bir kod örneği verilmiştir:
Java
private void showPlannableProducts( ReachPlanServiceClient reachPlanServiceClient, String locationId) { ListPlannableProductsRequest request = ListPlannableProductsRequest.newBuilder().setPlannableLocationId(locationId).build(); ListPlannableProductsResponse response = reachPlanServiceClient.listPlannableProducts(request); System.out.printf("Plannable Products for location %s:%n", locationId); for (ProductMetadata product : response.getProductMetadataList()) { System.out.printf("%s:%n", product.getPlannableProductCode()); System.out.println("Age Ranges:"); for (ReachPlanAgeRange ageRange : product.getPlannableTargeting().getAgeRangesList()) { System.out.printf("\t- %s%n", ageRange); } System.out.println("Genders:"); for (GenderInfo gender : product.getPlannableTargeting().getGendersList()) { System.out.printf("\t- %s%n", gender.getType()); } System.out.println("Devices:"); for (DeviceInfo device : product.getPlannableTargeting().getDevicesList()) { System.out.printf("\t- %s%n", device.getType()); } } }
C#
public void ShowPlannableProducts( ReachPlanServiceClient reachPlanService, string locationId) { ListPlannableProductsRequest request = new ListPlannableProductsRequest { PlannableLocationId = locationId }; ListPlannableProductsResponse response = reachPlanService.ListPlannableProducts( request); Console.WriteLine($"Plannable Products for location {locationId}:"); foreach (ProductMetadata product in response.ProductMetadata) { Console.WriteLine($"{product.PlannableProductCode}:"); Console.WriteLine("Age Ranges:"); foreach (ReachPlanAgeRange ageRange in product.PlannableTargeting.AgeRanges) { Console.WriteLine($"\t- {ageRange}"); } Console.WriteLine("Genders:"); foreach (GenderInfo gender in product.PlannableTargeting.Genders) { Console.WriteLine($"\t- {gender.Type}"); } Console.WriteLine("Devices:"); foreach (DeviceInfo device in product.PlannableTargeting.Devices) { Console.WriteLine($"\t- {device.Type}"); } } }
PHP
private static function showPlannableProducts(GoogleAdsClient $googleAdsClient) { $response = $googleAdsClient->getReachPlanServiceClient()->listPlannableProducts( ListPlannableProductsRequest::build(self::LOCATION_ID) ); print 'Plannable Products for Location ID ' . self::LOCATION_ID . ':' . PHP_EOL; foreach ($response->getProductMetadata() as $product) { /** @var ProductMetadata $product */ print $product->getPlannableProductCode() . ':' . PHP_EOL; print 'Age Ranges:' . PHP_EOL; foreach ($product->getPlannableTargeting()->getAgeRanges() as $ageRange) { /** @var ReachPlanAgeRange $ageRange */ printf("\t- %s%s", ReachPlanAgeRange::name($ageRange), PHP_EOL); } print 'Genders:' . PHP_EOL; foreach ($product->getPlannableTargeting()->getGenders() as $gender) { /** @var GenderInfo $gender */ printf("\t- %s%s", GenderType::name($gender->getType()), PHP_EOL); } print 'Devices:' . PHP_EOL; foreach ($product->getPlannableTargeting()->getDevices() as $device) { /** @var DeviceInfo $device */ printf("\t- %s%s", Device::name($device->getType()), PHP_EOL); } } }
Python
def show_plannable_products(client: GoogleAdsClient, location_id: str): """Lists plannable products for a given location. Args: client: an initialized GoogleAdsClient instance. location_id: The location ID to plan for. """ reach_plan_service: ReachPlanServiceClient = client.get_service( "ReachPlanService" ) response: ListPlannableProductsResponse = ( reach_plan_service.list_plannable_products( plannable_location_id=location_id ) ) print(f"Plannable Products for Location ID {location_id}") product_metadata: ProductMetadata for product_metadata in response.product_metadata: print( f"{product_metadata.plannable_product_code} : " f"{product_metadata.plannable_product_name}" ) print("Age Ranges:") age_range: ReachPlanAgeRangeEnum for age_range in product_metadata.plannable_targeting.age_ranges: print(f"\t- {age_range.name}") print("Genders:") gender: GenderInfo for gender in product_metadata.plannable_targeting.genders: print(f"\t- {gender.type_.name}") print("Devices:") device: DeviceInfo for device in product_metadata.plannable_targeting.devices: print(f"\t- {device.type_.name}")
Ruby
def show_plannable_products(reach_plan_service) response = reach_plan_service.list_plannable_products( plannable_location_id: LOCATION_ID, ) puts "Plannable Products for Location ID #{LOCATION_ID}:" response.product_metadata.each do |product| puts "#{product.plannable_product_code}:" puts "Age Ranges:" product.plannable_targeting.age_ranges.each do |age_range| puts "\t- #{age_range}" end puts "Genders:" product.plannable_targeting.genders.each do |gender| puts "\t- #{gender.type}" end puts "Devices:" product.plannable_targeting.devices.each do |device| puts "\t- #{device.type}" end end end
Perl
sub show_plannable_products { my ($reach_plan_service, $location_id) = @_; my $response = $reach_plan_service->list_plannable_products({ plannableLocationId => $location_id }); printf "Plannable Products for location %d:\n", $location_id; foreach my $product (@{$response->{productMetadata}}) { printf "%s : '%s'\n", $product->{plannableProductCode}, $product->{plannableProductName}; print "Age Ranges:\n"; foreach my $age_range (@{$product->{plannableTargeting}{ageRanges}}) { printf "\t- %s\n", $age_range; } print "Genders:\n"; foreach my $gender (@{$product->{plannableTargeting}{genders}}) { printf "\t- %s\n", $gender->{type}; } print "Devices:\n"; foreach my $device (@{$product->{plannableTargeting}{devices}}) { printf "\t- %s\n", $device->{type}; } } }
curl
Eğri oluşturmak için her ürüne bütçe atamanız gerekir:
Java
private void forecastManualMix( ReachPlanServiceClient reachPlanServiceClient, long customerId, String locationId, String currencyCode, long budgetMicros) { List<PlannedProduct> productMix = new ArrayList<>(); // Set up a ratio to split the budget between two products. double trueviewAllocation = 0.15; double bumperAllocation = 1 - trueviewAllocation; // See listPlannableProducts on ReachPlanService to retrieve a list // of valid PlannableProductCode's for a given location: // https://developers.google.com/google-ads/api/reference/rpc/latest/ReachPlanService productMix.add( PlannedProduct.newBuilder() .setPlannableProductCode("TRUEVIEW_IN_STREAM") .setBudgetMicros((long) (budgetMicros * bumperAllocation)) .build()); productMix.add( PlannedProduct.newBuilder() .setPlannableProductCode("BUMPER") .setBudgetMicros((long) (budgetMicros * bumperAllocation)) .build()); GenerateReachForecastRequest request = buildReachRequest(customerId, productMix, locationId, currencyCode); getReachCurve(reachPlanServiceClient, request); }
C#
public void ForecastMix(ReachPlanServiceClient reachPlanService, string customerId, string locationId, string currencyCode, long budgetMicros) { List<PlannedProduct> productMix = new List<PlannedProduct>(); // Set up a ratio to split the budget between two products. double trueviewAllocation = 0.15; double bumperAllocation = 1 - trueviewAllocation; // See listPlannableProducts on ReachPlanService to retrieve a list // of valid PlannableProductCode's for a given location: // https://developers.google.com/google-ads/api/reference/rpc/latest/ReachPlanService productMix.Add(new PlannedProduct { PlannableProductCode = "TRUEVIEW_IN_STREAM", BudgetMicros = Convert.ToInt64(budgetMicros * trueviewAllocation) }); productMix.Add(new PlannedProduct { PlannableProductCode = "BUMPER", BudgetMicros = Convert.ToInt64(budgetMicros * bumperAllocation) }); GenerateReachForecastRequest request = BuildReachRequest(customerId, productMix, locationId, currencyCode); GetReachCurve(reachPlanService, request); }
PHP
private static function forecastManualMix(GoogleAdsClient $googleAdsClient, int $customerId) { // Set up a ratio to split the budget between two products. $trueviewAllocation = floatval(0.15); $bumperAllocation = floatval(1 - $trueviewAllocation); // See listPlannableProducts on ReachPlanService to retrieve a list // of valid PlannableProductCode's for a given location: // https://developers.google.com/google-ads/api/reference/rpc/latest/ReachPlanService $productMix = [ new PlannedProduct([ 'plannable_product_code' => 'TRUEVIEW_IN_STREAM', 'budget_micros' => self::BUDGET_MICROS * $trueviewAllocation ]), new PlannedProduct([ 'plannable_product_code' => 'BUMPER', 'budget_micros' => self::BUDGET_MICROS * $bumperAllocation ]) ]; self::getReachCurve( $googleAdsClient, $customerId, $productMix, self::LOCATION_ID, self::CURRENCY_CODE ); }
Python
def forecast_manual_mix( client: GoogleAdsClient, customer_id: str, location_id: str, currency_code: str, budget: int, ): """Pulls a forecast for product mix created manually. Args: client: an initialized GoogleAdsClient instance. customer_id: The customer ID for the reach forecast. location_id: The location ID to plan for. currency_code: Three-character ISO 4217 currency code. budget: Budget to allocate to the plan. """ product_mix: list[PlannedProduct] = [] trueview_allocation = 0.15 bumper_allocation = 1 - trueview_allocation product_splits = [ ("TRUEVIEW_IN_STREAM", trueview_allocation), ("BUMPER", bumper_allocation), ] product: str split: float for product, split in product_splits: planned_product: PlannedProduct = client.get_type("PlannedProduct") planned_product.plannable_product_code = product planned_product.budget_micros = math.trunc(budget * ONE_MILLION * split) product_mix.append(planned_product) request_reach_curve( client, customer_id, product_mix, location_id, currency_code )
Ruby
def forecast_manual_mix(client, reach_plan_service, customer_id) # Set up a ratio to split the budget between two products. trueview_allocation = 0.15 bumper_allocation = 1 - trueview_allocation # See listPlannableProducts on ReachPlanService to retrieve a list # of valid PlannableProductCode's for a given location: # https://developers.google.com/google-ads/api/reference/rpc/latest/ReachPlanService product_mix = [] product_mix << client.resource.planned_product do |p| p.plannable_product_code = 'TRUEVIEW_IN_STREAM' p.budget_micros = BUDGET_MICROS * trueview_allocation end product_mix << client.resource.planned_product do |p| p.plannable_product_code = 'BUMPER' p.budget_micros = BUDGET_MICROS * bumper_allocation end get_reach_curve( client, reach_plan_service, customer_id, product_mix, LOCATION_ID, CURRENCY_CODE, ) end
Perl
sub forecast_mix { my ( $reach_plan_service, $customer_id, $location_id, $currency_code, $budget_micros ) = @_; my $product_mix = []; # Set up a ratio to split the budget between two products. my $trueview_allocation = 0.15; my $bumper_allocation = 1 - $trueview_allocation; # See list_plannable_products on ReachPlanService to retrieve a list of valid # plannable product codes for a given location: # https://developers.google.com/google-ads/api/reference/rpc/latest/ReachPlanService push @$product_mix, Google::Ads::GoogleAds::V25::Services::ReachPlanService::PlannedProduct-> new({ plannableProductCode => "TRUEVIEW_IN_STREAM", budgetMicros => int($budget_micros * $trueview_allocation)}); push @$product_mix, Google::Ads::GoogleAds::V25::Services::ReachPlanService::PlannedProduct-> new({ plannableProductCode => "BUMPER", budgetMicros => int($budget_micros * $bumper_allocation)}); my $reach_request = build_reach_request($customer_id, $product_mix, $location_id, $currency_code); pull_reach_curve($reach_plan_service, $reach_request); }
curl
YouTube Select kanal listeleri için advanced_product_targeting ayarlarını da bu aşamada yapabilirsiniz.
Erişim tahmini isteği alanları
Her GenerateReachForecastRequest için customer_id, campaign_duration ve planned_products alanlarını ayarlamanız gerekir.
Aşağıdaki koşullu veya isteğe bağlı alanları da ayarlayabilirsiniz:
| Alan | Gereksinim | Açıklama |
|---|---|---|
cookie_frequency_cap_setting |
İsteğe bağlı | Bir reklamın, belirli bir zaman aralığında aynı kullanıcıya gösterilebileceği maksimum sayı. Bu sınır, bir gün, bir hafta veya bir ay için sınır olarak tanımlanabilir. v24 yılında desteği sonlandırılan ve v25 yılında kaldırılan cookie_frequency_cap'nın yerini alır. |
currency_code |
İsteğe bağlı | Üç karakterli ISO 4217 para birimi kodu. |
customer_reach_group |
Koşula bağlı olarak gerekli | Planlama yapılan müşterinin adı. Bu, kullanıcı tanımlı bir değerdir. targeting.audience_targeting ayarlanmışsa zorunludur. |
effective_frequency_limit |
İsteğe bağlı | Forecast.effective_frequency_breakdowns için en yüksek minimum etkili sıklığı (1–10) belirtir. min_effective_frequency ile karşılıklı olarak hariç tutulur. |
forecast_metric_options |
İsteğe bağlı | include_coview gibi ek metrik seçenekleri (ForecastMetricOptions) |
min_effective_frequency |
İsteğe bağlı | Raporlanan erişim metrikleri için bir kullanıcının reklamla karşılaşma sayısı. |
targeting |
İsteğe bağlı | Konum (plannable_location_ids, v25'de plannable_location_id yerine kullanıldı), yaş grubu, cinsiyetler, cihazlar, ağ ve (v25 ve sonraki sürümlerde) ebeveynlik durumu dahil olmak üzere ürün karmasında seçilen tüm ürünlere uygulanacak hedefleme. |
Sırada ne var?
Erişim eğrisi oluşturmayı öğrenin.