@tiledesk/tiledesk-server 2.2.15 → 2.2.16
Sign up to get free protection for your applications and to get access to all the features.
- package/CHANGELOG.md +14 -2
- package/README.md +1 -1
- package/app.js +5 -3
- package/config/labels/widget.json +2 -2
- package/models/request.js +1 -1
- package/package.json +3 -3
- package/pubmodules/messageTransformer/index.js +4 -1
- package/pubmodules/messageTransformer/messageHandlebarsTransformerInterceptor.js +83 -0
- package/pubmodules/pubModulesManager.js +1 -0
- package/routes/email.js +32 -0
- package/routes/project.js +108 -1
- package/routes/request.js +10 -4
- package/routes/user-request.js +3 -1
- package/services/emailService.js +14 -12
- package/services/faqBotHandler.js +6 -6
- package/services/{faqBotSupport copy.js → faqBotSupport copy.js_} +0 -0
- package/services/requestService.js +36 -19
- package/test/departmentService.js +10 -9
- package/test/messageRoute.js +4 -4
- package/test/requestRoute.js +26 -16
- package/test/requestService.js +90 -74
- package/test-int/bot copy.js +0 -2074
package/CHANGELOG.md
CHANGED
@@ -1,10 +1,22 @@
|
|
1
|
-
# 2.2.15
|
2
1
|
|
2
|
+
|
3
|
+
|
4
|
+
|
5
|
+
# 2.2.16
|
6
|
+
- Email templates endpoint
|
7
|
+
- Created request.updated event for request event and deprecated request.update.comment
|
8
|
+
- Added Handlebars template processor for the message transformer module only if message.attributes.templateProcessor=true
|
9
|
+
- Email test send endpoint
|
10
|
+
- Bugfix widget label
|
11
|
+
- Added /intents alias for /faq endpoint
|
12
|
+
- The request_id field of the request model has now a unique index
|
13
|
+
|
14
|
+
# 2.2.15 -> PROD
|
3
15
|
- Added catch messageService.send for bot
|
4
16
|
- Added external searcher for bot( ex. Rasa proxy)
|
5
17
|
- Faq language fix taken from bot language for create single and import from csv
|
6
18
|
- Lower case reset password fix
|
7
|
-
- Added alias /bots for /faq_kb
|
19
|
+
- Added alias /bots for /faq_kb
|
8
20
|
|
9
21
|
# 2.2.14
|
10
22
|
- Fix Tiledesk Queue 1.1.11 with authEvent.queueEnabled = true
|
package/README.md
CHANGED
@@ -15,7 +15,7 @@ You can find more info here: https://developer.tiledesk.com
|
|
15
15
|
|
16
16
|
# Prerequisites
|
17
17
|
|
18
|
-
* [Nodejs](https://www.npmjs.com/) and npm installed
|
18
|
+
* [Nodejs](https://www.npmjs.com/) and npm installed. Suggested versions are NodeJS 12.20.2 and NPM 6.14.11
|
19
19
|
* [MongoDb](https://www.mongodb.com) installed
|
20
20
|
|
21
21
|
# Running Tiledesk Server
|
package/app.js
CHANGED
@@ -102,6 +102,7 @@ var campaigns = require('./routes/campaigns');
|
|
102
102
|
var logs = require('./routes/logs');
|
103
103
|
var requestUtilRoot = require('./routes/requestUtilRoot');
|
104
104
|
var urls = require('./routes/urls');
|
105
|
+
var email = require('./routes/email');
|
105
106
|
|
106
107
|
var bootDataLoader = require('./services/bootDataLoader');
|
107
108
|
var settingDataLoader = require('./services/settingDataLoader');
|
@@ -294,7 +295,6 @@ app.use('/users', [passport.authenticate(['basic', 'jwt'], { session: false }),
|
|
294
295
|
app.use('/logs', logs);
|
295
296
|
app.use('/requests_util', [passport.authenticate(['basic', 'jwt'], { session: false }), validtoken], requestUtilRoot);
|
296
297
|
|
297
|
-
|
298
298
|
// TODO security issues
|
299
299
|
if (process.env.DISABLE_TRANSCRIPT_VIEW_PAGE ) {
|
300
300
|
winston.info(" Transcript view page is disabled");
|
@@ -333,15 +333,15 @@ app.use('/:projectid/departments', department);
|
|
333
333
|
|
334
334
|
channelManager.useUnderProjects(app);
|
335
335
|
|
336
|
-
|
336
|
+
//deprecated
|
337
337
|
app.use('/:projectid/faq', [passport.authenticate(['basic', 'jwt'], { session: false }), validtoken, roleChecker.hasRole('agent')], faq);
|
338
|
+
app.use('/:projectid/intents', [passport.authenticate(['basic', 'jwt'], { session: false }), validtoken, roleChecker.hasRole('agent')], faq);
|
338
339
|
|
339
340
|
//Deprecated??
|
340
341
|
app.use('/:projectid/faqpub', faqpub);
|
341
342
|
|
342
343
|
//deprecated
|
343
344
|
app.use('/:projectid/faq_kb', [passport.authenticate(['basic', 'jwt'], { session: false }), validtoken, roleChecker.hasRoleOrTypes('agent', ['bot','subscription'])], faq_kb);
|
344
|
-
// aggiorna doc
|
345
345
|
app.use('/:projectid/bots', [passport.authenticate(['basic', 'jwt'], { session: false }), validtoken, roleChecker.hasRoleOrTypes('agent', ['bot','subscription'])], faq_kb);
|
346
346
|
|
347
347
|
|
@@ -375,6 +375,8 @@ app.use('/:projectid/labels', [fetchLabels],labels);
|
|
375
375
|
|
376
376
|
app.use('/:projectid/campaigns',[passport.authenticate(['basic', 'jwt'], { session: false }), validtoken, roleChecker.hasRole('agent')], campaigns);
|
377
377
|
|
378
|
+
app.use('/:projectid/emails',[passport.authenticate(['basic', 'jwt'], { session: false }), validtoken, roleChecker.hasRole('owner')], email);
|
379
|
+
|
378
380
|
|
379
381
|
|
380
382
|
if (pubModulesManager) {
|
@@ -5,8 +5,8 @@
|
|
5
5
|
"LABEL_PLACEHOLDER": "type your message..",
|
6
6
|
"LABEL_START_NW_CONV": "New conversation",
|
7
7
|
"LABEL_FIRST_MSG": "Describe shortly your problem, you will be contacted by an agent.",
|
8
|
-
"LABEL_FIRST_MSG_NO_AGENTS": "🤔 All operators are offline at the moment. You can anyway describe your problem. It will be assigned to the support team who will
|
9
|
-
"LABEL_FIRST_MSG_OPERATING_HOURS_CLOSED": "🤔 Our offices are closed. You can anyway describe your problem. It will be assigned to the support team who will
|
8
|
+
"LABEL_FIRST_MSG_NO_AGENTS": "🤔 All operators are offline at the moment. You can anyway describe your problem. It will be assigned to the support team who will get back to you as soon as possible.",
|
9
|
+
"LABEL_FIRST_MSG_OPERATING_HOURS_CLOSED": "🤔 Our offices are closed. You can anyway describe your problem. It will be assigned to the support team who will get back to you as soon as possible.",
|
10
10
|
"LABEL_SELECT_TOPIC": "Select a topic",
|
11
11
|
"LABEL_COMPLETE_FORM": "Complete the form to start a conversation with the next available agent.",
|
12
12
|
"LABEL_FIELD_NAME": "Name",
|
package/models/request.js
CHANGED
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.2.
|
4
|
+
"version": "2.2.16",
|
5
5
|
"scripts": {
|
6
6
|
"start": "node ./bin/www",
|
7
7
|
"pretest": "mongodb-runner start",
|
@@ -41,10 +41,10 @@
|
|
41
41
|
"@tiledesk-ent/tiledesk-server-payments": "^1.1.5",
|
42
42
|
"@tiledesk-ent/tiledesk-server-queue": "^1.1.11",
|
43
43
|
"@tiledesk-ent/tiledesk-server-request-history": "^1.1.5",
|
44
|
-
"@tiledesk-ent/tiledesk-server-resthook": "^1.1.
|
44
|
+
"@tiledesk-ent/tiledesk-server-resthook": "^1.1.53",
|
45
45
|
"@tiledesk-ent/tiledesk-server-routing-queue": "^1.1.11",
|
46
46
|
"@tiledesk-ent/tiledesk-server-tags": "^1.1.1",
|
47
|
-
"@tiledesk-ent/tiledesk-server-triggers": "^1.1.
|
47
|
+
"@tiledesk-ent/tiledesk-server-triggers": "^1.1.82",
|
48
48
|
"@tiledesk-ent/tiledesk-server-visitorcounter": "^1.1.1"
|
49
49
|
},
|
50
50
|
"dependencies": {
|
@@ -1,6 +1,9 @@
|
|
1
1
|
const messageTransformerInterceptor = require("./messageTransformerInterceptor");
|
2
2
|
const microLanguageTransformerInterceptor = require("./microLanguageAttributesTransformerInterceptor");
|
3
|
+
const messageHandlebarsTransformerInterceptor = require("./messageHandlebarsTransformerInterceptor");
|
3
4
|
|
4
5
|
|
5
6
|
|
6
|
-
module.exports = {messageTransformerInterceptor:messageTransformerInterceptor,
|
7
|
+
module.exports = {messageTransformerInterceptor:messageTransformerInterceptor,
|
8
|
+
microLanguageTransformerInterceptor:microLanguageTransformerInterceptor,
|
9
|
+
messageHandlebarsTransformerInterceptor: messageHandlebarsTransformerInterceptor};
|
@@ -0,0 +1,83 @@
|
|
1
|
+
|
2
|
+
const messagePromiseEvent = require('../../event/messagePromiseEvent');
|
3
|
+
const Request = require('../../models/request');
|
4
|
+
var winston = require('../../config/winston');
|
5
|
+
var cacheUtil = require('../../utils/cacheUtil');
|
6
|
+
var handlebars = require('handlebars');
|
7
|
+
|
8
|
+
class MessageHandlebarsTransformerInterceptor {
|
9
|
+
|
10
|
+
|
11
|
+
|
12
|
+
|
13
|
+
listen() {
|
14
|
+
|
15
|
+
var that = this;
|
16
|
+
winston.info("MessageHandlebarsTransformerInterceptor listener start ");
|
17
|
+
|
18
|
+
|
19
|
+
messagePromiseEvent.on('message.create.simple.before', async (data) => {
|
20
|
+
winston.debug('MessageHandlebarsTransformerInterceptor message.create.simple.before', data);
|
21
|
+
|
22
|
+
var message = data.beforeMessage;
|
23
|
+
|
24
|
+
if (!message.text) { //for image i think
|
25
|
+
return data;
|
26
|
+
}
|
27
|
+
if (message.attributes && message.attributes.templateProcessor == true) {
|
28
|
+
|
29
|
+
// TODO if variables are presents
|
30
|
+
|
31
|
+
var q1 = Request.findOne({request_id: message.recipient, id_project: message.id_project});
|
32
|
+
|
33
|
+
// if (message.attributes && message.attributes.populateTemplate == true) {
|
34
|
+
q1.populate('lead').
|
35
|
+
populate('department').
|
36
|
+
populate('participatingBots').
|
37
|
+
populate('participatingAgents').
|
38
|
+
populate({path:'requester',populate:{path:'id_user'}});
|
39
|
+
// }
|
40
|
+
|
41
|
+
var request = await q1.
|
42
|
+
cache(cacheUtil.defaultTTL, message.id_project+":requests:request_id:"+message.recipient).
|
43
|
+
exec();
|
44
|
+
|
45
|
+
|
46
|
+
|
47
|
+
var requestJSON = request.toJSON();
|
48
|
+
|
49
|
+
winston.debug('request mti: ', requestJSON);
|
50
|
+
|
51
|
+
|
52
|
+
var template = handlebars.compile(message.text);
|
53
|
+
winston.debug('template: '+ template);
|
54
|
+
|
55
|
+
// var templateSpec = handlebars.precompile(message.text);
|
56
|
+
// winston.info('templateSpec: ', templateSpec);
|
57
|
+
|
58
|
+
|
59
|
+
var replacements = {
|
60
|
+
request: requestJSON,
|
61
|
+
};
|
62
|
+
|
63
|
+
// {{request.first_text}}
|
64
|
+
// {{request.participatingAgents.0.firstname}}
|
65
|
+
|
66
|
+
|
67
|
+
|
68
|
+
|
69
|
+
var text = template(replacements);
|
70
|
+
winston.debug('text: '+ text);
|
71
|
+
message.text=text;
|
72
|
+
|
73
|
+
}
|
74
|
+
winston.debug('data: ' + JSON.stringify(data) );
|
75
|
+
return data;
|
76
|
+
});
|
77
|
+
|
78
|
+
}
|
79
|
+
|
80
|
+
}
|
81
|
+
|
82
|
+
var messageHandlebarsTransformerInterceptor = new MessageHandlebarsTransformerInterceptor();
|
83
|
+
module.exports = messageHandlebarsTransformerInterceptor;
|
@@ -168,6 +168,7 @@ class PubModulesManager {
|
|
168
168
|
try {
|
169
169
|
this.messageTransformer.messageTransformerInterceptor.listen();
|
170
170
|
this.messageTransformer.microLanguageTransformerInterceptor.listen();
|
171
|
+
this.messageTransformer.messageHandlebarsTransformerInterceptor.listen();
|
171
172
|
winston.info("PubModulesManager messageTransformer started.");
|
172
173
|
} catch(err) {
|
173
174
|
winston.info("PubModulesManager error starting messageTransformer module", err);
|
package/routes/email.js
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
var express = require('express');
|
2
|
+
|
3
|
+
var router = express.Router();
|
4
|
+
|
5
|
+
var emailService = require("../services/emailService");
|
6
|
+
var winston = require('../config/winston');
|
7
|
+
|
8
|
+
router.get('/templates/:templateid',
|
9
|
+
async (req, res) => {
|
10
|
+
let templateid = req.params.templateid+".html";
|
11
|
+
winston.debug("templateid",templateid);
|
12
|
+
|
13
|
+
var html = await emailService.readTemplateFile(templateid);
|
14
|
+
res.json({template:html});
|
15
|
+
});
|
16
|
+
|
17
|
+
router.post('/test/send',
|
18
|
+
async (req, res) => {
|
19
|
+
let to = req.body.to;
|
20
|
+
winston.info("to",to);
|
21
|
+
|
22
|
+
let configEmail = req.body.config;
|
23
|
+
winston.info("configEmail", configEmail);
|
24
|
+
|
25
|
+
emailService.sendTest(to, configEmail, function(err,obj) {
|
26
|
+
// winston.info("sendTest rest", err, obj);
|
27
|
+
res.json({error: err, response:obj});
|
28
|
+
});
|
29
|
+
|
30
|
+
});
|
31
|
+
|
32
|
+
module.exports = router;
|
package/routes/project.js
CHANGED
@@ -50,6 +50,69 @@ router.put('/:projectid', [passport.authenticate(['basic', 'jwt'], { session: fa
|
|
50
50
|
update["settings.email.notification.conversation.pooled"] = req.body["settings.email.notification.conversation.pooled"];
|
51
51
|
}
|
52
52
|
|
53
|
+
|
54
|
+
|
55
|
+
|
56
|
+
if (req.body["settings.email.templates.assignedRequest"]!=undefined) {
|
57
|
+
update["settings.email.templates.assignedRequest"] = req.body["settings.email.templates.assignedRequest"];
|
58
|
+
}
|
59
|
+
if (req.body["settings.email.templates.assignedEmailMessage"]!=undefined) {
|
60
|
+
update["settings.email.templates.assignedEmailMessage"] = req.body["settings.email.templates.assignedEmailMessage"];
|
61
|
+
}
|
62
|
+
if (req.body["settings.email.templates.pooledRequest"]!=undefined) {
|
63
|
+
update["settings.email.templates.pooledRequest"] = req.body["settings.email.templates.pooledRequest"];
|
64
|
+
}
|
65
|
+
if (req.body["settings.email.templates.pooledEmailMessage"]!=undefined) {
|
66
|
+
update["settings.email.templates.pooledEmailMessage"] = req.body["settings.email.templates.pooledEmailMessage"];
|
67
|
+
}
|
68
|
+
if (req.body["settings.email.templates.newMessage"]!=undefined) {
|
69
|
+
update["settings.email.templates.newMessage"] = req.body["settings.email.templates.newMessage"];
|
70
|
+
}
|
71
|
+
if (req.body["settings.email.templates.ticket"]!=undefined) {
|
72
|
+
update["settings.email.templates.ticket"] = req.body["settings.email.templates.ticket"];
|
73
|
+
}
|
74
|
+
if (req.body["settings.email.templates.sendTranscript"]!=undefined) {
|
75
|
+
update["settings.email.templates.sendTranscript"] = req.body["settings.email.templates.sendTranscript"];
|
76
|
+
}
|
77
|
+
|
78
|
+
|
79
|
+
if (req.body["settings.email.from"]!=undefined) {
|
80
|
+
update["settings.email.from"] = req.body["settings.email.from"];
|
81
|
+
}
|
82
|
+
if (req.body["settings.email.config.host"]!=undefined) {
|
83
|
+
update["settings.email.config.host"] = req.body["settings.email.config.host"];
|
84
|
+
}
|
85
|
+
if (req.body["settings.email.config.port"]!=undefined) {
|
86
|
+
update["settings.email.config.port"] = req.body["settings.email.config.port"];
|
87
|
+
}
|
88
|
+
if (req.body["settings.email.config.secure"]!=undefined) {
|
89
|
+
update["settings.email.config.secure"] = req.body["settings.email.config.secure"];
|
90
|
+
}
|
91
|
+
if (req.body["settings.email.config.user"]!=undefined) {
|
92
|
+
update["settings.email.config.user"] = req.body["settings.email.config.user"];
|
93
|
+
}
|
94
|
+
if (req.body["settings.email.config.pass"]!=undefined) {
|
95
|
+
update["settings.email.config.pass"] = req.body["settings.email.config.pass"];
|
96
|
+
}
|
97
|
+
|
98
|
+
|
99
|
+
|
100
|
+
/*
|
101
|
+
|
102
|
+
if (req.body.settings.email.templates.assignedRequest!=undefined) {
|
103
|
+
// if (req.body["settings.email.templates.assignedRequest.html"]!=undefined) {
|
104
|
+
console.log("assignedRequest");
|
105
|
+
update["settings.email.templates.assignedRequest"] = req.body.settings.email.templates.assignedRequest;
|
106
|
+
}
|
107
|
+
if (req.body["settings.email.templates.assignedEmailMessage.html"]!=undefined) {
|
108
|
+
update["settings.email.templates.assignedEmailMessage.html"] = req.body["settings.email.templates.assignedEmailMessage.html"];
|
109
|
+
}
|
110
|
+
if (req.body.settings.email.templates.pooledRequest!=undefined) {
|
111
|
+
console.log("pooledRequest");
|
112
|
+
update["settings.email.templates.pooledRequest"] = req.body.settings.email.templates.pooledRequest;
|
113
|
+
}
|
114
|
+
*/
|
115
|
+
|
53
116
|
if (req.body["settings.chat_limit_on"]!=undefined) {
|
54
117
|
update["settings.chat_limit_on"] = req.body["settings.chat_limit_on"];
|
55
118
|
}
|
@@ -96,7 +159,7 @@ router.put('/:projectid', [passport.authenticate(['basic', 'jwt'], { session: fa
|
|
96
159
|
|
97
160
|
winston.debug('UPDATE PROJECT REQ BODY ', update);
|
98
161
|
|
99
|
-
|
162
|
+
// console.log("update",JSON.stringify(update));
|
100
163
|
|
101
164
|
Project.findByIdAndUpdate(req.params.projectid, update, { new: true, upsert: true }, function (err, updatedProject) {
|
102
165
|
if (err) {
|
@@ -143,6 +206,50 @@ router.patch('/:projectid', [passport.authenticate(['basic', 'jwt'], { session:
|
|
143
206
|
}
|
144
207
|
|
145
208
|
|
209
|
+
|
210
|
+
if (req.body["settings.email.templates.assignedRequest"]!=undefined) {
|
211
|
+
update["settings.email.templates.assignedRequest"] = req.body["settings.email.templates.assignedRequest"];
|
212
|
+
}
|
213
|
+
if (req.body["settings.email.templates.assignedEmailMessage"]!=undefined) {
|
214
|
+
update["settings.email.templates.assignedEmailMessage"] = req.body["settings.email.templates.assignedEmailMessage"];
|
215
|
+
}
|
216
|
+
if (req.body["settings.email.templates.pooledRequest"]!=undefined) {
|
217
|
+
update["settings.email.templates.pooledRequest"] = req.body["settings.email.templates.pooledRequest"];
|
218
|
+
}
|
219
|
+
if (req.body["settings.email.templates.pooledEmailMessage"]!=undefined) {
|
220
|
+
update["settings.email.templates.pooledEmailMessage"] = req.body["settings.email.templates.pooledEmailMessage"];
|
221
|
+
}
|
222
|
+
if (req.body["settings.email.templates.newMessage"]!=undefined) {
|
223
|
+
update["settings.email.templates.newMessage"] = req.body["settings.email.templates.newMessage"];
|
224
|
+
}
|
225
|
+
if (req.body["settings.email.templates.ticket"]!=undefined) {
|
226
|
+
update["settings.email.templates.ticket"] = req.body["settings.email.templates.ticket"];
|
227
|
+
}
|
228
|
+
if (req.body["settings.email.templates.sendTranscript"]!=undefined) {
|
229
|
+
update["settings.email.templates.sendTranscript"] = req.body["settings.email.templates.sendTranscript"];
|
230
|
+
}
|
231
|
+
|
232
|
+
|
233
|
+
if (req.body["settings.email.from"]!=undefined) {
|
234
|
+
update["settings.email.from"] = req.body["settings.email.from"];
|
235
|
+
}
|
236
|
+
if (req.body["settings.email.config.host"]!=undefined) {
|
237
|
+
update["settings.email.config.host"] = req.body["settings.email.config.host"];
|
238
|
+
}
|
239
|
+
if (req.body["settings.email.config.port"]!=undefined) {
|
240
|
+
update["settings.email.config.port"] = req.body["settings.email.config.port"];
|
241
|
+
}
|
242
|
+
if (req.body["settings.email.config.secure"]!=undefined) {
|
243
|
+
update["settings.email.config.secure"] = req.body["settings.email.config.secure"];
|
244
|
+
}
|
245
|
+
if (req.body["settings.email.config.user"]!=undefined) {
|
246
|
+
update["settings.email.config.user"] = req.body["settings.email.config.user"];
|
247
|
+
}
|
248
|
+
if (req.body["settings.email.config.pass"]!=undefined) {
|
249
|
+
update["settings.email.config.pass"] = req.body["settings.email.config.pass"];
|
250
|
+
}
|
251
|
+
|
252
|
+
|
146
253
|
if (req.body["settings.chat_limit_on"]!=undefined) {
|
147
254
|
update["settings.chat_limit_on"] = req.body["settings.chat_limit_on"];
|
148
255
|
}
|
package/routes/request.js
CHANGED
@@ -184,7 +184,8 @@ router.patch('/:requestid', function (req, res) {
|
|
184
184
|
}
|
185
185
|
|
186
186
|
requestEvent.emit("request.update", request);
|
187
|
-
requestEvent.emit("request.update.comment", {comment:"PATCH",request:request});
|
187
|
+
requestEvent.emit("request.update.comment", {comment:"PATCH",request:request}); //Deprecated
|
188
|
+
requestEvent.emit("request.updated", {comment:"PATCH",request:request, patch: update});
|
188
189
|
return res.json(request);
|
189
190
|
});
|
190
191
|
|
@@ -455,7 +456,8 @@ router.patch('/:requestid/attributes', function (req, res) {
|
|
455
456
|
}
|
456
457
|
winston.verbose(" saved request attributes",savedRequest.toObject())
|
457
458
|
requestEvent.emit("request.update", savedRequest);
|
458
|
-
requestEvent.emit("request.update.comment", {comment:"ATTRIBUTES_PATCH",request:savedRequest})
|
459
|
+
requestEvent.emit("request.update.comment", {comment:"ATTRIBUTES_PATCH",request:savedRequest});//Deprecated
|
460
|
+
requestEvent.emit("request.updated", {comment:"ATTRIBUTES_PATCH",request:savedRequest, patch: {attributes:data}});
|
459
461
|
requestEvent.emit("request.attributes.update", savedRequest);
|
460
462
|
res.json(savedRequest);
|
461
463
|
});
|
@@ -483,7 +485,9 @@ router.post('/:requestid/notes', function (req, res) {
|
|
483
485
|
return res.status(500).send({ success: false, msg: 'Error adding request object.' });
|
484
486
|
}
|
485
487
|
requestEvent.emit("request.update", updatedRequest);
|
486
|
-
requestEvent.emit("request.update.comment", {comment:"NOTE_ADD",request:updatedRequest})
|
488
|
+
requestEvent.emit("request.update.comment", {comment:"NOTE_ADD",request:updatedRequest});//Deprecated
|
489
|
+
requestEvent.emit("request.updated", {comment:"NOTE_ADD",request:updatedRequest, patch: {notes:note}});
|
490
|
+
|
487
491
|
return res.json(updatedRequest);
|
488
492
|
});
|
489
493
|
|
@@ -506,7 +510,9 @@ router.delete('/:requestid/notes/:noteid', function (req, res) {
|
|
506
510
|
return res.status(500).send({ success: false, msg: 'Error adding request object.' });
|
507
511
|
}
|
508
512
|
requestEvent.emit("request.update", updatedRequest);
|
509
|
-
requestEvent.emit("request.update.comment", {comment:"NOTE_DELETE",request:updatedRequest})
|
513
|
+
requestEvent.emit("request.update.comment", {comment:"NOTE_DELETE",request:updatedRequest});//Deprecated
|
514
|
+
// requestEvent.emit("request.updated", {comment:"NOTE_DELETE",request:updatedRequest, patch: {notes:req.params.noteid}});
|
515
|
+
|
510
516
|
return res.json(updatedRequest);
|
511
517
|
});
|
512
518
|
|
package/routes/user-request.js
CHANGED
@@ -45,7 +45,9 @@ router.patch('/:requestid/rating', function (req, res) {
|
|
45
45
|
}
|
46
46
|
|
47
47
|
requestEvent.emit("request.update", request);
|
48
|
-
requestEvent.emit("request.update.comment", {comment:"PATCH",request:request})
|
48
|
+
requestEvent.emit("request.update.comment", {comment:"PATCH",request:request});//Deprecated
|
49
|
+
requestEvent.emit("request.updated", {comment:"PATCH",request:request, patch: update});
|
50
|
+
|
49
51
|
return res.json(request);
|
50
52
|
});
|
51
53
|
|
package/services/emailService.js
CHANGED
@@ -119,6 +119,7 @@ class EmailService {
|
|
119
119
|
}
|
120
120
|
|
121
121
|
readTemplate(templateName, settings) {
|
122
|
+
// aggiunsta questo
|
122
123
|
var that = this;
|
123
124
|
winston.debug('EmailService readTemplate: '+ templateName + ' ' + JSON.stringify(settings));
|
124
125
|
|
@@ -246,11 +247,19 @@ class EmailService {
|
|
246
247
|
|
247
248
|
// send mail with defined transport object
|
248
249
|
this.getTransport(mail.config).sendMail(mailOptions, (error, info) => {
|
249
|
-
if (error) {
|
250
|
+
if (error) {
|
251
|
+
if (mail.callback){
|
252
|
+
mail.callback(error, {info:info});
|
253
|
+
}
|
250
254
|
return winston.error("Error sending email ", {error:error, mailOptions:mailOptions});
|
251
255
|
}
|
252
256
|
winston.verbose('Email sent:', {info: info});
|
253
257
|
winston.debug('Email sent:', {info: info, mailOptions: mailOptions});
|
258
|
+
|
259
|
+
if (mail.callback){
|
260
|
+
mail.callback(error, {info:info});
|
261
|
+
}
|
262
|
+
|
254
263
|
// Preview only available when sending through an Ethereal account
|
255
264
|
// winston.debug('Preview URL: %s', nodemailer.getTestMessageUrl(info));
|
256
265
|
|
@@ -260,7 +269,7 @@ class EmailService {
|
|
260
269
|
}
|
261
270
|
|
262
271
|
|
263
|
-
async sendTest(to) {
|
272
|
+
async sendTest(to, configEmail, callback) {
|
264
273
|
|
265
274
|
var that = this;
|
266
275
|
|
@@ -268,19 +277,12 @@ class EmailService {
|
|
268
277
|
|
269
278
|
var template = handlebars.compile(html);
|
270
279
|
|
271
|
-
var replacements = {
|
272
|
-
user: {name: "andrea"},
|
273
|
-
enabled: true
|
280
|
+
var replacements = {
|
274
281
|
};
|
275
282
|
|
276
283
|
var html = template(replacements);
|
277
|
-
|
278
|
-
that.send({to:to, subject:`TileDesk test email`,html: html});
|
279
|
-
|
280
|
-
//that.send(that.bcc, `TileDesk test email - notification`, html);
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
+
|
285
|
+
return that.send({to:to, subject:`TileDesk test email`, config: configEmail, html: html, callback: callback});
|
284
286
|
|
285
287
|
}
|
286
288
|
|
@@ -264,10 +264,10 @@ class FaqBotHandler {
|
|
264
264
|
|
265
265
|
|
266
266
|
var url = faq_kb.url+"/parse";
|
267
|
-
winston.
|
267
|
+
winston.debug("fulltext search external url " + url);
|
268
268
|
|
269
269
|
var json = {text: message.text, language: faq_kb.language, id_project: message.id_project, id_faq_kb: faq_kb._id};
|
270
|
-
winston.
|
270
|
+
winston.debug("fulltext search external json", json);
|
271
271
|
|
272
272
|
var headers = {
|
273
273
|
'Content-Type' : 'application/json',
|
@@ -276,14 +276,14 @@ class FaqBotHandler {
|
|
276
276
|
};
|
277
277
|
|
278
278
|
var res = await httpUtil.call(url, headers, json, "POST")
|
279
|
-
winston.
|
279
|
+
winston.debug("res", res);
|
280
280
|
|
281
281
|
if (res && res.intent && res.intent.name) {
|
282
282
|
var intent_name = res.intent.name;
|
283
|
-
winston.
|
283
|
+
winston.debug("intent_name", intent_name);
|
284
284
|
//filtra su intent name
|
285
285
|
query.intent_display_name = intent_name;
|
286
|
-
winston.
|
286
|
+
winston.debug("query",query);
|
287
287
|
|
288
288
|
}
|
289
289
|
} else {
|
@@ -294,7 +294,7 @@ class FaqBotHandler {
|
|
294
294
|
search_obj["$language"] = faq_kb.language;
|
295
295
|
}
|
296
296
|
query.$text = search_obj;
|
297
|
-
winston.
|
297
|
+
winston.debug("fulltext search query", query);
|
298
298
|
|
299
299
|
mongoproject = {score: { $meta: "textScore" } };
|
300
300
|
sort = { score: { $meta: "textScore" } } //https://docs.mongodb.com/manual/reference/operator/query/text/#sort-by-text-search-score
|
File without changes
|