@tiledesk/tiledesk-server 2.2.38 → 2.3.1-8.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (97) hide show
  1. package/CHANGELOG.md +121 -0
  2. package/LICENSE +14 -657
  3. package/README.md +36 -21
  4. package/app.js +35 -62
  5. package/channels/chat21/chat21Handler.js +18 -3
  6. package/channels/chat21/chat21WebHook.js +31 -15
  7. package/channels/chat21/package-lock.json +663 -706
  8. package/channels/chat21/package.json +2 -2
  9. package/config/labels/widget.json +320 -0
  10. package/deploy.sh +2 -0
  11. package/event/botEvent.js +1 -1
  12. package/event/subscriptionEvent.js +11 -0
  13. package/fonts/Roboto-Italic.ttf +0 -0
  14. package/fonts/Roboto-Medium.ttf +0 -0
  15. package/fonts/Roboto-MediumItalic.ttf +0 -0
  16. package/fonts/Roboto-Regular.ttf +0 -0
  17. package/middleware/ipFilter.js +220 -0
  18. package/middleware/passport.js +11 -2
  19. package/models/lead.js +2 -0
  20. package/models/project.js +10 -0
  21. package/models/project_user.js +4 -0
  22. package/models/request.js +50 -12
  23. package/models/subscriptionLog.js +34 -0
  24. package/models/tagLibrary.js +42 -0
  25. package/package.json +6 -11
  26. package/pubmodules/activities/activityArchiver.js +314 -0
  27. package/pubmodules/activities/index.js +3 -0
  28. package/pubmodules/activities/models/activity.js +88 -0
  29. package/pubmodules/activities/routes/activity.js +710 -0
  30. package/pubmodules/activities/test/activityRoute.js +85 -0
  31. package/pubmodules/analytics/analytics.js +1719 -0
  32. package/pubmodules/analytics/index.js +3 -0
  33. package/pubmodules/canned/cannedResponse.js +55 -0
  34. package/pubmodules/canned/cannedResponseRoute.js +163 -0
  35. package/pubmodules/canned/index.js +3 -0
  36. package/pubmodules/emailNotification/requestNotification.js +215 -28
  37. package/pubmodules/events/eventRoute.js +37 -7
  38. package/pubmodules/messageActions/messageActionsInterceptor.js +4 -2
  39. package/pubmodules/pubModulesManager.js +140 -7
  40. package/pubmodules/rasa/index.js +8 -1
  41. package/pubmodules/rasa/listener.js +30 -9
  42. package/pubmodules/rules/conciergeBot.js +4 -4
  43. package/pubmodules/scheduler/tasks/closeAgentUnresponsiveRequestTask.js +3 -1
  44. package/pubmodules/scheduler/tasks/closeBotUnresponsiveRequestTask.js +5 -3
  45. package/pubmodules/tilebot/index.js +11 -0
  46. package/pubmodules/tilebot/listener.js +69 -0
  47. package/pubmodules/trigger/default.js +271 -0
  48. package/pubmodules/trigger/event/actionEventEmitter.js +10 -0
  49. package/pubmodules/trigger/event/flowEventEmitter.js +10 -0
  50. package/pubmodules/trigger/event/triggerEventEmitter.js +10 -0
  51. package/pubmodules/trigger/index.js +3 -0
  52. package/pubmodules/trigger/models/trigger.js +149 -0
  53. package/pubmodules/trigger/rulesTrigger.js +1181 -0
  54. package/pubmodules/trigger/start.js +118 -0
  55. package/pubmodules/trigger/triggerRoute.js +150 -0
  56. package/routes/auth.js +7 -2
  57. package/routes/department.js +51 -0
  58. package/routes/faq.js +7 -0
  59. package/routes/faq_kb.js +1 -1
  60. package/routes/group.js +140 -0
  61. package/routes/lead.js +24 -1
  62. package/routes/message.js +6 -3
  63. package/routes/project.js +118 -0
  64. package/routes/project_user.js +9 -0
  65. package/routes/public-request.js +280 -2
  66. package/routes/request.js +124 -17
  67. package/routes/subscription.js +140 -0
  68. package/routes/tag.js +138 -0
  69. package/routes/user-request.js +3 -2
  70. package/routes/users.js +1 -1
  71. package/routes/widget.js +80 -3
  72. package/routes/widgetLoader.js +31 -0
  73. package/services/banUserNotifier.js +86 -0
  74. package/services/emailService.js +189 -11
  75. package/services/faqBotHandler.js +2 -2
  76. package/services/faqBotSupport.js +0 -1
  77. package/services/faqService.js +2 -2
  78. package/services/geoService.js +30 -4
  79. package/services/leadService.js +2 -0
  80. package/services/modulesManager.js +16 -182
  81. package/services/requestService.js +364 -6
  82. package/services/subscriptionNotifier.js +485 -0
  83. package/template/email/assignedEmailMessage.html +1 -1
  84. package/template/email/assignedRequest.html +1 -1
  85. package/template/email/newMessage.html +1 -1
  86. package/template/email/newMessageFollower.html +236 -0
  87. package/template/email/passwordChanged.html +1 -1
  88. package/template/email/pooledEmailMessage.html +1 -1
  89. package/template/email/pooledRequest.html +1 -1
  90. package/template/email/resetPassword.html +2 -2
  91. package/template/email/ticket.html +1 -1
  92. package/test/cannedRoute.js +166 -0
  93. package/test/messageRoute.js +69 -0
  94. package/test/requestService.js +3 -1
  95. package/utils/orgUtil.js +3 -3
  96. package/views/messages.jade +2 -2
  97. package/websocket/webSocketServer.js +23 -5
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tiledesk/tiledesk-chat21-app",
3
3
  "description": "The Tiledesk Chat21 module",
4
- "version": "1.1.4",
4
+ "version": "1.1.7",
5
5
  "private": false,
6
6
  "author": "Andrea Leo - Frontiere21 SRL",
7
7
  "license": "AGPL-3.0",
