@tiledesk/tiledesk-server 2.2.39 → 2.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. package/LICENSE +14 -657
  2. package/README.md +2 -0
  3. package/app.js +12 -0
  4. package/event/subscriptionEvent.js +11 -0
  5. package/models/subscriptionEvent.js +11 -0
  6. package/models/subscriptionLog.js +34 -0
  7. package/models/tagLibrary.js +42 -0
  8. package/package.json +2 -10
  9. package/pubmodules/activities/activityArchiver.js +295 -0
  10. package/pubmodules/activities/index.js +3 -0
  11. package/pubmodules/activities/models/activity.js +88 -0
  12. package/pubmodules/activities/routes/activity.js +710 -0
  13. package/pubmodules/activities/test/activityRoute.js +85 -0
  14. package/pubmodules/analytics/analytics.js +1719 -0
  15. package/pubmodules/analytics/index.js +3 -0
  16. package/pubmodules/canned/cannedResponse.js +51 -0
  17. package/pubmodules/canned/cannedResponseRoute.js +157 -0
  18. package/pubmodules/canned/index.js +3 -0
  19. package/pubmodules/pubModulesManager.js +104 -5
  20. package/pubmodules/trigger/default.js +271 -0
  21. package/pubmodules/trigger/event/actionEventEmitter.js +10 -0
  22. package/pubmodules/trigger/event/flowEventEmitter.js +10 -0
  23. package/pubmodules/trigger/event/triggerEventEmitter.js +10 -0
  24. package/pubmodules/trigger/index.js +3 -0
  25. package/pubmodules/trigger/models/trigger.js +149 -0
  26. package/pubmodules/trigger/rulesTrigger.js +1180 -0
  27. package/pubmodules/trigger/start.js +114 -0
  28. package/pubmodules/trigger/triggerRoute.js +150 -0
  29. package/routes/department.js +51 -0
  30. package/routes/group.js +140 -0
  31. package/routes/project.js +52 -0
  32. package/routes/subscription.js +140 -0
  33. package/routes/tag.js +138 -0
  34. package/services/faqService.js +1 -1
  35. package/services/modulesManager.js +7 -188
  36. package/services/subscriptionNotifier.js +485 -0
  37. package/template/email/assignedEmailMessage.html +1 -1
  38. package/template/email/assignedRequest.html +1 -1
  39. package/template/email/newMessage.html +1 -1
  40. package/template/email/passwordChanged.html +1 -1
  41. package/template/email/pooledEmailMessage.html +1 -1
  42. package/template/email/pooledRequest.html +1 -1
  43. package/template/email/resetPassword.html +2 -2
  44. package/template/email/ticket.html +1 -1
  45. package/views/messages.jade +1 -1
