@tiledesk/tiledesk-server 2.3.36 → 2.3.38
Sign up to get free protection for your applications and to get access to all the features.
- package/.github/workflows/docker-community-worker-push-latest.yml +23 -0
- package/.github/workflows/docker-image-tag-worker-community-tag-push.yml +22 -0
- package/CHANGELOG.md +6 -0
- package/Dockerfile-jobs +31 -0
- package/app.js +12 -2
- package/channels/chat21/chat21Handler.js +19 -3
- package/jobs.js +80 -0
- package/jobsManager.js +47 -0
- package/models/faq.js +5 -1
- package/package.json +1 -1
- package/pubmodules/activities/activityArchiver.js +197 -90
- package/pubmodules/emailNotification/requestNotification.js +16 -15
- package/pubmodules/events/eventRoute.js +3 -0
- package/pubmodules/pubModulesManager.js +5 -5
- package/pubmodules/queue/reconnect.js +96 -12
- package/pubmodules/queue/reconnectFanout.js +18 -12
- package/pubmodules/trigger/rulesTrigger.js +7 -1
- package/routes/faq.js +5 -1
- package/routes/faq_kb.js +131 -5
- package/routes/users-util.js +9 -1
- package/services/emailService.js +1 -1
- package/services/faqService.js +15 -0
- package/services/geoService.js +5 -5
- package/services/requestService.js +1 -0
- package/test/example-json.txt +1 -0
- package/test/faqRoute.js +47 -99
- package/test/faqkbRoute.js +204 -66
package/test/faqRoute.js
CHANGED
@@ -11,6 +11,8 @@ let chaiHttp = require('chai-http');
|
|
11
11
|
let server = require('../app');
|
12
12
|
let should = chai.should();
|
13
13
|
var fs = require('fs');
|
14
|
+
const path = require('path');
|
15
|
+
|
14
16
|
|
15
17
|
// chai.config.includeStack = true;
|
16
18
|
|
@@ -69,128 +71,74 @@ describe('FaqKBRoute', () => {
|
|
69
71
|
|
70
72
|
|
71
73
|
});
|
72
|
-
|
74
|
+
});
|
73
75
|
|
74
76
|
});
|
75
77
|
|
76
|
-
it('create with
|
78
|
+
it('create with form (createFaqKb function)', (done) => {
|
79
|
+
|
80
|
+
|
81
|
+
// this.timeout();
|
77
82
|
|
78
83
|
var email = "test-signup-" + Date.now() + "@email.com";
|
79
84
|
var pwd = "pwd";
|
80
|
-
|
81
|
-
|
82
|
-
|
85
|
+
let example_form = {
|
86
|
+
fields: [
|
87
|
+
{
|
88
|
+
name: "userFullname",
|
89
|
+
type: "text",
|
90
|
+
label: "What is your name?"
|
91
|
+
},
|
92
|
+
{
|
93
|
+
name: "userEmail",
|
94
|
+
type: "text",
|
95
|
+
regex: "/^(?=.{1,254}$)(?=.{1,64}@)[-!#$%&'+/0-9=?A-Z^_`a-z{|}~]+(.[-!#$%&'+/0-9=?A-Z^_`a-z{|}~]+)*@[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?(.[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?)+$/",
|
96
|
+
label: "Your email?",
|
97
|
+
errorLabel: "This email address is invalid\n\nCan you insert a correct email address?"
|
98
|
+
}
|
99
|
+
]
|
100
|
+
}
|
101
|
+
|
102
|
+
userService.signup(email, pwd, "Test Firstname", "Test lastname").then(function (savedUser) {
|
103
|
+
projectService.create("test-faqkb-create", savedUser._id).then(function (savedProject) {
|
83
104
|
|
84
105
|
chai.request(server)
|
85
|
-
.post('/'+ savedProject._id + '/faq_kb')
|
106
|
+
.post('/' + savedProject._id + '/faq_kb')
|
86
107
|
.auth(email, pwd)
|
87
|
-
.send({"name":"testbot", type: "
|
108
|
+
.send({ "name": "testbot", type: "external", language: 'fr' })
|
88
109
|
.end((err, res) => {
|
89
110
|
//console.log("res", res);
|
90
|
-
console.log("res.body",
|
111
|
+
console.log("res.body", res.body);
|
91
112
|
res.should.have.status(200);
|
92
113
|
res.body.should.be.a('object');
|
93
|
-
expect(res.body.name).to.equal("testbot");
|
114
|
+
expect(res.body.name).to.equal("testbot");
|
115
|
+
expect(res.body.language).to.equal("fr");
|
94
116
|
var id_faq_kb = res.body._id;
|
95
117
|
|
96
118
|
chai.request(server)
|
97
|
-
.
|
119
|
+
.post('/'+ savedProject._id + '/faq')
|
98
120
|
.auth(email, pwd)
|
121
|
+
.send({id_faq_kb: id_faq_kb, form: example_form})
|
99
122
|
.end((err, res) => {
|
100
|
-
console.log("
|
123
|
+
//console.log("res", res);
|
124
|
+
console.log("res.body", res.body);
|
101
125
|
res.should.have.status(200);
|
102
|
-
res.body.should.be.
|
103
|
-
|
126
|
+
res.body.should.be.a('object');
|
127
|
+
expect(res.body.id_faq_kb).to.equal(id_faq_kb);
|
128
|
+
expect(res.body.form).to.exist;
|
129
|
+
res.body.form.should.be.a('object');
|
130
|
+
expect(res.body.intent_display_name).to.not.equal(undefined);
|
131
|
+
expect(res.body.webhook_enabled).to.equal(false);
|
132
|
+
|
104
133
|
done();
|
105
|
-
|
106
|
-
})
|
107
|
-
|
108
|
-
|
109
|
-
|
134
|
+
});
|
110
135
|
});
|
111
|
-
})
|
112
|
-
})
|
113
|
-
})
|
114
|
-
|
115
|
-
|
116
|
-
it('create with template empty', (done) => {
|
117
|
-
|
118
|
-
|
119
|
-
// this.timeout();
|
120
|
-
|
121
|
-
var email = "test-signup-" + Date.now() + "@email.com";
|
122
|
-
var pwd = "pwd";
|
123
|
-
|
124
|
-
userService.signup( email ,pwd, "Test Firstname", "Test lastname").then(function(savedUser) {
|
125
|
-
projectService.create("test-faqkb-create", savedUser._id).then(function(savedProject) {
|
126
|
-
chai.request(server)
|
127
|
-
.post('/'+ savedProject._id + '/faq_kb')
|
128
|
-
.auth(email, pwd)
|
129
|
-
.send({"name":"testbot", type: "tilebot"})
|
130
|
-
.end((err, res) => {
|
131
|
-
//console.log("res", res);
|
132
|
-
console.log("res.body (faqkb)", res.body);
|
133
|
-
res.should.have.status(200);
|
134
|
-
res.body.should.be.a('object');
|
135
|
-
expect(res.body.name).to.equal("testbot");
|
136
|
-
expect(res.body.type).to.equal("tilebot");
|
137
|
-
var id_faq_kb = res.body._id;
|
138
136
|
|
139
|
-
chai.request(server)
|
140
|
-
.get('/' + savedProject._id + '/faq?id_faq_kb=' + id_faq_kb)
|
141
|
-
.auth(email, pwd)
|
142
|
-
.end((err, res) => {
|
143
|
-
console.log("faq_list: ", res.body);
|
144
|
-
res.should.have.status(200);
|
145
|
-
res.body.should.be.an('array').that.is.empty;
|
146
|
-
|
147
|
-
var reply_example = {
|
148
|
-
type: "text",
|
149
|
-
text: "Hello with buttons",
|
150
|
-
attributes: {
|
151
|
-
attachment: {
|
152
|
-
type:"template",
|
153
|
-
buttons: [
|
154
|
-
{
|
155
|
-
type: "text",
|
156
|
-
value: "REPLY ONE"
|
157
|
-
},
|
158
|
-
{
|
159
|
-
type: "text",
|
160
|
-
value: "REPLY TWO"
|
161
|
-
}
|
162
|
-
]
|
163
|
-
}
|
164
|
-
}
|
165
|
-
}
|
166
|
-
|
167
|
-
chai.request(server)
|
168
|
-
.post('/'+ savedProject._id + '/faq')
|
169
|
-
.auth(email, pwd)
|
170
|
-
.send({id_faq_kb: id_faq_kb, question: "question1", reply: reply_example })
|
171
|
-
.end((err, res) => {
|
172
|
-
//console.log("res", res);
|
173
|
-
console.log("res.body (faq reply)", res.body);
|
174
|
-
res.should.have.status(200);
|
175
|
-
res.body.should.be.a('object');
|
176
|
-
res.body.reply.should.be.a('object');
|
177
|
-
expect(res.body.id_faq_kb).to.equal(id_faq_kb);
|
178
|
-
expect(res.body.question).to.equal("question1");
|
179
|
-
expect(res.body.reply.type).to.equal(reply_example.type);
|
180
|
-
expect(res.body.reply.text).to.equal(reply_example.text);
|
181
|
-
expect(res.body.intent_display_name).to.not.equal(undefined);
|
182
|
-
expect(res.body.webhook_enabled).to.equal(false);
|
183
|
-
|
184
|
-
done();
|
185
|
-
});
|
186
137
|
|
187
|
-
})
|
188
|
-
});
|
189
|
-
});
|
190
138
|
});
|
191
|
-
|
192
|
-
|
139
|
+
});
|
193
140
|
|
141
|
+
}).timeout(20000);
|
194
142
|
|
195
143
|
|
196
144
|
|
@@ -394,7 +342,7 @@ describe('FaqKBRoute', () => {
|
|
394
342
|
.post('/'+ savedProject._id + '/faq/uploadcsv')
|
395
343
|
.auth(email, pwd)
|
396
344
|
.set('Content-Type', 'text/csv')
|
397
|
-
.attach('uploadFile', fs.readFileSync(path.resolve(__dirname,'./example-faqs.csv')))
|
345
|
+
.attach('uploadFile', fs.readFileSync(path.resolve(__dirname, './example-faqs.csv')), 'example-faqs.csv')
|
398
346
|
.field('id_faq_kb', id_faq_kb)
|
399
347
|
.field('delimiter', ';')
|
400
348
|
// .send({id_faq_kb: id_faq_kb})
|
@@ -448,7 +396,7 @@ describe('FaqKBRoute', () => {
|
|
448
396
|
.post('/'+ savedProject._id + '/faq/uploadcsv')
|
449
397
|
.auth(email, pwd)
|
450
398
|
.set('Content-Type', 'text/csv')
|
451
|
-
.attach('uploadFile', fs.readFileSync(path.resolve(__dirname, './example-faqs.csv')))
|
399
|
+
.attach('uploadFile', fs.readFileSync(path.resolve(__dirname, './example-faqs.csv')), 'example-faqs.csv')
|
452
400
|
.field('id_faq_kb', id_faq_kb)
|
453
401
|
.field('delimiter', ';')
|
454
402
|
// .send({id_faq_kb: id_faq_kb})
|
package/test/faqkbRoute.js
CHANGED
@@ -6,11 +6,15 @@ var projectService = require('../services/projectService');
|
|
6
6
|
var userService = require('../services/userService');
|
7
7
|
var faqService = require('../services/faqService');
|
8
8
|
|
9
|
+
|
10
|
+
|
9
11
|
//Require the dev-dependencies
|
10
12
|
let chai = require('chai');
|
11
13
|
let chaiHttp = require('chai-http');
|
12
14
|
let server = require('../app');
|
13
15
|
let should = chai.should();
|
16
|
+
var fs = require('fs');
|
17
|
+
const path = require('path');
|
14
18
|
|
15
19
|
// chai.config.includeStack = true;
|
16
20
|
|
@@ -21,104 +25,238 @@ chai.use(chaiHttp);
|
|
21
25
|
|
22
26
|
describe('FaqKBRoute', () => {
|
23
27
|
|
24
|
-
|
25
|
-
|
26
|
-
|
28
|
+
describe('/create', () => {
|
29
|
+
|
27
30
|
|
28
|
-
|
31
|
+
it('create', (done) => {
|
29
32
|
|
30
|
-
|
31
|
-
// this.timeout();
|
32
33
|
|
33
|
-
|
34
|
-
var pwd = "pwd";
|
34
|
+
// this.timeout();
|
35
35
|
|
36
|
-
|
37
|
-
|
36
|
+
var email = "test-signup-" + Date.now() + "@email.com";
|
37
|
+
var pwd = "pwd";
|
38
|
+
|
39
|
+
userService.signup(email, pwd, "Test Firstname", "Test lastname").then(function (savedUser) {
|
40
|
+
projectService.create("test-faqkb-create", savedUser._id).then(function (savedProject) {
|
38
41
|
chai.request(server)
|
39
|
-
.post('/'+ savedProject._id + '/faq_kb')
|
42
|
+
.post('/' + savedProject._id + '/faq_kb')
|
40
43
|
.auth(email, pwd)
|
41
|
-
.send({"name":"testbot", type: "external", language: 'fr'})
|
44
|
+
.send({ "name": "testbot", type: "external", language: 'fr' })
|
42
45
|
.end((err, res) => {
|
43
46
|
//console.log("res", res);
|
44
|
-
console.log("res.body",
|
47
|
+
console.log("res.body", res.body);
|
45
48
|
res.should.have.status(200);
|
46
49
|
res.body.should.be.a('object');
|
47
|
-
expect(res.body.name).to.equal("testbot");
|
48
|
-
expect(res.body.language).to.equal("fr");
|
49
|
-
|
50
|
+
expect(res.body.name).to.equal("testbot");
|
51
|
+
expect(res.body.language).to.equal("fr");
|
52
|
+
|
50
53
|
done();
|
51
54
|
});
|
52
55
|
|
53
|
-
|
54
|
-
});
|
56
|
+
|
55
57
|
});
|
56
|
-
|
57
|
-
|
58
|
+
});
|
59
|
+
|
60
|
+
}).timeout(20000);
|
61
|
+
|
62
|
+
|
63
|
+
it('create with template example', (done) => {
|
64
|
+
|
65
|
+
var email = "test-signup-" + Date.now() + "@email.com";
|
66
|
+
var pwd = "pwd";
|
67
|
+
|
68
|
+
userService.signup(email, pwd, "Test Firstname", "Test Lastname").then((savedUser) => {
|
69
|
+
projectService.create("test-faqkb-create", savedUser._id).then((savedProject) => {
|
70
|
+
|
71
|
+
chai.request(server)
|
72
|
+
.post('/'+ savedProject._id + '/faq_kb')
|
73
|
+
.auth(email, pwd)
|
74
|
+
.send({"name":"testbot", type: "internal", template: "example" })
|
75
|
+
.end((err, res) => {
|
76
|
+
//console.log("res", res);
|
77
|
+
console.log("res.body", res.body);
|
78
|
+
res.should.have.status(200);
|
79
|
+
res.body.should.be.a('object');
|
80
|
+
expect(res.body.name).to.equal("testbot");
|
81
|
+
var id_faq_kb = res.body._id;
|
82
|
+
|
83
|
+
chai.request(server)
|
84
|
+
.get('/' + savedProject._id + '/faq?id_faq_kb=' + id_faq_kb)
|
85
|
+
.auth(email, pwd)
|
86
|
+
.end((err, res) => {
|
87
|
+
console.log("faq_list: ", res.body);
|
88
|
+
res.should.have.status(200);
|
89
|
+
res.body.should.be.an('array').that.is.not.empty;
|
90
|
+
|
91
|
+
done();
|
92
|
+
|
93
|
+
})
|
94
|
+
|
95
|
+
|
96
|
+
|
97
|
+
});
|
98
|
+
})
|
99
|
+
})
|
100
|
+
})
|
101
|
+
|
102
|
+
it('import json', (done) => {
|
58
103
|
|
104
|
+
var email = "test-signup-" + Date.now() + "@email.com";
|
105
|
+
var pwd = "pwd";
|
59
106
|
|
107
|
+
userService.signup(email, pwd, "Test Firstname", "Test lastname").then(function (savedUser) {
|
108
|
+
projectService.create("test-faqkb-create", savedUser._id).then(function (savedProject) {
|
109
|
+
|
110
|
+
chai.request(server)
|
111
|
+
.post('/' + savedProject._id + '/faq_kb')
|
112
|
+
.auth(email, pwd)
|
113
|
+
.send({ "name": "testbot", type: "internal", language: 'fr' })
|
114
|
+
.end((err, res) => {
|
115
|
+
console.log("res.body: ", res.body);
|
116
|
+
res.should.have.status(200);
|
117
|
+
res.body.should.be.a('object');
|
118
|
+
expect(res.body.name).to.equal("testbot");
|
119
|
+
expect(res.body.language).to.equal("fr");
|
120
|
+
let id_faq_kb = res.body._id;
|
60
121
|
|
122
|
+
chai.request(server)
|
123
|
+
.post('/' + savedProject._id + '/faq_kb/importjson/' + id_faq_kb)
|
124
|
+
.auth(email, pwd)
|
125
|
+
.set('Content-Type', 'text/plain')
|
126
|
+
.attach('uploadFile', fs.readFileSync(path.resolve(__dirname, './example-json.txt')), 'example-json.txt')
|
127
|
+
.end((err, res) => {
|
128
|
+
console.log("import json res: ", res.body);
|
129
|
+
res.should.have.status(200);
|
130
|
+
res.should.be.a('object');
|
131
|
+
expect(res.body.name).to.equal("examplebot");
|
132
|
+
expect(res.body.language).to.equal("en");
|
61
133
|
|
134
|
+
chai.request(server)
|
135
|
+
.get('/' + savedProject._id + '/faq?id_faq_kb=' + id_faq_kb)
|
136
|
+
.auth(email, pwd)
|
137
|
+
.end((err, res) => {
|
138
|
+
console.log("faq_list: ", res.body);
|
139
|
+
res.should.have.status(200);
|
140
|
+
res.body.should.be.an('array').that.is.not.empty;
|
141
|
+
|
142
|
+
done();
|
143
|
+
|
144
|
+
})
|
145
|
+
})
|
146
|
+
})
|
147
|
+
})
|
148
|
+
})
|
149
|
+
})
|
62
150
|
|
63
151
|
|
152
|
+
it('export json', (done) => {
|
64
153
|
|
65
|
-
// mocha test/faqkbRoute.js --grep 'train'
|
66
|
-
it('train', (done) => {
|
67
154
|
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
155
|
+
// this.timeout();
|
156
|
+
|
157
|
+
var email = "test-signup-" + Date.now() + "@email.com";
|
158
|
+
var pwd = "pwd";
|
159
|
+
|
160
|
+
userService.signup(email, pwd, "Test Firstname", "Test lastname").then(function (savedUser) {
|
161
|
+
projectService.create("test-faqkb-create", savedUser._id).then(function (savedProject) {
|
162
|
+
|
163
|
+
chai.request(server)
|
164
|
+
.post('/' + savedProject._id + '/faq_kb')
|
165
|
+
.auth(email, pwd)
|
166
|
+
.send({ "name": "testbot", type: "internal", template: "example", language: 'fr' })
|
167
|
+
.end((err, res) => {
|
168
|
+
//console.log("res", res);
|
169
|
+
console.log("res.body", res.body);
|
170
|
+
res.should.have.status(200);
|
171
|
+
res.body.should.be.a('object');
|
172
|
+
expect(res.body.name).to.equal("testbot");
|
173
|
+
expect(res.body.language).to.equal("fr");
|
174
|
+
let id_faq_kb = res.body._id;
|
175
|
+
console.log("res.body._id: ", res.body._id)
|
176
|
+
|
177
|
+
chai.request(server)
|
178
|
+
.get('/' + savedProject._id + '/faq?id_faq_kb=' + id_faq_kb)
|
179
|
+
.auth(email, pwd)
|
180
|
+
.end((err, res) => {
|
181
|
+
console.log("faq_list: ", res.body);
|
182
|
+
res.should.have.status(200);
|
183
|
+
res.body.should.be.an('array').that.is.not.empty;
|
184
|
+
|
185
|
+
chai.request(server)
|
186
|
+
.get('/' + savedProject._id + '/faq_kb/exportjson/' + id_faq_kb)
|
187
|
+
.auth(email, pwd)
|
188
|
+
.end((err, res) => {
|
189
|
+
console.log("export json res: ", res.body);
|
190
|
+
res.should.have.status(200);
|
191
|
+
//res.body.should.be.a('string');
|
192
|
+
|
193
|
+
done();
|
194
|
+
})
|
195
|
+
})
|
196
|
+
});
|
197
|
+
});
|
198
|
+
});
|
199
|
+
|
200
|
+
}).timeout(20000);
|
201
|
+
|
202
|
+
|
203
|
+
// mocha test/faqkbRoute.js --grep 'train'
|
204
|
+
it('train', (done) => {
|
205
|
+
|
206
|
+
|
207
|
+
// this.timeout();
|
208
|
+
|
209
|
+
var email = "test-signup-" + Date.now() + "@email.com";
|
210
|
+
var pwd = "pwd";
|
211
|
+
|
212
|
+
userService.signup(email, pwd, "Test Firstname", "Test lastname").then(function (savedUser) {
|
213
|
+
projectService.create("test-faqkb-train", savedUser._id).then(function (savedProject) {
|
214
|
+
faqService.create("testbot", "http://54.228.177.1644", savedProject._id, savedUser._id).then(function (savedBot) {
|
77
215
|
|
78
216
|
var newFaq = new Faq({
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
217
|
+
id_faq_kb: savedBot._id,
|
218
|
+
question: "question1\nquestion2",
|
219
|
+
answer: "answer",
|
220
|
+
id_project: savedProject._id,
|
221
|
+
topic: "default",
|
222
|
+
createdBy: savedUser._id,
|
223
|
+
updatedBy: savedUser._id
|
86
224
|
});
|
87
|
-
|
225
|
+
|
88
226
|
newFaq.save(function (err, savedFaq) {
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
227
|
+
console.log("err", err);
|
228
|
+
console.log("savedFaq", savedFaq);
|
229
|
+
expect(savedBot.name).to.equal("testbot");
|
230
|
+
expect(savedBot.secret).to.not.equal(null);
|
231
|
+
|
232
|
+
chai.request(server)
|
233
|
+
.post('/' + savedProject._id + '/faq_kb/train')
|
234
|
+
.auth(email, pwd)
|
235
|
+
.send({ "id_faq_kb": savedBot._id })
|
236
|
+
.end((err, res) => {
|
237
|
+
//console.log("res", res);
|
238
|
+
console.log("res.body", res.body);
|
239
|
+
res.should.have.status(200);
|
240
|
+
res.body.should.be.a('object');
|
241
|
+
expect(res.body.train.nlu.intent).to.equal(savedBot.intent_display_name);
|
242
|
+
// expect(res.body.text).to.equal("addestramento avviato");
|
243
|
+
|
244
|
+
|
245
|
+
done();
|
246
|
+
});
|
247
|
+
|
248
|
+
|
249
|
+
});
|
112
250
|
});
|
113
|
-
});
|
251
|
+
});
|
114
252
|
});
|
115
253
|
}).timeout(20000);
|
116
|
-
|
117
|
-
|
118
254
|
|
119
255
|
|
120
256
|
|
121
|
-
|
257
|
+
|
258
|
+
|
259
|
+
});
|
122
260
|
|
123
261
|
});
|
124
262
|
|