建立需求開發委刊項

需求開發委刊項會在 Google 最具影響力的平台上 (包括 YouTube、探索、Gmail 和 Google 多媒體廣告聯播網),放送多種格式的廣告群組和廣告。與其他類型的委刊項一樣,需求開發委刊項也是使用 LineItem 資源進行管理,並根據設定的預算、出價策略和指定目標運作。demandGenSettings 欄位也提供需求開發委刊項專屬設定。

需求開發委刊項有稱為廣告群組的子資源。廣告群組可提供個別委刊項的另一層級控制項。

選擇設定

建立需求開發委刊項前,請先查看並決定相關設定。

需求開發委刊項:

  • lineItemType 必須設為 LINE_ITEM_TYPE_DEMAND_GEN
  • 必須使用 BiddingStrategy 物件的 demandGenBid 欄位設定 bidStrategy
  • budget 必須在委刊項層級設為固定金額,且無法從父項廣告訂單沿用。
  • demandGenSettings 用於設定需求開發委刊項專屬的設定。DemandGenSettings 物件的 geoLanguageTargetingEnabled 欄位會控管是在委刊項層級還是個別廣告群組中,設定地區和語言指定目標。委刊項建立後,這個欄位就無法更新。如要在委刊項層級設定這項指定目標,請將該欄位設為 true
  • 不應設定「creativeIds。素材資源會直接在 AdGroupAd 資源中指派及設定。

需求開發委刊項必須填寫下列欄位,運作方式與其他類型的委刊項相同:

LineItem 資源也有許多可設定的選用欄位。詳情請參閱參考文件

建立委刊項

如要使用下列設定建立需求開發委刊項,請按照下列步驟操作:

  • 沿用航班和 $100 美元的預算。
  • 夥伴收益模式為媒體費用總額的 0.1%。
  • 這項出價策略會盡可能爭取轉換,同時將平均單次轉換出價維持在 $10 美元。
  • 偏好直接將指定地區和語言指派給委刊項下的廣告群組。

Java

// Provide the ID of the parent advertiser.
long advertiserId = advertiser-id

// Provide the ID of the parent insertion order.
long insertionOrderId = insertion-order-id

// Provide the display name of the line item.
String displayName = display-name

// Provide the Floodlight activity ID to use for conversion tracking.
long floodlightActivityId = floodlight-activity-id;

// Provide whether the line item will serve EU political ads.
String containsEuPoliticalAds = contains-eu-political-ads

// Create the line item structure.
LineItem lineItem =
    new LineItem()
        .setInsertionOrderId(insertionOrderId)
        .setDisplayName(displayName)
        .setLineItemType("LINE_ITEM_TYPE_DEMAND_GEN")
        .setEntityStatus("ENTITY_STATUS_DRAFT")
        .setContainsEuPoliticalAds(containsEuPoliticalAds);

// Create and set the line item flight.
LineItemFlight lineItemFlight =
    new LineItemFlight()
        .setFlightDateType("LINE_ITEM_FLIGHT_DATE_TYPE_INHERITED");
lineItem.setFlight(lineItemFlight);

// Create and set the line item budget.
LineItemBudget lineItemBudget =
    new LineItemBudget()
        .setBudgetAllocationType("LINE_ITEM_BUDGET_ALLOCATION_TYPE_FIXED")
        .setMaxAmount(100000000L);
lineItem.setBudget(lineItemBudget);

// Create and set the pacing setting.
Pacing pacing =
    new Pacing()
        .setPacingPeriod("PACING_PERIOD_FLIGHT")
        .setPacingType("PACING_TYPE_EVEN")
        .setDailyMaxMicros(10_000L);
lineItem.setPacing(pacing);

// Create and set the partner revenue model.
PartnerRevenueModel partnerRevenueModel =
    new PartnerRevenueModel()
        .setMarkupType(
            "PARTNER_REVENUE_MODEL_MARKUP_TYPE_TOTAL_MEDIA_COST_MARKUP")
        .setMarkupAmount(100L);
lineItem.setPartnerRevenueModel(partnerRevenueModel);

