@tiledesk/tiledesk-server 2.1.41 → 2.2.4

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 (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
  },