Using Amazon Header Bidder with AMP

Implementation of Amazon Header Bidding in AMP.

The plugin can be implemented by providing an amazonbidder object to the player config:

var config = {
  plugins: {
    amazonbidder: {
      resources: [
        { src: "//c.amazon-adsystem.com/aax2/apstag.js", type: "text/javascript" },
        { src: "${paths.plugins}amazonbidder/Amazonbidder.js", debug: "${paths.plugins}amazonbidder/Amazonbidder.js", type: "text/javascript" }
      ],
      pubID: 1234,
      adServer: "DFP",
      slots: [{
        slotID: 'preroll',
        mediaType: 'video'
      }]
    }
  }
};
akamai.amp.AMP.create("amp", config);

Integrating Amazon bidder and Prebid through Ad Server implementation. This could be done by providing amazonbidder and prebid plugin with transformEnabled flag disabled, then the ad request transform must be added into player's readyHandler as follows.

var config = {
  plugins: {
    prebid: {
      transformEnabled: false,
      resources: [
        { src: "../akamai/amp/prebid/libs/prebid2.4.0.js", type: "text/javascript" },
        { src: "../akamai/amp/prebid/Prebid.js", type: "text/javascript" }
      ],
      adUnits: [{
        code: 'video1',
        mediaTypes: {
          video: {
            playerSize: [640, 480],
            context: 'instream'
          }
        },
        bids: [{
          bidder: 'spotx',
          params: {
            channel_id: 79391
          }
        }]
      }],
      options: {
        debug:true,
        cache: {
          url: 'https://prebid.adnxs.com/pbc/v1/cache'
        }
      }
    },
    amazonbidder: {
      transformEnbled: false,
      resources: [
        { src: "//c.amazon-adsystem.com/aax2/apstag.js", type: "text/javascript" },
        { src: "${paths.plugins}amazonbidder/Amazonbidder.js", debug: "${paths.plugins}amazonbidder/Amazonbidder.js", type: "text/javascript" }
      ],
      pubID: 1234,
      adServer: "DFP",
      slots: [{
        slotID: 'preroll',
        mediaType: 'video'
      }]
    }
  }
};

akamai.amp.AMP.create("amp", config).then((amp) => {
  amp.addTransform(akamai.amp.TransformType.AD_REQUEST, function (ad) {

    return Promise.all([
      amp.prebid.getAdTag().catch(e => null),
      amp.amazonbidder.getAdTag().catch(e => null)
    ])
    .then(results => {
     const master = results[0]
     const data = results[1]
       if (master) {
        ad.request.adTagUrl = master
        if (data) {
         ad.request.adTagUrl += "&scp=" + data;
        }
      }

      return ad;
    });
  });
});