Reminder: v201702 will be sunset on February 28, 2018.

DFP 销售管理系统产品包

本指南阐明了 DFP 销售管理系统中的“产品包”标签与 API 中的 ProductPackagePackage 以及 ProductPackageItem 服务之间的联系。此外,还将逐步引导您通过 API 使用销售目录并将端到端广告投放管理的各个方面结合在一起。

基础入门

DFP 销售管理系统中的“产品包”标签代表要一同出售的产品对象分组。比如说,您可能有一个专门面向“体育爱好者”群体出售的产品包,其中包含各种定位特定键或细分受众群的产品。在这些产品中,有一些是可选的,还有一些则是必含的。

ProductPackage 对象与提案关联并填充 ProductPackageItems 后便会形成 Packages。产品包实际上相当于“购物车”,里面包含的商品需要先经过“结帐”流程,然后才能成为 ProposalLineItem

产品包和销售管理系统目录

创建产品包

界面中的“产品包”标签由以下 3 个对象组合而成:ProductPackagesProductPackageItemsPackages。要有效使用这 3 个对象,第一步就是创建 ProductPackage。这相当于将界面面板中的空产品包实例化:

图片

首先,为任务实例化正确的服务:

Java

    ProductPackageServiceInterface productPackageService =
        dfpServices.get(session, ProductPackageServiceInterface.class);

Python

  product_package_service = client.GetService('ProductPackageService',
                                              version='v201702')

创建一个本地 ProductPackage 对象,然后设置名称以及一组稍后要用来为 ProductPackageItem 定价的 RateCard ID:

Java

    // Create a local product package.
    ProductPackage productPackage = new ProductPackage();
    productPackage.setName(
        "Product package #" + new Random().nextInt(Integer.MAX_VALUE));
    productPackage.setRateCardIds(new long[] {rateCardId});

Python

  # Create a local product package.
  product_package = {
      'name': 'Product Package #%d' % random.randint(0, 100000000),
      'rateCardIds': [RATE_CARD_ID]
  }

设置完这 3 个字段之后,您就可以将 ProductPackage 对象保留在 DFP 广告管理系统(以下简称 DFP)的服务器中:

Java

    // Create the product package on the server.
    ProductPackage[] productPackages =
        productPackageService.createProductPackages(
            new ProductPackage[] {productPackage});

Python

  result = product_package_service.createProductPackages([product_package])

这一新的产品包实际上只是您在界面上所看到内容的一个组成部分,因为 DFP 中的产品包由多个部分组成。创建的产品包相当于界面中的顶部产品包面板:

图片

创建产品包项

在创建 ProductPackageItems 时,您实际上是在为产品包中要一同出售的产品分组和指定价目表限制条件。这些对象是从产品到提案订单项的中间站。这相当于将产品添加到上文中创建的空产品包中:

图片

首先提取相应服务并为 ProductPackageItem 对象创建空的构造函数:

Java

    ProductPackageItemServiceInterface productPackageItemService =
        dfpServices.get(session, ProductPackageItemServiceInterface.class);

    // Create a local product package item.
    ProductPackageItem productPackageItem = new ProductPackageItem();

Python

  product_package_item_service = client.GetService('ProductPackageItemService',
                                                   version='v201702')

在这里,您需要设置的字段就是创建 ProductPackageItem 所涉及的产品以及分组 ProductPackageItems 所依据的产品包 ID。您也可以指定在出售产品包时是否必须使用该产品包项。

Java

    // Set the product from which the product package item is created.
    productPackageItem.setProductId(productId);

    // Set the product package that the product package item belongs to.
    productPackageItem.setProductPackageId(productPackageId);

    // Specify if the product package item is required for this product package.
    productPackageItem.setIsMandatory(true);

Python

  product_package_item = {
      # Set the product from which the product package item is created.
      'productId': PRODUCT_ID,
      # Set the product package that the product package item belongs to.
      'productPackageId': PRODUCT_PACKAGE_ID,
      # Specify if the product package item is required for this
      # product package.
      'isMandatory': True
  }

