@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
@@ -2,7 +2,6 @@ var express = require('express');
2
2
  var router = express.Router({mergeParams: true});
3
3
  var Event = require("./event");
4
4
  var winston = require('../../config/winston');
5
- const eventEvent = require('./eventEvent');
6
5
  var validtoken = require('../../middleware/valid-token');
7
6
  const eventService = require('./eventService');
8
7
  const { check, validationResult } = require('express-validator');
@@ -10,6 +9,9 @@ var passport = require('passport');
10
9
  require('../../middleware/passport')(passport);
11
10
  var roleChecker = require('../../middleware/has-role');
12
11
 
12
+ const messageEvent = require('../../event/messageEvent');
13
+
14
+
13
15
  router.post('/', [
14
16
  passport.authenticate(['basic', 'jwt'],
15
17
  { session: false }),
@@ -37,13 +39,41 @@ router.post('/', [
37
39
  pu = req.projectuser.id
38
40
  }
39
41
 
42
+ console.log("************* emit event"+new Date().toISOString());
43
+
44
+ // // message.senderFullname, message.recipient,
45
+ // // message.recipient_fullname, message.text, message.sender, attributes, message.type, message.metadata, timestamp, message.group
46
+ // var recipient = req.body.attributes.request_id;
47
+ // console.log("recipient",recipient);
48
+ // var sender = req.user.id;
49
+ // console.log("sender",sender);
50
+
51
+ // messageEvent.emit("message.test",
52
+ // {
53
+ // recipient: recipient,
54
+ // recipient_fullname: "pluto",
55
+ // // sender:"bb0d809b-b093-419b-8b48-11a192cc3619",
56
+ // sender: sender,
57
+ // senderFullname: "Tiledesk",
58
+ // text:"welcome",
59
+ // group: {
60
+ // members: {
61
+ // // "bb0d809b-b093-419b-8b48-11a192cc3619": 1,
62
+ // sender: 1
63
+
64
+ // }
65
+ // }
66
+ // }
67
+ // );
68
+
40
69
  // emit(name, attributes, id_project, project_user, createdBy, status, user) {
41
70
  eventService.emit(req.body.name, req.body.attributes, req.projectid, pu, req.user.id, undefined, req.user).then(function(event) {
42
- res.json(event);
43
- }).catch(function(err) {
44
- winston.error('Error saving the event '+ JSON.stringify(event), err)
45
- return res.status(500).send({success: false, msg: 'Error saving the event '+ JSON.stringify(event)});
46
- });
71
+
72
+ res.json(event);
73
+ }).catch(function(err) {
74
+ winston.error('Error saving the event '+ JSON.stringify(event), err)
75
+ return res.status(500).send({success: false, msg: 'Error saving the event '+ JSON.stringify(event)});
76
+ });
47
77
 
48
78
  // var newEvent = new Event({
49
79
  // name: req.body.name,
@@ -137,7 +167,7 @@ router.get('/', [passport.authenticate(['basic', 'jwt'],
137
167
  }
138
168
 
139
169
  // collection.count is deprecated, and will be removed in a future version. Use Collection.countDocuments or Collection.estimatedDocumentCount instead
140
- return Event.count(query, function (err, totalRowCount) {
170
+ return Event.countDocuments(query, function (err, totalRowCount) {
141
171
 
142
172
  var objectToReturn = {
143
173
  perPage: limit,
@@ -149,8 +149,10 @@ class MessageActionsInterceptor {
149
149
  if (request) {
150
150
  // setTimeout(function() {
151
151
  // winston.info("delayed")
152
- // closeRequestByRequestId(request_id, id_project, notify) {
153
- requestService.closeRequestByRequestId(request.request_id, request.id_project );
152
+
153
+ // closeRequestByRequestId(request_id, id_project, skipStatsUpdate, notify, closed_by)
154
+ const closed_by = message.sender;
155
+ requestService.closeRequestByRequestId(request.request_id, request.id_project, false, true, closed_by );
154
156
  // }, 1500);
155
157
 
156
158
 
@@ -1,10 +1,9 @@
1
1
 
2
2
  var winston = require('../config/winston');
3
- // var validtoken = require('../middleware/valid-token');
4
- // var roleChecker = require('../middleware/has-role');
5
- // var passport = require('passport');
6
- // require('../middleware/passport')(passport);
7
-
3
+ var validtoken = require('../middleware/valid-token');
4
+ var roleChecker = require('../middleware/has-role');
5
+ var passport = require('passport');
6
+ require('../middleware/passport')(passport);
8
7
 
9
8
  class PubModulesManager {
10
9
 
@@ -20,12 +19,35 @@ class PubModulesManager {
20
19
  this.scheduler = undefined;
21
20
 
22
21
  this.rasa = undefined;
22
+ this.rasaRoute = undefined;
23
+
24
+ this.activityArchiver = undefined;
25
+ this.activityRoute = undefined;
26
+
27
+ this.analyticsRoute = undefined;
28
+
29
+ this.cannedResponseRoute = undefined;
30
+
31
+ this.trigger = undefined;
32
+ this.triggerRoute = undefined;
33
+
34
+ this.tilebot = undefined;
35
+ this.tilebotRoute = undefined;
23
36
  }
24
37
 
25
38
 
26
39
 
27
40
  use(app) {
28
41
 
42
+ if (this.rasaRoute) {
43
+ app.use('/modules/rasa', this.rasaRoute);
44
+ winston.info("ModulesManager rasaRoute controller loaded");
45
+ }
46
+ if (this.tilebotRoute) {
47
+ app.use('/modules/tilebot', this.tilebotRoute);
48
+ winston.info("ModulesManager tilebot controller loaded");
49
+ }
50
+
29
51
  }
30
52
  useUnderProjects(app) {
31
53
  var that = this;
@@ -39,10 +61,31 @@ class PubModulesManager {
39
61
  winston.info("ModulesManager eventsRoute controller loaded");
40
62
  }
41
63
 
64
+
65
+ if (this.activityRoute) {
66
+ app.use('/:projectid/activities', [passport.authenticate(['basic', 'jwt'], { session: false }), validtoken, roleChecker.hasRole('admin')], this.activityRoute);
67
+ winston.info("ModulesManager activities controller loaded");
68
+ }
69
+
70
+ if (this.analyticsRoute) {
71
+ app.use('/:projectid/analytics', [passport.authenticate(['basic', 'jwt'], { session: false }), validtoken, roleChecker.hasRole('agent')], this.analyticsRoute);
72
+ winston.info("ModulesManager analytics controller loaded");
73
+ }
74
+
75
+ if (this.cannedResponseRoute) {
76
+ app.use('/:projectid/canned', [passport.authenticate(['basic', 'jwt'], { session: false }), validtoken, roleChecker.hasRole('agent')], this.cannedResponseRoute);
77
+ winston.info("ModulesManager canned controller loaded");
78
+ }
79
+
80
+ if (this.triggerRoute) {
81
+ app.use('/:projectid/modules/triggers', [passport.authenticate(['basic', 'jwt'], { session: false }), validtoken, roleChecker.hasRole('admin')], this.triggerRoute);
82
+ winston.info("ModulesManager trigger controller loaded");
83
+ }
84
+
42
85
  }
43
86
 
44
87
 
45
- init() {
88
+ init(config) {
46
89
  winston.debug("PubModulesManager init");
47
90
 
48
91
  try {
@@ -145,7 +188,10 @@ class PubModulesManager {
145
188
  try {
146
189
  this.rasa = require('./rasa');
147
190
  winston.debug("this.rasa:"+ this.rasa);
148
- this.rasa.listener.listen();
191
+ this.rasa.listener.listen(config);
192
+
193
+ this.rasaRoute = this.rasa.rasaRoute;
194
+
149
195
  winston.info("PubModulesManager initialized rasa.");
150
196
  } catch(err) {
151
197
  if (err.code == 'MODULE_NOT_FOUND') {
@@ -157,8 +203,85 @@ class PubModulesManager {
157
203
 
158
204
 
159
205
 
206
+
207
+ try {
208
+ this.activityArchiver = require('./activities').activityArchiver;
209
+ // this.activityArchiver.listen();
210
+ winston.debug("this.activityArchiver:"+ this.activityArchiver);
211
+
212
+ this.activityRoute = require('./activities').activityRoute;
213
+ winston.debug("this.activityRoute:"+ this.activityRoute);
214
+
215
+ winston.info("ModulesManager activities initialized");
216
+ } catch(err) {
217
+ if (err.code == 'MODULE_NOT_FOUND') {
218
+ winston.info("ModulesManager init activities module not found");
219
+ }else {
220
+ winston.error("ModulesManager error initializing init activities module", err);
221
+ }
222
+ }
223
+
224
+
225
+ try {
226
+ this.analyticsRoute = require('./analytics').analyticsRoute;
227
+ winston.debug("this.analyticsRoute:"+ this.analyticsRoute);
228
+ winston.info("ModulesManager analyticsRoute initialized");
229
+ } catch(err) {
230
+ if (err.code == 'MODULE_NOT_FOUND') {
231
+ winston.info("ModulesManager init analytics module not found");
232
+ }else {
233
+ winston.error("ModulesManager error initializing init analytics module", err);
234
+ }
235
+ }
236
+
237
+
238
+
239
+ try {
240
+ this.cannedResponseRoute = require('./canned').cannedResponseRoute;
241
+ winston.debug("this.cannedResponseRoute:"+ this.cannedResponseRoute);
242
+ winston.info("ModulesManager cannedResponseRoute initialized");
243
+ } catch(err) {
244
+ if (err.code == 'MODULE_NOT_FOUND') {
245
+ winston.info("ModulesManager init canned module not found");
246
+ }else {
247
+ winston.error("ModulesManager error initializing init canned module", err);
248
+ }
249
+ }
250
+
160
251
 
252
+ try {
253
+ this.trigger = require('./trigger').start;
254
+ winston.debug("this.trigger:"+ this.trigger);
255
+ this.triggerRoute = require('./trigger').triggerRoute;
256
+ winston.debug("this.triggerRoute:"+ this.triggerRoute);
257
+ winston.info("ModulesManager trigger initialized");
258
+ } catch(err) {
259
+ if (err.code == 'MODULE_NOT_FOUND') {
260
+ winston.info("ModulesManager init trigger module not found");
261
+ }else {
262
+ winston.error("ModulesManager error initializing init trigger module", err);
263
+ }
264
+ }
161
265
 
266
+
267
+
268
+
269
+ try {
270
+ this.tilebot = require('./tilebot');
271
+ winston.debug("this.tilebot:"+ this.tilebot);
272
+ this.tilebot.listener.listen(config);
273
+ this.tilebotRoute = this.tilebot.tilebotRoute;
274
+
275
+ winston.info("PubModulesManager initialized tilebot.");
276
+ } catch(err) {
277
+ if (err.code == 'MODULE_NOT_FOUND') {
278
+ winston.info("PubModulesManager init tilebot module not found");
279
+ }else {
280
+ winston.info("PubModulesManager error initializing init tilebot module", err);
281
+ }
282
+ }
283
+
284
+
162
285
  }
163
286
 
164
287
  start() {
@@ -212,6 +335,16 @@ class PubModulesManager {
212
335
  }
213
336
 
214
337
 
338
+ if (this.activityArchiver) {
339
+ try {
340
+ this.activityArchiver.listen();
341
+ winston.info("ModulesManager activityArchiver started");
342
+ } catch(err) {
343
+ winston.info("ModulesManager error starting activityArchiver module", err);
344
+ }
345
+ }
346
+
347
+
215
348
  }
216
349
 
217
350
 
@@ -1,3 +1,10 @@
1
1
  const listener = require("./listener");
2
2
 
3
- module.exports = {listener:listener };
3
+ const rasa = require("@tiledesk/tiledesk-rasa-connector");
4
+ const rasaRoute = rasa.router;
5
+
6
+
7
+
8
+
9
+
10
+ module.exports = { listener: listener, rasaRoute: rasaRoute };
@@ -1,32 +1,53 @@
1
1
  const botEvent = require('../../event/botEvent');
2
2
  var Faq_kb = require("../../models/faq_kb");
3
3
  var winston = require('../../config/winston');
4
+ const rasa = require("@tiledesk/tiledesk-rasa-connector");
5
+ var configGlobal = require('../../config/global');
4
6
 
5
- const BOT_RASA_ENDPOINT = process.env.BOT_RASA_ENDPOINT;
7
+ var port = process.env.PORT || '3000';
8
+
9
+ const BOT_RASA_ENDPOINT = process.env.BOT_RASA_ENDPOINT || "http://localhost:" + port+ "/modules/rasa/rasabot";
6
10
  winston.debug("BOT_RASA_ENDPOINT: " + BOT_RASA_ENDPOINT);
7
11
 
8
- if (BOT_RASA_ENDPOINT) {
12
+ // if (BOT_RASA_ENDPOINT) {
9
13
  winston.info("Rasa endpoint: " + BOT_RASA_ENDPOINT);
10
- } else {
11
- winston.info("Rasa endpoint not configured");
12
- }
14
+ // } else {
15
+ // winston.info("Rasa endpoint not configured");
16
+ // }
13
17
 
18
+ const apiUrl = process.env.API_URL || configGlobal.apiUrl;
19
+ winston.info('Rasa apiUrl: '+ apiUrl);
14
20
 
15
21
  class Listener {
16
22
 
17
- listen() {
23
+ listen(config) {
18
24
 
19
- winston.debug('rasa Listener listen');
25
+ winston.info('Rasa Listener listen');
26
+ winston.debug("rasa config databaseUri: " + config.databaseUri);
27
+
20
28
 
21
29
  var that = this;
22
30
 
31
+
32
+ rasa.startRasa(
33
+ {
34
+ KVBASE_COLLECTION : process.env.KVBASE_COLLECTION,
35
+ MONGODB_URI: config.databaseUri,
36
+ API_ENDPOINT: apiUrl,
37
+ log: process.env.RASABOT_LOG
38
+ }, () => {
39
+ winston.info("RASA proxy server successfully started.");
40
+ });
41
+
42
+
43
+
23
44
  botEvent.on('faqbot.create', function(bot) {
24
45
  if (BOT_RASA_ENDPOINT) {
25
46
 
26
- winston.info('bot.type:'+bot.type);
47
+ winston.debug('bot.type:'+bot.type);
27
48
  if (bot.type==="rasa") {
28
49
 
29
- winston.info('qui.type:'+bot.type);
50
+ winston.debug('qui.type:'+bot.type);
30
51
 
31
52
 
32
53
  Faq_kb.findByIdAndUpdate(bot.id, {"url":BOT_RASA_ENDPOINT}, { new: true, upsert: true }, function (err, savedFaq_kb) {
@@ -188,7 +188,7 @@ devi mandare un messaggio welcome tu altrimenti il bot inserito successivamente
188
188
 
189
189
  setImmediate(() => {
190
190
 
191
- winston.debug("ConciergeBot send close bot message");
191
+ winston.debug("ConciergeBot send close bot message",request);
192
192
 
193
193
  // send(sender, senderFullname, recipient, text, id_project, createdBy, attributes, type, metadata, language)
194
194
  messageService.send(
@@ -198,7 +198,7 @@ devi mandare un messaggio welcome tu altrimenti il bot inserito successivamente
198
198
  "Chat closed",
199
199
  request.id_project,
200
200
  'system',
201
- {subtype:"info/support", "updateconversation" : false, messagelabel: {key: "CHAT_CLOSED"}},
201
+ {subtype:"info/support", "updateconversation" : false, messagelabel: {key: "CHAT_CLOSED"}},
202
202
  undefined,
203
203
  request.language
204
204
  );
@@ -228,8 +228,8 @@ devi mandare un messaggio welcome tu altrimenti il bot inserito successivamente
228
228
  request.request_id,
229
229
  "Chat reopened",
230
230
  request.id_project,
231
- 'system',
232
- {subtype:"info/support", "updateconversation" : false, messagelabel: {key: "CHAT_REOPENED"}},
231
+ 'system',
232
+ {subtype:"info/support", "updateconversation" : true, messagelabel: {key: "CHAT_REOPENED"}},
233
233
  undefined,
234
234
  request.language
235
235
 
@@ -84,7 +84,9 @@ findUnresponsiveRequests() {
84
84
  requests.forEach(request => {
85
85
  winston.debug("********unresponsive request ", request);
86
86
 
87
- return requestService.closeRequestByRequestId(request.request_id, request.id_project, false, false).then(function(updatedStatusRequest) {
87
+ // closeRequestByRequestId(request_id, id_project, skipStatsUpdate, notify, closed_by)
88
+ const closed_by = "_bot_unresponsive";
89
+ return requestService.closeRequestByRequestId(request.request_id, request.id_project, false, false, closed_by).then(function(updatedStatusRequest) {
88
90
  winston.verbose("CloseAgentUnresponsiveRequestTask: Request closed with request_id: " + request.request_id);
89
91
  // winston.info("Request closed",updatedStatusRequest);
90
92
  }).catch(function(err) {
@@ -50,8 +50,8 @@ scheduleUnresponsiveRequests() {
50
50
  //https://crontab.guru/examples.html
51
51
  var s= schedule.scheduleJob(this.cronExp, function(fireDate){ //TODO aggiungi un bias random
52
52
 
53
- let timeInMs = Math.random() * (1000); // avoid cluster concurrent jobs in multiple nodes between 0 and 1sec
54
- winston.info('timeInMs => '+ timeInMs);
53
+ let timeInMs = Math.random() * (1000); // avoid cluster concurrent jobs in multiple nodes delay between 0 and 1sec
54
+ winston.debug('timeInMs => '+ timeInMs);
55
55
 
56
56
  setTimeout(function () {
57
57
  winston.debug('CloseBotUnresponsiveRequestTask scheduleUnresponsiveRequests job was supposed to run at ' + fireDate + ', but actually ran at ' + new Date());
@@ -95,7 +95,9 @@ findUnresponsiveRequests() {
95
95
 
96
96
  winston.debug("********unresponsive request ", request);
97
97
 
98
- return requestService.closeRequestByRequestId(request.request_id, request.id_project, false, false).then(function(updatedStatusRequest) {
98
+ // closeRequestByRequestId(request_id, id_project, skipStatsUpdate, notify, closed_by)
99
+ const closed_by = "_bot_unresponsive";
100
+ return requestService.closeRequestByRequestId(request.request_id, request.id_project, false, false, closed_by).then(function(updatedStatusRequest) {
99
101
  winston.info("CloseBotUnresponsiveRequestTask: Request closed with request_id: " + request.request_id);
100
102
  // winston.info("Request closed",updatedStatusRequest);
101
103
  }).catch(function(err) {
@@ -0,0 +1,11 @@
1
+ const listener = require("./listener");
2
+
3
+ const tilebot = require("@tiledesk/tiledesk-tybot-connector");
4
+ const tilebotRoute = tilebot.router;
5
+
6
+
7
+
8
+
9
+
10
+ module.exports = { listener: listener, tilebotRoute: tilebotRoute };
11
+
@@ -0,0 +1,69 @@
1
+ const botEvent = require('../../event/botEvent');
2
+ var Faq_kb = require("../../models/faq_kb");
3
+ var winston = require('../../config/winston');
4
+ var configGlobal = require('../../config/global');
5
+
6
+ var port = process.env.PORT || '3000';
7
+
8
+ const TILEBOT_ENDPOINT = process.env.TILEBOT_ENDPOINT || "http://localhost:" + port+ "/modules/tilebot/ext/";
9
+ winston.debug("TILEBOT_ENDPOINT: " + TILEBOT_ENDPOINT);
10
+
11
+ winston.info("Tilebot endpoint: " + TILEBOT_ENDPOINT);
12
+
13
+
14
+ const apiUrl = process.env.API_URL || configGlobal.apiUrl;
15
+ winston.info('Rasa apiUrl: '+ apiUrl);
16
+
17
+ const tybot = require("@tiledesk/tiledesk-tybot-connector");
18
+
19
+
20
+ class Listener {
21
+
22
+ listen(config) {
23
+
24
+ winston.info('Tilebot Listener listen');
25
+ winston.debug("Tilebot config databaseUri: " + config.databaseUri);
26
+
27
+
28
+ var that = this;
29
+
30
+ tybot.startApp(
31
+ {
32
+ MONGODB_URI: config.databaseUri,
33
+ API_ENDPOINT: apiUrl,
34
+ log: process.env.TILEBOT_LOG
35
+ }, () => {
36
+ winston.info("TileBot proxy server successfully started.");
37
+ }
38
+ );
39
+
40
+
41
+ botEvent.on('faqbot.create', function(bot) {
42
+ if (TILEBOT_ENDPOINT) {
43
+
44
+ winston.debug('bot.type:'+bot.type);
45
+ if (bot.type==="tilebot") {
46
+
47
+ winston.debug('qui.type:'+bot.type);
48
+
49
+
50
+ Faq_kb.findByIdAndUpdate(bot.id, {"url":TILEBOT_ENDPOINT+bot.id}, { new: true, upsert: true }, function (err, savedFaq_kb) {
51
+
52
+ // bot.save(function (err, savedFaq_kb) {
53
+ if (err) {
54
+ return winston.error('error saving faqkb tilebot ', err)
55
+ }
56
+ winston.verbose('Saved faqkb tilebot', savedFaq_kb.toObject())
57
+ });
58
+ }
59
+ }
60
+ });
61
+
62
+ }
63
+
64
+ }
65
+
66
+ var listener = new Listener();
67
+
68
+
69
+ module.exports = listener;