-
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
Proposal - expand "extra" bid support #8129
Comments
Added the ability to control which biddercodes are added by which bidders. The |
https://github.com/prebid/Prebid.js/pull/8193/files appears to be an example of this |
Hi @bretg @patmmccann , |
Conversation copied from the PR... Aliases are declared valid names that should be valid for bid adapters. This feature is about unexpected names in the response. So in the following example, both scenarios are valid:
For div-1, PBJS calls the pubmatic adapter due to the dynamic alias from foobar. Pubmatic sets "groupm" as the biddercode, which is considered ok because the adapter declares the alias. For div-2, PBJS calls the pubmatic adapter due to the hard-coded alias groupm. Pubmatic sets "groupm" as the biddercode, which is considered ok because that's the adapter name. Pubmatic could also choose to return "foobar" as a biddercode because the page set that up as a dynamic alias. Pubmatic could also choose to return "unexpected" as a biddercode because the page specifically set that up as an allowed code. Here are some things pubmatic couldn't return as a biddercode without being rejected: rubicon, unknown, avengers. So PBJS-core should allow the following as valid biddercodes: the actual biddercode |
Would bid adjustment functions on 'pubmatic' apply to 'groupm' responses in the response above @pm-harshad-mane ? It seems we should fallback(?) to the adapter code bid adjustment function if the bidder code bid adjustment is not defined? It seems this behavior might be considered breaking? It could be behind a flag and default to false to avoid the breaking change. It could be a global flag, or if there is demand, it could be an adapter flag? |
To clarify, the question above is about whether configuration |
@patmmccann @dgirardi I think, it should fallback to adapter code's |
For now, we have kept the fallback logic to the adapter's
If Scenario 2
If
Proposal Now if we maintain a flag at the adapter level it will add to the complexity since some bidders of the adapter might want to overwrite the settings and some won't or some of the bidders may opt-out of the settings completely. We might need to have a flag at the bidder level. |
@pm-azhar-mulla, the current approach only falls back to I don't know what makes sense - especially if a bid from the same SSP can come in through two different adapters. If I have:
and |
Made updates to the proposal above to flesh out details
|
Hi @bretg, |
@pm-azhar-mulla - that would be great. No more (planned) changes. |
HI @bretg, I have a couple of questions about the proposal 1. What should be the fallback mechanism for bidders Why I am asking this question?
I am raising this point just to get clarity. Can you please help me in understanding which fallback mechanism should we consider for 2. Which cpm adjustments should apply (existing bidder settings fallback) Currently, we are not supporting fall back mechanism for alias, if we make such a change to the core, current publishers who are using alias would break.
If we implement the fallback logic for cpmAdjustment, Workaround I hope this makes sense. Please let me know your thoughts, so I can proceed accordingly. |
You're right - the last example was wrong. Aliases don't matter - there's no fallback from aliases. Fixed the example. For the record, I checked the documentation for biddersettings and there's no mention of aliases in the current feature. I don't believe the code supports an alias fallback either, and your second question seems to confirm this. The only currently implemented fallback there is bidderCode-to-standard.
Agreed - adding alias fallback to this feature was not intended. Thanks for catching it. |
My understanding of In the terminology of this proposal that would be |
The algorithm noted above only covers the scenario where bidderCode (from the bid) and adapterCode (what was in the AdUnit) are different... the "unexpected" scenario. In that world, we didn't think 'bidderCode' would be in bidderSettings... it's unexpected, after all. |
prebid/prebid-server#2174 appears to solve for "Update the pbsBidAdapter to look in bidderSettings as well as s2sConfig and enforce allowedAlternateBidderCodes." Publishers do not need client side functionality to define this per request. @pm-harshad-mane how does this seem to you? |
Sounds good to me @patmmccann ! |
We discussed in committee and propose that PBJS will not enforce the This means that for now, the existing 'allowUnknownBidderCodes' is how pubs can validate/enforce what comes back from PBS. In the future, once PBS reports both seatbid.seat and seatbid.bid.ext.prebid.adapterCode, the PBS bid adapter could implement the allowAlternateBidderCodes logic. |
Type of issue
enhancement
Description
Related to:
There have been several use cases come up lately where bid adapters are multiplexing multiple demand sources behind the scenes. This is beyond the concept of "alias" in that the PBJS AdUnit may not contain the biddercode at all. Certainly in the case of the long-dreamed Prebid.less scenario, there wouldn't be a list of bidders defined client-side.
In some scenarios, this behavior warrants caution, as it could result in "bid jamming" -- a DSP seeing a given auction more than once. However, there are valid scenarios, so this issue proposes conventions and controls.
Conventions
We propose that two fields can manage this scenario:
Controls
The PBS "extra" bids feature established a flag to let publishers decide whether bidders not declared in the AdUnit can bid.
This flag defaults to
false
.Proposals
If allowAlternateBidderCodes is false for a given adapterCode, they may only bid for the biddercode that was in the adunit. Note: this is a breaking change because PBJS is not currently enforcing this rule.
If allowAlternateBidderCodes is true for a given adapterCode and no allowedAlternateBidderCodes is specifed, that adapter may bid for whatever bidderCode it wishes.
We assume that publisher-defined aliases are also set in the adunit, so no special treatment is needed.
Impacts
Because the "bidderCode" in PBJS has always meant "demand source", this change is mostly invisible to PBJS-core and other modules.
However, all of the enforcements in bidderSettings should be considered to be defined for BOTH the bidderCode and the adapterCode. i.e. everywhere one of the settings is enforced, PBJS core would need to check first for a matching bidderCode, and then for a matching adapterCode.
e.g.
In this config, adapterB is the tech platform. Say that adapter returns a bid response object declaring bidderA. It is allowed to do this because allowAlternateBidderCodes: true.
When PBJS-core looks up the bidCpmAdjustment and allowZeroCpmBids options, it first looks for bidderSettings.bidderA. In this case it finds them, so utilizes those values. If they weren't present, then it would look for 'adapterB' and utilize those values.
Reporting
It would be up to analytics adapters to utilize adapterCode if they wanted to be able to aggregate reporting.
Test Scenarios
AdUnit Contains: bidderA
BidResponse Contains: bidderA
Allowed? yes
Why? because a bidder can always bid for itself
AdUnit Contains: bidderA
BidResponse Contains: bidderX
Allowed? yes
Why? bidderSettings.bidderA.allowAlternateBidderCodes is true and bidderSettings.bidderA.allowedAlternateBidderCodes contains bidderX
AdUnit Contains: bidderAA
BidResponse Contains: bidderA
Allowed? No
Why? Even though bidderAA is defined as an alias of bidderA, it's not on bidderSettings.bidderA.allowedAlternateBidderCodes
AdUnit Contains: bidderC
BidResponse Contains: bidderJ
Allowed? No
Why? bidderSettings.bidderC does not specify allowAlternateBidderCodes. Standard.allowAlternateBidderCodes is false, so bidderC is not allowed to bid on behalf of anyone else.
AdUnit Contains: bidderBB
BidResponse Contains: bidderZ
Allowed? no
Why? Same as the above example - aliases don't matter here. bidderSettings is not defined for bidderBB, so it falls back to bidderSettings.standard.allowAlternateBidderCodes, which is false.
The text was updated successfully, but these errors were encountered: