@tiledesk/tiledesk-server 2.3.36 → 2.3.37
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/.github/workflows/docker-community-worker-push-latest.yml +23 -0
- package/.github/workflows/docker-image-tag-worker-community-tag-push.yml +22 -0
- package/CHANGELOG.md +6 -0
- package/Dockerfile-jobs +31 -0
- package/app.js +12 -2
- package/channels/chat21/chat21Handler.js +19 -3
- package/jobs.js +80 -0
- package/jobsManager.js +47 -0
- package/models/faq.js +5 -1
- package/package.json +1 -1
- package/pubmodules/activities/activityArchiver.js +197 -90
- package/pubmodules/emailNotification/requestNotification.js +16 -15
- package/pubmodules/events/eventRoute.js +3 -0
- package/pubmodules/pubModulesManager.js +5 -5
- package/pubmodules/queue/reconnect.js +96 -12
- package/pubmodules/queue/reconnectFanout.js +18 -12
- package/pubmodules/trigger/rulesTrigger.js +7 -1
- package/routes/faq.js +5 -1
- package/routes/faq_kb.js +131 -5
- package/routes/users-util.js +9 -1
- package/services/emailService.js +1 -1
- package/services/faqService.js +15 -0
- package/services/geoService.js +5 -5
- package/services/requestService.js +1 -0
- package/test/example-json.txt +1 -0
- package/test/faqRoute.js +47 -99
- package/test/faqkbRoute.js +204 -66
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
name: Docker Image Community latest CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [ master ]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [ master ]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
push_to_registry:
|
|
11
|
+
name: Push Docker image to Docker Hub
|
|
12
|
+
runs-on: ubuntu-latest
|
|
13
|
+
|
|
14
|
+
steps:
|
|
15
|
+
- uses: actions/checkout@v2
|
|
16
|
+
name: Check out the repo
|
|
17
|
+
- uses: docker/build-push-action@v1
|
|
18
|
+
with:
|
|
19
|
+
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
|
20
|
+
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
|
21
|
+
repository: tiledesk/tiledesk-server-worker
|
|
22
|
+
dockerfile: Dockerfile-jobs
|
|
23
|
+
tags: latest
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
name: Publish Docker Community image tags
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- '**' # Push events to every tag including hierarchical tags like
|
|
7
|
+
jobs:
|
|
8
|
+
|
|
9
|
+
push_to_registry:
|
|
10
|
+
name: Push Docker image to Docker Hub
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
steps:
|
|
13
|
+
- name: Check out the repo
|
|
14
|
+
uses: actions/checkout@v2
|
|
15
|
+
- name: Push to Docker Hub
|
|
16
|
+
uses: docker/build-push-action@v1
|
|
17
|
+
with:
|
|
18
|
+
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
|
19
|
+
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
|
20
|
+
dockerfile: Dockerfile-jobs
|
|
21
|
+
repository: tiledesk/tiledesk-server-worker
|
|
22
|
+
tag_with_ref: true
|
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,12 @@
|
|
|
4
4
|
🚀 IN PRODUCTION 🚀
|
|
5
5
|
(https://www.npmjs.com/package/@tiledesk/tiledesk-server/v/2.3.35)
|
|
6
6
|
|
|
7
|
+
# Untagged
|
|
8
|
+
- Created a job worker for geo db, activities and email notification
|
|
9
|
+
|
|
10
|
+
# 2.3.36
|
|
11
|
+
- BugFix email secure with false value. https://tiledesk.discourse.group/t/error-sending-email/180
|
|
12
|
+
|
|
7
13
|
# 2.3.35
|
|
8
14
|
- Added user util endpoint for contact lookup from chat21
|
|
9
15
|
|
package/Dockerfile-jobs
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
FROM node:12
|
|
2
|
+
|
|
3
|
+
RUN apt-get update
|
|
4
|
+
|
|
5
|
+
# Create app directory
|
|
6
|
+
WORKDIR /usr/src/app
|
|
7
|
+
|
|
8
|
+
ARG NPM_TOKEN
|
|
9
|
+
|
|
10
|
+
RUN if [ "$NPM_TOKEN" ]; \
|
|
11
|
+
then RUN COPY .npmrc_ .npmrc \
|
|
12
|
+
else export SOMEVAR=world; \
|
|
13
|
+
fi
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
# Install app dependencies
|
|
17
|
+
# A wildcard is used to ensure both package.json AND package-lock.json are copied
|
|
18
|
+
# where available (npm@5+)
|
|
19
|
+
COPY package*.json ./
|
|
20
|
+
|
|
21
|
+
RUN npm install --production
|
|
22
|
+
|
|
23
|
+
RUN rm -f .npmrc
|
|
24
|
+
|
|
25
|
+
# Bundle app source
|
|
26
|
+
COPY . .
|
|
27
|
+
|
|
28
|
+
EXPOSE 3000
|
|
29
|
+
|
|
30
|
+
CMD [ "node", "jobs.js" ]
|
|
31
|
+
|
package/app.js
CHANGED
|
@@ -144,8 +144,18 @@ botSubscriptionNotifier.start();
|
|
|
144
144
|
|
|
145
145
|
|
|
146
146
|
var geoService = require('./services/geoService');
|
|
147
|
-
geoService.listen();
|
|
147
|
+
// geoService.listen();
|
|
148
148
|
|
|
149
|
+
let JobsManager = require('./jobsManager');
|
|
150
|
+
|
|
151
|
+
let jobWorkerEnabled = false;
|
|
152
|
+
if (process.env.JOB_WORKER_ENABLED=="true" || process.env.JOB_WORKER_ENABLED == true) {
|
|
153
|
+
jobWorkerEnabled = true;
|
|
154
|
+
}
|
|
155
|
+
winston.info("JobsManager jobWorkerEnabled: "+ jobWorkerEnabled);
|
|
156
|
+
|
|
157
|
+
let jobsManager = new JobsManager(jobWorkerEnabled,geoService);
|
|
158
|
+
jobsManager.listen();
|
|
149
159
|
|
|
150
160
|
|
|
151
161
|
|
|
@@ -153,7 +163,7 @@ var faqBotHandler = require('./services/faqBotHandler');
|
|
|
153
163
|
faqBotHandler.listen();
|
|
154
164
|
|
|
155
165
|
var pubModulesManager = require('./pubmodules/pubModulesManager');
|
|
156
|
-
pubModulesManager.init({express:express, mongoose:mongoose, passport:passport, databaseUri:databaseUri, routes:{}});
|
|
166
|
+
pubModulesManager.init({express:express, mongoose:mongoose, passport:passport, databaseUri:databaseUri, routes:{}, jobsManager:jobsManager});
|
|
157
167
|
|
|
158
168
|
var channelManager = require('./channels/channelManager');
|
|
159
169
|
channelManager.listen();
|
|
@@ -266,7 +266,8 @@ class Chat21Handler {
|
|
|
266
266
|
// TODO perche nn c'è setImmedite? per performace
|
|
267
267
|
|
|
268
268
|
|
|
269
|
-
winston.verbose("Chat21Sender on message.sending "
|
|
269
|
+
winston.verbose("Chat21Sender on message.sending: "+ message.text);
|
|
270
|
+
winston.debug("Chat21Sender on message.sending ", message);
|
|
270
271
|
|
|
271
272
|
if (message &&
|
|
272
273
|
message.status === MessageConstants.CHAT_MESSAGE_STATUS.SENDING &&
|
|
@@ -293,7 +294,8 @@ class Chat21Handler {
|
|
|
293
294
|
|
|
294
295
|
|
|
295
296
|
|
|
296
|
-
winston.verbose("Chat21Sender sending message.sending "
|
|
297
|
+
winston.verbose("Chat21Sender sending message.sending: "+ message.text);
|
|
298
|
+
winston.debug("Chat21Sender sending message.sending ", message);
|
|
297
299
|
|
|
298
300
|
// chat21Util.getParsedMessage().then(function(messageData) {
|
|
299
301
|
// message = messageData;
|
|
@@ -344,6 +346,8 @@ class Chat21Handler {
|
|
|
344
346
|
}
|
|
345
347
|
*/
|
|
346
348
|
|
|
349
|
+
// performance console log
|
|
350
|
+
// console.log("************* send message chat21: "+new Date().toISOString(), message.text );
|
|
347
351
|
|
|
348
352
|
return chat21.messages.sendToGroup(message.senderFullname, message.recipient,
|
|
349
353
|
recipient_fullname, message.text, message.sender, attributes, message.type, message.metadata, timestamp)
|
|
@@ -352,6 +356,10 @@ class Chat21Handler {
|
|
|
352
356
|
|
|
353
357
|
|
|
354
358
|
// chat21.conversations.stopTyping(message.recipient,message.sender);
|
|
359
|
+
|
|
360
|
+
|
|
361
|
+
// performance console log
|
|
362
|
+
// console.log("************* senttt message chat21: "+new Date().toISOString(), message.text );
|
|
355
363
|
|
|
356
364
|
chat21Event.emit('message.sent', data);
|
|
357
365
|
|
|
@@ -379,6 +387,7 @@ class Chat21Handler {
|
|
|
379
387
|
|
|
380
388
|
chat21.auth.setAdminToken(adminToken);
|
|
381
389
|
|
|
390
|
+
winston.debug("Chat21Sender");
|
|
382
391
|
// send: function(sender_fullname, recipient_id, recipient_fullname, text, sender_id, attributes, type, metadata){
|
|
383
392
|
return chat21.messages.send(message.senderFullname, message.recipient,
|
|
384
393
|
message.recipientFullname, message.text, message.sender, message.attributes, message.type, message.metadata)
|
|
@@ -584,10 +593,17 @@ class Chat21Handler {
|
|
|
584
593
|
if (request.subject) {
|
|
585
594
|
group_name = request.subject;
|
|
586
595
|
}
|
|
596
|
+
|
|
597
|
+
// performance console log
|
|
598
|
+
// console.log("************* before request.support_group.created: "+new Date().toISOString());
|
|
587
599
|
|
|
588
600
|
//TODO racecondition?
|
|
589
601
|
return chat21.groups.create(group_name, members, gAttributes, groupId).then(function(data) {
|
|
590
|
-
winston.verbose("Chat21 group created: " + JSON.stringify(data));
|
|
602
|
+
winston.verbose("Chat21 group created: " + JSON.stringify(data));
|
|
603
|
+
|
|
604
|
+
// performance console log
|
|
605
|
+
// console.log("************* after request.support_group.created: "+new Date().toISOString());
|
|
606
|
+
|
|
591
607
|
requestEvent.emit('request.support_group.created', request);
|
|
592
608
|
|
|
593
609
|
chat21Event.emit('group.create', data);
|
package/jobs.js
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
|
|
2
|
+
var dotenvPath = undefined;
|
|
3
|
+
|
|
4
|
+
if (process.env.DOTENV_PATH) {
|
|
5
|
+
dotenvPath = process.env.DOTENV_PATH;
|
|
6
|
+
console.log("load dotenv form DOTENV_PATH", dotenvPath);
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
if (process.env.LOAD_DOTENV_SUBFOLDER ) {
|
|
10
|
+
console.log("load dotenv form LOAD_DOTENV_SUBFOLDER");
|
|
11
|
+
dotenvPath = __dirname+'/confenv/.env';
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
require('dotenv').config({ path: dotenvPath});
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
var mongoose = require('mongoose');
|
|
18
|
+
|
|
19
|
+
let winston = require('./config/winston');
|
|
20
|
+
let JobsManager = require('./JobsManager');
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
let geoService = require('./services/geoService');
|
|
24
|
+
var config = require('./config/database');
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
//override JOB_WORKER_ENABLED to false when you start jobs.js
|
|
28
|
+
process.env.JOB_WORKER_ENABLED=false
|
|
29
|
+
|
|
30
|
+
var databaseUri = process.env.DATABASE_URI || process.env.MONGODB_URI || config.database;
|
|
31
|
+
var autoIndex = true;
|
|
32
|
+
|
|
33
|
+
if (!databaseUri) { //TODO??
|
|
34
|
+
winston.warn('DATABASE_URI not specified, falling back to localhost.');
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
var connection = mongoose.connect(databaseUri, { "useNewUrlParser": true, "autoIndex": autoIndex }, function(err) {
|
|
38
|
+
if (err) {
|
|
39
|
+
winston.error('Failed to connect to MongoDB on ' + databaseUri + " ", err);
|
|
40
|
+
process.exit(1);
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
// winston.info("mongoose.connection",mongoose.connection);
|
|
45
|
+
// module.exports = jobsManager;
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
async function main()
|
|
50
|
+
{
|
|
51
|
+
|
|
52
|
+
require('./pubmodules/queue');
|
|
53
|
+
// require('@tiledesk-ent/tiledesk-server-queue');
|
|
54
|
+
|
|
55
|
+
let jobsManager = new JobsManager(undefined, geoService);
|
|
56
|
+
|
|
57
|
+
jobsManager.listen();
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
let emailNotification = require('./pubmodules/emailNotification');
|
|
61
|
+
jobsManager.listenEmailNotification(emailNotification);
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
let activityArchiver = require('./pubmodules/activities').activityArchiver;
|
|
65
|
+
jobsManager.listenActivityArchiver(activityArchiver);
|
|
66
|
+
|
|
67
|
+
winston.info("Jobs started");
|
|
68
|
+
|
|
69
|
+
await new Promise(function () {});
|
|
70
|
+
console.log('This text will never be printed');
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
function panic(error)
|
|
74
|
+
{
|
|
75
|
+
console.error(error);
|
|
76
|
+
process.exit(1);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// https://stackoverflow.com/a/46916601/1478566
|
|
80
|
+
main().catch(panic).finally(clearInterval.bind(null, setInterval(a=>a, 1E9)));
|
package/jobsManager.js
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
|
|
2
|
+
var winston = require('./config/winston');
|
|
3
|
+
|
|
4
|
+
class JobsManager {
|
|
5
|
+
constructor(jobWorkerEnabled, geoService) {
|
|
6
|
+
this.geoService = geoService;
|
|
7
|
+
this.emailNotificatio = undefined;
|
|
8
|
+
this.activityArchiver = undefined;
|
|
9
|
+
|
|
10
|
+
this.jobWorkerEnabled = jobWorkerEnabled;
|
|
11
|
+
// this.jobWorkerEnabled = false;
|
|
12
|
+
// if (process.env.JOB_WORKER_ENABLED=="true" || process.env.JOB_WORKER_ENABLED == true) {
|
|
13
|
+
// this.jobWorkerEnabled = true;
|
|
14
|
+
// }
|
|
15
|
+
// winston.info("JobsManager jobWorkerEnabled: "+ this.jobWorkerEnabled);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
listen() {
|
|
20
|
+
winston.info("JobsManager listener started");
|
|
21
|
+
if ( this.jobWorkerEnabled == true) {
|
|
22
|
+
return winston.info("JobsManager jobWorkerEnabled is enabled. Skipping listeners");
|
|
23
|
+
}
|
|
24
|
+
this.geoService.listen();
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
listenEmailNotification(emailNotification) {
|
|
28
|
+
winston.info("JobsManager listenEmailNotification started");
|
|
29
|
+
if ( this.jobWorkerEnabled == true) {
|
|
30
|
+
return winston.info("JobsManager jobWorkerEnabled is enabled. Skipping listener for Email Notification");
|
|
31
|
+
}
|
|
32
|
+
this.emailNotification = emailNotification;
|
|
33
|
+
this.emailNotification.requestNotification.listen();
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
listenActivityArchiver(activityArchiver) {
|
|
37
|
+
winston.info("JobsManager listenActivityArchiver started");
|
|
38
|
+
if ( this.jobWorkerEnabled == true) {
|
|
39
|
+
return winston.info("JobsManager jobWorkerEnabled is enabled. Skipping listener for Activity Archiver");
|
|
40
|
+
}
|
|
41
|
+
this.activityArchiver = activityArchiver;
|
|
42
|
+
this.activityArchiver.listen();
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
module.exports = JobsManager;
|
package/models/faq.js
CHANGED
|
@@ -29,7 +29,7 @@ var FaqSchema = new Schema({
|
|
|
29
29
|
},
|
|
30
30
|
question: {
|
|
31
31
|
type: String,
|
|
32
|
-
required:
|
|
32
|
+
required: false
|
|
33
33
|
},
|
|
34
34
|
|
|
35
35
|
webhook_enabled: { //usa questo
|
|
@@ -83,6 +83,10 @@ var FaqSchema = new Schema({
|
|
|
83
83
|
createdBy: {
|
|
84
84
|
type: String,
|
|
85
85
|
required: true
|
|
86
|
+
},
|
|
87
|
+
form: {
|
|
88
|
+
type: Object,
|
|
89
|
+
required: false
|
|
86
90
|
}
|
|
87
91
|
},{
|
|
88
92
|
timestamps: true,
|