iva-studio-workspace/copilot/_studio_dependencies/ProxyScript/messenger_667ef98d3ee8930a5debcbdb.js

175 lines
6.5 KiB
JavaScript

console.log('>>> messenger >>>') ;
console.log( { query: req.query, params: req.params, body: req.body }) ;
console.log('>>> messenger >>>') ;
const external = req.body.event?.external;
const sessionId = req.body.event?.conversationId;
const input = req.body.event?.input;
const params = req.body.event?.params || {};
const modelName = params?.modelName || settings_667ef98d3ee8930a5debcbdb.nlu.modelName;
const env = params?.env;
const postBack = req.body.event?.postBack;
const metadata = {
...req.body.event?.metadata,
userId: req.body.event?.sentBy?.userId
};
const configuration = req.body.event?.configuration;
(async () => {
try {
const smStr = `session-map-${sessionId}`;
if (external) {} else {
await axios.post(`${settings_667ef98d3ee8930a5debcbdb.messenger.apiBaseURL}Conversation/join`, {
_id: sessionId,
participant: {
userId: settings_667ef98d3ee8930a5debcbdb.messenger.participantId,
type: 'bot',
name: settings_667ef98d3ee8930a5debcbdb.messenger.name,
avatar: settings_667ef98d3ee8930a5debcbdb.messenger.avatar
}
}, {
headers: {
Authorization: `Bearer ${settings_667ef98d3ee8930a5debcbdb.messenger.token}`
}
}).then(response => {
if (response?.data?._id) {} else throw new Error();
});
axios.post(`${settings_667ef98d3ee8930a5debcbdb.messenger.apiBaseURL}Event/isTyping`, {
workspaceId: req.params.workspaceId,
conversationId: sessionId,
userId: settings_667ef98d3ee8930a5debcbdb.messenger.participantId,
typing: true
}, {
headers: {
Authorization: `Bearer ${settings_667ef98d3ee8930a5debcbdb.messenger.token}`
}
});
}
const sessionMap = await redis.hGetAll(smStr);
console.log(smStr);
console.log(sessionMap);
const recognizedData = await axios.post(`${settings_667ef98d3ee8930a5debcbdb.nlu.apiBaseURL}Model/run/${req.params.workspaceId}/${req.params.branch}/${modelName}`, {
input: input,
conversationId: sessionMap.conversationId,
settings: settings_667ef98d3ee8930a5debcbdb.nlu.settings,
metadata: metadata,
postBack: postBack,
configuration: configuration
}).then(response => {
return response.data;
}).catch(error => {
//If we have error handling turned off, don't record the error
if (settings_667ef98d3ee8930a5debcbdb.errorHandling === false) {
throw error;
} else {
// Conversation ID is generated by the NLU
// Must make sure Conversation ID is created properly for an error transaction
// Get it from session map if it exists, or generate it if we got the error at the very first transaction.
const conversationId = sessionMap.conversationId || uuidv4();
let errorPayload = {
id: uuidv4(),
workspaceId: req.params.workspaceId,
errorInfo: {
name: error.name,
message: error.message,
stack: error.stack
},
conversationId,
input,
answers: [settings_667ef98d3ee8930a5debcbdb.responses.modelError],
req: {
params: req.params,
query: req.query,
body: req.body,
headers: req.headers
},
metadata,
classificationResults: [{
label: "Model Error",
value: 0.0
}],
nerResults: {
entities: [],
sourceEntities: []
},
// Reporting tags to match GlobalSupport function reporting
tag: "ERROR",
reporting: {
tag: "ERROR",
modelResponse: "ERROR"
}
};
// Add model name
errorPayload.req.params.route = modelName;
//add any other details you wish to see in transaction data
return errorPayload;
}
});
// console.log(recognizedData);
if (recognizedData.conversationId) {
await redis.hSet(smStr, 'conversationId', recognizedData.conversationId);
await redis.expire(smStr, 3600);
if (sessionMap.conversationId) {} else {
db.analytics.addConversation({
id: recognizedData.conversationId
});
}
}
// NOTE: Additonal logic could be used to provide answer from alternative sources
// recognizedData.answers = API_RESPONSE || ['Example'];
if (recognizedData.tag === "ERROR") {} else if (recognizedData.classificationResults.length === 0 && recognizedData.answers.length === 0) {
recognizedData.answers = [settings_667ef98d3ee8930a5debcbdb.responses.unrecognized];
} else if (recognizedData.answers.length === 0) {
recognizedData.answers = [settings_667ef98d3ee8930a5debcbdb.responses.unanswered];
}
recognizedData._id = (await db.analytics.addTransaction(recognizedData)).insertedId;
if (external) {} else {
new Promise(async resolve => {
for (const [index, answer] of recognizedData.answers.entries()) {
try {
await axios.post(`${settings_667ef98d3ee8930a5debcbdb.messenger.apiBaseURL}Event/create`, {
conversationId: sessionId,
input: answer,
sentBy: {
userId: settings_667ef98d3ee8930a5debcbdb.messenger.participantId,
name: settings_667ef98d3ee8930a5debcbdb.messenger.name,
avatar: settings_667ef98d3ee8930a5debcbdb.messenger.avatar
},
ping: nanoid(),
sentAt: Date.now(),
options: recognizedData?.options,
metadata: {
outputs: recognizedData.answers.length == index + 1 ? recognizedData?.outputs : {},
transactionId: recognizedData._id,
feedbackable: false
}
}, {
headers: {
Authorization: `Bearer ${settings_667ef98d3ee8930a5debcbdb.messenger.token}`
}
});
} catch (e) {}
}
resolve(true);
});
axios.post(`${settings_667ef98d3ee8930a5debcbdb.messenger.apiBaseURL}Event/isTyping`, {
workspaceId: req.params.workspaceId,
conversationId: sessionId,
userId: settings_667ef98d3ee8930a5debcbdb.messenger.participantId,
typing: false
}, {
headers: {
Authorization: `Bearer ${settings_667ef98d3ee8930a5debcbdb.messenger.token}`
}
});
}
res.send(recognizedData);
} catch (error) {
console.log(error.message);
res.send({
answers: ['Something went wrong. Please try again.'],
outputs: {}
});
}
})();