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: {} }); } })();