@@ -0,0 +1,3 @@
1
+ const analyticsRoute = require("./analytics");
2
+
3
+ module.exports = {analyticsRoute:analyticsRoute};
@@ -0,0 +1,51 @@
1
+ var mongoose = require('mongoose');
2
+ var Schema = mongoose.Schema;
3
+ var winston = require('../../config/winston');
4
+
5
+
6
+ var CannedResponseSchema = new Schema({
7
+
8
+ title: {
9
+ type: String,
10
+ required: false,
11
+ index: true
12
+ },
13
+ text: {
14
+ type: String,
15
+ required: true,
16
+ },
17
+ attributes: {
18
+ type: Object,
19
+ },
20
+ id_project: {
21
+ type: String,
22
+ required: true,
23
+ index: true
24
+ },
25
+ createdBy: {
26
+ type: String,
27
+ required: true
28
+ },
29
+ status: {
30
+ type: Number,
31
+ required: false,
32
+ default: 100,
33
+ index: true
34
+ },
35
+ },{
36
+ timestamps: true
37
+ }
38
+ );
39
+
40
+
41
+ // CannedResponseSchema.index({text: 'text'},
42
+ // {"name":"cannedresponse_fulltext","default_language": "italian","language_override": "dummy"}); // schema level
43
+
44
+ var CannedResponse = mongoose.model('cannedResponse', CannedResponseSchema);
45
+
46
+ if (process.env.MONGOOSE_SYNCINDEX) {
47
+ CannedResponse.syncIndexes();
48
+ winston.info("CannedResponse syncIndexes")
49
+ }
50
+
51
+ module.exports = CannedResponse;
@@ -0,0 +1,157 @@
1
+ var express = require('express');
2
+ var router = express.Router();
3
+ var CannedResponse = require("./cannedResponse");
4
+ var winston = require('../../config/winston');
5
+ // const CannedResponseEvent = require('../event/CannedResponseEvent');
6
+
7
+
8
+ router.post('/', function (req, res) {
9
+
10
+ winston.debug(req.body);
11
+ winston.debug("req.user", req.user);
12
+
13
+ var newCannedResponse = new CannedResponse({
14
+ title: req.body.title,
15
+ text: req.body.text,
16
+ id_project: req.projectid,
17
+ createdBy: req.user.id,
18
+ updatedBy: req.user.id
19
+ });
20
+
21
+ newCannedResponse.save(function (err, savedCannedResponse) {
22
+ if (err) {
23
+ winston.error('--- > ERROR ', err)
24
+
25
+ return res.status(500).send({ success: false, msg: 'Error saving object.' });
26
+ }
27
+
28
+ res.json(savedCannedResponse);
29
+ });
30
+ });
31
+
32
+ router.put('/:cannedResponseid', function (req, res) {
33
+ winston.debug(req.body);
34
+ var update = {};
35
+
36
+ if (req.body.title!=undefined) {
37
+ update.title = req.body.title;
38
+ }
39
+ if (req.body.text!=undefined) {
40
+ update.text = req.body.text;
41
+ }
42
+ if (req.body.attributes!=undefined) {
43
+ update.attributes = req.body.attributes;
44
+ }
45
+
46
+
47
+ CannedResponse.findByIdAndUpdate(req.params.cannedResponseid, update, { new: true, upsert: true }, function (err, updatedCannedResponse) {
48
+ if (err) {
49
+ winston.error('--- > ERROR ', err);
50
+ return res.status(500).send({ success: false, msg: 'Error updating object.' });
51
+ }
52
+
53
+
54
+
55
+ // CannedResponseEvent.emit('CannedResponse.update', updatedCannedResponse);
56
+ res.json(updatedCannedResponse);
57
+ });
58
+ });
59
+
60
+ router.delete('/:cannedResponseid', function (req, res) {
61
+ winston.debug(req.body);
62
+
63
+ CannedResponse.findByIdAndUpdate(req.params.cannedResponseid, {status: 1000}, { new: true, upsert: true }, function (err, updatedCannedResponse) {
64
+ if (err) {
65
+ winston.error('--- > ERROR ', err);
66
+ return res.status(500).send({ success: false, msg: 'Error updating object.' });
67
+ }
68
+
69
+
70
+
71
+ // CannedResponseEvent.emit('CannedResponse.delete', updatedCannedResponse);
72
+ res.json(updatedCannedResponse);
73
+ });
74
+ });
75
+
76
+ router.delete('/:cannedResponseid/physical', function (req, res) {
77
+ winston.debug(req.body);
78
+
79
+ CannedResponse.remove({ _id: req.params.cannedResponseid }, function (err, cannedResponse) {
80
+ if (err) {
81
+ winston.error('--- > ERROR ', err);
82
+ return res.status(500).send({ success: false, msg: 'Error deleting object.' });
83
+ }
84
+
85
+
86
+ // CannedResponseEvent.emit('CannedResponse.delete', CannedResponse);
87
+
88
+ res.json(cannedResponse);
89
+ });
90
+ });
91
+
92
+ router.get('/:cannedResponseid', function (req, res) {
93
+ winston.debug(req.body);
94
+
95
+ CannedResponse.findById(req.params.cannedResponseid, function (err, cannedResponse) {
96
+ if (err) {
97
+ return res.status(500).send({ success: false, msg: 'Error getting object.' });
98
+ }
99
+ if (!cannedResponse) {
100
+ return res.status(404).send({ success: false, msg: 'Object not found.' });
101
+ }
102
+ res.json(cannedResponse);
103
+ });
104
+ });
105
+
106
+ router.get('/', function (req, res) {
107
+ var limit = 40; // Number of CannedResponses per page
108
+ var page = 0;
109
+
110
+ if (req.query.page) {
111
+ page = req.query.page;
112
+ }
113
+
114
+ var skip = page * limit;
115
+ winston.debug('CannedResponse ROUTE - SKIP PAGE ', skip);
116
+
117
+
118
+ var query = { "id_project": req.projectid, "status": {$lt:1000}};
119
+
120
+ if (req.query.full_text) {
121
+ winston.debug('CannedResponse ROUTE req.query.fulltext', req.query.full_text);
122
+ query.$text = { "$search": req.query.full_text };
123
+ }
124
+
125
+
126
+ var direction = -1; //-1 descending , 1 ascending
127
+ if (req.query.direction) {
128
+ direction = req.query.direction;
129
+ }
130
+
131
+ var sortField = "createdAt";
132
+ if (req.query.sort) {
133
+ sortField = req.query.sort;
134
+ }
135
+
136
+ var sortQuery = {};
137
+ sortQuery[sortField] = direction;
138
+
139
+ winston.debug("sort query", sortQuery);
140
+
141
+ return CannedResponse.find(query).
142
+ skip(skip).limit(limit).
143
+ sort(sortQuery).
144
+ exec(function (err, cannedResponses) {
145
+ if (err) {
146
+ winston.error('CannedResponse ROUTE - REQUEST FIND ERR ', err)
147
+ return (err);
148
+ }
149
+
150
+ return res.json(cannedResponses);
151
+ });
152
+ });
153
+
154
+
155
+
156
+
157
+ module.exports = router;
@@ -0,0 +1,3 @@
1
+ const cannedResponseRoute = require("./cannedResponseRoute");
2
+
3
+ module.exports = {cannedResponseRoute: cannedResponseRoute};
@@ -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
 
