Name
global.VAAISearchHelperVancouver
Description
No description available
Script
var VAAISearchHelperVancouver = Class.create();
/**
* Generates Genius result card response
*/
VAAISearchHelperVancouver.generateGeniusCardResponse = function(searchMetadata, geniusSearchResults, vaSystem, vaInputs, vaVars, vaContext, dynamicChoiceNodeName) {
var logger = VAAISearchHelperTokyo.getLogger(vaVars.loggingContext);
try {
return global.VAAISearchHelperVancouver.generateSearchCardResponse(
global.AISearchConstants.RESULT_TYPE_GENIUS, searchMetadata, geniusSearchResults, vaSystem, vaInputs, vaVars, vaContext, dynamicChoiceNodeName, 0);
} catch (ex) {
logger.error('VAAISearchHelperVancouver: Error generating genius card response: {0}', ex);
return "";
}
};
/**
* Generates Regular result card response
*/
VAAISearchHelperVancouver.generateSearchResultsResponse = function(searchMetadata, searchResults, vaSystem, vaInputs, vaVars, vaContext, dynamicChoiceNodeName) {
var logger = VAAISearchHelperTokyo.getLogger(vaVars.loggingContext);
logger.info('VAAISearchHelperVancouver: Generating search result response');
try {
var metadata = JSON.parse(searchMetadata);
var response = JSON.parse(searchResults);
// Only show first three search results - GroupedPartsOutMsg is limited to 3
var maxResults = VAAISearchHelperUtah.getRegularSearchDisplaySize(response);
for (var i = 0; i < maxResults; i++) {
var searchResult = response[i];
var propValues = searchResult.propValues;
var model = propValues.model;
if (model.sysId == vaInputs.display_options) {
var result = VAAISearchHelperTokyo.stripHighlightTags(JSON.stringify(searchResult));
return global.VAAISearchHelperVancouver.generateSearchCardResponse (
global.AISearchConstants.RESULT_TYPE_SEARCH, searchMetadata, result, vaSystem, vaInputs, vaVars, vaContext, dynamicChoiceNodeName, i);
}
}
return "";
} catch(ex) {
logger.error('VAAISearchHelperVancouver: Error generating search response: {0}', ex);
return "";
}
};
VAAISearchHelperVancouver.generateSearchCardResponse = function(resultType, searchMetadata, searchResults, vaSystem, vaInputs, vaVars, vaContext, dynamicChoiceNodeName, order) {
var metadata = JSON.parse(searchMetadata);
var searchResponse = JSON.parse(searchResults);
VAAISearchHelperTokyo.getLogger(vaVars.loggingContext).info('VAAISearchHelperVancouver: Generating search result - result type:{0}', resultType);
var cardCreator = global.VASearchCardCreatorFactoryVancouver.getCreator(resultType, metadata, searchResponse, vaSystem, vaInputs, vaVars, vaContext, order, dynamicChoiceNodeName);
// Special case for IAR
if (!gs.nil(searchResponse.auto_resolution_url))
cardCreator.setURL(searchResponse.auto_resolution_url);
return cardCreator.createCard();
};
VAAISearchHelperVancouver.calculateResultsToDisplay = function(vaSystem, vaInputs, vaVars, vaContext) {
var resultsToDisplay = "error";
try {
var errors = vaVars.errors;
if (gs.nil(vaVars.errors))
errors = [];
else {
errors = errors.split(',');}
var isError = vaVars.didFdihInvocationTimeOut ||
(gs.nil(vaVars.geniusResults) && gs.nil(vaVars.searchResults)) || errors.length > 0;
var isGeniusResult = global.VAAISearchHelperVancouver.shouldDisplayGeniusResult(vaVars.geniusResults, vaVars.loggingContext, vaContext);
var isRegularResult = !gs.nil(vaVars.searchResults);
if (isError)
resultsToDisplay = "error";
else if(isGeniusResult)
resultsToDisplay = "geniusResult";
else if(isRegularResult)
resultsToDisplay = "regularResult";
} catch (e) {
global.VAAISearchHelperTokyo.getLogger(vaVars.loggingContext).warn('Unable to calculate which results to display, falling back to error branch.');
}
return resultsToDisplay;
};
VAAISearchHelperVancouver.shouldDisplayGeniusResult = function(geniusSearchResults, loggingContext, vaContext) {
try {
if(gs.nil(geniusSearchResults))
return false;
var searchResponse = JSON.parse(geniusSearchResults);
var model = searchResponse.propValues.model;
if(searchResponse.template === 'sn-va-genius-person-card') {
return !gs.nil(model["columns.table"]) && !gs.nil(model["columns.sys_id"]);
} else if (searchResponse.template === 'sn-va-genius-catalog-card'){
return VAAISearchHelperVancouver.isCatalogOrKnowledgeSearchGeniusResultValid(searchResponse);
} else if(searchResponse.template === 'sn-va-genius-qa-card'){
// For GenAI results, additionally check if the device type is supported
var cardName = searchResponse.propValues.cardName.toString();
if (cardName == "GAIQACard") {
var hasGenAISupport = VAAISearchHelperVancouver.isGenAIGeniusResultSupportedOnDevice(searchResponse, vaContext, loggingContext);
if (!hasGenAISupport)
return false;
}
return VAAISearchHelperVancouver.isCatalogOrKnowledgeSearchGeniusResultValid(searchResponse);
} else {
return false;
}
} catch(ex){
VAAISearchHelper.getLogger(loggingContext).error(
'VAAISearchHelper: Error calculating whether to show genius result: {0}', ex);
return false;
}
};
VAAISearchHelperVancouver.isCatalogOrKnowledgeSearchGeniusResultValid = function(searchResponse) {
var model = searchResponse.propValues.model;
var header = searchResponse.propValues.identifier;
var description = searchResponse.propValues.description;
var table = model["columns.table"];
var sys_id = model["columns.sys_id"];
return (!gs.nil(table) && !gs.nil(sys_id)) || !gs.nil(header) || !gs.nil(description);
};
VAAISearchHelperVancouver.isGenAIGeniusResultSupportedOnDevice = function(searchResponse, vaContext, loggingContext) {
var hasGenAISupport = false;
var extensionPoints = new GlideScriptedExtensionPoint().getExtensions("global.NowAssistDeviceSupportExtensionPoint");
for (var i = 0; i < extensionPoints.length; i++) {
var currentResult = extensionPoints[i].isGenAIGeniusTemplateSupported(vaContext.deviceType);
hasGenAISupport = hasGenAISupport || currentResult;
}
VAAISearchHelper.getLogger(loggingContext).info("VAAISearchHelperVancouver: GenAI results supported on deviceType {0} : {1}", vaContext.deviceType, hasGenAISupport);
return hasGenAISupport;
};
VAAISearchHelperVancouver.createResultMap = function(searchMetadata, searchResults, vaSystem, vaInputs, vaVars, vaContext) {
var logger = VAAISearchHelperTokyo.getLogger(vaVars.loggingContext);
try {
var response = JSON.parse(searchResults);
var groupedResultsMap = {};
var maxResults = VAAISearchHelperUtah.getRegularSearchDisplaySize(response);
for (var i = 0; i < maxResults; i++) {
var sysId = response[i].propValues.model.sysId;
var title = VAAISearchHelperVancouver.buildSearchTitle(response[i].propValues, vaContext);
groupedResultsMap[sysId] = GlideStringUtil.unEscapeHTML(title);
// create SEARCH_RESULT_DISPLAYED event.
// This createResultMap method can be called multiple times.
// So, we need to rely on this flag to avoid sending the same payload multiple times.
var shouldSend = vaVars.sendDisplayedSearchResultClickMetricsEvent;
if (!gs.nil(shouldSend) && shouldSend) {
var searchResult = response[i];
var metadata = JSON.parse(searchMetadata);
VAAISearchClickMetricsURLHelper.createDisplayedSearchResultEventMetrics(metadata, searchResult, vaSystem, vaInputs, vaVars, i);
}
}
return groupedResultsMap;
} catch(ex) {
logger.error('VAAISearchHelperVancouver: Error generating regular search result map: {0}', ex);
// Return any links that have been successfully generated
return groupedResultsMap;
}
};
VAAISearchHelperVancouver.buildSearchTitle = function(props, vaContext) {
var titleParts = [];
var titleFields = [
"prefix",
"titleEmoji",
"title"
];
for (var i in titleFields) {
var titleField = titleFields[i];
var titleFieldValue = props[titleField];
if (!gs.nil(titleFieldValue)) {
// Translate the prefix field
if (titleField == "prefix") {
if (titleFieldValue == "(Catalog)")
titleFieldValue = gs.getMessageLang("(Catalog)", vaContext.getRequesterLang());
if (titleFieldValue == "(People)")
titleFieldValue = gs.getMessageLang("(People)", vaContext.getRequesterLang());
if (titleFieldValue == "(KB)")
titleFieldValue = gs.getMessageLang("(KB)", vaContext.getRequesterLang());
}
titleParts.push(titleFieldValue);
}
}
var title = titleParts.join(" ");
return VAAISearchHelperTokyo.stripHighlightTags(title);
};
VAAISearchHelperVancouver.processSearchHelpfulMetrics = function(searchMetadata, vaSystem, vaInputs, vaVars) {
if (!global.VAClickMetrics.isAISearchClickMetricsAllowed())
return {};
var collector = new global.VAAISearchHelpfulMetricCollector(JSON.parse(searchMetadata), vaSystem, vaInputs, vaVars);
collector.collect();
collector.sendOutMetrics();
};
VAAISearchHelperVancouver.processSearchFallbackMetrics = function(searchMetadata, vaSystem, vaInputs, vaVars) {
if (!global.VAClickMetrics.isAISearchClickMetricsAllowed())
return {};
var collector = new global.VAAISearchFallbackMetricCollector(JSON.parse(searchMetadata), vaSystem, vaInputs, vaVars);
collector.collect();
collector.sendOutMetrics();
};
VAAISearchHelperVancouver.processSearchCatalogRequestedMetrics = function(searchMetadata, vaSystem, vaInputs, vaVars) {
if (!global.VAClickMetrics.isAISearchClickMetricsAllowed())
return {};
var collector = new global.VAAISearchCatalogRequestedMetricCollector(JSON.parse(searchMetadata), vaSystem, vaInputs, vaVars);
collector.collect();
collector.sendOutMetrics();
};
Sys ID
472edd7deb116110506f7558b5522896