Closed bretg closed 4 years ago
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.
We discussed this last week and determined that we would add a “onBeforeRequestBids” external event and pass through args for mutation.
The proposal is that this event will be fired after conditional adunit processing but before adunits are copied to bidrequests. It will pass in the array of adunits and allow the page function to alter the contents.
For example:
var setPbAdSlot = function setPbAdSlot(adunits) {
console.log('setPbAdSlot called');
... logic to find and set context.pbAdSlot for each AdUnit ...
};
pbjs.onEvent('onBeforeRequestBids', setPbAdSlot);
Proposal is that we limit this to cover just the stated use case. We call the event onBeforeRequestBids
and it fires just before copying the adunits to the bidRequest object.
If there are other use cases in the future that require updating the ad units before conditional logic, that person can figure out the details.
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.
For the record, this is done in PBJS. PBS doesn't need changes unless an adapter wants to pass the value through their endpoint on a different attribute.
For the record, just found that the implementation was slightly mismatched from the original spec.
Originally the openrtb definition was imp[].ext.context.data.adslot, but it got implemented in pbsBidAdapter as imp[].ext.context.data.pbadslot.
Changing the spec and PBS because that's easier than upgrading clients to a patched PBJS.
Feature Overview
The Prebid AdUnit 'code' is a mixed attribute that can be either the GPT slot name or the div ID. The undecided nature of this value makes the 'code' harder to utilize for reporting and targeting.
This feature proposes a resolution to the long-running issue of the confusing AdUnit
code
value by establishing conventions for passing in something more descriptive and stable. It's optional for publishers to use it, and Bid Adapters and Analytics Adapters will not need to change unless they want to take advantage of the more stable field.Details
Currently, Prebid.js doesn't link the adunit to ad ad server slot until after the auction -- it happens during the call to set the targeting. But since the pbAdSlot may be the ad slot name, we need to know the GPT slot before the auction.
What's proposed is a new Prebid.js hook that gives publishers the option to define and utilize a pbAdSlot. A possible source of the pbAdSlot is a hunt-path like:
However, publishers are likely to want to customize the definition of Prebid Ad Slot in a number of ways, e.g.
So any approach will need to be flexible. Instead of defining a complex module that implements a mini-compiler capable of delivering the necessary flexibility, we propose providing a generic hook in Prebid.js auction processing and reference functions that publishers can modify to work for their scenarios.
Business Case
Prebid has come a long way from its humble beginnings as a set of open-source javascript tools for header bidding. Today, Prebid is a core system within the ad stack, and publishers are asking Prebid to be able to do more: provide robust reporting, centralize common functions like pricing and ad quality controls, and target PMP deals. Power users of Prebid are learning that the wrapper performs best when its configuration can be fine tuned to suit the inventory it serves, and want the wrapper to be able to respond dynamically to the characteristics of each page view.
This set of enhancements require a system for inventory classification and segmentation that resembles what one would find in an ad server or exchange. Publishers, for example, maintain different pricing restrictions for differing segments of inventory, and therefore construct detailed pricing control schemes using inventory targeting. Today, these controls must be duplicated across multiple demand partner interfaces, and publishers are looking to see it be centralized to the wrapper. To provide this feature, the wrapper must also be able to address specific segments of inventory and set unique pricing controls for each.
There are many use cases for Ad Slot; the primary near term use is reporting. The growth of Prebid-centric analytics solutions such as Roxot, Pubwise, Rivr, and many others demonstrates the value that Prebid offers as a home for consolidated reporting on the a publisher’s programmatic business.
Where Prebid falls short today in reporting is its limited ability to provide granular, flexible inventory segmentation. Prebid’s existing inventory object, the adUnit, cannot meet these requirements because it contains a verbose list of required inventory and bidder attributes. Each ad unit created adds a significant amount to Prebid’s overall payload. For publishers with large and complex networks, segmenting inventory with adUnit is not feasible.
Prebid clearly needs a more robust inventory management structure in order to meet the use cases stated above, but developing it and driving its adoption is no small task. For that reason, the initial implementation is highly flexible, allowing publishers to insert any string that they use to identify inventory for inventory segmentation today. For the majority of users, this will be the Google Ad Manager Ad Unit Path. The GAM Ad Unit has the benefit of being easily parseable, allowing reporting and targeting systems to take advantage of its hierarchy to allow publishers to group and subdivide inventory quickly and easily. Over time, the Prebid Ad Slot could evolve into a more robust, stand alone system.
Requirements
Proposed Interfaces
1) The pbAdSlot attribute is added to the Prebid Ad Unit in the First Party Data context.
2) Configuration allows the page to define pre-auction filter functions:
3) The Prebid Server Bid Adapter must be able to pass the Prebid AdSlot through the OpenRTB request in imp[].ext.context.data.pbadslot: