@tiledesk/tiledesk-server 2.10.11 → 2.10.13
Sign up to get free protection for your applications and to get access to all the features.
- package/CHANGELOG.md +9 -0
- package/app.js +5 -0
- package/package.json +3 -3
- package/routes/request.js +45 -34
package/CHANGELOG.md
CHANGED
@@ -5,6 +5,15 @@
|
|
5
5
|
🚀 IN PRODUCTION 🚀
|
6
6
|
(https://www.npmjs.com/package/@tiledesk/tiledesk-server/v/2.3.77)
|
7
7
|
|
8
|
+
# 2.10.13
|
9
|
+
- Updated tybot-connector to 0.2.127
|
10
|
+
- Added event on request fully abandoned
|
11
|
+
|
12
|
+
# 2.10.12
|
13
|
+
- Updated tiledesk-chatbot-template to 0.1.3
|
14
|
+
- Added check on valid mongo id
|
15
|
+
- Removed logs
|
16
|
+
|
8
17
|
# 2.10.11
|
9
18
|
- Updated tybot-connector to 0.2.118
|
10
19
|
- Removed logs
|
package/app.js
CHANGED
@@ -449,6 +449,11 @@ var projectSetter = function (req, res, next) {
|
|
449
449
|
|
450
450
|
if (projectid) {
|
451
451
|
|
452
|
+
if (!mongoose.Types.ObjectId.isValid(projectid)) {
|
453
|
+
winston.warn(`Invalid ObjectId: ${projectid}`);
|
454
|
+
return res.status(400).send({ error: "Invalid project id: " + projectid });
|
455
|
+
}
|
456
|
+
|
452
457
|
let q = Project.findOne({_id: projectid, status: 100});
|
453
458
|
if (cacheEnabler.project) {
|
454
459
|
q.cache(cacheUtil.longTTL, "projects:id:"+projectid) //project_cache
|
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.10.
|
4
|
+
"version": "2.10.13",
|
5
5
|
"scripts": {
|
6
6
|
"start": "node ./bin/www",
|
7
7
|
"pretest": "mongodb-runner start",
|
@@ -38,7 +38,7 @@
|
|
38
38
|
"dependencies": {
|
39
39
|
"@tiledesk/tiledesk-apps": "^1.0.26",
|
40
40
|
"@tiledesk/tiledesk-chat21-app": "^1.1.8",
|
41
|
-
"@tiledesk/tiledesk-chatbot-templates": "^0.1.
|
41
|
+
"@tiledesk/tiledesk-chatbot-templates": "^0.1.3",
|
42
42
|
"@tiledesk/tiledesk-chatbot-util": "^0.8.33",
|
43
43
|
"@tiledesk/tiledesk-client": "^0.10.10",
|
44
44
|
"@tiledesk/tiledesk-dialogflow-connector": "^1.8.4",
|
@@ -48,7 +48,7 @@
|
|
48
48
|
"@tiledesk/tiledesk-rasa-connector": "^1.0.10",
|
49
49
|
"@tiledesk/tiledesk-telegram-connector": "^0.1.14",
|
50
50
|
"@tiledesk/tiledesk-train-jobworker": "^0.0.11",
|
51
|
-
"@tiledesk/tiledesk-tybot-connector": "^0.2.
|
51
|
+
"@tiledesk/tiledesk-tybot-connector": "^0.2.127",
|
52
52
|
"@tiledesk/tiledesk-whatsapp-connector": "^0.1.73",
|
53
53
|
"@tiledesk/tiledesk-whatsapp-jobworker": "^0.0.8",
|
54
54
|
"@tiledesk/tiledesk-sms-connector": "^0.1.10",
|
package/routes/request.js
CHANGED
@@ -30,6 +30,7 @@ csv.separator = ';';
|
|
30
30
|
|
31
31
|
const { check, validationResult } = require('express-validator');
|
32
32
|
const RoleConstants = require('../models/roleConstants');
|
33
|
+
const eventService = require('../pubmodules/events/eventService');
|
33
34
|
|
34
35
|
// var messageService = require('../services/messageService');
|
35
36
|
|
@@ -182,7 +183,7 @@ router.post('/',
|
|
182
183
|
|
183
184
|
winston.debug('res.json(savedRequest)');
|
184
185
|
var endTimestamp = new Date();
|
185
|
-
winston.verbose("request create end: " + (endTimestamp - startTimestamp));
|
186
|
+
winston.verbose("(Request Route) request create end: " + (endTimestamp - startTimestamp));
|
186
187
|
return res.json(savedRequest);
|
187
188
|
// });
|
188
189
|
// });
|
@@ -273,7 +274,7 @@ router.patch('/:requestid', function (req, res) {
|
|
273
274
|
|
274
275
|
|
275
276
|
|
276
|
-
winston.verbose("Request patch update", update);
|
277
|
+
winston.verbose("(Request Route) Request patch update", update);
|
277
278
|
|
278
279
|
//cacheinvalidation
|
279
280
|
return Request.findOneAndUpdate({ "request_id": req.params.requestid, "id_project": req.projectid }, { $set: update }, { new: true, upsert: false })
|
@@ -326,18 +327,18 @@ router.put('/:requestid/close', async function (req, res) {
|
|
326
327
|
})
|
327
328
|
|
328
329
|
if (!request) {
|
329
|
-
winston.verbose("Request with request_id " + request_id)
|
330
|
+
winston.verbose("(Request Route) Request with request_id " + request_id)
|
330
331
|
return res.status(404).send({ success: false, error: "Request not found"})
|
331
332
|
}
|
332
333
|
|
333
334
|
if (!request.participantsAgents.includes(req.user.id)) {
|
334
|
-
winston.verbose("Request can't be closed by a non participant. Attempt made by " + req.user.id);
|
335
|
+
winston.verbose("(Request Route) Request can't be closed by a non participant. Attempt made by " + req.user.id);
|
335
336
|
return res.status(403).send({ success: false, error: "You must be among the participants to close a conversation."})
|
336
337
|
}
|
337
338
|
}
|
338
339
|
|
339
340
|
return requestService.closeRequestByRequestId(req.params.requestid, req.projectid, false, true, closed_by, req.body.force).then(function (closedRequest) {
|
340
|
-
winston.verbose("request closed", closedRequest);
|
341
|
+
winston.verbose("(Request Route) request closed", closedRequest);
|
341
342
|
return res.json(closedRequest);
|
342
343
|
});
|
343
344
|
|
@@ -349,7 +350,7 @@ router.put('/:requestid/reopen', function (req, res) {
|
|
349
350
|
// reopenRequestByRequestId(request_id, id_project) {
|
350
351
|
return requestService.reopenRequestByRequestId(req.params.requestid, req.projectid).then(function (reopenRequest) {
|
351
352
|
|
352
|
-
winston.verbose("request reopen", reopenRequest);
|
353
|
+
winston.verbose("(Request Route) request reopen", reopenRequest);
|
353
354
|
|
354
355
|
return res.json(reopenRequest);
|
355
356
|
});
|
@@ -380,7 +381,7 @@ router.post('/:requestid/participants',
|
|
380
381
|
//addParticipantByRequestId(request_id, id_project, member)
|
381
382
|
return requestService.addParticipantByRequestId(req.params.requestid, req.projectid, req.body.member).then(function (updatedRequest) {
|
382
383
|
|
383
|
-
winston.verbose("participant added", updatedRequest);
|
384
|
+
winston.verbose("(Request Route) participant added", updatedRequest);
|
384
385
|
|
385
386
|
return res.json(updatedRequest);
|
386
387
|
});
|
@@ -420,7 +421,7 @@ router.delete('/:requestid/participants/:participantid', function (req, res) {
|
|
420
421
|
//removeParticipantByRequestId(request_id, id_project, member)
|
421
422
|
return requestService.removeParticipantByRequestId(req.params.requestid, req.projectid, req.params.participantid).then(function (updatedRequest) {
|
422
423
|
|
423
|
-
winston.verbose("participant removed", updatedRequest);
|
424
|
+
winston.verbose("(Request Route) participant removed", updatedRequest);
|
424
425
|
|
425
426
|
return res.json(updatedRequest);
|
426
427
|
});
|
@@ -451,10 +452,16 @@ router.delete('/:requestid/participants/:participantid', function (req, res) {
|
|
451
452
|
router.put('/:requestid/assign', function (req, res) {
|
452
453
|
winston.debug(req.body);
|
453
454
|
|
454
|
-
|
455
|
+
let id_project = req.projectid;
|
456
|
+
let user = req.user;
|
457
|
+
let pu;
|
458
|
+
if (req.projectuser) {
|
459
|
+
pu = req.projectuser.id;
|
460
|
+
}
|
455
461
|
|
456
|
-
//
|
457
|
-
|
462
|
+
// leggi la request se già assegnata o già chiusa (1000) esci
|
463
|
+
// cacheinvalidation
|
464
|
+
return Request.findOne({ "request_id": req.params.requestid, "id_project": id_project })
|
458
465
|
.exec(function (err, request) {
|
459
466
|
|
460
467
|
if (err) {
|
@@ -467,13 +474,17 @@ router.put('/:requestid/assign', function (req, res) {
|
|
467
474
|
}
|
468
475
|
|
469
476
|
if (request.status === RequestConstants.ASSIGNED || request.status === RequestConstants.SERVED || request.status === RequestConstants.CLOSED) {
|
470
|
-
winston.
|
477
|
+
winston.verbose('(Request Route) Request already assigned');
|
471
478
|
return res.json(request);
|
472
479
|
}
|
473
480
|
//route(request_id, departmentid, id_project) {
|
474
|
-
requestService.route(req.params.requestid, req.body.departmentid,
|
481
|
+
requestService.route(req.params.requestid, req.body.departmentid, id_project, req.body.nobot, req.body.no_populate).then(function (updatedRequest) {
|
475
482
|
|
476
|
-
winston.debug("
|
483
|
+
winston.debug("request routed ", updatedRequest);
|
484
|
+
|
485
|
+
if (updatedRequest.status === RequestConstants.ABANDONED) {
|
486
|
+
eventService.emit('request.fully_abandoned', updatedRequest, id_project, pu, user._id, undefined, user);
|
487
|
+
}
|
477
488
|
|
478
489
|
return res.json(updatedRequest);
|
479
490
|
}).catch(function (error) {
|
@@ -624,7 +635,7 @@ router.patch('/:requestid/attributes', function (req, res) {
|
|
624
635
|
winston.error("error saving request attributes", err)
|
625
636
|
return res.status(500).send({ success: false, msg: 'Error getting object.' });
|
626
637
|
}
|
627
|
-
winston.verbose(" saved request attributes", savedRequest.toObject())
|
638
|
+
winston.verbose("(Request Route) saved request attributes", savedRequest.toObject())
|
628
639
|
requestEvent.emit("request.update", savedRequest);
|
629
640
|
requestEvent.emit("request.update.comment", { comment: "ATTRIBUTES_PATCH", request: savedRequest });//Deprecated
|
630
641
|
requestEvent.emit("request.updated", { comment: "ATTRIBUTES_PATCH", request: savedRequest, patch: { attributes: data } });
|
@@ -657,7 +668,7 @@ router.post('/:requestid/notes', async function (req, res) {
|
|
657
668
|
|
658
669
|
// Check if the user is a participant
|
659
670
|
if (!request.participantsAgents.includes(req.user.id)) {
|
660
|
-
winston.verbose("Trying to add a note from a non participating agent");
|
671
|
+
winston.verbose("(Request Route) Trying to add a note from a non participating agent");
|
661
672
|
return res.status(403).send({ success: false, error: "You are not participating in the conversation"})
|
662
673
|
}
|
663
674
|
}
|
@@ -703,7 +714,7 @@ router.delete('/:requestid/notes/:noteid', async function (req, res) {
|
|
703
714
|
|
704
715
|
// Check if the user is a participant
|
705
716
|
if (!request.participantsAgents.includes(req.user.id)) {
|
706
|
-
winston.verbose("Trying to delete a note from a non participating agent");
|
717
|
+
winston.verbose("(Request Route) Trying to delete a note from a non participating agent");
|
707
718
|
return res.status(403).send({ success: false, error: "You are not participating in the conversation"})
|
708
719
|
}
|
709
720
|
}
|
@@ -766,14 +777,14 @@ router.post('/:requestid/email/send',
|
|
766
777
|
|
767
778
|
|
768
779
|
|
769
|
-
winston.
|
780
|
+
winston.debug("Sending an email with text : " + text + " to request_id " + request_id);
|
770
781
|
|
771
782
|
if (!request.lead.email) {
|
772
783
|
res.json({ "no queued": true });
|
773
784
|
}
|
774
785
|
|
775
786
|
let newto = request.lead.email
|
776
|
-
winston.
|
787
|
+
winston.verbose("(Request Route) Sending an email newto " + newto);
|
777
788
|
|
778
789
|
//sendEmailDirect(to, text, project, request_id, subject, tokenQueryString, sourcePage, payload)
|
779
790
|
emailService.sendEmailDirect(newto, text, req.project, request_id, subject, undefined, undefined, undefined, replyto);
|
@@ -796,7 +807,7 @@ router.post('/:requestid/followers',
|
|
796
807
|
check('member').notEmpty(),
|
797
808
|
],
|
798
809
|
function (req, res) {
|
799
|
-
winston.
|
810
|
+
winston.verbose("(Request Route) followers add", req.body);
|
800
811
|
|
801
812
|
const errors = validationResult(req);
|
802
813
|
if (!errors.isEmpty()) {
|
@@ -806,7 +817,7 @@ router.post('/:requestid/followers',
|
|
806
817
|
//addParticipantByRequestId(request_id, id_project, member)
|
807
818
|
return requestService.addFollowerByRequestId(req.params.requestid, req.projectid, req.body.member).then(function (updatedRequest) {
|
808
819
|
|
809
|
-
winston.verbose("participant added", updatedRequest);
|
820
|
+
winston.verbose("(Request Route) participant added", updatedRequest);
|
810
821
|
|
811
822
|
return res.json(updatedRequest);
|
812
823
|
});
|
@@ -839,7 +850,7 @@ router.delete('/:requestid/followers/:followerid', function (req, res) {
|
|
839
850
|
//removeFollowerByRequestId(request_id, id_project, member)
|
840
851
|
return requestService.removeFollowerByRequestId(req.params.requestid, req.projectid, req.params.followerid).then(function (updatedRequest) {
|
841
852
|
|
842
|
-
winston.verbose("follower removed", updatedRequest);
|
853
|
+
winston.verbose("(Request Route) follower removed", updatedRequest);
|
843
854
|
|
844
855
|
return res.json(updatedRequest);
|
845
856
|
});
|
@@ -866,7 +877,7 @@ router.delete('/:requestid', function (req, res) {
|
|
866
877
|
if (err) {
|
867
878
|
return res.status(500).send({ success: false, msg: 'Error deleting messages.' });
|
868
879
|
}
|
869
|
-
winston.verbose('Messages deleted for the recipient: ' + req.params.requestid);
|
880
|
+
winston.verbose('(Request Route) Messages deleted for the recipient: ' + req.params.requestid);
|
870
881
|
});
|
871
882
|
|
872
883
|
|
@@ -880,7 +891,7 @@ router.delete('/:requestid', function (req, res) {
|
|
880
891
|
return res.status(404).send({ success: false, msg: 'Object not found.' });
|
881
892
|
}
|
882
893
|
|
883
|
-
winston.verbose('Request deleted with request_id: ' + req.params.requestid);
|
894
|
+
winston.verbose('(Request Route) Request deleted with request_id: ' + req.params.requestid);
|
884
895
|
|
885
896
|
requestEvent.emit('request.delete', request);
|
886
897
|
|
@@ -928,7 +939,7 @@ router.delete('/id/:id', function (req, res) {
|
|
928
939
|
return res.status(404).send({ success: false, msg: 'Object not found.' });
|
929
940
|
}
|
930
941
|
|
931
|
-
winston.verbose('Request deleted with id: ' + req.params.id);
|
942
|
+
winston.verbose('(Request Route) Request deleted with id: ' + req.params.id);
|
932
943
|
|
933
944
|
requestEvent.emit('request.delete', request);
|
934
945
|
|
@@ -1201,7 +1212,7 @@ router.get('/', function (req, res, next) {
|
|
1201
1212
|
} else if (req.query.duration_op === 'lt') {
|
1202
1213
|
query.duration = { $lte: duration }
|
1203
1214
|
} else {
|
1204
|
-
winston.verbose("Duration operator can be 'gt' or 'lt'. Skip duration_op " + req.query.duration_op)
|
1215
|
+
winston.verbose("(Request Route) Duration operator can be 'gt' or 'lt'. Skip duration_op " + req.query.duration_op)
|
1205
1216
|
}
|
1206
1217
|
}
|
1207
1218
|
|
@@ -1217,12 +1228,12 @@ router.get('/', function (req, res, next) {
|
|
1217
1228
|
|
1218
1229
|
if (req.query.full_text) {
|
1219
1230
|
if (req.query.no_textscore != "true" && req.query.no_textscore != true) {
|
1220
|
-
winston.verbose('fulltext projection on');
|
1231
|
+
winston.verbose('(Request Route) fulltext projection on');
|
1221
1232
|
projection = { score: { $meta: "textScore" } };
|
1222
1233
|
}
|
1223
1234
|
}
|
1224
1235
|
|
1225
|
-
winston.verbose('
|
1236
|
+
winston.verbose('(Request Route) Find request with query ', query);
|
1226
1237
|
|
1227
1238
|
var q1 = Request.find(query, projection).
|
1228
1239
|
skip(skip).limit(limit);
|
@@ -1251,7 +1262,7 @@ router.get('/', function (req, res, next) {
|
|
1251
1262
|
var q2 = Request.countDocuments(query).exec();
|
1252
1263
|
|
1253
1264
|
if (req.query.no_count && req.query.no_count == "true") {
|
1254
|
-
winston.
|
1265
|
+
winston.verbose('(Request Route) - no_count');
|
1255
1266
|
q2 = 0;
|
1256
1267
|
}
|
1257
1268
|
|
@@ -1263,16 +1274,16 @@ router.get('/', function (req, res, next) {
|
|
1263
1274
|
count: results[1],
|
1264
1275
|
requests: results[0]
|
1265
1276
|
};
|
1266
|
-
winston.debug('
|
1267
|
-
winston.debug('
|
1277
|
+
winston.debug('(Request Route) - objectToReturn ');
|
1278
|
+
winston.debug('(Request Route) - objectToReturn ', objectToReturn);
|
1268
1279
|
|
1269
1280
|
const endExecTime = new Date();
|
1270
|
-
winston.verbose('
|
1281
|
+
winston.verbose('(Request Route) - exec time: ' + (endExecTime - startExecTime));
|
1271
1282
|
|
1272
1283
|
return res.json(objectToReturn);
|
1273
1284
|
|
1274
1285
|
}).catch(function (err) {
|
1275
|
-
winston.error('
|
1286
|
+
winston.error('(Request Route) find request error ', err);
|
1276
1287
|
return res.status(500).send({ success: false, msg: 'Error getting requests.', err: err });
|
1277
1288
|
});
|
1278
1289
|
|
@@ -1824,7 +1835,7 @@ router.get('/csv', function (req, res, next) {
|
|
1824
1835
|
} else if (req.query.duration_op === 'lt') {
|
1825
1836
|
query.duration = { $lte: duration }
|
1826
1837
|
} else {
|
1827
|
-
winston.verbose("Duration operator can be 'gt' or 'lt'. Skip duration_op " + req.query.duration_op)
|
1838
|
+
winston.verbose("(Request Route) Duration operator can be 'gt' or 'lt'. Skip duration_op " + req.query.duration_op)
|
1828
1839
|
}
|
1829
1840
|
}
|
1830
1841
|
|