@tiledesk/tiledesk-server 2.4.8 → 2.4.10
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/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 +264 -162
- 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.10",
|
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) => {
|