@tiledesk/tiledesk-server 2.5.3 → 2.7.1
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 +10 -0
- package/README.md +1 -1
- package/app.js +7 -1
- package/config/labels/widget.json +257 -252
- package/event/botEvent.js +24 -3
- package/jobs.js +9 -1
- package/jobsManager.js +13 -1
- package/middleware/fetchLabels.js +23 -13
- package/package.json +6 -4
- package/pubmodules/queue/reconnect.js +47 -0
- package/pubmodules/trigger/default.js +2 -2
- package/pubmodules/trigger/rulesTrigger.js +14 -2
- package/routes/kb.js +307 -62
- package/services/QuoteManager.js +26 -20
- package/services/Scheduler.js +33 -0
- package/services/openaiService.js +12 -11
- package/services/requestService.js +96 -92
- package/services/updateLeadQueued.js +149 -0
- package/test/TooManykbUrlsList.txt +304 -0
- package/test/kbRoute.js +331 -20
- package/test/kbUrlsList.txt +4 -0
- package/utils/jobs-worker-queue-manager/JobManagerV2.js +146 -0
- package/utils/jobs-worker-queue-manager/queueManagerClassV2.js +355 -0
    
        package/event/botEvent.js
    CHANGED
    
    | @@ -33,9 +33,30 @@ class BotEvent extends EventEmitter { | |
| 33 33 | 
             
                        winston.debug("message", message);
         | 
| 34 34 |  | 
| 35 35 | 
             
                        // TODO usa meglio se attributes.reply_always=true
         | 
| 36 | 
            -
             | 
| 37 | 
            -
             | 
| 38 | 
            -
             | 
| 36 | 
            +
             | 
| 37 | 
            +
                        // if (message.sender === "system" && message.text && message.text!="\\start") {
         | 
| 38 | 
            +
                        //     winston.debug("it s a message sent from system, exit");
         | 
| 39 | 
            +
                        //     return null;
         | 
| 40 | 
            +
                        // }
         | 
| 41 | 
            +
             | 
| 42 | 
            +
             | 
| 43 | 
            +
                        //sbagliato
         | 
| 44 | 
            +
                        // if (message.sender === "system" && message.text && (message.text=="\\start" || message.text=="/start") ) {
         | 
| 45 | 
            +
                        //     winston.debug("it s a start message");
         | 
| 46 | 
            +
                        // } else {
         | 
| 47 | 
            +
                        //     winston.debug("it s a message sent from system, exit");
         | 
| 48 | 
            +
                        //     return null;
         | 
| 49 | 
            +
                        // }
         | 
| 50 | 
            +
             | 
| 51 | 
            +
                        if (message.sender === "system") {
         | 
| 52 | 
            +
                            if (message.text && (message.text=="\\start" || message.text=="/start") ) {
         | 
| 53 | 
            +
                                winston.debug("it s a start message");
         | 
| 54 | 
            +
                            } else {
         | 
| 55 | 
            +
                                winston.debug("it s a message sent from system, exit");
         | 
| 56 | 
            +
                                return null;
         | 
| 57 | 
            +
                            }
         | 
| 58 | 
            +
                        } else {
         | 
| 59 | 
            +
                            winston.debug("it s a message sent from other let s go");
         | 
| 39 60 | 
             
                        }
         | 
| 40 61 |  | 
| 41 62 | 
             
                        if (message.text && ( message.text.indexOf("\\agent") > -1 || message.text.indexOf("\\close") > -1)) { //not reply to a message containing \\agent
         | 
    
        package/jobs.js
    CHANGED
    
    | @@ -28,6 +28,9 @@ var botSubscriptionNotifier = require('./services/BotSubscriptionNotifier'); | |
| 28 28 | 
             
            const botEvent = require('./event/botEvent');
         | 
| 29 29 | 
             
            var channelManager = require('./channels/channelManager');
         | 
| 30 30 |  | 
| 31 | 
            +
            var updateLeadQueued = require('./services/updateLeadQueued');
         | 
| 32 | 
            +
             | 
| 33 | 
            +
             | 
| 31 34 | 
             
            require('./services/mongoose-cache-fn')(mongoose);
         | 
| 32 35 |  | 
| 33 36 |  | 
| @@ -80,7 +83,7 @@ async function main() | |
| 80 83 |  | 
| 81 84 |  | 
| 82 85 |  | 
| 83 | 
            -
                let jobsManager = new JobsManager(undefined, geoService, botEvent, subscriptionNotifierQueued, botSubscriptionNotifier);
         | 
| 86 | 
            +
                let jobsManager = new JobsManager(undefined, geoService, botEvent, subscriptionNotifierQueued, botSubscriptionNotifier, updateLeadQueued);
         | 
| 84 87 |  | 
| 85 88 | 
             
                jobsManager.listen();
         | 
| 86 89 |  | 
| @@ -101,6 +104,11 @@ async function main() | |
| 101 104 | 
             
                winston.info("whatsappQueue");
         | 
| 102 105 | 
             
                jobsManager.listenWhatsappQueue(whatsappQueue);
         | 
| 103 106 |  | 
| 107 | 
            +
                let trainingQueue = require('@tiledesk/tiledesk-train-jobworker');
         | 
| 108 | 
            +
                winston.info("trainingQueue");
         | 
| 109 | 
            +
                jobsManager.listenTrainingQueue(trainingQueue);
         | 
| 110 | 
            +
             | 
| 111 | 
            +
             | 
| 104 112 | 
             
                let scheduler = require('./pubmodules/scheduler');    
         | 
| 105 113 | 
             
                jobsManager.listenScheduler(scheduler);
         | 
| 106 114 |  | 
    
        package/jobsManager.js
    CHANGED
    
    | @@ -2,7 +2,7 @@ | |
| 2 2 | 
             
            var winston = require('./config/winston');
         | 
| 3 3 |  | 
| 4 4 | 
             
            class JobsManager {
         | 
| 5 | 
            -
                constructor(jobWorkerEnabled, geoService, botEvent, subscriptionNotifierQueued, botSubscriptionNotifier) {
         | 
| 5 | 
            +
                constructor(jobWorkerEnabled, geoService, botEvent, subscriptionNotifierQueued, botSubscriptionNotifier, updateLeadQueued) {
         | 
| 6 6 | 
             
                    this.geoService = geoService;
         | 
| 7 7 | 
             
                    this.botEvent = botEvent;
         | 
| 8 8 | 
             
                    // this.subscriptionNotifier = subscriptionNotifier;
         | 
| @@ -19,6 +19,8 @@ class JobsManager { | |
| 19 19 | 
             
                    //     this.jobWorkerEnabled = true;
         | 
| 20 20 | 
             
                    // }
         | 
| 21 21 | 
             
                    // winston.info("JobsManager jobWorkerEnabled: "+ this.jobWorkerEnabled);  
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                    this.updateLeadQueued = updateLeadQueued;
         | 
| 22 24 | 
             
                }
         | 
| 23 25 |  | 
| 24 26 |  | 
| @@ -34,6 +36,8 @@ class JobsManager { | |
| 34 36 | 
             
                    // this.subscriptionNotifier.start();
         | 
| 35 37 | 
             
                    this.subscriptionNotifierQueued.start();
         | 
| 36 38 |  | 
| 39 | 
            +
                    this.updateLeadQueued.listen();
         | 
| 40 | 
            +
             | 
| 37 41 | 
             
                    // this.botSubscriptionNotifier.start(); // disabled
         | 
| 38 42 | 
             
                }
         | 
| 39 43 |  | 
| @@ -82,6 +86,14 @@ class JobsManager { | |
| 82 86 | 
             
                    // this.whatsappWorker = whatsappQueue;
         | 
| 83 87 | 
             
                    // this.whatsappQueue.listen(); // oppure codice
         | 
| 84 88 | 
             
                }
         | 
| 89 | 
            +
             | 
| 90 | 
            +
                listenTrainingQueue(trainingQueue) {
         | 
| 91 | 
            +
                    console.log("JobsManager listenTrainingQueue started");
         | 
| 92 | 
            +
                    console.log("trainingQueue is: ", trainingQueue)
         | 
| 93 | 
            +
                    if (this.jobWorkerEnabled == true) {
         | 
| 94 | 
            +
                        return winston.info("JobsManager jobWorkerEnabled is enabled. Skipping listener for Training Queue");  
         | 
| 95 | 
            +
                    }
         | 
| 96 | 
            +
                }
         | 
| 85 97 | 
             
            }
         | 
| 86 98 |  | 
| 87 99 |  | 
| @@ -4,20 +4,30 @@ var path = require('path'); | |
| 4 4 | 
             
            var winston = require('../config/winston');
         | 
| 5 5 |  | 
| 6 6 |  | 
| 7 | 
            -
            var labelsDir = __dirname+"/../config/labels/";
         | 
| 7 | 
            +
            var labelsDir = __dirname + "/../config/labels/";
         | 
| 8 8 | 
             
            winston.debug('labelsDir: ' + labelsDir);
         | 
| 9 9 |  | 
| 10 10 |  | 
| 11 | 
            -
            module.exports = function(req, res, next) {
         | 
| 12 | 
            -
             | 
| 13 | 
            -
             | 
| 14 | 
            -
             | 
| 15 | 
            -
             | 
| 16 | 
            -
             | 
| 17 | 
            -
             | 
| 18 | 
            -
             | 
| 19 | 
            -
             | 
| 20 | 
            -
             | 
| 21 | 
            -
             | 
| 22 | 
            -
             | 
| 11 | 
            +
            module.exports = function (req, res, next) {
         | 
| 12 | 
            +
              var filePath = path.join(labelsDir, 'widget.json');
         | 
| 13 | 
            +
             | 
| 14 | 
            +
              fs.readFile(filePath, { encoding: 'utf-8' }, function (err, data) {
         | 
| 15 | 
            +
                if (err) {
         | 
| 16 | 
            +
                  winston.error('Error getting labels', err);
         | 
| 17 | 
            +
                  return res.status(500).send({ success: false, msg: 'Error reading object.' });
         | 
| 18 | 
            +
                }
         | 
| 19 | 
            +
                winston.debug('label fetched', data);
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                // Replace {{ BRAND_NAME }} with process.env.BRAND_NAME value (default value "Tiledesk")
         | 
| 22 | 
            +
                let brand_name = process.env.BRAND_NAME;
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                if (brand_name) {
         | 
| 25 | 
            +
                  data = data.replaceAll("Tiledesk", brand_name);
         | 
| 26 | 
            +
                  data = data.replaceAll("tiledesk", brand_name.toLowerCase());
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                }
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                req.labels = JSON.parse(data);
         | 
| 31 | 
            +
                next();
         | 
| 32 | 
            +
              });
         | 
| 23 33 | 
             
            }
         | 
    
        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 | 
            +
              "version": "2.7.1",
         | 
| 5 5 | 
             
              "scripts": {
         | 
| 6 6 | 
             
                "start": "node ./bin/www",
         | 
| 7 7 | 
             
                "pretest": "mongodb-runner start",
         | 
| @@ -38,18 +38,19 @@ | |
| 38 38 | 
             
              "dependencies": {
         | 
| 39 39 | 
             
                "@tiledesk/tiledesk-apps": "^1.0.17",
         | 
| 40 40 | 
             
                "@tiledesk/tiledesk-chat21-app": "^1.1.8",
         | 
| 41 | 
            +
                "@tiledesk/tiledesk-chatbot-templates": "^0.1.2",
         | 
| 41 42 | 
             
                "@tiledesk/tiledesk-chatbot-util": "^0.8.33",
         | 
| 43 | 
            +
                "@tiledesk/tiledesk-client": "^0.10.10",
         | 
| 42 44 | 
             
                "@tiledesk/tiledesk-dialogflow-connector": "^1.8.4",
         | 
| 43 45 | 
             
                "@tiledesk/tiledesk-json-rules-engine": "^4.0.3",
         | 
| 44 46 | 
             
                "@tiledesk/tiledesk-kaleyra-proxy": "^0.1.7",
         | 
| 45 47 | 
             
                "@tiledesk/tiledesk-messenger-connector": "^0.1.18",
         | 
| 46 48 | 
             
                "@tiledesk/tiledesk-rasa-connector": "^1.0.10",
         | 
| 47 49 | 
             
                "@tiledesk/tiledesk-telegram-connector": "^0.1.10",
         | 
| 48 | 
            -
                "@tiledesk/tiledesk- | 
| 50 | 
            +
                "@tiledesk/tiledesk-train-jobworker": "^0.0.7",
         | 
| 51 | 
            +
                "@tiledesk/tiledesk-tybot-connector": "^0.2.57",
         | 
| 49 52 | 
             
                "@tiledesk/tiledesk-whatsapp-connector": "^0.1.64",
         | 
| 50 53 | 
             
                "@tiledesk/tiledesk-whatsapp-jobworker": "^0.0.7",
         | 
| 51 | 
            -
                "@tiledesk/tiledesk-chatbot-templates": "^0.1.2",
         | 
| 52 | 
            -
                "@tiledesk/tiledesk-client": "^0.10.10",
         | 
| 53 54 | 
             
                "amqplib": "^0.5.5",
         | 
| 54 55 | 
             
                "app-root-path": "^3.0.0",
         | 
| 55 56 | 
             
                "bcrypt-nodejs": "0.0.3",
         | 
| @@ -105,6 +106,7 @@ | |
| 105 106 | 
             
                "retry-request": "^4.2.2",
         | 
| 106 107 | 
             
                "serve-favicon": "~2.5.0",
         | 
| 107 108 | 
             
                "sharp": "^0.27.2",
         | 
| 109 | 
            +
                "sitemapper": "^3.2.8",
         | 
| 108 110 | 
             
                "stripe": "^7.2.0",
         | 
| 109 111 | 
             
                "uniqid": "^5.4.0",
         | 
| 110 112 | 
             
                "uuid": "^3.3.3",
         | 
| @@ -194,6 +194,19 @@ function startWorker() { | |
| 194 194 | 
             
                      winston.info("Data queue", oka)
         | 
| 195 195 | 
             
                    });
         | 
| 196 196 |  | 
| 197 | 
            +
                    ch.bindQueue(_ok.queue, exchange, "lead_update", {}, function(err3, oka) {
         | 
| 198 | 
            +
                      winston.info("Queue bind: "+_ok.queue+ " err: "+err3+ " key: lead_update");
         | 
| 199 | 
            +
                      winston.info("Data queue", oka)
         | 
| 200 | 
            +
                    });
         | 
| 201 | 
            +
             | 
| 202 | 
            +
                    ch.bindQueue(_ok.queue, exchange, "lead_fullname_email_update", {}, function(err3, oka) {
         | 
| 203 | 
            +
                      winston.info("Queue bind: "+_ok.queue+ " err: "+err3+ " key: lead_fullname_email_update");
         | 
| 204 | 
            +
                      winston.info("Data queue", oka)
         | 
| 205 | 
            +
                    });
         | 
| 206 | 
            +
             | 
| 207 | 
            +
                    
         | 
| 208 | 
            +
             | 
| 209 | 
            +
             | 
| 197 210 |  | 
| 198 211 |  | 
| 199 212 | 
             
                    ch.consume(queueName, processMsg, { noAck: false });
         | 
| @@ -295,6 +308,19 @@ function work(msg, cb) { | |
| 295 308 | 
             
                leadEvent.emit('lead.create.queue',  JSON.parse(message_string));
         | 
| 296 309 | 
             
              }
         | 
| 297 310 |  | 
| 311 | 
            +
              if (topic === 'lead_update') {
         | 
| 312 | 
            +
                winston.debug("reconnect here topic lead_update:" + topic); 
         | 
| 313 | 
            +
                // requestEvent.emit('request.update.queue',  msg.content);
         | 
| 314 | 
            +
                leadEvent.emit('lead.update.queue',  JSON.parse(message_string));
         | 
| 315 | 
            +
              }
         | 
| 316 | 
            +
             | 
| 317 | 
            +
              if (topic === 'lead_fullname_email_update') {
         | 
| 318 | 
            +
                winston.debug("reconnect here topic lead_fullname_email_update:" + topic); 
         | 
| 319 | 
            +
                // requestEvent.emit('request.update.queue',  msg.content);
         | 
| 320 | 
            +
                leadEvent.emit('lead.fullname.email.update.queue',  JSON.parse(message_string));
         | 
| 321 | 
            +
              }
         | 
| 322 | 
            +
             | 
| 323 | 
            +
             | 
| 298 324 |  | 
| 299 325 | 
             
              cb(true);
         | 
| 300 326 | 
             
            //   WebSocket.cb(true);
         | 
| @@ -422,6 +448,27 @@ function listen() { | |
| 422 448 | 
             
                  });
         | 
| 423 449 | 
             
                });
         | 
| 424 450 |  | 
| 451 | 
            +
             | 
| 452 | 
            +
                leadEvent.on('lead.update', function(lead) {
         | 
| 453 | 
            +
                  setImmediate(() => {
         | 
| 454 | 
            +
                    winston.debug("reconnect lead.update")
         | 
| 455 | 
            +
                    publish(exchange, "lead_update", Buffer.from(JSON.stringify(lead)));
         | 
| 456 | 
            +
                    winston.debug("reconnect: "+ Buffer.from(JSON.stringify(lead)))
         | 
| 457 | 
            +
                  });
         | 
| 458 | 
            +
                });
         | 
| 459 | 
            +
             | 
| 460 | 
            +
             | 
| 461 | 
            +
                leadEvent.on('lead.fullname.email.update', function(lead) {
         | 
| 462 | 
            +
                  setImmediate(() => {
         | 
| 463 | 
            +
                    winston.debug("reconnect lead.fullname.email.update")
         | 
| 464 | 
            +
                    publish(exchange, "lead_fullname_email_update", Buffer.from(JSON.stringify(lead)));
         | 
| 465 | 
            +
                    winston.debug("reconnect: "+ Buffer.from(JSON.stringify(lead)))
         | 
| 466 | 
            +
                  });
         | 
| 467 | 
            +
                });
         | 
| 468 | 
            +
             | 
| 469 | 
            +
             | 
| 470 | 
            +
                
         | 
| 471 | 
            +
             | 
| 425 472 | 
             
            }
         | 
| 426 473 |  | 
| 427 474 | 
             
            if (process.env.QUEUE_ENABLED === "true") {
         | 
| @@ -121,7 +121,7 @@ var tInviteBotObj = { | |
| 121 121 | 
             
                                {key:'request.departmentHasBot',fact: 'json',path: 'department.hasBot', operator:'equal', value: true},
         | 
| 122 122 | 
             
                                {key:'request.first_text',fact: 'json',path: 'first_text', operator:'equal', value: 'welcome'}
         | 
| 123 123 | 
             
                            ]},
         | 
| 124 | 
            -
                actions: [{key:'request.department.bot.launch'}], 
         | 
| 124 | 
            +
                actions: [{key:'request.department.bot.launch', parameters: {text:"/start"}}], 
         | 
| 125 125 | 
             
                enabled:true,
         | 
| 126 126 | 
             
                code: 's_invite_bot_01',
         | 
| 127 127 | 
             
                type: 'internal',
         | 
| @@ -196,7 +196,7 @@ var tInviteProactiveGreetingBotObj = { | |
| 196 196 | 
             
                                {key:'request.departmentHasBot',fact: 'json',path: 'department.hasBot', operator:'equal', value: true},
         | 
| 197 197 | 
             
                                {key:'request.first_text',fact: 'json',path: 'first_text', operator:'equal', value: 'callout'}
         | 
| 198 198 | 
             
                            ]},
         | 
| 199 | 
            -
                actions: [{key:'request.department.bot.launch'}], 
         | 
| 199 | 
            +
                actions: [{key:'request.department.bot.launch', parameters: {text:"/start"}}], 
         | 
| 200 200 | 
             
                enabled:true,
         | 
| 201 201 | 
             
                code: 's_invite_proactive_greeting_bot_01',
         | 
| 202 202 | 
             
                type: 'internal',
         | 
| @@ -686,6 +686,9 @@ class RulesTrigger { | |
| 686 686 |  | 
| 687 687 | 
             
                        try {
         | 
| 688 688 |  | 
| 689 | 
            +
                          winston.debug('triggerEventEmitter eventTrigger:', eventTrigger);
         | 
| 690 | 
            +
             | 
| 691 | 
            +
             | 
| 689 692 | 
             
                          winston.debug('runAction eventTrigger.eventSuccess:', eventTrigger.eventSuccess);
         | 
| 690 693 | 
             
                          var trigger = eventTrigger.trigger;         
         | 
| 691 694 | 
             
                          winston.debug('runAction trigger', trigger.toObject());
         | 
| @@ -706,6 +709,15 @@ class RulesTrigger { | |
| 706 709 | 
             
                          var id_project = eventTrigger.event.id_project;
         | 
| 707 710 | 
             
                          winston.debug('runAction action id_project: ' + id_project);
         | 
| 708 711 |  | 
| 712 | 
            +
             | 
| 713 | 
            +
             | 
| 714 | 
            +
                          var startText = "\\start";
         | 
| 715 | 
            +
                          if (action.parameters && action.parameters.text) {
         | 
| 716 | 
            +
                            startText = action.parameters.text;
         | 
| 717 | 
            +
                          }
         | 
| 718 | 
            +
                          winston.debug('runAction action startText: ' + startText);
         | 
| 719 | 
            +
             | 
| 720 | 
            +
             | 
| 709 721 | 
             
                          // reroute(request_id, id_project, nobot) {
         | 
| 710 722 | 
             
                          requestService.reroute(request_id, id_project).then(function(request) {
         | 
| 711 723 |  | 
| @@ -716,7 +728,7 @@ class RulesTrigger { | |
| 716 728 | 
             
                              'system', 
         | 
| 717 729 | 
             
                              'Bot',                                     
         | 
| 718 730 | 
             
                              request_id,
         | 
| 719 | 
            -
                               | 
| 731 | 
            +
                              startText, // /start controlla se chatbot nuovo manda /start altrimenti per i vecchi \start
         | 
| 720 732 | 
             
                              id_project,
         | 
| 721 733 | 
             
                              null,
         | 
| 722 734 | 
             
                              {subtype:'info', updateconversation : false}
         | 
| @@ -775,7 +787,7 @@ class RulesTrigger { | |
| 775 787 | 
             
                                'system', 
         | 
| 776 788 | 
             
                                'Bot',                                     
         | 
| 777 789 | 
             
                                request_id,
         | 
| 778 | 
            -
                                '\\start',
         | 
| 790 | 
            +
                                '\\start', // / start
         | 
| 779 791 | 
             
                                id_project,
         | 
| 780 792 | 
             
                                null,
         | 
| 781 793 | 
             
                                {subtype:'info', updateconversation : false}
         |