Name

global.VAAISearchMetricCollector

Description

The base class for all AI Search Result metrics collectors.

Script

var VAAISearchMetricCollector = Class.create();

VAAISearchMetricCollector.prototype = {
  
  payload: null,
  isAllowed:false,
  searchResultMetadata:null,
  
  conversationId:null,
  conversationTaskId:null,
  
  paramBag: {}, // parameter bags for GideSignals' tracking event
  
  initialize: function(searchMetadata, vaSystem, vaInputs, vaVars) {
  	
  	this.payload = {};
  	this.payload.metadata = {};
  	
  	this.payload.metadata.glide_signals_event_type = this.getGlideSignalsEventType();
  	this.payload.metadata.is_logged_in = vaVars.is_logged_in;
  	
  	this.payload.metadata.search_id = searchMetadata.search_id;
  	this.payload.metadata.search_result_count = searchMetadata.search_result_count+'';
  	
  	
  	this.payload.glide_signals = {};
  	this.payload.click_metrics = {};
  	
  	this.isAllowed = global.VAClickMetrics.isAISearchClickMetricsAllowed();
  	
  	//if signal collection is not allowed, just return.
  	if (!this.isAllowed)
  		return;
  	
  	//VA click metrics attributes
  	var ts = vaVars.time;
  	
  	if(gs.nil(ts)) // if the start timestamp is not found, create one now.
  		ts = global.VAClickMetrics.getCurrentTime();
  	
  	this.setClickMetricsValue(global.VAClickMetricsConstants.KEY_TIME, ts);
  	
  	this.conversationId = vaSystem.getConversationId();
  	this.setClickMetricsValue(global.VAClickMetricsConstants.CONVERSATION_ID, this.conversationId);
  	
  	this.conversationTaskId = vaSystem.getConversationTaskId();
  	this.setClickMetricsValue(global.VAClickMetricsConstants.CONVERSATION_TASK_ID, this.conversationTaskId);
  	
  	this.setClickMetricsValue(global.VAClickMetricsConstants.KEY_SEARCH_TYPE, global.VAClickMetricsConstants.VALUE_AI_SEARCH);
  	
  	this.setParamBagForGlideSignalsEvent(global.AISearchConstants.USER_ID, this._getUserId(searchMetadata));
  	this.setParamBagForGlideSignalsEvent(global.AISearchConstants.SESSION_ID, searchMetadata.session_id);
  	
  	// sets the search profile Id.
  	var searchProfileId = vaSystem.getContextProfileId();
  	this.setParamBagForGlideSignalsEvent(global.AISearchConstants.SEARCH_PROFILE, searchProfileId);

  	// if searchContextId is not provided by the caller, 
  	// need to look up the right one with the provided search profile Id.
  	var searchContextId =  vaInputs.search_application_configuration.toString();

  	if (gs.nil(searchContextId))
  		searchContextId 
  			= global.VAAISearchHelper.getSearchApplicationConfigurationIdBySearchProfileId(searchProfileId);

  	this.setParamBagForGlideSignalsEvent(global.AISearchConstants.SEARCH_CONTEXT_CONFIG_ID, searchContextId);
  	this._setSearchResultMetadata(searchMetadata);
  	
  	// Query term.
  	var queryTerm = this.getQueryTerm(vaInputs);
  	this.setParamBagForGlideSignalsEvent(global.AISearchConstants.QUERY_TERM, queryTerm);
  },
  
  isOperationAllowed:function() {
  	return this.isAllowed;
  },
  
  getQueryTerm : function(vaInputs) {
  	
  	if (gs.nil(this.searchResultMetadata))
  		return vaInputs.search_term.toString();
  
  	return !gs.nil(this.searchResultMetadata.correctedSearchTerm)? 
  				this.searchResultMetadata.correctedSearchTerm : 
  					this.searchResultMetadata.searchTerm;
  },
  
  getGlideSignalsEventType: function() {
  	throw 'Need to implement';
  },
  
  _setSearchResultMetadata: function(searchMetadata) {
  	
  	if (gs.nil(searchMetadata))
  		return;
  	
  	var searchResultMetadata = searchMetadata.glide_signals.searchResultMetadata;
  	
  	if (gs.nil(searchResultMetadata))
  		return;
  	
  	this.searchResultMetadata = searchResultMetadata;
  	
  	this.postSearchResultMetadata(searchResultMetadata);
  },
  
  postSearchResultMetadata:function(searchResultMetadata) {
  	// do nothing. Need to be overridden by a subclass
  },
  
  getSearchResultMetadata: function() {
  	return this.searchResultMetadata;
  },
  
  sendOutMetrics: function() {
  	
  	if (!this.isAllowed)
  		return; 
  	
  	var payload = JSON.stringify(this.getPayload());
  	return global.VAClickMetrics.queueAISearchEvent(this.conversationId, this.conversationTaskId, payload);
  },
  
  getConversationId: function() {
  	return this.conversationId;
  },
  
  getConversationTaskId: function() {
  	return this.conversationTaskId;
  },
  
  getParamBagForGlideSignalsEvent: function() {
  	return this.paramBag;
  },
  
  getPayload: function() {
  	var payload = this.payload;
  	
  	// merge the glide signals payload in to the main payload.
  	payload.glide_signals = this.getGlideSignalsPayload();
  	
  	return payload;
  },
  
  getGlideSignalsPayload: function() {
  	throw 'Need to be implemented';
  },
  setParamBagForGlideSignalsEvent: function(name, val) {
  	this.setValue(this.paramBag, name, val);
  },
  setGlideSignalsValue: function(name, val) {
  	this.setValue(this.payload.glide_signals, name, val);
  },
  
  setClickMetricsValue: function(name, val) {
  	this.setValue(this.payload.click_metrics, name, val);
  },
  
  setValue: function(obj, name ,val) {
  	obj[name] = gs.nil(val)? '': val+''; 
  },
  
  _getUserId:function(searchMetadata) {
  	return searchMetadata.is_logged_in? searchMetadata.user_id: '';
  },
  
  type: 'VAAISearchMetricCollector'
};

Sys ID

396a40d153722010c440ddeeff7b12e5

Offical Documentation

Official Docs: