@tiledesk/tiledesk-server 2.2.37 → 2.3.1

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.
Files changed (53) hide show
  1. package/CHANGELOG.md +8 -1
  2. package/LICENSE +14 -657
  3. package/README.md +21 -18
  4. package/app.js +27 -3
  5. package/config/labels/widget.json +320 -0
  6. package/event/subscriptionEvent.js +11 -0
  7. package/models/subscriptionEvent.js +11 -0
  8. package/models/subscriptionLog.js +34 -0
  9. package/models/tagLibrary.js +42 -0
  10. package/package.json +5 -11
  11. package/pubmodules/activities/activityArchiver.js +295 -0
  12. package/pubmodules/activities/index.js +3 -0
  13. package/pubmodules/activities/models/activity.js +88 -0
  14. package/pubmodules/activities/routes/activity.js +710 -0
  15. package/pubmodules/activities/test/activityRoute.js +85 -0
  16. package/pubmodules/analytics/analytics.js +1719 -0
  17. package/pubmodules/analytics/index.js +3 -0
  18. package/pubmodules/canned/cannedResponse.js +51 -0
  19. package/pubmodules/canned/cannedResponseRoute.js +157 -0
  20. package/pubmodules/canned/index.js +3 -0
  21. package/pubmodules/pubModulesManager.js +115 -7
  22. package/pubmodules/rasa/index.js +8 -1
  23. package/pubmodules/rasa/listener.js +28 -7
  24. package/pubmodules/scheduler/tasks/closeBotUnresponsiveRequestTask.js +2 -2
  25. package/pubmodules/trigger/default.js +271 -0
  26. package/pubmodules/trigger/event/actionEventEmitter.js +10 -0
  27. package/pubmodules/trigger/event/flowEventEmitter.js +10 -0
  28. package/pubmodules/trigger/event/triggerEventEmitter.js +10 -0
  29. package/pubmodules/trigger/index.js +3 -0
  30. package/pubmodules/trigger/models/trigger.js +149 -0
  31. package/pubmodules/trigger/rulesTrigger.js +1180 -0
  32. package/pubmodules/trigger/start.js +114 -0
  33. package/pubmodules/trigger/triggerRoute.js +150 -0
  34. package/routes/department.js +51 -0
  35. package/routes/group.js +140 -0
  36. package/routes/project.js +52 -0
  37. package/routes/request.js +3 -2
  38. package/routes/subscription.js +140 -0
  39. package/routes/tag.js +138 -0
  40. package/services/faqBotHandler.js +2 -2
  41. package/services/faqBotSupport.js +0 -1
  42. package/services/faqService.js +1 -1
  43. package/services/modulesManager.js +16 -182
  44. package/services/subscriptionNotifier.js +485 -0
  45. package/template/email/assignedEmailMessage.html +1 -1
  46. package/template/email/assignedRequest.html +1 -1
  47. package/template/email/newMessage.html +1 -1
  48. package/template/email/passwordChanged.html +1 -1
  49. package/template/email/pooledEmailMessage.html +1 -1
  50. package/template/email/pooledRequest.html +1 -1
  51. package/template/email/resetPassword.html +2 -2
  52. package/template/email/ticket.html +1 -1
  53. package/views/messages.jade +1 -1
package/routes/tag.js ADDED
@@ -0,0 +1,138 @@
1
+ var express = require('express');
2
+ var router = express.Router();
3
+ var TagLibrary = require("../models/tagLibrary");
4
+ var winston = require('../config/winston');
5
+
6
+ router.post('/', function (req, res) {
7
+
8
+ winston.debug(req.body);
9
+ winston.debug("req.user", req.user);
10
+
11
+ var newTag = new TagLibrary({
12
+ tag: req.body.tag,
13
+ color: req.body.color,
14
+ id_project: req.projectid,
15
+ createdBy: req.user.id,
16
+ updatedBy: req.user.id
17
+ });
18
+
19
+ newTag.save(function (err, savedTag) {
20
+ if (err) {
21
+ // winston.error('--- > ERROR ', err)
22
+ if (err.code === 11000) { //error for dupes
23
+ return TagLibrary.findOne({id_project:req.projectid, tag: req.body.tag },function (err, savedTag) {
24
+ res.json(savedTag);
25
+ });
26
+ }
27
+ winston.error('--- > ERROR ', err)
28
+ return res.status(500).send({ success: false, msg: 'Error saving object.' });
29
+ }
30
+
31
+ res.json(savedTag);
32
+ });
33
+ });
34
+
35
+ router.put('/:tagid', function (req, res) {
36
+ winston.debug(req.body);
37
+ var update = {};
38
+
39
+
40
+ update.tag = req.body.tag;
41
+ update.color = req.body.color;
42
+
43
+
44
+ TagLibrary.findByIdAndUpdate(req.params.tagid, update, { new: true, upsert: true }, function (err, updatedTag) {
45
+ if (err) {
46
+ winston.error('--- > ERROR ', err);
47
+ return res.status(500).send({ success: false, msg: 'Error updating object.' });
48
+ }
49
+
50
+
51
+
52
+ // TagEvent.emit('Tag.update', updatedTag);
53
+ res.json(updatedTag);
54
+ });
55
+ });
56
+
57
+ router.delete('/:tagid', function (req, res) {
58
+ winston.debug(req.body);
59
+
60
+ TagLibrary.remove({ _id: req.params.tagid }, function (err, tag) {
61
+ if (err) {
62
+ winston.error('--- > ERROR ', err);
63
+ return res.status(500).send({ success: false, msg: 'Error deleting object.' });
64
+ }
65
+
66
+
67
+ // TagEvent.emit('Tag.delete', Tag);
68
+
69
+ res.json(tag);
70
+ });
71
+ });
72
+
73
+ router.get('/:tagid', function (req, res) {
74
+ winston.debug(req.body);
75
+
76
+ TagLibrary.findById(req.params.tagid, function (err, tag) {
77
+ if (err) {
78
+ return res.status(500).send({ success: false, msg: 'Error getting object.' });
79
+ }
80
+ if (!tag) {
81
+ return res.status(404).send({ success: false, msg: 'Object not found.' });
82
+ }
83
+ res.json(tag);
84
+ });
85
+ });
86
+
87
+ router.get('/', function (req, res) {
88
+ var limit = 40; // Number of Tags per page
89
+ var page = 0;
90
+
91
+ if (req.query.page) {
92
+ page = req.query.page;
93
+ }
94
+
95
+ var skip = page * limit;
96
+ winston.debug('Tag ROUTE - SKIP PAGE ', skip);
97
+
98
+
99
+ var query = { "id_project": req.projectid};
100
+
101
+ // if (req.query.full_text) {
102
+ // winston.debug('Tag ROUTE req.query.fulltext', req.query.full_text);
103
+ // query.$text = { "$search": req.query.full_text };
104
+ // }
105
+
106
+
107
+ var direction = -1; //-1 descending , 1 ascending
108
+ if (req.query.direction) {
109
+ direction = req.query.direction;
110
+ }
111
+
112
+ var sortField = "createdAt";
113
+ if (req.query.sort) {
114
+ sortField = req.query.sort;
115
+ }
116
+
117
+ var sortQuery = {};
118
+ sortQuery[sortField] = direction;
119
+
120
+ winston.debug("sort query", sortQuery);
121
+
122
+ return TagLibrary.find(query).
123
+ skip(skip).limit(limit).
124
+ sort(sortQuery).
125
+ exec(function (err, tags) {
126
+ if (err) {
127
+ winston.error('Tag ROUTE - REQUEST FIND ERR ', err)
128
+ return (err);
129
+ }
130
+
131
+ return res.json(tags);
132
+ });
133
+ });
134
+
135
+
136
+
137
+
138
+ module.exports = router;
@@ -10,7 +10,6 @@ var BotFromParticipant = require("../utils/botFromParticipant");
10
10
  var cacheUtil = require('../utils/cacheUtil');
11
11
  var eventService = require('../pubmodules/events/eventService');
12
12
  var mongoose = require('mongoose');
13
- const { TiledeskChatbotUtil } = require('@tiledesk/tiledesk-chatbot-util');
14
13
  const ActionsConstants = require('../models/actionsConstants');
15
14
  var httpUtil = require('../utils/httpUtil');
16
15
 
@@ -138,7 +137,7 @@ class FaqBotHandler {
138
137
 
139
138
 
140
139
 
141
-
140
+ // EXACT MATCH
142
141
  Faq.find(query)
143
142
  .lean().
144
143
  exec(async (err, faqs) => {
@@ -301,6 +300,7 @@ class FaqBotHandler {
301
300
  }
302
301
 
303
302
 
303
+
304
304
  Faq.find(query, mongoproject)
305
305
  .sort(sort)
306
306
  .lean().
@@ -4,7 +4,6 @@
4
4
 
5
5
  const Faq = require('../models/faq');
6
6
  const Faq_kb = require('../models/faq_kb');
7
- const MessageConstants = require('../models/messageConstants');
8
7
  var winston = require('../config/winston');
9
8
 
10
9
  var jwt = require('jsonwebtoken');
@@ -78,7 +78,7 @@ class FaqService {
78
78
  { 'question': '\\start', 'answer': 'Hello 👋. I\'m a bot 🤖.\n\nChoose one of the options below or write a message to reach our staff.\n* Who are you?\n* Where are you?\n* What can you do?\n* 👨🏻‍🦰 I want an agent', 'intent_display_name': 'start', 'topic': 'internal' },
79
79
  { 'question': 'defaultFallback', 'answer': 'I can not provide an adequate answer. Write a new question or talk to a human agent.\n* Back to start tdAction:start\n* See the docs https://docs.tiledesk.com/\n* 👨🏻‍🦰 I want an agent', 'intent_display_name': 'defaultFallback', 'topic': 'internal' }, //TODO se metto spazio n * nn va
80
80
  { 'question': 'What can you do?', 'answer': 'Using natural language processing, I\'m able to find the best answer for your users. I also support images, videos etc.. Let\'s try:\n* Sample Image\n* Sample Video\n* Sample Action tdAction:action1\n* Sample Frame\n* Back to start tdAction:start', 'topic': 'sample' },
81
- { 'question': 'Sample Image', 'answer': 'tdImage:https://tiledesk.com/tiledesk-logo-x1.png\n* What can you do?\n* Back to start tdAction:start', 'topic': 'sample' },
81
+ { 'question': 'Sample Image', 'answer': 'tdImage:https://tiledesk.com/wp-content/uploads/2022/07/tiledesk_v2.png\n* What can you do?\n* Back to start tdAction:start', 'topic': 'sample' },
82
82
  { 'question': 'Sample Frame', 'answer': 'tdFrame:https://www.emanueleferonato.com/wp-content/uploads/2019/02/runner/\n* What can you do?\n* Back to start tdAction:start', 'topic': 'sample' },
83
83
  { 'question': 'Sample Video', 'answer': 'tdVideo:https://www.youtube.com/embed/EngW7tLk6R8\n* What can you do?\n* Back to start tdAction:start', 'topic': 'sample' },
84
84
  { 'question': 'Where are you?', 'answer': 'We are here ❤️\ntdFrame:https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d6087916.923447935!2d8.234804542117423!3d41.836572992140624!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x12d4fe82448dd203%3A0xe22cf55c24635e6f!2sItaly!5e0!3m2!1sen!2sit!4v1613657475377!5m2!1sen!2sit\n* Back to start tdAction:start', 'topic': 'sample' },
@@ -28,16 +28,10 @@ if (licenseKey) {
28
28
 
29
29
  class ModulesManager {
30
30
 
31
- constructor() {
32
- this.trigger = undefined;
33
- this.triggerRoute = undefined;
31
+ constructor() {
34
32
  this.stripe = undefined;
35
33
  this.graphql = undefined;
36
- this.analyticsRoute = undefined;
37
- this.resthookRoute = undefined;
38
- this.elasticIndexer = undefined;
39
- this.activityArchiver = undefined;
40
- this.activityRoute = undefined;
34
+ this.elasticIndexer = undefined;
41
35
  this.facebookRoute = undefined;
42
36
  this.jwthistoryArchiver = undefined;
43
37
  this.jwthistoryRoute = undefined;
@@ -47,12 +41,10 @@ class ModulesManager {
47
41
  this.routingQueue = undefined;
48
42
  this.queue = undefined;
49
43
  this.cache = undefined;
50
- this.cannedResponseRoute = undefined;
51
- this.tagRoute = undefined;
52
- this.groupsRoute = undefined;
53
44
  this.visitorCounterRoute = undefined;
54
45
  this.visitorCounterMiddleware = undefined;
55
46
  this.widgetsRoute = undefined;
47
+ this.enterprise = undefined;
56
48
  }
57
49
 
58
50
  injectBefore(app) {
@@ -106,50 +98,16 @@ class ModulesManager {
106
98
  useUnderProjects(app) {
107
99
  var that = this;
108
100
  winston.debug("ModulesManager using controllers");
109
-
110
-
111
- if (this.triggerRoute) {
112
- app.use('/:projectid/modules/triggers', [passport.authenticate(['basic', 'jwt'], { session: false }), validtoken, roleChecker.hasRole('admin')], this.triggerRoute);
113
- winston.info("ModulesManager trigger controller loaded");
114
- }
115
-
116
- if (this.analyticsRoute) {
117
- app.use('/:projectid/analytics', [passport.authenticate(['basic', 'jwt'], { session: false }), validtoken, roleChecker.hasRole('agent')], this.analyticsRoute);
118
- winston.info("ModulesManager analytics controller loaded");
119
- }
120
-
121
- if (this.resthookRoute) {
122
- app.use('/:projectid/subscriptions', [passport.authenticate(['basic', 'jwt'], { session: false }), validtoken, roleChecker.hasRole('admin')], this.resthookRoute);
123
- winston.info("ModulesManager subscriptions controller loaded");
124
- }
125
-
126
- if (this.activityRoute) {
127
- app.use('/:projectid/activities', [passport.authenticate(['basic', 'jwt'], { session: false }), validtoken, roleChecker.hasRole('admin')], this.activityRoute);
128
- winston.info("ModulesManager activities controller loaded");
129
- }
130
-
101
+
102
+
103
+
131
104
 
132
105
  if (this.requestHistoryRoute) {
133
106
  app.use('/:projectid/requests/:request_id/history', [passport.authenticate(['basic', 'jwt'], { session: false }), validtoken, roleChecker.hasRoleOrTypes(null, ['subscription'])] , this.requestHistoryRoute);
134
107
  winston.info("ModulesManager requestHistory controller loaded");
135
108
  }
136
109
 
137
-
138
- if (this.cannedResponseRoute) {
139
- app.use('/:projectid/canned', [passport.authenticate(['basic', 'jwt'], { session: false }), validtoken, roleChecker.hasRole('agent')], this.cannedResponseRoute);
140
- winston.info("ModulesManager canned controller loaded");
141
- }
142
-
143
- if (this.tagRoute) {
144
- app.use('/:projectid/tags', [passport.authenticate(['basic', 'jwt'], { session: false }), validtoken, roleChecker.hasRole('agent')], this.tagRoute);
145
- winston.info("ModulesManager tag controller loaded");
146
- }
147
-
148
- if (this.groupsRoute) {
149
- app.use('/:projectid/groups', [passport.authenticate(['basic', 'jwt'], { session: false }), validtoken, roleChecker.hasRole('admin')], this.groupsRoute);
150
- winston.info("ModulesManager group controller loaded");
151
- }
152
-
110
+
153
111
 
154
112
 
155
113
  if (this.visitorCounterRoute) {
@@ -174,20 +132,21 @@ class ModulesManager {
174
132
 
175
133
 
176
134
  try {
177
- this.trigger = require('@tiledesk-ent/tiledesk-server-triggers').start;
178
- winston.debug("this.trigger:"+ this.trigger);
179
- this.triggerRoute = require('@tiledesk-ent/tiledesk-server-triggers').triggerRoute;
180
- winston.debug("this.triggerRoute:"+ this.triggerRoute);
181
- winston.info("ModulesManager trigger initialized");
135
+ this.enterprise = require('@tiledesk-ent/tiledesk-server-enterprise');
136
+ winston.debug("this.enterprise:"+ this.enterprise);
137
+ winston.info("ModulesManager enterprise initialized");
182
138
  } catch(err) {
183
139
  if (err.code == 'MODULE_NOT_FOUND') {
184
- winston.info("ModulesManager init trigger module not found");
140
+ winston.info("ModulesManager init enterprise module not found");
185
141
  }else {
186
- winston.error("ModulesManager error initializing init trigger module", err);
142
+ winston.error("ModulesManager error initializing init enterprise module", err);
187
143
  }
188
144
  }
189
145
 
190
146
 
147
+
148
+
149
+
191
150
  try {
192
151
  this.stripe = require('@tiledesk-ent/tiledesk-server-payments').stripeRoute;
193
152
  winston.info("ModulesManager stripe initialized");
@@ -198,51 +157,6 @@ class ModulesManager {
198
157
  winston.error("ModulesManager error initializing init stripe module", err);
199
158
  }
200
159
  }
201
-
202
- try {
203
- this.resthookRoute = require('@tiledesk-ent/tiledesk-server-resthook').resthookRoute;
204
- winston.debug("this.resthookRoute:"+ this.resthookRoute);
205
- this.subscriptionNotifier = require('@tiledesk-ent/tiledesk-server-resthook').subscriptionNotifier;
206
- // this.subscriptionNotifier.start();
207
- winston.info("ModulesManager resthook initialized");
208
- } catch(err) {
209
- if (err.code == 'MODULE_NOT_FOUND') {
210
- winston.info("ModulesManager init resthookRoute module not found");
211
- }else {
212
- winston.error("ModulesManager error initializing init resthook module", err);
213
- }
214
- }
215
-
216
-
217
- try {
218
- this.analyticsRoute = require('@tiledesk-ent/tiledesk-server-analytics').analyticsRoute;
219
- winston.debug("this.analyticsRoute:"+ this.analyticsRoute);
220
- winston.info("ModulesManager analyticsRoute initialized");
221
- } catch(err) {
222
- if (err.code == 'MODULE_NOT_FOUND') {
223
- winston.info("ModulesManager init analytics module not found");
224
- }else {
225
- winston.error("ModulesManager error initializing init analytics module", err);
226
- }
227
- }
228
-
229
-
230
- try {
231
- this.activityArchiver = require('@tiledesk-ent/tiledesk-server-activities').activityArchiver;
232
- // this.activityArchiver.listen();
233
- winston.debug("this.activityArchiver:"+ this.activityArchiver);
234
-
235
- this.activityRoute = require('@tiledesk-ent/tiledesk-server-activities').activityRoute;
236
- winston.debug("this.activityRoute:"+ this.activityRoute);
237
-
238
- winston.info("ModulesManager activities initialized");
239
- } catch(err) {
240
- if (err.code == 'MODULE_NOT_FOUND') {
241
- winston.info("ModulesManager init activities module not found");
242
- }else {
243
- winston.error("ModulesManager error initializing init activities module", err);
244
- }
245
- }
246
160
 
247
161
 
248
162
 
@@ -344,70 +258,8 @@ class ModulesManager {
344
258
  }
345
259
  }
346
260
 
347
- try {
348
- this.cannedResponseRoute = require('@tiledesk-ent/tiledesk-server-canned').cannedResponseRoute;
349
- winston.debug("this.cannedResponseRoute:"+ this.cannedResponseRoute);
350
- winston.info("ModulesManager cannedResponseRoute initialized");
351
- } catch(err) {
352
- if (err.code == 'MODULE_NOT_FOUND') {
353
- winston.info("ModulesManager init canned module not found");
354
- }else {
355
- winston.error("ModulesManager error initializing init canned module", err);
356
- }
357
- }
358
-
359
- try {
360
- this.tagRoute = require('@tiledesk-ent/tiledesk-server-tags').tagRoute;
361
- winston.debug("this.tagRoute:"+ this.tagRoute);
362
- winston.info("ModulesManager tagRoute initialized");
363
- } catch(err) {
364
- if (err.code == 'MODULE_NOT_FOUND') {
365
- winston.info("ModulesManager init tag module not found");
366
- }else {
367
- winston.error("ModulesManager error initializing init tag module", err);
368
- }
369
- }
370
-
371
- try {
372
- this.groupsRoute = require('@tiledesk-ent/tiledesk-server-groups').groupsRoute;
373
- winston.debug("this.groupsRoute:"+ this.groupsRoute);
374
- winston.info("ModulesManager groupsRoute initialized");
375
- } catch(err) {
376
- if (err.code == 'MODULE_NOT_FOUND') {
377
- winston.info("ModulesManager init group module not found");
378
- }else {
379
- winston.error("ModulesManager error initializing init group module", err);
380
- }
381
- }
382
-
383
261
 
384
-
385
- if (config && config.routes && config.routes.departmentsRoute) {
386
- try {
387
- require('@tiledesk-ent/tiledesk-server-departments').ext(config.routes.departmentsRoute, config.passport);
388
- winston.info("ModulesManager departmentsRoute initialized");
389
- } catch(err) {
390
- if (err.code == 'MODULE_NOT_FOUND') {
391
- winston.info("ModulesManager init departments module not found");
392
- }else {
393
- winston.error("ModulesManager error initializing init departments module", err);
394
- }
395
- }
396
- }
397
-
398
- if (config && config.routes && config.routes.projectsRoute) {
399
- try {
400
- require('@tiledesk-ent/tiledesk-server-mt').ext(config.routes.projectsRoute, config.passport);
401
- winston.info("ModulesManager mt initialized");
402
- } catch(err) {
403
- if (err.code == 'MODULE_NOT_FOUND') {
404
- winston.info("ModulesManager init mt module not found");
405
- }else {
406
- winston.error("ModulesManager error initializing init mt module", err);
407
- }
408
- }
409
- }
410
-
262
+
411
263
  try {
412
264
  this.visitorCounterRoute = require('@tiledesk-ent/tiledesk-server-visitorcounter').add(config.express);
413
265
  winston.debug("this.visitorCounterRoute:"+ this.visitorCounterRoute);
@@ -459,24 +311,6 @@ class ModulesManager {
459
311
 
460
312
  start() {
461
313
 
462
- // stampa log
463
- if (this.subscriptionNotifier) {
464
- try {
465
- this.subscriptionNotifier.start();
466
- winston.info("ModulesManager subscriptionNotifier started");
467
- } catch(err) {
468
- winston.info("ModulesManager error starting subscriptionNotifier module", err);
469
- }
470
- }
471
-
472
- if (this.activityArchiver) {
473
- try {
474
- this.activityArchiver.listen();
475
- winston.info("ModulesManager activityArchiver started");
476
- } catch(err) {
477
- winston.info("ModulesManager error starting activityArchiver module", err);
478
- }
479
- }
480
314
 
481
315
  if (this.jwthistoryArchiver) {
482
316
  try {