@tiledesk/tiledesk-server 2.2.37 → 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/CHANGELOG.md +8 -1
- package/LICENSE +14 -657
- package/README.md +21 -18
- package/app.js +27 -3
- package/config/labels/widget.json +320 -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 +5 -11
- 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 +115 -7
- package/pubmodules/rasa/index.js +8 -1
- package/pubmodules/rasa/listener.js +28 -7
- package/pubmodules/scheduler/tasks/closeBotUnresponsiveRequestTask.js +2 -2
- 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/request.js +3 -2
- package/routes/subscription.js +140 -0
- package/routes/tag.js +138 -0
- package/services/faqBotHandler.js +2 -2
- package/services/faqBotSupport.js +0 -1
- package/services/faqService.js +1 -1
- package/services/modulesManager.js +16 -182
- 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,1180 @@
|
|
1
|
+
const requestEvent = require('../../event/requestEvent');
|
2
|
+
const messageEvent = require('../../event/messageEvent');
|
3
|
+
const triggerEventEmitter = require('./event/triggerEventEmitter');
|
4
|
+
// const event2Event = require('../../../pubmodules/events/event2Event');
|
5
|
+
const eventEvent = require('../../pubmodules/events/eventEvent');
|
6
|
+
|
7
|
+
var Trigger = require('./models/trigger');
|
8
|
+
var winston = require('../../config/winston');
|
9
|
+
|
10
|
+
var Engine = require('@tiledesk/tiledesk-json-rules-engine').Engine;
|
11
|
+
|
12
|
+
|
13
|
+
|
14
|
+
var messageService = require('../../services/messageService');
|
15
|
+
var requestService = require('../../services/requestService');
|
16
|
+
var MessageConstants = require("../../models/messageConstants");
|
17
|
+
var leadService = require('../../services/leadService');
|
18
|
+
var LeadConstants = require('../../models/leadConstants');
|
19
|
+
var operatingHoursService = require("../../services/operatingHoursService");
|
20
|
+
var sendMessageUtil = require("../../utils/sendMessageUtil");
|
21
|
+
var cacheUtil = require("../../utils/cacheUtil");
|
22
|
+
|
23
|
+
|
24
|
+
|
25
|
+
const uuidv4 = require('uuid/v4');
|
26
|
+
|
27
|
+
|
28
|
+
class RulesTrigger {
|
29
|
+
|
30
|
+
constructor() {
|
31
|
+
// this.engine = new Engine();;
|
32
|
+
// this.engine = undefined;
|
33
|
+
this.engines = {};
|
34
|
+
}
|
35
|
+
|
36
|
+
// getEngine() {
|
37
|
+
// return this.engine;
|
38
|
+
// }
|
39
|
+
|
40
|
+
listen(success, error) {
|
41
|
+
var that = this;
|
42
|
+
|
43
|
+
var enabled = process.env.TRIGGER_ENABLED || "true";
|
44
|
+
winston.debug('Trigger enabled:'+enabled);
|
45
|
+
|
46
|
+
if (enabled==="true") {
|
47
|
+
winston.debug('Trigger enabled');
|
48
|
+
}else {
|
49
|
+
winston.info('Trigger disabled');
|
50
|
+
return 0;
|
51
|
+
}
|
52
|
+
|
53
|
+
|
54
|
+
setImmediate(() => {
|
55
|
+
|
56
|
+
requestEvent.on('request.support_group.created', function(request) {
|
57
|
+
// requestEvent.on('request.create', function(request) {
|
58
|
+
var requestJson = request.toJSON();
|
59
|
+
operatingHoursService.projectIsOpenNow(request.id_project, function (isOpen, err) {
|
60
|
+
requestJson.isOpen = isOpen;
|
61
|
+
winston.debug('requestJson: ', requestJson);
|
62
|
+
that.exec(requestJson, 'request.create', success, error);
|
63
|
+
});
|
64
|
+
});
|
65
|
+
|
66
|
+
requestEvent.on('request.participants.join', function(data) {
|
67
|
+
let request = data.request;
|
68
|
+
let member = data.member;
|
69
|
+
var requestJson = request.toJSON();
|
70
|
+
operatingHoursService.projectIsOpenNow(request.id_project, function (isOpen, err) {
|
71
|
+
requestJson.isOpen = isOpen;
|
72
|
+
winston.debug('requestJson: ', requestJson);
|
73
|
+
that.exec(requestJson, 'request.participants.join', success, error);
|
74
|
+
});
|
75
|
+
});
|
76
|
+
|
77
|
+
messageEvent.on('message.create.from.requester', function(message) {
|
78
|
+
winston.debug('message.create.from.requester', message);
|
79
|
+
// aggiungi is open anche a message.create altrimenti isOpen nn va
|
80
|
+
// operatingHoursService.projectIsOpenNow(request.id_project, function (isOpen, err) {
|
81
|
+
that.exec(message, 'message.create.from.requester', success, error);
|
82
|
+
});
|
83
|
+
// not in use
|
84
|
+
// messageEvent.on('message.received', function(request) {
|
85
|
+
// that.exec(request, 'message.received', success, error);
|
86
|
+
// });
|
87
|
+
|
88
|
+
// event2Event.on('*', function(event){
|
89
|
+
// winston.verbose('event2Event this.event: ' + this.event);
|
90
|
+
// that.exec(event, this.event, success,error);
|
91
|
+
// });
|
92
|
+
|
93
|
+
eventEvent.on('event.emit', function(event) {
|
94
|
+
winston.debug('eventEvent event.emit', event);
|
95
|
+
that.exec(event, 'event.emit', success,error);
|
96
|
+
});
|
97
|
+
|
98
|
+
|
99
|
+
|
100
|
+
this.runAction();
|
101
|
+
|
102
|
+
winston.info('Trigger rules started');
|
103
|
+
|
104
|
+
});
|
105
|
+
|
106
|
+
}
|
107
|
+
|
108
|
+
runAction() {
|
109
|
+
|
110
|
+
triggerEventEmitter.on('message.send', function(eventTrigger) {
|
111
|
+
|
112
|
+
try {
|
113
|
+
|
114
|
+
winston.debug('runAction eventTrigger.eventSuccess:', eventTrigger.eventSuccess);
|
115
|
+
var trigger = eventTrigger.trigger;
|
116
|
+
winston.debug('runAction trigger', trigger.toObject());
|
117
|
+
|
118
|
+
|
119
|
+
var action = eventTrigger.action;
|
120
|
+
winston.debug('runAction action', action.toObject());
|
121
|
+
|
122
|
+
var fullname = action.parameters.fullName || "BOT";
|
123
|
+
winston.debug('runAction action fullname: ' + fullname);
|
124
|
+
|
125
|
+
var sender = "system";
|
126
|
+
|
127
|
+
if (action.parameters.sender) {
|
128
|
+
sender = action.parameters.sender;
|
129
|
+
}
|
130
|
+
winston.debug('runAction action sender: ' + sender);
|
131
|
+
|
132
|
+
var text = action.parameters.text;
|
133
|
+
winston.debug('runAction action text: ' + text);
|
134
|
+
|
135
|
+
var attributes = {templateProcessor: true};
|
136
|
+
|
137
|
+
// var attributes = action.parameters.attributes;
|
138
|
+
// winston.debug('runAction action attributes: ' + attributes);
|
139
|
+
|
140
|
+
if (text && text.endsWith(":tdk_msg_subtype_info")) {
|
141
|
+
attributes.subtype = "info";
|
142
|
+
text = text.replace(':tdk_msg_subtype_info', '');
|
143
|
+
winston.verbose('tdk_msg_subtype_info');
|
144
|
+
}
|
145
|
+
|
146
|
+
|
147
|
+
var recipient;
|
148
|
+
if (eventTrigger.eventKey=="request.create" || eventTrigger.eventKey=="request.participants.join") {
|
149
|
+
recipient = eventTrigger.event.request_id;
|
150
|
+
}
|
151
|
+
if (eventTrigger.eventKey=="message.create.from.requester" || eventTrigger.eventKey=="message.received") {
|
152
|
+
recipient = eventTrigger.event.recipient;
|
153
|
+
}
|
154
|
+
if (eventTrigger.eventKey=="event.emit") {
|
155
|
+
winston.debug('runAction action event.emit: ', eventTrigger.event.toObject());
|
156
|
+
|
157
|
+
//TODO funziona?
|
158
|
+
recipient = eventTrigger.event.project_user.id_user;
|
159
|
+
}
|
160
|
+
|
161
|
+
winston.debug('runAction action recipient: ' + recipient);
|
162
|
+
|
163
|
+
var id_project = eventTrigger.event.id_project;
|
164
|
+
winston.debug('runAction action id_project: ' + id_project);
|
165
|
+
|
166
|
+
// send(sender, senderFullname, recipient, text, id_project, createdBy, attributes) {
|
167
|
+
// messageService.send(
|
168
|
+
// sender,
|
169
|
+
// fullname,
|
170
|
+
// recipient,
|
171
|
+
// text,
|
172
|
+
// id_project,
|
173
|
+
// null,
|
174
|
+
// attributes
|
175
|
+
// );
|
176
|
+
|
177
|
+
// send(sender, senderFullname, recipient, text, id_project, createdBy, attributes, type, metadata, language) {
|
178
|
+
sendMessageUtil.send(
|
179
|
+
sender,
|
180
|
+
fullname,
|
181
|
+
recipient,
|
182
|
+
text,
|
183
|
+
id_project,
|
184
|
+
null,
|
185
|
+
attributes
|
186
|
+
);
|
187
|
+
|
188
|
+
} catch(e) {
|
189
|
+
winston.error("Error runAction", e);
|
190
|
+
}
|
191
|
+
|
192
|
+
});
|
193
|
+
|
194
|
+
|
195
|
+
|
196
|
+
|
197
|
+
|
198
|
+
triggerEventEmitter.on('request.department.route', function(eventTrigger) {
|
199
|
+
|
200
|
+
try {
|
201
|
+
|
202
|
+
winston.debug('runAction eventTrigger.eventSuccess:', eventTrigger.eventSuccess);
|
203
|
+
var trigger = eventTrigger.trigger;
|
204
|
+
winston.debug('runAction trigger', trigger.toObject());
|
205
|
+
|
206
|
+
|
207
|
+
var action = eventTrigger.action;
|
208
|
+
winston.debug('runAction action', action.toObject());
|
209
|
+
|
210
|
+
|
211
|
+
var departmentid = action.parameters.departmentid;
|
212
|
+
winston.debug('runAction action departmentid: ' + departmentid);
|
213
|
+
|
214
|
+
|
215
|
+
var request_id;
|
216
|
+
if (eventTrigger.eventKey=="request.create") {
|
217
|
+
request_id = eventTrigger.event.request_id;
|
218
|
+
}
|
219
|
+
if (eventTrigger.eventKey=="message.create.from.requester" || eventTrigger.eventKey=="message.received") {
|
220
|
+
request_id = eventTrigger.event.recipient;
|
221
|
+
}
|
222
|
+
|
223
|
+
winston.debug('runAction action request_id: ' + request_id);
|
224
|
+
|
225
|
+
var id_project = eventTrigger.event.id_project;
|
226
|
+
winston.debug('runAction action id_project: ' + id_project);
|
227
|
+
|
228
|
+
// route(request_id, departmentid, id_project, nobot) {
|
229
|
+
requestService.route(request_id, departmentid, id_project);
|
230
|
+
|
231
|
+
} catch(e) {
|
232
|
+
winston.error("Error runAction", e);
|
233
|
+
}
|
234
|
+
|
235
|
+
});
|
236
|
+
|
237
|
+
|
238
|
+
|
239
|
+
|
240
|
+
triggerEventEmitter.on('request.department.route.self', function(eventTrigger) {
|
241
|
+
|
242
|
+
try {
|
243
|
+
|
244
|
+
winston.debug('runAction eventTrigger.eventSuccess:', eventTrigger.eventSuccess);
|
245
|
+
var trigger = eventTrigger.trigger;
|
246
|
+
winston.debug('runAction trigger', trigger.toObject());
|
247
|
+
|
248
|
+
var action = eventTrigger.action;
|
249
|
+
winston.debug('runAction action', action.toObject());
|
250
|
+
|
251
|
+
var request_id;
|
252
|
+
if (eventTrigger.eventKey=="request.create") {
|
253
|
+
request_id = eventTrigger.event.request_id;
|
254
|
+
}
|
255
|
+
if (eventTrigger.eventKey=="message.create.from.requester" || eventTrigger.eventKey=="message.received") {
|
256
|
+
request_id = eventTrigger.event.recipient;
|
257
|
+
}
|
258
|
+
|
259
|
+
winston.debug('runAction action request_id: ' + request_id);
|
260
|
+
|
261
|
+
var id_project = eventTrigger.event.id_project;
|
262
|
+
winston.debug('runAction action id_project: ' + id_project);
|
263
|
+
|
264
|
+
// reroute(request_id, id_project, nobot) {
|
265
|
+
requestService.reroute(request_id, id_project);
|
266
|
+
|
267
|
+
} catch(e) {
|
268
|
+
winston.error("Error runAction", e);
|
269
|
+
}
|
270
|
+
|
271
|
+
});
|
272
|
+
|
273
|
+
|
274
|
+
|
275
|
+
|
276
|
+
|
277
|
+
triggerEventEmitter.on('request.status.update', function(eventTrigger) {
|
278
|
+
|
279
|
+
try {
|
280
|
+
|
281
|
+
winston.debug('runAction eventTrigger.eventSuccess:', eventTrigger.eventSuccess);
|
282
|
+
var trigger = eventTrigger.trigger;
|
283
|
+
winston.debug('runAction trigger', trigger.toObject());
|
284
|
+
|
285
|
+
var action = eventTrigger.action;
|
286
|
+
winston.debug('runAction action', action.toObject());
|
287
|
+
|
288
|
+
var newstatus = action.parameters.status;
|
289
|
+
winston.debug('runAction action newstatus: ' + newstatus);
|
290
|
+
|
291
|
+
|
292
|
+
var request_id;
|
293
|
+
if (eventTrigger.eventKey=="request.create") {
|
294
|
+
request_id = eventTrigger.event.request_id;
|
295
|
+
}
|
296
|
+
if (eventTrigger.eventKey=="message.create.from.requester" || eventTrigger.eventKey=="message.received") {
|
297
|
+
request_id = eventTrigger.event.recipient;
|
298
|
+
}
|
299
|
+
|
300
|
+
winston.debug('runAction action request_id: ' + request_id);
|
301
|
+
|
302
|
+
var id_project = eventTrigger.event.id_project;
|
303
|
+
winston.debug('runAction action id_project: ' + id_project);
|
304
|
+
|
305
|
+
// changeStatusByRequestId(request_id, id_project, newstatus) {
|
306
|
+
requestService.changeStatusByRequestId(request_id, id_project, newstatus);
|
307
|
+
|
308
|
+
} catch(e) {
|
309
|
+
winston.error("Error runAction", e);
|
310
|
+
}
|
311
|
+
|
312
|
+
});
|
313
|
+
|
314
|
+
|
315
|
+
|
316
|
+
|
317
|
+
|
318
|
+
|
319
|
+
triggerEventEmitter.on('request.close', function(eventTrigger) {
|
320
|
+
|
321
|
+
try {
|
322
|
+
|
323
|
+
winston.debug('runAction eventTrigger.eventSuccess:', eventTrigger.eventSuccess);
|
324
|
+
var trigger = eventTrigger.trigger;
|
325
|
+
winston.debug('runAction trigger', trigger.toObject());
|
326
|
+
|
327
|
+
var action = eventTrigger.action;
|
328
|
+
winston.debug('runAction action', action.toObject());
|
329
|
+
|
330
|
+
|
331
|
+
var request_id;
|
332
|
+
if (eventTrigger.eventKey=="request.create") {
|
333
|
+
request_id = eventTrigger.event.request_id;
|
334
|
+
}
|
335
|
+
if (eventTrigger.eventKey=="message.create.from.requester" || eventTrigger.eventKey=="message.received") {
|
336
|
+
request_id = eventTrigger.event.recipient;
|
337
|
+
}
|
338
|
+
|
339
|
+
winston.debug('runAction action request_id: ' + request_id);
|
340
|
+
|
341
|
+
var id_project = eventTrigger.event.id_project;
|
342
|
+
winston.debug('runAction action id_project: ' + id_project);
|
343
|
+
|
344
|
+
// closeRequestByRequestId(request_id, id_project) {
|
345
|
+
requestService.closeRequestByRequestId(request_id, id_project);
|
346
|
+
|
347
|
+
} catch(e) {
|
348
|
+
winston.error("Error runAction", e);
|
349
|
+
}
|
350
|
+
|
351
|
+
});
|
352
|
+
|
353
|
+
|
354
|
+
|
355
|
+
triggerEventEmitter.on('request.reopen', function(eventTrigger) {
|
356
|
+
|
357
|
+
try {
|
358
|
+
|
359
|
+
winston.debug('runAction eventTrigger.eventSuccess:', eventTrigger.eventSuccess);
|
360
|
+
var trigger = eventTrigger.trigger;
|
361
|
+
winston.debug('runAction trigger', trigger.toObject());
|
362
|
+
|
363
|
+
var action = eventTrigger.action;
|
364
|
+
winston.debug('runAction action', action.toObject());
|
365
|
+
|
366
|
+
|
367
|
+
var request_id;
|
368
|
+
if (eventTrigger.eventKey=="request.create") {
|
369
|
+
request_id = eventTrigger.event.request_id;
|
370
|
+
}
|
371
|
+
if (eventTrigger.eventKey=="message.create.from.requester" || eventTrigger.eventKey=="message.received") {
|
372
|
+
request_id = eventTrigger.event.recipient;
|
373
|
+
}
|
374
|
+
|
375
|
+
winston.debug('runAction action request_id: ' + request_id);
|
376
|
+
|
377
|
+
var id_project = eventTrigger.event.id_project;
|
378
|
+
winston.debug('runAction action id_project: ' + id_project);
|
379
|
+
|
380
|
+
// reopenRequestByRequestId(request_id, id_project) {
|
381
|
+
requestService.reopenRequestByRequestId(request_id, id_project);
|
382
|
+
|
383
|
+
} catch(e) {
|
384
|
+
winston.error("Error runAction", e);
|
385
|
+
}
|
386
|
+
|
387
|
+
});
|
388
|
+
|
389
|
+
|
390
|
+
|
391
|
+
triggerEventEmitter.on('request.participants.join', function(eventTrigger) {
|
392
|
+
|
393
|
+
try {
|
394
|
+
|
395
|
+
winston.debug('runAction eventTrigger.eventSuccess:', eventTrigger.eventSuccess);
|
396
|
+
var trigger = eventTrigger.trigger;
|
397
|
+
winston.debug('runAction trigger', trigger.toObject());
|
398
|
+
|
399
|
+
var action = eventTrigger.action;
|
400
|
+
winston.debug('runAction action', action.toObject());
|
401
|
+
|
402
|
+
// console.log("actionaction",action);
|
403
|
+
|
404
|
+
var member = action.parameters.member;
|
405
|
+
winston.debug('runAction action member: ' + member);
|
406
|
+
|
407
|
+
var request_id;
|
408
|
+
if (eventTrigger.eventKey=="request.create") {
|
409
|
+
request_id = eventTrigger.event.request_id;
|
410
|
+
}
|
411
|
+
if (eventTrigger.eventKey=="message.create.from.requester" || eventTrigger.eventKey=="message.received") {
|
412
|
+
request_id = eventTrigger.event.recipient;
|
413
|
+
}
|
414
|
+
|
415
|
+
winston.debug('runAction action request_id: ' + request_id);
|
416
|
+
|
417
|
+
var id_project = eventTrigger.event.id_project;
|
418
|
+
winston.debug('runAction action id_project: ' + id_project);
|
419
|
+
|
420
|
+
// addParticipantByRequestId(request_id, id_project, member) {
|
421
|
+
requestService.addParticipantByRequestId(request_id, id_project, member);
|
422
|
+
|
423
|
+
|
424
|
+
} catch(e) {
|
425
|
+
winston.error("Error runAction", e);
|
426
|
+
}
|
427
|
+
|
428
|
+
});
|
429
|
+
|
430
|
+
|
431
|
+
|
432
|
+
|
433
|
+
|
434
|
+
|
435
|
+
|
436
|
+
triggerEventEmitter.on('request.department.bot.launch', function(eventTrigger) {
|
437
|
+
|
438
|
+
try {
|
439
|
+
|
440
|
+
winston.debug('runAction eventTrigger.eventSuccess:', eventTrigger.eventSuccess);
|
441
|
+
var trigger = eventTrigger.trigger;
|
442
|
+
winston.debug('runAction trigger', trigger.toObject());
|
443
|
+
|
444
|
+
var action = eventTrigger.action;
|
445
|
+
winston.debug('runAction action', action.toObject());
|
446
|
+
|
447
|
+
var request_id;
|
448
|
+
if (eventTrigger.eventKey=="request.create") {
|
449
|
+
request_id = eventTrigger.event.request_id;
|
450
|
+
}
|
451
|
+
if (eventTrigger.eventKey=="message.create.from.requester" || eventTrigger.eventKey=="message.received") {
|
452
|
+
request_id = eventTrigger.event.recipient;
|
453
|
+
}
|
454
|
+
|
455
|
+
winston.debug('runAction action request_id: ' + request_id);
|
456
|
+
|
457
|
+
var id_project = eventTrigger.event.id_project;
|
458
|
+
winston.debug('runAction action id_project: ' + id_project);
|
459
|
+
|
460
|
+
// reroute(request_id, id_project, nobot) {
|
461
|
+
requestService.reroute(request_id, id_project).then(function(request) {
|
462
|
+
|
463
|
+
winston.verbose('request.department.bot.launch action reroute request_id: ' + request_id);
|
464
|
+
|
465
|
+
// rendi dinamico /start
|
466
|
+
messageService.send(
|
467
|
+
'system',
|
468
|
+
'Bot',
|
469
|
+
request_id,
|
470
|
+
'\\start',
|
471
|
+
id_project,
|
472
|
+
null,
|
473
|
+
{subtype:'info', updateconversation : false}
|
474
|
+
);
|
475
|
+
|
476
|
+
// TODO Add typing?
|
477
|
+
})
|
478
|
+
|
479
|
+
|
480
|
+
} catch(e) {
|
481
|
+
winston.error("Error runAction", e);
|
482
|
+
}
|
483
|
+
|
484
|
+
});
|
485
|
+
|
486
|
+
|
487
|
+
|
488
|
+
|
489
|
+
|
490
|
+
|
491
|
+
|
492
|
+
triggerEventEmitter.on('request.bot.launch', function(eventTrigger) {
|
493
|
+
|
494
|
+
try {
|
495
|
+
|
496
|
+
winston.debug('runAction eventTrigger.eventSuccess:', eventTrigger.eventSuccess);
|
497
|
+
var trigger = eventTrigger.trigger;
|
498
|
+
winston.debug('runAction trigger', trigger.toObject());
|
499
|
+
|
500
|
+
var action = eventTrigger.action;
|
501
|
+
winston.debug('runAction action', action.toObject());
|
502
|
+
|
503
|
+
var request_id;
|
504
|
+
if (eventTrigger.eventKey=="request.create") {
|
505
|
+
request_id = eventTrigger.event.request_id;
|
506
|
+
}
|
507
|
+
if (eventTrigger.eventKey=="message.create.from.requester" || eventTrigger.eventKey=="message.received") {
|
508
|
+
request_id = eventTrigger.event.recipient;
|
509
|
+
}
|
510
|
+
winston.debug('runAction action request_id: ' + request_id);
|
511
|
+
|
512
|
+
|
513
|
+
var member = action.parameters.member;
|
514
|
+
winston.debug('runAction action member: ' + member);
|
515
|
+
|
516
|
+
|
517
|
+
var id_project = eventTrigger.event.id_project;
|
518
|
+
winston.debug('runAction action id_project: ' + id_project);
|
519
|
+
|
520
|
+
requestService.addParticipantByRequestId(request_id, id_project, member).then(function(request) {
|
521
|
+
|
522
|
+
winston.verbose('request.bot.launch action request_id: ' + request_id);
|
523
|
+
|
524
|
+
// rendi dinamico /start
|
525
|
+
messageService.send(
|
526
|
+
'system',
|
527
|
+
'Bot',
|
528
|
+
request_id,
|
529
|
+
'\\start',
|
530
|
+
id_project,
|
531
|
+
null,
|
532
|
+
{subtype:'info', updateconversation : false}
|
533
|
+
);
|
534
|
+
|
535
|
+
// TODO Add typing?
|
536
|
+
})
|
537
|
+
|
538
|
+
|
539
|
+
} catch(e) {
|
540
|
+
winston.error("Error runAction", e);
|
541
|
+
}
|
542
|
+
|
543
|
+
});
|
544
|
+
|
545
|
+
|
546
|
+
|
547
|
+
triggerEventEmitter.on('request.tags.add', function(eventTrigger) {
|
548
|
+
|
549
|
+
try {
|
550
|
+
|
551
|
+
winston.debug('runAction eventTrigger.eventSuccess:', eventTrigger.eventSuccess);
|
552
|
+
var trigger = eventTrigger.trigger;
|
553
|
+
winston.debug('runAction trigger', trigger.toObject());
|
554
|
+
|
555
|
+
var action = eventTrigger.action;
|
556
|
+
winston.debug('runAction action', action.toObject());
|
557
|
+
|
558
|
+
// console.log("actionaction",action);
|
559
|
+
|
560
|
+
var tag = action.parameters.tag;
|
561
|
+
winston.debug('runAction action tag: ' + tag);
|
562
|
+
|
563
|
+
var request_id;
|
564
|
+
if (eventTrigger.eventKey=="request.create") {
|
565
|
+
request_id = eventTrigger.event.request_id;
|
566
|
+
}
|
567
|
+
if (eventTrigger.eventKey=="message.create.from.requester" || eventTrigger.eventKey=="message.received") {
|
568
|
+
request_id = eventTrigger.event.recipient;
|
569
|
+
}
|
570
|
+
|
571
|
+
winston.debug('runAction action request_id: ' + request_id);
|
572
|
+
|
573
|
+
var id_project = eventTrigger.event.id_project;
|
574
|
+
winston.debug('runAction action id_project: ' + id_project);
|
575
|
+
|
576
|
+
// addTagByRequestId(request_id, id_project, tag) {
|
577
|
+
requestService.addTagByRequestId(request_id, id_project, {tag:tag});
|
578
|
+
|
579
|
+
|
580
|
+
} catch(e) {
|
581
|
+
winston.error("Error runAction", e);
|
582
|
+
}
|
583
|
+
|
584
|
+
});
|
585
|
+
|
586
|
+
|
587
|
+
|
588
|
+
|
589
|
+
|
590
|
+
triggerEventEmitter.on('request.participants.leave', function(eventTrigger) {
|
591
|
+
|
592
|
+
try {
|
593
|
+
|
594
|
+
winston.debug('runAction eventTrigger.eventSuccess:', eventTrigger.eventSuccess);
|
595
|
+
var trigger = eventTrigger.trigger;
|
596
|
+
winston.debug('runAction trigger', trigger.toObject());
|
597
|
+
|
598
|
+
var action = eventTrigger.action;
|
599
|
+
winston.debug('runAction action', action.toObject());
|
600
|
+
|
601
|
+
var member = action.parameters.member;
|
602
|
+
winston.debug('runAction action member: ' + member);
|
603
|
+
|
604
|
+
var request_id;
|
605
|
+
if (eventTrigger.eventKey=="request.create") {
|
606
|
+
request_id = eventTrigger.event.request_id;
|
607
|
+
}
|
608
|
+
if (eventTrigger.eventKey=="message.create.from.requester" || eventTrigger.eventKey=="message.received") {
|
609
|
+
request_id = eventTrigger.event.recipient;
|
610
|
+
}
|
611
|
+
|
612
|
+
winston.debug('runAction action request_id: ' + request_id);
|
613
|
+
|
614
|
+
var id_project = eventTrigger.event.id_project;
|
615
|
+
winston.debug('runAction action id_project: ' + id_project);
|
616
|
+
|
617
|
+
// removeParticipantByRequestId(request_id, id_project, member) {
|
618
|
+
requestService.removeParticipantByRequestId(request_id, id_project, member);
|
619
|
+
|
620
|
+
} catch(e) {
|
621
|
+
winston.error("Error runAction", e);
|
622
|
+
}
|
623
|
+
|
624
|
+
});
|
625
|
+
|
626
|
+
|
627
|
+
|
628
|
+
triggerEventEmitter.on('request.create', function(eventTrigger) {
|
629
|
+
|
630
|
+
try {
|
631
|
+
|
632
|
+
winston.debug('runAction eventTrigger.eventSuccess:', eventTrigger.eventSuccess);
|
633
|
+
|
634
|
+
var trigger = eventTrigger.trigger;
|
635
|
+
winston.debug('runAction trigger', trigger.toObject());
|
636
|
+
|
637
|
+
var action = eventTrigger.action;
|
638
|
+
winston.debug('runAction action', action.toObject());
|
639
|
+
|
640
|
+
|
641
|
+
var text = action.parameters.text;
|
642
|
+
winston.debug('runAction action text: ' + text);
|
643
|
+
|
644
|
+
var subtype = action.parameters.subtype;
|
645
|
+
winston.debug('runAction action subtype: ' + subtype);;
|
646
|
+
|
647
|
+
var status = action.parameters.status;
|
648
|
+
winston.debug('runAction action status: ' + status);
|
649
|
+
|
650
|
+
|
651
|
+
var preflight = action.parameters.preflight;
|
652
|
+
winston.debug('runAction action preflight: ' + preflight);
|
653
|
+
|
654
|
+
if (text && text.indexOf(":tdk_msg_subtype_info")>-1) {
|
655
|
+
subtype = "info";
|
656
|
+
text = text.replace(':tdk_msg_subtype_info', '');
|
657
|
+
winston.debug('tdk_msg_subtype_info');
|
658
|
+
}
|
659
|
+
|
660
|
+
if (text && text.indexOf(":tdk_req_status_hidden")>-1) {
|
661
|
+
status = 50;
|
662
|
+
preflight = true;
|
663
|
+
text = text.replace(':tdk_req_status_hidden', '');
|
664
|
+
winston.debug('tdk_req_status_hidden');
|
665
|
+
}
|
666
|
+
|
667
|
+
var type = action.parameters.type;
|
668
|
+
winston.debug('runAction action type: ' + type);
|
669
|
+
|
670
|
+
|
671
|
+
|
672
|
+
|
673
|
+
|
674
|
+
var departmentid = action.parameters.departmentid;
|
675
|
+
winston.debug('runAction action departmentid: ' + departmentid);
|
676
|
+
|
677
|
+
// var attributes = action.parameters.attributes;
|
678
|
+
// winston.debug('runAction action attributes: ' + attributes);
|
679
|
+
|
680
|
+
|
681
|
+
|
682
|
+
var request_id = 'support-group-'+id_project+"-"+uuidv4();
|
683
|
+
var id_user;
|
684
|
+
var fullname;
|
685
|
+
var email;
|
686
|
+
var attributes = {};
|
687
|
+
|
688
|
+
|
689
|
+
|
690
|
+
var sourcePage;
|
691
|
+
var language;
|
692
|
+
var userAgent;
|
693
|
+
|
694
|
+
var userObj = undefined;
|
695
|
+
|
696
|
+
|
697
|
+
if (eventTrigger.eventKey=="event.emit") {
|
698
|
+
winston.verbose('runAction action event.emit: ', eventTrigger.event);
|
699
|
+
// winston.debug('runAction action event.emit: ', eventTrigger.event.toObject());
|
700
|
+
|
701
|
+
// if (eventTrigger.event.project_user &&
|
702
|
+
// eventTrigger.event.project_user.uuid_user &&
|
703
|
+
// eventTrigger.event.project_user.uuid_user) {
|
704
|
+
id_user = eventTrigger.event.project_user.uuid_user;
|
705
|
+
|
706
|
+
if (eventTrigger.event.user) {
|
707
|
+
|
708
|
+
winston.verbose('eventTrigger.event.user: ', eventTrigger.event.user);
|
709
|
+
|
710
|
+
|
711
|
+
if (eventTrigger.event.user.toObject) {
|
712
|
+
userObj = eventTrigger.event.user.toObject();
|
713
|
+
}else {
|
714
|
+
userObj = eventTrigger.event.user;
|
715
|
+
}
|
716
|
+
delete userObj.password;
|
717
|
+
|
718
|
+
|
719
|
+
if (eventTrigger.event.user.fullName) {
|
720
|
+
fullname = eventTrigger.event.user.fullName;
|
721
|
+
winston.verbose('fullname: '+ fullname);
|
722
|
+
}
|
723
|
+
|
724
|
+
if (eventTrigger.event.user.email) {
|
725
|
+
email = eventTrigger.event.user.email;
|
726
|
+
winston.verbose('email: '+ email);
|
727
|
+
}
|
728
|
+
|
729
|
+
}
|
730
|
+
|
731
|
+
// }
|
732
|
+
|
733
|
+
|
734
|
+
// if (attributes && attributes.id_user) {
|
735
|
+
// id_user = attributes.id_user;
|
736
|
+
// }
|
737
|
+
|
738
|
+
if (eventTrigger.event.attributes) {
|
739
|
+
var eventAttributes = eventTrigger.event.attributes;
|
740
|
+
|
741
|
+
if (eventAttributes.request_id) {
|
742
|
+
request_id = eventAttributes.request_id;
|
743
|
+
}
|
744
|
+
if (eventAttributes.id_user) {
|
745
|
+
id_user = eventAttributes.id_user;
|
746
|
+
}
|
747
|
+
if (eventAttributes.fullname) {
|
748
|
+
fullname = eventAttributes.fullname;
|
749
|
+
}
|
750
|
+
if (eventAttributes.email) {
|
751
|
+
email = eventAttributes.email;
|
752
|
+
}
|
753
|
+
|
754
|
+
if (eventAttributes.language) {
|
755
|
+
language = eventAttributes.language;
|
756
|
+
}
|
757
|
+
|
758
|
+
if (eventAttributes.department) { //TODO Dario change to departmentId
|
759
|
+
departmentid = eventAttributes.department;
|
760
|
+
}
|
761
|
+
|
762
|
+
if (eventAttributes.text) {
|
763
|
+
text = eventAttributes.text;
|
764
|
+
}
|
765
|
+
|
766
|
+
if (eventAttributes.status) {
|
767
|
+
status = eventAttributes.status;
|
768
|
+
}
|
769
|
+
|
770
|
+
if (eventAttributes.subtype) {
|
771
|
+
subtype = eventAttributes.subtype;
|
772
|
+
}
|
773
|
+
|
774
|
+
|
775
|
+
|
776
|
+
|
777
|
+
|
778
|
+
|
779
|
+
if (eventAttributes.attributes) {
|
780
|
+
attributes = eventAttributes.attributes;
|
781
|
+
|
782
|
+
|
783
|
+
|
784
|
+
if (eventAttributes.attributes.client) {
|
785
|
+
userAgent = eventAttributes.attributes.client; //the widget pass client parameter and not userAgent
|
786
|
+
}
|
787
|
+
if (eventAttributes.attributes.sourcePage) {
|
788
|
+
sourcePage = eventAttributes.attributes.sourcePage;
|
789
|
+
}
|
790
|
+
|
791
|
+
}
|
792
|
+
|
793
|
+
|
794
|
+
|
795
|
+
|
796
|
+
}
|
797
|
+
|
798
|
+
|
799
|
+
|
800
|
+
if (subtype) {
|
801
|
+
attributes.subtype = subtype;
|
802
|
+
}
|
803
|
+
|
804
|
+
if (userObj) {
|
805
|
+
attributes.decoded_jwt = userObj;
|
806
|
+
}
|
807
|
+
|
808
|
+
|
809
|
+
}
|
810
|
+
|
811
|
+
winston.debug('runAction action id_user:'+id_user);
|
812
|
+
|
813
|
+
|
814
|
+
|
815
|
+
var id_project = eventTrigger.event.id_project;
|
816
|
+
winston.debug('runAction action id_project: ' + id_project);
|
817
|
+
|
818
|
+
|
819
|
+
// createIfNotExistsWithLeadId(lead_id, fullname, email, id_project, createdBy, attributes, status)
|
820
|
+
leadService.createIfNotExistsWithLeadId(id_user, fullname , email, id_project, null, attributes, LeadConstants.TEMP)
|
821
|
+
.then(function(createdLead) {
|
822
|
+
|
823
|
+
|
824
|
+
|
825
|
+
|
826
|
+
|
827
|
+
// return Project_user.findOne(queryProjectUser, function (err, project_user) {
|
828
|
+
|
829
|
+
// var project_user_id = null;
|
830
|
+
|
831
|
+
// if (err) {
|
832
|
+
// winston.error("Error getting the project_user_id", err);
|
833
|
+
// }
|
834
|
+
|
835
|
+
// if (project_user) {
|
836
|
+
// winston.verbose("project_user", project_user);
|
837
|
+
// project_user_id = project_user.id;
|
838
|
+
// winston.verbose("project_user_id: " + project_user_id);
|
839
|
+
// }
|
840
|
+
|
841
|
+
|
842
|
+
var puser = eventTrigger.event.project_user;
|
843
|
+
var project_user_id = puser._id; //questo è null se nn specifico come trigger un event
|
844
|
+
winston.verbose("project_user_id: " + project_user_id);
|
845
|
+
|
846
|
+
|
847
|
+
// qui c'è errore c21
|
848
|
+
// createWithIdAndRequester(request_id, project_user_id, lead_id, id_project, first_text, departmentid, sourcePage,
|
849
|
+
// language, userAgent, status, createdBy, attributes, subject, preflight) {
|
850
|
+
|
851
|
+
// return requestService.createWithIdAndRequester(request_id, project_user_id, createdLead._id, id_project,
|
852
|
+
// text, departmentid, sourcePage,
|
853
|
+
// language, userAgent, status, id_user, attributes, undefined, preflight).then(function (savedRequest) {
|
854
|
+
|
855
|
+
|
856
|
+
var new_request = {
|
857
|
+
request_id: request_id, project_user_id: project_user_id, lead_id: createdLead._id, id_project: id_project,
|
858
|
+
first_text: text, departmentid: departmentid, sourcePage: sourcePage,
|
859
|
+
language: language, userAgent: userAgent, status: status, createdBy: id_user,
|
860
|
+
attributes: attributes, subject: undefined, preflight: preflight, channel: undefined, location: undefined,
|
861
|
+
lead: createdLead, requester: puser
|
862
|
+
};
|
863
|
+
|
864
|
+
return requestService.create(new_request).then(function (savedRequest) {
|
865
|
+
|
866
|
+
|
867
|
+
if (attributes) {
|
868
|
+
attributes.sendnotification = false; // sembra nn funzionae
|
869
|
+
}
|
870
|
+
|
871
|
+
var senderFullname = fullname || 'Guest';
|
872
|
+
|
873
|
+
// create(sender, senderFullname, recipient, text, id_project, createdBy, status, attributes, type, metadata, language) {
|
874
|
+
return messageService.create( id_user, senderFullname , savedRequest.request_id, text,
|
875
|
+
id_project, id_user, MessageConstants.CHAT_MESSAGE_STATUS.SENDING, attributes, type, eventTrigger.event.metadata, language);
|
876
|
+
}).catch(function (err) {
|
877
|
+
winston.error("Error trigger requestService.create", err);
|
878
|
+
});
|
879
|
+
});
|
880
|
+
// });
|
881
|
+
|
882
|
+
|
883
|
+
|
884
|
+
} catch(e) {
|
885
|
+
winston.error("Error runAction", e);
|
886
|
+
}
|
887
|
+
|
888
|
+
});
|
889
|
+
|
890
|
+
|
891
|
+
|
892
|
+
}
|
893
|
+
|
894
|
+
delayedFunction(action,triggerEvent, waitTime) {
|
895
|
+
setTimeout(function() {
|
896
|
+
triggerEvent.action = action;
|
897
|
+
// console.log("setTimeout",action.key, triggerEvent);
|
898
|
+
triggerEventEmitter.emit(action.key,triggerEvent );
|
899
|
+
}, waitTime);
|
900
|
+
}
|
901
|
+
|
902
|
+
createEngine() {
|
903
|
+
|
904
|
+
}
|
905
|
+
|
906
|
+
exec(event, eventKey,successCall,errorCall) {
|
907
|
+
var that = this;
|
908
|
+
// winston.verbose('this', this);
|
909
|
+
|
910
|
+
// var eventKey = Object.keys(this._events);
|
911
|
+
// var eventKey = Object.values(this._events);
|
912
|
+
// winston.verbose('eventKey: ',eventKey);
|
913
|
+
|
914
|
+
// winston.verbose('this', JSON.stringify(this));
|
915
|
+
setImmediate(() => {
|
916
|
+
|
917
|
+
|
918
|
+
winston.debug('event', event);
|
919
|
+
winston.debug('successCall', successCall);
|
920
|
+
winston.debug('trigger event', event);
|
921
|
+
|
922
|
+
let query = {id_project: event.id_project, enabled:true, 'trigger.key':eventKey};
|
923
|
+
|
924
|
+
|
925
|
+
winston.debug('trigger query', query);
|
926
|
+
|
927
|
+
Trigger.find(query)
|
928
|
+
.cache(cacheUtil.longTTL, event.id_project+":triggers:trigger.key:"+eventKey)
|
929
|
+
.exec(function(err, triggers) {
|
930
|
+
if (err) {
|
931
|
+
winston.error('Error gettting bots ', err);
|
932
|
+
return 0;
|
933
|
+
}
|
934
|
+
if (!triggers || triggers.length==0) {
|
935
|
+
winston.debug('No trigger found');
|
936
|
+
return 0;
|
937
|
+
}
|
938
|
+
|
939
|
+
winston.debug('active triggers found', triggers);
|
940
|
+
|
941
|
+
|
942
|
+
// var engineExists = that.engines.hasOwnProperty(event.id_project);
|
943
|
+
// // var engineExists = that.engines.hasOwnProperty(event.id_project+"-"+eventKey);
|
944
|
+
// winston.verbose("engineExists:"+engineExists);
|
945
|
+
|
946
|
+
// var engine;
|
947
|
+
// if (!engineExists) {
|
948
|
+
// engine = new Engine();
|
949
|
+
// that.engines[event.id_project] = engine;
|
950
|
+
// // that.engines[event.id_project+"-"+eventKey] = engine;
|
951
|
+
// winston.verbose("create engine");
|
952
|
+
// }else {
|
953
|
+
// engine = that.engines[event.id_project];
|
954
|
+
// // engine = that.engines[event.id_project+"-"+eventKey];
|
955
|
+
// winston.verbose("engine already exists");
|
956
|
+
// return 0;
|
957
|
+
// }
|
958
|
+
|
959
|
+
var engine = new Engine();
|
960
|
+
// winston.verbose("create engine");
|
961
|
+
// that.engine = new Engine();
|
962
|
+
|
963
|
+
|
964
|
+
|
965
|
+
|
966
|
+
triggers.forEach(function(trigger) {
|
967
|
+
winston.debug('trigger', trigger.toObject());
|
968
|
+
|
969
|
+
var rule = {
|
970
|
+
conditions: {
|
971
|
+
},
|
972
|
+
event: { // define the event to fire when the conditions evaluate truthy
|
973
|
+
type: trigger.id,
|
974
|
+
// type: trigger.actions[0].key,
|
975
|
+
params: trigger.actions
|
976
|
+
// params: {id: trigger._id, actionParameters:trigger.actions[0].parameters}
|
977
|
+
// params: {
|
978
|
+
// message: 'Player has fouled out!'
|
979
|
+
// }
|
980
|
+
}
|
981
|
+
};
|
982
|
+
|
983
|
+
// qui se non imposto condizioni
|
984
|
+
// uncaughtException: "conditions" root must contain a single instance of "all" or "any"
|
985
|
+
// 2022-07-18T08:58:18.589888+00:00 app[web.1]: Error: "conditions" root must contain a single instance of "all" or "any"
|
986
|
+
|
987
|
+
if (trigger.conditions.all.toObject() && trigger.conditions.all.toObject().length>0) {
|
988
|
+
rule.conditions.all = trigger.conditions.all.toObject();
|
989
|
+
}
|
990
|
+
|
991
|
+
if (trigger.conditions.any.toObject() && trigger.conditions.any.toObject().length>0) {
|
992
|
+
rule.conditions.any = trigger.conditions.any.toObject();
|
993
|
+
}
|
994
|
+
|
995
|
+
|
996
|
+
winston.debug('rule', rule);
|
997
|
+
|
998
|
+
// define a rule for detecting the player has exceeded foul limits. Foul out any player who:
|
999
|
+
// (has committed 5 fouls AND game is 40 minutes) OR (has committed 6 fouls AND game is 48 minutes)
|
1000
|
+
|
1001
|
+
engine.addRule(rule);
|
1002
|
+
// that.engine.addRule(rule);
|
1003
|
+
|
1004
|
+
});
|
1005
|
+
|
1006
|
+
|
1007
|
+
|
1008
|
+
|
1009
|
+
|
1010
|
+
|
1011
|
+
|
1012
|
+
|
1013
|
+
|
1014
|
+
|
1015
|
+
|
1016
|
+
|
1017
|
+
|
1018
|
+
/**
|
1019
|
+
* Define facts the engine will use to evaluate the conditions above.
|
1020
|
+
* Facts may also be loaded asynchronously at runtime; see the advanced example below
|
1021
|
+
*/
|
1022
|
+
|
1023
|
+
|
1024
|
+
// let facts = event.toObject();
|
1025
|
+
let facts;
|
1026
|
+
if (event.toJSON) { //request is mongoose object
|
1027
|
+
facts = event.toJSON();
|
1028
|
+
}else { //message is plain object because messageEvent replace it
|
1029
|
+
facts = event;
|
1030
|
+
}
|
1031
|
+
winston.verbose("facts", facts);
|
1032
|
+
|
1033
|
+
engine.addFact("json", facts)
|
1034
|
+
|
1035
|
+
|
1036
|
+
|
1037
|
+
engine.on('success', function(eventSuccess, almanac, ruleResult) {
|
1038
|
+
// info: runAction eventTrigger.eventSuccess: {"type":"request.create","params":{"id":"5e4a771a248688f8ea55e47a","actionParameters":{"fullName":"fullName","text":"hi"}}}
|
1039
|
+
winston.debug("success eventSuccess", eventSuccess);
|
1040
|
+
winston.debug("success ruleResult", ruleResult);
|
1041
|
+
|
1042
|
+
var triggerEvent = {event: event, eventKey:eventKey , triggers: triggers, ruleResult:requestEvent,eventSuccess:eventSuccess, engine:engine };
|
1043
|
+
|
1044
|
+
// info: test success eventTrigger:{
|
1045
|
+
// "event":{"_id":"5e4a771a248688f8ea55e47e","name":"user.pay","attributes":{"attr1":"val1"},"id_project":"5e4a771a248688f8ea55e476","project_user":{"_id":"5e4a771a248688f8ea55e477","id_project":"5e4a771a248688f8ea55e476","id_user":{"_id":"5e4a771a248688f8ea55e475","email":"test-trigger-EventEmit-1581938458317@email.com","firstname":"Test Firstname","lastname":"Test lastname","createdAt":"2020-02-17T11:20:58.326Z","updatedAt":"2020-02-17T11:20:58.326Z","__v":0},"role":"owner","user_available":true,"createdBy":"5e4a771a248688f8ea55e475","createdAt":"2020-02-17T11:20:58.580Z","updatedAt":"2020-02-17T11:20:58.580Z","__v":0,"id":"5e4a771a248688f8ea55e477"},"createdBy":"5e4a771a248688f8ea55e475","createdAt":"2020-02-17T11:20:58.603Z","updatedAt":"2020-02-17T11:20:58.603Z","__v":0},
|
1046
|
+
// "eventKey":"event.emit",
|
1047
|
+
// "triggers":[{"enabled":true,"_id":"5e4a771a248688f8ea55e47a","name":"test","description":"test desc","id_project":"5e4a771a248688f8ea55e476","trigger":{"_id":"5e4a771a248688f8ea55e47b","key":"event.emit","name":"event emit event","description":"event emit descr"},"conditions":{"_id":"5e4a771a248688f8ea55e47c","all":[{"key":"event1","fact":"json","path":"attributes.attr1","operator":"equal","value":"val1"}],"any":[]},"actions":[{"_id":"5e4a771a248688f8ea55e47d","key":"request.create","parameters":{"fullName":"fullName","text":"hi"}}],"createdBy":"5e4a771a248688f8ea55e475","createdAt":"2020-02-17T11:20:58.597Z","updatedAt":"2020-02-17T11:20:58.597Z","__v":0}],
|
1048
|
+
// "ruleResult":{"_events":{"request.create":[null,null,null,null,null],"request.close":[null,null,null]},"_eventsCount":7}
|
1049
|
+
// ,"eventSuccess":{"type":"request.create","params":{"id":"5e4a771a248688f8ea55e47a","actionParameters":{"fullName":"fullName","text":"hi"}}},
|
1050
|
+
// "engine":{"_events":{},"_eventsCount":2,"rules":["{\"conditions\":{\"priority\":1,\"all\":[{\"operator\":\"equal\",\"value\":\"val1\",\"fact\":\"json\",\"path\":\"attributes.attr1\"}]},\"priority\":1,\"event\":{\"type\":\"request.create\",\"params\":{\"id\":\"5e4a771a248688f8ea55e47a\",\"actionParameters\":{\"fullName\":\"fullName\",\"text\":\"hi\"}}}}"],"allowUndefinedFacts":false,"operators":{},"facts":{},"status":"RUNNING","prioritizedRules":[["{\"conditions\":{\"priority\":1,\"all\":[{\"operator\":\"equal\",\"value\":\"val1\",\"fact\":\"json\",\"path\":\"attributes.attr1\"}]},\"priority\":1,\"event\":{\"type\":\"request.create\",\"params\":{\"id\":\"5e4a771a248688f8ea55e47a\",\"actionParameters\":{\"fullName\":\"fullName\",\"text\":\"hi\"}}}}"]]}}
|
1051
|
+
|
1052
|
+
|
1053
|
+
// dopo
|
1054
|
+
// {"event":{"_id":"5e4a7e52f3f18136851535f5","name":"user.pay","attributes":{"attr1":"val1"},"id_project":"5e4a7e52f3f18136851535ed","project_user":{"_id":"5e4a7e52f3f18136851535ee","id_project":"5e4a7e52f3f18136851535ed","id_user":{"_id":"5e4a7e52f3f18136851535ec","email":"test-trigger-EventEmit-1581940306138@email.com","firstname":"Test Firstname","lastname":"Test lastname","createdAt":"2020-02-17T11:51:46.146Z","updatedAt":"2020-02-17T11:51:46.146Z","__v":0},"role":"owner","user_available":true,"createdBy":"5e4a7e52f3f18136851535ec","createdAt":"2020-02-17T11:51:46.397Z","updatedAt":"2020-02-17T11:51:46.397Z","__v":0,"id":"5e4a7e52f3f18136851535ee"},"createdBy":"5e4a7e52f3f18136851535ec","createdAt":"2020-02-17T11:51:46.422Z","updatedAt":"2020-02-17T11:51:46.422Z","__v":0},
|
1055
|
+
// "eventKey":"event.emit",
|
1056
|
+
// "triggers":[{"enabled":true,"_id":"5e4a7e52f3f18136851535f1","name":"test","description":"test desc","id_project":"5e4a7e52f3f18136851535ed","trigger":{"_id":"5e4a7e52f3f18136851535f2","key":"event.emit","name":"event emit event","description":"event emit descr"},"conditions":{"_id":"5e4a7e52f3f18136851535f3","all":[{"key":"event1","fact":"json","path":"attributes.attr1","operator":"equal","value":"val1"}],"any":[]},"actions":[{"_id":"5e4a7e52f3f18136851535f4","key":"request.create","parameters":{"fullName":"fullName","text":"hi"}}],"createdBy":"5e4a7e52f3f18136851535ec","createdAt":"2020-02-17T11:51:46.416Z","updatedAt":"2020-02-17T11:51:46.416Z","__v":0}],
|
1057
|
+
// "ruleResult":{"_events":{"request.create":[null,null,null,null,null],"request.close":[null,null,null]},"_eventsCount":7},
|
1058
|
+
// "eventSuccess":{"type":"5e4a7e52f3f18136851535f1","params":[{"_id":"5e4a7e52f3f18136851535f4","key":"request.create","parameters":{"fullName":"fullName","text":"hi"}}]},
|
1059
|
+
// "engine":{"_events":{},"_eventsCount":2,"rules":["{\"conditions\":{\"priority\":1,\"all\":[{\"operator\":\"equal\",\"value\":\"val1\",\"fact\":\"json\",\"path\":\"attributes.attr1\"}]},\"priority\":1,\"event\":{\"type\":\"5e4a7e52f3f18136851535f1\",\"params\":[{\"_id\":\"5e4a7e52f3f18136851535f4\",\"key\":\"request.create\",\"parameters\":{\"fullName\":\"fullName\",\"text\":\"hi\"}}]}}"],"allowUndefinedFacts":false,"operators":{},"facts":{},"status":"RUNNING","prioritizedRules":[["{\"conditions\":{\"priority\":1,\"all\":[{\"operator\":\"equal\",\"value\":\"val1\",\"fact\":\"json\",\"path\":\"attributes.attr1\"}]},\"priority\":1,\"event\":{\"type\":\"5e4a7e52f3f18136851535f1\",\"params\":[{\"_id\":\"5e4a7e52f3f18136851535f4\",\"key\":\"request.create\",\"parameters\":{\"fullName\":\"fullName\",\"text\":\"hi\"}}]}}"]]}}
|
1060
|
+
winston.debug("success triggerEvent", triggerEvent);
|
1061
|
+
|
1062
|
+
var pickedTrigger = triggers.filter( function (t) {
|
1063
|
+
// winston.verbose("t:"+t._id);
|
1064
|
+
// winston.verbose("eventSuccess.type:"+eventSuccess.type);
|
1065
|
+
if (t.id === eventSuccess.type) {
|
1066
|
+
// winston.verbose("uguale");
|
1067
|
+
return true;
|
1068
|
+
}
|
1069
|
+
});
|
1070
|
+
if (pickedTrigger && pickedTrigger.length>0) {
|
1071
|
+
pickedTrigger = pickedTrigger[0];
|
1072
|
+
}
|
1073
|
+
|
1074
|
+
winston.debug("pickedTrigger", pickedTrigger);
|
1075
|
+
triggerEvent.trigger = pickedTrigger;
|
1076
|
+
|
1077
|
+
|
1078
|
+
|
1079
|
+
// shiiiit https://stackoverflow.com/questions/37977602/settimeout-not-working-inside-foreach
|
1080
|
+
|
1081
|
+
// var a = [1,2,3]
|
1082
|
+
// // var index = 0; <- BUGGGGGGGG try it in the browser you must user index of the forEach
|
1083
|
+
// a.forEach(function(e,index,c) {
|
1084
|
+
// // a.forEach(function(e) {
|
1085
|
+
// setTimeout(function() {
|
1086
|
+
// console.log(index, e);
|
1087
|
+
// },index * 1000);
|
1088
|
+
// // index++;
|
1089
|
+
// });
|
1090
|
+
|
1091
|
+
|
1092
|
+
|
1093
|
+
// https://coderwall.com/p/_ppzrw/be-careful-with-settimeout-in-loops
|
1094
|
+
pickedTrigger.actions.forEach(function (action, i, collection) {
|
1095
|
+
winston.debug("triggerEventEmitter emit: " + action.key, action);
|
1096
|
+
// triggerEvent.action = action;
|
1097
|
+
var waitTime = 500*i;
|
1098
|
+
// console.log("waitTime",waitTime);
|
1099
|
+
// make timeout of 500 ms
|
1100
|
+
that.delayedFunction(action, triggerEvent, waitTime );
|
1101
|
+
|
1102
|
+
});
|
1103
|
+
|
1104
|
+
// pickedTrigger.actions.forEach(function (action, i, collection) {
|
1105
|
+
// winston.verbose("triggerEventEmitter emit: " + action.key, action);
|
1106
|
+
// triggerEvent.action = action;
|
1107
|
+
// var waitTime = 500*i;
|
1108
|
+
// console.log("waitTime",waitTime);
|
1109
|
+
// // make timeout of 500 ms
|
1110
|
+
// setTimeout(function() {
|
1111
|
+
// console.log("setTimeout",action.key, triggerEvent);
|
1112
|
+
// triggerEventEmitter.emit(action.key,triggerEvent );
|
1113
|
+
// }, waitTime);
|
1114
|
+
// // i++;
|
1115
|
+
// });
|
1116
|
+
|
1117
|
+
|
1118
|
+
// successCall(eventSuccess.type,triggerEvent);
|
1119
|
+
});
|
1120
|
+
|
1121
|
+
|
1122
|
+
|
1123
|
+
engine.on('failure', function(eventFailure, almanac, ruleResult) {
|
1124
|
+
winston.debug("failure eventFailure", eventFailure);
|
1125
|
+
|
1126
|
+
var triggerEvent = {event: event, eventKey:eventKey , triggers: triggers, ruleResult:requestEvent,engine:engine };
|
1127
|
+
winston.debug("failure triggerEvent", triggerEvent);
|
1128
|
+
|
1129
|
+
|
1130
|
+
var pickedTrigger = triggers.filter( function (t) {
|
1131
|
+
// winston.verbose("t:"+t._id);
|
1132
|
+
// winston.verbose("eventFailure.type:"+eventFailure.type);
|
1133
|
+
if (t.id === eventFailure.type) {
|
1134
|
+
// winston.verbose("uguale");
|
1135
|
+
return true;
|
1136
|
+
}
|
1137
|
+
});
|
1138
|
+
if (pickedTrigger && pickedTrigger.length>0) {
|
1139
|
+
pickedTrigger = pickedTrigger[0];
|
1140
|
+
}
|
1141
|
+
|
1142
|
+
winston.debug("pickedTrigger", pickedTrigger);
|
1143
|
+
triggerEvent.trigger = pickedTrigger;
|
1144
|
+
pickedTrigger.actions.forEach(function (action) {
|
1145
|
+
winston.debug("triggerEventEmitter emit: " + action.key);
|
1146
|
+
triggerEvent.action = action;
|
1147
|
+
triggerEventEmitter.emit(action.key+".failure",triggerEvent );
|
1148
|
+
});
|
1149
|
+
|
1150
|
+
// triggerEventEmitter.emit(eventFailure.type+".failure", triggerEvent);
|
1151
|
+
// errorCall(eventSuccess.type,triggerEvent);
|
1152
|
+
});
|
1153
|
+
|
1154
|
+
|
1155
|
+
|
1156
|
+
|
1157
|
+
|
1158
|
+
// Run the engine to evaluate
|
1159
|
+
engine
|
1160
|
+
// .run(facts)
|
1161
|
+
.run()
|
1162
|
+
.then(events => { // run() returns events with truthy conditions
|
1163
|
+
winston.verbose('all rules executed; the following events were triggered: ', events);
|
1164
|
+
engine.stop();
|
1165
|
+
// events.map(event => winston.debug(event.params.message));
|
1166
|
+
})
|
1167
|
+
// .catch () per beccare uncaughtException: "conditions" root must contain a single instance of "all" or "any"
|
1168
|
+
|
1169
|
+
|
1170
|
+
|
1171
|
+
});
|
1172
|
+
|
1173
|
+
});
|
1174
|
+
}
|
1175
|
+
|
1176
|
+
}
|
1177
|
+
|
1178
|
+
var rulesTrigger = new RulesTrigger();
|
1179
|
+
module.exports = rulesTrigger;
|
1180
|
+
|