Setelah mengumpulkan setelan penargetan dan kombinasi produk untuk media plan, Anda dapat membuat kurva anggaran versus potensi jangkauan menggunakan metode GenerateReachForecast di ReachPlanService. Lihat glosarium dan panduan media plan untuk mengetahui detail tentang kolom permintaan.
Metrik perkiraan
Respons dari GenerateReachForecast mencakup berbagai metrik dalam pesan Forecast, yang memberikan insight tentang potensi performa kampanye yang Anda rencanakan. Metrik ini mencakup:
- Jangkauan (sesuai target dan total, termasuk co-viewing)
- Tayangan iklan (sesuai target dan total, termasuk co-view, dan terlihat)
- Pengelompokan frekuensi efektif (jumlah pengguna unik yang dijangkau setidaknya beberapa kali; misalnya, 1+, 2+, atau 3+ tayangan iklan)
- Tindakan pengguna (penayangan TrueView, konversi, dan klik)
Memperkirakan jangkauan untuk Peningkat Permintaan
Saat membuat kurva untuk DEMAND_GEN produk yang dapat direncanakan, Anda juga harus
menyertakan rasio konversi yang diharapkan untuk setiap produk.
Untuk mendapatkan saran rasio konversi untuk produk yang dapat direncanakan dan didukung, gunakan metode GenerateConversionRates. Metode ini
menampilkan saran rasio konversi berdasarkan histori performa untuk
akun Anda atau rasio yang disarankan berdasarkan performa untuk semua pengiklan.
Untuk produk DEMAND_GEN, GenerateConversionRates dapat menampilkan beberapa
saran untuk produk yang sama. Beberapa saran memiliki kolom surface_targeting
yang terisi, yang menunjukkan bahwa saran tersebut hanya berlaku untuk
kombinasi platform tertentu (misalnya, YouTube Shorts). Jika
surface_targeting tidak diisi, rekomendasinya adalah rata-rata kampanye Peningkat Permintaan
untuk produk tersebut. Saat membuat perkiraan untuk kampanye Peningkat Permintaan
dengan penargetan platform, gunakan saran rasio konversi paling spesifik
yang tersedia.
Selain rasio konversi, pengguna Peningkat Permintaan dapat menggunakan
GenerateReachForecast untuk memproyeksikan clicks, yang sangat relevan untuk
kampanye yang dioptimalkan untuk klik, seperti Peningkat Permintaan dengan bidding Maksimalkan Klik.
Memperkirakan jangkauan untuk YouTube Select
YouTube Select (YTS) di ReachPlanService mendukung penargetan tingkat grup channel untuk semua lokasi YTS yang memenuhi syarat dengan harga Reservasi Instan. Gunakan kolom youtube_select_lineup_targeting di ReachPlanService.ListPlannableProducts untuk mengidentifikasi grup channel yang tersedia (youtube_select_lineup_targeting menggantikan kolom youtube_select_lineups, yang tidak digunakan lagi di v23 dan dihapus di v24).
Dengan Reservasi Instan, error berikut dapat terjadi saat meminta perkiraan untuk YTS:
Menyimpan kurva
Anda hanya dapat menyimpan kurva individual untuk memberikan kemudahan bagi pengguna. Menyimpan kurva dalam cache secara massal dilarang keras. Jika Anda perlu membuat kurva secara massal, hubungi perwakilan Akun Google Anda terlebih dahulu.
Penanganan error
Permintaan ke ReachPlanService harus mengikuti struktur API dasar dan dapat menampilkan error umum jika gagal divalidasi.
Selain error umum, ReachPlanService dapat menampilkan error khusus untuk Reach Planner yang tercantum di ReachPlanError.
Contoh kode
Kurva ini mencakup tayangan iklan dan jangkauan pengguna dalam angka absolut, serta ukuran populasi yang sesuai dengan populasi sensus dan ukuran audiens YouTube untuk demografi dan negara yang diminta.
Java
private void getReachCurve( ReachPlanServiceClient reachPlanServiceClient, GenerateReachForecastRequest request) { GenerateReachForecastResponse response = reachPlanServiceClient.generateReachForecast(request); System.out.println("Reach curve output:"); System.out.println( "Currency, Cost Micros, On-Target Reach, On-Target Imprs, Total Reach, Total Imprs," + " Products"); for (ReachForecast point : response.getReachCurve().getReachForecastsList()) { System.out.printf( "%s, \"", Joiner.on(", ") .join( request.getCurrencyCode(), String.valueOf(point.getCostMicros()), String.valueOf(point.getForecast().getOnTargetReach()), String.valueOf(point.getForecast().getOnTargetImpressions()), String.valueOf(point.getForecast().getTotalReach()), String.valueOf(point.getForecast().getTotalImpressions()))); for (PlannedProductReachForecast product : point.getPlannedProductReachForecastsList()) { System.out.printf("[Product: %s, ", product.getPlannableProductCode()); System.out.printf("Budget Micros: %s]", product.getCostMicros()); } System.out.printf("\"%n"); } }
C#
public void GetReachCurve(ReachPlanServiceClient reachPlanService, GenerateReachForecastRequest request) { GenerateReachForecastResponse response = reachPlanService.GenerateReachForecast( request); Console.WriteLine("Reach curve output:"); Console.WriteLine( "Currency, Cost Micros, On-Target Reach, On-Target Impressions, Total Reach," + " Total Impressions, Products"); foreach (ReachForecast point in response.ReachCurve.ReachForecasts) { Console.Write($"{request.CurrencyCode}, "); Console.Write($"{point.CostMicros}, "); Console.Write($"{point.Forecast.OnTargetReach}, "); Console.Write($"{point.Forecast.OnTargetImpressions}, "); Console.Write($"{point.Forecast.TotalReach}, "); Console.Write($"{point.Forecast.TotalImpressions}, "); Console.Write("\"["); foreach (PlannedProductReachForecast productReachForecast in point.PlannedProductReachForecasts) { Console.Write($"(Product: {productReachForecast.PlannableProductCode}, "); Console.Write($"Budget Micros: {productReachForecast.CostMicros}), "); } Console.WriteLine("]\""); } }
PHP
private static function getReachCurve( GoogleAdsClient $googleAdsClient, int $customerId, array $productMix, string $locationId, string $currencyCode ) { // Valid durations are between 1 and 90 days. $duration = new CampaignDuration(['duration_in_days' => 28]); $targeting = new Targeting([ 'plannable_location_id' => $locationId, 'age_range' => ReachPlanAgeRange::AGE_RANGE_18_65_UP, 'genders' => [ new GenderInfo(['type' => GenderType::FEMALE]), new GenderInfo(['type' => GenderType::MALE]) ], 'devices' => [ new DeviceInfo(['type' => Device::DESKTOP]), new DeviceInfo(['type' => Device::MOBILE]), new DeviceInfo(['type' => Device::TABLET]) ] ]); // See the docs for defaults and valid ranges: // https://developers.google.com/google-ads/api/reference/rpc/latest/GenerateReachForecastRequest $response = $googleAdsClient->getReachPlanServiceClient()->generateReachForecast( GenerateReachForecastRequest::build($customerId, $duration, $productMix) ->setCurrencyCode($currencyCode) ->setTargeting($targeting) ); printf( "Reach curve output:%sCurrency, Cost Micros, On-Target Reach, On-Target Imprs," . " Total Reach, Total Imprs, Products%s", PHP_EOL, PHP_EOL ); foreach ($response->getReachCurve()->getReachForecasts() as $point) { $products = ''; /** @var ReachForecast $point */ foreach ($point->getPlannedProductReachForecasts() as $plannedProductReachForecast) { /** @var PlannedProductReachForecast $plannedProductReachForecast */ $products .= sprintf( '(Product: %s, Budget Micros: %s)', $plannedProductReachForecast->getPlannableProductCode(), $plannedProductReachForecast->getCostMicros() ); } printf( "%s, %d, %d, %d, %d, %d, %s%s", $currencyCode, $point->getCostMicros(), $point->getForecast()->getOnTargetReach(), $point->getForecast()->getOnTargetImpressions(), $point->getForecast()->getTotalReach(), $point->getForecast()->getTotalImpressions(), $products, PHP_EOL ); } }
Python
def request_reach_curve( client: GoogleAdsClient, customer_id: str, product_mix: list[PlannedProduct], location_id: str, currency_code: str, ): """Creates a sample request for a given product mix. Args: client: an initialized GoogleAdsClient instance. customer_id: The customer ID for the reach forecast. product_mix: The product mix for the reach forecast. location_id: The location ID to plan for. currency_code: Three-character ISO 4217 currency code. """ # See the docs for defaults and valid ranges: # https://developers.google.com/google-ads/api/reference/rpc/latest/GenerateReachForecastRequest request: GenerateReachForecastRequest = client.get_type( "GenerateReachForecastRequest" ) request.customer_id = customer_id # Valid durations are between 1 and 90 days. request.campaign_duration.duration_in_days = 28 request.currency_code = currency_code request.cookie_frequency_cap = 0 request.min_effective_frequency = 1 request.planned_products = product_mix request.targeting.plannable_location_id = location_id request.targeting.age_range = ( client.enums.ReachPlanAgeRangeEnum.AGE_RANGE_18_65_UP ) # Add gender targeting to the request. gender_type: GenderTypeEnum for gender_type in [ client.enums.GenderTypeEnum.FEMALE, client.enums.GenderTypeEnum.MALE, ]: gender: GenderInfo = client.get_type("GenderInfo") gender.type_ = gender_type request.targeting.genders.append(gender) # Add device targeting to the request. device_type: DeviceEnum for device_type in [ client.enums.DeviceEnum.DESKTOP, client.enums.DeviceEnum.MOBILE, client.enums.DeviceEnum.TABLET, ]: device: DeviceInfo = client.get_type("DeviceInfo") device.type_ = device_type request.targeting.devices.append(device) reach_plan_service: ReachPlanServiceClient = client.get_service( "ReachPlanService" ) response: GenerateReachForecastResponse = ( reach_plan_service.generate_reach_forecast(request=request) ) print( "Currency, Cost, On-Target Reach, On-Target Imprs, Total Reach," " Total Imprs, Products" ) point: ReachForecast for point in response.reach_curve.reach_forecasts: product_splits = [] p: PlannedProductReachForecast for p in point.planned_product_reach_forecasts: product_splits.append( {p.plannable_product_code: p.cost_micros / ONE_MILLION} ) print( [ currency_code, point.cost_micros / ONE_MILLION, point.forecast.on_target_reach, point.forecast.on_target_impressions, point.forecast.total_reach, point.forecast.total_impressions, product_splits, ] )
Ruby
def get_reach_curve( client, reach_plan_service, customer_id, product_mix, location_id, currency_code) duration = client.resource.campaign_duration do |d| # Valid durations are between 1 and 90 days. d.duration_in_days = 28 end targeting = client.resource.targeting do |t| t.plannable_location_id = location_id t.age_range = :AGE_RANGE_18_65_UP t.genders << client.resource.gender_info do |gender| gender.type = :FEMALE end t.genders << client.resource.gender_info do |gender| gender.type = :MALE end t.devices << client.resource.device_info do |device| device.type = :DESKTOP end t.devices << client.resource.device_info do |device| device.type = :MOBILE end t.devices << client.resource.device_info do |device| device.type = :TABLET end end # See the docs for defaults and valid ranges: # https://developers.google.com/google-ads/api/reference/rpc/latest/GenerateReachForecastRequest response = reach_plan_service.generate_reach_forecast( customer_id: customer_id, campaign_duration: duration, planned_products: product_mix, currency_code: currency_code, targeting: targeting, ) puts "Reach curve output:" puts "Currency, Cost Micros, On-Target Reach, On-Target Imprs, " \ "Total Reach, Total Imprs, Products" response.reach_curve.reach_forecasts.each do |point| products = "" point.planned_product_reach_forecasts.each do |product| products += "(Product: #{product.plannable_product_code}, "\ "Cost Micros: #{product.cost_micros})" end puts "#{currency_code}, #{point.cost_micros}, " \ "#{point.forecast.on_target_reach}, " \ "#{point.forecast.on_target_impressions}, " \ "#{point.forecast.total_reach}, " \ "#{point.forecast.total_impressions}, " \ "#{products}" end end
Perl
sub pull_reach_curve { my ($reach_plan_service, $reach_request) = @_; my $response = $reach_plan_service->generate_reach_forecast($reach_request); print "Reach curve output:\n"; print "Currency,\tCost Micros,\tOn-Target Reach,\tOn-Target Imprs,\t" . "Total Reach,\tTotal Imprs,\tProducts\n"; foreach my $point (@{$response->{reachCurve}{reachForecasts}}) { printf "%s,\t%d,\t%d,\t%d,\t%d,\t%d,\t'[", $reach_request->{currencyCode}, $point->{costMicros}, $point->{forecast}{onTargetReach}, $point->{forecast}{onTargetImpressions}, $point->{forecast}{totalReach}, $point->{forecast}{totalImpressions}; foreach my $productReachForecast (@{$point->{plannedProductReachForecasts}}) { printf "(Product: %s, Budget Micros: %d), ", $productReachForecast->{plannableProductCode}, $productReachForecast->{costMicros}; } print "]'\n"; } }
curl
Google Issue Tracker
Gunakan Issue Tracker Google untuk mengajukan pertanyaan dukungan, melaporkan bug, atau mengirimkan permintaan fitur. Google melacak, memprioritaskan, dan memposting info terbaru tentang permintaan Anda langsung di Issue Tracker. Untuk mengetahui informasi selengkapnya, lihat Membuat laporan masalah di Issue Tracker Google.
Laporkan masalah menggunakan salah satu template Issue Tracker berikut:
- Mengajukan pertanyaan dukungan umum atau mengirimkan masukan terkait dokumentasi
- Melaporkan bug teknis
- Mengirimkan permintaan fitur API
Isi semua kolom dalam template dengan informasi mendetail agar Google dapat mereproduksi dan memprioritaskan permintaan Anda. Google mungkin akan menutup laporan yang tidak lengkap dan meminta Anda mengirimkan masalah baru dengan detail yang tidak ada.