@tiledesk/tiledesk-server 2.4.8 → 2.4.9
Sign up to get free protection for your applications and to get access to all the features.
- package/event/botEvent.js +12 -2
- package/middleware/has-role.js +6 -0
- package/models/faq_kb.js +4 -0
- package/models/lead.js +5 -0
- package/package.json +2 -2
- package/public/wstest/index.html +5 -41
- package/pubmodules/queue/reconnect.js +24 -0
- package/pubmodules/queue/reconnectFanout.js +17 -0
- package/routes/faq_kb.js +42 -0
- package/routes/lead.js +51 -0
- package/services/trainingService.js +7 -2
- package/template/email/assignedEmailMessage.html +253 -149
- package/template/email/assignedRequest.html +272 -172
- package/template/email/beenInvitedExistingUser.html +213 -130
- package/template/email/beenInvitedNewUser.html +200 -119
- package/template/email/emailDirect.html +207 -114
- package/template/email/newMessage.html +250 -157
- package/template/email/newMessageFollower.html +351 -225
- package/template/email/passwordChanged.html +177 -95
- package/template/email/pooledEmailMessage.html +250 -151
- package/template/email/pooledRequest.html +270 -164
- package/template/email/resetPassword.html +200 -114
- package/template/email/sendTranscript.html +299 -197
- package/template/email/ticket.html +263 -160
- package/template/email/verify.html +208 -126
- package/websocket/webSocketServer.js +70 -3
package/event/botEvent.js
CHANGED
@@ -3,12 +3,20 @@ const messageEvent = require('../event/messageEvent');
|
|
3
3
|
const Faq_kb = require('../models/faq_kb');
|
4
4
|
var winston = require('../config/winston');
|
5
5
|
|
6
|
-
|
6
|
+
|
7
7
|
const cacheUtil = require("../utils/cacheUtil");
|
8
8
|
const cacheEnabler = require("../services/cacheEnabler");
|
9
9
|
|
10
|
-
|
10
|
+
// class BotEvent extends EventEmitter {}
|
11
|
+
class BotEvent extends EventEmitter {
|
12
|
+
constructor() {
|
13
|
+
super();
|
14
|
+
this.queueEnabled = false;
|
15
|
+
this.setMaxListeners(11);
|
16
|
+
}
|
17
|
+
}
|
11
18
|
|
19
|
+
const botEvent = new BotEvent();
|
12
20
|
|
13
21
|
//TODO use request. getBotId
|
14
22
|
function getBotFromParticipants(participants) {
|
@@ -111,8 +119,10 @@ messageEvent.on('message.create', function(message) {
|
|
111
119
|
|
112
120
|
|
113
121
|
let qbot = Faq_kb.findById(botId); //TODO add cache_bot_here
|
122
|
+
//TODO unselect secret. secret is unselectable by default in the model
|
114
123
|
|
115
124
|
if (cacheEnabler.faq_kb) {
|
125
|
+
winston.debug('message.id_project+":faq_kbs:id:"+botId: '+ message.id_project+":faq_kbs:id:"+botId);
|
116
126
|
qbot.cache(cacheUtil.defaultTTL, message.id_project+":faq_kbs:id:"+botId)
|
117
127
|
winston.debug('faq_kb cache enabled');
|
118
128
|
}
|
package/middleware/has-role.js
CHANGED
@@ -50,6 +50,12 @@ class RoleChecker {
|
|
50
50
|
return true
|
51
51
|
} else {
|
52
52
|
winston.debug("isTypeAsFunction is false");
|
53
|
+
|
54
|
+
var adminEmail = process.env.ADMIN_EMAIL || "admin@tiledesk.com";
|
55
|
+
|
56
|
+
if (user && user.email && user.email === adminEmail) { //skip has role check
|
57
|
+
return true;
|
58
|
+
}
|
53
59
|
return false;
|
54
60
|
}
|
55
61
|
}
|
package/models/faq_kb.js
CHANGED
package/models/lead.js
CHANGED
@@ -88,6 +88,9 @@ var LeadSchema = new Schema({
|
|
88
88
|
default: LeadConstants.NORMAL,
|
89
89
|
index: true
|
90
90
|
},
|
91
|
+
properties: {
|
92
|
+
type: Object,
|
93
|
+
},
|
91
94
|
},{
|
92
95
|
timestamps: true
|
93
96
|
}
|
@@ -102,6 +105,8 @@ LeadSchema.index({fullname: 'text', email: 'text'},
|
|
102
105
|
// suggested by atlas
|
103
106
|
LeadSchema.index({status: 1, id_project: 1, createdAt: -1});
|
104
107
|
|
108
|
+
|
109
|
+
|
105
110
|
var lead = mongoose.model('lead', LeadSchema);
|
106
111
|
|
107
112
|
if (process.env.MONGOOSE_SYNCINDEX) {
|
package/package.json
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
{
|
2
2
|
"name": "@tiledesk/tiledesk-server",
|
3
3
|
"description": "The Tiledesk server module",
|
4
|
-
"version": "2.4.
|
4
|
+
"version": "2.4.9",
|
5
5
|
"scripts": {
|
6
6
|
"start": "node ./bin/www",
|
7
7
|
"pretest": "mongodb-runner start",
|
@@ -45,7 +45,7 @@
|
|
45
45
|
"@tiledesk/tiledesk-messenger-connector": "0.1.9",
|
46
46
|
"@tiledesk/tiledesk-rasa-connector": "^1.0.10",
|
47
47
|
"@tiledesk/tiledesk-tybot-connector": "^0.1.78",
|
48
|
-
"@tiledesk/tiledesk-whatsapp-connector": "^0.1.
|
48
|
+
"@tiledesk/tiledesk-whatsapp-connector": "^0.1.46",
|
49
49
|
"amqplib": "^0.5.5",
|
50
50
|
"app-root-path": "^3.0.0",
|
51
51
|
"bcrypt-nodejs": "0.0.3",
|
package/public/wstest/index.html
CHANGED
@@ -5,55 +5,19 @@
|
|
5
5
|
|
6
6
|
<!-- <script type="text/javascript" src="./main.js"></script> -->
|
7
7
|
|
8
|
-
// var ws = new WebSocket('wss://rtm.tiledesk.com/?token=JWT%20eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI1ZWI0NWZiMjFmOWUxZjAwMTJkNjIyMDEiLCJlbWFpbCI6ImExQGExLml0IiwiZmlyc3RuYW1lIjoiYTEiLCJsYXN0bmFtZSI6ImExIiwiZW1haWx2ZXJpZmllZCI6ZmFsc2UsImlhdCI6MTU4ODg3OTI4NCwiYXVkIjoiaHR0cHM6Ly90aWxlZGVzay5jb20iLCJpc3MiOiJodHRwczovL3RpbGVkZXNrLmNvbSIsInN1YiI6InVzZXIiLCJqdGkiOiI5MGIzNTY1NS1jNzY4LTQwMjEtODIyNy1hYWQ1MGU5NWFmYTEifQ.v4RjqtpM-kqa_PGVXmn9eJOeb3IWrcXH0U6V5iJrj7U');
|
9
|
-
|
10
8
|
<script>
|
11
|
-
var ws = new WebSocket('
|
9
|
+
var ws = new WebSocket('ws://localhost:3000/?token=JWT%20eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI1ZWU4OTE5ZDg3MjJiMzAwMzQ3ZWM1NmYiLCJlbWFpbCI6ImFkbWluQHRpbGVkZXNrLmNvbSIsImZpcnN0bmFtZSI6IkFkbWluaXN0cmF0b3IiLCJsYXN0bmFtZSI6IiAiLCJlbWFpbHZlcmlmaWVkIjp0cnVlLCJpYXQiOjE2ODM2NTEyMDYsImF1ZCI6Imh0dHBzOi8vdGlsZWRlc2suY29tIiwiaXNzIjoiaHR0cHM6Ly90aWxlZGVzay5jb20iLCJzdWIiOiJ1c2VyIiwianRpIjoiZDVlY2U3YjctN2U0Zi00NThmLTkxYWMtNGJiMzY3NDdmNmUxIn0.KiPGusVCPR0-IROsoPiH93V_vCKJS3rK_ikjqmngQT7J_s3VHalRvGfuvds-sRg4V8rfZyhlfaR6uWR71TYPhyT7REPYORp-T-6ddb8g7nL4lraHVhzqYYpVPIhXUM81rkyHm1FP2LuIsEe93Ir62AyK0xajoS1wPdjYNBxari0');
|
10
|
+
// var ws = new WebSocket('ws://eu.rtmv3.tiledesk.com/mqws/ws/?token=JWT%20eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI1ZWI1NmUxYTFmOWUxZjAwMTJkNjIyNzUiLCJlbWFpbCI6ImxvYWRAbG9hZC5pdCIsImZpcnN0bmFtZSI6ImxvYWQiLCJsYXN0bmFtZSI6ImxvYWQiLCJlbWFpbHZlcmlmaWVkIjpmYWxzZSwiaWF0IjoxNTg4OTQ4NTA3LCJhdWQiOiJodHRwczovL3RpbGVkZXNrLmNvbSIsImlzcyI6Imh0dHBzOi8vdGlsZWRlc2suY29tIiwic3ViIjoidXNlciIsImp0aSI6IjU0OWQ3ODI4LWI5ZDAtNDAxNS1iMDQ4LTA0M2IyYzYyZjAxOSJ9.gnGJRtUoRpUA90QWNSp1wmWmlJcu1YwYf_kJ8yUi1_I');
|
12
11
|
ws.onopen = function () {
|
13
|
-
console.log('websocket is
|
14
|
-
ws.send('{ "action": "subscribe", "payload": { "topic": "/
|
12
|
+
console.log('websocket is connected ...');
|
13
|
+
ws.send('{ "action": "subscribe", "payload": { "topic": "/6453d246f1e784003a97537b/bots/645903253e16b1002cfe4439"}}');
|
14
|
+
// ws.send('{ "action": "subscribe", "payload": { "topic": "/5eb56e211f9e1f0012d6227b/requests"}}');
|
15
15
|
}
|
16
16
|
</script>
|
17
17
|
|
18
18
|
|
19
19
|
|
20
20
|
|
21
|
-
|
22
|
-
<script>
|
23
|
-
var ws = new WebSocket('wss://tiledesk-server-pre.herokuapp.com/?token=JWT%20eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI1YWFhOTkwMjRjM2IxMTAwMTRiNDc4ZjAiLCJlbWFpbCI6ImFuZHJlYS5sZW9AZnJvbnRpZXJlMjEuaXQiLCJmaXJzdG5hbWUiOiJBbmRyZWEiLCJsYXN0bmFtZSI6IkxlbyIsImVtYWlsdmVyaWZpZWQiOnRydWUsImlhdCI6MTU4NzU0NjIyNiwiYXVkIjoiaHR0cHM6Ly90aWxlZGVzay5jb20iLCJpc3MiOiJodHRwczovL3RpbGVkZXNrLmNvbSIsInN1YiI6InVzZXIiLCJqdGkiOiJkNDNhMmIwNi1jZGRkLTRkZDYtYjhiNC02NzdiOGI4MTQyYjIifQ.KZGvjr8oQc2sYeV1bOMvCd0_9XxaLlfIszjT_4-PlQ4');
|
24
|
-
|
25
|
-
ws.onopen = function () {
|
26
|
-
console.log('websocket is connected2 ...');
|
27
|
-
ws.send('{ "action": "subscribe", "payload": { "topic": "/5ebae6f21aee9b0034511f65/requests"}}');
|
28
|
-
}
|
29
|
-
</script>
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
<script>
|
36
|
-
|
37
|
-
|
38
|
-
//var url = 'ws://'+window.location.host+'/?token=JWT eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyIkX18iOnsic3RyaWN0TW9kZSI6dHJ1ZSwic2VsZWN0ZWQiOnsiZW1haWwiOjEsImZpcnN0bmFtZSI6MSwibGFzdG5hbWUiOjEsInBhc3N3b3JkIjoxLCJlbWFpbHZlcmlmaWVkIjoxLCJpZCI6MX0sImdldHRlcnMiOnt9LCJfaWQiOiI1ZGM5Mzg2MmFkZDRmNjljM2Q0NThkOGYiLCJ3YXNQb3B1bGF0ZWQiOmZhbHNlLCJhY3RpdmVQYXRocyI6eyJwYXRocyI6eyJwYXNzd29yZCI6ImluaXQiLCJlbWFpbCI6ImluaXQiLCJlbWFpbHZlcmlmaWVkIjoiaW5pdCIsIl9pZCI6ImluaXQifSwic3RhdGVzIjp7Imlnbm9yZSI6e30sImRlZmF1bHQiOnt9LCJpbml0Ijp7ImVtYWlsdmVyaWZpZWQiOnRydWUsInBhc3N3b3JkIjp0cnVlLCJlbWFpbCI6dHJ1ZSwiX2lkIjp0cnVlfSwibW9kaWZ5Ijp7fSwicmVxdWlyZSI6e319LCJzdGF0ZU5hbWVzIjpbInJlcXVpcmUiLCJtb2RpZnkiLCJpbml0IiwiZGVmYXVsdCIsImlnbm9yZSJdfSwicGF0aHNUb1Njb3BlcyI6e30sImVtaXR0ZXIiOnsiX2V2ZW50cyI6e30sIl9ldmVudHNDb3VudCI6MCwiX21heExpc3RlbmVycyI6MH0sIiRvcHRpb25zIjp0cnVlfSwiaXNOZXciOmZhbHNlLCJfZG9jIjp7ImVtYWlsdmVyaWZpZWQiOmZhbHNlLCJwYXNzd29yZCI6IiQyYSQxMCRJc0hJRm9HTmRvRnVrODVRaDZlbXN1RjFzbkphNC5ELmgud2tuS092RUdlcVJsSlpZOHdjUyIsImVtYWlsIjoiYW5kcmVhLmxlb0BmMjEuaXQiLCJfaWQiOiI1ZGM5Mzg2MmFkZDRmNjljM2Q0NThkOGYifSwiJGluaXQiOnRydWUsImlhdCI6MTU3NDYxNTY2MSwiYXVkIjoiaHR0cHM6Ly90aWxlZGVzay5jb20iLCJpc3MiOiJodHRwczovL3RpbGVkZXNrLmNvbSIsInN1YiI6InVzZXIifQ.6DjvyVO-4zuHH2kdfItWx9eVGZ-HcRcs1jehVRrDWpE';
|
39
|
-
//var url = 'ws://'+window.location.host+'/?token=JWT eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyIkX18iOnsic3RyaWN0TW9kZSI6dHJ1ZSwic2VsZWN0ZWQiOnsiZW1haWwiOjEsImZpcnN0bmFtZSI6MSwibGFzdG5hbWUiOjEsInBhc3N3b3JkIjoxLCJlbWFpbHZlcmlmaWVkIjoxLCJpZCI6MX0sImdldHRlcnMiOnt9LCJfaWQiOiI1ZGM5Mzg2MmFkZDRmNjljM2Q0NThkOGYiLCJ3YXNQb3B1bGF0ZWQiOmZhbHNlLCJhY3RpdmVQYXRocyI6eyJwYXRocyI6eyJwYXNzd29yZCI6ImluaXQiLCJlbWFpbCI6ImluaXQiLCJlbWFpbHZlcmlmaWVkIjoiaW5pdCIsIl9pZCI6ImluaXQifSwic3RhdGVzIjp7Imlnbm9yZSI6e30sImRlZmF1bHQiOnt9LCJpbml0Ijp7ImVtYWlsdmVyaWZpZWQiOnRydWUsInBhc3N3b3JkIjp0cnVlLCJlbWFpbCI6dHJ1ZSwiX2lkIjp0cnVlfSwibW9kaWZ5Ijp7fSwicmVxdWlyZSI6e319LCJzdGF0ZU5hbWVzIjpbInJlcXVpcmUiLCJtb2RpZnkiLCJpbml0IiwiZGVmYXVsdCIsImlnbm9yZSJdfSwicGF0aHNUb1Njb3BlcyI6e30sImVtaXR0ZXIiOnsiX2V2ZW50cyI6e30sIl9ldmVudHNDb3VudCI6MCwiX21heExpc3RlbmVycyI6MH0sIiRvcHRpb25zIjp0cnVlfSwiaXNOZXciOmZhbHNlLCJfZG9jIjp7ImVtYWlsdmVyaWZpZWQiOmZhbHNlLCJwYXNzd29yZCI6IiQyYSQxMCRJc0hJRm9HTmRvRnVrODVRaDZlbXN1RjFzbkphNC5ELmgud2tuS092RUdlcVJsSlpZOHdjUyIsImVtYWlsIjoiYW5kcmVhLmxlb0BmMjEuaXQiLCJfaWQiOiI1ZGM5Mzg2MmFkZDRmNjljM2Q0NThkOGYifSwiJGluaXQiOnRydWUsImlhdCI6MTU3NDkzNTUxOCwiYXVkIjoiaHR0cHM6Ly90aWxlZGVzay5jb20iLCJpc3MiOiJodHRwczovL3RpbGVkZXNrLmNvbSIsInN1YiI6InVzZXIifQ._fZWRXAG1lBwmEbrqmvQr1ghhbcKAHgs74ki8UtDBZU';
|
40
|
-
//var url = 'ws://'+window.location.host+'/?token=JWT eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyIkX18iOnsic3RyaWN0TW9kZSI6dHJ1ZSwic2VsZWN0ZWQiOnsiZW1haWwiOjEsImZpcnN0bmFtZSI6MSwibGFzdG5hbWUiOjEsInBhc3N3b3JkIjoxLCJlbWFpbHZlcmlmaWVkIjoxLCJpZCI6MX0sImdldHRlcnMiOnt9LCJfaWQiOiI1YWIxMWM2YjgzZGMyNDAwMTRkNDYwOTUiLCJ3YXNQb3B1bGF0ZWQiOmZhbHNlLCJhY3RpdmVQYXRocyI6eyJwYXRocyI6eyJwYXNzd29yZCI6ImluaXQiLCJlbWFpbCI6ImluaXQiLCJfaWQiOiJpbml0In0sInN0YXRlcyI6eyJpZ25vcmUiOnt9LCJkZWZhdWx0Ijp7fSwiaW5pdCI6eyJwYXNzd29yZCI6dHJ1ZSwiZW1haWwiOnRydWUsIl9pZCI6dHJ1ZX0sIm1vZGlmeSI6e30sInJlcXVpcmUiOnt9fSwic3RhdGVOYW1lcyI6WyJyZXF1aXJlIiwibW9kaWZ5IiwiaW5pdCIsImRlZmF1bHQiLCJpZ25vcmUiXX0sInBhdGhzVG9TY29wZXMiOnt9LCJlbWl0dGVyIjp7Il9ldmVudHMiOnt9LCJfZXZlbnRzQ291bnQiOjAsIl9tYXhMaXN0ZW5lcnMiOjB9LCIkb3B0aW9ucyI6dHJ1ZX0sImlzTmV3IjpmYWxzZSwiX2RvYyI6eyJwYXNzd29yZCI6IiQyYSQxMCQ1eDUvUHJYWTJycVZTdVRQLjV2WlEuQ3JScy5sLjVWS2svNzRIb2haTXFwaEJwWHpNRUZKMiIsImVtYWlsIjoiYW5kcmVhLmxlb0BmMjEuaXQiLCJfaWQiOiI1YWIxMWM2YjgzZGMyNDAwMTRkNDYwOTUifSwiJGluaXQiOnRydWUsImlhdCI6MTU3NTAxODYzNiwiYXVkIjoiaHR0cHM6Ly90aWxlZGVzay5jb20iLCJpc3MiOiJodHRwczovL3RpbGVkZXNrLmNvbSIsInN1YiI6InVzZXIifQ.ZNU49DGQNdWfPMui_J1D9QyMnBgNIiS6q92TVGVW5m4';
|
41
|
-
var url = 'ws://104.198.139.15'+'/?token=JWT%20eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI1ZThkYTJiZTljMWY1MjAwMTdlZGJkZWYiLCJlbWFpbCI6ImFuZHJlYS5sZW9AZnJvbnRpZXJlMjEuaXQiLCJmaXJzdG5hbWUiOiJhbmRyZWEiLCJsYXN0bmFtZSI6ImxlbyIsImVtYWlsdmVyaWZpZWQiOnRydWUsImlhdCI6MTU4NjQxNjM0NSwiYXVkIjoiaHR0cHM6Ly90aWxlZGVzay5jb20iLCJpc3MiOiJodHRwczovL3RpbGVkZXNrLmNvbSIsInN1YiI6InVzZXIiLCJqdGkiOiI1ZDg1M2Q3Ny01YzJjLTQ3ZmQtOWFiMy1lZjJlZDg2ZDQyN2EifQ.s7zqrF7CrfEwlbbkb-cg8lc7VrzXRQsPRv1PVtTVqSM';
|
42
|
-
|
43
|
-
|
44
|
-
tilebase = new Tilebase(url
|
45
|
-
|
46
|
-
, function(data, notification) {
|
47
|
-
$('#messages').append(`<div id="${data._id}">${data.first_text} ${notification.event.method}</div>`);
|
48
|
-
}
|
49
|
-
, function(object, notification) {
|
50
|
-
$('#'+data._id).html(`<div id="${data._id}">${data.first_text} ${notification.event.method}</div>`);
|
51
|
-
}
|
52
|
-
);
|
53
|
-
//tilebase.start('{ "action": "subscribe", "payload": { "topic": "topic1"}}');
|
54
|
-
tilebase.start();
|
55
|
-
|
56
|
-
</script>
|
57
21
|
</head>
|
58
22
|
<bdoy>
|
59
23
|
<h1>
|
@@ -2,6 +2,7 @@ var amqp = require('amqplib/callback_api');
|
|
2
2
|
var winston = require('../../config/winston');
|
3
3
|
const requestEvent = require('../../event/requestEvent');
|
4
4
|
const messageEvent = require('../../event/messageEvent');
|
5
|
+
const botEvent = require('../../event/botEvent');
|
5
6
|
const authEvent = require('../../event/authEvent');
|
6
7
|
// https://elements.heroku.com/addons/cloudamqp
|
7
8
|
// https://gist.github.com/carlhoerberg/006b01ac17a0a94859ba#file-reconnect-js
|
@@ -149,6 +150,13 @@ function startWorker() {
|
|
149
150
|
winston.info("Queue bind: "+_ok.queue+ " err: "+err3+ " key: project_user_update");
|
150
151
|
winston.info("Data queue", oka)
|
151
152
|
});
|
153
|
+
|
154
|
+
ch.bindQueue(_ok.queue, exchange, "faqbot_update", {}, function(err3, oka) {
|
155
|
+
winston.info("Queue bind: "+_ok.queue+ " err: "+err3+ " key: faqbot_update");
|
156
|
+
winston.info("Data queue", oka)
|
157
|
+
});
|
158
|
+
|
159
|
+
|
152
160
|
ch.consume("jobs", processMsg, { noAck: false });
|
153
161
|
winston.info("Worker is started");
|
154
162
|
});
|
@@ -222,6 +230,12 @@ function work(msg, cb) {
|
|
222
230
|
// requestEvent.emit('request.create.queue', msg.content);
|
223
231
|
authEvent.emit('project_user.update.queue', JSON.parse(message_string));
|
224
232
|
}
|
233
|
+
|
234
|
+
if (topic === 'faqbot_update') {
|
235
|
+
winston.info("reconnect here topic faqbot_update:" + topic);
|
236
|
+
// requestEvent.emit('request.update.queue', msg.content);
|
237
|
+
botEvent.emit('faqbot.update.queue', JSON.parse(message_string));
|
238
|
+
}
|
225
239
|
cb(true);
|
226
240
|
// WebSocket.cb(true);
|
227
241
|
// requestEvent.on(msg.KEYYYYYYY+'.ws', msg.content);
|
@@ -318,12 +332,22 @@ function listen() {
|
|
318
332
|
});
|
319
333
|
});
|
320
334
|
|
335
|
+
|
336
|
+
botEvent.on('faqbot.update', function(bot) {
|
337
|
+
setImmediate(() => {
|
338
|
+
winston.debug("reconnect faqbot.update")
|
339
|
+
publish(exchange, "faqbot_update", Buffer.from(JSON.stringify(bot)));
|
340
|
+
winston.info("reconnect: "+ Buffer.from(JSON.stringify(bot)))
|
341
|
+
});
|
342
|
+
});
|
343
|
+
|
321
344
|
}
|
322
345
|
|
323
346
|
if (process.env.QUEUE_ENABLED === "true") {
|
324
347
|
requestEvent.queueEnabled = true;
|
325
348
|
messageEvent.queueEnabled = true;
|
326
349
|
authEvent.queueEnabled = true;
|
350
|
+
botEvent.queueEnabled = true;
|
327
351
|
listen();
|
328
352
|
start();
|
329
353
|
winston.info("Queue enabled. endpint: " + url );
|
@@ -2,6 +2,7 @@ var amqp = require('amqplib/callback_api');
|
|
2
2
|
var winston = require('../../config/winston');
|
3
3
|
const requestEvent = require('../../event/requestEvent');
|
4
4
|
const messageEvent = require('../../event/messageEvent');
|
5
|
+
const botEvent = require('../../event/botEvent');
|
5
6
|
const authEvent = require('../../event/authEvent');
|
6
7
|
// https://elements.heroku.com/addons/cloudamqp
|
7
8
|
// https://gist.github.com/carlhoerberg/006b01ac17a0a94859ba#file-reconnect-js
|
@@ -179,6 +180,10 @@ function work(msg, cb) {
|
|
179
180
|
winston.debug("reconnectfanout here topic:" + topic);
|
180
181
|
authEvent.emit('project_user.update.queue.pubsub', JSON.parse(message_string));
|
181
182
|
}
|
183
|
+
if (topic === 'faqbot_update') {
|
184
|
+
winston.info("reconnectfanout here topic faqbot_update:" + topic);
|
185
|
+
botEvent.emit('faqbot.update.queue.pubsub', JSON.parse(message_string));
|
186
|
+
}
|
182
187
|
cb(true);
|
183
188
|
// WebSocket.cb(true);
|
184
189
|
// requestEvent.on(msg.KEYYYYYYY+'.ws', msg.content);
|
@@ -243,12 +248,24 @@ function listen() {
|
|
243
248
|
publish(exchange, "project_user_update", Buffer.from(JSON.stringify(dat)));
|
244
249
|
});
|
245
250
|
});
|
251
|
+
|
252
|
+
|
253
|
+
botEvent.on('faqbot.update', function(bot) {
|
254
|
+
setImmediate(() => {
|
255
|
+
winston.debug("reconnect faqbot.update")
|
256
|
+
publish(exchange, "faqbot_update", Buffer.from(JSON.stringify(bot)));
|
257
|
+
winston.info("reconnect fan: "+ Buffer.from(JSON.stringify(bot)))
|
258
|
+
});
|
259
|
+
});
|
260
|
+
|
261
|
+
|
246
262
|
}
|
247
263
|
|
248
264
|
if (process.env.QUEUE_ENABLED === "true") {
|
249
265
|
requestEvent.queueEnabled = true;
|
250
266
|
messageEvent.queueEnabled = true;
|
251
267
|
authEvent.queueEnabled = true;
|
268
|
+
botEvent.queueEnabled = true;
|
252
269
|
listen();
|
253
270
|
start();
|
254
271
|
winston.info("Queue Fanout enabled. endpint: " + url );
|
package/routes/faq_kb.js
CHANGED
@@ -15,6 +15,7 @@ var configGlobal = require('../config/global');
|
|
15
15
|
const faq = require('../models/faq');
|
16
16
|
var jwt = require('jsonwebtoken');
|
17
17
|
const uuidv4 = require('uuid/v4');
|
18
|
+
var ObjectId = require('mongoose').Types.ObjectId;
|
18
19
|
|
19
20
|
let chatbot_templates_api_url = process.env.CHATBOT_TEMPLATES_API_URL
|
20
21
|
|
@@ -312,6 +313,13 @@ router.put('/:faq_kbid', function (req, res) {
|
|
312
313
|
update.tags = req.body.tags;
|
313
314
|
}
|
314
315
|
|
316
|
+
if (req.body.trained != undefined) {
|
317
|
+
update.trained = req.body.trained;
|
318
|
+
}
|
319
|
+
// update._id = req.params.faq_kbid;
|
320
|
+
|
321
|
+
winston.debug("update", update);
|
322
|
+
// "$set": req.params.faq_kbid
|
315
323
|
|
316
324
|
Faq_kb.findByIdAndUpdate(req.params.faq_kbid, update, { new: true, upsert: true }, function (err, updatedFaq_kb) { //TODO add cache_bot_here
|
317
325
|
if (err) {
|
@@ -324,6 +332,14 @@ router.put('/:faq_kbid', function (req, res) {
|
|
324
332
|
});
|
325
333
|
|
326
334
|
|
335
|
+
|
336
|
+
|
337
|
+
|
338
|
+
|
339
|
+
|
340
|
+
|
341
|
+
|
342
|
+
|
327
343
|
router.patch('/:faq_kbid/attributes', function (req, res) { //TODO add cache_bot_here
|
328
344
|
var data = req.body;
|
329
345
|
|
@@ -927,4 +943,30 @@ router.get('/exportjson/:id_faq_kb', (req, res) => {
|
|
927
943
|
})
|
928
944
|
|
929
945
|
|
946
|
+
|
947
|
+
|
948
|
+
router.post('/:faq_kbid/training', function (req, res) {
|
949
|
+
|
950
|
+
winston.debug(req.body);
|
951
|
+
|
952
|
+
var update = {};
|
953
|
+
update.trained = true;
|
954
|
+
// update._id = req.params.faq_kbid;
|
955
|
+
|
956
|
+
winston.debug("update", update);
|
957
|
+
// "$set": req.params.faq_kbid
|
958
|
+
|
959
|
+
Faq_kb.findByIdAndUpdate(req.params.faq_kbid, update, { new: true, upsert: true }, function (err, updatedFaq_kb) { //TODO add cache_bot_here
|
960
|
+
if (err) {
|
961
|
+
return res.status(500).send({ success: false, msg: 'Error updating object.' });
|
962
|
+
}
|
963
|
+
|
964
|
+
botEvent.emit('faqbot.update', updatedFaq_kb);
|
965
|
+
res.json(updatedFaq_kb);
|
966
|
+
});
|
967
|
+
});
|
968
|
+
|
969
|
+
|
970
|
+
|
971
|
+
|
930
972
|
module.exports = router;
|
package/routes/lead.js
CHANGED
@@ -149,6 +149,56 @@ router.patch('/:leadid/attributes', function (req, res) {
|
|
149
149
|
|
150
150
|
|
151
151
|
|
152
|
+
router.patch('/:leadid/properties', function (req, res) {
|
153
|
+
var data = req.body;
|
154
|
+
|
155
|
+
// TODO use service method
|
156
|
+
|
157
|
+
Lead.findById(req.params.leadid, function (err, lead) {
|
158
|
+
if (err) {
|
159
|
+
winston.error('--- > ERROR ', err);
|
160
|
+
return res.status(500).send({ success: false, msg: 'Error updating object.' });
|
161
|
+
}
|
162
|
+
|
163
|
+
if (!lead) {
|
164
|
+
return res.status(404).send({ success: false, msg: 'Object not found.' });
|
165
|
+
}
|
166
|
+
|
167
|
+
if (!lead.properties) {
|
168
|
+
winston.debug("empty properties")
|
169
|
+
lead.properties = {};
|
170
|
+
}
|
171
|
+
|
172
|
+
winston.debug(" lead properties", lead.properties)
|
173
|
+
|
174
|
+
Object.keys(data).forEach(function(key) {
|
175
|
+
var val = data[key];
|
176
|
+
winston.debug("data attributes "+key+" " +val)
|
177
|
+
lead.properties[key] = val;
|
178
|
+
});
|
179
|
+
|
180
|
+
winston.debug(" lead properties", lead.properties)
|
181
|
+
|
182
|
+
// https://stackoverflow.com/questions/24054552/mongoose-not-saving-nested-object
|
183
|
+
lead.markModified('properties');
|
184
|
+
|
185
|
+
//cacheinvalidation
|
186
|
+
lead.save(function (err, savedLead) {
|
187
|
+
if (err) {
|
188
|
+
winston.error("error saving lead properties",err)
|
189
|
+
return res.status(500).send({ success: false, msg: 'Error getting object.' });
|
190
|
+
}
|
191
|
+
winston.verbose(" saved lead properties",savedLead.toObject())
|
192
|
+
leadEvent.emit('lead.update', savedLead);
|
193
|
+
|
194
|
+
res.json(savedLead);
|
195
|
+
});
|
196
|
+
});
|
197
|
+
|
198
|
+
});
|
199
|
+
|
200
|
+
|
201
|
+
|
152
202
|
// router.put('/:leadid', function (req, res) {
|
153
203
|
// winston.debug(req.body);
|
154
204
|
// var update = {};
|
@@ -199,6 +249,7 @@ router.delete('/:leadid/physical', function (req, res) {
|
|
199
249
|
return res.status(403).send({ success: false, msg: 'Unauthorized.' });
|
200
250
|
}
|
201
251
|
|
252
|
+
// TODO use findByIdAndRemove otherwise lead don't contains label object
|
202
253
|
Lead.remove({ _id: req.params.leadid }, function (err, lead) {
|
203
254
|
if (err) {
|
204
255
|
winston.error('--- > ERROR ', err);
|
@@ -3,6 +3,7 @@ const Faq_kb = require('../models/faq_kb');
|
|
3
3
|
const Faq = require('../models/faq');
|
4
4
|
var winston = require('../config/winston');
|
5
5
|
const axios = require("axios").default;
|
6
|
+
var configGlobal = require('../config/global');
|
6
7
|
|
7
8
|
|
8
9
|
let chatbot_training_api_url = "http://34.65.210.38/model/train"
|
@@ -35,14 +36,18 @@ class TrainingService {
|
|
35
36
|
if (err) {
|
36
37
|
winston.error("[Training] find all error: ", err);
|
37
38
|
} else {
|
38
|
-
|
39
|
+
|
39
40
|
let json = {
|
40
41
|
"configuration": {
|
41
42
|
"language": faq_kb.language,
|
42
43
|
"pipeline":["lstm"]
|
43
44
|
},
|
44
45
|
"model": faq_kb._id,
|
45
|
-
"nlu": []
|
46
|
+
"nlu": [],
|
47
|
+
|
48
|
+
// curl -v -X PUT -H 'Content-Type:application/json' -u admin@tiledesk.com:adminadmin -d '{"trained":false}' http://localhost:3000/63ed15febb8a5eb3b247fdfd/bots/64551b3422cdfb93ddb1b784
|
49
|
+
"webhook_url": process.env.API_URL || configGlobal.apiUrl + "/" + faq_kb.id_project + "/bots/" + faq_kb._id+"/training",
|
50
|
+
"token" : process.env.TRAINING_BOT_JWT_TOKEN
|
46
51
|
}
|
47
52
|
|
48
53
|
faqs.forEach((f) => {
|