@tiledesk/tiledesk-server 2.4.73 → 2.4.75

Sign up to get free protection for your applications and to get access to all the features.
package/CHANGELOG.md CHANGED
@@ -5,6 +5,9 @@
5
5
  🚀 IN PRODUCTION 🚀
6
6
  (https://www.npmjs.com/package/@tiledesk/tiledesk-server/v/2.3.77)
7
7
 
8
+ # 2.4.74
9
+ - update tiledesk-messenger-connector to 0.1.12
10
+
8
11
  # 2.4.73
9
12
  - Fix KB Settings bugs
10
13
 
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.73",
4
+ "version": "2.4.75",
5
5
  "scripts": {
6
6
  "start": "node ./bin/www",
7
7
  "pretest": "mongodb-runner start",
@@ -42,11 +42,11 @@
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.11",
46
45
  "@tiledesk/tiledesk-rasa-connector": "^1.0.10",
47
46
  "@tiledesk/tiledesk-tybot-connector": "^0.2.17",
48
47
  "@tiledesk/tiledesk-whatsapp-connector": "^0.1.52",
49
- "@tiledesk/tiledesk-telegram-connector": "^0.1.8",
48
+ "@tiledesk/tiledesk-messenger-connector": "^0.1.12",
49
+ "@tiledesk/tiledesk-telegram-connector": "^0.1.9",
50
50
  "amqplib": "^0.5.5",
51
51
  "app-root-path": "^3.0.0",
52
52
  "bcrypt-nodejs": "0.0.3",
package/routes/faq_kb.js CHANGED
@@ -15,7 +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
+ const trainingService = require('../services/trainingService');
19
19
 
20
20
  let chatbot_templates_api_url = process.env.CHATBOT_TEMPLATES_API_URL
21
21
 
@@ -130,10 +130,12 @@ router.post('/train', function (req, res) {
130
130
 
131
131
  });
132
132
 
133
- router.post('/train/:id_faq_kb', async (req, res) => {
134
- let id_faq_kb = req.params.id_faq_kb;
133
+ router.post('/aitrain/', async (req, res) => {
134
+
135
+ let id_faq_kb = req.body.id_faq_kb;
136
+ let webhook_enabled = req.body.webhook_enabled;
135
137
 
136
- Faq_kb.findById(id_faq_kb, (err, chatbot) => {
138
+ Faq_kb.findById(id_faq_kb, async (err, chatbot) => {
137
139
  if (err) {
138
140
  return res.status(400).send({ success: false, error: err })
139
141
  }
@@ -141,8 +143,29 @@ router.post('/train/:id_faq_kb', async (req, res) => {
141
143
  return res.status(404).send({ sucess: false, error: "Chatbot not found" });
142
144
  }
143
145
  if (chatbot.intentsEngine === 'tiledesk-ai') {
144
- faqBotEvent.emit('faq_train.train', id_faq_kb);
145
- return res.status(200).send({ success: true, message: "Training started"})
146
+
147
+ // Option 1: emit event
148
+ //faqBotEvent.emit('faq_train.train', id_faq_kb, webhook_enabled);
149
+
150
+ // Option 2: call service directly
151
+ trainingService.train(null, id_faq_kb, webhook_enabled).then((training_result) => {
152
+ winston.info("training result: ", training_result);
153
+ let response = {
154
+ succes: true,
155
+ message: "Training started"
156
+ }
157
+ if (webhook_enabled === false) {
158
+ response.queue_message = training_result;
159
+ }
160
+ return res.status(200).send(response);
161
+
162
+ }).catch((err) => {
163
+ winston.error("training error: ", err);
164
+ return res.status(200).send({ success: false, message: "Trained not started", error: err });
165
+ })
166
+
167
+
168
+
146
169
  } else {
147
170
  return res.status(200).send({ success: true, message: "Trained not started", reason: "Training available for intentsEngine equal to tiledesk-ai only" })
148
171
  }
@@ -1010,6 +1033,7 @@ router.get('/exportjson/:id_faq_kb', (req, res) => {
1010
1033
  router.post('/:faq_kbid/training', function (req, res) {
1011
1034
 
1012
1035
  winston.debug(req.body);
1036
+ winston.info(req.params.faq_kbid + "/training called" );
1013
1037
 
1014
1038
  var update = {};
1015
1039
  update.trained = true;
@@ -6,78 +6,97 @@ const axios = require("axios").default;
6
6
  var configGlobal = require('../config/global');
7
7
 
8
8
 
9
- let chatbot_training_api_url = "http://34.65.210.38/model/train"
9
+ let training_api_url = process.env.CHATBOT_TRAINING_API_URL || "http://34.65.210.38/model/enqueuetrain";
10
+ let token = process.env.TRAINING_BOT_JWT_TOKEN;
10
11
 
11
12
  class TrainingService {
12
13
 
13
14
 
14
- train(eventName, id_faq_kb) {
15
-
16
- Faq_kb.findById(id_faq_kb, (err, faq_kb) => {
17
-
18
- if (err) {
19
- winston.error("train error: ", err)
20
- return null;
21
- }
22
-
23
- if (!faq_kb) {
24
- winston.error("faq_kb is undefined");
25
- return null;
26
- }
27
-
28
- if (faq_kb.intentsEngine !== 'tiledesk-ai') {
29
- winston.debug("intentsEngine: off")
30
- return null;
31
- }
32
-
33
- winston.debug("intentsEngine: on")
34
- Faq.find({ id_faq_kb: id_faq_kb }, (err, faqs) => {
15
+ async train(eventName, id_faq_kb, webhook_enabled) {
35
16
 
17
+ return new Promise((resolve, reject) => {
18
+
19
+ Faq_kb.findById(id_faq_kb, (err, faq_kb) => {
20
+
36
21
  if (err) {
37
- winston.error("[Training] find all error: ", err);
38
- } else {
39
-
40
- let json = {
41
- "configuration": {
42
- "language": faq_kb.language,
43
- "pipeline":["lstm"]
44
- },
45
- "model": faq_kb._id,
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
51
- }
52
-
53
- faqs.forEach((f) => {
54
- if (f.enabled == true) {
55
- let intent = {
56
- "intent": f.intent_display_name,
57
- "examples": []
58
- }
59
- let questions = f.question.split("\n");
60
- intent.examples = questions;
61
- json.nlu.push(intent);
62
- }
63
- })
64
-
65
- winston.debug("training json: \n" + JSON.stringify(json, null, 2));
66
-
67
- axios({
68
- url: chatbot_training_api_url,
69
- headers: {
70
- 'Content-Type': 'application/json'
71
- },
72
- data: json,
73
- method: 'POST'
74
- }).then((resbody) => {
75
- winston.info("[Training] resbody: ", resbody.data);
76
- return true;
77
- }).catch((err) => {
78
- winston.error("[Training] error: ", err.response.data);
79
- })
22
+ winston.error("train error: ", err)
23
+ // return null;
24
+ reject(null);
25
+ }
26
+
27
+ if (!faq_kb) {
28
+ winston.error("faq_kb is undefined");
29
+ // return null;
30
+ reject(null);
80
31
  }
32
+
33
+ if (faq_kb.intentsEngine !== 'tiledesk-ai') {
34
+ winston.debug("intentsEngine: off")
35
+ // return null;
36
+ reject(null);
37
+ }
38
+
39
+ winston.debug("intentsEngine: on")
40
+ Faq.find({ id_faq_kb: id_faq_kb }, async (err, faqs) => {
41
+
42
+ if (err) {
43
+ winston.error("[Training] find all error: ", err);
44
+ } else {
45
+
46
+ let json = {
47
+ "configuration": {
48
+ "language": faq_kb.language,
49
+ "pipeline":["lstm"]
50
+ },
51
+ "model": faq_kb._id,
52
+ "nlu": [],
53
+ //"webhook_url": process.env.API_URL || configGlobal.apiUrl + "/" + faq_kb.id_project + "/bots/" + faq_kb._id+"/training",
54
+ // curl -v -X PUT -H 'Content-Type:application/json' -u admin@tiledesk.com:adminadmin -d '{"trained":false}' http://localhost:3000/63ed15febb8a5eb3b247fdfd/bots/64551b3422cdfb93ddb1b784
55
+ }
56
+
57
+ if (webhook_enabled === true) {
58
+ json.webhook_url = process.env.API_URL || configGlobal.apiUrl + "/" + faq_kb.id_project + "/bots/" + faq_kb._id+"/training"
59
+ }
60
+
61
+ faqs.forEach((f) => {
62
+ if (f.enabled == true) {
63
+ let intent = {
64
+ "intent": f.intent_display_name,
65
+ "examples": []
66
+ }
67
+ if (f.question) {
68
+ let questions = f.question.split("\n");
69
+ intent.examples = questions;
70
+ json.nlu.push(intent);
71
+ } else {
72
+ winston.debug("faq question null!")
73
+ }
74
+ }
75
+ })
76
+
77
+ winston.debug("training json: \n", json);
78
+
79
+ await axios({
80
+ url: training_api_url,
81
+ headers: {
82
+ 'Content-Type': 'application/json',
83
+ 'Authorization': token
84
+ },
85
+ data: json,
86
+ method: 'POST'
87
+ }).then((resbody) => {
88
+ winston.debug("[Training] resbody: ", resbody.data);
89
+ // return true;
90
+ resolve(resbody.data);
91
+ }).catch((err) => {
92
+ winston.error("[Training] error: ", err);
93
+ // return false;
94
+ reject(false);
95
+ // winston.error("[Training] error: ", err);
96
+ })
97
+ }
98
+ })
99
+
81
100
  })
82
101
 
83
102
  })
@@ -89,9 +108,9 @@ class TrainingService {
89
108
  start() {
90
109
  winston.info('TrainingService start');
91
110
 
92
- faqBotEvent.on('faq_train.train', (id_faq_kb) => {
111
+ faqBotEvent.on('faq_train.train', (id_faq_kb, webhook_enabled) => {
93
112
  setImmediate(() => {
94
- trainingService.train('faq_train.train', id_faq_kb);
113
+ trainingService.train('faq_train.train', id_faq_kb, webhook_enabled);
95
114
  })
96
115
  })
97
116
 
package/test/faqRoute.js CHANGED
@@ -28,7 +28,7 @@ describe('FaqKBRoute', () => {
28
28
 
29
29
  describe('/create', () => {
30
30
 
31
- it('create qwerty', (done) => {
31
+ it('create', (done) => {
32
32
 
33
33
  // this.timeout();
34
34
 
@@ -469,9 +469,7 @@ describe('FaqKBRoute', () => {
469
469
  .auth(email, pwd)
470
470
  .send({ "name": "testbot", type: "internal", template: "example" })
471
471
  .end((err, res) => {
472
- if (log) {
473
- console.log("res.body", res.body);
474
- }
472
+ if (log) { console.log("res.body", res.body); }
475
473
  res.should.have.status(200);
476
474
  res.body.should.be.a('object');
477
475
  expect(res.body.name).to.equal("testbot");
@@ -483,9 +481,7 @@ describe('FaqKBRoute', () => {
483
481
  .get('/' + savedProject._id + '/faq?id_faq_kb=' + id_faq_kb + "&page=0&limit=25&text=looking")
484
482
  .auth(email, pwd)
485
483
  .end((err, res) => {
486
- if (log) {
487
- console.log("found these faqs: \n", res.body);
488
- }
484
+ if (log) { console.log("found these faqs: \n", res.body); }
489
485
  res.should.have.status(200);
490
486
  res.body.should.be.an('array');
491
487
 
@@ -509,11 +505,9 @@ describe('FaqKBRoute', () => {
509
505
  chai.request(server)
510
506
  .post('/' + savedProject._id + '/faq_kb')
511
507
  .auth(email, pwd)
512
- .send({ "name": "testbot", type: "internal", template: "example", intentsEngine: 'tiledesk-ai' })
508
+ .send({ "name": "testbot", type: "internal", template: "blank", intentsEngine: 'tiledesk-ai' })
513
509
  .end((err, res) => {
514
- if (log) {
515
- console.log("res.body", res.body);
516
- }
510
+ if (log) { console.log("res.body", res.body); }
517
511
  res.should.have.status(200);
518
512
  res.body.should.be.a('object');
519
513
  expect(res.body.name).to.equal("testbot");
@@ -523,7 +517,7 @@ describe('FaqKBRoute', () => {
523
517
  chai.request(server)
524
518
  .post('/' + savedProject._id + '/faq')
525
519
  .auth(email, pwd)
526
- .send({ id_faq_kb: id_faq_kb, question: "question1", answer: "answer1" })
520
+ .send({ id_faq_kb: id_faq_kb, question: "question1\nciao\nbuongiorno", answer: "answer1" })
527
521
  .end((err, res) => {
528
522
  if (log) { console.log("intentEngin on resbody (create faq): \n", res.body); }
529
523
  res.should.have.status(200);
@@ -73,52 +73,52 @@ describe('FaqKBRoute', () => {
73
73
 
74
74
  }).timeout(20000);
75
75
 
76
- it('train with tiledesk-ai qwerty', (done) => {
77
- var email = "test-signup-" + Date.now() + "@email.com";
78
- var pwd = "pwd";
79
-
80
- userService.signup(email, pwd, "Test Firstname", "Test Lastname").then((savedUser) => {
81
- projectService.create("test-faqkb-create", savedUser._id).then((savedProject) => {
82
-
83
- chai.request(server)
84
- .post('/' + savedProject._id + '/faq_kb')
85
- .auth(email, pwd)
86
- .send({ "name": "testbot", type: "internal", template: "example", intentsEngine: "tiledesk-ai" })
87
- .end((err, res) => {
88
- if (log) {
89
- console.log("res.body", res.body);
90
- }
91
- res.should.have.status(200);
92
- res.body.should.be.a('object');
93
- expect(res.body.name).to.equal("testbot");
94
- var id_faq_kb = res.body._id;
95
-
96
- chai.request(server)
97
- .get('/' + savedProject._id + '/faq?id_faq_kb=' + id_faq_kb)
98
- .auth(email, pwd)
99
- .end((err, res) => {
100
- console.log("faq_list: ", res.body);
101
- res.should.have.status(200);
102
- res.body.should.be.an('array').that.is.not.empty;
103
-
104
- chai.request(server)
105
- .post('/' + savedProject._id + '/faq_kb/train/' + id_faq_kb)
106
- .auth(email, pwd)
107
- .send({})
108
- .end((err, res) => {
109
- console.log("train res.body: ", res.body);
110
- })
111
-
112
- done();
113
-
114
- })
115
-
116
-
117
-
118
- });
119
- })
120
- })
121
- })
76
+ // it('train with tiledesk-ai', (done) => {
77
+ // var email = "test-signup-" + Date.now() + "@email.com";
78
+ // var pwd = "pwd";
79
+
80
+ // userService.signup(email, pwd, "Test Firstname", "Test Lastname").then((savedUser) => {
81
+ // projectService.create("test-faqkb-create", savedUser._id).then((savedProject) => {
82
+
83
+ // chai.request(server)
84
+ // .post('/' + savedProject._id + '/faq_kb')
85
+ // .auth(email, pwd)
86
+ // .send({ "name": "testbot", type: "internal", template: "example", intentsEngine: "tiledesk-ai" })
87
+ // .end((err, res) => {
88
+ // if (log) {
89
+ // console.log("res.body", res.body);
90
+ // }
91
+ // res.should.have.status(200);
92
+ // res.body.should.be.a('object');
93
+ // expect(res.body.name).to.equal("testbot");
94
+ // var id_faq_kb = res.body._id;
95
+
96
+ // chai.request(server)
97
+ // .get('/' + savedProject._id + '/faq?id_faq_kb=' + id_faq_kb)
98
+ // .auth(email, pwd)
99
+ // .end((err, res) => {
100
+ // if (log) { console.log("faq_list: ", res.body); }
101
+ // res.should.have.status(200);
102
+ // res.body.should.be.an('array').that.is.not.empty;
103
+
104
+ // chai.request(server)
105
+ // .post('/' + savedProject._id + '/faq_kb/aitrain')
106
+ // .auth(email, pwd)
107
+ // .send({ id_faq_kb: id_faq_kb, webhook_enabled: false })
108
+ // .end((err, res) => {
109
+ // if (log) { console.log("train res.body: ", res.body); }
110
+
111
+ // done();
112
+ // })
113
+
114
+ // })
115
+
116
+
117
+
118
+ // });
119
+ // })
120
+ // })
121
+ // })
122
122
 
123
123
 
124
124
  it('create with template example', (done) => {