@tiledesk/tiledesk-server 2.5.0 → 2.5.2
Sign up to get free protection for your applications and to get access to all the features.
- package/CHANGELOG.md +10 -0
- package/channels/chat21/chat21Handler.js +23 -2
- package/channels/chat21/package-lock.json +3666 -19
- package/channels/chat21/package.json +2 -2
- package/deploy.sh +1 -1
- package/middleware/passport.js +3 -3
- package/models/kb_setting.js +6 -11
- package/package.json +4 -4
- package/pubmodules/queue/reconnect.js +35 -1
- package/pubmodules/routing-queue/listenerQueued.js +6 -2
- package/routes/kb.js +97 -10
- package/routes/request.js +19 -1
- package/test/kbRoute.js +92 -0
@@ -1,7 +1,7 @@
|
|
1
1
|
{
|
2
2
|
"name": "@tiledesk/tiledesk-chat21-app",
|
3
3
|
"description": "The Tiledesk Chat21 module",
|
4
|
-
"version": "1.1.
|
4
|
+
"version": "1.1.8",
|
5
5
|
"private": false,
|
6
6
|
"author": "Andrea Leo - Frontiere21 SRL",
|
7
7
|
"license": "AGPL-3.0",
|
@@ -11,7 +11,7 @@
|
|
11
11
|
"url": "https://github.com/Tiledesk/tiledesk-server"
|
12
12
|
},
|
13
13
|
"dependencies": {
|
14
|
-
"@chat21/chat21-node-sdk": "^1.1.
|
14
|
+
"@chat21/chat21-node-sdk": "^1.1.8",
|
15
15
|
"winston": "^3.3.3",
|
16
16
|
"firebase-admin": "^9.5.0"
|
17
17
|
},
|
package/deploy.sh
CHANGED
package/middleware/passport.js
CHANGED
@@ -464,12 +464,12 @@ if (enableGoogleSignin==true) {
|
|
464
464
|
},
|
465
465
|
function(issuer, profile, cb) {
|
466
466
|
|
467
|
-
winston.
|
468
|
-
winston.
|
467
|
+
winston.debug("issuer: "+issuer)
|
468
|
+
winston.debug("profile", profile)
|
469
469
|
// winston.info("cb", cb)
|
470
470
|
|
471
471
|
var email = profile.emails[0].value;
|
472
|
-
winston.
|
472
|
+
winston.debug("email: "+email)
|
473
473
|
|
474
474
|
var query = {providerId : issuer, subject: profile.id};
|
475
475
|
winston.debug("query", query)
|
package/models/kb_setting.js
CHANGED
@@ -31,19 +31,12 @@ var KBSchema = new Schema({
|
|
31
31
|
type: String,
|
32
32
|
required: false
|
33
33
|
},
|
34
|
-
createdAt: {
|
35
|
-
type: Date,
|
36
|
-
default: Date.now,
|
37
|
-
},
|
38
|
-
updatedAt: {
|
39
|
-
type: Date,
|
40
|
-
default: Date.now
|
41
|
-
},
|
42
34
|
status: {
|
43
35
|
type: Number,
|
44
|
-
required: false
|
45
|
-
default: -1
|
36
|
+
required: false
|
46
37
|
}
|
38
|
+
}, {
|
39
|
+
timestamps: true
|
47
40
|
})
|
48
41
|
|
49
42
|
var KBSettingSchema = new Schema({
|
@@ -64,9 +57,11 @@ var KBSettingSchema = new Schema({
|
|
64
57
|
type: Number,
|
65
58
|
default: 1000
|
66
59
|
},
|
67
|
-
kbs: [
|
60
|
+
kbs: [KBSchema]
|
68
61
|
});
|
69
62
|
|
63
|
+
KBSchema.index({ createdAt: -1, updatedAt: -1 })
|
64
|
+
|
70
65
|
|
71
66
|
//module.exports = mongoose.model('KBSettings', KBSettingSchema);
|
72
67
|
const KBSettings = mongoose.model('KBSettings', KBSettingSchema);
|
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.5.
|
4
|
+
"version": "2.5.2",
|
5
5
|
"scripts": {
|
6
6
|
"start": "node ./bin/www",
|
7
7
|
"pretest": "mongodb-runner start",
|
@@ -37,15 +37,15 @@
|
|
37
37
|
},
|
38
38
|
"dependencies": {
|
39
39
|
"@tiledesk/tiledesk-apps": "^1.0.17",
|
40
|
-
"@tiledesk/tiledesk-chat21-app": "^1.1.
|
40
|
+
"@tiledesk/tiledesk-chat21-app": "^1.1.8",
|
41
41
|
"@tiledesk/tiledesk-chatbot-util": "^0.8.33",
|
42
42
|
"@tiledesk/tiledesk-dialogflow-connector": "^1.8.4",
|
43
43
|
"@tiledesk/tiledesk-json-rules-engine": "^4.0.3",
|
44
44
|
"@tiledesk/tiledesk-kaleyra-proxy": "^0.1.7",
|
45
|
-
"@tiledesk/tiledesk-messenger-connector": "^0.1.
|
45
|
+
"@tiledesk/tiledesk-messenger-connector": "^0.1.18",
|
46
46
|
"@tiledesk/tiledesk-rasa-connector": "^1.0.10",
|
47
47
|
"@tiledesk/tiledesk-telegram-connector": "^0.1.10",
|
48
|
-
"@tiledesk/tiledesk-tybot-connector": "^0.2.
|
48
|
+
"@tiledesk/tiledesk-tybot-connector": "^0.2.56",
|
49
49
|
"@tiledesk/tiledesk-whatsapp-connector": "^0.1.63",
|
50
50
|
"@tiledesk/tiledesk-whatsapp-jobworker": "^0.0.7",
|
51
51
|
"@tiledesk/tiledesk-chatbot-templates": "^0.1.2",
|
@@ -150,6 +150,16 @@ function startWorker() {
|
|
150
150
|
winston.info("Data queue", oka)
|
151
151
|
});
|
152
152
|
|
153
|
+
ch.bindQueue(_ok.queue, exchange, "request_participants_join", {}, function(err3, oka) {
|
154
|
+
winston.info("Queue bind: "+_ok.queue+ " err: "+err3+ " key: request_participants_join");
|
155
|
+
winston.info("Data queue", oka)
|
156
|
+
});
|
157
|
+
|
158
|
+
ch.bindQueue(_ok.queue, exchange, "request_participants_leave", {}, function(err3, oka) {
|
159
|
+
winston.info("Queue bind: "+_ok.queue+ " err: "+err3+ " key: request_participants_leave");
|
160
|
+
winston.info("Data queue", oka)
|
161
|
+
});
|
162
|
+
|
153
163
|
ch.bindQueue(_ok.queue, exchange, "request_update", {}, function(err3, oka) {
|
154
164
|
winston.info("Queue bind: "+_ok.queue+ " err: "+err3+ " key: request_update");
|
155
165
|
winston.info("Data queue", oka)
|
@@ -230,6 +240,19 @@ function work(msg, cb) {
|
|
230
240
|
// requestEvent.emit('request.update.queue', msg.content);
|
231
241
|
requestEvent.emit('request.update.preflight.queue', JSON.parse(message_string));
|
232
242
|
}
|
243
|
+
|
244
|
+
if (topic === 'request_participants_join') {
|
245
|
+
winston.debug("reconnect here topic:" + topic);
|
246
|
+
// requestEvent.emit('request.update.queue', msg.content);
|
247
|
+
requestEvent.emit('request.participants.join.queue', JSON.parse(message_string));
|
248
|
+
}
|
249
|
+
|
250
|
+
|
251
|
+
if (topic === 'request_participants_leave') {
|
252
|
+
winston.debug("reconnect here topic:" + topic);
|
253
|
+
// requestEvent.emit('request.update.queue', msg.content);
|
254
|
+
requestEvent.emit('request.participants.leave.queue', JSON.parse(message_string));
|
255
|
+
}
|
233
256
|
|
234
257
|
if (topic === 'request_participants_update') {
|
235
258
|
winston.debug("reconnect here topic:" + topic);
|
@@ -312,8 +335,19 @@ function listen() {
|
|
312
335
|
});
|
313
336
|
});
|
314
337
|
|
338
|
+
requestEvent.on('request.participants.join', function(request) {
|
339
|
+
setImmediate(() => {
|
340
|
+
publish(exchange, "request_participants_join", Buffer.from(JSON.stringify(request)));
|
341
|
+
winston.debug("reconnect participants.join published")
|
342
|
+
});
|
343
|
+
});
|
315
344
|
|
316
|
-
|
345
|
+
requestEvent.on('request.participants.leave', function(request) {
|
346
|
+
setImmediate(() => {
|
347
|
+
publish(exchange, "request_participants_leave", Buffer.from(JSON.stringify(request)));
|
348
|
+
winston.debug("reconnect participants.leave published")
|
349
|
+
});
|
350
|
+
});
|
317
351
|
|
318
352
|
requestEvent.on('request.participants.update', function(request) {
|
319
353
|
setImmediate(() => {
|
@@ -41,13 +41,14 @@ class Listener {
|
|
41
41
|
|
42
42
|
|
43
43
|
updateProjectUser(id_user, id_project, operation) {
|
44
|
-
winston.debug("Route queue updateProjectUser start");
|
44
|
+
winston.debug("Route queue updateProjectUser start operation: " +operation+ "id_user "+ id_user + " id_project " + id_project );
|
45
45
|
return Project_user
|
46
46
|
.findOneAndUpdate({id_user: id_user, id_project: id_project}, {$inc : {'number_assigned_requests' : operation}}, {new: true, upsert:false}, function(err, updatedPU) {
|
47
47
|
if (err) {
|
48
48
|
return winston.error(err);
|
49
49
|
}
|
50
50
|
winston.debug("Route queue number_assigned_requests +1 :" + updatedPU.id);
|
51
|
+
winston.debug("Route queue number_assigned_requests +1 :" + updatedPU.id);
|
51
52
|
|
52
53
|
updatedPU.populate({path:'id_user', select:{'firstname':1, 'lastname':1}},function (err, updatedProject_userPopulated){
|
53
54
|
|
@@ -77,7 +78,10 @@ class Listener {
|
|
77
78
|
if (request.participatingAgents.length>0) {
|
78
79
|
request.participatingAgents.forEach(user => {
|
79
80
|
winston.debug("request.participatingAgents user",user); //it is a user and not a project_user
|
80
|
-
|
81
|
+
var userid = user.id || user._id;
|
82
|
+
winston.debug("updateParticipatingProjectUsers userid: "+userid);
|
83
|
+
|
84
|
+
this.updateProjectUser(userid, request.id_project, operation);
|
81
85
|
});
|
82
86
|
}
|
83
87
|
}
|
package/routes/kb.js
CHANGED
@@ -8,16 +8,103 @@ const openaiService = require('../services/openaiService');
|
|
8
8
|
router.get('/', async (req, res) => {
|
9
9
|
|
10
10
|
let project_id = req.projectid;
|
11
|
+
let status;
|
12
|
+
let limit = 200;
|
13
|
+
let page = 0;
|
14
|
+
let direction = -1;
|
15
|
+
let sortField = "updatedAt";
|
16
|
+
let text;
|
17
|
+
|
18
|
+
let query = {};
|
19
|
+
query["id_project"] = project_id;
|
20
|
+
|
21
|
+
if (req.query.status) {
|
22
|
+
status = parseInt(req.query.status);
|
23
|
+
query["status"] = status;
|
24
|
+
winston.debug("Get kb status: " + status)
|
25
|
+
}
|
26
|
+
if (req.query.limit) {
|
27
|
+
limit = parseInt(req.query.limit);
|
28
|
+
winston.debug("Get kb limit: " + limit)
|
29
|
+
}
|
30
|
+
|
31
|
+
if (req.query.page) {
|
32
|
+
page = parseInt(req.query.page);
|
33
|
+
winston.debug("Get kb page: " + page)
|
34
|
+
}
|
35
|
+
|
36
|
+
let skip = page * limit;
|
37
|
+
winston.debug("Get kb skip page: " + skip);
|
38
|
+
|
39
|
+
if (req.query.direction) {
|
40
|
+
direction = parseInt(req.query.direction)
|
41
|
+
winston.debug("Get kb direction: " + direction)
|
42
|
+
}
|
43
|
+
|
44
|
+
if (req.query.sortField) {
|
45
|
+
sortField = req.query.sortField;
|
46
|
+
winston.debug("Get kb sortField: " + sortField)
|
47
|
+
}
|
48
|
+
|
49
|
+
if (req.query.search) {
|
50
|
+
text = req.query.search;
|
51
|
+
query['source'] = new RegExp(text);
|
52
|
+
winston.debug("Get kb text: " + text);
|
53
|
+
}
|
54
|
+
|
55
|
+
let sortQuery = {};
|
56
|
+
sortQuery[sortField] = direction;
|
57
|
+
winston.debug("Get kb sortQuery: " + sortQuery);
|
58
|
+
|
59
|
+
KB.countDocuments(query, (err, kbs_count) => {
|
60
|
+
if (err) {
|
61
|
+
winston.error("Find all kbs error: ", err);
|
62
|
+
}
|
63
|
+
winston.debug("KBs count: ", kbs_count);
|
64
|
+
|
65
|
+
KB.find(query)
|
66
|
+
.skip(skip)
|
67
|
+
.limit(limit)
|
68
|
+
.sort(sortQuery)
|
69
|
+
.exec((err, kbs) => {
|
70
|
+
if (err) {
|
71
|
+
winston.error("Find all kbs error: ", err);
|
72
|
+
return res.status(500).send({ success: false, error: err });
|
73
|
+
}
|
74
|
+
|
75
|
+
winston.debug("KBs found: ", kbs);
|
76
|
+
|
77
|
+
let response = {
|
78
|
+
count: kbs_count,
|
79
|
+
query: {},
|
80
|
+
kbs: kbs
|
81
|
+
}
|
82
|
+
if (status) {
|
83
|
+
response.query.status = status;
|
84
|
+
}
|
85
|
+
if (limit) {
|
86
|
+
response.query.limit = limit;
|
87
|
+
}
|
88
|
+
if (status) {
|
89
|
+
response.query.page = page;
|
90
|
+
}
|
91
|
+
if (sortField) {
|
92
|
+
response.query.sortField = sortField;
|
93
|
+
}
|
94
|
+
if (direction) {
|
95
|
+
response.query.direction = direction;
|
96
|
+
}
|
97
|
+
if (text) {
|
98
|
+
response.query.search = text;
|
99
|
+
}
|
100
|
+
|
101
|
+
|
102
|
+
return res.status(200).send(response);
|
103
|
+
})
|
104
|
+
|
105
|
+
})
|
11
106
|
|
12
|
-
KB.find({ id_project: project_id }, (err, kbs) => {
|
13
|
-
if (err) {
|
14
|
-
winston.error("Find all kbs error: ", err);
|
15
|
-
return res.status(500).send({ success: false, error: err });
|
16
|
-
}
|
17
107
|
|
18
|
-
winston.debug("KBs found: ", kbs);
|
19
|
-
return res.status(200).send(kbs);
|
20
|
-
})
|
21
108
|
})
|
22
109
|
|
23
110
|
router.get('/:kb_id', async (req, res) => {
|
@@ -46,7 +133,8 @@ router.post('/', async (req, res) => {
|
|
46
133
|
type: body.type,
|
47
134
|
source: body.source,
|
48
135
|
content: body.content,
|
49
|
-
namespace: body.namespace
|
136
|
+
namespace: body.namespace,
|
137
|
+
status: -1
|
50
138
|
}
|
51
139
|
if (!new_kb.namespace) {
|
52
140
|
new_kb.namespace = project_id;
|
@@ -101,7 +189,6 @@ router.put('/:kb_id', async (req, res) => {
|
|
101
189
|
update.status = req.body.status;
|
102
190
|
}
|
103
191
|
|
104
|
-
update.updatedAt = new Date();
|
105
192
|
winston.debug("kb update: ", update);
|
106
193
|
|
107
194
|
KB.findByIdAndUpdate(kb_id, update, { new: true }, (err, savedKb) => {
|
package/routes/request.js
CHANGED
@@ -802,7 +802,7 @@ router.delete('/:requestid', function (req, res) {
|
|
802
802
|
});
|
803
803
|
|
804
804
|
|
805
|
-
Request.
|
805
|
+
Request.findOneAndDelete({ request_id: req.params.requestid }, function (err, request) {
|
806
806
|
if (err) {
|
807
807
|
winston.error('--- > ERROR ', err);
|
808
808
|
return res.status(500).send({ success: false, msg: 'Error deleting object.' });
|
@@ -819,6 +819,24 @@ router.delete('/:requestid', function (req, res) {
|
|
819
819
|
res.json(request);
|
820
820
|
|
821
821
|
});
|
822
|
+
|
823
|
+
// Request.remove({ request_id: req.params.requestid }, function (err, request) {
|
824
|
+
// if (err) {
|
825
|
+
// winston.error('--- > ERROR ', err);
|
826
|
+
// return res.status(500).send({ success: false, msg: 'Error deleting object.' });
|
827
|
+
// }
|
828
|
+
|
829
|
+
// if (!request) {
|
830
|
+
// return res.status(404).send({ success: false, msg: 'Object not found.' });
|
831
|
+
// }
|
832
|
+
|
833
|
+
// winston.verbose('Request deleted with request_id: ' + req.params.requestid);
|
834
|
+
|
835
|
+
// requestEvent.emit('request.delete', request);
|
836
|
+
|
837
|
+
// res.json(request);
|
838
|
+
|
839
|
+
// });
|
822
840
|
});
|
823
841
|
|
824
842
|
|
package/test/kbRoute.js
CHANGED
@@ -73,6 +73,98 @@ describe('KbRoute', () => {
|
|
73
73
|
|
74
74
|
});
|
75
75
|
|
76
|
+
it('getWithQueries', (done) => {
|
77
|
+
|
78
|
+
var email = "test-signup-" + Date.now() + "@email.com";
|
79
|
+
var pwd = "pwd";
|
80
|
+
|
81
|
+
userService.signup(email, pwd, "Test Firstname", "Test lastname").then(function (savedUser) {
|
82
|
+
projectService.create("test-faqkb-create", savedUser._id).then(function (savedProject) {
|
83
|
+
|
84
|
+
let kb1 = {
|
85
|
+
name: "example_name1",
|
86
|
+
type: "url",
|
87
|
+
source: "https://www.exampleurl1.com",
|
88
|
+
content: ""
|
89
|
+
}
|
90
|
+
|
91
|
+
let kb2 = {
|
92
|
+
name: "example_name2",
|
93
|
+
type: "text",
|
94
|
+
source: "example_name2",
|
95
|
+
content: "example content"
|
96
|
+
}
|
97
|
+
|
98
|
+
let kb3 = {
|
99
|
+
name: "example_name3",
|
100
|
+
type: "url",
|
101
|
+
source: "https://www.exampleurl3.com",
|
102
|
+
content: ""
|
103
|
+
}
|
104
|
+
|
105
|
+
chai.request(server)
|
106
|
+
.post('/' + savedProject._id + "/kb")
|
107
|
+
.auth(email, pwd)
|
108
|
+
.send(kb1)
|
109
|
+
.end((err, res) => {
|
110
|
+
if (log) { console.log("create kb res.body: ", res.body); }
|
111
|
+
res.should.have.status(200);
|
112
|
+
|
113
|
+
setTimeout(() => {
|
114
|
+
chai.request(server)
|
115
|
+
.post('/' + savedProject._id + "/kb")
|
116
|
+
.auth(email, pwd)
|
117
|
+
.send(kb2)
|
118
|
+
.end((err, res) => {
|
119
|
+
if (log) { console.log("create kb res.body: ", res.body); }
|
120
|
+
res.should.have.status(200);
|
121
|
+
|
122
|
+
setTimeout(() => {
|
123
|
+
chai.request(server)
|
124
|
+
.post('/' + savedProject._id + "/kb")
|
125
|
+
.auth(email, pwd)
|
126
|
+
.send(kb3)
|
127
|
+
.end((err, res) => {
|
128
|
+
if (log) { console.log("create kb res.body: ", res.body); }
|
129
|
+
res.should.have.status(200);
|
130
|
+
|
131
|
+
let query = "?status=-1&limit=5&page=0&direction=-1&sortField=updatedAt&search=example";
|
132
|
+
//let query = "";
|
133
|
+
console.log("query: ", query);
|
134
|
+
|
135
|
+
chai.request(server)
|
136
|
+
.get('/' + savedProject._id + "/kb" + query)
|
137
|
+
.auth(email, pwd)
|
138
|
+
.end((err, res) => {
|
139
|
+
console.log("getall res.body: ", res.body);
|
140
|
+
res.should.have.status(200);
|
141
|
+
res.body.should.be.a('object');
|
142
|
+
res.body.kbs.should.be.a('array');
|
143
|
+
expect(res.body.kbs.length).to.equal(3);
|
144
|
+
expect(res.body.count).to.equal(3);
|
145
|
+
res.body.query.should.be.a('object');
|
146
|
+
expect(res.body.query.status).to.equal(-1);
|
147
|
+
expect(res.body.query.limit).to.equal(5);
|
148
|
+
expect(res.body.query.page).to.equal(0);
|
149
|
+
expect(res.body.query.direction).to.equal(-1);
|
150
|
+
expect(res.body.query.sortField).to.equal("updatedAt");
|
151
|
+
expect(res.body.query.search).to.equal("example");
|
152
|
+
|
153
|
+
done();
|
154
|
+
|
155
|
+
})
|
156
|
+
|
157
|
+
})
|
158
|
+
}, 1000)
|
159
|
+
})
|
160
|
+
}, 1000)
|
161
|
+
|
162
|
+
|
163
|
+
})
|
164
|
+
})
|
165
|
+
})
|
166
|
+
}).timeout(20000)
|
167
|
+
|
76
168
|
it('scrapeSingle', (done) => {
|
77
169
|
|
78
170
|
var email = "test-signup-" + Date.now() + "@email.com";
|