@tiledesk/tiledesk-server 2.2.22 → 2.2.26
Sign up to get free protection for your applications and to get access to all the features.
- package/CHANGELOG.md +19 -1
- package/README.md +5 -0
- package/app.js +1 -1
- package/channels/chat21/chat21WebHook.js +1 -1
- package/config/email.js +1 -1
- package/config/labels/widget.json +781 -611
- package/event/messageEvent.js +4 -4
- package/middleware/has-role.js +1 -1
- package/middleware/passport.js +3 -3
- package/models/project_user.js +2 -0
- package/models/request.js +1 -1
- package/package.json +2 -2
- package/pubmodules/emailNotification/requestNotification.js +4 -4
- package/pubmodules/messageTransformer/messageHandlebarsTransformerInterceptor.js +3 -3
- package/pubmodules/messageTransformer/messageTransformerInterceptor.js +3 -3
- package/pubmodules/scheduler/tasks/closeBotUnresponsiveRequestTask.js +12 -3
- package/routes/department.js +1 -1
- package/routes/faq.js +1 -1
- package/routes/faq_kb.js +2 -3
- package/routes/message.js +1 -1
- package/routes/project.js +1 -1
- package/routes/project_user.js +11 -4
- package/routes/widget.js +1 -1
- package/services/departmentService.js +5 -4
- package/services/faqBotHandler.js +1 -1
- package/services/faqService.js +62 -29
- package/services/labelService-no-default.js +2 -2
- package/services/labelService.js +1 -1
- package/services/leadService.js +2 -2
- package/services/operatingHoursService.js +1 -1
- package/services/requestService.js +3 -3
- package/utils/sendMessageUtil.js +2 -2
- package/websocket/webSocketServer.js +10 -10
- package/services/faqBotSupport copy.js_consplit +0 -453
@@ -93,7 +93,7 @@ class WebSocketServer {
|
|
93
93
|
// winston.debug('ok websocket');
|
94
94
|
|
95
95
|
User.findOne({_id: identifier, status: 100}, 'email firstname lastname emailverified id')
|
96
|
-
.cache(cacheUtil.defaultTTL, "users:id:"+identifier)
|
96
|
+
//@DISABLED_CACHE .cache(cacheUtil.defaultTTL, "users:id:"+identifier)
|
97
97
|
.exec(function (err, user) {
|
98
98
|
|
99
99
|
|
@@ -176,7 +176,7 @@ class WebSocketServer {
|
|
176
176
|
|
177
177
|
|
178
178
|
return Project.findOne({ _id: projectId, status: 100})
|
179
|
-
.cache(cacheUtil.defaultTTL, "projects:id:"+projectId)
|
179
|
+
//@DISABLED_CACHE .cache(cacheUtil.defaultTTL, "projects:id:"+projectId)
|
180
180
|
.exec(function(err, project) {
|
181
181
|
if (err) {
|
182
182
|
winston.error('WebSocket - Error getting Project', err);
|
@@ -197,7 +197,7 @@ class WebSocketServer {
|
|
197
197
|
|
198
198
|
|
199
199
|
Project_user.findOne({ id_project: projectId, id_user: req.user._id, $or:[ {"role": "agent"}, {"role": "admin"}, {"role": "owner"}], status: "active" })
|
200
|
-
.cache(cacheUtil.defaultTTL, projectId+":project_users:role:teammate:"+req.user._id)
|
200
|
+
//@DISABLED_CACHE .cache(cacheUtil.defaultTTL, projectId+":project_users:role:teammate:"+req.user._id)
|
201
201
|
.exec(function (err, projectuser) {
|
202
202
|
if (err) {
|
203
203
|
winston.error('WebSocket error getting Project_user', err);
|
@@ -266,7 +266,7 @@ class WebSocketServer {
|
|
266
266
|
|
267
267
|
|
268
268
|
Project_user.findOne({ id_project: projectId, id_user: req.user._id, $or:[ {"role": "agent"}, {"role": "admin"}, {"role": "owner"}], status: "active"})
|
269
|
-
.cache(cacheUtil.defaultTTL, projectId+":project_users:role:teammate:"+req.user._id)
|
269
|
+
//@DISABLED_CACHE .cache(cacheUtil.defaultTTL, projectId+":project_users:role:teammate:"+req.user._id)
|
270
270
|
.exec(function (err, projectuser) {
|
271
271
|
if (err) {
|
272
272
|
winston.error('WebSocket error getting Project_user', err);
|
@@ -315,7 +315,7 @@ class WebSocketServer {
|
|
315
315
|
.limit(lastRequestsLimit)
|
316
316
|
// DISABLED 23Marzo2021 per problema request.snapshot.requester.isAuthenticated = undefined
|
317
317
|
.lean() //https://www.tothenew.com/blog/high-performance-find-query-using-lean-in-mongoose-2/ https://stackoverflow.com/questions/33104136/mongodb-mongoose-slow-query-when-fetching-10k-documents
|
318
|
-
.cache(cacheUtil.queryTTL, projectId+":requests:query:status-50-1000:preflight-false:select_snapshot_agents:"+cacheUserId)
|
318
|
+
//@DISABLED_CACHE .cache(cacheUtil.queryTTL, projectId+":requests:query:status-50-1000:preflight-false:select_snapshot_agents:"+cacheUserId)
|
319
319
|
.exec(function(err, requests) {
|
320
320
|
|
321
321
|
if (err) {
|
@@ -381,7 +381,7 @@ class WebSocketServer {
|
|
381
381
|
|
382
382
|
//check if current user can see the data
|
383
383
|
Project_user.findOne({ id_project: projectId, id_user: req.user._id, $or:[ {"role": "agent"}, {"role": "admin"}, {"role": "owner"}], status: "active"})
|
384
|
-
.cache(cacheUtil.defaultTTL, projectId+":project_users:role:teammate:"+req.user._id)
|
384
|
+
//@DISABLED_CACHE .cache(cacheUtil.defaultTTL, projectId+":project_users:role:teammate:"+req.user._id)
|
385
385
|
.exec(function (err, currentProjectuser) {
|
386
386
|
if (err) {
|
387
387
|
winston.error('WebSocket error getting Project_user', err);
|
@@ -407,7 +407,7 @@ class WebSocketServer {
|
|
407
407
|
}
|
408
408
|
|
409
409
|
Project_user.findOne(query)
|
410
|
-
.cache(cacheUtil.defaultTTL, projectId+":project_users:users:"+userId)
|
410
|
+
// @DISABLED_CACHE .cache(cacheUtil.defaultTTL, projectId+":project_users:users:"+userId)
|
411
411
|
.exec(function (err, projectuser) {
|
412
412
|
if (err) {
|
413
413
|
winston.error('WebSocket error getting Project_user', err);
|
@@ -451,7 +451,7 @@ class WebSocketServer {
|
|
451
451
|
winston.debug(' query: ',query);
|
452
452
|
|
453
453
|
Project_user.findOne(query)
|
454
|
-
.cache(cacheUtil.defaultTTL, projectId+":project_users:"+puId)
|
454
|
+
// @DISABLED_CACHE .cache(cacheUtil.defaultTTL, projectId+":project_users:"+puId)
|
455
455
|
.exec(function (err, projectuser) {
|
456
456
|
if (err) {
|
457
457
|
winston.error('WebSocket error getting Project_user', err);
|
@@ -491,7 +491,7 @@ class WebSocketServer {
|
|
491
491
|
winston.debug(' query: ',query);
|
492
492
|
|
493
493
|
EventModel.find(query)
|
494
|
-
.cache(cacheUtil.defaultTTL, projectId+":events:"+puId)
|
494
|
+
// @DISABLED_CACHE .cache(cacheUtil.defaultTTL, projectId+":events:"+puId)
|
495
495
|
.sort({createdAt: 'desc'})
|
496
496
|
.limit(lastEventsLimit)
|
497
497
|
.exec(function(err, events) {
|
@@ -518,7 +518,7 @@ class WebSocketServer {
|
|
518
518
|
winston.debug('recipientId: '+recipientId);
|
519
519
|
|
520
520
|
Project_user.findOne({ id_project: projectId, id_user: req.user._id, $or:[ {"role": "agent"}, {"role": "admin"}, {"role": "owner"}], status: "active" })
|
521
|
-
.cache(cacheUtil.defaultTTL, projectId+":project_users:role:teammate:"+req.user._id)
|
521
|
+
// @DISABLED_CACHE .cache(cacheUtil.defaultTTL, projectId+":project_users:role:teammate:"+req.user._id)
|
522
522
|
.exec(function (err, projectuser) {
|
523
523
|
if (err) {
|
524
524
|
winston.error('WebSocket error getting Project_user', err);
|
@@ -1,453 +0,0 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
'use strict';
|
4
|
-
|
5
|
-
const Faq = require('../models/faq');
|
6
|
-
const Faq_kb = require('../models/faq_kb');
|
7
|
-
const MessageConstants = require('../models/messageConstants');
|
8
|
-
var winston = require('../config/winston');
|
9
|
-
|
10
|
-
var jwt = require('jsonwebtoken');
|
11
|
-
const uuidv4 = require('uuid/v4');
|
12
|
-
|
13
|
-
const { TiledeskChatbotUtil } = require('@tiledesk/tiledesk-chatbot-util');
|
14
|
-
|
15
|
-
var request = require('retry-request', {
|
16
|
-
request: require('request')
|
17
|
-
});
|
18
|
-
|
19
|
-
|
20
|
-
var webhook_origin = process.env.WEBHOOK_ORIGIN || "http://localhost:3000";
|
21
|
-
winston.debug("webhook_origin: "+webhook_origin);
|
22
|
-
|
23
|
-
class FaqBotSupport {
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
getMessage(key, lang, labelsObject) {
|
29
|
-
|
30
|
-
|
31
|
-
if (!lang) {
|
32
|
-
lang = "EN";
|
33
|
-
}
|
34
|
-
|
35
|
-
lang = lang.toUpperCase();
|
36
|
-
|
37
|
-
winston.debug('getMessage: ' + key + ' ' + lang+ ' ' + JSON.stringify(labelsObject) );
|
38
|
-
|
39
|
-
var label = "";
|
40
|
-
|
41
|
-
try {
|
42
|
-
// winston.debug("1");
|
43
|
-
label = labelsObject[lang][key];
|
44
|
-
// winston.debug("2");
|
45
|
-
} catch(e) {
|
46
|
-
// winston.debug("Error", e);
|
47
|
-
label = labelsObject["EN"][key];
|
48
|
-
}
|
49
|
-
winston.debug('label: ' + label );
|
50
|
-
return label;
|
51
|
-
|
52
|
-
}
|
53
|
-
// usa api di sponziello parseReply: https://github.com/Tiledesk/tiledesk-nodejs-libs/blob/master/tiledesk-chatbot-util/index.js
|
54
|
-
|
55
|
-
parseMicrolanguage(text, message, bot, faq, disableWebHook, json) {
|
56
|
-
var that = this;
|
57
|
-
return new Promise(async (resolve, reject) => {
|
58
|
-
winston.info('parseMicrolanguage message: ' + JSON.stringify(message) );
|
59
|
-
|
60
|
-
winston.info('text: '+text);
|
61
|
-
var commands = TiledeskChatbotUtil.findSplits(text)
|
62
|
-
winston.info('commands: ' + JSON.stringify(commands) );
|
63
|
-
|
64
|
-
let messageReply;
|
65
|
-
// da mettere anche in microlanguage = true
|
66
|
-
if (commands.length > 1) {
|
67
|
-
commands.forEach(command => {
|
68
|
-
if (command.type === "message" && command.text != null) {
|
69
|
-
let replyCommand = TiledeskChatbotUtil.parseReply(command.text);
|
70
|
-
winston.info('replyCommand: ' + JSON.stringify(replyCommand) );
|
71
|
-
let messageCommandReply = replyCommand.message;
|
72
|
-
|
73
|
-
//TODO merge degli attributi dopo. fai lo stesso codice di giù
|
74
|
-
command.message = messageCommandReply;
|
75
|
-
}
|
76
|
-
});
|
77
|
-
|
78
|
-
messageReply = message.toObject();
|
79
|
-
messageReply.attributes = {commands: commands};
|
80
|
-
|
81
|
-
winston.info('messageReply: ' + JSON.stringify(messageReply) );
|
82
|
-
|
83
|
-
} else {
|
84
|
-
|
85
|
-
var reply = TiledeskChatbotUtil.parseReply(text);
|
86
|
-
winston.debug('parseReply: ' + JSON.stringify(reply) );
|
87
|
-
|
88
|
-
messageReply = reply.message;
|
89
|
-
|
90
|
-
}
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
var msg_attributes = {"_raw_message": text};
|
96
|
-
|
97
|
-
// prendi attributi e li mergi
|
98
|
-
// metadata prendi da messageReply SOLO SE CI SONO (DIVERSI NULL). Se riesci fai il merge
|
99
|
-
// prendi type e text
|
100
|
-
|
101
|
-
// if (message && message.attributes) {
|
102
|
-
// for(const [key, value] of Object.entries(message.attributes)) {
|
103
|
-
// msg_attributes[key] = value
|
104
|
-
// }
|
105
|
-
// }
|
106
|
-
|
107
|
-
if (json && json.attributes) {
|
108
|
-
for(const [key, value] of Object.entries(json.attributes)) {
|
109
|
-
msg_attributes[key] = value
|
110
|
-
}
|
111
|
-
}
|
112
|
-
|
113
|
-
if (messageReply && messageReply.attributes) {
|
114
|
-
for(const [key, value] of Object.entries(messageReply.attributes)) {
|
115
|
-
msg_attributes[key] = value
|
116
|
-
}
|
117
|
-
}
|
118
|
-
|
119
|
-
messageReply.attributes = msg_attributes;
|
120
|
-
|
121
|
-
// not used in faqBotHandler but used when the message is returned by webhook (subscription). So you must clone(add) all message fields here.
|
122
|
-
// winston.debug('message.language: '+ message.language );
|
123
|
-
// if (message.language) {
|
124
|
-
// messageReply.language = message.language;
|
125
|
-
// }
|
126
|
-
|
127
|
-
if (json && json.language) {
|
128
|
-
messageReply.language = json.language;
|
129
|
-
}
|
130
|
-
|
131
|
-
if (json && json.type) {
|
132
|
-
messageReply.type = json.type;
|
133
|
-
}
|
134
|
-
|
135
|
-
if (json && json.metadata) {
|
136
|
-
messageReply.metadata = json.metadata;
|
137
|
-
}
|
138
|
-
|
139
|
-
|
140
|
-
winston.debug('faq: ', faq );
|
141
|
-
if (disableWebHook === false && bot.webhook_enabled ===true && (faq.webhook_enabled === true ))
|
142
|
-
//|| reply.webhook))
|
143
|
-
{
|
144
|
-
|
145
|
-
winston.debug("bot.webhook_url "+ bot.webhook_url)
|
146
|
-
var webhookurl = bot.webhook_url;
|
147
|
-
|
148
|
-
|
149
|
-
// winston.debug("reply.webhook "+ reply.webhook )
|
150
|
-
|
151
|
-
// if (reply.webhook) {
|
152
|
-
// if (reply.webhook === true) {
|
153
|
-
webhookurl = bot.webhook_url;
|
154
|
-
// } else {
|
155
|
-
// webhookurl = reply.webhook;
|
156
|
-
// }
|
157
|
-
// }
|
158
|
-
|
159
|
-
if (!webhookurl) {
|
160
|
-
winston.debug("webhookurl is undefined return standard");
|
161
|
-
return resolve(messageReply);
|
162
|
-
}
|
163
|
-
|
164
|
-
var botWithSecret = await Faq_kb.findById(bot._id).select('+secret').exec();
|
165
|
-
|
166
|
-
var signOptions = {
|
167
|
-
issuer: 'https://tiledesk.com',
|
168
|
-
subject: 'bot',
|
169
|
-
audience: 'https://tiledesk.com/bots/'+bot._id,
|
170
|
-
jwtid: uuidv4()
|
171
|
-
};
|
172
|
-
|
173
|
-
// TODO metti bot_? a user._id
|
174
|
-
var token = jwt.sign(bot.toObject(), botWithSecret.secret, signOptions);
|
175
|
-
|
176
|
-
|
177
|
-
winston.debug("webhookurl "+ webhookurl)
|
178
|
-
|
179
|
-
return request({
|
180
|
-
uri : webhookurl,
|
181
|
-
headers: {
|
182
|
-
'Content-Type' : 'application/json',
|
183
|
-
'User-Agent': 'tiledesk-bot',
|
184
|
-
'Origin': webhook_origin
|
185
|
-
//'x-hook-secret': s.secret
|
186
|
-
},
|
187
|
-
method: 'POST',
|
188
|
-
json: true,
|
189
|
-
body: {payload:{text: text, bot: bot, message: message, intent: faq}, token: token},
|
190
|
-
// }).then(response => {
|
191
|
-
}, function(err, response, json){
|
192
|
-
if (err) {
|
193
|
-
winston.error("Error from webhook reply of getParsedMessage. Return standard reply", err);
|
194
|
-
|
195
|
-
return resolve(messageReply);
|
196
|
-
|
197
|
-
// return error
|
198
|
-
/*
|
199
|
-
var bot_answer = {};
|
200
|
-
bot_answer.text = err.toString();
|
201
|
-
if(response && response.text) {
|
202
|
-
bot_answer.text = bot_answer.text + ' '+response.text;
|
203
|
-
}
|
204
|
-
bot_answer.type = "text";
|
205
|
-
|
206
|
-
return resolve(bot_answer);
|
207
|
-
*/
|
208
|
-
}
|
209
|
-
if (response.statusCode >= 400) {
|
210
|
-
winston.verbose("The ChatBot webhook return error http status code. Return standard reply", response);
|
211
|
-
return resolve(messageReply);
|
212
|
-
}
|
213
|
-
|
214
|
-
if (!json) { //the webhook return empty body
|
215
|
-
winston.verbose("The ChatBot webhook return no json. Return standard reply", response);
|
216
|
-
return resolve(messageReply);
|
217
|
-
}
|
218
|
-
|
219
|
-
winston.debug("webhookurl repl_message ", response);
|
220
|
-
|
221
|
-
var text = undefined;
|
222
|
-
if(json && json.text===undefined) {
|
223
|
-
winston.verbose("webhookurl json is defined but text not. return standard reply",{json:json, response:response});
|
224
|
-
// text = 'Field text is not defined in the webhook respose of the faq with id: '+ faq._id+ ". Error: " + JSON.stringify(response);
|
225
|
-
return resolve(messageReply);
|
226
|
-
}else {
|
227
|
-
text = json.text;
|
228
|
-
}
|
229
|
-
winston.debug("webhookurl text: "+ text);
|
230
|
-
|
231
|
-
// // let cloned_message = Object.assign({}, messageReply);
|
232
|
-
// let cloned_message = message;
|
233
|
-
// winston.debug("cloned_message : ",cloned_message);
|
234
|
-
|
235
|
-
// if (json.attributes) {
|
236
|
-
// if (!cloned_message.attributes) {
|
237
|
-
// cloned_message.attributes = {}
|
238
|
-
// }
|
239
|
-
// winston.debug("ChatBot webhook json.attributes: ",json.attributes);
|
240
|
-
// for(const [key, value] of Object.entries(json.attributes)) {
|
241
|
-
// cloned_message.attributes[key] = value
|
242
|
-
// }
|
243
|
-
// }
|
244
|
-
|
245
|
-
// winston.debug("cloned_message after attributes: ",cloned_message);
|
246
|
-
|
247
|
-
that.parseMicrolanguage(text, message, bot, faq, true, json).then(function(bot_answer) {
|
248
|
-
return resolve(bot_answer);
|
249
|
-
});
|
250
|
-
});
|
251
|
-
}
|
252
|
-
|
253
|
-
return resolve(messageReply);
|
254
|
-
});
|
255
|
-
}
|
256
|
-
|
257
|
-
getParsedMessage(text, message, bot, faq) {
|
258
|
-
return this.parseMicrolanguage(text, message, bot, faq, false);
|
259
|
-
// return this.parseMicrolanguageOld(text, message, bot, faq);
|
260
|
-
}
|
261
|
-
|
262
|
-
// parseMicrolanguageOld(text, message, bot, faq) {
|
263
|
-
// var that = this;
|
264
|
-
// // text = "*"
|
265
|
-
// return new Promise(function(resolve, reject) {
|
266
|
-
// winston.debug("getParsedMessage ******",text);
|
267
|
-
// var repl_message = {};
|
268
|
-
|
269
|
-
// // cerca i bottoni eventualmente definiti
|
270
|
-
// var button_pattern = /^\*.*/mg; // buttons are defined as a line starting with an asterisk
|
271
|
-
// var text_buttons = text.match(button_pattern);
|
272
|
-
// if (text_buttons) {
|
273
|
-
// var text_with_removed_buttons = text.replace(button_pattern,"").trim();
|
274
|
-
// repl_message.text = text_with_removed_buttons
|
275
|
-
// var buttons = []
|
276
|
-
// text_buttons.forEach(element => {
|
277
|
-
// winston.debug("button ", element)
|
278
|
-
// var remove_extra_from_button = /^\*/mg;
|
279
|
-
// var button_text = element.replace(remove_extra_from_button, "").trim()
|
280
|
-
// var button = {}
|
281
|
-
// button["type"] = "text"
|
282
|
-
// button["value"] = button_text
|
283
|
-
// buttons.push(button)
|
284
|
-
// });
|
285
|
-
// repl_message.attributes =
|
286
|
-
// {
|
287
|
-
// attachment: {
|
288
|
-
// type:"template",
|
289
|
-
// buttons: buttons
|
290
|
-
// }
|
291
|
-
// }
|
292
|
-
// repl_message.type = MessageConstants.MESSAGE_TYPE.TEXT;
|
293
|
-
// } else {
|
294
|
-
// // no buttons
|
295
|
-
// repl_message.text = text
|
296
|
-
// repl_message.type = MessageConstants.MESSAGE_TYPE.TEXT;
|
297
|
-
// }
|
298
|
-
|
299
|
-
// var image_pattern = /^\\image:.*/mg;
|
300
|
-
// var imagetext = text.match(image_pattern);
|
301
|
-
// if (imagetext && imagetext.length>0) {
|
302
|
-
// var imageurl = imagetext[0].replace("\\image:","").trim();
|
303
|
-
// winston.debug("imageurl ", imageurl)
|
304
|
-
// var text_with_removed_image = text.replace(image_pattern,"").trim();
|
305
|
-
// repl_message.text = text_with_removed_image + " " + imageurl
|
306
|
-
// repl_message.metadata = {src: imageurl, width:200, height:200};
|
307
|
-
// repl_message.type = MessageConstants.MESSAGE_TYPE.IMAGE;
|
308
|
-
// }
|
309
|
-
|
310
|
-
// var frame_pattern = /^\\frame:.*/mg;
|
311
|
-
// var frametext = text.match(frame_pattern);
|
312
|
-
// if (frametext && frametext.length>0) {
|
313
|
-
// var frameurl = frametext[0].replace("\\frame:","").trim();
|
314
|
-
// winston.debug("frameurl ", frameurl)
|
315
|
-
// // var text_with_removed_image = text.replace(frame_pattern,"").trim();
|
316
|
-
// // repl_message.text = text_with_removed_image + " " + imageurl
|
317
|
-
// repl_message.metadata = {src: frameurl};
|
318
|
-
// repl_message.type = MessageConstants.MESSAGE_TYPE.FRAME;
|
319
|
-
// }
|
320
|
-
|
321
|
-
|
322
|
-
// var webhook_pattern = /^\\webhook:.*/mg;
|
323
|
-
// var webhooktext = text.match(webhook_pattern);
|
324
|
-
// if (webhooktext && webhooktext.length>0) {
|
325
|
-
// var webhookurl = webhooktext[0].replace("\\webhook:","").trim();
|
326
|
-
// winston.debug("webhookurl ", webhookurl)
|
327
|
-
|
328
|
-
// return request({
|
329
|
-
// uri : webhookurl,
|
330
|
-
// headers: {
|
331
|
-
// 'Content-Type': 'application/json'
|
332
|
-
// },
|
333
|
-
// method: 'POST',
|
334
|
-
// json: true,
|
335
|
-
// body: {payload:{text: text, bot: bot, message: message, faq: faq}},
|
336
|
-
// // }).then(response => {
|
337
|
-
// }, function(err, response, json){
|
338
|
-
// if (err) {
|
339
|
-
// bot_answer.text = err +' '+ response.text;
|
340
|
-
// bot_answer.type = MessageConstants.MESSAGE_TYPE.TEXT;
|
341
|
-
// winston.error("Error from webhook reply of getParsedMessage", err);
|
342
|
-
// return resolve(bot_answer);
|
343
|
-
// }
|
344
|
-
// // if (response.statusCode >= 400) {
|
345
|
-
// // return reject(`HTTP Error: ${response.statusCode}`);
|
346
|
-
// // }
|
347
|
-
// winston.debug("webhookurl repl_message ", response);
|
348
|
-
|
349
|
-
// var text = undefined;
|
350
|
-
// if(json && json.text===undefined) {
|
351
|
-
// text = 'Field text is not defined in the webhook respose of the faq with id: '+ faq._id+ ". Error: " + JSON.stringify(response);
|
352
|
-
// }else {
|
353
|
-
// text = json.text;
|
354
|
-
// }
|
355
|
-
|
356
|
-
|
357
|
-
// that.getParsedMessage(text,message, bot, faq).then(function(bot_answer) {
|
358
|
-
// return resolve(bot_answer);
|
359
|
-
// });
|
360
|
-
// });
|
361
|
-
|
362
|
-
// }else {
|
363
|
-
// winston.debug("repl_message ", repl_message)
|
364
|
-
// return resolve(repl_message);
|
365
|
-
// }
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
// });
|
370
|
-
// }
|
371
|
-
|
372
|
-
|
373
|
-
getBotMessage(botAnswer, projectid, bot, message, threshold) {
|
374
|
-
var that = this;
|
375
|
-
return new Promise(function(resolve, reject) {
|
376
|
-
|
377
|
-
winston.debug('botAnswer', botAnswer);
|
378
|
-
// var found = false;
|
379
|
-
var bot_answer={};
|
380
|
-
|
381
|
-
if (!botAnswer ) {
|
382
|
-
|
383
|
-
var query = { "id_project": projectid, "id_faq_kb": bot._id, "question": "defaultFallback"};
|
384
|
-
winston.debug('query', query);
|
385
|
-
|
386
|
-
|
387
|
-
Faq.find(query)
|
388
|
-
.lean(). //fai cache
|
389
|
-
exec(function (err, faqs) {
|
390
|
-
if (err) {
|
391
|
-
return res.status(500).send({ success: false, msg: 'Error getting object.' });
|
392
|
-
}
|
393
|
-
|
394
|
-
winston.debug("faqs", faqs);
|
395
|
-
|
396
|
-
if (faqs && faqs.length>0) {
|
397
|
-
winston.debug("faqs exact", faqs);
|
398
|
-
|
399
|
-
bot_answer.text=faqs[0].answer;
|
400
|
-
|
401
|
-
winston.debug("bot_answer exact", bot_answer);
|
402
|
-
// found = true;
|
403
|
-
// return resolve(bot_answer);
|
404
|
-
|
405
|
-
if (message.channel.name == "chat21") { //why this contition on chat21 channel? bacause only chat21 support parsed replies?
|
406
|
-
winston.debug("faqBotSupport message.channel.name is chat21",message);
|
407
|
-
that.getParsedMessage(bot_answer.text,message, bot, faqs[0]).then(function(bot_answerres) {
|
408
|
-
|
409
|
-
bot_answerres.defaultFallback=true;
|
410
|
-
|
411
|
-
return resolve(bot_answerres);
|
412
|
-
});
|
413
|
-
|
414
|
-
} else {
|
415
|
-
winston.debug("faqBotSupport message.channel.name is not chat21 returning default",message);
|
416
|
-
return resolve(bot_answer);
|
417
|
-
}
|
418
|
-
|
419
|
-
} else {
|
420
|
-
var message_key = "DEFAULT_NOTFOUND_NOBOT_SENTENCE_REPLY_MESSAGE";
|
421
|
-
bot_answer.text = that.getMessage(message_key, message.language, faqBotSupport.LABELS);
|
422
|
-
bot_answer.defaultFallback = true;
|
423
|
-
// console.log("bot_answer ", bot_answer)
|
424
|
-
return resolve(bot_answer);
|
425
|
-
}
|
426
|
-
});
|
427
|
-
}
|
428
|
-
|
429
|
-
|
430
|
-
});
|
431
|
-
|
432
|
-
}
|
433
|
-
|
434
|
-
|
435
|
-
|
436
|
-
}
|
437
|
-
|
438
|
-
|
439
|
-
var faqBotSupport = new FaqBotSupport();
|
440
|
-
|
441
|
-
faqBotSupport.LABELS = {
|
442
|
-
EN : {
|
443
|
-
DEFAULT_NOTFOUND_NOBOT_SENTENCE_REPLY_MESSAGE: "I did not find an answer in the knowledge base. \n Please reformulate your question?"
|
444
|
-
},
|
445
|
-
IT : {
|
446
|
-
DEFAULT_NOTFOUND_NOBOT_SENTENCE_REPLY_MESSAGE: "Non sono in grado di fornirti una risposta adeguata. \n Prego riformula la domanda."
|
447
|
-
},
|
448
|
-
"IT-IT" : {
|
449
|
-
DEFAULT_NOTFOUND_NOBOT_SENTENCE_REPLY_MESSAGE: "Non sono in grado di fornirti una risposta adeguata. \n Prego riformula la domanda."
|
450
|
-
}
|
451
|
-
}
|
452
|
-
|
453
|
-
module.exports = faqBotSupport;
|