@tiledesk/tiledesk-tybot-connector 0.1.40 → 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 CHANGED
@@ -5,6 +5,10 @@
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
+
8
12
  ### 0.1.40
9
13
  - tiledesk-client => 0.9.5
10
14
  - added _tdSendEmail directive
@@ -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
- // console.log("allParametersStatic. Paramters key:", parameters_key);
418
- return await _tdcache.hgetall(parameters_key);
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.40",
3
+ "version": "0.1.41",
4
4
  "description": "Tiledesk Tybot connector",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -18,13 +18,14 @@
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
  }
@@ -3,10 +3,11 @@ const { ExtUtil } = require('../ExtUtil');
3
3
  const { DirectivesChatbotPlug } = require('../tiledeskChatbotPlugs/DirectivesChatbotPlug');
4
4
  const { DirSendEmail } = require('../tiledeskChatbotPlugs/directives/DirSendEmail');
5
5
  const supportRequest = require('./support_request.js').request;
6
+ const { TiledeskChatbot } = require('../models/TiledeskChatbot');
6
7
 
7
8
  describe('Directive DirSendEmail', function() {
8
9
 
9
- it('test directive DirSendEmail', async () => {
10
+ it('test DirSendEmail', async () => {
10
11
  class MockTdClient {
11
12
  async sendEmail(message, callback) {
12
13
  if (callback) {
@@ -15,24 +16,37 @@ describe('Directive DirSendEmail', function() {
15
16
  return message;
16
17
  }
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
+ };
18
32
  send_email_directive = {
19
33
  name: "sendemail",
20
- parameter: '--to "test@test" --subject "test" --text "test"'
34
+ parameter: '--to "${email}" --subject "Hello ${fullname}" --text "Welcome ${fullname}"'
21
35
  };
36
+ let requestId = "request1";
22
37
  let dir = new DirSendEmail({
23
- tdclient: new MockTdClient()
38
+ tdclient: new MockTdClient(),
39
+ tdcache: new MockTdCache(),
40
+ requestId: requestId
24
41
  });
25
- let requestId = null;
26
- const message = await dir.execute(send_email_directive, requestId) //, "err").to.be.null;
27
- // console.error("Was expecting an error for the 'to' missing parameter");
28
- console.log("message:", message);
42
+ const message = await dir.execute(send_email_directive);
29
43
  assert(message);
30
- assert(message.to);
31
- assert(message.text);
32
- assert(message.subject);
44
+ assert(message.to === 'johnb@email.com');
45
+ assert(message.text === 'Welcome John B.');
46
+ assert(message.subject === 'Hello John B.');
33
47
  });
34
48
 
35
- it('test directive DirSendEmail with missing "to"', async () => {
49
+ it('test DirSendEmail with missing "to"', async () => {
36
50
  class MockTdClient {
37
51
  async sendEmail(message, callback) {
38
52
  if (callback) {
@@ -48,21 +62,11 @@ describe('Directive DirSendEmail', function() {
48
62
  let dir = new DirSendEmail({
49
63
  tdclient: new MockTdClient()
50
64
  });
51
- let requestId = null;
52
- // try {
53
- const message = await dir.execute(send_email_directive, requestId) //, "err").to.be.null;
54
- // console.error("Was expecting an error for the 'to' missing parameter");
55
- assert(message == null);
56
- // }
57
- // catch(err) {
58
- // //console.log("Error is ok", err);
59
- // if (!err.message.startsWith("sendEmail missing mandatory parameters")) {
60
- // assert.ok(false);
61
- // }
62
- // }
65
+ const message = await dir.execute(send_email_directive)
66
+ assert(message == null);
63
67
  });
64
68
 
65
- it('test directive DirSendEmail in pipeline', async () => {
69
+ it('test DirSendEmail in pipeline', async () => {
66
70
  const message_text = `\\_tdsendemail --to "test@test" --subject "_sub" --text "_body"`;
67
71
  const answer = {
68
72
  text: message_text,
@@ -269,8 +269,13 @@ class DirectivesChatbotPlug {
269
269
  });
270
270
  }
271
271
  else if (directive_name === Directives.SEND_EMAIL) {
272
- new DirSendEmail({tdclient: tdclient}).execute(directive, requestId, () => {
273
- process(nextDirective());
272
+ new DirSendEmail(
273
+ {
274
+ tdclient: tdclient,
275
+ tdcache: tdcache,
276
+ requestId: requestId
277
+ }).execute(directive, () => {
278
+ process(nextDirective());
274
279
  });
275
280
  }
276
281
  else {
@@ -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 };
@@ -1,47 +1,50 @@
1
- //const { HelpCenter } = require('./HelpCenter');
2
1
  const { HelpCenterQuery } = require('@tiledesk/helpcenter-query-client');
3
2
  const { param } = require('express/lib/request');
4
3
  const ms = require('minimist-string');
4
+ const { TiledeskChatbot } = require('../../models/TiledeskChatbot');
5
+ const { Filler } = require('../Filler');
5
6
 
6
7
  class DirSendEmail {
7
8
 
8
9
  constructor(config) {
9
10
  if (!config.tdclient) {
10
- throw new Error('config.tdclient (TiledeskClient) object is mandatory.');
11
+ throw new Error('config.tdclient (TiledeskClient) is mandatory.');
11
12
  }
12
13
  this.tdclient = config.tdclient;
14
+ this.tdcache = config.tdcache;
15
+ this.requestId = config.requestId;
13
16
  this.log = config.log;
14
17
  }
15
18
 
16
- async execute(directive, requestId, completion) {
17
- // return new Promise( (resolve, reject) => {
19
+ async execute(directive, completion) {
18
20
  let params = null;
19
21
  if (directive.parameter) {
20
- // console.log("processing sendEmail parameters");
21
22
  params = this.parseParams(directive.parameter);
22
- // console.log("parameters found", params);
23
23
  }
24
24
  else {
25
- console.log("sendEmail missing parameter error. Skipping");
26
25
  const error = new Error("sendEmail missing 'parameter' error. Skipping");
27
26
  if (completion) {
28
27
  completion(error);
29
28
  }
30
- // reject(error);
31
- // throw error;
32
29
  }
33
30
  if (params.subject && params.text && params.to) {
34
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();
35
40
  const message_echo = await this.tdclient.sendEmail({
36
- subject: params.subject,
37
- text: params.text,
38
- to: params.to
41
+ subject: filler.fill(params.subject, requestVariables),
42
+ text: filler.fill(params.text, requestVariables),
43
+ to: filler.fill(params.to, requestVariables)
39
44
  });
40
- // console.log("echo", message_echo)
41
45
  if (completion) {
42
46
  completion(null, message_echo);
43
47
  }
44
- // resolve(message_echo);
45
48
  return message_echo;
46
49
  }
47
50
  catch(err) {
@@ -49,20 +52,14 @@ class DirSendEmail {
49
52
  if (completion) {
50
53
  completion(err);
51
54
  }
52
- // reject(error);
53
- // throw err;
54
55
  }
55
56
  }
56
57
  else {
57
- // console.log("sendEmail missing mandatory parameters (to|subject|text):");
58
58
  const error = new Error("sendEmail missing mandatory parameters (to|subject|text)");
59
59
  if (completion) {
60
60
  completion(error);
61
61
  }
62
- // reject(err);
63
- // throw error;
64
62
  }
65
- // });
66
63
  }
67
64
 
68
65
  parseParams(directive_parameter) {