// Create and set the bidding strategy.
BiddingStrategy biddingStrategy =
    new BiddingStrategy()
        .setDemandGenBid(
            new DemandGenBiddingStrategy()
                .setType("DEMAND_GEN_BIDDING_STRATEGY_TYPE_TARGET_CPA")
                .setValue(10000000L));
lineItem.setBidStrategy(biddingStrategy);

// Create the conversion counting configuration.
ConversionCountingConfig conversionCountingConfig =
    new ConversionCountingConfig()
        .setPostViewCountPercentageMillis(100000L);

// Create and set the configuration for the floodlight activity used in
// conversion tracking.
TrackingFloodlightActivityConfig trackingFloodlightActivityConfig =
    new TrackingFloodlightActivityConfig()
        .setFloodlightActivityId(floodlightActivityId)
        .setPostClickLookbackWindowDays(90)
        .setPostViewLookbackWindowDays(90);
conversionCountingConfig.setFloodlightActivityConfigs(
    ImmutableList.of(trackingFloodlightActivityConfig));

// Set the conversion counting configuration.
lineItem.setConversionCounting(conversionCountingConfig);

// Create and set Demand Gen settings.
DemandGenSettings demandGenSettings =
    new DemandGenSettings().setGeoLanguageTargetingEnabled(false);
lineItem.setDemandGenSettings(demandGenSettings);

// Configure the create request.
LineItems.Create request =
    service.advertisers().lineItems().create(advertiserId, lineItem);

// Create the line item.
LineItem response = request.execute();

// Display the new line item.
System.out.printf(
    "Demand Gen line item %s was created.", response.getName());

Python

# Provide the ID of the parent advertiser.
advertiser_id = advertiser-id

# Provide the ID of the parent insertion order.
insertion_order_id = insertion-order-id

# Provide the display name of the line item.
display_name = display-video

# Provide the Floodlight activity ID to use for conversion tracking.
floodlight_activity_id = floodlight-activity-id

# Provide whether the line item will serve EU political ads.
contains_eu_political_ads = contains-eu-political-ads

# Create a line item object.
line_item_obj = {
    "insertionOrderId": insertion_order_id,
    "displayName": display_name,
    "lineItemType": "LINE_ITEM_TYPE_DEMAND_GEN",
    "entityStatus": "ENTITY_STATUS_DRAFT",
    "flight": {"flightDateType": "LINE_ITEM_FLIGHT_DATE_TYPE_INHERITED"},
    "budget": {
        "budgetAllocationType": "LINE_ITEM_BUDGET_ALLOCATION_TYPE_FIXED",
        "maxAmount": 100000000
    },
    "pacing": {
        "pacingPeriod": "PACING_PERIOD_FLIGHT",
        "pacingType": "PACING_TYPE_EVEN",
        "dailyMaxMicros": 10000,
    },
    "partnerRevenueModel": {
        "markupType": (
            "PARTNER_REVENUE_MODEL_MARKUP_TYPE_TOTAL_MEDIA_COST_MARKUP"
        ),
        "markupAmount": 100,
    },
    "bidStrategy": {
        "demandGenBid": {
            "type": "DEMAND_GEN_BIDDING_STRATEGY_TYPE_TARGET_CPA",
            "value": "10000000"
        }
    },
    "conversionCounting": {
        "postViewCountPercentageMillis": "100000",
        "floodlightActivityConfigs": [
            {
                "floodlightActivityId": floodlight_activity_id,
                "postClickLookbackWindowDays": 90,
                "postViewLookbackWindowDays": 90
            }
        ]
    },
    "containsEuPoliticalAds": contains_eu_political_ads,
    "demandGenSettings": {
        "geoLanguageTargetingEnabled": False
    }
}

# Build and execute request.
response = (
    service.advertisers()
    .lineItems()
    .create(advertiserId=advertiser_id, body=line_item_obj)
    .execute()
)

# Display the new line item.
print(f"Demand Gen line Item {response['name']} was created.")

PHP

// Provide the ID of the parent advertiser.
$advertiserId = advertiser-id;

// Provide the ID of the parent insertion order.
$insertionOrderId = insertion-order-id;

// Provide the display name of the line item.
$displayName = display-name;

// Provide the Floodlight activity ID to use for conversion tracking.
$floodlightActivityId = floodlight-activity-id;

// Provide whether the line item will serve EU political ads.
$containsEuPoliticalAds = contains-eu-political-ads;

// Create the Demand Gen line item structure.
$lineItem = new Google_Service_DisplayVideo_LineItem();
$lineItem->setInsertionOrderId($insertionOrderId);
$lineItem->setDisplayName($displayName);
$lineItem->setLineItemType('LINE_ITEM_TYPE_DEMAND_GEN');
$lineItem->setEntityStatus('ENTITY_STATUS_DRAFT');
$lineItem->setContainsEuPoliticalAds($containsEuPoliticalAds);

// Create and set the line item flight.
$flight = new Google_Service_DisplayVideo_LineItemFlight();
$flight->setFlightDateType('LINE_ITEM_FLIGHT_DATE_TYPE_INHERITED');
$lineItem->setFlight($flight);

// Create and set the line item budget.
$budget = new Google_Service_DisplayVideo_LineItemBudget();
$budget->setBudgetAllocationType(
    'LINE_ITEM_BUDGET_ALLOCATION_TYPE_FIXED'
);
$budget->setMaxAmount(100000000);
$lineItem->setBudget($budget);

// Create and set the pacing setting.
$pacing = new Google_Service_DisplayVideo_Pacing();
$pacing->setPacingPeriod('PACING_PERIOD_FLIGHT');
$pacing->setPacingType('PACING_TYPE_EVEN');
$pacing->setDailyMaxMicros(10000);
$lineItem->setPacing($pacing);

// Create and set the partner revenue model.
$partnerRevenueModel =
    new Google_Service_DisplayVideo_PartnerRevenueModel();
$partnerRevenueModel->setMarkupType(
    'PARTNER_REVENUE_MODEL_MARKUP_TYPE_TOTAL_MEDIA_COST_MARKUP'
);
$partnerRevenueModel->setMarkupAmount(100);
$lineItem->setPartnerRevenueModel($partnerRevenueModel);

// Create and set the bidding strategy.
$demandGenBidStrategy =
    new Google_Service_DisplayVideo_DemandGenBiddingStrategy();
$demandGenBidStrategy->setType(
    'DEMAND_GEN_BIDDING_STRATEGY_TYPE_TARGET_CPA'
);
$demandGenBidStrategy->setValue(10000000);
$biddingStrategy = new Google_Service_DisplayVideo_BiddingStrategy();
$biddingStrategy->setDemandGenBid($demandGenBidStrategy);
$lineItem->setBidStrategy($biddingStrategy);

// Create and set the conversion counting config.
$conversionCountingConfig =
    new Google_Service_DisplayVideo_ConversionCountingConfig();
$conversionCountingConfig->setPostViewCountPercentageMillis(100000);
$trackingFloodlightActivityConfig =
    new Google_Service_DisplayVideo_TrackingFloodlightActivityConfig();
$trackingFloodlightActivityConfig->setFloodlightActivityId(
    $floodlightActivityId
);
$trackingFloodlightActivityConfig->setPostClickLookbackWindowDays(90);
$trackingFloodlightActivityConfig->setPostViewLookbackWindowDays(90);
$conversionCountingConfig->setFloodlightActivityConfigs(
    array($trackingFloodlightActivityConfig)
);
$lineItem->setConversionCounting($conversionCountingConfig);

// Create and set the Demand Gen settings.
$demandGenSettings =
    new Google_Service_DisplayVideo_DemandGenSettings();
$demandGenSettings->setGeoLanguageTargetingEnabled(false);
$lineItem->setDemandGenSettings($demandGenSettings);

// Call the API, creating the line item under the advertiser and
// insertion order given.
try {
    $result = $this->service->advertisers_lineItems->create(
        $advertiserId,
        $lineItem
    );
} catch (\Exception $e) {
    $this->renderError($e);
    return;
}

// Display the new line item.
printf('<p>Demand Gen line item %s was created.</p>', $result['name']);