@tiledesk/tiledesk-server 2.1.41 → 2.2.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (85) hide show
  1. package/.circleci/config.yml +54 -0
  2. package/.env.sample +1 -1
  3. package/.github/workflows/docker-community-push-latest.yml +22 -0
  4. package/.github/workflows/{docker-image-push.yml → docker-image-en-tag-push.yml} +1 -1
  5. package/.github/workflows/docker-image-tag-community-tag-push.yml +21 -0
  6. package/.github/workflows/{docker-push-latest.yml → docker-push-en-push-latest.yml} +1 -1
  7. package/CHANGELOG.md +198 -1
  8. package/Dockerfile +1 -1
  9. package/Dockerfile-en +1 -1
  10. package/README.md +5 -7
  11. package/app.js +12 -1
  12. package/channels/chat21/chat21Contact.js +34 -8
  13. package/channels/chat21/chat21Handler.js +48 -5
  14. package/channels/chat21/chat21WebHook.js +34 -5
  15. package/channels/chat21/nativeauth.js +2 -2
  16. package/config/email.js +2 -1
  17. package/config/global.js +3 -0
  18. package/config/labels/widget.json +170 -16
  19. package/event/messageEvent.js +18 -1
  20. package/middleware/passport.js +10 -4
  21. package/models/actionsConstants.js +7 -0
  22. package/models/department.js +3 -0
  23. package/models/faq.js +8 -2
  24. package/models/faq_kb.js +6 -0
  25. package/models/message.js +10 -4
  26. package/models/messageConstants.js +3 -3
  27. package/models/request.js +33 -3
  28. package/package.json +31 -28
  29. package/pubmodules/emailNotification/requestNotification.js +380 -62
  30. package/pubmodules/messageActions/messageActionsInterceptor.js +20 -7
  31. package/pubmodules/messageTransformer/index.js +1 -1
  32. package/pubmodules/messageTransformer/microLanguageAttributesTransformerInterceptor.js +67 -0
  33. package/pubmodules/pubModulesManager.js +66 -14
  34. package/pubmodules/rules/conciergeBot.js +81 -49
  35. package/routes/auth.js +34 -10
  36. package/routes/campaigns.js +117 -25
  37. package/routes/faq.js +19 -0
  38. package/routes/faq_kb.js +13 -4
  39. package/routes/faqpub.js +1 -1
  40. package/routes/images.js +1 -1
  41. package/routes/jwt.js +0 -1
  42. package/routes/logs.js +26 -0
  43. package/routes/message.js +7 -2
  44. package/routes/messagesRoot.js +73 -16
  45. package/routes/project_user.js +36 -1
  46. package/routes/request.js +88 -12
  47. package/routes/requestUtilRoot.js +30 -0
  48. package/routes/urls.js +12 -0
  49. package/routes/users.js +5 -1
  50. package/services/BotSubscriptionNotifier.js +1 -0
  51. package/services/departmentService.js +29 -5
  52. package/services/emailService.js +1103 -298
  53. package/services/faqBotHandler.js +176 -61
  54. package/services/faqBotSupport.js +181 -117
  55. package/services/faqService.js +17 -14
  56. package/services/messageService.js +57 -9
  57. package/services/modulesManager.js +86 -23
  58. package/services/requestService.js +58 -17
  59. package/template/email/assignedEmailMessage.html +205 -0
  60. package/template/email/assignedRequest.html +44 -14
  61. package/template/email/beenInvitedExistingUser.html +2 -2
  62. package/template/email/beenInvitedNewUser.html +1 -1
  63. package/template/email/newMessage.html +31 -12
  64. package/template/email/passwordChanged.html +2 -3
  65. package/template/email/pooledEmailMessage.html +208 -0
  66. package/template/email/pooledRequest.html +41 -14
  67. package/template/email/resetPassword.html +2 -3
  68. package/template/email/sendTranscript.html +1 -1
  69. package/template/email/test.html +1 -1
  70. package/template/email/ticket.html +78 -52
  71. package/template/email/ticket.txt +5 -1
  72. package/template/email/verify.html +1 -1
  73. package/test/authentication.js +76 -4
  74. package/test/authenticationJwt.js +76 -2
  75. package/test/campaignsRoute.js +226 -0
  76. package/test/faqService.js +3 -3
  77. package/test/faqkbRoute.js +3 -2
  78. package/test/messageRootRoute.js +193 -0
  79. package/test/messageRoute.js +75 -0
  80. package/test/messageService.js +5 -5
  81. package/test/requestRoute.js +27 -9
  82. package/test/requestService.js +472 -11
  83. package/test-int/bot.js +673 -8
  84. package/websocket/webSocketServer.js +7 -4
  85. package/template/email/ticket-taking.txt +0 -7
@@ -23,7 +23,7 @@ module.exports = {
23
23
 
24
24
  LABELS : {
25
25
  EN : {
26
- JOIN_OPERATOR_MESSAGE : "We are putting you in touch with an operator..",
26
+ // JOIN_OPERATOR_MESSAGE : "We are putting you in touch with an operator..",
27
27
  NO_AVAILABLE_OPERATOR_MESSAGE : "Hello, no operators are available at the moment. Please leave a chat message, we will reply to you soon.",
28
28
  // TOUCHING_OPERATOR: "We are putting you in touch with an operator. Please wait..",
29
29
  TOUCHING_OPERATOR: "A new support request has been assigned to you"
@@ -31,7 +31,7 @@ module.exports = {
31
31
  // REOPEN_MESSAGE : "Chat re-opened"
32
32
  },
33
33
  IT : {
34
- JOIN_OPERATOR_MESSAGE : "La stiamo mettendo in contatto con un operatore. Attenda...",
34
+ // JOIN_OPERATOR_MESSAGE : "La stiamo mettendo in contatto con un operatore. Attenda...",
35
35
  NO_AVAILABLE_OPERATOR_MESSAGE : "Salve al momento non è disponibile alcun operatore. Lasci un messaggio in chat, la contatteremo presto.",
36
36
  TOUCHING_OPERATOR: "Una nuova richiesta di supporto è stata assegnata a te"
37
37
  // TOUCHING_OPERATOR :"La stiamo mettendo in contatto con un operatore. Attenda...",
@@ -39,7 +39,7 @@ module.exports = {
39
39
  // REOPEN_MESSAGE : "Chat riaperta"
40
40
  },
41
41
  "IT-IT" : {
42
- JOIN_OPERATOR_MESSAGE : "La stiamo mettendo in contatto con un operatore. Attenda...",
42
+ // JOIN_OPERATOR_MESSAGE : "La stiamo mettendo in contatto con un operatore. Attenda...",
43
43
  NO_AVAILABLE_OPERATOR_MESSAGE : "Salve al momento non è disponibile alcun operatore. Lasci un messaggio in chat, la contatteremo presto.",
44
44
  TOUCHING_OPERATOR: "Una nuova richiesta di supporto è stata assegnata a te"
45
45
  // TOUCHING_OPERATOR :"La stiamo mettendo in contatto con un operatore. Attenda...",
package/models/request.js CHANGED
@@ -15,12 +15,17 @@ var LocationSchema = require("../models/location");
15
15
  var RequestSnapshotSchema = require("../models/requestSnapshot");
16
16
 
17
17
  var defaultFullTextLanguage = process.env.DEFAULT_FULLTEXT_INDEX_LANGUAGE || "none";
18
+ winston.info("Request defaultFullTextLanguage: "+ defaultFullTextLanguage);
19
+
20
+ const disableTicketIdSequence = process.env.DISABLE_TICKET_ID_SEQUENCE || false;
21
+ winston.info("Request disableTicketIdSequence: "+ disableTicketIdSequence);
18
22
 
19
23
  // var autoIncrement = require('mongoose-auto-increment');
20
24
 
21
25
  //https://github.com/Automattic/mongoose/issues/5924
22
26
  mongoose.plugin(schema => { schema.options.usePushEach = true });
23
27
 
28
+ const AutoIncrement = require('mongoose-sequence')(mongoose);
24
29
 
25
30
 
26
31
 
@@ -38,9 +43,17 @@ var RequestSchema = new Schema({
38
43
  type: String,
39
44
  required: true,
40
45
  index: true,
41
- // unique: true //testare
46
+ // unique: true
47
+
42
48
  },
43
49
 
50
+ // TODO attiva solo condizionalmente per performance
51
+ ticket_id: {
52
+ type: Number,
53
+ // required: true,
54
+ index: true
55
+ },
56
+ // The user who is asking for support through a ticket is the requester. For most businesses that use Tiledesk Support, the requester is a customer, but requesters can also be agents in your Tiledesk Support instance. requester: {
44
57
  requester: {
45
58
  type: Schema.Types.ObjectId,
46
59
  ref: 'project_user',
@@ -83,7 +96,6 @@ var RequestSchema = new Schema({
83
96
  type: String,
84
97
  required: true
85
98
  },
86
-
87
99
  status: {
88
100
  type: Number,
89
101
  required: false,
@@ -116,6 +128,13 @@ var RequestSchema = new Schema({
116
128
  required: false,
117
129
  index: true,
118
130
  },
131
+
132
+ priority: {
133
+ type: String,
134
+ index: true,
135
+ default: "medium" //translate on client side
136
+ },
137
+
119
138
 
120
139
  participantsAgents: {
121
140
  type: Array,
@@ -139,7 +158,7 @@ var RequestSchema = new Schema({
139
158
  },
140
159
 
141
160
  //timestamp when the agent reply the first time to a visitor
142
- // documenta
161
+ // First reply time is the time between ticket creation and the first public comment from an agent, displayed in minutes. Some qualifications include:
143
162
  first_response_at: {
144
163
  type: Date,
145
164
  index: true
@@ -254,6 +273,12 @@ var RequestSchema = new Schema({
254
273
 
255
274
  );
256
275
 
276
+ if (!disableTicketIdSequence) {
277
+ winston.info("AutoIncrement plugin enabled");
278
+ RequestSchema.plugin(AutoIncrement, {id: 'ticket_seq', inc_field: 'ticket_id', reference_fields: ['id_project'], disable_hooks:false });
279
+ }
280
+
281
+
257
282
 
258
283
  // Backcompatibility
259
284
  RequestSchema.virtual('requester_id').get(function () {
@@ -402,6 +427,11 @@ RequestSchema.index({ id_project: 1, participants: 1});
402
427
  RequestSchema.index({ id_project: 1, status: 1, updatedAt: -1 }); // query for websocket
403
428
  RequestSchema.index({ id_project: 1, status: 1, preflight:1, updatedAt: -1 }); // query for websocket
404
429
 
430
+ RequestSchema.index({ id_project: 1, preflight:1, updatedAt: -1 }); // used query ws (topic.endsWith('/requests'))
431
+
432
+
433
+
434
+
405
435
  // cannot index parallel arrays [agents] [participants] {"driv
406
436
  // RequestSchema.index({ id_project: 1, status: 1, preflight:1, participants:1, "agents.id_user":1, updatedAt: -1 }); //NN LO APPLICA
407
437
 
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.1.41",
4
+ "version": "2.2.4",
5
5
  "scripts": {
6
6
  "start": "node ./bin/www",
7
7
  "pretest": "mongodb-runner start",
@@ -23,82 +23,85 @@
23
23
  },
24
24
  "engines": {
25
25
  "node": "12.20.2",
26
- "npm": "6.12.0"
26
+ "npm": "6.14.11"
27
27
  },
28
28
  "bin": {
29
29
  "tiledesk-server": "./bin/www"
30
30
  },
31
31
  "optionalDependencies": {
32
- "@tiledesk-ent/tiledesk-server-payments": "^1.1.3",
33
- "@tiledesk-ent/tiledesk-server-analytics": "^1.1.12",
34
32
  "@tiledesk-ent/tiledesk-server-activities": "^1.1.18",
35
- "@tiledesk-ent/tiledesk-server-resthook": "^1.1.47",
36
- "@tiledesk-ent/tiledesk-server-triggers": "^1.1.75",
37
- "@tiledesk-ent/tiledesk-server-jwthistory": "^1.1.9",
33
+ "@tiledesk-ent/tiledesk-server-analytics": "^1.1.12",
34
+ "@tiledesk-ent/tiledesk-server-cache": "^1.1.10",
35
+ "@tiledesk-ent/tiledesk-server-canned": "^1.1.1",
36
+ "@tiledesk-ent/tiledesk-server-departments": "^1.1.2",
38
37
  "@tiledesk-ent/tiledesk-server-dialogflow": "^1.1.6",
38
+ "@tiledesk-ent/tiledesk-server-groups": "^1.1.2",
39
+ "@tiledesk-ent/tiledesk-server-jwthistory": "^1.1.9",
40
+ "@tiledesk-ent/tiledesk-server-mt": "^1.1.6",
41
+ "@tiledesk-ent/tiledesk-server-payments": "^1.1.5",
42
+ "@tiledesk-ent/tiledesk-server-queue": "^1.1.10",
39
43
  "@tiledesk-ent/tiledesk-server-request-history": "^1.1.5",
44
+ "@tiledesk-ent/tiledesk-server-resthook": "^1.1.50",
40
45
  "@tiledesk-ent/tiledesk-server-routing-queue": "^1.1.11",
41
- "@tiledesk-ent/tiledesk-server-queue": "^1.1.10",
42
- "@tiledesk-ent/tiledesk-server-cache": "^1.1.10",
43
- "@tiledesk-ent/tiledesk-server-canned": "^1.1.1",
44
46
  "@tiledesk-ent/tiledesk-server-tags": "^1.1.1",
45
- "@tiledesk-ent/tiledesk-server-groups": "^1.1.2",
46
- "@tiledesk-ent/tiledesk-server-departments": "^1.1.2",
47
- "@tiledesk-ent/tiledesk-server-mt": "^1.1.5",
47
+ "@tiledesk-ent/tiledesk-server-triggers": "^1.1.77",
48
48
  "@tiledesk-ent/tiledesk-server-visitorcounter": "^1.1.1"
49
49
  },
50
50
  "dependencies": {
51
51
  "@tiledesk/tiledesk-chat21-app": "^1.1.4",
52
- "@tiledesk/tiledesk-chatbot-util": "^0.8.19",
52
+ "@tiledesk/tiledesk-chatbot-util": "^0.8.23",
53
53
  "app-root-path": "^3.0.0",
54
54
  "bcrypt-nodejs": "0.0.3",
55
55
  "body-parser": "^1.19.0",
56
56
  "cookie-parser": "~1.4.5",
57
57
  "cors": "^2.8.5",
58
58
  "csv-express": "^1.2.2",
59
- "debug": "~4.3.1",
59
+ "debug": "^4.3.2",
60
60
  "dotenv": "^8.6.0",
61
- "email-templates": "^8.0.4",
61
+ "email-templates": "^8.0.8",
62
62
  "eventemitter2": "^6.4.4",
63
63
  "express": "~4.17.1",
64
- "express-session": "^1.17.1",
65
- "express-validator": "^6.11.1",
64
+ "express-session": "^1.17.2",
65
+ "express-validator": "^6.12.1",
66
66
  "fast-csv": "^4.3.6",
67
67
  "geoip-lite": "^1.4.2",
68
68
  "handlebars": "^4.7.7",
69
+ "html-entities": "^2.3.2",
69
70
  "http": "0.0.0",
70
- "immutable": "^4.0.0-rc.12",
71
+ "immutable": "^4.0.0-rc.14",
71
72
  "jade": "~1.11.0",
72
73
  "jsonwebtoken": "^8.5.1",
73
74
  "lodash": "^4.17.21",
74
- "maskdata": "^1.1.4",
75
+ "marked": "^3.0.4",
76
+ "maskdata": "^1.1.6",
75
77
  "migrate-mongoose": "^4.0.0",
76
78
  "mix-hash": "^1.0.7",
77
79
  "moment": "^2.29.1",
78
80
  "moment-timezone": "^0.5.33",
79
- "mongoose": "^5.12.9",
81
+ "mongoose": "^5.13.12",
80
82
  "mongoose-auto-increment": "^5.0.1",
83
+ "mongoose-sequence": "^5.3.1",
81
84
  "morgan": "^1.10.0",
82
- "multer": "^1.4.2",
85
+ "multer": "^1.4.3",
83
86
  "multer-gridfs-storage": "^4.2.0",
84
- "nanoid": "^3.1.23",
87
+ "nanoid": "^3.1.25",
85
88
  "node-rsa": "^1.1.1",
86
89
  "node-schedule": "^2.0.0",
87
- "nodemailer": "^6.6.0",
90
+ "nodemailer": "^6.6.3",
88
91
  "passport": "^0.4.1",
89
92
  "passport-http": "^0.3.0",
90
93
  "passport-jwt": "^4.0.0",
91
94
  "promise-events": "^0.2.4",
92
95
  "request": "^2.88.2",
93
96
  "request-promise": "^4.2.6",
94
- "retry-request": "^4.1.3",
97
+ "retry-request": "^4.2.2",
95
98
  "serve-favicon": "~2.5.0",
96
99
  "sharp": "^0.27.2",
97
- "uniqid": "^5.3.0",
100
+ "uniqid": "^5.4.0",
98
101
  "uuid": "^3.3.3",
99
102
  "winston": "^3.3.3",
100
103
  "winston-mongodb": "^5.0.7",
101
- "ws": "^7.4.5"
104
+ "ws": "^7.5.4"
102
105
  },
103
106
  "devDependencies": {
104
107
  "chai": "^4.3.4",
@@ -107,7 +110,7 @@
107
110
  "loadtest": "^5.1.2",
108
111
  "mocha": "^8.4.0",
109
112
  "mongodb-runner": "4.8.1",
110
- "nodemon": "^2.0.7",
113
+ "nodemon": "^2.0.12",
111
114
  "sinon": "^9.2.4",
112
115
  "sinon-mongoose": "^2.3.0"
113
116
  },