@@ -21,6 +20,17 @@ class PubModulesManager {
21
20
 
22
21
  this.rasa = undefined;
23
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
+
24
34
  }
25
35
 
26
36
 
@@ -45,6 +55,27 @@ class PubModulesManager {
45
55
  winston.info("ModulesManager eventsRoute controller loaded");
46
56
  }
47
57
 
58
+
59
+ if (this.activityRoute) {
60
+ app.use('/:projectid/activities', [passport.authenticate(['basic', 'jwt'], { session: false }), validtoken, roleChecker.hasRole('admin')], this.activityRoute);
61
+ winston.info("ModulesManager activities controller loaded");
62
+ }
63
+
64
+ if (this.analyticsRoute) {
65
+ app.use('/:projectid/analytics', [passport.authenticate(['basic', 'jwt'], { session: false }), validtoken, roleChecker.hasRole('agent')], this.analyticsRoute);
66
+ winston.info("ModulesManager analytics controller loaded");
67
+ }
68
+
69
+ if (this.cannedResponseRoute) {
70
+ app.use('/:projectid/canned', [passport.authenticate(['basic', 'jwt'], { session: false }), validtoken, roleChecker.hasRole('agent')], this.cannedResponseRoute);
71
+ winston.info("ModulesManager canned controller loaded");
72
+ }
73
+
74
+ if (this.triggerRoute) {
75
+ app.use('/:projectid/modules/triggers', [passport.authenticate(['basic', 'jwt'], { session: false }), validtoken, roleChecker.hasRole('admin')], this.triggerRoute);
76
+ winston.info("ModulesManager trigger controller loaded");
77
+ }
78
+
48
79
  }
49
80
 
50
81
 
