175 lines
6.5 KiB
JavaScript
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: {}
|
|
});
|
|
}
|
|
})(); |