← 返回目录
来源:Google Ads API 官方文档 · 中文版 · 本地归档

生成覆盖面曲线

收集媒体方案的定位设置和产品组合后,您可以使用 GenerateReachForecastmethod in ReachPlanService 生成预算与潜在覆盖面的曲线。如需详细了解请求字段,请参阅 术语表和媒体方案 指南。

预测指标

GenerateReachForecast 的响应包含 Forecast 消息中的各种指标,可帮助您深入了解 计划广告系列的潜在效果。这些指标包括:

  • 覆盖面(目标内覆盖面和总覆盖面,包括同看)
  • 展示次数(目标内展示次数和总展示次数,包括同看和可见展示次数)
  • 有效频次细分(至少看到广告一定次数(例如 1 次以上、2 次以上、3 次以上)的唯一身份用户人数)。
  • 用户操作(TrueView 观看次数、转化和点击次数)

保存曲线

您只能保存单个曲线,以便为用户提供便利。 严禁批量缓存曲线。如果您确实需要批量生成曲线,请先与您的 Google 代表联系。

错误处理

对 ReachPlanService 的请求必须遵循 基本的 API 结构,如果验证失败,可能会返回 常见错误。

除了常见错误之外,ReachPlanService 还可以返回特定于 覆盖面规划的错误,这些错误列在 ReachPlanError中。

YouTube 优选频道组的变化

与之前的 Run-of-Network 相比,覆盖面规划服务中的 YouTube 优选频道组 (YTS) 支持在即时预订定价的所有符合条件的 YTS 位置定位到频道组级。使用 youtube_select_lineup_targeting 字段在 ReachPlanService.ListPlannableProducts 中来确定哪些频道组可用。

使用即时预订时,请求 YTS 预测时也可能会出现以下错误:

  1. 可用广告资源不足
  2. 已停用不投放广告的账号

预测需求开发广告系列的覆盖面

为 DEMAND_GEN 可规划产品生成曲线时,您还必须为每个产品添加预期转化率。

如需获取受支持的可规划产品的转化率建议,请使用 GenerateConversionRates 方法。此方法会根据您账号的历史表现或所有广告客户的表现建议转化率。

对于 DEMAND_GEN 产品,GenerateConversionRates 可能会为同一产品返回多个建议。其中一些建议会填充 surface_targeting 字段,这表示该建议仅适用于该特定平台组合(例如:YouTube Shorts)。如果未填充 surface_targeting,则该建议是该产品的需求开发广告系列平均转化率。为采用平台定位的需求开发广告系列生成预测时,您应使用最具体的可用转化率建议。

除了转化率之外,需求开发广告系列用户还可以使用 GenerateReachForecast 来预测 clicks,这对于以点击为优化目标(例如采用“尽可能争取更多点击次数”出价策略的需求开发广告系列)的广告系列尤其重要。

代码示例

该曲线包含绝对数字的展示次数和用户覆盖面,以及与所请求人群和国家/地区的人口普查人口和 YouTube 受众群体规模相对应的覆盖面规模。

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
        );
    }
}
在接这个接口时卡住了?
Stuck wiring this API into production? We build ad-delivery tooling on these platforms — campaign automation, reporting pipelines, error-handling and migration between API versions.
联系我们 · Talk to us 每日平台更新简报 →