@@ -166,7 +197,65 @@ class PubModulesManager {
166
197
 
167
198
 
168
199
 
200
+
201
+ try {
202
+ this.activityArchiver = require('./activities').activityArchiver;
203
+ // this.activityArchiver.listen();
204
+ winston.debug("this.activityArchiver:"+ this.activityArchiver);
205
+
206
+ this.activityRoute = require('./activities').activityRoute;
207
+ winston.debug("this.activityRoute:"+ this.activityRoute);
208
+
209
+ winston.info("ModulesManager activities initialized");
210
+ } catch(err) {
211
+ if (err.code == 'MODULE_NOT_FOUND') {
212
+ winston.info("ModulesManager init activities module not found");
213
+ }else {
214
+ winston.error("ModulesManager error initializing init activities module", err);
215
+ }
216
+ }
217
+
218
+
219
+ try {
220
+ this.analyticsRoute = require('./analytics').analyticsRoute;
221
+ winston.debug("this.analyticsRoute:"+ this.analyticsRoute);
222
+ winston.info("ModulesManager analyticsRoute initialized");
223
+ } catch(err) {
224
+ if (err.code == 'MODULE_NOT_FOUND') {
225
+ winston.info("ModulesManager init analytics module not found");
226
+ }else {
227
+ winston.error("ModulesManager error initializing init analytics module", err);
228
+ }
229
+ }
230
+
231
+
232
+
233
+ try {
234
+ this.cannedResponseRoute = require('./canned').cannedResponseRoute;
235
+ winston.debug("this.cannedResponseRoute:"+ this.cannedResponseRoute);
236
+ winston.info("ModulesManager cannedResponseRoute initialized");
237
+ } catch(err) {
238
+ if (err.code == 'MODULE_NOT_FOUND') {
239
+ winston.info("ModulesManager init canned module not found");
240
+ }else {
241
+ winston.error("ModulesManager error initializing init canned module", err);
242
+ }
243
+ }
244
+
169
245
 
246
+ try {
247
+ this.trigger = require('./trigger').start;
248
+ winston.debug("this.trigger:"+ this.trigger);
249
+ this.triggerRoute = require('./trigger').triggerRoute;
250
+ winston.debug("this.triggerRoute:"+ this.triggerRoute);
251
+ winston.info("ModulesManager trigger initialized");
252
+ } catch(err) {
253
+ if (err.code == 'MODULE_NOT_FOUND') {
254
+ winston.info("ModulesManager init trigger module not found");
255
+ }else {
256
+ winston.error("ModulesManager error initializing init trigger module", err);
257
+ }
258
+ }
170
259
 
171
260
  }
172
261
 
@@ -221,6 +310,16 @@ class PubModulesManager {
221
310
  }
222
311
 
223
312
 
313
+ if (this.activityArchiver) {
314
+ try {
315
+ this.activityArchiver.listen();
316
+ winston.info("ModulesManager activityArchiver started");
317
+ } catch(err) {
318
+ winston.info("ModulesManager error starting activityArchiver module", err);
319
+ }
320
+ }
321
+
322
+
224
323
  }
225
324
 
226
325
 
