@tiledesk/tiledesk-tybot-connector 0.1.39 → 0.1.41
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 +8 -0
- package/models/TiledeskChatbot.js +8 -3
- package/package.json +5 -4
- package/test/send_email_directive_test.js +91 -0
- package/test/single_test.sh +2 -1
- package/tiledeskChatbotPlugs/DirectivesChatbotPlug.js +11 -0
- package/tiledeskChatbotPlugs/Filler.js +14 -0
- package/tiledeskChatbotPlugs/directives/DirSendEmail.js +87 -0
- package/tiledeskChatbotPlugs/directives/Directives.js +1 -0
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,14 @@
|
|
|
5
5
|
available on:
|
|
6
6
|
▶️ https://www.npmjs.com/package/@tiledesk/tiledesk-tybot-connector
|
|
7
7
|
|
|
8
|
+
### 0.1.41
|
|
9
|
+
- added Filler
|
|
10
|
+
- added Filler to email .to .subject .text attributes
|
|
11
|
+
|
|
12
|
+
### 0.1.40
|
|
13
|
+
- tiledesk-client => 0.9.5
|
|
14
|
+
- added _tdSendEmail directive
|
|
15
|
+
|
|
8
16
|
### 0.1.39 - online
|
|
9
17
|
- ExtApi.sendSupportMessageExt => added support for rejectUnauthorized: false
|
|
10
18
|
|
|
@@ -413,9 +413,14 @@ class TiledeskChatbot {
|
|
|
413
413
|
}
|
|
414
414
|
|
|
415
415
|
static async allParametersStatic(_tdcache, requestId) {
|
|
416
|
-
const parameters_key = "tilebot:requests:" + requestId + ":parameters";
|
|
417
|
-
|
|
418
|
-
|
|
416
|
+
// const parameters_key = "tilebot:requests:" + requestId + ":parameters";
|
|
417
|
+
return await _tdcache.hgetall(
|
|
418
|
+
TiledeskChatbot.requestCacheKey(requestId) + ":parameters");
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
static requestCacheKey(requestId) {
|
|
422
|
+
const request_key = "tilebot:requests:" + requestId;
|
|
423
|
+
return request_key;
|
|
419
424
|
}
|
|
420
425
|
|
|
421
426
|
async execWebhook(static_bot_answer, message, bot, context) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tiledesk/tiledesk-tybot-connector",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.41",
|
|
4
4
|
"description": "Tiledesk Tybot connector",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -14,17 +14,18 @@
|
|
|
14
14
|
"@tiledesk/helpcenter-query-client": "^0.1.8",
|
|
15
15
|
"@tiledesk/tiledesk-chatbot-client": "^0.5.30",
|
|
16
16
|
"@tiledesk/tiledesk-chatbot-util": "^0.8.38",
|
|
17
|
-
"@tiledesk/tiledesk-client": "^0.9.
|
|
17
|
+
"@tiledesk/tiledesk-client": "^0.9.5",
|
|
18
18
|
"axios": "^0.27.2",
|
|
19
19
|
"body-parser": "^1.19.0",
|
|
20
20
|
"cors": "^2.8.5",
|
|
21
|
+
"dotenv": "^16.0.3",
|
|
21
22
|
"express": "^4.17.1",
|
|
22
23
|
"jsonwebtoken": "^8.5.1",
|
|
23
24
|
"minimist-string": "^1.0.2",
|
|
25
|
+
"mocha": "^10.2.0",
|
|
24
26
|
"mongoose": "^6.3.5",
|
|
25
27
|
"nanoid": "^3.1.25",
|
|
26
28
|
"redis": "^3.1.2",
|
|
27
|
-
"uuid": "^3.3.3"
|
|
28
|
-
"dotenv": "^16.0.3"
|
|
29
|
+
"uuid": "^3.3.3"
|
|
29
30
|
}
|
|
30
31
|
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
var assert = require('assert');
|
|
2
|
+
const { ExtUtil } = require('../ExtUtil');
|
|
3
|
+
const { DirectivesChatbotPlug } = require('../tiledeskChatbotPlugs/DirectivesChatbotPlug');
|
|
4
|
+
const { DirSendEmail } = require('../tiledeskChatbotPlugs/directives/DirSendEmail');
|
|
5
|
+
const supportRequest = require('./support_request.js').request;
|
|
6
|
+
const { TiledeskChatbot } = require('../models/TiledeskChatbot');
|
|
7
|
+
|
|
8
|
+
describe('Directive DirSendEmail', function() {
|
|
9
|
+
|
|
10
|
+
it('test DirSendEmail', async () => {
|
|
11
|
+
class MockTdClient {
|
|
12
|
+
async sendEmail(message, callback) {
|
|
13
|
+
if (callback) {
|
|
14
|
+
callback(null, message);
|
|
15
|
+
}
|
|
16
|
+
return message;
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
class MockTdCache {
|
|
20
|
+
async hgetall(request_parameters_key) {
|
|
21
|
+
// simulate we already saved sone request variables
|
|
22
|
+
// with a specific request id: request1
|
|
23
|
+
const request1_cache_id = TiledeskChatbot.requestCacheKey('request1') + ":parameters";
|
|
24
|
+
const variables = {}
|
|
25
|
+
variables[request1_cache_id] = {
|
|
26
|
+
"fullname": "John B.",
|
|
27
|
+
"email": "johnb@email.com"
|
|
28
|
+
}
|
|
29
|
+
return variables[request_parameters_key];
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
send_email_directive = {
|
|
33
|
+
name: "sendemail",
|
|
34
|
+
parameter: '--to "${email}" --subject "Hello ${fullname}" --text "Welcome ${fullname}"'
|
|
35
|
+
};
|
|
36
|
+
let requestId = "request1";
|
|
37
|
+
let dir = new DirSendEmail({
|
|
38
|
+
tdclient: new MockTdClient(),
|
|
39
|
+
tdcache: new MockTdCache(),
|
|
40
|
+
requestId: requestId
|
|
41
|
+
});
|
|
42
|
+
const message = await dir.execute(send_email_directive);
|
|
43
|
+
assert(message);
|
|
44
|
+
assert(message.to === 'johnb@email.com');
|
|
45
|
+
assert(message.text === 'Welcome John B.');
|
|
46
|
+
assert(message.subject === 'Hello John B.');
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
it('test DirSendEmail with missing "to"', async () => {
|
|
50
|
+
class MockTdClient {
|
|
51
|
+
async sendEmail(message, callback) {
|
|
52
|
+
if (callback) {
|
|
53
|
+
callback(null, message);
|
|
54
|
+
}
|
|
55
|
+
return message;
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
send_email_directive = {
|
|
59
|
+
name: "sendemail",
|
|
60
|
+
parameter: '--subject "test" --text "_test"'
|
|
61
|
+
};
|
|
62
|
+
let dir = new DirSendEmail({
|
|
63
|
+
tdclient: new MockTdClient()
|
|
64
|
+
});
|
|
65
|
+
const message = await dir.execute(send_email_directive)
|
|
66
|
+
assert(message == null);
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
it('test DirSendEmail in pipeline', async () => {
|
|
70
|
+
const message_text = `\\_tdsendemail --to "test@test" --subject "_sub" --text "_body"`;
|
|
71
|
+
const answer = {
|
|
72
|
+
text: message_text,
|
|
73
|
+
attributes: {
|
|
74
|
+
splits: true,
|
|
75
|
+
directives: true,
|
|
76
|
+
markbot: true
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
let directivesPlug = new DirectivesChatbotPlug({supportRequest: supportRequest, TILEDESK_API_ENDPOINT: "APIURL", token: "token", log: false, HELP_CENTER_API_ENDPOINT: "HELP_CENTER_API_ENDPOINT"});
|
|
80
|
+
const bot_answer = await ExtUtil.execPipelineExt(supportRequest, answer, directivesPlug, null, false);
|
|
81
|
+
assert(bot_answer == null);
|
|
82
|
+
assert(directivesPlug.directives != null);
|
|
83
|
+
assert(directivesPlug.directives.length == 1);
|
|
84
|
+
assert(directivesPlug.directives[0].name === "sendemail");
|
|
85
|
+
assert(directivesPlug.directives[0].parameter === '--to "test@test" --subject "_sub" --text "_body"');
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
|
package/test/single_test.sh
CHANGED
|
@@ -2,5 +2,6 @@
|
|
|
2
2
|
#npx mocha ./test/mock_query_test.js
|
|
3
3
|
#npx mocha ./test/disable_input_text_directive_test.js
|
|
4
4
|
#npx mocha ./test/close_directive_test.js
|
|
5
|
-
npx mocha ./test/conversation1-test.js --exit
|
|
5
|
+
#npx mocha ./test/conversation1-test.js --exit
|
|
6
6
|
#npx mocha ./test/intent_form_test.js --exit
|
|
7
|
+
npx mocha ./test/send_email_directive_test.js --exit
|
|
@@ -15,6 +15,7 @@ const { DirDisableInputText } = require('./directives/DirDisableInputText');
|
|
|
15
15
|
const { DirClose } = require('./directives/DirClose');
|
|
16
16
|
const { DirIfAvailableAgents } = require('./directives/DirIfAvailableAgents');
|
|
17
17
|
const { DirFireTiledeskEvent } = require('./directives/DirFireTiledeskEvent');
|
|
18
|
+
const { DirSendEmail } = require('./directives/DirSendEmail');
|
|
18
19
|
const { Directives } = require('./directives/Directives');
|
|
19
20
|
|
|
20
21
|
class DirectivesChatbotPlug {
|
|
@@ -267,6 +268,16 @@ class DirectivesChatbotPlug {
|
|
|
267
268
|
process(nextDirective());
|
|
268
269
|
});
|
|
269
270
|
}
|
|
271
|
+
else if (directive_name === Directives.SEND_EMAIL) {
|
|
272
|
+
new DirSendEmail(
|
|
273
|
+
{
|
|
274
|
+
tdclient: tdclient,
|
|
275
|
+
tdcache: tdcache,
|
|
276
|
+
requestId: requestId
|
|
277
|
+
}).execute(directive, () => {
|
|
278
|
+
process(nextDirective());
|
|
279
|
+
});
|
|
280
|
+
}
|
|
270
281
|
else {
|
|
271
282
|
//console.log("Unhandled Post-message Directive:", directive_name);
|
|
272
283
|
process(nextDirective());
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
class Filler {
|
|
2
|
+
|
|
3
|
+
fill(text, parameters) {
|
|
4
|
+
if (parameters) {
|
|
5
|
+
for (const [key, value] of Object.entries(parameters)) {
|
|
6
|
+
text = text.replace(new RegExp("(\\$\\{" + key + "\\})", 'i'), parameters[key]);
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
return text;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
module.exports = { Filler };
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
const { HelpCenterQuery } = require('@tiledesk/helpcenter-query-client');
|
|
2
|
+
const { param } = require('express/lib/request');
|
|
3
|
+
const ms = require('minimist-string');
|
|
4
|
+
const { TiledeskChatbot } = require('../../models/TiledeskChatbot');
|
|
5
|
+
const { Filler } = require('../Filler');
|
|
6
|
+
|
|
7
|
+
class DirSendEmail {
|
|
8
|
+
|
|
9
|
+
constructor(config) {
|
|
10
|
+
if (!config.tdclient) {
|
|
11
|
+
throw new Error('config.tdclient (TiledeskClient) is mandatory.');
|
|
12
|
+
}
|
|
13
|
+
this.tdclient = config.tdclient;
|
|
14
|
+
this.tdcache = config.tdcache;
|
|
15
|
+
this.requestId = config.requestId;
|
|
16
|
+
this.log = config.log;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
async execute(directive, completion) {
|
|
20
|
+
let params = null;
|
|
21
|
+
if (directive.parameter) {
|
|
22
|
+
params = this.parseParams(directive.parameter);
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
const error = new Error("sendEmail missing 'parameter' error. Skipping");
|
|
26
|
+
if (completion) {
|
|
27
|
+
completion(error);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
if (params.subject && params.text && params.to) {
|
|
31
|
+
try {
|
|
32
|
+
let requestVariables = null;
|
|
33
|
+
if (this.tdcache) {
|
|
34
|
+
requestVariables =
|
|
35
|
+
await TiledeskChatbot.allParametersStatic(
|
|
36
|
+
this.tdcache, this.requestId
|
|
37
|
+
);
|
|
38
|
+
}
|
|
39
|
+
const filler = new Filler();
|
|
40
|
+
const message_echo = await this.tdclient.sendEmail({
|
|
41
|
+
subject: filler.fill(params.subject, requestVariables),
|
|
42
|
+
text: filler.fill(params.text, requestVariables),
|
|
43
|
+
to: filler.fill(params.to, requestVariables)
|
|
44
|
+
});
|
|
45
|
+
if (completion) {
|
|
46
|
+
completion(null, message_echo);
|
|
47
|
+
}
|
|
48
|
+
return message_echo;
|
|
49
|
+
}
|
|
50
|
+
catch(err) {
|
|
51
|
+
console.error("sendEmail error:", err);
|
|
52
|
+
if (completion) {
|
|
53
|
+
completion(err);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
const error = new Error("sendEmail missing mandatory parameters (to|subject|text)");
|
|
59
|
+
if (completion) {
|
|
60
|
+
completion(error);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
parseParams(directive_parameter) {
|
|
66
|
+
let subject = null;
|
|
67
|
+
let text = null;
|
|
68
|
+
let to = null
|
|
69
|
+
const params = ms(directive_parameter);
|
|
70
|
+
if (params.subject) {
|
|
71
|
+
subject = params.subject
|
|
72
|
+
}
|
|
73
|
+
if (params.text) {
|
|
74
|
+
text = params.text.replace(/\\n/g, "\n");
|
|
75
|
+
}
|
|
76
|
+
if (params.to) {
|
|
77
|
+
to = params.to;
|
|
78
|
+
}
|
|
79
|
+
return {
|
|
80
|
+
subject: subject,
|
|
81
|
+
to: to,
|
|
82
|
+
text: text
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
module.exports = { DirSendEmail };
|