@@ -11,7 +11,7 @@
11
11
  "url": "https://github.com/Tiledesk/tiledesk-server"
12
12
  },
13
13
  "dependencies": {
14
- "@chat21/chat21-node-sdk": "^1.1.4",
14
+ "@chat21/chat21-node-sdk": "^1.1.7",
15
15
  "winston": "^3.3.3",
16
16
  "firebase-admin": "^9.5.0"
17
17
  },
@@ -936,6 +936,326 @@
936
936
  "LABEL_PRECHAT_ACCEPT_TERMS_PRIVACY": "я згоден",
937
937
  "PRECHAT_REQUIRED_ERROR": "Це поле є обов'язковим"
938
938
  }
939
+ },
940
+ {
941
+ "lang":"SV",
942
+ "data":
943
+ {
944
+ "LABEL_PLACEHOLDER": "skriv ditt meddelande..",
945
+ "LABEL_START_NW_CONV": "Ny konversation",
946
+ "LABEL_FIRST_MSG": "Beskriv kort ditt problem, du kommer att kontaktas av en agent.",
947
+ "LABEL_FIRST_MSG_NO_AGENTS": "🤔 Alla operatörer är offline för tillfället. Du kan hur som helst beskriva ditt problem. Det kommer att tilldelas supportteamet som återkommer till dig så snart som möjligt.",
948
+ "LABEL_FIRST_MSG_OPERATING_HOURS_CLOSED": "🤔 Våra kontor är stängda. Du kan hur som helst beskriva ditt problem. Det kommer att tilldelas supportteamet som återkommer till dig så snart som möjligt.",
949
+ "LABEL_SELECT_TOPIC": "Välj ett ämne",
950
+ "LABEL_COMPLETE_FORM": "Fyll i formuläret för att starta en konversation med nästa tillgängliga agent.",
951
+ "LABEL_FIELD_NAME": "namn",
952
+ "LABEL_ERROR_FIELD_NAME": "Obligatoriskt fält (minst 5 tecken).",
953
+ "LABEL_FIELD_EMAIL": "E-post",
954
+ "LABEL_ERROR_FIELD_EMAIL": "Ange en giltig e-postadress.",
955
+ "LABEL_WRITING": "skriver...",
956
+ "AGENT_NOT_AVAILABLE": " Off-line",
957
+ "AGENT_AVAILABLE": " Uppkopplad",
958
+ "GUEST_LABEL": "Gäst",
959
+ "ALL_AGENTS_OFFLINE_LABEL": "Alla operatörer är offline för tillfället",
960
+ "LABEL_LOADING": "Läser in...",
961
+ "CALLOUT_TITLE_PLACEHOLDER": "🖐 Behöver du hjälp?",
962
+ "CALLOUT_MSG_PLACEHOLDER": "Klicka här och börja chatta med oss!",
963
+ "CUSTOMER_SATISFACTION": "Kundnöjdhet",
964
+ "YOUR_OPINION_ON_OUR_CUSTOMER_SERVICE": "Din åsikt om vår kundtjänst",
965
+ "DOWNLOAD_TRANSCRIPT": "Ladda ner avskrift",
966
+ "BACK": "Tillbaka",
967
+ "YOUR_RATING": "ditt betyg",
968
+ "WRITE_YOUR_OPINION": "Skriv din åsikt ... (valfritt)",
969
+ "SUBMIT": "Skicka in",
970
+ "THANK_YOU_FOR_YOUR_EVALUATION": "Tack för din utvärdering",
971
+ "YOUR_RATING_HAS_BEEN_RECEIVED": "ditt betyg har mottagits",
972
+ "ALERT_LEAVE_CHAT": "Vill du lämna chatten?",
973
+ "YES": "Ja",
974
+ "NO": "Nej",
975
+ "BUTTON_CLOSE_TO_ICON": "Minimera chatten",
976
+ "BUTTON_EDIT_PROFILE": "Uppdatera profil",
977
+ "BUTTON_DOWNLOAD_TRANSCRIPT": "Ladda ner avskrift",
978
+ "RATE_CHAT": "Betygsätt chatt",
979
+ "WELLCOME_TITLE": "Hej, välkommen till Tiledesk 👋",
980
+ "WELLCOME_MSG": "Hur kan vi hjälpa?",
981
+ "WELLCOME": "Välkommen",
982
+ "WELCOME_TITLE": "Hej, välkommen till Tiledesk 👋",
983
+ "WELCOME_MSG": "Hur kan vi hjälpa?",
984
+ "WELCOME": "Välkommen",
985
+ "OPTIONS": "alternativ",
986
+ "SOUND_OFF": "ljud av",
987
+ "SOUND_ON": "ljud på",
988
+ "LOGOUT": "logga ut",
989
+ "CLOSE": "Stänga",
990
+ "PREV_CONVERSATIONS": "Dina konversationer",
991
+ "YOU": "Du",
992
+ "SHOW_ALL_CONV": "visa allt",
993
+ "START_A_CONVERSATION": "Starta en konversation",
994
+ "NO_CONVERSATION": "Ingen konversation",
995
+ "SEE_PREVIOUS": "se föregående",
996
+ "WAITING_TIME_FOUND": "Teamet svarar vanligtvis med $reply_time",
997
+ "WAITING_TIME_NOT_FOUND": "Teamet kommer att svara så snart som möjligt",
998
+ "CLOSED": "Stängd",
999
+ "INFO_SUPPORT_USER_ADDED_SUBJECT": "du",
1000
+ "INFO_SUPPORT_USER_ADDED_YOU_VERB": "du har lagts till ",
1001
+ "INFO_SUPPORT_USER_ADDED_COMPLEMENT": "chatten",
1002
+ "INFO_SUPPORT_USER_ADDED_VERB": "gick med",
1003
+ "INFO_SUPPORT_CHAT_REOPENED": "Chatten öppnades igen",
1004
+ "INFO_SUPPORT_CHAT_CLOSED": "Chatten stängd",
1005
+ "TICKET_TAKING": "Begäran har kommit in och assistanspersonalen hanterar den.\nFör att lägga till fler kommentarer, svara på det här e-postmeddelandet.",
1006
+ "LABEL_ERROR_FIELD_REQUIRED": "obligatoriskt fält",
1007
+ "SENT_AN_ATTACHMENT": "skickade en bilaga",
1008
+ "SENT_AN_IMAGE": "skickade en bild",
1009
+ "LABEL_PRECHAT_USER_FULLNAME": "Fullständiga namn",
1010
+ "LABEL_PRECHAT_USER_EMAIL": "E-post",
1011
+ "LABEL_PRECHAT_USER_EMAIL_ERROR": "Ogiltig e-postadress",
1012
+ "LABEL_PRECHAT_USER_PHONE": "Telefon",
1013
+ "LABEL_PRECHAT_USER_PHONE_ERROR": "Telefon krävs",
1014
+ "LABEL_PRECHAT_FIRST_MESSAGE": "Ditt meddelande till supportteamet",
1015
+ "LABEL_PRECHAT_STATIC_TERMS_PRIVACY": "Innan du fortsätter i konversationen, godkänn våra <a href='https://tiledesk.com/termsofservice/' target='_blank'>Villkor</a> och <a href='https://tiledesk.com/privacy.html' target='_blank'>Sekretesspolicy</a>",
1016
+ "LABEL_PRECHAT_ACCEPT_TERMS_PRIVACY": "jag håller med",
1017
+ "PRECHAT_REQUIRED_ERROR": "Detta fält är obligatoriskt"
1018
+ }
1019
+ },
1020
+ {
1021
+ "lang":"KK",
1022
+ "data":
1023
+ {
1024
+ "LABEL_PLACEHOLDER": "хабарламаңызды теріңіз..",
1025
+ "LABEL_START_NW_CONV": "Жаңа әңгіме",
1026
+ "LABEL_FIRST_MSG": "Мәселеңізді қысқаша сипаттаңыз, сізге агент хабарласады.",
1027
+ "LABEL_FIRST_MSG_NO_AGENTS": "🤔 Қазіргі уақытта барлық операторлар желіден тыс. Сіз бәрібір мәселеңізді сипаттай аласыз. Ол сізге мүмкіндігінше тезірек хабарласатын қолдау көрсету тобына тағайындалады.",
1028
+ "LABEL_FIRST_MSG_OPERATING_HOURS_CLOSED": "🤔 Біздің кеңселер жабық. Сіз бәрібір мәселеңізді сипаттай аласыз. Ол сізге мүмкіндігінше тезірек хабарласатын қолдау көрсету тобына тағайындалады.",
1029
+ "LABEL_SELECT_TOPIC": "Тақырыпты таңдаңыз",
1030
+ "LABEL_COMPLETE_FORM": "Келесі қолжетімді агентпен сөйлесуді бастау үшін пішінді толтырыңыз.",
1031
+ "LABEL_FIELD_NAME": "Аты",
1032
+ "LABEL_ERROR_FIELD_NAME": "Міндетті өріс (кемінде 5 таңба).",
1033
+ "LABEL_FIELD_EMAIL": "Электрондық пошта",
1034
+ "LABEL_ERROR_FIELD_EMAIL": "Жарамды электрондық пошта мекенжайын енгізіңіз.",
1035
+ "LABEL_WRITING": "жазып жатыр...",
1036
+ "AGENT_NOT_AVAILABLE": " Офлайн",
1037
+ "AGENT_AVAILABLE": " Желіде",
1038
+ "GUEST_LABEL": "Қонақ",
1039
+ "ALL_AGENTS_OFFLINE_LABEL": "Қазіргі уақытта барлық операторлар желіден тыс",
1040
+ "LABEL_LOADING": "Жүктелуде...",
1041
+ "CALLOUT_TITLE_PLACEHOLDER": "🖐 Көмек керек пе?",
1042
+ "CALLOUT_MSG_PLACEHOLDER": "Мұнда басыңыз және бізбен сөйлесуді бастаңыз!",
1043
+ "CUSTOMER_SATISFACTION": "Тұтынушының қанағаттануы",
1044
+ "YOUR_OPINION_ON_OUR_CUSTOMER_SERVICE": "Біздің тұтынушыларға қызмет көрсету туралы пікіріңіз",
1045
+ "DOWNLOAD_TRANSCRIPT": "Транскриптті жүктеп алыңыз",
1046
+ "BACK": "Артқа",
1047
+ "YOUR_RATING": "сіздің рейтингіңіз",
1048
+ "WRITE_YOUR_OPINION": "Өз пікіріңізді жазыңыз ... (міндетті емес)",
1049
+ "SUBMIT": "Жіберу",
1050
+ "THANK_YOU_FOR_YOUR_EVALUATION": "Бағаңыз үшін рахмет",
1051
+ "YOUR_RATING_HAS_BEEN_RECEIVED": "сіздің рейтингіңіз алынды",
1052
+ "ALERT_LEAVE_CHAT": "Чаттан кеткіңіз келе ме?",
1053
+ "YES": "Иә",
1054
+ "NO": "Жоқ",
1055
+ "BUTTON_CLOSE_TO_ICON": "Сөйлесуді азайту",
1056
+ "BUTTON_EDIT_PROFILE": "Профильді жаңарту",
1057
+ "BUTTON_DOWNLOAD_TRANSCRIPT": "Транскриптті жүктеп алыңыз",
1058
+ "RATE_CHAT": "Чатқа баға беріңіз",
1059
+ "WELLCOME_TITLE": "Сәлем, Tiledesk сайтына қош келдіңіз 👋",
1060
+ "WELLCOME_MSG": "Біз қалай көмектесе аламыз?",
1061
+ "WELLCOME": "Қош келдіңіз",
1062
+ "WELCOME_TITLE": "Сәлем, Tiledesk сайтына қош келдіңіз 👋",
1063
+ "WELCOME_MSG": "Біз қалай көмектесе аламыз?",
1064
+ "WELCOME": "Қош келдіңіз",
1065
+ "OPTIONS": "опциялар",
1066
+ "SOUND_OFF": "дыбыс өшірулі",
1067
+ "SOUND_ON": "дыбыс қосулы",
1068
+ "LOGOUT": "шығу",
1069
+ "CLOSE": "Жабық",
1070
+ "PREV_CONVERSATIONS": "Сіздің сұхбаттарыңыз",
1071
+ "YOU": "Сіз",
1072
+ "SHOW_ALL_CONV": "барлығын көрсету",
1073
+ "START_A_CONVERSATION": "Әңгіме бастаңыз",
1074
+ "NO_CONVERSATION": "Әңгіме жоқ",
1075
+ "SEE_PREVIOUS": "алдыңғы қараңыз",
1076
+ "WAITING_TIME_FOUND": "Топ әдетте $reply_time-мен жауап береді",
1077
+ "WAITING_TIME_NOT_FOUND": "Команда мүмкіндігінше тезірек жауап береді",
1078
+ "CLOSED": "Жабық",
1079
+ "INFO_SUPPORT_USER_ADDED_SUBJECT": "сен",
1080
+ "INFO_SUPPORT_USER_ADDED_YOU_VERB": "сіз қосылдыңыз ",
1081
+ "INFO_SUPPORT_USER_ADDED_COMPLEMENT": "чат",
1082
+ "INFO_SUPPORT_USER_ADDED_VERB": "қосылды",
1083
+ "INFO_SUPPORT_CHAT_REOPENED": "Чат қайта ашылды",
1084
+ "INFO_SUPPORT_CHAT_CLOSED": "Чат жабылды",
1085
+ "TICKET_TAKING": "Өтініш қабылданды және көмек көрсету қызметкерлері онымен айналысуда.\nҚосымша пікірлер қосу үшін осы электрондық поштаға жауап беріңіз.",
1086
+ "LABEL_ERROR_FIELD_REQUIRED": "Міндетті өріс",
1087
+ "SENT_AN_ATTACHMENT": "қосымша жіберді",
1088
+ "SENT_AN_IMAGE": "сурет жіберді",
1089
+ "LABEL_PRECHAT_USER_FULLNAME": "Толық аты",
1090
+ "LABEL_PRECHAT_USER_EMAIL": "Электрондық пошта",
1091
+ "LABEL_PRECHAT_USER_EMAIL_ERROR": "Жарамсыз электрондық пошта мекенжайы",
1092
+ "LABEL_PRECHAT_USER_PHONE": "Телефон",
1093
+ "LABEL_PRECHAT_USER_PHONE_ERROR": "Телефон қажет",
1094
+ "LABEL_PRECHAT_FIRST_MESSAGE": "Қолдау көрсету тобына арналған хабарламаңыз",
1095
+ "LABEL_PRECHAT_STATIC_TERMS_PRIVACY": "Әңгімені жалғастырмас бұрын, <a href='https://tiledesk.com/termsofservice/' target='_blank'></a> және <a href='https://tiledesk.com/privacy.html' target='_blank'>-шарттар Құпиялылық саясаты</a>-пен келісесіз",
1096
+ "LABEL_PRECHAT_ACCEPT_TERMS_PRIVACY": "Мен келісемін",
1097
+ "PRECHAT_REQUIRED_ERROR": "Бұл керек аймақ"
1098
+ }
1099
+ },
1100
+ {
1101
+ "lang":"UZ",
1102
+ "data":
1103
+ {
1104
+ "LABEL_PLACEHOLDER": "xabaringizni yozing..",
1105
+ "LABEL_START_NW_CONV": "Yangi suhbat",
1106
+ "LABEL_FIRST_MSG": "Muammoingizni qisqacha tasvirlab bering, siz bilan agent bog'lanadi.",
1107
+ "LABEL_FIRST_MSG_NO_AGENTS": "🤔 Hozirda barcha operatorlar oflayn. Qanday bo'lmasin, muammoingizni tasvirlashingiz mumkin. Bu sizga imkon qadar tezroq qaytib keladigan qo'llab-quvvatlash guruhiga tayinlanadi.",
1108
+ "LABEL_FIRST_MSG_OPERATING_HOURS_CLOSED": "🤔 Bizning ofislarimiz yopiq. Qanday bo'lmasin, muammoingizni tasvirlashingiz mumkin. Bu sizga imkon qadar tezroq qaytib keladigan qo'llab-quvvatlash guruhiga tayinlanadi.",
1109
+ "LABEL_SELECT_TOPIC": "Mavzuni tanlang",
1110
+ "LABEL_COMPLETE_FORM": "Keyingi mavjud agent bilan suhbatni boshlash uchun shaklni to'ldiring.",
1111
+ "LABEL_FIELD_NAME": "Ism",
1112
+ "LABEL_ERROR_FIELD_NAME": "Majburiy maydon (kamida 5 ta belgi).",
1113
+ "LABEL_FIELD_EMAIL": "Elektron pochta",
1114
+ "LABEL_ERROR_FIELD_EMAIL": "Yaroqli elektron pochta manzilini kiriting.",
1115
+ "LABEL_WRITING": "yozmoqda...",
1116
+ "AGENT_NOT_AVAILABLE": " Oflayn",
1117
+ "AGENT_AVAILABLE": " Onlayn",
1118
+ "GUEST_LABEL": "Mehmon",
1119
+ "ALL_AGENTS_OFFLINE_LABEL": "Ayni paytda barcha operatorlar oflayn rejimda",
1120
+ "LABEL_LOADING": "Yuklanmoqda...",
1121
+ "CALLOUT_TITLE_PLACEHOLDER": "🖐 Yordam kerakmi?",
1122
+ "CALLOUT_MSG_PLACEHOLDER": "Bu yerni bosing va biz bilan suhbatni boshlang!",
1123
+ "CUSTOMER_SATISFACTION": "Mijozlarning qoniqishi",
1124
+ "YOUR_OPINION_ON_OUR_CUSTOMER_SERVICE": "Mijozlarga xizmat ko'rsatish haqidagi fikringiz",
1125
+ "DOWNLOAD_TRANSCRIPT": "Transkriptni yuklab oling",
1126
+ "BACK": "Orqaga",
1127
+ "YOUR_RATING": "sizning reytingingiz",
1128
+ "WRITE_YOUR_OPINION": "Fikringizni yozing ... (ixtiyoriy)",
1129
+ "SUBMIT": "Yuborish",
1130
+ "THANK_YOU_FOR_YOUR_EVALUATION": "Baholaganingiz uchun tashakkur",
1131
+ "YOUR_RATING_HAS_BEEN_RECEIVED": "Sizning reytingingiz olindi",
1132
+ "ALERT_LEAVE_CHAT": "Chatni tark etmoqchimisiz?",
1133
+ "YES": "Ha",
1134
+ "NO": "Yo'q",
1135
+ "BUTTON_CLOSE_TO_ICON": "Suhbatni minimallashtirish",
1136
+ "BUTTON_EDIT_PROFILE": "Profilni yangilash",
1137
+ "BUTTON_DOWNLOAD_TRANSCRIPT": "Transkriptni yuklab oling",
1138
+ "RATE_CHAT": "Suhbatni baholang",
1139
+ "WELLCOME_TITLE": "Salom, Tiledesk 👋 ga xush kelibsiz",
1140
+ "WELLCOME_MSG": "Biz qanday yordam bera olamiz?",
1141
+ "WELLCOME": "Xush kelibsiz",
1142
+ "WELCOME_TITLE": "Salom, Tiledesk 👋 ga xush kelibsiz",
1143
+ "WELCOME_MSG": "Biz qanday yordam bera olamiz?",
1144
+ "WELCOME": "Xush kelibsiz",
1145
+ "OPTIONS": "variantlari",
1146
+ "SOUND_OFF": "ovoz o'chirilgan",
1147
+ "SOUND_ON": "ovoz yoqilgan",
1148
+ "LOGOUT": "chiqish",
1149
+ "CLOSE": "Yopish",
1150
+ "PREV_CONVERSATIONS": "Sizning suhbatlaringiz",
1151
+ "YOU": "Siz",
1152
+ "SHOW_ALL_CONV": "hammasini ko'rsatish",
1153
+ "START_A_CONVERSATION": "Suhbatni boshlang",
1154
+ "NO_CONVERSATION": "Suhbat yo'q",
1155
+ "SEE_PREVIOUS": "oldingisiga qarang",
1156
+ "WAITING_TIME_FOUND": "Jamoa odatda $reply_timebilan javob beradi",
1157
+ "WAITING_TIME_NOT_FOUND": "Jamoa imkon qadar tezroq javob beradi",
1158
+ "CLOSED": "Yopiq",
1159
+ "INFO_SUPPORT_USER_ADDED_SUBJECT": "siz",
1160
+ "INFO_SUPPORT_USER_ADDED_YOU_VERB": "qo'shildingiz ",
1161
+ "INFO_SUPPORT_USER_ADDED_COMPLEMENT": "suhbat",
1162
+ "INFO_SUPPORT_USER_ADDED_VERB": "qo'shildi",
1163
+ "INFO_SUPPORT_CHAT_REOPENED": "Chat qayta ochildi",
1164
+ "INFO_SUPPORT_CHAT_CLOSED": "Chat yopildi",
1165
+ "TICKET_TAKING": "So'rov qabul qilindi va yordam xodimlari u bilan shug'ullanmoqda.\nKo'proq izoh qo'shish uchun ushbu xatga javob yozing.",
1166
+ "LABEL_ERROR_FIELD_REQUIRED": "Majburiy maydon",
1167
+ "SENT_AN_ATTACHMENT": "ilova yubordi",
1168
+ "SENT_AN_IMAGE": "rasm yubordi",
1169
+ "LABEL_PRECHAT_USER_FULLNAME": "To'liq ismi sharif",
1170
+ "LABEL_PRECHAT_USER_EMAIL": "Elektron pochta",
1171
+ "LABEL_PRECHAT_USER_EMAIL_ERROR": "Yaroqsiz elektron pochta manzili",
1172
+ "LABEL_PRECHAT_USER_PHONE": "Telefon",
1173
+ "LABEL_PRECHAT_USER_PHONE_ERROR": "Telefon kerak",
1174
+ "LABEL_PRECHAT_FIRST_MESSAGE": "Qo'llab-quvvatlash jamoasi uchun xabaringiz",
1175
+ "LABEL_PRECHAT_STATIC_TERMS_PRIVACY": "Suhbatni davom ettirishdan oldin <a href='https://tiledesk.com/termsofservice/' target='_blank'>shartlar</a> va <a href='https://tiledesk.com/privacy.html' target='_blank'>Maxfiylik siyosati</a>rozilik bildiring",
1176
+ "LABEL_PRECHAT_ACCEPT_TERMS_PRIVACY": "Men roziman",
1177
+ "PRECHAT_REQUIRED_ERROR": "Ushbu qator to'ldirilishi shart"
1178
+ }
1179
+ },
1180
+ {
1181
+ "lang":"AZ",
1182
+ "data":
1183
+ {
1184
+ "LABEL_PLACEHOLDER": "mesajınızı yazın..",
1185
+ "LABEL_START_NW_CONV": "Yeni söhbət",
1186
+ "LABEL_FIRST_MSG": "Probleminizi qısaca təsvir edin, agent sizinlə əlaqə saxlayacaq.",
1187
+ "LABEL_FIRST_MSG_NO_AGENTS": "🤔 Hazırda bütün operatorlar oflayndır. Hər halda probleminizi təsvir edə bilərsiniz. O, sizə ən qısa zamanda qayıdacaq dəstək komandasına təyin olunacaq.",
1188
+ "LABEL_FIRST_MSG_OPERATING_HOURS_CLOSED": "🤔 Ofislərimiz bağlıdır. Hər halda probleminizi təsvir edə bilərsiniz. O, sizə ən qısa zamanda qayıdacaq dəstək komandasına təyin olunacaq.",
1189
+ "LABEL_SELECT_TOPIC": "Mövzu seçin",
1190
+ "LABEL_COMPLETE_FORM": "Növbəti mövcud agentlə söhbətə başlamaq üçün formanı doldurun.",
1191
+ "LABEL_FIELD_NAME": "ad",
1192
+ "LABEL_ERROR_FIELD_NAME": "Tələb olunan sahə (minimum 5 simvol).",
1193
+ "LABEL_FIELD_EMAIL": "E-poçt",
1194
+ "LABEL_ERROR_FIELD_EMAIL": "Etibarlı e-poçt ünvanı daxil edin.",
1195
+ "LABEL_WRITING": "yazır...",
1196
+ "AGENT_NOT_AVAILABLE": " Oflayn",
1197
+ "AGENT_AVAILABLE": " Onlayn",
1198
+ "GUEST_LABEL": "Qonaq",
1199
+ "ALL_AGENTS_OFFLINE_LABEL": "Hazırda bütün operatorlar oflayndır",
1200
+ "LABEL_LOADING": "Yüklənir...",
1201
+ "CALLOUT_TITLE_PLACEHOLDER": "🖐 Kömək lazımdır?",
1202
+ "CALLOUT_MSG_PLACEHOLDER": "Bura klikləyin və bizimlə söhbət etməyə başlayın!",
1203
+ "CUSTOMER_SATISFACTION": "Müştəri məmnuniyyəti",
1204
+ "YOUR_OPINION_ON_OUR_CUSTOMER_SERVICE": "Müştəri xidmətlərimiz haqqında rəyiniz",
1205
+ "DOWNLOAD_TRANSCRIPT": "Transkript yükləyin",
1206
+ "BACK": "Geri",
1207
+ "YOUR_RATING": "sizin reytinqiniz",
1208
+ "WRITE_YOUR_OPINION": "Fikrinizi yazın... (istəyə görə)",
1209
+ "SUBMIT": "təqdim",
1210
+ "THANK_YOU_FOR_YOUR_EVALUATION": "Qiymətləndirməniz üçün təşəkkür edirik",
1211
+ "YOUR_RATING_HAS_BEEN_RECEIVED": "reytinqiniz alındı",
1212
+ "ALERT_LEAVE_CHAT": "Çatı tərk etmək istəyirsiniz?",
1213
+ "YES": "Bəli",
1214
+ "NO": "Yox",
1215
+ "BUTTON_CLOSE_TO_ICON": "Söhbəti minimuma endir",
1216
+ "BUTTON_EDIT_PROFILE": "Profili yeniləyin",
1217
+ "BUTTON_DOWNLOAD_TRANSCRIPT": "Transkript yükləyin",
1218
+ "RATE_CHAT": "Söhbəti qiymətləndirin",
1219
+ "WELLCOME_TITLE": "Salam, Tiledesk 👋-a xoş gəlmisiniz",
1220
+ "WELLCOME_MSG": "Biz necə kömək edə bilərik?",
1221
+ "WELLCOME": "Xoş gəldiniz",
1222
+ "WELCOME_TITLE": "Salam, Tiledesk 👋-a xoş gəlmisiniz",
1223
+ "WELCOME_MSG": "Biz necə kömək edə bilərik?",
1224
+ "WELCOME": "Xoş gəldiniz",
1225
+ "OPTIONS": "seçimlər",
1226
+ "SOUND_OFF": "səsi kəsilir",
1227
+ "SOUND_ON": "səsi yandırın",
1228
+ "LOGOUT": "çıxış",
1229
+ "CLOSE": "Yaxın",
1230
+ "PREV_CONVERSATIONS": "Söhbətləriniz",
1231
+ "YOU": "Sən",
1232
+ "SHOW_ALL_CONV": "hamısını göstər",
1233
+ "START_A_CONVERSATION": "Söhbətə başlayın",
1234
+ "NO_CONVERSATION": "Söhbət yoxdur",
1235
+ "SEE_PREVIOUS": "əvvəlki baxın",
1236
+ "WAITING_TIME_FOUND": "Komanda adətən $reply_timeilə cavab verir",
1237
+ "WAITING_TIME_NOT_FOUND": "Komanda mümkün qədər tez cavab verəcəkdir",
1238
+ "CLOSED": "Bağlı",
1239
+ "INFO_SUPPORT_USER_ADDED_SUBJECT": "Sən",
1240
+ "INFO_SUPPORT_USER_ADDED_YOU_VERB": "siz əlavə olundunuz ",
1241
+ "INFO_SUPPORT_USER_ADDED_COMPLEMENT": "söhbət",
1242
+ "INFO_SUPPORT_USER_ADDED_VERB": "qoşuldu",
1243
+ "INFO_SUPPORT_CHAT_REOPENED": "Çat yenidən açıldı",
1244
+ "INFO_SUPPORT_CHAT_CLOSED": "Çat bağlandı",
1245
+ "TICKET_TAKING": "Müraciət qəbul edilib və yardım işçiləri bununla məşğul olur.\nDaha çox şərh əlavə etmək üçün bu e-poçta cavab yazın.",
1246
+ "LABEL_ERROR_FIELD_REQUIRED": "tələb olunan sahə",
1247
+ "SENT_AN_ATTACHMENT": "əlavə göndərdi",
1248
+ "SENT_AN_IMAGE": "şəkil göndərdi",
1249
+ "LABEL_PRECHAT_USER_FULLNAME": "Tam adı",
1250
+ "LABEL_PRECHAT_USER_EMAIL": "E-poçt",
1251
+ "LABEL_PRECHAT_USER_EMAIL_ERROR": "E-mail ünvanı səhvdir",
1252
+ "LABEL_PRECHAT_USER_PHONE": "Telefon",
1253
+ "LABEL_PRECHAT_USER_PHONE_ERROR": "Telefon tələb olunur",
1254
+ "LABEL_PRECHAT_FIRST_MESSAGE": "Dəstək komandası üçün mesajınız",
1255
+ "LABEL_PRECHAT_STATIC_TERMS_PRIVACY": "Söhbətə davam etməzdən əvvəl <a href='https://tiledesk.com/termsofservice/' target='_blank'>Şərt</a> və <a href='https://tiledesk.com/privacy.html' target='_blank'>Məxfilik Siyasəti</a>ilə razılaşın",
1256
+ "LABEL_PRECHAT_ACCEPT_TERMS_PRIVACY": "razıyam",
1257
+ "PRECHAT_REQUIRED_ERROR": "Bu xananın doldurulması məcburidir"
1258
+ }
939
1259
  }
