بعد جمع إعدادات الاستهداف وتشكيلة المنتجات لخطتك الإعلامية، يمكنك إنشاء منحنى للميزانيات مقابل مدى الوصول المحتمل باستخدام طريقة GenerateReachForecast في ReachPlanService. يمكنك الاطّلاع على
مسرد المصطلحات ودليل
الخطة الإعلامية للحصول على تفاصيل عن حقول الطلب.
مقاييس التوقّعات
يتضمّن الردّ من GenerateReachForecast مقاييس مختلفة ضمن رسالة
Forecast، ما يوفّر إحصاءات عن
الأداء المحتمل لحملتك المخطّط لها. وتشمل هذه المقاييس ما يلي:
- مدى الوصول (المستهدف والإجمالي، بما في ذلك المشاهدة الجماعية)
- مرّات الظهور (المستهدَفة والإجمالية، بما في ذلك المشاهدة الجماعية ومرّات الظهور القابلة للعرض)
- تقسيمات عدد مرات الظهور الفعالة (عدد المستخدمين الفرديين الذين تم الوصول إليهم عدد مرات يبلغ على الأقل رقمًا معينًا، على سبيل المثال، مرة واحدة أو أكثر، أو مرتين أو أكثر، أو 3 مرات أو أكثر)
- إجراءات المستخدمين (مشاهدات إعلانات TrueView والإحالات الناجحة والنقرات)
توقُّع مدى الوصول إلى الجمهور في "حملات زيادة الطلب"
عند إنشاء منحنيات لمنتجات قابلة للتخطيط عددها DEMAND_GEN، يجب أيضًا
تضمين معدّل الإحالات الناجحة المتوقّع لكل منتج.
للحصول على اقتراحات بشأن معدّل الإحالات الناجحة للمنتجات القابلة للتخطيط المتوافقة، استخدِم طريقة GenerateConversionRates. تعرض هذه الطريقة اقتراحات لمعدّل الإحالات الناجحة استنادًا إلى الأداء السابق لحسابك أو المعدّلات المقترَحة استنادًا إلى الأداء لجميع المعلِنين.
بالنسبة إلى منتجات DEMAND_GEN، قد يعرض GenerateConversionRates اقتراحات متعددة للمنتج نفسه. تتضمّن بعض الاقتراحات حقل surface_targeting
الذي يشير إلى أنّ الاقتراح ينطبق فقط على هذه المجموعة المحدّدة من مساحات العرض (على سبيل المثال، YouTube Shorts). إذا لم يتم ملء الحقل surface_targeting، يكون الاقتراح هو متوسط "حملة زيادة الطلب" لهذا المنتج. عند إنشاء توقّعات لـ "حملات زيادة الطلب" التي تستخدم ميزة "استهداف مساحات العرض"، استخدِم اقتراح معدّل الإحالات الناجحة الأكثر تحديدًا المتاح.
بالإضافة إلى معدّلات الإحالات الناجحة، يمكن لمستخدمي "حملات زيادة الطلب" استخدام
GenerateReachForecast لتوقّع clicks، وهو أمر مهم بشكل خاص
للحملات التي يتم تحسينها لزيادة النقرات، مثل "حملات زيادة الطلب" التي تستخدم استراتيجية عروض أسعار "الحصول على الحد الأقصى من النقرات".
توقُّع مدى الوصول إلى الجمهور في YouTube Select
تتيح منصة YouTube Select في ReachPlanService استهداف القوائم لجميع المواقع الجغرافية المؤهلة في YouTube Select وفقًا لأسعار "الحجز الفوري". استخدِم حقل youtube_select_lineup_targeting في ReachPlanService.ListPlannableProducts لتحديد القوائم المتاحة (حلّ حقل youtube_select_lineup_targeting محلّ حقل youtube_select_lineups الذي تم إيقافه نهائيًا في v23 وإزالته في v24).
في ميزة "الحجز الفوري"، يمكن أن تحدث الأخطاء التالية عند طلب توقّعات لـ YTS:
حفظ المنحنيات
يمكنك فقط حفظ المنحنيات الفردية لتوفير الراحة للمستخدمين. يُحظر تمامًا تخزين المنحنيات مؤقتًا بشكل جماعي. إذا كنت بحاجة إلى إنشاء منحنيات بشكل مجمّع، يُرجى التواصل مع ممثل حساب Google أولاً.
معالجة الأخطاء
يجب أن تتبع الطلبات المُرسَلة إلى ReachPlanService بنية واجهة برمجة التطبيقات الأساسية، وقد تعرض أخطاء شائعة في حال تعذّر التحقّق منها.
بالإضافة إلى الأخطاء الشائعة، يمكن أن تعرض ReachPlanService أخطاءً خاصة بأداة تخطيط الوصول مدرَجة في ReachPlanError.
مثال على الرمز
يتضمّن المنحنى مرات الظهور ومدى وصول المستخدمين بأرقام مطلقة، بالإضافة إلى أحجام المجموعات الشاملة التي تتوافق مع الإحصاء السكاني وحجم جمهور YouTube للفئة الديمغرافية والبلد المطلوبَين.
جافا
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
يمكنك استخدام Issue Tracker من Google لطرح أسئلة حول الدعم أو الإبلاغ عن الأخطاء أو إرسال طلبات الميزات. تتتبّع Google طلباتك وتحدّد أولوياتها وتنشر آخر المعلومات عنها مباشرةً في Issue Tracker. لمزيد من المعلومات، يُرجى الاطّلاع على إنشاء مشكلة في Google Issue Tracker.
أنشئ مشكلة باستخدام أحد نماذج Issue Tracker التالية:
- طرح سؤال عام حول الدعم أو إرسال ملاحظات بشأن المستندات
- الإبلاغ عن خطأ فني
- إرسال طلب ميزة في واجهة برمجة التطبيقات
املأ جميع الحقول في النموذج بمعلومات تفصيلية حتى تتمكّن Google من إعادة إنشاء طلبك وتحديد أولويته. قد تغلق Google البلاغات غير المكتملة وتطلب منك إرسال بلاغ جديد يتضمّن التفاصيل الناقصة.