@tiledesk/tiledesk-server 2.2.23 → 2.2.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +22 -1
- package/README.md +6 -0
- package/app.js +73 -3
- package/bin/www +4 -1
- package/channels/chat21/chat21WebHook.js +1 -1
- package/config/email.js +1 -1
- package/config/global.js +2 -0
- 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.js +10 -0
- package/models/project_user.js +2 -0
- package/models/request.js +1 -1
- package/package.json +4 -3
- package/pubmodules/emailNotification/requestNotification.js +4 -4
- package/pubmodules/messageTransformer/messageHandlebarsTransformerInterceptor.js +3 -3
- package/pubmodules/messageTransformer/messageTransformerInterceptor.js +3 -3
- package/pubmodules/rules/conciergeBot.js +5 -2
- package/pubmodules/scheduler/tasks/closeBotUnresponsiveRequestTask.js +12 -3
- package/routes/department.js +1 -1
- package/routes/faq_kb.js +2 -3
- package/routes/labels.js +2 -0
- package/routes/message.js +1 -1
- package/routes/project.js +73 -1
- package/routes/project_user.js +11 -4
- package/routes/request.js +15 -0
- package/routes/user-request.js +15 -0
- 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/orgUtil.js +74 -0
- package/utils/sendMessageUtil.js +2 -2
- package/websocket/webSocketServer.js +10 -10
- package/services/faqBotSupport copy.js_consplit +0 -453
package/event/messageEvent.js
CHANGED
|
@@ -60,14 +60,14 @@ function populateMessageWithRequest(message, eventPrefix) {
|
|
|
60
60
|
populate('participatingBots').
|
|
61
61
|
populate('participatingAgents').
|
|
62
62
|
populate({path:'requester',populate:{path:'id_user'}}).
|
|
63
|
-
lean()
|
|
63
|
+
lean()
|
|
64
64
|
//perche lean?
|
|
65
65
|
// TODO availableAgentsCount nn c'è per il lean problema trigger
|
|
66
66
|
// request.department._id DA CORREGGERE ANCHE PER REQUEST.CREATE
|
|
67
67
|
// request.department.hasBot
|
|
68
68
|
// request.isOpen
|
|
69
|
-
cache(cacheUtil.defaultTTL, message.id_project+":requests:request_id:"+message.recipient)
|
|
70
|
-
exec(function (err, request) {
|
|
69
|
+
//@DISABLED_CACHE .cache(cacheUtil.defaultTTL, message.id_project+":requests:request_id:"+message.recipient)
|
|
70
|
+
.exec(function (err, request) {
|
|
71
71
|
|
|
72
72
|
if (err) {
|
|
73
73
|
winston.error("Error getting request on messageEvent.populateMessage",err );
|
|
@@ -83,7 +83,7 @@ function populateMessageWithRequest(message, eventPrefix) {
|
|
|
83
83
|
if (request.department && request.department.id_bot) {
|
|
84
84
|
// if (request.department) {
|
|
85
85
|
Faq_kb.findById(request.department.id_bot)
|
|
86
|
-
.cache(cacheUtil.defaultTTL, message.id_project+":faq_kbs:id:"+request.department.id_bot)
|
|
86
|
+
//@DISABLED_CACHE .cache(cacheUtil.defaultTTL, message.id_project+":faq_kbs:id:"+request.department.id_bot)
|
|
87
87
|
.exec(function(err, bot) {
|
|
88
88
|
winston.debug('bot', bot);
|
|
89
89
|
requestJson.department.bot = bot
|
package/middleware/has-role.js
CHANGED
|
@@ -138,7 +138,7 @@ class RoleChecker {
|
|
|
138
138
|
winston.debug("hasRoleOrType query " + JSON.stringify(query));
|
|
139
139
|
|
|
140
140
|
Project_user.findOne(query)
|
|
141
|
-
.cache(cacheUtil.defaultTTL, req.params.projectid+":project_users:id:"+req.user.id)
|
|
141
|
+
//@DISABLED_CACHE .cache(cacheUtil.defaultTTL, req.params.projectid+":project_users:id:"+req.user.id)
|
|
142
142
|
.exec(function (err, project_user) {
|
|
143
143
|
if (err) {
|
|
144
144
|
winston.error("Error getting project_user for hasrole",err);
|
package/middleware/passport.js
CHANGED
|
@@ -129,7 +129,7 @@ module.exports = function(passport) {
|
|
|
129
129
|
|
|
130
130
|
winston.debug("project id: "+ AudienceId );
|
|
131
131
|
Project.findOne({_id: AudienceId, status: 100}).select('+jwtSecret')
|
|
132
|
-
.cache(cacheUtil.queryTTL, "projects:query:id:status:100:"+AudienceId+":select:+jwtSecret")
|
|
132
|
+
//@DISABLED_CACHE .cache(cacheUtil.queryTTL, "projects:query:id:status:100:"+AudienceId+":select:+jwtSecret")
|
|
133
133
|
.exec(function (err, project){
|
|
134
134
|
if (err) {
|
|
135
135
|
winston.error("auth Project err: ", {error:err, decoded: decoded} );
|
|
@@ -317,7 +317,7 @@ module.exports = function(passport) {
|
|
|
317
317
|
} else {
|
|
318
318
|
winston.debug("Passport JWT generic user");
|
|
319
319
|
User.findOne({_id: identifier, status: 100})
|
|
320
|
-
.cache(cacheUtil.defaultTTL, "users:id:"+identifier)
|
|
320
|
+
//@DISABLED_CACHE .cache(cacheUtil.defaultTTL, "users:id:"+identifier)
|
|
321
321
|
.exec(function(err, user) {
|
|
322
322
|
if (err) {
|
|
323
323
|
winston.error("Passport JWT generic err ", err);
|
|
@@ -349,7 +349,7 @@ module.exports = function(passport) {
|
|
|
349
349
|
winston.debug("email lowercase: " + email);
|
|
350
350
|
|
|
351
351
|
User.findOne({ email: email, status: 100}, 'email firstname lastname password emailverified id')
|
|
352
|
-
.cache(cacheUtil.defaultTTL, "users:email:"+email)
|
|
352
|
+
//@DISABLED_CACHE .cache(cacheUtil.defaultTTL, "users:email:"+email)
|
|
353
353
|
.exec(function (err, user) {
|
|
354
354
|
|
|
355
355
|
if (err) {
|
package/models/project.js
CHANGED
|
@@ -101,6 +101,16 @@ var ProjectSchema = new Schema({
|
|
|
101
101
|
return [new Channel({ name: 'chat21' })];
|
|
102
102
|
}
|
|
103
103
|
},
|
|
104
|
+
organization: {
|
|
105
|
+
type: String,
|
|
106
|
+
},
|
|
107
|
+
ipFilterEnabled:{
|
|
108
|
+
type: Boolean,
|
|
109
|
+
default: false
|
|
110
|
+
},
|
|
111
|
+
ipFilter: [{
|
|
112
|
+
type: String
|
|
113
|
+
}],
|
|
104
114
|
// defaultLanguage: {
|
|
105
115
|
// type: String,
|
|
106
116
|
// required: true,
|
package/models/project_user.js
CHANGED
|
@@ -5,6 +5,7 @@ var Schema = mongoose.Schema;
|
|
|
5
5
|
var winston = require('../config/winston');
|
|
6
6
|
var RoleConstants = require('./roleConstants');
|
|
7
7
|
var PresenceSchema = require('./presence');
|
|
8
|
+
var TagSchema = require("../models/tag");
|
|
8
9
|
|
|
9
10
|
|
|
10
11
|
|
|
@@ -58,6 +59,7 @@ var PresenceSchema = require('./presence');
|
|
|
58
59
|
settings: {
|
|
59
60
|
type: Object,
|
|
60
61
|
},
|
|
62
|
+
tags: [TagSchema],
|
|
61
63
|
createdBy: {
|
|
62
64
|
type: String,
|
|
63
65
|
required: true
|
package/models/request.js
CHANGED
|
@@ -429,7 +429,7 @@ RequestSchema.index({ id_project: 1, status: 1, preflight:1, updatedAt: -1 }); /
|
|
|
429
429
|
|
|
430
430
|
RequestSchema.index({ id_project: 1, preflight:1, updatedAt: -1 }); // used query ws (topic.endsWith('/requests'))
|
|
431
431
|
|
|
432
|
-
|
|
432
|
+
RequestSchema.index({ hasBot: 1, createdAt: 1 }); // suggested by atlas
|
|
433
433
|
|
|
434
434
|
|
|
435
435
|
// cannot index parallel arrays [agents] [participants] {"driv
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tiledesk/tiledesk-server",
|
|
3
3
|
"description": "The Tiledesk server module",
|
|
4
|
-
"version": "2.2.
|
|
4
|
+
"version": "2.2.28",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"start": "node ./bin/www",
|
|
7
7
|
"pretest": "mongodb-runner start",
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
"@tiledesk-ent/tiledesk-server-groups": "^1.1.2",
|
|
39
39
|
"@tiledesk-ent/tiledesk-server-jwthistory": "^1.1.9",
|
|
40
40
|
"@tiledesk-ent/tiledesk-server-mt": "^1.1.7",
|
|
41
|
-
"@tiledesk-ent/tiledesk-server-payments": "^1.1.
|
|
41
|
+
"@tiledesk-ent/tiledesk-server-payments": "^1.1.6",
|
|
42
42
|
"@tiledesk-ent/tiledesk-server-queue": "^1.1.11",
|
|
43
43
|
"@tiledesk-ent/tiledesk-server-request-history": "^1.1.5",
|
|
44
44
|
"@tiledesk-ent/tiledesk-server-resthook": "^1.1.53",
|
|
@@ -61,6 +61,7 @@
|
|
|
61
61
|
"email-templates": "^8.0.8",
|
|
62
62
|
"eventemitter2": "^6.4.4",
|
|
63
63
|
"express": "~4.17.1",
|
|
64
|
+
"express-ipfilter": "^1.2.0",
|
|
64
65
|
"express-session": "^1.17.2",
|
|
65
66
|
"express-validator": "^6.12.1",
|
|
66
67
|
"fast-csv": "^4.3.6",
|
|
@@ -109,7 +110,7 @@
|
|
|
109
110
|
"chai-string": "^1.5.0",
|
|
110
111
|
"loadtest": "^5.1.2",
|
|
111
112
|
"mocha": "^8.4.0",
|
|
112
|
-
"mongodb-runner": "4.8.
|
|
113
|
+
"mongodb-runner": "4.8.3",
|
|
113
114
|
"nodemon": "^2.0.12",
|
|
114
115
|
"sinon": "^9.2.4",
|
|
115
116
|
"sinon-mongoose": "^2.3.0"
|
|
@@ -376,7 +376,7 @@ sendToAgentEmailChannelEmail(projectid, message) {
|
|
|
376
376
|
}
|
|
377
377
|
|
|
378
378
|
User.findOne({_id: userid , status: 100})
|
|
379
|
-
.cache(cacheUtil.defaultTTL, "users:id:"+userid)
|
|
379
|
+
//@DISABLED_CACHE .cache(cacheUtil.defaultTTL, "users:id:"+userid)
|
|
380
380
|
.exec(function (err, user) {
|
|
381
381
|
if (err) {
|
|
382
382
|
// winston.debug(err);
|
|
@@ -430,7 +430,7 @@ sendToAgentEmailChannelEmail(projectid, message) {
|
|
|
430
430
|
}
|
|
431
431
|
|
|
432
432
|
User.findOne({_id: assignedId, status: 100})
|
|
433
|
-
.cache(cacheUtil.defaultTTL, "users:id:"+assignedId)
|
|
433
|
+
//@DISABLED_CACHE .cache(cacheUtil.defaultTTL, "users:id:"+assignedId)
|
|
434
434
|
.exec(function (err, user) {
|
|
435
435
|
if (err) {
|
|
436
436
|
winston.error("Error sending email to " + savedRequest.participants[0], err);
|
|
@@ -707,7 +707,7 @@ sendAgentEmail(projectid, savedRequest) {
|
|
|
707
707
|
}
|
|
708
708
|
|
|
709
709
|
User.findOne({_id: userid , status: 100})
|
|
710
|
-
.cache(cacheUtil.defaultTTL, "users:id:"+userid)
|
|
710
|
+
//@DISABLED_CACHE .cache(cacheUtil.defaultTTL, "users:id:"+userid)
|
|
711
711
|
.exec(function (err, user) {
|
|
712
712
|
if (err) {
|
|
713
713
|
// winston.debug(err);
|
|
@@ -769,7 +769,7 @@ sendAgentEmail(projectid, savedRequest) {
|
|
|
769
769
|
return winston.warn("RequestNotification email notification for the user with id : " + assignedId + " not found project_user");
|
|
770
770
|
}
|
|
771
771
|
User.findOne({_id: assignedId, status: 100})
|
|
772
|
-
.cache(cacheUtil.defaultTTL, "users:id:"+assignedId)
|
|
772
|
+
//@DISABLED_CACHE .cache(cacheUtil.defaultTTL, "users:id:"+assignedId)
|
|
773
773
|
.exec(function (err, user) {
|
|
774
774
|
if (err) {
|
|
775
775
|
winston.error("Error sending email to " + savedRequest.participants[0], err);
|
|
@@ -38,9 +38,9 @@ class MessageHandlebarsTransformerInterceptor {
|
|
|
38
38
|
populate({path:'requester',populate:{path:'id_user'}});
|
|
39
39
|
// }
|
|
40
40
|
|
|
41
|
-
var request = await q1
|
|
42
|
-
cache(cacheUtil.defaultTTL, message.id_project+":requests:request_id:"+message.recipient)
|
|
43
|
-
exec();
|
|
41
|
+
var request = await q1
|
|
42
|
+
//@DISABLED_CACHE .cache(cacheUtil.defaultTTL, message.id_project+":requests:request_id:"+message.recipient)
|
|
43
|
+
.exec();
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
|
|
@@ -37,14 +37,14 @@ class MessageTransformerInterceptor {
|
|
|
37
37
|
var language = "EN";
|
|
38
38
|
|
|
39
39
|
// cacherequest // requestcachefarequi nocachepopulatereqired
|
|
40
|
-
var request = await Request.findOne({request_id: message.recipient, id_project: message.id_project})
|
|
40
|
+
var request = await Request.findOne({request_id: message.recipient, id_project: message.id_project})
|
|
41
41
|
// populate('lead').
|
|
42
42
|
// populate('department').
|
|
43
43
|
// populate('participatingBots').
|
|
44
44
|
// populate('participatingAgents').
|
|
45
45
|
// populate({path:'requester',populate:{path:'id_user'}}).
|
|
46
|
-
cache(cacheUtil.defaultTTL, message.id_project+":requests:request_id:"+message.recipient)
|
|
47
|
-
exec();
|
|
46
|
+
//@DISABLED_CACHE .cache(cacheUtil.defaultTTL, message.id_project+":requests:request_id:"+message.recipient)
|
|
47
|
+
.exec();
|
|
48
48
|
|
|
49
49
|
winston.debug('request mti: ', request);
|
|
50
50
|
|
|
@@ -70,8 +70,11 @@ devi mandare un messaggio welcome tu altrimenti il bot inserito successivamente
|
|
|
70
70
|
//TESTA QUESTO
|
|
71
71
|
|
|
72
72
|
winston.debug("message.request.status: "+message.request.status);
|
|
73
|
-
|
|
74
|
-
|
|
73
|
+
|
|
74
|
+
winston.debug("message.request.hasBot: "+message.request.hasBot);
|
|
75
|
+
// winston.info("message.request.department.id_bot: "+message.request.department.id_bot);
|
|
76
|
+
if (message.request.status === 50 && message.request.hasBot === false) {
|
|
77
|
+
// if (message.request.status === 50 && message.request.department.id_bot == undefined) {
|
|
75
78
|
//apply only if the status is temp and no bot is available. with agent you must reroute to assign temp request to an agent
|
|
76
79
|
winston.debug("rerouting");
|
|
77
80
|
// reroute(request_id, id_project, nobot)
|
|
@@ -48,9 +48,15 @@ scheduleUnresponsiveRequests() {
|
|
|
48
48
|
// }
|
|
49
49
|
|
|
50
50
|
//https://crontab.guru/examples.html
|
|
51
|
-
var s= schedule.scheduleJob(this.cronExp, function(fireDate){
|
|
52
|
-
|
|
53
|
-
|
|
51
|
+
var s= schedule.scheduleJob(this.cronExp, function(fireDate){ //TODO aggiungi un bias random
|
|
52
|
+
|
|
53
|
+
let timeInMs = Math.random() * (1000); // avoid cluster concurrent jobs in multiple nodes between 0 and 1sec
|
|
54
|
+
winston.info('timeInMs => '+ timeInMs);
|
|
55
|
+
|
|
56
|
+
setTimeout(function () {
|
|
57
|
+
winston.debug('CloseBotUnresponsiveRequestTask scheduleUnresponsiveRequests job was supposed to run at ' + fireDate + ', but actually ran at ' + new Date());
|
|
58
|
+
that.findUnresponsiveRequests();
|
|
59
|
+
},timeInMs );
|
|
54
60
|
});
|
|
55
61
|
}
|
|
56
62
|
|
|
@@ -65,6 +71,8 @@ findUnresponsiveRequests() {
|
|
|
65
71
|
query.id_project = JSON.parse(this.queryProject);
|
|
66
72
|
}
|
|
67
73
|
|
|
74
|
+
|
|
75
|
+
|
|
68
76
|
winston.debug("CloseBotUnresponsiveRequestTask query",query);
|
|
69
77
|
|
|
70
78
|
Request.find(query)
|
|
@@ -84,6 +92,7 @@ findUnresponsiveRequests() {
|
|
|
84
92
|
winston.debug("CloseBotUnresponsiveRequestTask: found unresponsive requests ", requests);
|
|
85
93
|
|
|
86
94
|
requests.forEach(request => {
|
|
95
|
+
|
|
87
96
|
winston.debug("********unresponsive request ", request);
|
|
88
97
|
|
|
89
98
|
return requestService.closeRequestByRequestId(request.request_id, request.id_project, false, false).then(function(updatedStatusRequest) {
|
package/routes/department.js
CHANGED
|
@@ -166,7 +166,7 @@ router.get('/allstatus', [passport.authenticate(['basic', 'jwt'], { session: fal
|
|
|
166
166
|
winston.debug("## GET ALL DEPTS QUERY (1)", query)
|
|
167
167
|
// return Department.find({ "id_project": req.projectid }, function (err, departments) {
|
|
168
168
|
return Department.find(query)
|
|
169
|
-
.cache(cacheUtil.defaultTTL, req.projectid+":departments:query:allstatus")
|
|
169
|
+
//@DISABLED_CACHE .cache(cacheUtil.defaultTTL, req.projectid+":departments:query:allstatus")
|
|
170
170
|
.exec(function (err, departments) {
|
|
171
171
|
if (err) {
|
|
172
172
|
winston.error('Error getting the departments.', err);
|
package/routes/faq_kb.js
CHANGED
|
@@ -10,9 +10,8 @@ var httpUtil = require("../utils/httpUtil");
|
|
|
10
10
|
|
|
11
11
|
router.post('/', function (req, res) {
|
|
12
12
|
winston.info('create BOT ', req.body);
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
req.body.language).then(function(savedFaq_kb) {
|
|
13
|
+
// create(name, url, projectid, user_id, type, description, webhook_url, webhook_enabled, language, template)
|
|
14
|
+
faqService.create(req.body.name, req.body.url, req.projectid, req.user.id, req.body.type, req.body.description, undefined, undefined, req.body.language, req.body.template).then(function(savedFaq_kb) {
|
|
16
15
|
res.json(savedFaq_kb);
|
|
17
16
|
});
|
|
18
17
|
|
package/routes/labels.js
CHANGED
|
@@ -27,6 +27,8 @@ router.get('/default', function (req, res) {
|
|
|
27
27
|
});
|
|
28
28
|
// curl -v -X POST -H 'Content-Type:application/json' -d '{"lang":"IT"}' http://localhost:3000/123/labels/default/clone
|
|
29
29
|
|
|
30
|
+
// curl -v -X POST -H 'Content-Type:application/json' -u andrea.leo@f21.it:123456 -d '{"lang":"IT"}' http://localhost:3001/624c78e27b91d2a2ab49543a/labels/default/clone
|
|
31
|
+
|
|
30
32
|
router.post('/default/clone',
|
|
31
33
|
[
|
|
32
34
|
passport.authenticate(['basic', 'jwt'], { session: false }),
|
package/routes/message.js
CHANGED
|
@@ -66,7 +66,7 @@ async (req, res) => {
|
|
|
66
66
|
// .populate('participatingBots')
|
|
67
67
|
// .populate('participatingAgents')
|
|
68
68
|
// .populate({path:'requester',populate:{path:'id_user'}})
|
|
69
|
-
|
|
69
|
+
//@DISABLED_CACHE .cache(cacheUtil.defaultTTL, req.projectid+":requests:request_id:"+req.params.request_id)
|
|
70
70
|
.exec(async(err, request) => {
|
|
71
71
|
|
|
72
72
|
if (err) {
|
package/routes/project.js
CHANGED
|
@@ -15,6 +15,7 @@ require('../middleware/passport')(passport);
|
|
|
15
15
|
var validtoken = require('../middleware/valid-token')
|
|
16
16
|
var RoleConstants = require("../models/roleConstants");
|
|
17
17
|
var cacheUtil = require('../utils/cacheUtil');
|
|
18
|
+
var orgUtil = require("../utils/orgUtil");
|
|
18
19
|
|
|
19
20
|
router.put('/:projectid', [passport.authenticate(['basic', 'jwt'], { session: false }), validtoken, roleChecker.hasRole('admin')], function (req, res) {
|
|
20
21
|
winston.debug('UPDATE PROJECT REQ BODY ', req.body);
|
|
@@ -151,6 +152,15 @@ router.put('/:projectid', [passport.authenticate(['basic', 'jwt'], { session: fa
|
|
|
151
152
|
if (req.body.channels!=undefined) {
|
|
152
153
|
update.channels = req.body.channels;
|
|
153
154
|
}
|
|
155
|
+
|
|
156
|
+
if (req.body.ipFilterEnabled!=undefined) {
|
|
157
|
+
update.ipFilterEnabled = req.body.ipFilterEnabled;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
if (req.body.ipFilter!=undefined) {
|
|
161
|
+
update.ipFilter = req.body.ipFilter;
|
|
162
|
+
}
|
|
163
|
+
|
|
154
164
|
|
|
155
165
|
// if (req.body.defaultLanguage!=undefined) {
|
|
156
166
|
// update.defaultLanguage = req.body.defaultLanguage;
|
|
@@ -291,6 +301,13 @@ router.patch('/:projectid', [passport.authenticate(['basic', 'jwt'], { session:
|
|
|
291
301
|
update.channels = req.body.channels;
|
|
292
302
|
}
|
|
293
303
|
|
|
304
|
+
if (req.body.ipFilterEnabled!=undefined) {
|
|
305
|
+
update.ipFilterEnabled = req.body.ipFilterEnabled;
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
if (req.body.ipFilter!=undefined) {
|
|
309
|
+
update.ipFilter = req.body.ipFilter;
|
|
310
|
+
}
|
|
294
311
|
|
|
295
312
|
// if (req.body.defaultLanguage!=undefined) {
|
|
296
313
|
// update.defaultLanguage = req.body.defaultLanguage;
|
|
@@ -313,7 +330,7 @@ router.patch('/:projectid', [passport.authenticate(['basic', 'jwt'], { session:
|
|
|
313
330
|
router.get('/:projectid', [passport.authenticate(['basic', 'jwt'], { session: false }), validtoken, roleChecker.hasRoleOrTypes('agent', ['subscription'])], function (req, res) {
|
|
314
331
|
winston.debug(req.body);
|
|
315
332
|
Project.findOne({_id: req.params.projectid, status:100})
|
|
316
|
-
.cache(cacheUtil.defaultTTL, "projects:id:"+req.params.projectid)
|
|
333
|
+
//@DISABLED_CACHE .cache(cacheUtil.defaultTTL, "projects:id:"+req.params.projectid)
|
|
317
334
|
.exec(function (err, project) {
|
|
318
335
|
if (err) {
|
|
319
336
|
winston.error('Error getting project ', err);
|
|
@@ -362,6 +379,61 @@ router.get('/', [passport.authenticate(['basic', 'jwt'], { session: false }), va
|
|
|
362
379
|
return res.status(500).send({ success: false, msg: 'Error getting object.' });
|
|
363
380
|
}
|
|
364
381
|
|
|
382
|
+
|
|
383
|
+
|
|
384
|
+
//organization: if third sub domain iterate and put only project with organization==subdomain otherwise remove projects with org
|
|
385
|
+
winston.info("orgUtil.ORGANIZATION_ENABLED: " + orgUtil.ORGANIZATION_ENABLED);
|
|
386
|
+
if (orgUtil.ORGANIZATION_ENABLED == true ) {
|
|
387
|
+
|
|
388
|
+
// winston.info("project_users", project_users);
|
|
389
|
+
winston.info("project_users.length:"+ project_users.length);
|
|
390
|
+
|
|
391
|
+
let org = orgUtil.getOrg(req);
|
|
392
|
+
winston.info("org:"+ org);
|
|
393
|
+
|
|
394
|
+
if (org!=undefined) {
|
|
395
|
+
winston.info("org!=undefined");
|
|
396
|
+
|
|
397
|
+
var project_users = project_users.filter(function (projectUser) {
|
|
398
|
+
if (projectUser.id_project.organization && projectUser.id_project.organization === org ) {
|
|
399
|
+
winston.info("keep");
|
|
400
|
+
return true;
|
|
401
|
+
}
|
|
402
|
+
});
|
|
403
|
+
|
|
404
|
+
/* for (var i = 0; i < project_users.length; i++) {
|
|
405
|
+
winston.info("project_users[i].id_project.organization: " + project_users[i].id_project.organization);
|
|
406
|
+
if (project_users[i].id_project.organization && project_users[i].id_project.organization === org ) {
|
|
407
|
+
//keep
|
|
408
|
+
winston.info("keep");
|
|
409
|
+
} else {
|
|
410
|
+
// project_users.splice(i, 1); // 2nd parameter means remove one item only
|
|
411
|
+
winston.info("splice");
|
|
412
|
+
}
|
|
413
|
+
}*/
|
|
414
|
+
} else {
|
|
415
|
+
|
|
416
|
+
var project_users = project_users.filter(function (projectUser) {
|
|
417
|
+
if (projectUser.id_project.organization == undefined ) {
|
|
418
|
+
// winston.info("keep");
|
|
419
|
+
return true;
|
|
420
|
+
}
|
|
421
|
+
});
|
|
422
|
+
|
|
423
|
+
|
|
424
|
+
/*
|
|
425
|
+
for (var i = 0; i < project_users.length; i++) {
|
|
426
|
+
winston.info("project_users[i].id_project.organization: " + project_users[i].id_project.organization);
|
|
427
|
+
if (project_users[i].id_project.organization) {
|
|
428
|
+
project_users.splice(i, 1); // 2nd parameter means remove one item only
|
|
429
|
+
}
|
|
430
|
+
}*/
|
|
431
|
+
}
|
|
432
|
+
} else {
|
|
433
|
+
winston.info("no")
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
|
|
365
437
|
project_users.sort((a, b) => (a.id_project && b.id_project && a.id_project.updatedAt > b.id_project.updatedAt) ? 1 : -1)
|
|
366
438
|
project_users.reverse();
|
|
367
439
|
res.json(project_users);
|
package/routes/project_user.js
CHANGED
|
@@ -196,7 +196,8 @@ router.post('/', [passport.authenticate(['basic', 'jwt'], { session: false }), v
|
|
|
196
196
|
// role: RoleConstants.USER,
|
|
197
197
|
// - Create project_user endpoint by agent (Ticketing) now is with Guest Role
|
|
198
198
|
role: RoleConstants.GUEST,
|
|
199
|
-
user_available: false,
|
|
199
|
+
user_available: false,
|
|
200
|
+
tags: req.body.tags,
|
|
200
201
|
createdBy: req.user.id,
|
|
201
202
|
updatedBy: req.user.id
|
|
202
203
|
});
|
|
@@ -234,6 +235,10 @@ router.put('/', [passport.authenticate(['basic', 'jwt'], { session: false }), va
|
|
|
234
235
|
if (req.body["settings.email.notification.conversation.pooled"]!=undefined) {
|
|
235
236
|
update["settings.email.notification.conversation.pooled"] = req.body["settings.email.notification.conversation.pooled"];
|
|
236
237
|
}
|
|
238
|
+
if (req.body.tags!=undefined) {
|
|
239
|
+
update.tags = req.body.tags;
|
|
240
|
+
}
|
|
241
|
+
|
|
237
242
|
|
|
238
243
|
|
|
239
244
|
Project_user.findByIdAndUpdate(req.projectuser.id, update, { new: true, upsert: true }, function (err, updatedProject_user) {
|
|
@@ -289,7 +294,9 @@ router.put('/:project_userid', [passport.authenticate(['basic', 'jwt'], { sessio
|
|
|
289
294
|
update["settings.email.notification.conversation.pooled"] = req.body["settings.email.notification.conversation.pooled"];
|
|
290
295
|
}
|
|
291
296
|
|
|
292
|
-
|
|
297
|
+
if (req.body.tags!=undefined) {
|
|
298
|
+
update.tags = req.body.tags;
|
|
299
|
+
}
|
|
293
300
|
|
|
294
301
|
winston.debug("project_userid update", update);
|
|
295
302
|
|
|
@@ -462,8 +469,8 @@ router.get('/users/:user_id', [passport.authenticate(['basic', 'jwt'], { session
|
|
|
462
469
|
* RETURN THE PROJECT-USERS OBJECTS FILTERD BY PROJECT-ID AND WITH NESTED THE USER OBJECT
|
|
463
470
|
* WF: 1. GET PROJECT-USER by the passed project ID
|
|
464
471
|
* 2. POPULATE THE user_id OF THE PROJECT-USER object WITH THE USER OBJECT
|
|
465
|
-
*/
|
|
466
|
-
router.get('/', [passport.authenticate(['basic', 'jwt'], { session: false }), validtoken, roleChecker.
|
|
472
|
+
*/
|
|
473
|
+
router.get('/', [passport.authenticate(['basic', 'jwt'], { session: false }), validtoken, roleChecker.hasRoleOrTypes('agent', ['subscription'])], function (req, res) {
|
|
467
474
|
|
|
468
475
|
var role = [RoleConstants.OWNER, RoleConstants.ADMIN, RoleConstants.SUPERVISOR, RoleConstants.AGENT];
|
|
469
476
|
|
package/routes/request.js
CHANGED
|
@@ -693,6 +693,10 @@ router.get('/', function (req, res, next) {
|
|
|
693
693
|
query.location = req.query.location;
|
|
694
694
|
}
|
|
695
695
|
|
|
696
|
+
if (req.query.ticket_id) {
|
|
697
|
+
query.ticket_id = req.query.ticket_id;
|
|
698
|
+
}
|
|
699
|
+
|
|
696
700
|
// if (req.query.request_id) {
|
|
697
701
|
// console.log('req.query.request_id', req.query.request_id);
|
|
698
702
|
// query.request_id = req.query.request_id;
|
|
@@ -798,6 +802,17 @@ router.get('/', function (req, res, next) {
|
|
|
798
802
|
winston.debug('REQUEST ROUTE - QUERY snap_department_id_bot_exists', query.snap_department_id_bot_exists);
|
|
799
803
|
}
|
|
800
804
|
|
|
805
|
+
if (req.query.snap_lead_lead_id) {
|
|
806
|
+
query["snapshot.lead.lead_id"] = req.query.snap_lead_lead_id;
|
|
807
|
+
winston.debug('REQUEST ROUTE - QUERY snap_lead_lead_id', query.snap_lead_lead_id);
|
|
808
|
+
}
|
|
809
|
+
|
|
810
|
+
if (req.query.channel) {
|
|
811
|
+
query["channel.name"] = req.query.channel
|
|
812
|
+
winston.debug('REQUEST ROUTE - QUERY channel', query.channel);
|
|
813
|
+
}
|
|
814
|
+
|
|
815
|
+
|
|
801
816
|
var direction = -1; //-1 descending , 1 ascending
|
|
802
817
|
if (req.query.direction) {
|
|
803
818
|
direction = req.query.direction;
|
package/routes/user-request.js
CHANGED
|
@@ -4,6 +4,7 @@ var Request = require("../models/request");
|
|
|
4
4
|
var winston = require('../config/winston');
|
|
5
5
|
const requestEvent = require('../event/requestEvent');
|
|
6
6
|
const { check, validationResult } = require('express-validator');
|
|
7
|
+
var requestService = require('../services/requestService');
|
|
7
8
|
|
|
8
9
|
|
|
9
10
|
router.patch('/:requestid/rating', function (req, res) {
|
|
@@ -54,5 +55,19 @@ router.patch('/:requestid/rating', function (req, res) {
|
|
|
54
55
|
});
|
|
55
56
|
|
|
56
57
|
|
|
58
|
+
router.put('/:requestid/closeg', function (req, res) {
|
|
59
|
+
winston.debug(req.body);
|
|
60
|
+
|
|
61
|
+
// closeRequestByRequestId(request_id, id_project)
|
|
62
|
+
return requestService.closeRequestByRequestId(req.params.requestid, req.projectid).then(function(closedRequest) {
|
|
63
|
+
|
|
64
|
+
winston.verbose("request closed", closedRequest);
|
|
65
|
+
|
|
66
|
+
return res.json(closedRequest);
|
|
67
|
+
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
});
|
|
57
72
|
|
|
58
73
|
module.exports = router;
|
package/routes/widget.js
CHANGED
|
@@ -117,7 +117,7 @@ router.get('/', function(req, res, next) {
|
|
|
117
117
|
// TOOD add labels
|
|
118
118
|
Promise.all([
|
|
119
119
|
Project.findOne({_id: req.projectid, status: 100}).select('-settings')
|
|
120
|
-
.cache(cacheUtil.queryTTL, "projects:query:id:status:100:"+req.projectid+":select:-settings")
|
|
120
|
+
//@DISABLED_CACHE .cache(cacheUtil.queryTTL, "projects:query:id:status:100:"+req.projectid+":select:-settings")
|
|
121
121
|
,
|
|
122
122
|
availableUsers()
|
|
123
123
|
,
|
|
@@ -283,6 +283,7 @@ getOperators(departmentid, projectid, nobot, disableWebHookCall, context) {
|
|
|
283
283
|
return resolve ({
|
|
284
284
|
department: department, available_agents: _available_agents, agents: project_users,
|
|
285
285
|
id_bot:department.id_bot, project: project,
|
|
286
|
+
context: context,
|
|
286
287
|
// botprefix
|
|
287
288
|
operators: [{ id_user: 'bot_' + department.id_bot }]
|
|
288
289
|
});
|
|
@@ -386,7 +387,7 @@ getOperators(departmentid, projectid, nobot, disableWebHookCall, context) {
|
|
|
386
387
|
selectedoperator = that.getRandomAvailableOperator(_available_agents);
|
|
387
388
|
}
|
|
388
389
|
|
|
389
|
-
let objectToReturn = { available_agents: _available_agents, agents: project_users, operators: selectedoperator, department: department, group: group, id_project: projectid, project: project };
|
|
390
|
+
let objectToReturn = { available_agents: _available_agents, agents: project_users, operators: selectedoperator, department: department, group: group, id_project: projectid, project: project, context: context };
|
|
390
391
|
|
|
391
392
|
that.roundRobin(objectToReturn).then(function(objectToReturnRoundRobin){
|
|
392
393
|
|
|
@@ -409,7 +410,7 @@ getOperators(departmentid, projectid, nobot, disableWebHookCall, context) {
|
|
|
409
410
|
|
|
410
411
|
} else {
|
|
411
412
|
// here subscription notifier??
|
|
412
|
-
var objectToReturn = { available_agents: [], agents: [], operators: [] };
|
|
413
|
+
var objectToReturn = { available_agents: [], agents: [], operators: [], context: context };
|
|
413
414
|
return resolve(objectToReturn);
|
|
414
415
|
}
|
|
415
416
|
|
|
@@ -447,7 +448,7 @@ getOperators(departmentid, projectid, nobot, disableWebHookCall, context) {
|
|
|
447
448
|
selectedoperator = that.getRandomAvailableOperator(_available_agents);
|
|
448
449
|
}
|
|
449
450
|
|
|
450
|
-
let objectToReturn = { available_agents: _available_agents, agents: project_users, operators: selectedoperator, department: department, id_project: projectid, project: project };
|
|
451
|
+
let objectToReturn = { available_agents: _available_agents, agents: project_users, operators: selectedoperator, department: department, id_project: projectid, project: project, context: context };
|
|
451
452
|
|
|
452
453
|
that.roundRobin(objectToReturn).then(function(objectToReturnRoundRobin) {
|
|
453
454
|
winston.debug("context2",context);
|
|
@@ -474,7 +475,7 @@ getOperators(departmentid, projectid, nobot, disableWebHookCall, context) {
|
|
|
474
475
|
|
|
475
476
|
} else {
|
|
476
477
|
// here subscription notifier??
|
|
477
|
-
let objectToReturn = { available_agents: [], agents: [], operators: [] };
|
|
478
|
+
let objectToReturn = { available_agents: [], agents: [], operators: [], context: context };
|
|
478
479
|
return resolve(objectToReturn);
|
|
479
480
|
}
|
|
480
481
|
|
|
@@ -88,7 +88,7 @@ class FaqBotHandler {
|
|
|
88
88
|
|
|
89
89
|
|
|
90
90
|
Faq_kb.findById(botId)
|
|
91
|
-
.cache(cacheUtil.defaultTTL, message.id_project+":faq_kbs:id:"+botId)
|
|
91
|
+
//@DISABLED_CACHE .cache(cacheUtil.defaultTTL, message.id_project+":faq_kbs:id:"+botId)
|
|
92
92
|
.exec(function(err, faq_kb) {
|
|
93
93
|
if (err) {
|
|
94
94
|
return winston.error("Error getting bot object.",err);
|