-
Notifications
You must be signed in to change notification settings - Fork 2.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
First Party Data Revision #5795
Comments
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. |
What about ortb2 being an array call ortb, and each "ortbData" object having a .version property string. Then you could pass 2.x and 3.x and 4.x data through it? I know it sounds annoyingly complicated, but it matches some of the approach already in ORTB spec. |
@patmmccann and I discussed this. The goal is that the value of the object is pure OpenRTB. It doesn't make sense to put the version inside the object because then code wouldn't know what version it without parsing. Chicken-and-egg problem. Another approach is to have the version as a peer of the 'ortb' object. e.g. 'ortbVersion'. Then code that supports multiple versions would have to look at both values to figure out what to do. We ended up deciding the external version info didn't simplify, usage, reading, or transition. In fact, the hypothetical transition to ortb3 actually seemed a little better with the version right in the attribute name because then we have the option of allowing the publisher or a translation module to specify BOTH ortb2 and ortb3 concurrently. |
I updated the AdUnit-specific part of this from |
@mmoschovas has taken an initial cut at FPD 2.0. He found that several bid adapters are passing the FPD directly to their endpoints and parsing it there. Which means this could be a breaking change for these adapters, so we propose adding a reverse mapping directly in your adapters until you confirm your endpoints can handle the updated structure, at which time you can remove the conversion code from the adapter. Here is the list of bidders that copy out fpd from the config and pass it along as is.
So for example, here's how admixer passes it:
The proposal is to create a backwards-compatible global FPD data-structure in each by reading ortb2 config and:
If your adapter reads AdUnit-specific FPD, we'll create a backwards-compatible structure by reading ortb2Imp.ext.data and copying everything to fpd.context.data. In case you're reading pbAdSlot, which has moved, we'll copy ext.data.pbadslot to fpd.context.pbAdSlot Here is the list of bidders that read fpd.context and fpd.user separately from the config and pass them along in two pieces:
So for example:
We're proposing to do a similar compatibility conversion for these adapters -- once your endpoints support the updated location, you can remove the conversion code from your endpoints. We're not quite sure how to handle Audigent's HaloRTD module -- looks to us like it expects AdUnit.bid.fpd.user.data, which isn't a scenario we specifically supported. (We actually ruled out adunit-specific user FPD, but perhaps you instruct your customers to add it?) Adding @anthonylauzon. |
Can you provide more information about ad-unit user fpd issue? How is a bidder supposed to consume the site, user and ad-unit fpd segments and then combine them server-side? Wouldn't it make more sense to provide user fpd on the ad unit level if that is all that bidder is consuming? It sounds like what we actually want to do within the scope of this protocol is simply add fpd user data and avoid decorating ad units. Does that make sense? If so, I will update our module accordingly. |
@anthonylauzon - there isn't a right way. To be honest, the first design of this didn't make it easy since it wasn't based on OpenRTB. Which is why we're trying to align it.
Basically, the FPD page will be updated to something like this: If your protocol is OpenRTB-based, all you have to do to get the global FPD is merge in the ortb2 config:
Then to pull in the adunit-specific FPD, you would merge AdUnit.ortb2Imp into the specific imp[] object you're making for that adunit. |
Does this allow for dynamic ortb user segment data at the user level? How can I add user segment data to the fpd user's "segment" field without calling setConfig inside of the RTD module? |
@anthonylauzon - there's no way to set ortb2 without setConfig. See #6425 for a proposal -- mergeConfig. Closing this issue as FPD2 is live. Refinements to the RTD module interface can take place 6425 or other issues. |
Type of issue
Improvement
Description
The Taxonomy Taskforce has proposed a revision of Prebid's First Party Data (FPD) conventions for the following reasons:
context
and arbitrary FPD into intocontext.data
site
andsite.data
.site.**ext**.data
Since there are only ~10 bidders currently using the FPD conventions, we propose migrating FPD to a pure-OpenRTB format.
Proposal
Ad-Unit Specific FPD is likewise placed under 'ortb2Imp' in the AdUnit. It will get merged into imp[]. We recommend moving "context.data" to "ext.data".
We create a module to validate FPD:
Data permissioning stays the same: use of the
setBidderConfig()
function.Work Items
a) move adunit.fpd to adunit.ortb2
b) adUnit.ortb2Imp.ext.data.adserver.{name, adslot}
b) pbAdSlot moves to AdUnit.ortb2Imp.ext.data.pbadslot
a) merge the new
ortb2
andAdUnit.ortb2Imp.ext
objects into the OpenRTB JSON.b) therefore imp[].ext.context.data.pbadslot is now changed to imp[].ext.data.pbadslot (no context)
c) read adUnit.ortb2Imp.ext.data.adserver from the new location. Output location is moved to imp[].ext.data.adserver (no context)
a) merge imp[].ext.context.data.ATTR to imp[].ext.data.ATTR
b) Confirm that {site,app}.content.data[] and user.data[] are passed to adapters
c) Update PG targeting so that pbAdSlot can come in imp[].ext.data.pbadslot (no context)
d) Update PG targeting so adserver can come in imp[].ext.data.adserver (no context)
e) if user.data is an array, keep it as-is. If user.data is an object, to merge into user.ext.data and remove user.data.
Examples
Example Global FPD
Example AdUnit-specific FPD
The text was updated successfully, but these errors were encountered: