@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.
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...",