@@ -0,0 +1,271 @@
1
+ var Trigger = require('./models/trigger');
2
+
3
+
4
+ var defTrigger = {};
5
+ var defTriggerObj = {};
6
+
7
+
8
+
9
+ var tNewConversationObj = {
10
+ name: 'New Conversation',
11
+ description: 'Create a temporary chat when new conversation button is pressed.',
12
+ trigger: {key:'event.emit',name:'Event emit event', description: 'Standard event emit event'},
13
+ conditions:{ all: [{key:'event.name',fact: 'json',path: 'name', operator:'equal', value: 'new_conversation'}]},
14
+ actions: [{key:'request.create', parameters: {departmentid: 'default', text:"welcome:tdk_req_status_hidden"}}],
15
+ enabled: true,
16
+ code: 's_new_conversation_01',
17
+ type: 'internal',
18
+ version: 1,
19
+ createdBy: 'system',
20
+ updatedBy: 'system'
21
+ };
22
+
23
+ var tNewConversation = new Trigger(tNewConversationObj);
24
+
25
+ defTrigger['s_new_conversation_01'] = tNewConversation;
26
+ defTriggerObj['s_new_conversation_01'] = tNewConversationObj;
27
+
28
+
29
+
30
+
31
+
32
+ var tWelcomeOnlineObj =
33
+ {
34
+ name: 'Online Welcome Greeting',
35
+ description: 'Send a welcome message if there are online agents to the visitor that create a chat.',
36
+ trigger: {key:'request.create',name:'Request create event', description: 'Standard request create event'},
37
+ conditions:{ all: [
38
+ {key:'request.departmentHasBot',fact: 'json',path: 'department.hasBot', operator:'equal', value: false},
39
+ {key:'request.snapshot.availableAgentsCount',fact: 'json',path: 'snapshot.availableAgentsCount', operator:'greaterThan', value: 0},
40
+ {key:'request.isOpen',fact: 'json',path: 'isOpen', operator:'equal', value: true},
41
+ {key:'request.first_text',fact: 'json',path: 'first_text', operator:'equal', value: 'welcome'},
42
+ {key:'request.statusRequestStatus',fact: 'json',path: 'status', operator:'equal', value: 50}
43
+ ]},
44
+ actions: [{key:'message.send', parameters: {text:"${LABEL_FIRST_MSG}"}}],
45
+ enabled:true,
46
+ code: 's_online_welcome_01',
47
+ type: 'internal',
48
+ version: 3,
49
+ createdBy: 'system',
50
+ updatedBy: 'system'
51
+ }
52
+
53
+ var tWelcomeOnline = new Trigger(tWelcomeOnlineObj);
54
+
55
+ defTrigger['s_online_welcome_01'] = tWelcomeOnline;
56
+ defTriggerObj['s_online_welcome_01'] = tWelcomeOnlineObj
57
+
58
+
59
+
60
+
61
+ var tWelcomeOfflineObj = {
62
+ name: 'Offline Welcome Greeting',
63
+ description: 'Send a welcome message if there aren\'t online agents to the visitor that create a chat.',
64
+ trigger: {key:'request.create',name:'Request create event', description: 'Standard request create event'},
65
+ conditions:{ all: [
66
+ {key:'request.departmentHasBot',fact: 'json',path: 'department.hasBot', operator:'equal', value: false},
67
+ {key:'request.snapshot.availableAgentsCount',fact: 'json',path: 'snapshot.availableAgentsCount', operator:'equal', value: 0},
68
+ {key:'request.statusRequestStatus',fact: 'json',path: 'status', operator:'equal', value: 50},
69
+ {key:'request.isOpen',fact: 'json',path: 'isOpen', operator:'equal', value: true},
70
+ {key:'request.first_text',fact: 'json',path: 'first_text', operator:'equal', value: 'welcome'}
71
+ ]},
72
+ actions: [{key:'message.send', parameters: {text:"${LABEL_FIRST_MSG_NO_AGENTS}"}}],
73
+ enabled:true,
74
+ code: 's_offline_welcome_01',
75
+ type: 'internal',
76
+ version: 3,
77
+ createdBy: 'system',
78
+ updatedBy: 'system'
79
+ }
80
+ var tWelcomeOffline = new Trigger(tWelcomeOfflineObj);
81
+
82
+ defTrigger['s_offline_welcome_01'] = tWelcomeOffline;
83
+ defTriggerObj['s_offline_welcome_01'] = tWelcomeOfflineObj;
84
+
85
+
86
+
87
+ var tWelcomeClosedOperatingHoursObj = {
88
+ name: 'Office Closed Notice',
89
+ description: 'Send an office closed message if a visitor asks for support outside of the operating hours.',
90
+ trigger: {key:'request.create',name:'Request create event', description: 'Standard request create event'},
91
+ conditions:{ all: [
92
+ {key:'request.departmentHasBot',fact: 'json',path: 'department.hasBot', operator:'equal', value: false},
93
+ {key:'request.statusRequestStatus',fact: 'json',path: 'status', operator:'equal', value: 50},
94
+ {key:'request.isOpen',fact: 'json',path: 'isOpen', operator:'equal', value: false},
95
+ {key:'request.first_text',fact: 'json',path: 'first_text', operator:'equal', value: 'welcome'}
96
+ ]},
97
+ actions: [{key:'message.send', parameters: {text:"${LABEL_FIRST_MSG_OPERATING_HOURS_CLOSED}"}}],
98
+ enabled:true,
99
+ code: 's_closed_operating_hours_01',
100
+ type: 'internal',
101
+ version: 2,
102
+ createdBy: 'system',
103
+ updatedBy: 'system'
104
+ }
105
+ var tWelcomeClosedOperatingHours = new Trigger(tWelcomeClosedOperatingHoursObj);
106
+
107
+ defTrigger['s_closed_operating_hours_01'] = tWelcomeClosedOperatingHours;
108
+ defTriggerObj['s_closed_operating_hours_01'] = tWelcomeClosedOperatingHoursObj;
109
+
110
+
111
+
112
+
113
+
114
+
115
+ var tInviteBotObj = {
116
+ name: 'Invite Bot',
117
+ description: 'Invite if available the department bot to the temporary chat and start it.',
118
+ trigger: {key:'request.create',name:'Request create event', description: 'Standard request create event'},
119
+ conditions:{ all: [
120
+ {key:'request.statusRequestStatus',fact: 'json',path: 'status', operator:'equal', value: 50},
121
+ {key:'request.departmentHasBot',fact: 'json',path: 'department.hasBot', operator:'equal', value: true},
122
+ {key:'request.first_text',fact: 'json',path: 'first_text', operator:'equal', value: 'welcome'}
123
+ ]},
124
+ actions: [{key:'request.department.bot.launch'}],
125
+ enabled:true,
126
+ code: 's_invite_bot_01',
127
+ type: 'internal',
128
+ version: 2,
129
+ createdBy: 'system',
130
+ updatedBy: 'system'
131
+ }
132
+
133
+ var tInviteBot = new Trigger(tInviteBotObj);
134
+
135
+ defTrigger['s_invite_bot_01'] = tInviteBot;
136
+ defTriggerObj['s_invite_bot_01'] = tInviteBotObj;
137
+
138
+
139
+
140
+
141
+
142
+ var tCheckoutPageObj = {
143
+ name: 'Checkout Page',
144
+ description: 'Reduce cart abandonment by engaging customer that are on the checkout page.',
145
+ trigger: {key:'request.create',name:'Request create event', description: 'Standard request create event'},
146
+ conditions:{ all: [
147
+ {key:"request.sourcePageUrl", fact:"json", path:"sourcePage", operator:"in", value:"/checkout.html"},
148
+ {key:'request.departmentHasBot',fact: 'json',path: 'department.hasBot', operator:'equal', value: false},
149
+ {key:'request.statusRequestStatus',fact: 'json',path: 'status', operator:'equal', value: 50}
150
+ ]},
151
+ actions: [{key:'message.send', parameters: {text:"Hey, do you need help to complete the checkout?"}}],
152
+ enabled:false,
153
+ code: 's_checkout_page_01',
154
+ version: 1,
155
+ createdBy: 'system',
156
+ updatedBy: 'system'
157
+ }
158
+
159
+ var tCheckoutPage = new Trigger(tCheckoutPageObj);
160
+
161
+ defTrigger['s_checkout_page_01'] = tCheckoutPage;
162
+ defTriggerObj['s_checkout_page_01'] = tCheckoutPageObj;
163
+
164
+
165
+ var tAuthStateChangeProactiveGreetingObj = {
166
+ name: 'New visitor login',
167
+ description: 'Create a temporary chat when a new visitor signin.',
168
+ trigger: {key:'event.emit',name:'Event emit event', description: 'Standard event emit event'},
169
+ conditions:{ all: [
170
+ {key:'event.name',fact: 'json',path: 'name', operator:'equal', value: 'auth_state_changed'},
171
+ {key: 'event.attributes.code', fact: 'json', path: 'attributes.event', operator:'equal', value : 201}
172
+ ]},
173
+
174
+ actions: [{key:'request.create', parameters: {departmentid: 'default', text:"callout:tdk_req_status_hidden"}}],
175
+ enabled: true,
176
+ code: 's_new_login_01',
177
+ type: 'internal',
178
+ version: 1,
179
+ createdBy: 'system',
180
+ updatedBy: 'system'
181
+ };
182
+
183
+ var tAuthStateChangeProactiveGreeting = new Trigger(tAuthStateChangeProactiveGreetingObj);
184
+
185
+ defTrigger['s_new_login_01'] = tAuthStateChangeProactiveGreeting;
186
+ defTriggerObj['s_new_login_01'] = tAuthStateChangeProactiveGreetingObj;
187
+
188
+
189
+
190
+ var tInviteProactiveGreetingBotObj = {
191
+ name: 'Invite Proactive Greeting Bot',
192
+ description: 'Invite if available the department bot to proactively greet the temporary chat and start it.',
193
+ trigger: {key:'request.create',name:'Request create event', description: 'Standard request create event'},
194
+ conditions:{ all: [
195
+ {key:'request.statusRequestStatus',fact: 'json',path: 'status', operator:'equal', value: 50},
196
+ {key:'request.departmentHasBot',fact: 'json',path: 'department.hasBot', operator:'equal', value: true},
197
+ {key:'request.first_text',fact: 'json',path: 'first_text', operator:'equal', value: 'callout'}
198
+ ]},
199
+ actions: [{key:'request.department.bot.launch'}],
200
+ enabled:true,
201
+ code: 's_invite_proactive_greeting_bot_01',
202
+ type: 'internal',
203
+ version: 2,
204
+ createdBy: 'system',
205
+ updatedBy: 'system'
206
+ }
207
+
208
+ var tInviteProactiveGreetingBot = new Trigger(tInviteProactiveGreetingBotObj);
209
+
210
+ defTrigger['s_invite_proactive_greeting_bot_01'] = tInviteProactiveGreetingBot;
211
+ defTriggerObj['s_invite_proactive_greeting_bot_01'] = tInviteProactiveGreetingBotObj;
212
+
213
+
214
+
215
+
216
+
217
+ var tProactiveGreetingMessageObj =
218
+ {
219
+ name: 'Proactive Greeting',
220
+ description: 'Send a proactive message when a new user signin.',
221
+ trigger: {key:'request.create',name:'Request create event', description: 'Standard request create event'},
222
+ conditions:{ all: [
223
+ {key:'request.departmentHasBot',fact: 'json',path: 'department.hasBot', operator:'equal', value: false},
224
+ {key:'request.first_text',fact: 'json',path: 'first_text', operator:'equal', value: 'callout'},
225
+ {key:'request.statusRequestStatus',fact: 'json',path: 'status', operator:'equal', value: 50}
226
+ ]},
227
+ actions: [{key:'message.send', parameters: {text:"${WELLCOME_MSG}"}}],
228
+ enabled:true,
229
+ code: 's_proactivegreeting_message_01',
230
+ type: 'internal',
231
+ version: 1,
232
+ createdBy: 'system',
233
+ updatedBy: 'system'
234
+ }
235
+
236
+ var tProactiveGreetingMessage = new Trigger(tProactiveGreetingMessageObj);
237
+
238
+ defTrigger['s_proactivegreeting_message_01'] = tProactiveGreetingMessage;
239
+ defTriggerObj['s_proactivegreeting_message_01'] = tProactiveGreetingMessageObj
240
+
241
+
242
+
243
+
244
+
245
+
246
+
247
+ var tTicketingTakingObj =
248
+ {
249
+ name: 'Ticketing Taking',
250
+ description: 'Send a taking message when a new ticket is created.',
251
+ trigger: {key:'request.create',name:'Request create event', description: 'Standard request create event'},
252
+ conditions:{ all: [
253
+ {key:'request.channel.name',fact: 'json',path: 'channel.name', operator:'equal', value: 'email'},
254
+ {key:'request.departmentHasBot',fact: 'json',path: 'department.hasBot', operator:'equal', value: false}
255
+ ]},
256
+ actions: [{key:'message.send', parameters: {text:"${TICKET_TAKING}"}}],
257
+ enabled:true,
258
+ code: 's_ticketing_taking_01',
259
+ type: 'internal',
260
+ version: 1,
261
+ createdBy: 'system',
262
+ updatedBy: 'system'
263
+ }
264
+
265
+ var tTicketingTaking = new Trigger(tTicketingTakingObj);
266
+
267
+ defTrigger['s_ticketing_taking_01'] = tTicketingTaking;
268
+ defTriggerObj['s_ticketing_taking_01'] = tTicketingTakingObj
269
+
270
+
271
+ module.exports = {defTrigger:defTrigger, defTriggerObj: defTriggerObj};
@@ -0,0 +1,10 @@
1
+ const EventEmitter = require('events');
2
+
3
+ class ActionEventEmitter extends EventEmitter {}
4
+
5
+
6
+ const actionEventEmitter = new ActionEventEmitter();
7
+
8
+
9
+
10
+ module.exports = actionEventEmitter;
@@ -0,0 +1,10 @@
1
+ const EventEmitter = require('events');
2
+
3
+ class FlowEventEmitter extends EventEmitter {}
4
+
5
+
6
+ const flowEventEmitter = new FlowEventEmitter();
7
+
8
+
9
+
10
+ module.exports = flowEventEmitter;
@@ -0,0 +1,10 @@
1
+ const EventEmitter = require('events');
2
+
3
+ class TriggerEventEmitter extends EventEmitter {}
4
+
5
+
6
+ const triggerEventEmitter = new TriggerEventEmitter();
7
+
8
+
9
+
10
+ module.exports = triggerEventEmitter;
@@ -0,0 +1,3 @@
1
+ const start = require("./start");
2
+ const triggerRoute = require("./triggerRoute");
3
+ module.exports = {start:start,triggerRoute:triggerRoute};