@tiledesk/tiledesk-server 2.2.30 → 2.2.31

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,4 +1,19 @@
1
1
 
2
+
3
+
4
+ # 2.2.31 (compatible with: Dashboard 2.2.37, Widget 5.0.25)
5
+ - Fix email template reading from project.
6
+ - Added transcript webpage for users without system messages
7
+ - Fix export messages to csv
8
+ - Fix ip address resolver
9
+ - Exclude poweredBy field from widget endpoint
10
+ - Bugfix when a conversation has a first_text with \agent
11
+ - Added rasa chatbot chatbot type
12
+ - Added visitor email and fullname in the fulltext index
13
+
14
+ # 2.2.30 -> PROD
15
+ - Log fix
16
+
2
17
  # 2.2.29
3
18
  - Added endpoint to find requests created by users and guests
4
19
  - Log fix
@@ -20,7 +35,7 @@
20
35
  - Added endpoint to close a request by guest
21
36
 
22
37
 
23
- # 2.2.26 -> PROD (compatible with dasboard ver. 2.2.35)
38
+ # 2.2.26 (compatible with dasboard ver. 2.2.35)
24
39
  - Tag fix for 2.2.25
25
40
 
26
41
  # 2.2.25
package/app.js CHANGED
@@ -320,7 +320,10 @@ var projectSetter = function (req, res, next) {
320
320
 
321
321
 
322
322
  function customDetection (req) {
323
- const ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress;
323
+ // const ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress;
324
+ const ip = (req.headers['x-forwarded-for'] || '').split(',').pop().trim() || //https://stackoverflow.com/questions/8107856/how-to-determine-a-users-ip-address-in-node
325
+ req.socket.remoteAddress
326
+
324
327
  winston.info("standard ip: "+ip); // ip address of the user
325
328
  return ip;
326
329
  }
package/models/request.js CHANGED
@@ -254,6 +254,7 @@ var RequestSchema = new Schema({
254
254
  required: false
255
255
  },
256
256
  location: LocationSchema,
257
+
257
258
  id_project: {
258
259
  type: String,
259
260
  required: true,
@@ -417,7 +418,9 @@ RequestSchema.index({ id_project: 1, request_id: 1 }
417
418
  // https://docs.mongodb.com/manual/reference/text-search-languages/#text-search-languages
418
419
 
419
420
  //TODO cambiare dummy con language? attento che il codice deve essere compatibile
420
- RequestSchema.index({transcript: 'text', rating_message: 'text', subject: 'text', "tags.tag": 'text', "notes.text": 'text'},
421
+
422
+
423
+ RequestSchema.index({transcript: 'text', rating_message: 'text', subject: 'text', "tags.tag": 'text', "notes.text": 'text', "snapshot.lead.email": 'text', "snapshot.lead.fullname": 'text' },
421
424
  {"name":"request_fulltext","default_language": defaultFullTextLanguage,"language_override": "dummy"}); // schema level
422
425
 
423
426
  // let query = {id_project: operatorSelectedEvent.id_project, participants: { $exists: true, $ne: [] }};
@@ -431,6 +434,9 @@ RequestSchema.index({ id_project: 1, preflight:1, updatedAt: -1 }); // used quer
431
434
 
432
435
  RequestSchema.index({ hasBot: 1, createdAt: 1 }); // suggested by atlas
433
436
 
437
+ RequestSchema.index({ id_project: 1, ticket_id: 1 });
438
+
439
+
434
440
 
435
441
  // cannot index parallel arrays [agents] [participants] {"driv
436
442
  // RequestSchema.index({ id_project: 1, status: 1, preflight:1, participants:1, "agents.id_user":1, updatedAt: -1 }); //NN LO APPLICA
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.30",
4
+ "version": "2.2.31",
5
5
  "scripts": {
6
6
  "start": "node ./bin/www",
7
7
  "pretest": "mongodb-runner start",
package/publiccode.yml ADDED
@@ -0,0 +1,110 @@
1
+ # This repository adheres to the publiccode.yml standard by including this
2
+ # metadata file that makes public software easily discoverable.
3
+ # More info at https://github.com/italia/publiccode.yml
4
+
5
+ publiccodeYmlVersion: '0.2'
6
+ categories:
7
+ - customer-service-and-support
8
+ - communications
9
+ - marketing
10
+ - mobile-marketing
11
+ description:
12
+ it:
13
+ apiDocumentation: 'https://developer.tiledesk.com/apis/rest-api'
14
+ documentation: 'https://gethelp.tiledesk.com'
15
+ features:
16
+ - live chat widget
17
+ - chatbot
18
+ - 'integration with DialogFlow, Rasa and all major AI solutions'
19
+ - ticketing
20
+ - multi-project management
21
+ - SLAs setting
22
+ - 'smart assignment of the queues '
23
+ - seamless conversation
24
+ - dashboard
25
+ - knowledge base
26
+ - mobile apps
27
+ genericName: Live chat with integrated chatbots
28
+ longDescription: |
29
+ To have fully satisfied customers is complex. Conversation’s actors
30
+ (chatbots and humans) should handoff to each other many times during a
31
+ chat to address customers needs.
32
+
33
+
34
+ Tiledesk provides a solution **orchestrating instant, asynchronous and
35
+ multichannel communication among all stakeholders of a typical
36
+ conversational architecture**: chatbots, support operators, end users,
37
+ colleagues, applications, etc.
38
+
39
+
40
+ **Main Features**:
41
+
42
+
43
+ - Live Chat Widget with full multichannel experience on Web and Mobile;
44
+
45
+ - Resolution Bot to automate customer support;
46
+
47
+ - Easy Integration with all major AI-platforms, cloud and Open source,
48
+ from DialogFlow to RASA;
49
+
50
+ - Ticketing Management system fully integrated into the platform and
51
+ instant conversation flow;
52
+
53
+ - Team Organization with multi-project management, SLAs setting, smart
54
+ assignment of the
55
+ queues, departments organization and much more;
56
+ - Seamless conversation to “jump” between different channels in a
57
+ transparent way for end
58
+ customers and agents;
59
+ - Chat Tools like typing indicator, off-line access, delivery receipts,
60
+ contact list and much more;
61
+
62
+ - Dashboard with real time analytics;
63
+
64
+ - Knowledge base.
65
+
66
+
67
+
68
+ Tiledesk is an **open source **project, made with passion in Salento
69
+ (Southern Italy).
70
+ shortDescription: |-
71
+ Tiledesk delivers scalable customer service to your mobile apps and your
72
+ website. It is a conversational platform that connects chatbots and
73
+ humans
74
+ developmentStatus: stable
75
+ it:
76
+ conforme:
77
+ gdpr: false
78
+ lineeGuidaDesign: false
79
+ misureMinimeSicurezza: false
80
+ modelloInteroperabilita: false
81
+ countryExtensionVersion: '0.2'
82
+ piattaforme:
83
+ anpr: false
84
+ cie: false
85
+ pagopa: false
86
+ spid: false
87
+ landingURL: 'https://tiledesk.com/install'
88
+ legal:
89
+ license: AGPL-3.0-only
90
+ localisation:
91
+ availableLanguages:
92
+ - it
93
+ - en
94
+ - es
95
+ - fr
96
+ - pt
97
+ - de
98
+ - ru
99
+ - tr
100
+ localisationReady: true
101
+ maintenance:
102
+ contacts:
103
+ - name: Andrea Sponziello
104
+ type: internal
105
+ name: Tiledesk
106
+ platforms:
107
+ - web
108
+ releaseDate: '2022-06-15'
109
+ softwareType: standalone/web
110
+ url: 'https://github.com/Tiledesk/tiledesk-deployment'
@@ -18,6 +18,8 @@ class PubModulesManager {
18
18
  this.messageTransformer = undefined;
19
19
 
20
20
  this.scheduler = undefined;
21
+
22
+ this.rasa = undefined;
21
23
  }
22
24
 
23
25
 
@@ -140,6 +142,21 @@ class PubModulesManager {
140
142
  }
141
143
 
142
144
 
145
+ try {
146
+ this.rasa = require('./rasa');
147
+ winston.debug("this.rasa:"+ this.rasa);
148
+ this.rasa.listener.listen();
149
+ winston.info("PubModulesManager initialized rasa.");
150
+ } catch(err) {
151
+ if (err.code == 'MODULE_NOT_FOUND') {
152
+ winston.info("PubModulesManager init rasa module not found");
153
+ }else {
154
+ winston.info("PubModulesManager error initializing init rasa module", err);
155
+ }
156
+ }
157
+
158
+
159
+
143
160
 
144
161
 
145
162
  }
@@ -0,0 +1,3 @@
1
+ const listener = require("./listener");
2
+
3
+ module.exports = {listener:listener };
@@ -0,0 +1,51 @@
1
+ const botEvent = require('../../event/botEvent');
2
+ var Faq_kb = require("../../models/faq_kb");
3
+ var winston = require('../../config/winston');
4
+
5
+ const BOT_RASA_ENDPOINT = process.env.BOT_RASA_ENDPOINT;
6
+ winston.debug("BOT_RASA_ENDPOINT: " + BOT_RASA_ENDPOINT);
7
+
8
+ if (BOT_RASA_ENDPOINT) {
9
+ winston.info("Rasa endpoint: " + BOT_RASA_ENDPOINT);
10
+ } else {
11
+ winston.info("Rasa endpoint not configured");
12
+ }
13
+
14
+
15
+ class Listener {
16
+
17
+ listen() {
18
+
19
+ winston.debug('rasa Listener listen');
20
+
21
+ var that = this;
22
+
23
+ botEvent.on('faqbot.create', function(bot) {
24
+ if (BOT_RASA_ENDPOINT) {
25
+
26
+ winston.info('bot.type:'+bot.type);
27
+ if (bot.type==="rasa") {
28
+
29
+ winston.info('qui.type:'+bot.type);
30
+
31
+
32
+ Faq_kb.findByIdAndUpdate(bot.id, {"url":BOT_RASA_ENDPOINT}, { new: true, upsert: true }, function (err, savedFaq_kb) {
33
+
34
+ // bot.save(function (err, savedFaq_kb) {
35
+ if (err) {
36
+ return winston.error('error saving faqkb rasa ', err)
37
+ }
38
+ winston.verbose('Saved faqkb rasa', savedFaq_kb.toObject())
39
+ });
40
+ }
41
+ }
42
+ });
43
+
44
+ }
45
+
46
+ }
47
+
48
+ var listener = new Listener();
49
+
50
+
51
+ module.exports = listener;
@@ -338,6 +338,7 @@ devi mandare un messaggio welcome tu altrimenti il bot inserito successivamente
338
338
  if (request.subject) {
339
339
  touchText = request.subject;
340
340
  }
341
+ touchText.replace("\\",""); //Bugfix when a conversation has a first_text with \agent
341
342
 
342
343
  // messageService.send(sender, senderFullname, recipient, text, id_project, createdBy, attributes, type);
343
344
  messageService.send(
package/routes/message.js CHANGED
@@ -139,7 +139,7 @@ async (req, res) => {
139
139
  .then(function(createdLead) {
140
140
 
141
141
 
142
-
142
+
143
143
  var new_request = {
144
144
  request_id: req.params.request_id,
145
145
  project_user_id: project_user._id,
@@ -312,9 +312,20 @@ async (req, res) => {
312
312
  // });
313
313
  // });
314
314
 
315
+ router.get('/csv', function(req, res) {
316
+
317
+ // console.log("csv");
318
+
319
+
320
+ return Message.find({"recipient": req.params.request_id, id_project: req.projectid}).sort({createdAt: 'asc'}).exec(function(err, messages) {
321
+ if (err) return next(err);
322
+ res.csv(messages, true);
323
+ });
324
+ });
325
+
315
326
  router.get('/:messageid', function(req, res) {
316
327
 
317
- console.log(req.body);
328
+ // console.log(req.body);
318
329
 
319
330
  Message.findById(req.params.messageid, function(err, message) {
320
331
  if (err) {
@@ -337,13 +348,7 @@ router.get('/', function(req, res) {
337
348
  });
338
349
  });
339
350
 
340
- router.get('/csv', function(req, res) {
341
351
 
342
- return Message.find({"recipient": req.params.request_id, id_project: req.projectid}).sort({createdAt: 'asc'}).exec(function(err, messages) {
343
- if (err) return next(err);
344
- res.csv(messages, true);
345
- });
346
- });
347
352
 
348
353
 
349
354
  module.exports = router;
@@ -367,7 +367,7 @@ router.get('/:project_userid', [passport.authenticate(['basic', 'jwt'], { sessio
367
367
 
368
368
 
369
369
  router.get('/users/search', [passport.authenticate(['basic', 'jwt'], { session: false }), validtoken, roleChecker.hasRoleOrTypes('agent', ['subscription'])], async (req, res, next) => {
370
- winston.info("--> users search ");
370
+ winston.debug("--> users search ");
371
371
 
372
372
  if (!req.project) {
373
373
  return res.status(404).send({ success: false, msg: 'Project not found.' });
@@ -376,10 +376,10 @@ router.get('/users/search', [passport.authenticate(['basic', 'jwt'], { session:
376
376
 
377
377
  let query = {email: req.query.email};
378
378
 
379
- winston.info('query: ', query);
379
+ winston.debug('query: ', query);
380
380
 
381
381
  let user = await User.findOne(query).exec();
382
- winston.info('user: ', user);
382
+ winston.debug('user: ', user);
383
383
 
384
384
  if (!user) {
385
385
  return res.status(404).send({ success: false, msg: 'Object not found.' });
@@ -387,7 +387,7 @@ router.get('/users/search', [passport.authenticate(['basic', 'jwt'], { session:
387
387
 
388
388
 
389
389
  let project_user = await Project_user.findOne({id_user: user._id, id_project: req.projectid}).exec();
390
- winston.info('project_user: ', project_user);
390
+ winston.debug('project_user: ', project_user);
391
391
 
392
392
  if (!project_user) {
393
393
  return res.status(403).json({msg: "Unauthorized. This is not a your teammate." });
package/routes/widget.js CHANGED
@@ -114,10 +114,38 @@ router.get('/', function(req, res, next) {
114
114
 
115
115
  }
116
116
 
117
+
118
+ var getProject = function(req) {
119
+ winston.info('getProject.');
120
+
121
+ return new Promise(function (resolve, reject) {
122
+
123
+ //@DISABLED_CACHE .cache(cacheUtil.queryTTL, "projects:query:id:status:100:"+req.projectid+":select:-settings")
124
+
125
+ Project.findOne({_id: req.projectid, status: 100}).select('-settings -ipFilter -ipFilterEnabled').exec(function(err, project) {
126
+ // not use .lean I need project.trialExpired
127
+
128
+ if (err) {
129
+ return reject({err: "Project Not Found"});
130
+ }
131
+
132
+ if (project && project.profile && (project.profile.type === 'free' && project.trialExpired === true) || (project.profile.type === 'payment' && project.isActiveSubscription === false)) {
133
+ winston.info('getProject remove poweredBy tag', project);
134
+ project.widget.poweredBy = undefined;
135
+ project.widget.baloonImage = undefined;
136
+ }
137
+
138
+ return resolve(project);
139
+ });
140
+
141
+ });
142
+
143
+ }
144
+
117
145
  // TOOD add labels
118
146
  Promise.all([
119
- Project.findOne({_id: req.projectid, status: 100}).select('-settings')
120
- //@DISABLED_CACHE .cache(cacheUtil.queryTTL, "projects:query:id:status:100:"+req.projectid+":select:-settings")
147
+
148
+ getProject(req)
121
149
  ,
122
150
  availableUsers()
123
151
  ,
@@ -98,13 +98,13 @@ class EmailService {
98
98
  this.host = process.env.EMAIL_HOST || config.host;
99
99
  winston.info('EmailService host: ' + this.host);
100
100
 
101
- this.secure = process.env.EMAIL_SECURE || false;
101
+ this.secure = process.env.EMAIL_SECURE || false;
102
102
  winston.info('EmailService secure: ' + this.secure);
103
103
 
104
104
  this.user = process.env.EMAIL_USERNAME || config.username;
105
105
  winston.info('EmailService username: ' + this.user);
106
106
 
107
- this.port = process.env.EMAIL_PORT;
107
+ this.port = process.env.EMAIL_PORT; //default is 587
108
108
  winston.info('EmailService port: ' + this.port);
109
109
 
110
110
 
@@ -123,11 +123,19 @@ class EmailService {
123
123
  var that = this;
124
124
  winston.debug('EmailService readTemplate: '+ templateName + ' ' + JSON.stringify(settings));
125
125
 
126
+
126
127
  if (settings && settings.email && settings.email.templates) {
128
+
127
129
  var templates = settings.email.templates;
128
130
  winston.debug('EmailService templates: ',templates);
129
- var template = templates[templateName];
131
+
132
+ var templateDbName = templateName.replace(".html", "");
133
+ winston.debug('EmailService templateDbName: '+templateDbName);
134
+
135
+
136
+ var template = templates[templateDbName];
130
137
  winston.debug('EmailService template: '+template);
138
+
131
139
  if (template) {
132
140
  // that.callback(template);
133
141
  return new Promise(function (resolve, reject) {
@@ -240,7 +248,6 @@ class EmailService {
240
248
  };
241
249
 
242
250
  winston.debug('mailOptions', mailOptions);
243
-
244
251
  if (!mail.to) {
245
252
  return winston.warn("EmailService send method. to field is not defined", mailOptions);
246
253
  }
@@ -273,7 +280,7 @@ class EmailService {
273
280
 
274
281
  var that = this;
275
282
 
276
- var html = await this.readTemplateFile('test.html');
283
+ var html = await this.readTemplate('test.html',{ "email" : {"templates": {test: "123"}}});
277
284
 
278
285
  var template = handlebars.compile(html);
279
286
 
@@ -282,7 +289,7 @@ class EmailService {
282
289
 
283
290
  var html = template(replacements);
284
291
 
285
- return that.send({to:to, subject:`TileDesk test email`, config: configEmail, html: html, callback: callback});
292
+ return that.send({to:to, subject:`Tiledesk test email`, config: configEmail, html: html, callback: callback});
286
293
 
287
294
  }
288
295
 
@@ -399,10 +406,12 @@ class EmailService {
399
406
  }
400
407
  }
401
408
 
402
- let subject = `[TileDesk ${project ? project.name : '-'}] New Assigned Chat`;
409
+
410
+
411
+ let subject = `[Tiledesk ${project ? project.name : '-'}] New Assigned Chat`;
403
412
 
404
413
  if (request.subject) {
405
- subject = `[TileDesk ${project ? project.name : '-'}] ${request.subject}`;
414
+ subject = `[Tiledesk ${project ? project.name : '-'}] ${request.subject}`;
406
415
  }
407
416
 
408
417
  // if (request.ticket_id) {
@@ -546,10 +555,10 @@ class EmailService {
546
555
  }
547
556
 
548
557
 
549
- let subject = `[TileDesk ${project ? project.name : '-'}] New message`;
558
+ let subject = `[Tiledesk ${project ? project.name : '-'}] New message`;
550
559
 
551
560
  if (request.subject) {
552
- subject = `[TileDesk ${project ? project.name : '-'}] ${request.subject}`;
561
+ subject = `[Tiledesk ${project ? project.name : '-'}] ${request.subject}`;
553
562
  }
554
563
  if (request.ticket_id) {
555
564
  subject = `[Ticket #${request.ticket_id}] New message`;
@@ -690,10 +699,10 @@ class EmailService {
690
699
  }
691
700
  }
692
701
 
693
- let subject = `[TileDesk ${project ? project.name : '-'}] New Pooled Chat`;
702
+ let subject = `[Tiledesk ${project ? project.name : '-'}] New Pooled Chat`;
694
703
 
695
704
  if (request.subject) {
696
- subject = `[TileDesk ${project ? project.name : '-'}] ${request.subject}`;
705
+ subject = `[Tiledesk ${project ? project.name : '-'}] ${request.subject}`;
697
706
  }
698
707
  // if (request.ticket_id) {
699
708
  // subject = `[Ticket #${request.ticket_id}] New Pooled Chat`;
@@ -831,10 +840,10 @@ class EmailService {
831
840
  }
832
841
 
833
842
 
834
- let subject = `[TileDesk ${project ? project.name : '-'}] New Message`;
843
+ let subject = `[Tiledesk ${project ? project.name : '-'}] New Message`;
835
844
 
836
845
  if (request.subject) {
837
- subject = `[TileDesk ${project ? project.name : '-'}] ${request.subject}`;
846
+ subject = `[Tiledesk ${project ? project.name : '-'}] ${request.subject}`;
838
847
  }
839
848
  if (request.ticket_id) {
840
849
  subject = `[Ticket #${request.ticket_id}] New Message`;
@@ -982,7 +991,7 @@ class EmailService {
982
991
  replyTo: replyTo,
983
992
  inReplyTo: inReplyTo,
984
993
  references: references,
985
- subject:`[TileDesk ${project ? project.name : '-'}] New Offline Message`,
994
+ subject:`[Tiledesk ${project ? project.name : '-'}] New Offline Message`,
986
995
  html:html,
987
996
  config:configEmail,
988
997
  headers: headers
@@ -997,7 +1006,7 @@ class EmailService {
997
1006
  replyTo: replyTo,
998
1007
  inReplyTo: inReplyTo,
999
1008
  references: references,
1000
- subject: `[TileDesk ${project ? project.name : '-'}] New Offline Message - notification`,
1009
+ subject: `[Tiledesk ${project ? project.name : '-'}] New Offline Message - notification`,
1001
1010
  html:html,
1002
1011
  headers: headers
1003
1012
  });
@@ -1247,8 +1256,8 @@ class EmailService {
1247
1256
  var html = template(replacements);
1248
1257
 
1249
1258
 
1250
- that.send({to: to, subject: '[TileDesk] Password reset request', html:html});
1251
- that.send({to:that.bcc, subject: '[TileDesk] Password reset request - notification', html:html });
1259
+ that.send({to: to, subject: '[Tiledesk] Password reset request', html:html});
1260
+ that.send({to:that.bcc, subject: '[Tiledesk] Password reset request - notification', html:html });
1252
1261
 
1253
1262
  }
1254
1263
 
@@ -1285,8 +1294,8 @@ class EmailService {
1285
1294
  var html = template(replacements);
1286
1295
 
1287
1296
 
1288
- that.send({to: to, subject:'[TileDesk] Your password has been changed', html:html });
1289
- that.send({to: that.bcc, subject: '[TileDesk] Your password has been changed - notification', html: html });
1297
+ that.send({to: to, subject:'[Tiledesk] Your password has been changed', html:html });
1298
+ that.send({to: that.bcc, subject: '[Tiledesk] Your password has been changed - notification', html: html });
1290
1299
 
1291
1300
  }
1292
1301
 
@@ -1332,8 +1341,8 @@ class EmailService {
1332
1341
  var html = template(replacements);
1333
1342
 
1334
1343
 
1335
- that.send({to:to, subject: `[TileDesk] You have been invited to the '${projectName}' project`, html:html});
1336
- that.send({to: that.bcc, subject: `[TileDesk] You have been invited to the '${projectName}' project - notification`, html: html});
1344
+ that.send({to:to, subject: `[Tiledesk] You have been invited to the '${projectName}' project`, html:html});
1345
+ that.send({to: that.bcc, subject: `[Tiledesk] You have been invited to the '${projectName}' project - notification`, html: html});
1337
1346
  }
1338
1347
 
1339
1348
  // ok
@@ -1376,8 +1385,8 @@ class EmailService {
1376
1385
 
1377
1386
  var html = template(replacements);
1378
1387
 
1379
- that.send({to:to, subject: `[TileDesk] You have been invited to the '${projectName}' project`, html:html });
1380
- that.send({to: that.bcc, subject: `[TileDesk] You have been invited to the '${projectName}' project - notification`, html: html});
1388
+ that.send({to:to, subject: `[Tiledesk] You have been invited to the '${projectName}' project`, html:html });
1389
+ that.send({to: that.bcc, subject: `[Tiledesk] You have been invited to the '${projectName}' project - notification`, html: html});
1381
1390
 
1382
1391
  }
1383
1392
 
@@ -1415,8 +1424,8 @@ class EmailService {
1415
1424
  var html = template(replacements);
1416
1425
 
1417
1426
 
1418
- that.send({to: to, subject: `[TileDesk] Verify your email address`, html:html });
1419
- that.send({to: that.bcc, subject: `[TileDesk] Verify your email address `+to + " - notification", html:html });
1427
+ that.send({to: to, subject: `[Tiledesk] Verify your email address`, html:html });
1428
+ that.send({to: that.bcc, subject: `[Tiledesk] Verify your email address `+to + " - notification", html:html });
1420
1429
 
1421
1430
  }
1422
1431
 
@@ -1483,8 +1492,8 @@ async sendRequestTranscript(to, messages, request, project) {
1483
1492
  winston.verbose("custom email setting found: ", configEmail);
1484
1493
  }
1485
1494
 
1486
- that.send({to:to, subject: '[TileDesk] Transcript', html:html, config: configEmail});
1487
- that.send({to: that.bcc, subject: '[TileDesk] Transcript - notification', html:html });
1495
+ that.send({to:to, subject: '[Tiledesk] Transcript', html:html, config: configEmail});
1496
+ that.send({to: that.bcc, subject: '[Tiledesk] Transcript - notification', html:html });
1488
1497
 
1489
1498
  }
1490
1499
 
@@ -1496,6 +1505,6 @@ async sendRequestTranscript(to, messages, request, project) {
1496
1505
 
1497
1506
  var emailService = new EmailService();
1498
1507
 
1499
- //emailService.sendTest("al@f21.it");
1508
+ // emailService.sendTest("al@f21.it");
1500
1509
 
1501
1510
  module.exports = emailService;