Using Omniture and Heartbeat analytics with AMP

Implementation of Omniture / Heartbeat analytics into AMP. The plugin can be implemented by providing an omniture object to the player config. Omniture can be configured with or without Heartbeat, and for both live and VOD content:

  1. Standard Omniture
var config = {
		plugins: {
	        omniture: {
	          resources: [
	            {src: "", type: "text/javascript", async: true},
	            {src: "#{paths.plugins}omniture/Omniture.min.js", debug: "#{paths.plugins}omniture/Omniture.js", type: "text/javascript", async: true}
	          ],
	          visitor: {
	            marketingCloudOrgId: "sample-id",
	            trackingServer: "sample.com"
	          },
	          sdk: [
	            {src: "", type: "text/javascript"}
	          ],
	          main: "",
	          account: "customer",
	          playerName: "Player",
	          debugTracking: true,
	          autoTrack: true,
	          trackLocal: true,
	          trackingServer: "customer",
	          trackingServerSecure: "customer",
	          trackWhilePlaying: true,
	          visitorNamespace: "customer",
	          currencyCode: "USD",
	          Media: {
	            trackVars: "prop14,prop15,prop51,prop53,eVar27",
	            trackEvents: "event21,event22,event23,event24,event37",
	            trackSecondIntervals: "60:300,300",
	            trackMilestones: [
	              {
	                percent: 25,
	                events: "event21"
	              }, {
	                percent: 50,
	                events: "event22"
	              }, {
	                percent: 75,
	                events: "event23"
	              }, {
	                percent: 100,
	                events: "event24"
	              }
	            ],
	            segmentByMilestones: true,
	            trackUsingContextData: false,
	            contextDataMapping: {
	              "a.media.name": "eVar19,prop14",
	              "a.media.segment": "eVar24",
	              "a.contentType": "eVar61",
	              "a.media.timePlayed": "event16",
	              "a.media.view": "event37",
	              "a.media.segmentView": "event36",
	              "a.media.complete": "event24",
	              "a.media.milestones": [
	                {
	                  percent: 25,
	                  events: "event21"
	                }, {
	                  percent: 50,
	                  events: "event22"
	                }, {
	                  percent: 75,
	                  events: "event23"
	                }
	              ]
	            }
	          },
	          customLinkTracking: {
	            videoStart: {
	              linkName: "video start",
	              events: "event4",
	              eVar3: "vidShow:vidSeason:vidTitle:vidFormat",
	              eVar15: "vidType",
	              eVar28: "vidPlaylist or vidSort",
	              eVar30: "vidFormat",
	              eVar31: "FSID",
	              eVar32: "vidSource",
	              eVar33: "vidNetworkName",
	              eVar34: "vidPlayerID",
	              eVar36: "vidID",
	              eVar41: "vidTitle | vidTotalTime",
	              eVar47: "vidShow",
	              eVar48: "vidSeason",
	              eVar49: "vidEpisodeNumber",
	              eVar50: "vidEmbeddedHost",
	              eVar60: "vidMVDP",
	              eVar61: "vidContentSubscriptionType",
	              eVar62: "vidSportsType",
	              eVar63: "vidHomeClub",
	              eVar64: "vidVisitingClub",
	              prop3: "D=v3",
	              prop15: "D=v15",
	              prop28: "D=v28",
	              prop30: "D=v30",
	              prop31: "D=v31",
	              prop32: "D=v32",
	              prop33: "D=v33",
	              prop34: "D=v34",
	              prop36: "D=v36",
	              prop41: "D=v41",
	              prop47: "D=v47",
	              prop48: "D=v48",
	              prop49: "D=v49",
	              prop50: "D=v50",
	              prop56: "D=v56",
	              prop60: "D=v60",
	              prop61: "D=v61",
	              prop62: "D=v62",
	              prop63: "D=v63",
	              prop64: "D=v64"
	            },
	            videoComplete: {
	              linkName: "video complete",
	              events: "event5,event72",
	              eVar3: "vidShow:vidSeason:vidTitle:vidFormat",
	              eVar15: "vidType",
	              eVar28: "vidPlaylist or vidSort",
	              eVar30: "vidFormat",
	              eVar31: "FSID",
	              eVar32: "vidSource",
	              eVar33: "vidNetworkName",
	              eVar34: "vidPlayerID",
	              eVar36: "vidID",
	              eVar41: "vidTitle | vidTotalTime",
	              eVar47: "vidShow",
	              eVar48: "vidSeason",
	              eVar49: "vidEpisodeNumber",
	              eVar50: "vidEmbeddedHost",
	              eVar60: "vidMVDP",
	              eVar61: "vidContentSubscriptionType",
	              eVar62: "vidSportsType",
	              eVar63: "vidHomeClub",
	              eVar64: "vidVisitingClub"
	            },
	            videoPause: {
	              linkName: "video pause",
	              events: "event72",
	              eVar3: "vidShow:vidSeason:vidTitle:vidFormat",
	              eVar15: "vidType",
	              eVar28: "vidPlaylist or vidSort",
	              eVar30: "vidFormat",
	              eVar31: "FSID",
	              eVar32: "vidSource",
	              eVar33: "vidNetworkName",
	              eVar34: "vidPlayerID",
	              eVar36: "vidID",
	              eVar41: "vidTitle | vidTotalTime",
	              eVar47: "vidShow",
	              eVar48: "vidSeason",
	              eVar49: "vidEpisodeNumber",
	              eVar50: "vidEmbeddedHost",
	              eVar60: "vidMVDP",
	              eVar61: "vidContentSubscriptionType",
	              eVar62: "vidSportsType",
	              eVar63: "vidHomeClub",
	              eVar64: "vidVisitingClub"
	            },
	            adStart: {
	              linkName: "ad start",
	              events: "event6",
	              eVar3: "vidShow:vidSeason:vidTitle:vidFormat",
	              eVar15: "vidType",
	              eVar28: "vidPlaylist or vidSort",
	              eVar30: "vidFormat",
	              eVar31: "FSID",
	              eVar32: "vidSource",
	              eVar33: "vidNetworkName",
	              eVar34: "vidPlayerID",
	              eVar36: "vidID",
	              eVar41: "vidTitle | vidTotalTime",
	              eVar47: "vidShow",
	              eVar48: "vidSeason",
	              eVar49: "vidEpisodeNumber",
	              eVar50: "vidEmbeddedHost",
	              eVar60: "vidMVDP",
	              eVar61: "vidContentSubscriptionType",
	              eVar62: "vidSportsType",
	              eVar63: "vidHomeClub",
	              eVar64: "vidVisitingClub",
	              eVar29: "vidAdvertiser",
	              eVar57: "vidAdvertisementTitle",
	              eVar58: "vidAdvertisementType",
	              eVar46: "vidAdvertisementPositionInPod",
	              prop29: "vidAdvertiser",
	              prop57: "vidAdvertisementTitle",
	              prop58: "vidAdvertisementPodPosition",
	              prop46: "vidAdvertisementPositionInPod"
	            },
	            adComplete: {
	              linkName: "ad complete",
	              events: "event7",
	              eVar3: "vidShow:vidSeason:vidTitle:vidFormat",
	              eVar15: "vidType",
	              eVar28: "vidPlaylist or vidSort",
	              eVar30: "vidFormat",
	              eVar31: "FSID",
	              eVar32: "vidSource",
	              eVar33: "vidNetworkName",
	              eVar34: "vidPlayerID",
	              eVar36: "vidID",
	              eVar41: "vidTitle | vidTotalTime",
	              eVar47: "vidShow",
	              eVar48: "vidSeason",
	              eVar49: "vidEpisodeNumber",
	              eVar50: "vidEmbeddedHost",
	              eVar60: "vidMVDP",
	              eVar61: "vidContentSubscriptionType",
	              eVar62: "vidSportsType",
	              eVar63: "vidHomeClub",
	              eVar64: "vidVisitingClub",
	              eVar29: "vidAdvertiser",
	              eVar57: "vidAdvertisementTitle",
	              eVar58: "vidAdvertisementPodPosition",
	              eVar46: "vidAdvertisementPositionInPod"
	            },
	            intervalReached: [{
	              interval: "60",
	              linkName: "video 1 min segment",
	              events: "event77,event72",
	              eVar3: "vidShow:vidSeason:vidTitle:vidFormat",
	              eVar15: "vidType",
	              eVar28: "vidPlaylist or vidSort",
	              eVar30: "vidFormat",
	              eVar31: "FSID",
	              eVar32: "vidSource",
	              eVar33: "vidNetworkName",
	              eVar34: "vidPlayerID",
	              eVar36: "vidID",
	              eVar41: "vidTitle | vidTotalTime",
	              eVar47: "vidShow",
	              eVar48: "vidSeason",
	              eVar49: "vidEpisodeNumber",
	              eVar50: "vidEmbeddedHost",
	              eVar60: "vidMVDP",
	              eVar61: "vidContentSubscriptionType",
	              eVar62: "vidSportsType",
	              eVar63: "vidHomeClub",
	              eVar64: "vidVisitingClub",
	              eVar29: "vidAdvertiser",
	              eVar57: "vidAdvertisementTitle",
	              eVar58: "vidAdvertisementPodPosition",
	              eVar46: "vidAdvertisementPositionInPod"
	            }, {
	              interval: "300",
	              linkName: "video 5 min segment",
	              events: "event78,event72",
	              eVar3: "vidShow:vidSeason:vidTitle:vidFormat",
	              eVar15: "vidType",
	              eVar28: "vidPlaylist or vidSort",
	              eVar30: "vidFormat",
	              eVar31: "FSID",
	              eVar32: "vidSource",
	              eVar33: "vidNetworkName",
	              eVar34: "vidPlayerID",
	              eVar36: "vidID",
	              eVar41: "vidTitle | vidTotalTime",
	              eVar47: "vidShow",
	              eVar48: "vidSeason",
	              eVar49: "vidEpisodeNumber",
	              eVar50: "vidEmbeddedHost",
	              eVar60: "vidMVDP",
	              eVar61: "vidContentSubscriptionType",
	              eVar62: "vidSportsType",
	              eVar63: "vidHomeClub",
	              eVar64: "vidVisitingClub",
	              eVar29: "vidAdvertiser",
	              eVar57: "vidAdvertisementTitle",
	              eVar58: "vidAdvertisementPodPosition",
	              eVar46: "vidAdvertisementPositionInPod"
	            }]
	          },
	          events: {
	            video: [{
	              type: "started",
	              data: {
	                events: "event37",
	                prop14: "Esquire: #{media.title}",
	                prop15: "Esquire",
	                prop51: "#{media.link}",
	                prop53: "VDO: Esquire: #{media.itle}",
	                eVar27: "#{player.name}"
	              }
	            }]
	          }
	        }
	      }
	};
var amp = akamai.amp.AMP.create("amp", config);
  1. Heartbeat SDK
var config = {
        plugins: {
          heartbeat: {
            enabled: true,
            resources: [
              {
                src: "#{paths.plugins}/omniture/libs/MediaSDK.min.js",
                type: "text/javascript",
                async: true
              },
              {
                src: "#{paths.plugins}/omniture/libs/VisitorAPI.js",
                type: "text/javascript",
                async: true
              },
              {
                src: "#{paths.plugins}/omniture/libs/AppMeasurement.js",
                type: "text/javascript",
                async: true
              },
              {
                src: "#{paths.plugins}/omniture/Omniture.js",
                type: "text/javascript"
              }
            ],
			appMeasurement: {
				account: "INSERT-RSID-HERE",
				trackingServer: "INSERT-TRACKING-SERVER-HERE",
				trackingServerSecure: "INSERT-TRACKING-SERVER-HERE"
			},
            visitor: {
              marketingCloudOrgId: "MARKETING_CLOUD_ID@AdobeOrg",
              trackingServer: "tracking.server.com",
              trackingServerSecure: "strack.go.com",
              marketingCloudServer: "track.go.com",
              marketingCloudServerSecure: "strack.go.com"
            },
            publisher: "MARKETING_CLOUD_ID@AdobeOrg",
            trackingServer: "track.hb.omtrdc.net",
            channel: "sample channel",
            ovp: "Akamai AMP",
            playerName: "AMP Test player"
          },
        }
      };

      akamai.amp.AMP.create("akamai-media-player", config, function (event) {
        amp = event.player;
      });
  1. Live linear Tracking - Heartbeat
var config = {
        plugins: {
          heartbeat: {
            resources: [
              {
                src: "#{paths.plugins}/omniture/libs/MediaSDK.min.js",
                type: "text/javascript",
                async: true
              },
              {
                src: "#{paths.plugins}/omniture/libs/VisitorAPI.js",
                type: "text/javascript",
                async: true,
              },
              {
                src: "#{paths.plugins}/omniture/libs/AppMeasurement.js",
                type: "text/javascript",
                async: true,
              },
              {
                src: "#{paths.plugins}/omniture/Omniture.js",
                type: "text/javascript"
              }
            ],
            liveLinear:{
              enabled: true,
              timezone: "-05:00"
            },
			appMeasurement: {
				account: "INSERT-RSID-HERE",
				trackingServer: "INSERT-TRACKING-SERVER-HERE",
				trackingServerSecure: "INSERT-TRACKING-SERVER-HERE"
			},
            visitor: {
              marketingCloudOrgId: "MARKETING_CLOUD_ID@AdobeOrg",
              trackingServer: "tracking.server.com",
              trackingServerSecure: "strack.go.com",
              marketingCloudServer: "track.go.com",
              marketingCloudServerSecure: "strack.go.com"
            },
            publisher: "MARKETING_CLOUD_ID@AdobeOrg",
            trackingServer: "track.hb.omtrdc.net",
            channel: "sample channel",
            ovp: "Akamai AMP",
            playerName: "AMP Test player",
			metadata: {
              video: {
                test: "foo",
              },
			  ad: {
				  advertiser:"advertise"
			  }
            },
            contextData:{
              programmer: "Sample programmer"
            }
          },
        }
      };

      akamai.amp.AMP.create("akamai-media-player", config, function (event) {
        amp = event.player;
      });