@tiledesk/tiledesk-server 2.1.40 → 2.2.3
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 +195 -1
- package/Dockerfile +1 -1
- package/Dockerfile-en +1 -1
- package/README.md +5 -7
- package/app.js +12 -1
- package/channels/channelManager.js +1 -1
- package/channels/chat21/chat21Contact.js +34 -8
- package/channels/chat21/chat21Handler.js +48 -5
- package/channels/chat21/chat21WebHook.js +34 -9
- package/channels/chat21/nativeauth.js +2 -2
- package/channels/chat21/package-lock.json +3013 -0
- package/config/email.js +2 -0
- 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/migrations/1619185894304-request-remove-duplicated-request-by-request_id--autosync.js +67 -0
- 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 +9 -3
- package/models/request.js +33 -3
- package/package.json +31 -28
- package/pubmodules/emailNotification/requestNotification.js +483 -56
- package/pubmodules/messageActions/messageActionsInterceptor.js +20 -7
- package/pubmodules/messageTransformer/index.js +5 -1
- package/pubmodules/messageTransformer/messageTransformerInterceptor.js +4 -2
- package/pubmodules/messageTransformer/microLanguageAttributesTransformerInterceptor.js +67 -0
- package/pubmodules/messageTransformer/microLanguageTransformerInterceptor.js +67 -0
- package/pubmodules/pubModulesManager.js +66 -13
- package/pubmodules/rules/conciergeBot.js +81 -49
- package/routes/auth.js +46 -11
- package/routes/campaigns.js +117 -25
- package/routes/department.js +2 -2
- package/routes/faq.js +19 -0
- package/routes/faq_kb.js +13 -4
- package/routes/faqpub.js +1 -1
- package/routes/files.js +17 -2
- 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 +1170 -239
- package/services/faqBotHandler.js +176 -61
- package/services/faqBotSupport.js +182 -117
- package/services/faqService.js +18 -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 +191 -0
- package/template/email/ticket.txt +11 -0
- 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 +39 -2
- 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/config/email.js
CHANGED
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) {
|
@@ -0,0 +1,67 @@
|
|
1
|
+
var mongoose = require('mongoose');
|
2
|
+
var winston = require('../config/winston');
|
3
|
+
|
4
|
+
/**
|
5
|
+
* Make any changes you need to make to the database here
|
6
|
+
*/
|
7
|
+
async function up () {
|
8
|
+
// Write migration here
|
9
|
+
await new Promise((resolve, reject) => {
|
10
|
+
|
11
|
+
winston.info("Duplicate");
|
12
|
+
|
13
|
+
|
14
|
+
return mongoose.connection.db.collection('requests').aggregate(
|
15
|
+
{"$group" : { "_id": "$request_id", "count": { "$sum": 1 } } },
|
16
|
+
{"$match": {"_id" :{ "$ne" : null }, "count" : {"$gt": 1} } }, //"duplicated_request_id":{"$ne":true}
|
17
|
+
{"$sort": {"count" : -1} },
|
18
|
+
{"$project": {"request_id" : "$_id", "_id" : 0} }
|
19
|
+
).toArray( function (err, requests) {
|
20
|
+
if (err) {
|
21
|
+
winston.error("Schema migration: requests err", err);
|
22
|
+
}
|
23
|
+
|
24
|
+
winston.info("found requests", requests);
|
25
|
+
winston.info("found requests.length"+requests.length);
|
26
|
+
|
27
|
+
|
28
|
+
requests.forEach(
|
29
|
+
function(request, i){
|
30
|
+
|
31
|
+
winston.info("request",request);
|
32
|
+
winston.info("request._id: " + request._id);
|
33
|
+
|
34
|
+
|
35
|
+
return mongoose.connection.db.collection('requests')
|
36
|
+
//.findOne({request_id:request._id},
|
37
|
+
// ,"id_project": request.id_project+"_deleted",
|
38
|
+
.updateOne({request_id:request._id},{ "$set": { "request_id": request._id+"_duplicated", "duplicated_request_id":true } },
|
39
|
+
function (err, updates) {
|
40
|
+
if (err) {
|
41
|
+
winston.error("Schema migration: requests err", err);
|
42
|
+
}
|
43
|
+
winston.info("updates",updates);
|
44
|
+
});
|
45
|
+
|
46
|
+
});
|
47
|
+
|
48
|
+
|
49
|
+
|
50
|
+
winston.info("Schema updated path for requests "+requests.length);
|
51
|
+
return resolve('ok');
|
52
|
+
|
53
|
+
});
|
54
|
+
|
55
|
+
});
|
56
|
+
}
|
57
|
+
|
58
|
+
/**
|
59
|
+
* Make any changes that UNDO the up function side effects here (if possible)
|
60
|
+
*/
|
61
|
+
async function down () {
|
62
|
+
// Write migration here
|
63
|
+
}
|
64
|
+
|
65
|
+
module.exports = { up, down };
|
66
|
+
|
67
|
+
|
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,
|
@@ -14,10 +14,16 @@ module.exports = {
|
|
14
14
|
DIRECT : "direct",
|
15
15
|
},
|
16
16
|
|
17
|
+
MESSAGE_TYPE : {
|
18
|
+
TEXT : "text",
|
19
|
+
IMAGE : "image",
|
20
|
+
FRAME: "frame"
|
21
|
+
},
|
22
|
+
|
17
23
|
|
18
24
|
LABELS : {
|
19
25
|
EN : {
|
20
|
-
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..",
|
21
27
|
NO_AVAILABLE_OPERATOR_MESSAGE : "Hello, no operators are available at the moment. Please leave a chat message, we will reply to you soon.",
|
22
28
|
// TOUCHING_OPERATOR: "We are putting you in touch with an operator. Please wait..",
|
23
29
|
TOUCHING_OPERATOR: "A new support request has been assigned to you"
|
@@ -25,7 +31,7 @@ module.exports = {
|
|
25
31
|
// REOPEN_MESSAGE : "Chat re-opened"
|
26
32
|
},
|
27
33
|
IT : {
|
28
|
-
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...",
|
29
35
|
NO_AVAILABLE_OPERATOR_MESSAGE : "Salve al momento non è disponibile alcun operatore. Lasci un messaggio in chat, la contatteremo presto.",
|
30
36
|
TOUCHING_OPERATOR: "Una nuova richiesta di supporto è stata assegnata a te"
|
31
37
|
// TOUCHING_OPERATOR :"La stiamo mettendo in contatto con un operatore. Attenda...",
|
@@ -33,7 +39,7 @@ module.exports = {
|
|
33
39
|
// REOPEN_MESSAGE : "Chat riaperta"
|
34
40
|
},
|
35
41
|
"IT-IT" : {
|
36
|
-
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...",
|
37
43
|
NO_AVAILABLE_OPERATOR_MESSAGE : "Salve al momento non è disponibile alcun operatore. Lasci un messaggio in chat, la contatteremo presto.",
|
38
44
|
TOUCHING_OPERATOR: "Una nuova richiesta di supporto è stata assegnata a te"
|
39
45
|
// TOUCHING_OPERATOR :"La stiamo mettendo in contatto con un operatore. Attenda...",
|