940
1260
  ]
941
1261
 
package/deploy.sh CHANGED
@@ -1,3 +1,4 @@
1
+ git pull
1
2
  npm version patch
2
3
  version=`node -e 'console.log(require("./package.json").version)'`
3
4
  echo "version $version"
@@ -8,3 +9,4 @@ if [ "$version" != "" ]; then
8
9
  git push --tags
9
10
  npm publish --access public
10
11
  fi
12
+ git push
package/event/botEvent.js CHANGED
@@ -123,7 +123,7 @@ messageEvent.on('message.create', function(message) {
123
123
  if (bot.type==="internal") {
124
124
  botEvent.emit('bot.message.received.notify.internal', message);
125
125
 
126
- }else {
126
+ }else { //external
127
127
  if (bot.url) {
128
128
  var botNotification = {bot: bot, message: message};
129
129
  botEvent.emit('bot.message.received.notify.external', botNotification);
@@ -0,0 +1,11 @@
1
+ const EventEmitter = require('events');
2
+
3
+ class SubscriptionEvent extends EventEmitter {}
4
+ var winston = require('../config/winston');
5
+
6
+
7
+ const subscriptionEvent = new SubscriptionEvent();
8
+
9
+
10
+
11
+ module.exports = subscriptionEvent;
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1,220 @@
1
+ const ipfilter = require('express-ipfilter').IpFilter
2
+ var winston = require('../config/winston');
3
+ var jwt = require('jsonwebtoken');
4
+
5
+
6
+ var customDetection = function (req) {
7
+ // const ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress;
8
+ // const ip = (req.headers['x-forwarded-for'] || '').split(',').pop().trim() || //https://stackoverflow.com/questions/8107856/how-to-determine-a-users-ip-address-in-node
9
+ // req.socket.remoteAddress
10
+
11
+
12
+ let ip = req.socket.remoteAddress;
13
+
14
+ const xFor = req.headers['x-forwarded-for'];
15
+ if (xFor ) {
16
+ const xForArr = xFor.split(',');
17
+ if (xForArr && xForArr.length>0) {
18
+ ip = xForArr.shift();
19
+ }
20
+ }
21
+ // const ip =
22
+ // req.headers['x-forwarded-for']?.split(',').shift()
23
+ // || req.socket?.remoteAddress
24
+
25
+ winston.info("standard ip: "+ip); // ip address of the user
26
+ return ip;
27
+ }
28
+
29
+ var getToken = function (headers) {
30
+ winston.debug("getToken",headers);
31
+ if (headers && headers.authorization) {
32
+ var parted = headers.authorization.split(' ');
33
+ if (parted.length === 2) {
34
+ return parted[1];
35
+ } else {
36
+ return null;
37
+ }
38
+ } else {
39
+ return null;
40
+ }
41
+ };
42
+
43
+
44
+ class IPFilter {
45
+
46
+
47
+
48
+ constructor() {
49
+ }
50
+
51
+
52
+
53
+
54
+
55
+
56
+
57
+
58
+
59
+ projectIpFilter (req, res, next) {
60
+ var that = this;
61
+ // console.log("that", that)
62
+
63
+ const nextIp = function(err) {
64
+ winston.debug("projectIpFilter next",err);
65
+
66
+ if (err && err.name === "IpDeniedError") {
67
+ winston.info("IpDeniedError for projectIpFilter");
68
+ return res.status(401).json({ err: "error project ip filter" });
69
+ // next(err)
70
+ }
71
+
72
+ next();
73
+
74
+ }
75
+
76
+
77
+ if (!req.project) {
78
+ return next();
79
+ }
80
+
81
+ var projectIpFilterEnabled = req.project.ipFilterEnabled;
82
+ winston.debug("project projectIpFilterEnabled: " +projectIpFilterEnabled)
83
+
84
+ var projectIpFilter = req.project.ipFilter
85
+ winston.debug("project ipFilter: " + projectIpFilter)
86
+
87
+ if (projectIpFilterEnabled === true && projectIpFilter && projectIpFilter.length > 0) {
88
+ winston.debug("filtering project IpFilter with ", projectIpFilter );
89
+ var ip = ipfilter(projectIpFilter, { detectIp: customDetection, mode: 'allow' })
90
+ // var ip = ipfilter(projectIpFilter, { mode: 'allow' })
91
+ ip(req, res, nextIp);
92
+ } else {
93
+ next();
94
+ }
95
+
96
+ }
97
+
98
+ projectIpFilterDeny (req, res, next) {
99
+
100
+ const nextIp = function(err) {
101
+ winston.debug("projectIpFilter next",err);
102
+
103
+ if (err && err.name === "IpDeniedError") {
104
+ winston.info("IpDeniedError for projectIpFilterDeny");
105
+ return res.status(401).json({ err: "error project deny ip filter" });
106
+ // next(err)
107
+ }
108
+
109
+ next();
110
+
111
+ }
112
+
113
+ if (!req.project) {
114
+ return next();
115
+ }
116
+
117
+ var projectIpFilterDenyEnabled = req.project.ipFilterDenyEnabled;
118
+ winston.debug("project projectIpFilterDenyEnabled: " +projectIpFilterDenyEnabled)
119
+
120
+ var projectIpFilterDeny = req.project.ipFilterDeny
121
+ winston.debug("project IpFilterDeny: " + projectIpFilterDeny)
122
+
123
+
124
+ if (projectIpFilterDenyEnabled === true && projectIpFilterDeny && projectIpFilterDeny.length > 0) {
125
+ winston.debug("filtering project projectIpFilterDeny with ", projectIpFilterDeny );
126
+ var ip = ipfilter(projectIpFilterDeny, { detectIp: customDetection, mode: 'deny' })
127
+ ip(req, res, nextIp);
128
+ } else {
129
+ next();
130
+ }
131
+
132
+ }
133
+
134
+
135
+
136
+ projectBanUserFilter(req, res, next) {
137
+
138
+ winston.debug("projectBanUserFilter hereee*********** ")
139
+
140
+ const nextIp = function(err) {
141
+ winston.debug("projectBanUserFilter next",err);
142
+
143
+ if (err && err.name === "IpDeniedError") {
144
+ winston.info("IpDeniedError for projectBanUserFilter");
145
+ return res.status(401).json({ err: "error projectBanUserFilter" });
146
+ // next(err)
147
+ }
148
+
149
+ next();
150
+
151
+ }
152
+
153
+ if (!req.project) {
154
+ return next();
155
+ }
156
+
157
+ var bannedUsers = req.project.bannedUsers
158
+ winston.debug("project bannedUsers: " + bannedUsers)
159
+
160
+ if (bannedUsers && bannedUsers.length > 0) {
161
+
162
+ let bannedUsersArr = [];
163
+ let bannedUsersIdUserArr = [];
164
+ for (var i =0; i < bannedUsers.length; i++) {
165
+ bannedUsersArr.push(bannedUsers[i].ip);
166
+ bannedUsersIdUserArr.push(bannedUsers[i].id);
167
+ }
168
+
169
+ winston.debug("project req.preDecodedJwt: ", req.preDecodedJwt)
170
+ // winston.debug("project req.preDecodedJwt._id: "+ req.preDecodedJwt._id)
171
+
172
+
173
+ if (req.preDecodedJwt && req.preDecodedJwt._id && bannedUsersIdUserArr.indexOf(req.preDecodedJwt._id) > -1) {
174
+ winston.info("filtering project bannedUsers with id: " + req.preDecodedJwt._id)
175
+ return res.status(401).json({ err: "error projectBanUserFilter by id" });
176
+ }
177
+
178
+
179
+ // winston.debug("filtering project bannedUsers with ", bannedUsersArr );
180
+ // var ip = ipfilter(bannedUsersArr, { detectIp: customDetection, mode: 'deny' })
181
+ // ip(req, res, nextIp);
182
+ next();
183
+ } else {
184
+ next();
185
+ }
186
+
187
+ }
188
+
189
+
190
+
191
+
192
+
193
+ decodeJwt(req, res, next) {
194
+
195
+ let token = getToken(req.headers);
196
+ winston.debug("filtering token " + token);
197
+
198
+ if (token) {
199
+
200
+ try {
201
+ var decoded = jwt.decode(token);
202
+ winston.debug("filtering decoded ", decoded);
203
+ req.preDecodedJwt = decoded;
204
+ }catch(e) {
205
+ winston.debug("Error decoding jwt");
206
+ }
207
+
208
+ }
209
+
210
+
211
+ next();
212
+ }
213
+
214
+
215
+
216
+
217
+
218
+ }
219
+ var iPFilter = new IPFilter();
220
+ module.exports = iPFilter;
@@ -77,15 +77,24 @@ module.exports = function(passport) {
77
77
  // winston.info("secretOrKeyProvider: "+request.project.name );
78
78
  // winston.info("secretOrKeyProvider: "+rawJwtToken );
79
79
 
80
- var decoded = jwt.decode(rawJwtToken);
80
+ var decoded = request.preDecodedJwt
81
81
  winston.debug("decoded: ", decoded );
82
+ if (!decoded) { //fallback
83
+ winston.debug("load decoded after: ");
84
+ decoded = jwt.decode(rawJwtToken);
85
+ }
86
+
87
+ winston.debug("decoded after: ", decoded );
82
88
 
83
89
  // qui arriva questo
84
90
  // decoded: {"_id":"5ce3ee855c520200176c189e","updatedAt":"2019-05-31T09:50:22.949Z","createdAt":"2019-05-21T12:26:45.192Z","name":"botext","url":"https://tiledesk-v2-simple--andrealeo83.repl.co","id_project":"5ce3d1ceb25ad30017274bc5","trashed":false,"createdBy":"5ce3d1c7b25ad30017274bc2","__v":0,"external":true,"iat":1559297130,"aud":"https://tiledesk.com","iss":"https://tiledesk.com","sub":"5ce3ee855c520200176c189e@tiledesk.com/bot"}
85
91
 
86
- winston.debug("decoded.aud: "+ decoded.aud );
87
92
 
88
93
  if (decoded && decoded.aud) {
94
+
95
+ winston.debug("decoded.aud: "+ decoded.aud );
96
+
97
+
89
98
  const audUrl = new URL(decoded.aud);
90
99
  winston.debug("audUrl: "+ audUrl );
91
100
  const path = audUrl.pathname;
package/models/lead.js CHANGED
@@ -96,6 +96,8 @@ var LeadSchema = new Schema({
96
96
  LeadSchema.index({fullname: 'text', email: 'text'},
97
97
  {"name":"lead_fulltext","default_language": defaultFullTextLanguage,"language_override": "dummy"}); // schema level
98
98
 
99
+ // suggested by atlas
100
+ LeadSchema.index({status: 1, id_project: 1, createdAt: -1});
99
101
 
100
102
  var lead = mongoose.model('lead', LeadSchema);
101
103