@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.
- package/.circleci/config.yml +54 -0
- package/.env.sample +1 -1
- package/.github/workflows/docker-community-push-latest.yml +22 -0
- package/.github/workflows/{docker-image-push.yml → docker-image-en-tag-push.yml} +1 -1
- package/.github/workflows/docker-image-tag-community-tag-push.yml +21 -0
- package/.github/workflows/{docker-push-latest.yml → docker-push-en-push-latest.yml} +1 -1
- package/CHANGELOG.md +198 -1
- package/Dockerfile +1 -1
- package/Dockerfile-en +1 -1
- package/README.md +5 -7
- package/app.js +12 -1
- package/channels/chat21/chat21Contact.js +34 -8
- package/channels/chat21/chat21Handler.js +48 -5
- package/channels/chat21/chat21WebHook.js +34 -5
- package/channels/chat21/nativeauth.js +2 -2
- package/config/email.js +2 -1
- package/config/global.js +3 -0
- package/config/labels/widget.json +170 -16
- package/event/messageEvent.js +18 -1
- package/middleware/passport.js +10 -4
- package/models/actionsConstants.js +7 -0
- package/models/department.js +3 -0
- package/models/faq.js +8 -2
- package/models/faq_kb.js +6 -0
- package/models/message.js +10 -4
- package/models/messageConstants.js +3 -3
- package/models/request.js +33 -3
- package/package.json +31 -28
- package/pubmodules/emailNotification/requestNotification.js +380 -62
- package/pubmodules/messageActions/messageActionsInterceptor.js +20 -7
- package/pubmodules/messageTransformer/index.js +1 -1
- package/pubmodules/messageTransformer/microLanguageAttributesTransformerInterceptor.js +67 -0
- package/pubmodules/pubModulesManager.js +66 -14
- package/pubmodules/rules/conciergeBot.js +81 -49
- package/routes/auth.js +34 -10
- package/routes/campaigns.js +117 -25
- package/routes/faq.js +19 -0
- package/routes/faq_kb.js +13 -4
- package/routes/faqpub.js +1 -1
- package/routes/images.js +1 -1
- package/routes/jwt.js +0 -1
- package/routes/logs.js +26 -0
- package/routes/message.js +7 -2
- package/routes/messagesRoot.js +73 -16
- package/routes/project_user.js +36 -1
- package/routes/request.js +88 -12
- package/routes/requestUtilRoot.js +30 -0
- package/routes/urls.js +12 -0
- package/routes/users.js +5 -1
- package/services/BotSubscriptionNotifier.js +1 -0
- package/services/departmentService.js +29 -5
- package/services/emailService.js +1103 -298
- package/services/faqBotHandler.js +176 -61
- package/services/faqBotSupport.js +181 -117
- package/services/faqService.js +17 -14
- package/services/messageService.js +57 -9
- package/services/modulesManager.js +86 -23
- package/services/requestService.js +58 -17
- package/template/email/assignedEmailMessage.html +205 -0
- package/template/email/assignedRequest.html +44 -14
- package/template/email/beenInvitedExistingUser.html +2 -2
- package/template/email/beenInvitedNewUser.html +1 -1
- package/template/email/newMessage.html +31 -12
- package/template/email/passwordChanged.html +2 -3
- package/template/email/pooledEmailMessage.html +208 -0
- package/template/email/pooledRequest.html +41 -14
- package/template/email/resetPassword.html +2 -3
- package/template/email/sendTranscript.html +1 -1
- package/template/email/test.html +1 -1
- package/template/email/ticket.html +78 -52
- package/template/email/ticket.txt +5 -1
- package/template/email/verify.html +1 -1
- package/test/authentication.js +76 -4
- package/test/authenticationJwt.js +76 -2
- package/test/campaignsRoute.js +226 -0
- package/test/faqService.js +3 -3
- package/test/faqkbRoute.js +3 -2
- package/test/messageRootRoute.js +193 -0
- package/test/messageRoute.js +75 -0
- package/test/messageService.js +5 -5
- package/test/requestRoute.js +27 -9
- package/test/requestService.js +472 -11
- package/test-int/bot.js +673 -8
- package/websocket/webSocketServer.js +7 -4
- package/template/email/ticket-taking.txt +0 -7
@@ -17,11 +17,23 @@ var ProjectUserUtil = require("../../utils/project_userUtil");
|
|
17
17
|
var RequestUtil = require("../../utils/requestUtil");
|
18
18
|
const authEvent = require('../../event/authEvent');
|
19
19
|
|
20
|
+
var syncJoinAndLeaveGroupEvent = false;
|
21
|
+
if (process.env.SYNC_JOIN_LEAVE_GROUP_EVENT === true || process.env.SYNC_JOIN_LEAVE_GROUP_EVENT ==="true") {
|
22
|
+
syncJoinAndLeaveGroupEvent = true;
|
23
|
+
}
|
24
|
+
winston.info("Chat21 Sync JoinAndLeave Support Group Event: " + syncJoinAndLeaveGroupEvent);
|
25
|
+
|
26
|
+
var allowReopenChat = false;
|
27
|
+
if (process.env.ALLOW_REOPEN_CHAT === true || process.env.ALLOW_REOPEN_CHAT ==="true") {
|
28
|
+
allowReopenChat = true;
|
29
|
+
}
|
30
|
+
winston.info("Chat21 allow reopen chat: " + allowReopenChat);
|
31
|
+
|
20
32
|
|
21
33
|
router.post('/', function (req, res) {
|
22
34
|
|
23
35
|
|
24
|
-
|
36
|
+
winston.debug("req.body.event_type: " + req.body.event_type);
|
25
37
|
|
26
38
|
//Deprecated
|
27
39
|
if (req.body.event_type == "message-sent" || req.body.event_type == "new-message") {
|
@@ -38,7 +50,7 @@ router.post('/', function (req, res) {
|
|
38
50
|
|
39
51
|
var message = req.body.data;
|
40
52
|
|
41
|
-
|
53
|
+
winston.debug("message text: " + message.text);
|
42
54
|
|
43
55
|
|
44
56
|
// before request_id id_project unique commented
|
@@ -344,16 +356,16 @@ router.post('/', function (req, res) {
|
|
344
356
|
var projectId = RequestUtil.getProjectIdFromRequestId(recipient_id);
|
345
357
|
|
346
358
|
var isObjectId = mongoose.Types.ObjectId.isValid(projectId);
|
347
|
-
winston.
|
359
|
+
winston.debug("isObjectId:"+ isObjectId);
|
348
360
|
|
349
|
-
winston.
|
361
|
+
winston.debug("attributes",conversation.attributes);
|
350
362
|
|
351
363
|
if (!projectId || !isObjectId) { //back compatibility when projectId were always presents in the attributes (firebase)
|
352
364
|
projectId = conversation.attributes.projectId;
|
353
365
|
winston.verbose('getting projectId from attributes (back compatibility): '+ projectId);
|
354
366
|
}
|
355
367
|
|
356
|
-
winston.
|
368
|
+
winston.debug('projectId: '+ projectId);
|
357
369
|
|
358
370
|
if (!projectId) {
|
359
371
|
return res.status(500).send({success: false, msg: "Error projectid is not presents in attributes " });
|
@@ -411,6 +423,11 @@ router.post('/', function (req, res) {
|
|
411
423
|
|
412
424
|
winston.debug("req.body", JSON.stringify(req.body));
|
413
425
|
|
426
|
+
if (!syncJoinAndLeaveGroupEvent) {
|
427
|
+
winston.debug("syncJoinAndLeaveGroupEvent is disabled");
|
428
|
+
return res.status(200).send({success: true, msg: "syncJoinAndLeaveGroupEvent is disabled" });
|
429
|
+
}
|
430
|
+
|
414
431
|
var data = req.body.data;
|
415
432
|
//winston.debug("data",data);
|
416
433
|
|
@@ -476,6 +493,12 @@ router.post('/', function (req, res) {
|
|
476
493
|
|
477
494
|
winston.debug("req.body", JSON.stringify(req.body));
|
478
495
|
|
496
|
+
if (!syncJoinAndLeaveGroupEvent) {
|
497
|
+
winston.debug("syncJoinAndLeaveGroupEvent is disabled");
|
498
|
+
return res.status(200).send({success: true, msg: "syncJoinAndLeaveGroupEvent is disabled" });
|
499
|
+
}
|
500
|
+
|
501
|
+
|
479
502
|
|
480
503
|
var data = req.body.data;
|
481
504
|
// winston.debug("data",data);
|
@@ -515,6 +538,11 @@ router.post('/', function (req, res) {
|
|
515
538
|
|
516
539
|
winston.debug("req.body",req.body);
|
517
540
|
|
541
|
+
if (!allowReopenChat) {
|
542
|
+
winston.debug("allowReopenChat is disabled");
|
543
|
+
return res.status(200).send({success: true, msg: "allowReopenChat is disabled" });
|
544
|
+
}
|
545
|
+
|
518
546
|
|
519
547
|
var conversation = req.body.data;
|
520
548
|
// winston.debug("conversation",conversation);
|
@@ -694,6 +722,7 @@ else if (req.body.event_type == "presence-change") {
|
|
694
722
|
|
695
723
|
project_user.presence = update
|
696
724
|
|
725
|
+
|
697
726
|
project_user.save(function (err, savedProjectUser) {
|
698
727
|
if (err) {
|
699
728
|
winston.error('Error saving project_user ', err)
|
@@ -46,7 +46,7 @@ router.post('/createCustomToken', function (req, res) {
|
|
46
46
|
]
|
47
47
|
|
48
48
|
const now = Math.round(new Date().getTime()/1000);
|
49
|
-
console.log("now: ", now)
|
49
|
+
// console.log("now: ", now)
|
50
50
|
const exp = now + 60 * 60 * 24 * 30;
|
51
51
|
|
52
52
|
var payload = {
|
@@ -76,7 +76,7 @@ router.post('/createCustomToken', function (req, res) {
|
|
76
76
|
"kid": "tiledesk-key", //"legacy-token-key",
|
77
77
|
"tiledesk_api_roles": "user"
|
78
78
|
}
|
79
|
-
|
79
|
+
winston.debug("payload:\n", payload)
|
80
80
|
var token = jwt.sign(
|
81
81
|
payload,
|
82
82
|
jwtSecret,
|
package/config/email.js
CHANGED
@@ -3,6 +3,7 @@ module.exports = {
|
|
3
3
|
'username': 'postmaster@mg.tiledesk.com',
|
4
4
|
'from': 'Tiledesk Notification <postmaster@mg.tiledesk.com>',
|
5
5
|
'bcc': 'tiledesknotification@frontiere21.it',
|
6
|
-
'replyToDomain': 'tickets.com',
|
7
6
|
'baseUrl':'https://console.tiledesk.com/v2/dashboard',
|
7
|
+
'replyEnabled' : false,
|
8
|
+
'inboundDomain': 'tickets.tiledesk.com'
|
8
9
|
};
|
package/config/global.js
ADDED
@@ -22,7 +22,7 @@
|
|
22
22
|
"CALLOUT_TITLE_PLACEHOLDER": "🖐 Need Help?",
|
23
23
|
"CALLOUT_MSG_PLACEHOLDER": "Click here and start chatting with us!",
|
24
24
|
"CUSTOMER_SATISFACTION": "Customer satisfaction",
|
25
|
-
"YOUR_OPINION_ON_OUR_CUSTOMER_SERVICE": "
|
25
|
+
"YOUR_OPINION_ON_OUR_CUSTOMER_SERVICE": "Your opinion on our customer service",
|
26
26
|
"DOWNLOAD_TRANSCRIPT": "Download transcript",
|
27
27
|
"BACK": "Back",
|
28
28
|
"YOUR_RATING": "your rating",
|
@@ -37,14 +37,20 @@
|
|
37
37
|
"BUTTON_EDIT_PROFILE": "Update profile",
|
38
38
|
"BUTTON_DOWNLOAD_TRANSCRIPT": "Download transcript",
|
39
39
|
"RATE_CHAT": "Rate chat",
|
40
|
+
|
40
41
|
"WELLCOME_TITLE": "Hi, welcome to Tiledesk 👋",
|
41
42
|
"WELLCOME_MSG": "How can we help?",
|
42
43
|
"WELLCOME": "Welcome",
|
44
|
+
|
45
|
+
"WELCOME_TITLE": "Hi, welcome to Tiledesk 👋",
|
46
|
+
"WELCOME_MSG": "How can we help?",
|
47
|
+
"WELCOME": "Welcome",
|
48
|
+
|
43
49
|
"OPTIONS": "options",
|
44
50
|
"SOUND_OFF": "sound off",
|
45
51
|
"SOUND_ON": "sound on",
|
46
52
|
"LOGOUT": "logout",
|
47
|
-
"CLOSE": "
|
53
|
+
"CLOSE": "Close",
|
48
54
|
"PREV_CONVERSATIONS": "Your conversations",
|
49
55
|
"YOU": "You",
|
50
56
|
"SHOW_ALL_CONV": "show all",
|
@@ -53,7 +59,22 @@
|
|
53
59
|
"SEE_PREVIOUS": "see previous",
|
54
60
|
"WAITING_TIME_FOUND": "The team typically replies in $reply_time",
|
55
61
|
"WAITING_TIME_NOT_FOUND": "The team will reply as soon as possible",
|
56
|
-
"CLOSED": "
|
62
|
+
"CLOSED": "Closed",
|
63
|
+
|
64
|
+
"INFO_SUPPORT_USER_ADDED_SUBJECT":"you",
|
65
|
+
"INFO_SUPPORT_USER_ADDED_YOU_VERB":"you have been added ",
|
66
|
+
"INFO_SUPPORT_USER_ADDED_COMPLEMENT":"joined",
|
67
|
+
"INFO_SUPPORT_USER_ADDED_VERB":"to chat",
|
68
|
+
"INFO_SUPPORT_CHAT_REOPENED":"Chat reopened",
|
69
|
+
"INFO_SUPPORT_CHAT_CLOSED":"Chat closed",
|
70
|
+
|
71
|
+
"TICKET_TAKING":"The request has been received and the assistance staff is dealing with it.\nTo add more comments, reply to this email.",
|
72
|
+
|
73
|
+
"LABEL_ERROR_FIELD_REQUIRED": "Required field",
|
74
|
+
"SENT_AN_ATTACHMENT": "sent an attachment",
|
75
|
+
"SENT_AN_IMAGE": "sent an image"
|
76
|
+
|
77
|
+
|
57
78
|
}
|
58
79
|
},
|
59
80
|
{
|
@@ -79,7 +100,7 @@
|
|
79
100
|
"CALLOUT_TITLE_PLACEHOLDER": "🖐 Bisogno di aiuto?",
|
80
101
|
"CALLOUT_MSG_PLACEHOLDER": "Clicca qui e inizia a chattare con noi!",
|
81
102
|
"CUSTOMER_SATISFACTION": "Valutazione servizio",
|
82
|
-
"YOUR_OPINION_ON_OUR_CUSTOMER_SERVICE": "
|
103
|
+
"YOUR_OPINION_ON_OUR_CUSTOMER_SERVICE": "Il tuo giudizio sul nostro servizio clienti",
|
83
104
|
"DOWNLOAD_TRANSCRIPT": "Scarica transcript",
|
84
105
|
"BACK": "Indietro",
|
85
106
|
"YOUR_RATING": "il tuo voto",
|
@@ -94,10 +115,16 @@
|
|
94
115
|
"BUTTON_EDIT_PROFILE": "Modifica profilo",
|
95
116
|
"BUTTON_DOWNLOAD_TRANSCRIPT": "Scarica transcript",
|
96
117
|
"RATE_CHAT": "Valuta chat",
|
118
|
+
|
97
119
|
"WELLCOME_TITLE": "Ciao, benvenuto su Tiledesk 👋",
|
98
120
|
"WELLCOME_MSG": "Come possiamo aiutarti?",
|
99
|
-
"OPTIONS": "opzioni",
|
100
121
|
"WELLCOME": "Benvenuto",
|
122
|
+
|
123
|
+
"WELCOME_TITLE": "Ciao, benvenuto su Tiledesk 👋",
|
124
|
+
"WELCOME_MSG": "Come possiamo aiutarti?",
|
125
|
+
"WELCOME": "Benvenuto",
|
126
|
+
|
127
|
+
"OPTIONS": "opzioni",
|
101
128
|
"SOUND_OFF": "suono spento",
|
102
129
|
"SOUND_ON": "suono acceso",
|
103
130
|
"LOGOUT": "disconnetti",
|
@@ -110,7 +137,20 @@
|
|
110
137
|
"SEE_PREVIOUS": "vedi precedenti",
|
111
138
|
"WAITING_TIME_FOUND": "Il team tipicamente risponde in $reply_time",
|
112
139
|
"WAITING_TIME_NOT_FOUND": "Vi risponderemo appena possibile",
|
113
|
-
"CLOSED": "
|
140
|
+
"CLOSED": "Chiusa",
|
141
|
+
|
142
|
+
"INFO_SUPPORT_USER_ADDED_SUBJECT":"tu",
|
143
|
+
"INFO_SUPPORT_USER_ADDED_YOU_VERB":"sei stato aggiunto ",
|
144
|
+
"INFO_SUPPORT_USER_ADDED_COMPLEMENT":"si è unito",
|
145
|
+
"INFO_SUPPORT_USER_ADDED_VERB":"alla chat",
|
146
|
+
"INFO_SUPPORT_CHAT_REOPENED":"Chat riaperta",
|
147
|
+
"INFO_SUPPORT_CHAT_CLOSED":"Chat chiusa",
|
148
|
+
|
149
|
+
"TICKET_TAKING":"La richiesta è stata ricevuta e il personale di assistenza se ne sta occupando.\nPer aggiungere ulteriori commenti, rispondi a questa email.",
|
150
|
+
|
151
|
+
"LABEL_ERROR_FIELD_REQUIRED": "Campo richiesto",
|
152
|
+
"SENT_AN_ATTACHMENT": "ha inviato un allegato",
|
153
|
+
"SENT_AN_IMAGE":"ha inviato un'immagine"
|
114
154
|
}
|
115
155
|
},
|
116
156
|
{
|
@@ -136,7 +176,7 @@
|
|
136
176
|
"CALLOUT_TITLE_PLACEHOLDER": "🖐 Besoin d'aide?",
|
137
177
|
"CALLOUT_MSG_PLACEHOLDER": "Cliquez ici et commencez à discuter avec nous!",
|
138
178
|
"CUSTOMER_SATISFACTION": "Évaluation des services",
|
139
|
-
"YOUR_OPINION_ON_OUR_CUSTOMER_SERVICE": "
|
179
|
+
"YOUR_OPINION_ON_OUR_CUSTOMER_SERVICE": "Votre avis sur notre service client",
|
140
180
|
"DOWNLOAD_TRANSCRIPT": "Télécharger la transcription",
|
141
181
|
"BACK": "En arrière",
|
142
182
|
"YOUR_RATING": "votre vote",
|
@@ -151,10 +191,16 @@
|
|
151
191
|
"BUTTON_EDIT_PROFILE": "Modifier le profil",
|
152
192
|
"BUTTON_DOWNLOAD_TRANSCRIPT": "Télécharger la transcription",
|
153
193
|
"RATE_CHAT": "évaluer la conversation",
|
194
|
+
|
154
195
|
"WELLCOME_TITLE": "Salut, bienvenue à Tiledesk 👋",
|
155
196
|
"WELLCOME_MSG": "Comment pouvons-nous vous aider?",
|
156
|
-
"OPTIONS": "options",
|
157
197
|
"WELLCOME": "Bienvenue",
|
198
|
+
|
199
|
+
"WELCOME_TITLE": "Salut, bienvenue à Tiledesk 👋",
|
200
|
+
"WELCOME_MSG": "Comment pouvons-nous vous aider?",
|
201
|
+
"WELCOME": "Bienvenue",
|
202
|
+
|
203
|
+
"OPTIONS": "options",
|
158
204
|
"SOUND_OFF": "Sound off",
|
159
205
|
"SOUND_ON": "Sound on",
|
160
206
|
"LOGOUT": "Connectez-out",
|
@@ -167,7 +213,20 @@
|
|
167
213
|
"SEE_PREVIOUS": "voir les conversations précédentes",
|
168
214
|
"WAITING_TIME_FOUND": "L'équipe répond généralement en $reply_time",
|
169
215
|
"WAITING_TIME_NOT_FOUND": "Nous vous répondrons dans les plus brefs délais",
|
170
|
-
"CLOSED": "
|
216
|
+
"CLOSED": "Fermé",
|
217
|
+
|
218
|
+
"INFO_SUPPORT_USER_ADDED_SUBJECT":"toi",
|
219
|
+
"INFO_SUPPORT_USER_ADDED_YOU_VERB":"tu as été ajouté ",
|
220
|
+
"INFO_SUPPORT_USER_ADDED_COMPLEMENT":"rejoint",
|
221
|
+
"INFO_SUPPORT_USER_ADDED_VERB":"discuter",
|
222
|
+
"INFO_SUPPORT_CHAT_REOPENED":"Chat rouvert",
|
223
|
+
"INFO_SUPPORT_CHAT_CLOSED":"Chat fermé",
|
224
|
+
|
225
|
+
"TICKET_TAKING":"La demande a été reçue et le personnel d'assistance la traite.\nPour ajouter d'autres commentaires, répondez à cet e-mail.",
|
226
|
+
|
227
|
+
"LABEL_ERROR_FIELD_REQUIRED": "Champ obligatoire",
|
228
|
+
"SENT_AN_ATTACHMENT": "envoyé une pièce jointe",
|
229
|
+
"SENT_AN_IMAGE": "envoyé une image"
|
171
230
|
}
|
172
231
|
},
|
173
232
|
{
|
@@ -208,9 +267,15 @@
|
|
208
267
|
"BUTTON_EDIT_PROFILE":"Actualización del perfil",
|
209
268
|
"BUTTON_DOWNLOAD_TRANSCRIPT":"Download transcript",
|
210
269
|
"RATE_CHAT":"Califica el chat",
|
270
|
+
|
211
271
|
"WELLCOME_TITLE":"Hola, bienvenido a tiledesk 👋",
|
212
272
|
"WELLCOME_MSG":"¿Cómo podemos ayudar?",
|
213
273
|
"WELLCOME":"¡Bienvenido!",
|
274
|
+
|
275
|
+
"WELCOME_TITLE":"Hola, bienvenido a tiledesk 👋",
|
276
|
+
"WELCOME_MSG":"¿Cómo podemos ayudar?",
|
277
|
+
"WELCOME":"¡Bienvenido!",
|
278
|
+
|
214
279
|
"OPTIONS":"Opciones",
|
215
280
|
"SOUND_OFF":"Sonido apagado",
|
216
281
|
"SOUND_ON":"Sonido encendido",
|
@@ -224,7 +289,21 @@
|
|
224
289
|
"SEE_PREVIOUS":"Ver anterior",
|
225
290
|
"WAITING_TIME_FOUND":"El equipo típicamente responde en $reply_time",
|
226
291
|
"WAITING_TIME_NOT_FOUND":"El equipo responderá lo antes posible.",
|
227
|
-
"CLOSED":"
|
292
|
+
"CLOSED":"Cerrado",
|
293
|
+
|
294
|
+
"INFO_SUPPORT_USER_ADDED_SUBJECT":"usted",
|
295
|
+
"INFO_SUPPORT_USER_ADDED_YOU_VERB":"usted ha sido agregado ",
|
296
|
+
"INFO_SUPPORT_USER_ADDED_COMPLEMENT":"unido",
|
297
|
+
"INFO_SUPPORT_USER_ADDED_VERB":"para charlar",
|
298
|
+
"INFO_SUPPORT_CHAT_REOPENED":"Chat reabierto",
|
299
|
+
"INFO_SUPPORT_CHAT_CLOSED":"Chat cerrado",
|
300
|
+
|
301
|
+
"TICKET_TAKING":"La solicitud ha sido recibida y el personal de asistencia está tratando con ella. \nPara agregar más comentarios, responda a este correo electrónico.",
|
302
|
+
|
303
|
+
"LABEL_ERROR_FIELD_REQUIRED": "Campo obligatorio",
|
304
|
+
"SENT_AN_ATTACHMENT": "envió un archivo adjunto",
|
305
|
+
"SENT_AN_IMAGE": "envió una imagen"
|
306
|
+
|
228
307
|
}
|
229
308
|
},
|
230
309
|
{
|
@@ -265,14 +344,20 @@
|
|
265
344
|
"BUTTON_EDIT_PROFILE":"Profil aktualisieren",
|
266
345
|
"BUTTON_DOWNLOAD_TRANSCRIPT":"Download transcript",
|
267
346
|
"RATE_CHAT":"Chat bewerten",
|
347
|
+
|
268
348
|
"WELLCOME_TITLE":"Hallo, willkommen in Tiledesk 👋",
|
269
349
|
"WELLCOME_MSG":"Wie können wir helfen?",
|
270
350
|
"WELLCOME":"Herzlich willkommen",
|
351
|
+
|
352
|
+
"WELCOME_TITLE":"Hallo, willkommen in Tiledesk 👋",
|
353
|
+
"WELCOME_MSG":"Wie können wir helfen?",
|
354
|
+
"WELCOME":"Herzlich willkommen",
|
355
|
+
|
271
356
|
"OPTIONS":"Optionen",
|
272
357
|
"SOUND_OFF":"Ton aus",
|
273
358
|
"SOUND_ON":"Ton an",
|
274
359
|
"LOGOUT":"Ausloggen",
|
275
|
-
"CLOSE":"
|
360
|
+
"CLOSE":"Schließen",
|
276
361
|
"PREV_CONVERSATIONS":"Ihre Gespräche",
|
277
362
|
"YOU":"Du",
|
278
363
|
"SHOW_ALL_CONV":"zeige alles",
|
@@ -281,7 +366,20 @@
|
|
281
366
|
"SEE_PREVIOUS":"siehe vorher",
|
282
367
|
"WAITING_TIME_FOUND":"Das Team antwortet normalerweise in $reply_time",
|
283
368
|
"WAITING_TIME_NOT_FOUND":"Das Team wird so schnell wie möglich antworten",
|
284
|
-
"CLOSED":"
|
369
|
+
"CLOSED":"Geschlossen",
|
370
|
+
|
371
|
+
"INFO_SUPPORT_USER_ADDED_SUBJECT": "Sie",
|
372
|
+
"INFO_SUPPORT_USER_ADDED_YOU_VERB": "Sie wurden hinzugefügt ",
|
373
|
+
"INFO_SUPPORT_USER_ADDED_COMPLEMENT": "beigetreten",
|
374
|
+
"INFO_SUPPORT_USER_ADDED_VERB": "zum Chatten",
|
375
|
+
"INFO_SUPPORT_CHAT_REOPENED": "Chat wieder geöffnet",
|
376
|
+
"INFO_SUPPORT_CHAT_CLOSED": "Chat geschlossen",
|
377
|
+
|
378
|
+
"TICKET_TAKING":"Die Anfrage ist eingegangen und wird vom Hilfspersonal bearbeitet.\nUm weitere Kommentare hinzuzufügen, antworten Sie auf diese E-Mail.",
|
379
|
+
|
380
|
+
"LABEL_ERROR_FIELD_REQUIRED": "Pflichtfeld",
|
381
|
+
"SENT_AN_ATTACHMENT": "Anhang gesendet",
|
382
|
+
"SENT_AN_IMAGE": "ein Bild gesendet"
|
285
383
|
}
|
286
384
|
},
|
287
385
|
{
|
@@ -322,9 +420,15 @@
|
|
322
420
|
"BUTTON_EDIT_PROFILE":"Atualizar perfil",
|
323
421
|
"BUTTON_DOWNLOAD_TRANSCRIPT":"Download transcript",
|
324
422
|
"RATE_CHAT":"Classificar conversa",
|
423
|
+
|
325
424
|
"WELLCOME_TITLE":"Olá, seja bem-vindo ao Tiledesk 👋",
|
326
425
|
"WELLCOME_MSG":"Como podemos ajudar?",
|
327
426
|
"WELLCOME":"Bem-vinda",
|
427
|
+
|
428
|
+
"WELCOME_TITLE":"Olá, seja bem-vindo ao Tiledesk 👋",
|
429
|
+
"WELCOME_MSG":"Como podemos ajudar?",
|
430
|
+
"WELCOME":"Bem-vinda",
|
431
|
+
|
328
432
|
"OPTIONS":"Opções",
|
329
433
|
"SOUND_OFF":"som desligado",
|
330
434
|
"SOUND_ON":"som ligado",
|
@@ -338,7 +442,20 @@
|
|
338
442
|
"SEE_PREVIOUS":"ver anterior",
|
339
443
|
"WAITING_TIME_FOUND":"A equipe normalmente responde em $reply_time",
|
340
444
|
"WAITING_TIME_NOT_FOUND":"A equipe responderá o mais breve possível",
|
341
|
-
"CLOSED":"
|
445
|
+
"CLOSED":"Fechado",
|
446
|
+
|
447
|
+
"INFO_SUPPORT_USER_ADDED_SUBJECT": "você",
|
448
|
+
"INFO_SUPPORT_USER_ADDED_YOU_VERB": "você foi adicionado ",
|
449
|
+
"INFO_SUPPORT_USER_ADDED_COMPLEMENT": "aderiu",
|
450
|
+
"INFO_SUPPORT_USER_ADDED_VERB": "para conversar",
|
451
|
+
"INFO_SUPPORT_CHAT_REOPENED": "Chat reaberto",
|
452
|
+
"INFO_SUPPORT_CHAT_CLOSED": "Bate-papo fechado",
|
453
|
+
|
454
|
+
"TICKET_TAKING":"A solicitação foi recebida e a equipe de assistência está tratando dela. \nPara adicionar mais comentários, responda a este e-mail.",
|
455
|
+
|
456
|
+
"LABEL_ERROR_FIELD_REQUIRED": "Campo obrigatório",
|
457
|
+
"SENT_AN_ATTACHMENT": "enviou um anexo",
|
458
|
+
"SENT_AN_IMAGE": "enviou uma imagem"
|
342
459
|
}
|
343
460
|
},
|
344
461
|
{
|
@@ -379,14 +496,20 @@
|
|
379
496
|
"BUTTON_EDIT_PROFILE":"Обновить профиль",
|
380
497
|
"BUTTON_DOWNLOAD_TRANSCRIPT":"Download transcript",
|
381
498
|
"RATE_CHAT":"Оценить чат",
|
499
|
+
|
382
500
|
"WELLCOME_TITLE":"Привет, добро пожаловать в Tiledesk 👋",
|
383
501
|
"WELLCOME_MSG":"Как мы можем помочь?",
|
384
502
|
"WELLCOME":"желанный",
|
503
|
+
|
504
|
+
"WELCOME_TITLE":"Привет, добро пожаловать в Tiledesk 👋",
|
505
|
+
"WELCOME_MSG":"Как мы можем помочь?",
|
506
|
+
"WELCOME":"желанный",
|
507
|
+
|
385
508
|
"OPTIONS":"опции",
|
386
509
|
"SOUND_OFF":"звук выключен",
|
387
510
|
"SOUND_ON":"звучать на",
|
388
511
|
"LOGOUT":"выйти",
|
389
|
-
"CLOSE":"
|
512
|
+
"CLOSE":"Закрывать",
|
390
513
|
"PREV_CONVERSATIONS":"Ваши разговоры",
|
391
514
|
"YOU":"Вы",
|
392
515
|
"SHOW_ALL_CONV":"показать все",
|
@@ -395,7 +518,19 @@
|
|
395
518
|
"SEE_PREVIOUS":"смотри предыдущий",
|
396
519
|
"WAITING_TIME_FOUND":"Команда обычно отвечает в $reply_time",
|
397
520
|
"WAITING_TIME_NOT_FOUND":"Команда ответит как можно скорее",
|
398
|
-
"CLOSED":"
|
521
|
+
"CLOSED":"Закрыто",
|
522
|
+
"INFO_SUPPORT_USER_ADDED_SUBJECT": "вы",
|
523
|
+
"INFO_SUPPORT_USER_ADDED_YOU_VERB": "вы добавлены ",
|
524
|
+
"INFO_SUPPORT_USER_ADDED_COMPLEMENT": "присоединился",
|
525
|
+
"INFO_SUPPORT_USER_ADDED_VERB": "в чат",
|
526
|
+
"INFO_SUPPORT_CHAT_REOPENED": "Чат возобновлен",
|
527
|
+
"INFO_SUPPORT_CHAT_CLOSED": "Чат закрыт",
|
528
|
+
|
529
|
+
"TICKET_TAKING":"Запрос был получен, и обслуживающий персонал занимается им. \nЧтобы добавить больше комментариев, ответьте на это письмо.",
|
530
|
+
|
531
|
+
"LABEL_ERROR_FIELD_REQUIRED": "Обязательное поле",
|
532
|
+
"SENT_AN_ATTACHMENT": "отправлено вложение",
|
533
|
+
"SENT_AN_IMAGE": "отправил изображение"
|
399
534
|
}
|
400
535
|
},
|
401
536
|
{
|
@@ -436,9 +571,15 @@
|
|
436
571
|
"BUTTON_EDIT_PROFILE":"Profili güncelle",
|
437
572
|
"BUTTON_DOWNLOAD_TRANSCRIPT":"Download transcript",
|
438
573
|
"RATE_CHAT":"Sohbeti derecelendir",
|
574
|
+
|
439
575
|
"WELLCOME_TITLE":"Merhaba Tiledesk’e hoş geldiniz. 👋",
|
440
576
|
"WELLCOME_MSG":"Size nasıl yardımcı olabiliriz?",
|
441
577
|
"WELLCOME":"Hoş geldiniz.",
|
578
|
+
|
579
|
+
"WELCOME_TITLE":"Merhaba Tiledesk’e hoş geldiniz. 👋",
|
580
|
+
"WELCOME_MSG":"Size nasıl yardımcı olabiliriz?",
|
581
|
+
"WELCOME":"Hoş geldiniz.",
|
582
|
+
|
442
583
|
"OPTIONS":"Seçenekler",
|
443
584
|
"SOUND_OFF":"Ses kapalı",
|
444
585
|
"SOUND_ON":"Ses açık",
|
@@ -452,7 +593,20 @@
|
|
452
593
|
"SEE_PREVIOUS":"Öncekine bak",
|
453
594
|
"WAITING_TIME_FOUND":"Ekip genellikle …… içerisinde cevaplar $reply_time",
|
454
595
|
"WAITING_TIME_NOT_FOUND":"Ekip en kısa süre içerisinde cevap verecektir.",
|
455
|
-
"CLOSED":"
|
596
|
+
"CLOSED":"Kapali",
|
597
|
+
|
598
|
+
"INFO_SUPPORT_USER_ADDED_SUBJECT": "siz",
|
599
|
+
"INFO_SUPPORT_USER_ADDED_YOU_VERB": "eklendiniz ",
|
600
|
+
"INFO_SUPPORT_USER_ADDED_COMPLEMENT": "katıldı",
|
601
|
+
"INFO_SUPPORT_USER_ADDED_VERB": "sohbet etmek",
|
602
|
+
"INFO_SUPPORT_CHAT_REOPENED": "Sohbet yeniden açıldı",
|
603
|
+
"INFO_SUPPORT_CHAT_CLOSED": "Sohbet kapatıldı",
|
604
|
+
|
605
|
+
"TICKET_TAKING":"Talep alındı ve yardım ekibi bununla ilgileniyor.\nDaha fazla yorum eklemek için bu e-postayı yanıtlayın.",
|
606
|
+
|
607
|
+
"LABEL_ERROR_FIELD_REQUIRED": "Gerekli alan",
|
608
|
+
"SENT_AN_ATTACHMENT": "bir ek gönderdi",
|
609
|
+
"SENT_AN_IMAGE": "bir resim gönderdi"
|
456
610
|
}
|
457
611
|
}
|
458
612
|
]
|
package/event/messageEvent.js
CHANGED
@@ -61,6 +61,11 @@ function populateMessageWithRequest(message, eventPrefix) {
|
|
61
61
|
populate('participatingAgents').
|
62
62
|
populate({path:'requester',populate:{path:'id_user'}}).
|
63
63
|
lean().
|
64
|
+
//perche lean?
|
65
|
+
// TODO availableAgentsCount nn c'è per il lean problema trigger
|
66
|
+
// request.department._id DA CORREGGERE ANCHE PER REQUEST.CREATE
|
67
|
+
// request.department.hasBot
|
68
|
+
// request.isOpen
|
64
69
|
cache(cacheUtil.defaultTTL, message.id_project+":requests:request_id:"+message.recipient).
|
65
70
|
exec(function (err, request) {
|
66
71
|
|
@@ -88,6 +93,7 @@ function populateMessageWithRequest(message, eventPrefix) {
|
|
88
93
|
winston.debug("message.emit",messageJson );
|
89
94
|
messageEvent.emit(eventPrefix,messageJson );
|
90
95
|
|
96
|
+
//se a req.first_text toglio ritorni a capo è sempre diverso da msg.txt
|
91
97
|
if (message.text === request.first_text){
|
92
98
|
messageEvent.emit(eventPrefix+'.first', messageJson );
|
93
99
|
}
|
@@ -98,6 +104,17 @@ function populateMessageWithRequest(message, eventPrefix) {
|
|
98
104
|
messageEvent.emit(eventPrefix+'.from.requester', messageJson );
|
99
105
|
}
|
100
106
|
|
107
|
+
// olumn":21,"file":"/app/node_modules/mongoose/lib/model.js","function":null,"line":4869,"method":null,"native":false},{"column":11,"file":"/app/node_modules/mongoose/lib/query.js","function":"_hooks.execPost","line":4391,"method":"execPost","native":false},{"column":16,"file":"/app/node_modules/kareem/index.js","function":null,"line":135,"method":null,"native":false},{"column":9,"file":"internal/process/task_queues.js","function":"processTicksAndRejections","line":79,"method":null,"native":false}]}
|
108
|
+
// 2021-01-26T10:30:16.045281+00:00 app[web.1]: error: uncaughtException: Cannot read property 'name' of undefined
|
109
|
+
// 2021-01-26T10:30:16.045283+00:00 app[web.1]: TypeError: Cannot read property 'name' of undefined
|
110
|
+
// 2021-01-26T10:30:16.045284+00:00 app[web.1]: at /app/event/messageEvent.js:101:80
|
111
|
+
// 2021-01-26T10:30:16.045284+00:00 app[web.1]: at /app/node_modules/mongoose/lib/model.js:4846:16
|
112
|
+
// 2021-01-26T10:30:16.045285+00:00 app[web.1]: at /app/node_modules/mongoose/lib/helpers/promiseOrCallback.js:24:16
|
113
|
+
// 2021-01-26T10:30:16.045285+00:00 app[web.1]: at /app/node_modules/mongoose/lib/model.js:4869:21
|
114
|
+
// 2021-01-26T10:30:16.045286+00:00 app[web.1]: at _hooks.execPost (/app/node_modules/mongoose/lib/query.js:4391:11)
|
115
|
+
// 2021-01-26T10:30:16.045286+00:00 app[web.1]: at /app/node_modules/kareem/index.js:135:16
|
116
|
+
// 2021-01-26T10:30:16.045287+00:00 app[web.1]:
|
117
|
+
|
101
118
|
message2Event.emit(eventPrefix+'.request.channel.' + request.channel.name, messageJson );
|
102
119
|
message2Event.emit(eventPrefix+'.request.channelOutbound.' + request.channelOutbound.name, messageJson );
|
103
120
|
message2Event.emit(eventPrefix+'.channel.' + message.channel.name, messageJson );
|
@@ -129,7 +146,7 @@ function populateMessageWithRequest(message, eventPrefix) {
|
|
129
146
|
}
|
130
147
|
|
131
148
|
} else {
|
132
|
-
winston.
|
149
|
+
winston.debug("request is undefined in messageEvent. Is it a direct or group message ?" );
|
133
150
|
messageEvent.emit(eventPrefix,messageJson );
|
134
151
|
message2Event.emit(eventPrefix+'.channel.' + message.channel.name, messageJson );
|
135
152
|
}
|
package/middleware/passport.js
CHANGED
@@ -63,7 +63,7 @@ module.exports = function(passport) {
|
|
63
63
|
|
64
64
|
var opts = {
|
65
65
|
// jwtFromRequest: ExtractJwt.fromAuthHeader(),
|
66
|
-
jwtFromRequest:
|
66
|
+
jwtFromRequest:ExtractJwt.fromExtractors([ExtractJwt.fromAuthHeaderWithScheme("jwt"), ExtractJwt.fromUrlQueryParameter('secret_token')]),
|
67
67
|
//this will help you to pass request body to passport
|
68
68
|
passReqToCallback: true, //https://stackoverflow.com/questions/55163015/how-to-bind-or-pass-req-parameter-to-passport-js-jwt-strategy
|
69
69
|
// secretOrKey: configSecret,
|
@@ -341,9 +341,15 @@ module.exports = function(passport) {
|
|
341
341
|
|
342
342
|
|
343
343
|
passport.use(new BasicStrategy(function(userid, password, done) {
|
344
|
-
|
345
|
-
|
346
|
-
|
344
|
+
|
345
|
+
winston.debug("BasicStrategy: " + userid);
|
346
|
+
|
347
|
+
|
348
|
+
var email = userid.toLowerCase();
|
349
|
+
winston.debug("email lowercase: " + email);
|
350
|
+
|
351
|
+
User.findOne({ email: email, status: 100}, 'email firstname lastname password emailverified id')
|
352
|
+
.cache(cacheUtil.defaultTTL, "users:email:"+email)
|
347
353
|
.exec(function (err, user) {
|
348
354
|
|
349
355
|
if (err) {
|
package/models/department.js
CHANGED
@@ -2,6 +2,7 @@ var mongoose = require('mongoose');
|
|
2
2
|
var Schema = mongoose.Schema;
|
3
3
|
var routingConstants = require('../models/routingConstants');
|
4
4
|
var winston = require('../config/winston');
|
5
|
+
var TagSchema = require("../models/tag");
|
5
6
|
|
6
7
|
var DepartmentSchema = new Schema({
|
7
8
|
id_bot: {
|
@@ -46,6 +47,7 @@ var DepartmentSchema = new Schema({
|
|
46
47
|
index: true
|
47
48
|
// required: true
|
48
49
|
},
|
50
|
+
tags: [TagSchema],
|
49
51
|
status: {
|
50
52
|
type: Number,
|
51
53
|
default: 1,
|
@@ -71,6 +73,7 @@ DepartmentSchema.virtual('bot', {
|
|
71
73
|
});
|
72
74
|
|
73
75
|
DepartmentSchema.virtual('hasBot').get(function () {
|
76
|
+
// winston.debug("department hasBot virtual called");
|
74
77
|
if (this.id_bot!=undefined) {
|
75
78
|
return true;
|
76
79
|
}else {
|
package/models/faq.js
CHANGED
@@ -93,8 +93,14 @@ FaqSchema.index({ id_project: 1, id_faq_kb: 1, question: 1 });
|
|
93
93
|
// https://docs.mongodb.com/manual/core/index-text/
|
94
94
|
// https://docs.mongodb.com/manual/tutorial/specify-language-for-text-index/
|
95
95
|
// https://docs.mongodb.com/manual/reference/text-search-languages/#text-search-languages
|
96
|
-
|
97
|
-
|
96
|
+
|
97
|
+
|
98
|
+
FaqSchema.index({question: 'text'},
|
99
|
+
{"name":"faq_fulltext","default_language": defaultFullTextLanguage,"language_override": "language"}); // schema level
|
100
|
+
|
101
|
+
// FaqSchema.index({question: 'text', answer: 'text'},
|
102
|
+
// {"name":"faq_fulltext","default_language": defaultFullTextLanguage,"language_override": "language", weights: {question: 10,answer: 1}}); // schema level
|
103
|
+
|
98
104
|
|
99
105
|
FaqSchema.index({ id_project: 1, id_faq_kb: 1, intent_display_name: 1 }, { unique: true });
|
100
106
|
|
package/models/faq_kb.js
CHANGED
package/models/message.js
CHANGED
@@ -6,6 +6,12 @@ var MessageConstants = require('../models/messageConstants');
|
|
6
6
|
var defaultFullTextLanguage = process.env.DEFAULT_FULLTEXT_INDEX_LANGUAGE || "none";
|
7
7
|
|
8
8
|
var MessageSchema = new Schema({
|
9
|
+
// messageId: {
|
10
|
+
// type: String,
|
11
|
+
// required: true,
|
12
|
+
// // unique: true???
|
13
|
+
// index: true
|
14
|
+
// },
|
9
15
|
sender: {
|
10
16
|
type: String,
|
11
17
|
required: true,
|
@@ -21,10 +27,10 @@ var MessageSchema = new Schema({
|
|
21
27
|
required: true,
|
22
28
|
index: true
|
23
29
|
},
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
30
|
+
recipientFullname: {
|
31
|
+
type: String,
|
32
|
+
required: false
|
33
|
+
},
|
28
34
|
type: {
|
29
35
|
type: String,
|
30
36
|
required: true,
|