Open gglas opened 3 years ago
There may also be a use case in flooring, eg toss bids from a particular advertiser not above X.
It looks like clickUrl has been dropped out of this set. Just curious if that was intentional.
Check out the solution on #6453
@gglas would this fall under #6453 and we can then close this one out?
Status:
Here's a proposal: we define a general "bidresponse filter" module that allows publishers to set rules about which bids to accept:
pbjs.setConfig({
bidResponseFilter: {
sizeValidation: true,
nativeAssetValidation: false,
requiredMetaFields: ["advertiserDomains", "mediaType"]
}
});
These are relatively simple handlers publishers could just build themselves, but the module would have some value-add:
The currency module reports "NO_BID" right now when the bidResponse can't be converted. I think that could be improved by defining a new "REJECTED" status:
"STATUS": {
"GOOD": 1,
"NO_BID": 2,
"REJECTED": 3 // new
},
And then adding a new "statusReason" field that could be used by analytics adapters.
export function createBid(statusCode, identifiers, statusReason) {
return new Bid(statusCode, identifiers, statusReason);
}
Then we could update the currency module to use REJECTED instead of NO_BID with a statusReason of "unable to convert currency", which is a better response.
I think we should extend this allow rejections for banned advertiser, banned dsp, missing dchain, incomplete dchain, regex's on the markup. Potentially the new module could allow submodule(s) or plugins from vendors.
I think the last two comments sounds like requirements, marking ready for dev. Note all of this functionality could likely be acchieved with event hooks, the goal of the module is to simplify implementation.
Alternate proposal: an optional module can enforce ORTB "b" fields against what's in meta:
badv -> meta.advertiserDomains bcat -> meta.primaryCatId battr -> meta.attr ? (we'll probably need to define this fields)
Also, update ORTB conversion library to populate those meta fields;
for enforcing the presence of some fields (or sizes, etc) without necessarily having a "banned" list to filter, we could give publisher the option to filter bids via JS.
Marking ready for dev with the proposal in https://github.com/prebid/Prebid.js/issues/6345#issuecomment-1679409363 and the additional requirement that it is compatible with request or ad unit level 'b' fields
Additional requirement, the ortb convertor response processing should cody seatbid.bid.attr into meta.attr as an array of integers
tbd: how do we figure out bseat? should ortb convertor make meta.networkid = to something in the response?
related: pbs will preserve seat some day https://github.com/prebid/prebid-server/issues/2424
Seat can be repeated within a dsp, so bseat might be very hard to apply as it would only make sense within a given dsp.
Proposal: don't add support for bseat, nor do we support networkid. Later feature requests may cover these functions
This is a feature request for added functionality within the meta object of bidresponses.
As a result of https://github.com/prebid/Prebid.js/issues/3115 , we've implemented a standardized taxonomy within the Meta object in order to make gathering things like adomain and exchange provided metadata about their bidresponses easier to ingest and index in the course of running a prebid auction.
Now, the inevitable next step is to take these values and allow publishers to apply logic across them. Currently available meta fields include :
It is conceivable that publishers could desire any number of functions to apply across any number of fields within this object, including but not limited to :
From what I can tell, the initial use case is that we would want to support would be filtering (ie. removing from the auction) bids based on the presence of advertiserDomains -- removing bids from auction that lack the field entirely. This removes significant complexity from the project, as when logic can exist on multiple fields you need a hierarchy and ordering -- but that's not to say that this won't need to exist in the future (or is potentially a valid role for a real time module?)