Name
global.VAAISearchHelperTokyo
Description
No description available
Script
var VAAISearchHelperTokyo = Class.create();
VAAISearchHelperTokyo.REGULAR_SEARCH_DISPLAY_MAX_LIMIT = 3;
VAAISearchHelperTokyo.GENIUS_SEARCH_DISPLAY_MAX_LIMIT = 1;
VAAISearchHelperTokyo.filterResultsForLoggedInUser = function(searchResults, vaSystem, loggingContext) {
return VAAISearchHelper.filterResultsForLoggedInUser(searchResults, vaSystem, loggingContext);
};
VAAISearchHelperTokyo.isSearchSuccessful = function(searchResults) {
return VAAISearchHelper.isSearchSuccessful(searchResults);
};
VAAISearchHelperTokyo.processResults = function(searchResults, vaSystem, vaInputs, vaVars) {
var results = JSON.parse(searchResults);
vaSystem.setAtlasSearchPerformed();
var result = results.result[0];
var executionResult = result.executionResult;
var geniusSearchResults = null;
var nonGeniusResults = null;
var searchMetadata = {};
searchMetadata.click_metrics = {};
searchMetadata.glide_signals = executionResult.searchMetadata;
// adding user_id and session_id to pass around user_id and session_id
// until the end of the flow for glide-signals's event tracking.
searchMetadata.is_logged_in = vaVars.is_logged_in;
searchMetadata.user_id = vaVars.user_id;
searchMetadata.session_id = vaVars.session_id;
var anyGeniusResults = executionResult.geniusResultsTemplates.items.length > 0;
if (anyGeniusResults)
geniusSearchResults = executionResult.geniusResultsTemplates.items[0];
var items = executionResult.searchResultsTemplates.items.slice(0, VAAISearchHelperTokyo.REGULAR_SEARCH_DISPLAY_MAX_LIMIT);
if (items.length > 0)
nonGeniusResults = items;
searchMetadata.search_id = VAClickMetrics.createGUID();
searchMetadata.search_result_count
= executionResult.geniusResultsTemplates.items.length + executionResult.searchResultsTemplates.items.length;
// the time taken reported by the payload.
searchMetadata.execution_time = result.executionTime;
// process the search result metrics.
VAAISearchHelperTokyo.processSearchResultMetrics(searchMetadata, geniusSearchResults, nonGeniusResults, vaSystem, vaInputs, vaVars);
var searchMetadataStr = !gs.nil(searchMetadata) ? JSON.stringify(searchMetadata) : null ;
var geniusResultsStr = !gs.nil(geniusSearchResults) ? JSON.stringify(geniusSearchResults) : null ;
var nonGeniusResultsStr = !gs.nil(nonGeniusResults) ? JSON.stringify(nonGeniusResults) : null;
return {
searchMetadata: searchMetadataStr,
geniusSearchResults: geniusResultsStr,
searchResults: nonGeniusResultsStr
};
};
/**
* Collects search results metrics and sends them out for relevancy training and VA dashboard
*/
VAAISearchHelperTokyo.processSearchResultMetrics = function(searchMetadata, geniusSearchResults, regularSearchResults, vaSystem, vaInputs, vaVars) {
// check if AI search click metrics is enabled or not.
if (!global.VAClickMetrics.isAISearchClickMetricsAllowed())
return {};
// handle genius search results.
var collector = new global.VAAISearchEventMetricCollector(searchMetadata, vaSystem, vaInputs, vaVars);
if (!gs.nil(geniusSearchResults))
collector.collect(global.AISearchConstants.RESULT_TYPE_GENIUS, geniusSearchResults);
if (!gs.nil(regularSearchResults)) {
// handle regular search results.
var maxResults = global.VAAISearchHelperTokyo.getRegularSearchDisplaySize(regularSearchResults);
for(i = 0; i < maxResults && i < regularSearchResults.length; i++)
collector.collect(global.AISearchConstants.RESULT_TYPE_SEARCH, regularSearchResults[i]);
}
collector.sendOutMetrics();
//returns the payload for verification
return collector.getPayload();
};
VAAISearchHelperTokyo.shouldDisplayGeniusResult = function(geniusSearchResults, loggingContext) {
return VAAISearchHelper.shouldDisplayGeniusResult(geniusSearchResults, loggingContext);
};
VAAISearchHelperTokyo.generateGeniusCardResponse = function(searchMetadata, geniusSearchResults, vaSystem, vaInputs, vaVars, dynamicChoiceNodeName) {
var metadata = JSON.parse(searchMetadata);
var searchResponse = JSON.parse(geniusSearchResults);
var index = 0;
VAAISearchHelperTokyo.getLogger(vaVars.loggingContext).info('Generating genius result');
var cardCreator = global.VASearchCardCreatorFactoryTokyo.getCreator(metadata, searchResponse, vaSystem, vaInputs, vaVars, index, dynamicChoiceNodeName);
// check if providing url
if (!gs.nil(searchResponse.auto_resolution_url))
cardCreator.setURL(searchResponse.auto_resolution_url);
return cardCreator.createCard();
};
VAAISearchHelperTokyo.generateSearchResultsResponse = function(searchMetadata, searchResults, header, vaSystem, vaInputs, vaVars, dynamicChoiceNodeName) {
var logger = VAAISearchHelperTokyo.getLogger(vaVars.loggingContext);
logger.info('Generating search result response');
try {
var metadata = JSON.parse(searchMetadata);
var response = JSON.parse(searchResults);
var groupedLinksOutMsg = new sn_cs.GroupedPartsOutMsg();
groupedLinksOutMsg.setHeader(header);
// Only show first three search results - GroupedPartsOutMsg is limited to 3
var maxResults = VAAISearchHelperTokyo.getRegularSearchDisplaySize(response);
for (i = 0; i < maxResults; i++) {
var searchResult = response[i];
var propValues = searchResult.propValues;
var model = propValues.model;
var url = "";
// able to provide url to override
if (!gs.nil(searchResult.auto_resolution_url)) {
url = searchResult.auto_resolution_url;
}
if (gs.nil(url)) {
if (!gs.nil(propValues.clickAction) && !gs.nil(propValues.clickAction.actionPayload)) {
var actionName = propValues.clickAction.name;
var actionPayload = propValues.clickAction.actionPayload;
url = !gs.nil(actionPayload.url) ? actionPayload.url : VAAISearchHelperTokyo.createURLByActionPayload(actionPayload.table, actionPayload.sysId, actionName, vaSystem, true, dynamicChoiceNodeName);
}
else
url = VAAISearchHelperTokyo.createURLByModel(model.table, model.sysId, vaSystem, true, dynamicChoiceNodeName);
}
// create a click metrics URL.
url = global.VAAISearchClickMetricsURLHelper.createSearchResultEventMetricsURL(metadata, searchResult, vaSystem, vaInputs, vaVars, url, i);
var context = VAAISearchHelperTokyo.buildSearchContext(propValues);
var title = VAAISearchHelperTokyo.buildSearchTitle(propValues);
var description = propValues.description;
logger.debug('Adding search result to response: title={0}, url={1}, description={2}, context={3}',
title, url, description, context);
groupedLinksOutMsg.addLinkPart(title, url, description, context);
}
return groupedLinksOutMsg;
} catch(ex) {
logger.error('VAAISearchHelperTokyo: Error generating search response: {0}', ex);
// Return any links that have been successfully generated
return groupedLinksOutMsg;
}
};
VAAISearchHelperTokyo.createURLByActionPayload = function(table, sysId, actionName, vaSystem, isRegularResults, dynamicChoiceNodeName) {
if (VAAISearchHelperTokyo.shouldUseSeismicPopup(table, sysId, isRegularResults))
return VAAISearchHelperTokyo.createSeismicPopupURL(sysId, vaSystem, dynamicChoiceNodeName);
return vaSystem.applyLinkTemplate(sysId, table, actionName);
};
VAAISearchHelperTokyo.createURLByModel = function(table, sysId, vaSystem, isRegularResults, dynamicChoiceNodeName) {
if (VAAISearchHelperTokyo.shouldUseSeismicPopup(table, sysId, isRegularResults))
return VAAISearchHelperTokyo.createSeismicPopupURL(sysId, vaSystem, dynamicChoiceNodeName);
return vaSystem.applyLinkTemplate(sysId, table);
};
VAAISearchHelperTokyo.shouldUseSeismicPopup = function(table, sysId, isRegularResults) {
var shouldUseSeismicPopup = false;
var isCatalogSupported = new sn_sc.CatalogConversationHelper().getConversationalRenderType(sysId, true);
if (table == "sc_cat_item" && (isCatalogSupported == "popup-seismic" || isCatalogSupported == "conversation"))
shouldUseSeismicPopup = true;
return shouldUseSeismicPopup;
};
VAAISearchHelperTokyo.createSeismicPopupURL = function(sysId, vaSystem, dynamicChoiceNodeName) {
var requestedFor = gs.getUserID();
var sessionId = vaSystem.getSessionIdOnConversation();
var conversationId = vaSystem.getConversationId();
var taskId = vaSystem.getConversationTaskId();
var baseUrl = gs.getProperty('glide.servlet.uri');
var seismicUrl = baseUrl + "now/virtual-agent/content/catalog/" + sysId + "/" + requestedFor + "/" + conversationId + "/" + taskId + "/" + sessionId + "/" + dynamicChoiceNodeName;
if(!gs.isLoggedIn())
seismicUrl += "/params/guestSessionIdentifier/"+ vaSystem.getGuestSessionIdentifier();
seismicUrl+= "/?referrer=popup&engagement_channel=va";
return seismicUrl;
};
// Create a context using the EVAM convention
VAAISearchHelperTokyo.buildSearchContext = function(props){
var contextParts = [];
var contextFields = [
'contextEmoji',
'contextSeparator1',
'context1',
'contextSeparator2',
'context2',
'contextSeparator3',
'context3'
];
for (var i in contextFields) {
var contextField = contextFields[i];
var contextFieldValue = props[contextField];
if (!gs.nil(contextFieldValue))
contextParts.push(contextFieldValue);
}
var context = contextParts.join(' ');
return VAAISearchHelperTokyo.stripHighlightTags(context);
};
VAAISearchHelperTokyo.buildSearchTitle = function(props) {
var titleParts = [];
var titleFields = [
"titleEmoji",
"title"
];
for (var i in titleFields) {
var titleField = titleFields[i];
var titleFieldValue = props[titleField];
if (!gs.nil(titleFieldValue))
titleParts.push(titleFieldValue);
}
var title = titleParts.join(" ");
return VAAISearchHelperTokyo.stripHighlightTags(title);
};
VAAISearchHelperTokyo.stripHighlightTags = function(text) {
return VAAISearchHelper.stripHighlightTags(text);
};
VAAISearchHelperTokyo.doesSearchResultsHaveItems = function(searchResults) {
if (gs.nil(searchResults))
return false;
var results = JSON.parse(searchResults);
var executionResult = results.result[0].executionResult;
var geniusResultItems = executionResult.geniusResultsTemplates.items;
var searchResultItems = executionResult.searchResultsTemplates.items;
return geniusResultItems.length > 0 || searchResultItems.length > 0;
};
/**
* Returns the display size for the regular search response.
* @param results : regular search results
* @return the allowed max search result number to display.
*/
VAAISearchHelperTokyo.getRegularSearchDisplaySize = function(results) {
//Only show first three search results - GroupedPartsOutMsg is limited to 3
var resultSize = gs.nil(results)? 0 : results.length;
return Math.min(resultSize, VAAISearchHelperTokyo.REGULAR_SEARCH_DISPLAY_MAX_LIMIT);
};
/**
* Returns the search application configuration Id found by search profile Id.
* @param profileId : the search profile Id. null is not allowed.
* @return the found search configuration id. null if not found.
*/
VAAISearchHelperTokyo.getSearchApplicationConfigurationIdBySearchProfileId = function(profileId) {
return VAAISearchHelper.getSearchApplicationConfigurationIdBySearchProfileId(profileId);
};
VAAISearchHelperTokyo.isSearchEnabled = function(loggingContext) {
var logger = VAAISearchHelperTokyo.getLogger(loggingContext);
var api = new sn_ais.StatusApi();
if (!api.isAisEnabled()){
logger.warn('AI Search is not enabled');
return false;
}
return true;
};
/**
* Creates a ScriptableGlideLogger instance with the passed context or creates a context using vaSystem
* @param vaSystem
* @param context
* @returns {sn_log.GlideLogger}
*/
VAAISearchHelperTokyo.getLogger = function(context) {
if (typeof context === 'string')
context = JSON.parse(context);
var context = context || VAAISearchHelperTokyo.getLoggingContext();
return new sn_log.GlideLogger('sn_cs.ai_search', context, Object.keys(context));
};
/**
* Creates a context map to be used by AI Search loggers
* @param vaSystem
* @returns {{app: string, track: string}}
*/
VAAISearchHelperTokyo.getLoggingContext = function(vaSystem) {
return VAAISearchHelper.getLoggingContext(vaSystem);
};
Sys ID
15ad3309ebd30110506f7558b552289b