设置完必填字段后,您就可以将对象保留在 DFP 服务器中。

Java

    // Create the product package item on the server.
    ProductPackageItem[] productPackageItems =
        productPackageItemService.createProductPackageItems(
            new ProductPackageItem[] {productPackageItem});

Python

  # Create the product package item on the server.
  result = product_package_item_service.createProductPackageItems(
      [product_package_item])

在产品包下创建了产品包项之后,相应产品包项将在界面中的产品包面板底部以列表形式显示:

图片

使用提案中的产品包

创建产品包

创建产品包并关联下属的产品包项之后,您需要创建虚拟“购物车”,从而在产品包和提案之间架起桥梁。这样一来,您可以填写并非由未售出产品代表的特定销售价格。这由 Package 对象代表,相当于通过提案创建屏幕生成的购物车:

图片

首先,实例化 PackageService

Java

    PackageServiceInterface packageService =
        dfpServices.get(session, PackageServiceInterface.class);

Python

  package_service = client.GetService('PackageService', version='v201702')

然后,创建一个本地 Package 对象,并设置 NameProposalIdProductPackageId 这些必填字段以及要与 ProposalLineItems 关联的 RateCardId

Java

    // Create a local package.
    Package pkg = new Package();
    pkg.setName("Package #" + new Random().nextInt(Integer.MAX_VALUE));

    // Set the proposal ID for the package.
    pkg.setProposalId(proposalId);

    // Set the product package ID to create the package from.
    pkg.setProductPackageId(productPackageId);

    // Set the rate card ID the proposal line items are priced with.
    pkg.setRateCardId(rateCardId);

Python

  # Create local package.
  package = {
      'name': 'Package #%d' % random.randint(0, 1000000),
      'proposalId': PROPOSAL_ID,
      'productPackageId': PRODUCT_PACKAGE_ID,
      'rateCardId': RATE_CARD_ID,
  }

现在,上述字段已设置完成,您可以在 DFP 服务器上创建 Package 了。

Java

    // Create the package on the server.
    Package[] packages = packageService.createPackages(new Package[] { pkg });

Python

  # Create the package on the server.
  result = package_service.createPackages([package])

通过产品包创建提案订单项

拥有产品包后,您还需要完成最后一步才能继续出售提案,即通过产品包创建提案订单项。在此之前,产品包项尚未添加到提案中。为此,您需要借助过滤产品包的语句执行一项操作:

Java

    // Create a statement to select a single package.
    StatementBuilder statementBuilder = new StatementBuilder()
        .where("id = :id")
        .orderBy("id ASC")
        .limit(1)
        .withBindVariableValue("id", packageId);

    // Get the package.
    PackagePage page = packageService.getPackagesByStatement(statementBuilder.toStatement());

    Package pkg = Iterables.getOnlyElement(Arrays.asList(page.getResults()));
        // Create action to activate packages.
    com.google.api.ads.dfp.axis.v201702.CreateProposalLineItemsFromPackages action =
        new com.google.api.ads.dfp.axis.v201702.CreateProposalLineItemsFromPackages();

    // Perform action.
    UpdateResult result = packageService.performPackageAction(
        action, statementBuilder.toStatement());

Python

  # Create a statement to select the single package.
  statement = (dfp.StatementBuilder()
               .Where('id = :id')
               .OrderBy('id', ascending=True)
               .Limit(1)
               .WithBindVariable('id', PACKAGE_ID))

  # Get the package.
  query_result = package_service.getPackagesByStatement(statement.ToStatement())

  package = query_result['results'][0]

  # Perform update packages action.
  result = package_service.performPackageAction(
      {'xsi_type': 'CreateProposalLineItemsFromPackages'},
      statement.ToStatement())

此时,您就拥有一个包含从产品包出售的提案订单项的提案。您刚刚用来创建提案订单项的产品包的状态COMPLETED。您可以通过提案工作流程继续执行提交流程。

后续步骤

发送以下问题的反馈:

此网页
DoubleClick for Publishers
DoubleClick for Publishers
需要帮助?请访问我们的支持页面