@tiledesk/tiledesk-server 2.2.39 → 2.3.1
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.
- package/LICENSE +14 -657
- package/README.md +2 -0
- package/app.js +12 -0
- package/event/subscriptionEvent.js +11 -0
- package/models/subscriptionEvent.js +11 -0
- package/models/subscriptionLog.js +34 -0
- package/models/tagLibrary.js +42 -0
- package/package.json +2 -10
- package/pubmodules/activities/activityArchiver.js +295 -0
- package/pubmodules/activities/index.js +3 -0
- package/pubmodules/activities/models/activity.js +88 -0
- package/pubmodules/activities/routes/activity.js +710 -0
- package/pubmodules/activities/test/activityRoute.js +85 -0
- package/pubmodules/analytics/analytics.js +1719 -0
- package/pubmodules/analytics/index.js +3 -0
- package/pubmodules/canned/cannedResponse.js +51 -0
- package/pubmodules/canned/cannedResponseRoute.js +157 -0
- package/pubmodules/canned/index.js +3 -0
- package/pubmodules/pubModulesManager.js +104 -5
- package/pubmodules/trigger/default.js +271 -0
- package/pubmodules/trigger/event/actionEventEmitter.js +10 -0
- package/pubmodules/trigger/event/flowEventEmitter.js +10 -0
- package/pubmodules/trigger/event/triggerEventEmitter.js +10 -0
- package/pubmodules/trigger/index.js +3 -0
- package/pubmodules/trigger/models/trigger.js +149 -0
- package/pubmodules/trigger/rulesTrigger.js +1180 -0
- package/pubmodules/trigger/start.js +114 -0
- package/pubmodules/trigger/triggerRoute.js +150 -0
- package/routes/department.js +51 -0
- package/routes/group.js +140 -0
- package/routes/project.js +52 -0
- package/routes/subscription.js +140 -0
- package/routes/tag.js +138 -0
- package/services/faqService.js +1 -1
- package/services/modulesManager.js +7 -188
- package/services/subscriptionNotifier.js +485 -0
- package/template/email/assignedEmailMessage.html +1 -1
- package/template/email/assignedRequest.html +1 -1
- package/template/email/newMessage.html +1 -1
- package/template/email/passwordChanged.html +1 -1
- package/template/email/pooledEmailMessage.html +1 -1
- package/template/email/pooledRequest.html +1 -1
- package/template/email/resetPassword.html +2 -2
- package/template/email/ticket.html +1 -1
- package/views/messages.jade +1 -1
|
@@ -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;
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
|
|
2
2
|
var winston = require('../config/winston');
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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};
|