@tiledesk/tiledesk-server 2.1.40 → 2.2.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (91) 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 +195 -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/channelManager.js +1 -1
  13. package/channels/chat21/chat21Contact.js +34 -8
  14. package/channels/chat21/chat21Handler.js +48 -5
  15. package/channels/chat21/chat21WebHook.js +34 -9
  16. package/channels/chat21/nativeauth.js +2 -2
  17. package/channels/chat21/package-lock.json +3013 -0
  18. package/config/email.js +2 -0
  19. package/config/global.js +3 -0
  20. package/config/labels/widget.json +170 -16
  21. package/event/messageEvent.js +18 -1
  22. package/middleware/passport.js +10 -4
  23. package/migrations/1619185894304-request-remove-duplicated-request-by-request_id--autosync.js +67 -0
  24. package/models/actionsConstants.js +7 -0
  25. package/models/department.js +3 -0
  26. package/models/faq.js +8 -2
  27. package/models/faq_kb.js +6 -0
  28. package/models/message.js +10 -4
  29. package/models/messageConstants.js +9 -3
  30. package/models/request.js +33 -3
  31. package/package.json +31 -28
  32. package/pubmodules/emailNotification/requestNotification.js +483 -56
  33. package/pubmodules/messageActions/messageActionsInterceptor.js +20 -7
  34. package/pubmodules/messageTransformer/index.js +5 -1
  35. package/pubmodules/messageTransformer/messageTransformerInterceptor.js +4 -2
  36. package/pubmodules/messageTransformer/microLanguageAttributesTransformerInterceptor.js +67 -0
  37. package/pubmodules/messageTransformer/microLanguageTransformerInterceptor.js +67 -0
  38. package/pubmodules/pubModulesManager.js +66 -13
  39. package/pubmodules/rules/conciergeBot.js +81 -49
  40. package/routes/auth.js +46 -11
  41. package/routes/campaigns.js +117 -25
  42. package/routes/department.js +2 -2
  43. package/routes/faq.js +19 -0
  44. package/routes/faq_kb.js +13 -4
  45. package/routes/faqpub.js +1 -1
  46. package/routes/files.js +17 -2
  47. package/routes/images.js +1 -1
  48. package/routes/jwt.js +0 -1
  49. package/routes/logs.js +26 -0
  50. package/routes/message.js +7 -2
  51. package/routes/messagesRoot.js +73 -16
  52. package/routes/project_user.js +36 -1
  53. package/routes/request.js +88 -12
  54. package/routes/requestUtilRoot.js +30 -0
  55. package/routes/urls.js +12 -0
  56. package/routes/users.js +5 -1
  57. package/services/BotSubscriptionNotifier.js +1 -0
  58. package/services/departmentService.js +29 -5
  59. package/services/emailService.js +1170 -239
  60. package/services/faqBotHandler.js +176 -61
  61. package/services/faqBotSupport.js +182 -117
  62. package/services/faqService.js +18 -14
  63. package/services/messageService.js +57 -9
  64. package/services/modulesManager.js +86 -23
  65. package/services/requestService.js +58 -17
  66. package/template/email/assignedEmailMessage.html +205 -0
  67. package/template/email/assignedRequest.html +44 -14
  68. package/template/email/beenInvitedExistingUser.html +2 -2
  69. package/template/email/beenInvitedNewUser.html +1 -1
  70. package/template/email/newMessage.html +31 -12
  71. package/template/email/passwordChanged.html +2 -3
  72. package/template/email/pooledEmailMessage.html +208 -0
  73. package/template/email/pooledRequest.html +41 -14
  74. package/template/email/resetPassword.html +2 -3
  75. package/template/email/sendTranscript.html +1 -1
  76. package/template/email/test.html +1 -1
  77. package/template/email/ticket.html +191 -0
  78. package/template/email/ticket.txt +11 -0
  79. package/template/email/verify.html +1 -1
  80. package/test/authentication.js +76 -4
  81. package/test/authenticationJwt.js +76 -2
  82. package/test/campaignsRoute.js +226 -0
  83. package/test/faqService.js +3 -3
  84. package/test/faqkbRoute.js +3 -2
  85. package/test/messageRootRoute.js +193 -0
  86. package/test/messageRoute.js +75 -0
  87. package/test/messageService.js +39 -2
  88. package/test/requestRoute.js +27 -9
  89. package/test/requestService.js +472 -11
  90. package/test-int/bot.js +673 -8
  91. package/websocket/webSocketServer.js +7 -4
package/config/email.js CHANGED
@@ -4,4 +4,6 @@ module.exports = {
4
4
  'from': 'Tiledesk Notification <postmaster@mg.tiledesk.com>',
5
5
  'bcc': 'tiledesknotification@frontiere21.it',
6
6
  'baseUrl':'https://console.tiledesk.com/v2/dashboard',
7
+ 'replyEnabled' : false,
8
+ 'inboundDomain': 'tickets.tiledesk.com'
7
9
  };
@@ -0,0 +1,3 @@
1
+ module.exports = {
2
+ 'apiUrl':'http://localhost:3000',
3
+ };
@@ -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": "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": "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": "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": "il tuo giudizio sul nostro servizio clienti",
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": "CHIUSA"
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": "votre avis sur notre service client",
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": "FERMÉ"
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":"CERRADO"
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":"schließen",
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":"GESCHLOSSEN"
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":"FECHADO"
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":"KAPALI"
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
  ]
@@ -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.warn("request is undefined in messageEvent. Is it a direct message ?" );
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
  }
@@ -63,7 +63,7 @@ module.exports = function(passport) {
63
63
 
64
64
  var opts = {
65
65
  // jwtFromRequest: ExtractJwt.fromAuthHeader(),
66
- jwtFromRequest: ExtractJwt.fromAuthHeaderWithScheme("jwt"),
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
- User.findOne({ email: userid, status: 100}, 'email firstname lastname password emailverified id')
346
- .cache(cacheUtil.defaultTTL, "users:email:"+userid)
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
+
@@ -0,0 +1,7 @@
1
+ module.exports = {
2
+ CHAT_ACTION_MESSAGE : {
3
+ AGENT : "\\agent",
4
+ CLOSE : "\\close",
5
+ }
6
+ }
7
+
@@ -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
- FaqSchema.index({question: 'text', answer: 'text'},
97
- {"name":"faq_fulltext","default_language": defaultFullTextLanguage,"language_override": "language", weights: {question: 10,answer: 1}}); // schema level
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
@@ -53,6 +53,12 @@ var Faq_kbSchema = new Schema({
53
53
  default: uuidv4(),
54
54
  select: false
55
55
  },
56
+ language: {
57
+ type: String,
58
+ required: false,
59
+ default: 'en'
60
+ // index: true
61
+ },
56
62
  attributes: {
57
63
  type: Object,
58
64
  },
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
- // recipientFullname: {
25
- // type: String,
26
- // required: false
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...",