@tiledesk/tiledesk-server 2.4.52 → 2.4.54
Sign up to get free protection for your applications and to get access to all the features.
- package/CHANGELOG.md +3 -0
- package/app.js +5 -2
- package/docs/api-dev.md +42 -1
- package/models/faq.js +6 -0
- package/models/segment.js +67 -0
- package/package.json +2 -2
- package/routes/faq.js +66 -23
- package/routes/faq_kb.js +7 -3
- package/routes/kbsettings.js +76 -29
- package/routes/lead.js +22 -2
- package/routes/openai.js +112 -0
- package/routes/segment.js +157 -0
- package/routes/users.js +24 -0
- package/services/emailService.js +33 -0
- package/services/openaiService.js +110 -0
- package/template/email/redirectToDesktopEmail.html +304 -0
- package/template/email/redirectToDesktopEmail_new.html +303 -0
- package/test/faqRoute.js +116 -51
- package/test/openaiRoute.js +134 -0
- package/test/userRoute.js +63 -0
- package/utils/segment2mongoConverter.js +98 -0
- package/routes/openai_kbs.js +0 -58
- package/test/openaiKbsRoute.js +0 -75
package/CHANGELOG.md
CHANGED
package/app.js
CHANGED
@@ -112,7 +112,7 @@ var jwtroute = require('./routes/jwt');
|
|
112
112
|
var key = require('./routes/key');
|
113
113
|
var widgets = require('./routes/widget');
|
114
114
|
var widgetsLoader = require('./routes/widgetLoader');
|
115
|
-
var
|
115
|
+
var openai = require('./routes/openai');
|
116
116
|
var kbsettings = require('./routes/kbsettings');
|
117
117
|
|
118
118
|
// var admin = require('./routes/admin');
|
@@ -129,6 +129,8 @@ var requestUtilRoot = require('./routes/requestUtilRoot');
|
|
129
129
|
var urls = require('./routes/urls');
|
130
130
|
var email = require('./routes/email');
|
131
131
|
var property = require('./routes/property');
|
132
|
+
var segment = require('./routes/segment');
|
133
|
+
|
132
134
|
|
133
135
|
var bootDataLoader = require('./services/bootDataLoader');
|
134
136
|
var settingDataLoader = require('./services/settingDataLoader');
|
@@ -550,8 +552,9 @@ app.use('/:projectid/campaigns',[passport.authenticate(['basic', 'jwt'], { sessi
|
|
550
552
|
app.use('/:projectid/emails',[passport.authenticate(['basic', 'jwt'], { session: false }), validtoken, roleChecker.hasRoleOrTypes('agent', ['bot','subscription'])], email);
|
551
553
|
|
552
554
|
app.use('/:projectid/properties',[passport.authenticate(['basic', 'jwt'], { session: false }), validtoken, roleChecker.hasRoleOrTypes('agent', ['bot','subscription'])], property);
|
555
|
+
app.use('/:projectid/segments',[passport.authenticate(['basic', 'jwt'], { session: false }), validtoken, roleChecker.hasRoleOrTypes('agent', ['bot','subscription'])], segment);
|
553
556
|
|
554
|
-
app.use('/:projectid/
|
557
|
+
app.use('/:projectid/openai', [passport.authenticate(['basic', 'jwt'], { session: false }), validtoken, roleChecker.hasRoleOrTypes('agent')], openai);
|
555
558
|
app.use('/:projectid/kbsettings', [passport.authenticate(['basic', 'jwt'], { session: false }), validtoken, roleChecker.hasRoleOrTypes('agent', ['bot','subscription'])], kbsettings);
|
556
559
|
|
557
560
|
|
package/docs/api-dev.md
CHANGED
@@ -882,4 +882,45 @@ curl -v -X GET -H 'Content-Type:application/json' -H "Authorization: JWT eyJhbGc
|
|
882
882
|
|
883
883
|
|
884
884
|
|
885
|
-
curl -v -X POST -H 'Content-Type:application/json' -u andrea.leo@frontiere21.it:258456 https://tiledesk-server-pre.herokuapp.com/chat21/native/auth/createCustomToken
|
885
|
+
curl -v -X POST -H 'Content-Type:application/json' -u andrea.leo@frontiere21.it:258456 https://tiledesk-server-pre.herokuapp.com/chat21/native/auth/createCustomToken
|
886
|
+
|
887
|
+
|
888
|
+
|
889
|
+
|
890
|
+
|
891
|
+
curl -v -X POST -H 'Content-Type:application/json' -u admin@tiledesk.com:adminadmin -d '{"name":"testprj"}' http://localhost:3000/projects
|
892
|
+
|
893
|
+
curl -v -X POST -H 'Content-Type:application/json' -u admin@tiledesk.com:adminadmin -d '{ "name":"segment1", "filters": [{"field":"field1","operator":"=","value":"ciao2"}]}' http://localhost:3000/651446eeaf0e4e333f86db6d/segments
|
894
|
+
|
895
|
+
|
896
|
+
curl -v -X POST -H 'Content-Type:application/json' -u admin@tiledesk.com:adminadmin -d '{"text":"firstText"}' http://localhost:3000/651446eeaf0e4e333f86db6d/requests/req123456999-651446eeaf0e4e333f86db6d/messages
|
897
|
+
|
898
|
+
|
899
|
+
curl -v -X GET -u admin@tiledesk.com:adminadmin http://localhost:3000/651446eeaf0e4e333f86db6d/leads?segment=651448cc39405451f2165a80
|
900
|
+
|
901
|
+
|
902
|
+
number
|
903
|
+
|
904
|
+
curl -v -X POST -H 'Content-Type:application/json' -u admin@tiledesk.com:adminadmin -d '{ "name":"segment1", "filters": [{"field":"field1","operator":"=","value":44}]}' http://localhost:3000/651446eeaf0e4e333f86db6d/segments
|
905
|
+
|
906
|
+
curl -v -X GET -u admin@tiledesk.com:adminadmin http://localhost:3000/651446eeaf0e4e333f86db6d/leads?segment=6515a7e0066727cb94bccd5c
|
907
|
+
|
908
|
+
|
909
|
+
|
910
|
+
|
911
|
+
sudo systemctl start mongod
|
912
|
+
|
913
|
+
|
914
|
+
|
915
|
+
|
916
|
+
curl -v -X PUT -H 'Content-Type:application/json' -u admin@tiledesk.com:adminadmin -d '{ "name":"segment2", "filters": [{"field":"field1","operator":"=","value":"ciao2"}]}' http://localhost:3000/651446eeaf0e4e333f86db6d/segments/6516eb0a11e143e3548b8dd6
|
917
|
+
|
918
|
+
|
919
|
+
|
920
|
+
curl -v -X GET -H 'Content-Type:application/json' -u admin@tiledesk.com:adminadmin http://localhost:3000/651446eeaf0e4e333f86db6d/segments/6516eb0a11e143e3548b8dd6
|
921
|
+
|
922
|
+
|
923
|
+
curl -v -X GET -H 'Content-Type:application/json' -u admin@tiledesk.com:adminadmin http://localhost:3000/651446eeaf0e4e333f86db6d/segments/
|
924
|
+
|
925
|
+
|
926
|
+
curl -v -X DELETE -H 'Content-Type:application/json' -u admin@tiledesk.com:adminadmin http://localhost:3000/651446eeaf0e4e333f86db6d/segments/6516eb0a11e143e3548b8dd6
|
package/models/faq.js
CHANGED
@@ -7,6 +7,12 @@ const uuidv4 = require('uuid/v4');
|
|
7
7
|
var defaultFullTextLanguage = process.env.DEFAULT_FULLTEXT_INDEX_LANGUAGE || "none";
|
8
8
|
|
9
9
|
var FaqSchema = new Schema({
|
10
|
+
_id: {
|
11
|
+
type: mongoose.Schema.Types.ObjectId,
|
12
|
+
index: true,
|
13
|
+
required: true,
|
14
|
+
auto: true,
|
15
|
+
},
|
10
16
|
id_faq_kb: {
|
11
17
|
type: String,
|
12
18
|
index: true
|
@@ -0,0 +1,67 @@
|
|
1
|
+
var mongoose = require('mongoose');
|
2
|
+
var Schema = mongoose.Schema;
|
3
|
+
var winston = require('../config/winston');
|
4
|
+
|
5
|
+
|
6
|
+
|
7
|
+
var SegmentFilterSchema = new Schema({
|
8
|
+
field: { //ex: email
|
9
|
+
type: String,
|
10
|
+
required: true,
|
11
|
+
// index:true
|
12
|
+
},
|
13
|
+
operator: {
|
14
|
+
type: String,
|
15
|
+
required: true
|
16
|
+
},
|
17
|
+
value: { //tidio supports date, tag, dropdown
|
18
|
+
//type: String,
|
19
|
+
type: Object,
|
20
|
+
required: true
|
21
|
+
},
|
22
|
+
},{ _id : false });
|
23
|
+
|
24
|
+
|
25
|
+
var SegmentSchema = new Schema({
|
26
|
+
|
27
|
+
name: {
|
28
|
+
type: String,
|
29
|
+
required: true,
|
30
|
+
// index: true
|
31
|
+
},
|
32
|
+
match: {
|
33
|
+
type: String,
|
34
|
+
required: true,
|
35
|
+
// index:
|
36
|
+
default: "all" //or any
|
37
|
+
},
|
38
|
+
filters: [SegmentFilterSchema],
|
39
|
+
id_project: {
|
40
|
+
type: String,
|
41
|
+
required: true,
|
42
|
+
index: true
|
43
|
+
},
|
44
|
+
status: {
|
45
|
+
type: Number,
|
46
|
+
default: 100,
|
47
|
+
required: true,
|
48
|
+
index: true
|
49
|
+
},
|
50
|
+
createdBy: {
|
51
|
+
type: String,
|
52
|
+
required: true
|
53
|
+
}
|
54
|
+
},{
|
55
|
+
timestamps: true
|
56
|
+
}
|
57
|
+
);
|
58
|
+
|
59
|
+
|
60
|
+
var segment = mongoose.model('segment', SegmentSchema);
|
61
|
+
|
62
|
+
if (process.env.MONGOOSE_SYNCINDEX) {
|
63
|
+
segment.syncIndexes();
|
64
|
+
winston.info("segment syncIndexes")
|
65
|
+
}
|
66
|
+
|
67
|
+
module.exports = segment;
|
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.54",
|
5
5
|
"scripts": {
|
6
6
|
"start": "node ./bin/www",
|
7
7
|
"pretest": "mongodb-runner start",
|
@@ -44,7 +44,7 @@
|
|
44
44
|
"@tiledesk/tiledesk-kaleyra-proxy": "^0.1.7",
|
45
45
|
"@tiledesk/tiledesk-messenger-connector": "0.1.9",
|
46
46
|
"@tiledesk/tiledesk-rasa-connector": "^1.0.10",
|
47
|
-
"@tiledesk/tiledesk-tybot-connector": "^0.1.
|
47
|
+
"@tiledesk/tiledesk-tybot-connector": "^0.1.96",
|
48
48
|
"@tiledesk/tiledesk-whatsapp-connector": "^0.1.51",
|
49
49
|
"amqplib": "^0.5.5",
|
50
50
|
"app-root-path": "^3.0.0",
|
package/routes/faq.js
CHANGED
@@ -147,6 +147,7 @@ router.post('/', function (req, res) {
|
|
147
147
|
winston.debug('faq_kb ', faq_kb.toJSON());
|
148
148
|
|
149
149
|
var newFaq = new Faq({
|
150
|
+
_id: req.body._id,
|
150
151
|
id_faq_kb: req.body.id_faq_kb,
|
151
152
|
question: req.body.question,
|
152
153
|
answer: req.body.answer,
|
@@ -203,6 +204,8 @@ router.patch('/:faqid/attributes', function (req, res) {
|
|
203
204
|
let data = req.body;
|
204
205
|
winston.debug("data: ", data);
|
205
206
|
|
207
|
+
// aggiugnere controllo su intent_id qui
|
208
|
+
|
206
209
|
Faq.findById(req.params.faqid, function (err, updatedFaq) {
|
207
210
|
if (err) {
|
208
211
|
winston.error('Find Faq by id ERROR: ', err);
|
@@ -253,6 +256,7 @@ router.patch('/:faqid/attributes', function (req, res) {
|
|
253
256
|
router.put('/:faqid', function (req, res) {
|
254
257
|
|
255
258
|
winston.debug('UPDATE FAQ ', req.body);
|
259
|
+
let faqid = req.params.faqid;
|
256
260
|
|
257
261
|
var update = {};
|
258
262
|
|
@@ -296,45 +300,84 @@ router.put('/:faqid', function (req, res) {
|
|
296
300
|
update.attributes = req.body.attributes;
|
297
301
|
}
|
298
302
|
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
303
|
+
if (faqid.startsWith("intentId")) {
|
304
|
+
let intent_id = faqid.substring(8);
|
305
|
+
Faq.findOneAndUpdate({ intent_id: intent_id }, update, { new: true, upsert: true}, (err, updatedFaq) => {
|
306
|
+
if (err) {
|
307
|
+
if (err.code == 11000) {
|
308
|
+
return res.status(409).send({ success: false, msg: 'Duplicate intent_display_name.' });
|
309
|
+
} else {
|
310
|
+
return res.status(500).send({ success: false, msg: 'Error updating object.' });
|
311
|
+
}
|
305
312
|
}
|
306
|
-
}
|
307
313
|
|
308
|
-
|
309
|
-
|
314
|
+
faqBotEvent.emit('faq.update', updatedFaq);
|
315
|
+
faqBotEvent.emit('faq_train.update', updatedFaq.id_faq_kb);
|
316
|
+
|
317
|
+
res.status(200).send(updatedFaq);
|
318
|
+
})
|
310
319
|
|
311
|
-
|
320
|
+
} else {
|
321
|
+
Faq.findByIdAndUpdate(req.params.faqid, update, { new: true, upsert: true }, function (err, updatedFaq) {
|
322
|
+
if (err) {
|
323
|
+
if (err.code == 11000) {
|
324
|
+
return res.status(409).send({ success: false, msg: 'Duplicate intent_display_name.' });
|
325
|
+
} else {
|
326
|
+
return res.status(500).send({ success: false, msg: 'Error updating object.' });
|
327
|
+
}
|
328
|
+
}
|
329
|
+
|
330
|
+
faqBotEvent.emit('faq.update', updatedFaq);
|
331
|
+
faqBotEvent.emit('faq_train.update', updatedFaq.id_faq_kb);
|
332
|
+
|
333
|
+
res.status(200).send(updatedFaq);
|
334
|
+
// updateRemoteFaq(updatedFaq)
|
335
|
+
});
|
336
|
+
}
|
312
337
|
|
313
|
-
// updateRemoteFaq(updatedFaq)
|
314
|
-
});
|
315
338
|
});
|
316
339
|
|
317
340
|
|
318
341
|
// DELETE REMOTE AND LOCAL FAQ
|
319
342
|
router.delete('/:faqid', function (req, res) {
|
320
343
|
|
321
|
-
// deleteRemoteFaq(req.params.faqid)
|
322
344
|
winston.debug('DELETE FAQ - FAQ ID ', req.params.faqid);
|
323
345
|
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
faqBotEvent.emit('faq.delete', faq);
|
331
|
-
faqBotEvent.emit('faq_train.delete', faq.id_faq_kb);
|
346
|
+
let faqid = req.params.faqid;
|
347
|
+
|
348
|
+
if (faqid.startsWith("intentId")) {
|
349
|
+
console.log("faqid is an intent_id")
|
350
|
+
let intent_id = faqid.substring(8);
|
351
|
+
console.log("faq intent_id: ", intent_id);
|
332
352
|
|
333
|
-
|
353
|
+
Faq.findOneAndDelete({ intent_id: intent_id }, (err, faq) => {
|
354
|
+
if (err) {
|
355
|
+
return res.status(500).send({ success: false, msg: "Error deleting object." });
|
356
|
+
}
|
334
357
|
|
335
|
-
|
358
|
+
winston.debug('Deleted FAQ ', faq);
|
359
|
+
|
360
|
+
faqBotEvent.emit('faq.delete', faq);
|
361
|
+
faqBotEvent.emit('faq_train.delete', faq.id_faq_kb);
|
362
|
+
|
363
|
+
res.status(200).send(faq);
|
336
364
|
|
365
|
+
})
|
337
366
|
|
367
|
+
} else {
|
368
|
+
Faq.findByIdAndRemove({ _id: req.params.faqid }, function (err, faq) {
|
369
|
+
if (err) {
|
370
|
+
return res.status(500).send({ success: false, msg: 'Error deleting object.' });
|
371
|
+
}
|
372
|
+
winston.debug('Deleted FAQ ', faq);
|
373
|
+
|
374
|
+
faqBotEvent.emit('faq.delete', faq);
|
375
|
+
faqBotEvent.emit('faq_train.delete', faq.id_faq_kb);
|
376
|
+
|
377
|
+
res.status(200).send(faq);
|
378
|
+
|
379
|
+
});
|
380
|
+
}
|
338
381
|
});
|
339
382
|
|
340
383
|
// EXPORT FAQ TO CSV
|
package/routes/faq_kb.js
CHANGED
@@ -639,6 +639,7 @@ router.post('/importjson/:id_faq_kb', upload.single('uploadFile'), async (req, r
|
|
639
639
|
|
640
640
|
winston.debug("json source " + json_string)
|
641
641
|
|
642
|
+
// intentOnly still existing?
|
642
643
|
if (req.query.intentsOnly && req.query.intentsOnly == "true") {
|
643
644
|
|
644
645
|
winston.debug("intents only")
|
@@ -658,7 +659,8 @@ router.post('/importjson/:id_faq_kb', upload.single('uploadFile'), async (req, r
|
|
658
659
|
enabled: intent.enabled,
|
659
660
|
webhook_enabled: intent.webhook_enabled,
|
660
661
|
language: intent.language,
|
661
|
-
actions: intent.actions
|
662
|
+
actions: intent.actions,
|
663
|
+
attributes: intent.attributes
|
662
664
|
}
|
663
665
|
|
664
666
|
// overwrite duplicated intents
|
@@ -746,7 +748,8 @@ router.post('/importjson/:id_faq_kb', upload.single('uploadFile'), async (req, r
|
|
746
748
|
enabled: intent.enabled,
|
747
749
|
webhook_enabled: intent.webhook_enabled,
|
748
750
|
language: intent.language,
|
749
|
-
actions: intent.actions
|
751
|
+
actions: intent.actions,
|
752
|
+
attributes: intent.attributes
|
750
753
|
}
|
751
754
|
|
752
755
|
// TO DELETE: no used when req.query.create = 'true'
|
@@ -869,7 +872,8 @@ router.post('/importjson/:id_faq_kb', upload.single('uploadFile'), async (req, r
|
|
869
872
|
enabled: intent.enabled,
|
870
873
|
webhook_enabled: intent.webhook_enabled,
|
871
874
|
language: intent.language,
|
872
|
-
actions: intent.actions
|
875
|
+
actions: intent.actions,
|
876
|
+
attributes: intent.attributes
|
873
877
|
}
|
874
878
|
|
875
879
|
// overwrite duplicated intents
|
package/routes/kbsettings.js
CHANGED
@@ -3,6 +3,7 @@ var KBSettings = require('../models/kb_setting');
|
|
3
3
|
// var KB = require('../models/kb_setting')
|
4
4
|
var router = express.Router();
|
5
5
|
var winston = require('../config/winston');
|
6
|
+
const openaiService = require('../services/openaiService');
|
6
7
|
|
7
8
|
router.get('/', async (req, res) => {
|
8
9
|
let project_id = req.projectid;
|
@@ -54,35 +55,6 @@ router.post('/', async (req, res) => {
|
|
54
55
|
})
|
55
56
|
})
|
56
57
|
|
57
|
-
router.post('/:settings_id', async (req, res) => {
|
58
|
-
|
59
|
-
let settings_id = req.params.settings_id;
|
60
|
-
let body = req.body;
|
61
|
-
|
62
|
-
KBSettings.findById(settings_id, (err, settings) => {
|
63
|
-
if (err) {
|
64
|
-
winston.error("find knoledge base error: ", err);
|
65
|
-
return res.status(500).send({ success: false, error: err});
|
66
|
-
} else {
|
67
|
-
|
68
|
-
let new_kb = {
|
69
|
-
name: body.name,
|
70
|
-
url: body.url
|
71
|
-
}
|
72
|
-
settings.kbs.push(new_kb);
|
73
|
-
|
74
|
-
KBSettings.findByIdAndUpdate( settings_id, settings, { new: true }, (err, savedSettings) => {
|
75
|
-
if (err) {
|
76
|
-
winston.err("findByIdAndUpdate error: ", err);
|
77
|
-
res.status(500).send({ success: false, error: err });
|
78
|
-
} else {
|
79
|
-
res.status(200).send(savedSettings);
|
80
|
-
}
|
81
|
-
})
|
82
|
-
}
|
83
|
-
})
|
84
|
-
})
|
85
|
-
|
86
58
|
router.put('/:settings_id', async (req, res) => {
|
87
59
|
|
88
60
|
let settings_id = req.params.settings_id;
|
@@ -123,6 +95,81 @@ router.delete('/:settings_id/:kb_id', async (req, res) => {
|
|
123
95
|
res.status(200).send(settings);
|
124
96
|
}
|
125
97
|
})
|
98
|
+
|
99
|
+
})
|
100
|
+
|
101
|
+
|
102
|
+
// PROXY PUGLIA AI - START
|
103
|
+
router.post('/qa', async (req, res) => {
|
104
|
+
let data = req.body;
|
105
|
+
console.log("data: ", data);
|
106
|
+
|
107
|
+
openaiService.ask(data).then((resp) => {
|
108
|
+
// console.log("qa resp: ", resp.data);
|
109
|
+
res.status(200).send(resp.data);
|
110
|
+
}).catch((err) => {
|
111
|
+
winston.error("qa err: ", err);
|
112
|
+
res.status(500).send(err);
|
113
|
+
})
|
114
|
+
})
|
115
|
+
|
116
|
+
router.post('/startscrape', async (req, res) => {
|
117
|
+
|
118
|
+
let data = req.body;
|
119
|
+
console.log("data: ", data);
|
120
|
+
|
121
|
+
openaiService.startScrape(data).then((resp) => {
|
122
|
+
// console.log("startScrape resp: ", resp.data);
|
123
|
+
res.status(200).send(resp.data);
|
124
|
+
}).catch((err) => {
|
125
|
+
winston.error("startScrape err: ", err);
|
126
|
+
res.status(500).send(err);
|
127
|
+
})
|
128
|
+
})
|
129
|
+
|
130
|
+
|
131
|
+
router.post('/checkstatus', async (req, res) => {
|
132
|
+
|
133
|
+
let data = req.body;
|
134
|
+
console.log("data: ", data);
|
135
|
+
|
136
|
+
openaiService.checkStatus(data).then((resp) => {
|
137
|
+
// console.log("checkStatus resp: ", resp.data);
|
138
|
+
res.status(200).send(resp.data);
|
139
|
+
}).catch((err) => {
|
140
|
+
winston.error("checkStatus err: ", err);
|
141
|
+
res.status(500).send(err);
|
142
|
+
})
|
143
|
+
})
|
144
|
+
// PROXY PUGLIA AI - END
|
145
|
+
|
146
|
+
router.post('/:settings_id', async (req, res) => {
|
147
|
+
|
148
|
+
let settings_id = req.params.settings_id;
|
149
|
+
let body = req.body;
|
150
|
+
|
151
|
+
KBSettings.findById(settings_id, (err, settings) => {
|
152
|
+
if (err) {
|
153
|
+
winston.error("find knoledge base error: ", err);
|
154
|
+
return res.status(500).send({ success: false, error: err});
|
155
|
+
} else {
|
156
|
+
|
157
|
+
let new_kb = {
|
158
|
+
name: body.name,
|
159
|
+
url: body.url
|
160
|
+
}
|
161
|
+
settings.kbs.push(new_kb);
|
162
|
+
|
163
|
+
KBSettings.findByIdAndUpdate( settings_id, settings, { new: true }, (err, savedSettings) => {
|
164
|
+
if (err) {
|
165
|
+
winston.err("findByIdAndUpdate error: ", err);
|
166
|
+
res.status(500).send({ success: false, error: err });
|
167
|
+
} else {
|
168
|
+
res.status(200).send(savedSettings);
|
169
|
+
}
|
170
|
+
})
|
171
|
+
}
|
172
|
+
})
|
126
173
|
})
|
127
174
|
|
128
175
|
module.exports = router;
|
package/routes/lead.js
CHANGED
@@ -7,6 +7,8 @@ var leadService = require("../services/leadService");
|
|
7
7
|
csv = require('csv-express');
|
8
8
|
csv.separator = ';';
|
9
9
|
const leadEvent = require('../event/leadEvent');
|
10
|
+
var Segment = require("../models/segment");
|
11
|
+
var Segment2MongoConverter = require("../utils/segment2mongoConverter");
|
10
12
|
|
11
13
|
|
12
14
|
router.post('/', function (req, res) {
|
@@ -388,7 +390,7 @@ router.get('/:leadid', function (req, res) {
|
|
388
390
|
});
|
389
391
|
|
390
392
|
|
391
|
-
router.get('/',
|
393
|
+
router.get('/', async(req, res) => {
|
392
394
|
|
393
395
|
var limit = 40; // Number of request per page
|
394
396
|
|
@@ -407,7 +409,7 @@ router.get('/', function (req, res) {
|
|
407
409
|
winston.debug('LEAD ROUTE - SKIP PAGE ', skip);
|
408
410
|
|
409
411
|
|
410
|
-
var query = {
|
412
|
+
var query = {};
|
411
413
|
|
412
414
|
if (req.query.full_text) {
|
413
415
|
winston.debug('LEAD ROUTE req.query.fulltext', req.query.full_text);
|
@@ -440,6 +442,24 @@ router.get('/', function (req, res) {
|
|
440
442
|
query["tags"] = req.query.tags;
|
441
443
|
}
|
442
444
|
|
445
|
+
|
446
|
+
if (req.query.segment) {
|
447
|
+
let segment = await Segment.findOne({id_project: req.projectid, _id: req.query.segment }).exec();
|
448
|
+
if (!segment) {
|
449
|
+
return res.status(404).send({ success: false, msg: 'Error segment not found' });
|
450
|
+
}
|
451
|
+
Segment2MongoConverter.convert(query, segment);
|
452
|
+
}
|
453
|
+
|
454
|
+
|
455
|
+
|
456
|
+
// last query modifier
|
457
|
+
query["id_project"] = req.projectid;
|
458
|
+
query["status"] = LeadConstants.NORMAL;
|
459
|
+
|
460
|
+
winston.debug("query", query);
|
461
|
+
|
462
|
+
|
443
463
|
var direction = -1; //-1 descending , 1 ascending
|
444
464
|
if (req.query.direction) {
|
445
465
|
direction = req.query.direction;
|
package/routes/openai.js
ADDED
@@ -0,0 +1,112 @@
|
|
1
|
+
var express = require('express');
|
2
|
+
var router = express.Router();
|
3
|
+
var KBSettings = require('../models/kb_setting');
|
4
|
+
var openaiService = require('../services/openaiService');
|
5
|
+
var winston = require('../config/winston');
|
6
|
+
|
7
|
+
router.post('/', async (req, res) => {
|
8
|
+
|
9
|
+
let project_id = req.projectid;
|
10
|
+
let body = req.body;
|
11
|
+
|
12
|
+
console.log("### --> body: ", body);
|
13
|
+
|
14
|
+
KBSettings.findOne({ id_project: project_id }, (err, kbSettings) => {
|
15
|
+
console.log("kbSettings: ", kbSettings);
|
16
|
+
|
17
|
+
if (!kbSettings) {
|
18
|
+
return res.status(400).send({ success: false, message: "Missing gptkey parameter (settings not exist)" })
|
19
|
+
}
|
20
|
+
|
21
|
+
let gptkey = kbSettings.gptkey;
|
22
|
+
|
23
|
+
if (!gptkey) {
|
24
|
+
return res.status(400).send({ success: false, message: "Missing gptkey parameter" })
|
25
|
+
}
|
26
|
+
|
27
|
+
// attua modifiche
|
28
|
+
let json = {
|
29
|
+
"model": body.model,
|
30
|
+
"messages": [
|
31
|
+
{
|
32
|
+
"role": "user",
|
33
|
+
"content": body.question
|
34
|
+
}
|
35
|
+
],
|
36
|
+
"max_tokens": body.max_tokens,
|
37
|
+
"temperature": body.temperature
|
38
|
+
}
|
39
|
+
|
40
|
+
let message = { role: "", content: "" };
|
41
|
+
if (body.context) {
|
42
|
+
message.role = "system";
|
43
|
+
message.content = body.context;
|
44
|
+
json.messages.unshift(message);
|
45
|
+
}
|
46
|
+
console.log("openai preview --> json: ", json);
|
47
|
+
|
48
|
+
openaiService.completions(json, gptkey).then((response) => {
|
49
|
+
// winston.debug("completions response: ", response);
|
50
|
+
res.status(200).send(response.data);
|
51
|
+
}).catch((err) => {
|
52
|
+
console.log("err: ", err);
|
53
|
+
// winston.error("completions error: ", err);
|
54
|
+
res.status(500).send(err)
|
55
|
+
})
|
56
|
+
|
57
|
+
})
|
58
|
+
})
|
59
|
+
|
60
|
+
// router.get('/', async (req, res) => {
|
61
|
+
|
62
|
+
// let project_id = req.projectid;
|
63
|
+
|
64
|
+
// OpenaiKbs.find({ id_project: project_id }, (err, kbs) => {
|
65
|
+
// if (err) {
|
66
|
+
// console.error("find all kbs error: ", err);
|
67
|
+
// return res.status(500).send({ success: false, error: err });
|
68
|
+
// } else {
|
69
|
+
// return res.status(200).send(kbs);
|
70
|
+
// }
|
71
|
+
// })
|
72
|
+
// })
|
73
|
+
|
74
|
+
// router.post('/', async (req, res) => {
|
75
|
+
|
76
|
+
// let body = req.body;
|
77
|
+
|
78
|
+
// let new_kbs = new OpenaiKbs({
|
79
|
+
// name: body.name,
|
80
|
+
// url: body.url,
|
81
|
+
// id_project: req.projectid,
|
82
|
+
// gptkey: req.body.gptkey
|
83
|
+
// })
|
84
|
+
|
85
|
+
// new_kbs.save(function (err, savedKbs) {
|
86
|
+
// if (err) {
|
87
|
+
// console.error("save new kbs error: ", err);
|
88
|
+
// return res.status(500).send({ success: false, error: err});
|
89
|
+
// } else {
|
90
|
+
// return res.status(200).send(savedKbs);
|
91
|
+
// }
|
92
|
+
// })
|
93
|
+
// })
|
94
|
+
|
95
|
+
// router.put('/', async (req, res) => {
|
96
|
+
// // to be implemented
|
97
|
+
// })
|
98
|
+
|
99
|
+
// router.delete('/:kbs_id', async (req, res) => {
|
100
|
+
// let kbs_id = req.params.kbs_id;
|
101
|
+
|
102
|
+
// OpenaiKbs.findOneAndDelete( { _id: kbs_id }, (err, kbDeleted) => {
|
103
|
+
// if (err) {
|
104
|
+
// console.error("find one and delete kbs error: ", err);
|
105
|
+
// return res.status(500).send({ success: false, error: err});
|
106
|
+
// } else {
|
107
|
+
// return res.status(200).send({ success: true, message: 'Knowledge Base deleted successfully', openai_kb: kbDeleted });
|
108
|
+
// }
|
109
|
+
// })
|
110
|
+
// })
|
111
|
+
|
112
|
+
module.exports = router;
|