in lambda/es-proxy-layer/lib/query.js [376:479]
function update_res_with_hit(req, res, hit) {
res.result = hit;
res.type = "PlainText";
res.message = res.result.a;
res.plainMessage = res.result.a;
// add question defined session attributes to res with the exception of qnabotcontext and appContext
if (_.get(hit, "sa")){
hit.sa.map(obj=>{
_.set(res, `session.${obj.text}`, obj.value);
})
}
// Add tags to the res object
const tags = _.get(hit, "tags");
if (tags){
_.set(res, 'tags', tags);
}
// Add answerSource for query hits
var ansSource = _.get(hit, "answersource", "unknown");
if (ansSource==="Kendra FAQ") { // kendra fallback sets answerSource directly
res.answerSource = "KENDRA FAQ";
} else if (ansSource==="ElasticSearch" || ansSource==="ElasticSearch Fallback") {
res.answerSource = "ELASTICSEARCH";
} else {
res.answerSource = ansSource;
}
// Add alt messages to appContext session attribute JSON value (for lex-web-ui)
var tmp;
try {
tmp=JSON.parse(_.get(res,"session.appContext","{}"));
} catch(e) {
tmp=_.get(res,"session.appContext","{}");
}
tmp.altMessages=_.get(res, "result.alt", {});
_.set(res, "session.appContext",tmp);
// Add reprompt
var rp = _.get(res, "result.rp");
if (rp) {
var type = 'PlainText';
if (rp.includes("<speak>")) {
type = 'SSML';
rp = rp.replace(/\r?\n|\r/g, ' ');
}
_.set(res, "reprompt",{type, text : rp });
}
if (req._preferredResponseType == "SSML") {
if (_.get(res, "result.alt.ssml")) {
res.type = "SSML";
res.message = res.result.alt.ssml.replace(/\r?\n|\r/g, ' ');
}
}
qnabot.log(res.message);
var card = _.get(res, "result.r.title") ? res.result.r : null;
if (card) {
if (res.card === undefined) {
res.card = {};
}
res.card.send = true;
res.card.title = _.get(card, 'title');
res.card.subTitle = _.get(card, 'subTitle');
res.card.imageUrl = _.get(card, 'imageUrl');
res.card.buttons = _.get(card, 'buttons');
}
var previousQid = _.get(res, "session.qnabotcontext.previous.qid", false);
var navigationJson = _.get(res, "session.qnabotcontext.navigation", false);
var previousArray = _.get(res, "session.qnabotcontext.navigation.previous", []);
if (
previousQid != _.get(res.result, "qid") &&
_.get(navigationJson, "hasParent", true) == false &&
req._info.es.type == 'qna') {
if (previousArray.length == 0) {
previousArray.push(previousQid);
} else if (previousArray[previousArray.length - 1] != previousQid) {
previousArray.push(previousQid);
}
}
if (previousArray.length > 10) {
previousArray.shift();
}
var hasParent = true;
if ("next" in res.result) {
hasParent = false;
}
_.set(res,"session.qnabotcontext.previous", {
qid: _.get(res.result, "qid"),
q: req.question
}) ;
_.set(res,"session.qnabotcontext.navigation", {
next: _.get(res.result, "next", _.get(res, "session.qnabotcontext.navigation.next", "")),
previous: previousArray,
hasParent: hasParent
}) ;
res.session.qnabot_qid = _.get(res.result, "qid", "") ;
res.session.qnabot_gotanswer = (res['got_hits'] > 0) ? true : false ;
return res;
}