@tiledesk/tiledesk-tybot-connector 0.2.601-rc1 → 0.3.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.
Files changed (73) hide show
  1. package/CHANGELOG.md +387 -1
  2. package/ExtApi.js +6 -7
  3. package/Logger.js +74 -0
  4. package/TdCache.js +81 -176
  5. package/TdCache_v3.js +261 -0
  6. package/TiledeskExpression.js +7 -3
  7. package/TiledeskServices/AIService.js +43 -0
  8. package/TiledeskServices/utils.js +99 -0
  9. package/index.js +305 -50
  10. package/logs/app.log +279 -0
  11. package/models/IntentsMachineFactory.js +5 -2
  12. package/models/MockBotsDataSource.js +19 -11
  13. package/models/TiledeskChatbot.js +97 -79
  14. package/models/TiledeskChatbotConst.js +12 -17
  15. package/models/TiledeskChatbotUtil.js +359 -109
  16. package/models/TiledeskIntentsMachine.js +1 -1
  17. package/models/faqKbService.js +1 -1
  18. package/package.json +8 -6
  19. package/tiledeskChatbotPlugs/DirectivesChatbotPlug.js +172 -106
  20. package/tiledeskChatbotPlugs/Filler.js +13 -2
  21. package/tiledeskChatbotPlugs/TildeskContextForCodeOrchestrator.js +8 -0
  22. package/tiledeskChatbotPlugs/WebhookChatbotPlug.js +13 -7
  23. package/tiledeskChatbotPlugs/directives/DirAddTags.js +374 -0
  24. package/tiledeskChatbotPlugs/directives/DirAiPrompt.js +476 -0
  25. package/tiledeskChatbotPlugs/directives/DirAskGPT.js +16 -19
  26. package/tiledeskChatbotPlugs/directives/DirAskGPTV2.js +221 -34
  27. package/tiledeskChatbotPlugs/directives/DirAssign.js +0 -11
  28. package/tiledeskChatbotPlugs/directives/DirAssignFromFunction.js +11 -21
  29. package/tiledeskChatbotPlugs/directives/DirAssistant.js +728 -0
  30. package/tiledeskChatbotPlugs/directives/DirBrevo.js +353 -0
  31. package/tiledeskChatbotPlugs/directives/DirCaptureUserReply.js +3 -30
  32. package/tiledeskChatbotPlugs/directives/DirClearTranscript.js +22 -0
  33. package/tiledeskChatbotPlugs/directives/DirClose.js +16 -3
  34. package/tiledeskChatbotPlugs/directives/DirCode.js +1 -1
  35. package/tiledeskChatbotPlugs/directives/DirCondition.js +0 -26
  36. package/tiledeskChatbotPlugs/directives/DirConnectBlock.js +182 -0
  37. package/tiledeskChatbotPlugs/directives/DirContactUpdate.js +121 -0
  38. package/tiledeskChatbotPlugs/directives/DirCustomerio.js +5 -8
  39. package/tiledeskChatbotPlugs/directives/DirDeflectToHelpCenter.js +11 -1
  40. package/tiledeskChatbotPlugs/directives/DirDepartment.js +15 -6
  41. package/tiledeskChatbotPlugs/directives/DirFireTiledeskEvent.js +17 -6
  42. package/tiledeskChatbotPlugs/directives/DirForm.js +12 -2
  43. package/tiledeskChatbotPlugs/directives/DirGptTask.js +83 -38
  44. package/tiledeskChatbotPlugs/directives/DirGptTask_OLD.js +4 -7
  45. package/tiledeskChatbotPlugs/directives/DirHubspot.js +5 -8
  46. package/tiledeskChatbotPlugs/directives/DirIfOnlineAgents.js +14 -27
  47. package/tiledeskChatbotPlugs/directives/DirIfOnlineAgentsV2.js +278 -0
  48. package/tiledeskChatbotPlugs/directives/DirIfOpenHours.js +147 -51
  49. package/tiledeskChatbotPlugs/directives/DirIfOpenHours_OLD.js +125 -0
  50. package/tiledeskChatbotPlugs/directives/DirIntent.js +8 -37
  51. package/tiledeskChatbotPlugs/directives/DirJSONCondition.js +5 -26
  52. package/tiledeskChatbotPlugs/directives/DirMessage.js +19 -17
  53. package/tiledeskChatbotPlugs/directives/DirMessageToBot.js +135 -0
  54. package/tiledeskChatbotPlugs/directives/DirMoveToAgent.js +20 -87
  55. package/tiledeskChatbotPlugs/directives/DirMoveToUnassigned.js +59 -0
  56. package/tiledeskChatbotPlugs/directives/DirQapla.js +6 -9
  57. package/tiledeskChatbotPlugs/directives/DirRandomReply.js +17 -7
  58. package/tiledeskChatbotPlugs/directives/DirRemoveCurrentBot.js +17 -7
  59. package/tiledeskChatbotPlugs/directives/DirReplaceBot.js +11 -2
  60. package/tiledeskChatbotPlugs/directives/DirReplaceBotV2.js +135 -21
  61. package/tiledeskChatbotPlugs/directives/DirReplaceBotV3.js +163 -0
  62. package/tiledeskChatbotPlugs/directives/DirReply.js +53 -9
  63. package/tiledeskChatbotPlugs/directives/DirReplyV2.js +347 -0
  64. package/tiledeskChatbotPlugs/directives/DirSendEmail.js +13 -23
  65. package/tiledeskChatbotPlugs/directives/DirSendWhatsapp.js +247 -0
  66. package/tiledeskChatbotPlugs/directives/DirSetAttributeV2.js +202 -15
  67. package/tiledeskChatbotPlugs/directives/DirSetConversationTags.js +13 -4
  68. package/tiledeskChatbotPlugs/directives/DirWait.js +21 -4
  69. package/tiledeskChatbotPlugs/directives/DirWebRequest.js +1 -2
  70. package/tiledeskChatbotPlugs/directives/DirWebRequestV2.js +166 -103
  71. package/tiledeskChatbotPlugs/directives/DirWhatsappByAttribute.js +2 -60
  72. package/tiledeskChatbotPlugs/directives/Directives.js +16 -1
  73. /package/tiledeskChatbotPlugs/directives/{DirOfflineHours.js → DEPRECATED_DirOfflineHours.js} +0 -0
package/TdCache.js CHANGED
@@ -3,37 +3,63 @@ const redis = require('redis');
3
3
  class TdCache {
4
4
 
5
5
  constructor(config) {
6
+ console.log("TdCache config: ", config);
6
7
  this.redis_host = config.host;
7
8
  this.redis_port = config.port;
8
9
  this.redis_password = config.password;
10
+ console.log("TdCache this.redis_host: ", this.redis_host);
11
+ console.log("TdCache this.redis_port: ", this.redis_port);
12
+ console.log("TdCache this.redis_password: ", this.redis_password);
9
13
  this.client = null;
14
+ this.redis_sub = null;
10
15
  }
11
16
 
12
17
  async connect(callback) {
13
- // client = redis.createClient();
18
+
14
19
  return new Promise( async (resolve, reject) => {
20
+ /**
21
+ * Connect redis client
22
+ */
15
23
  this.client = redis.createClient(
16
- {
17
- host: this.redis_host,
18
- port: this.redis_port,
19
- password: this.redis_password
20
- });
24
+ {
25
+ url: `redis://${this.redis_host}:${this.redis_port}`,
26
+ password: this.redis_password
27
+ });
21
28
  this.client.on('error', err => {
22
29
  reject(err);
23
30
  if (callback) {
24
31
  callback(err);
25
32
  }
26
33
  });
27
- // this.client.on('connect', function() {
28
- // console.log('Redis Connected!');
29
- // });
30
34
  this.client.on('ready',function() {
31
35
  resolve();
32
36
  if (callback) {
33
37
  callback();
34
38
  }
35
- //console.log("Redis is ready.");
36
39
  });
40
+ await this.client.connect();
41
+
42
+ /**
43
+ * Connect redis subscription client
44
+ */
45
+ this.redis_sub = redis.createClient(
46
+ {
47
+ url: `redis://${this.redis_host}:${this.redis_port}`,
48
+ password: this.redis_password
49
+ });
50
+ this.redis_sub.on('error', err => {
51
+ reject(err);
52
+ if (callback) {
53
+ callback(err);
54
+ }
55
+ });
56
+ this.redis_sub.on('ready',function() {
57
+ resolve();
58
+ if (callback) {
59
+ callback();
60
+ }
61
+ });
62
+ await this.redis_sub.connect();
37
63
  });
38
64
  }
39
65
 
@@ -42,184 +68,59 @@ class TdCache {
42
68
  if (!options) {
43
69
  options = {EX: 86400}
44
70
  }
45
- return new Promise( async (resolve, reject) => {
46
- if (options && options.EX) {
47
- //console.log("expires:", options.EX)
48
- try {
49
- await this.client.set(
50
- key,
51
- value,
52
- 'EX', options.EX);
53
- }
54
- catch(error) {
55
- reject(error)
56
- }
57
- }
58
- else {
59
- try {
60
- //console.log("setting here...key", key, value)
61
- await this.client.set(
62
- key,
63
- value);
64
- }
65
- catch(error) {
66
- console.error("Error", error);
67
- reject(error)
68
- }
69
- }
70
- if (options && options.callback) {
71
- options.callback();
72
- }
73
- //console.log("resolving...", key);
74
- return resolve();
75
- });
71
+ await this.client.set(
72
+ key,
73
+ value,
74
+ options);
76
75
  }
77
76
 
78
77
  async incr(key) {
79
- // console.log("incr key:", key)
80
- return new Promise( async (resolve, reject) => {
81
- try {
82
- // console.log("incr here...key", key)
83
- await this.client.incr(key);
84
- }
85
- catch(error) {
86
- console.error("Error on incr:", error);
87
- reject(error)
88
- }
89
- return resolve();
90
- });
78
+ await this.client.incr(key);
91
79
  }
92
80
 
93
81
  async hset(dict_key, key, value, options) {
94
- //console.log("hsetting dict_key key value", dict_key, key, value)
95
- return new Promise( async (resolve, reject) => {
96
- if (options && options.EX) {
97
- //console.log("expires:", options.EX)
98
- try {
99
- await this.client.hset(
100
- dict_key,
101
- key,
102
- value,
103
- 'EX', options.EX);
104
- }
105
- catch(error) {
106
- reject(error)
107
- }
108
- }
109
- else {
110
- try {
111
- //console.log("setting here...key", key, value)
112
- await this.client.hset(
113
- dict_key,
114
- key,
115
- value);
116
- }
117
- catch(error) {
118
- console.error("Error", error);
119
- reject(error)
120
- }
121
- }
122
- if (options && options.callback) {
123
- options.callback();
124
- }
125
- return resolve();
126
- });
82
+ if (!value) {
83
+ return;
84
+ }
85
+ if (!options) {
86
+ options = {EX: 86400}
87
+ }
88
+ await this.client.HSET(
89
+ dict_key,
90
+ key,
91
+ value,
92
+ options);
127
93
  }
128
94
 
129
- async hdel(dict_key, key, options) {
130
- //console.log("hsetting dict_key key value", dict_key, key, value)
131
- return new Promise( async (resolve, reject) => {
132
- if (options && options.EX) {
133
- //console.log("expires:", options.EX)
134
- try {
135
- await this.client.hdel(
136
- dict_key,
137
- key,
138
- 'EX', options.EX);
139
- }
140
- catch(error) {
141
- reject(error)
142
- }
143
- }
144
- else {
145
- try {
146
- //console.log("setting here...key", key, value)
147
- await this.client.hdel(
148
- dict_key,
149
- key);
150
- }
151
- catch(error) {
152
- console.error("Error", error);
153
- reject(error);
154
- }
155
- }
156
- if (options && options.callback) {
157
- options.callback();
158
- }
159
- return resolve();
160
- });
95
+ async hdel(dict_key, key) {
96
+ await this.client.HDEL(dict_key, key);
161
97
  }
162
98
 
163
99
  async setJSON(key, value, options) {
100
+ if (!value) {
101
+ return;
102
+ }
103
+ if (!options) {
104
+ options = {EX: 86400}
105
+ }
164
106
  const _string = JSON.stringify(value);
165
107
  return await this.set(key, _string, options);
166
108
  }
167
109
 
168
- async get(key, callback) {
169
- //console.log("getting key", key)
170
- return new Promise( async (resolve, reject) => {
171
- this.client.get(key, (err, value) => {
172
- if (err) {
173
- reject(err);
174
- }
175
- else {
176
- if (callback) {
177
- callback(value);
178
- }
179
- return resolve(value);
180
- }
181
- });
182
- });
110
+ async get(key) {
111
+ const value = await this.client.GET(key);
112
+ return value;
183
113
  }
184
114
 
185
- async hgetall(dict_key, callback) {
186
- //console.log("hgetting dics", dict_key);
187
- return new Promise( async (resolve, reject) => {
188
- this.client.hgetall(dict_key, (err, value) => {
189
- if (err) {
190
- reject(err);
191
- if (callback) {
192
- callback(err, null);
193
- }
194
- }
195
- else {
196
- if (callback) {
197
- callback(null, value);
198
- }
199
- resolve(value);
200
- }
201
- });
202
- });
115
+ async hgetall(dict_key) {
116
+ const all = await this.client.HGETALL(dict_key);
117
+ return all;
203
118
  }
204
119
 
205
- async hget(dict_key, key, callback) {
206
- //console.log("hgetting dics", dict_key);
207
- return new Promise( async (resolve, reject) => {
208
- this.client.hget(dict_key, key, (err, value) => {
209
- if (err) {
210
- reject(err);
211
- if (callback) {
212
- callback(err, null);
213
- }
214
- }
215
- else {
216
- if (callback) {
217
- callback(null, value);
218
- }
219
- resolve(value);
220
- }
221
- });
222
- });
120
+ async hget(dict_key, key) {
121
+ // console.log("hgetting dics", dict_key);
122
+ const value = await this.client.HGET(dict_key, key);
123
+ return value;
223
124
  }
224
125
 
225
126
  async getJSON(key, callback) {
@@ -227,15 +128,19 @@ class TdCache {
227
128
  return JSON.parse(value);
228
129
  }
229
130
 
230
- async del(key, callback) {
231
- return new Promise( async (resolve, reject) => {
131
+ async del(key) {
232
132
  await this.client.del(key);
233
- if (callback) {
234
- callback();
235
- }
236
- return resolve();
237
- })
238
133
  }
134
+
135
+ async publish(key, value) {
136
+ await this.redis_sub.publish(key, value);
137
+ }
138
+
139
+ // subscribe(key, callback) {
140
+ // this.redis_sub.subscribe(key, (message) => {
141
+ // callback(message);
142
+ // });
143
+ // }
239
144
  }
240
145
 
241
146
  module.exports = { TdCache };
package/TdCache_v3.js ADDED
@@ -0,0 +1,261 @@
1
+ const redis = require('redis');
2
+
3
+ class TdCache {
4
+
5
+ constructor(config) {
6
+ this.redis_host = config.host;
7
+ this.redis_port = config.port;
8
+ this.redis_password = config.password;
9
+ this.client = null;
10
+ }
11
+
12
+ async connect(callback) {
13
+ // client = redis.createClient();
14
+ return new Promise( async (resolve, reject) => {
15
+ this.client = redis.createClient(
16
+ {
17
+ host: this.redis_host,
18
+ port: this.redis_port,
19
+ password: this.redis_password
20
+ });
21
+ this.client.on('error', err => {
22
+ reject(err);
23
+ if (callback) {
24
+ callback(err);
25
+ }
26
+ });
27
+ // this.client.on('connect', function() {
28
+ // console.log('Redis Connected!');
29
+ // });
30
+ this.client.on('ready',function() {
31
+ // console.log("connected")
32
+ resolve();
33
+ if (callback) {
34
+ callback();
35
+ }
36
+ //console.log("Redis is ready.");
37
+ });
38
+ });
39
+ }
40
+
41
+ async set(key, value, options) {
42
+ //console.log("setting key value", key, value)
43
+ if (!options) {
44
+ options = {EX: 86400}
45
+ }
46
+ return new Promise( async (resolve, reject) => {
47
+ if (options && options.EX) {
48
+ //console.log("expires:", options.EX)
49
+ try {
50
+ this.client.set(
51
+ key,
52
+ value,
53
+ 'EX', options.EX,
54
+ (err) => {
55
+ if (err) {
56
+ reject(err);
57
+ }
58
+ else {
59
+ return resolve();
60
+ }
61
+ }
62
+ );
63
+ }
64
+ catch(error) {
65
+ reject(error)
66
+ }
67
+ }
68
+ else {
69
+ try {
70
+ //console.log("setting here...key", key, value)
71
+ await this.client.set(
72
+ key,
73
+ value,
74
+ (err) => {
75
+ if (err) {
76
+ reject(err);
77
+ }
78
+ else {
79
+ return resolve();
80
+ }
81
+ }
82
+ );
83
+ }
84
+ catch(error) {
85
+ console.error("TdCache Error:", error);
86
+ reject(error)
87
+ }
88
+ }
89
+ // if (options && options.callback) {
90
+ // options.callback();
91
+ // }
92
+ //console.log("resolving...", key);
93
+ // return resolve();
94
+ });
95
+ }
96
+
97
+ async incr(key) {
98
+ // console.log("incr key:", key)
99
+ return new Promise( async (resolve, reject) => {
100
+ try {
101
+ // console.log("incr here...key", key)
102
+ await this.client.incr(key);
103
+ }
104
+ catch(error) {
105
+ console.error("Error on incr:", error);
106
+ reject(error)
107
+ }
108
+ return resolve();
109
+ });
110
+ }
111
+
112
+ async hset(dict_key, key, value, options) {
113
+ //console.log("hsetting dict_key key value", dict_key, key, value)
114
+ return new Promise( async (resolve, reject) => {
115
+ if (options && options.EX) {
116
+ //console.log("expires:", options.EX)
117
+ try {
118
+ await this.client.hset(
119
+ dict_key,
120
+ key,
121
+ value,
122
+ 'EX', options.EX);
123
+ }
124
+ catch(error) {
125
+ reject(error)
126
+ }
127
+ }
128
+ else {
129
+ try {
130
+ //console.log("setting here...key", key, value)
131
+ await this.client.hset(
132
+ dict_key,
133
+ key,
134
+ value);
135
+ }
136
+ catch(error) {
137
+ console.error("Error", error);
138
+ reject(error)
139
+ }
140
+ }
141
+ if (options && options.callback) {
142
+ options.callback();
143
+ }
144
+ return resolve();
145
+ });
146
+ }
147
+
148
+ async hdel(dict_key, key, options) {
149
+ //console.log("hsetting dict_key key value", dict_key, key, value)
150
+ return new Promise( async (resolve, reject) => {
151
+ if (options && options.EX) {
152
+ //console.log("expires:", options.EX)
153
+ try {
154
+ await this.client.hdel(
155
+ dict_key,
156
+ key,
157
+ 'EX', options.EX);
158
+ }
159
+ catch(error) {
160
+ reject(error)
161
+ }
162
+ }
163
+ else {
164
+ try {
165
+ //console.log("setting here...key", key, value)
166
+ await this.client.hdel(
167
+ dict_key,
168
+ key);
169
+ }
170
+ catch(error) {
171
+ console.error("Error", error);
172
+ reject(error);
173
+ }
174
+ }
175
+ if (options && options.callback) {
176
+ options.callback();
177
+ }
178
+ return resolve();
179
+ });
180
+ }
181
+
182
+ async setJSON(key, value, options) {
183
+ const _string = JSON.stringify(value);
184
+ return await this.set(key, _string, options);
185
+ }
186
+
187
+ async get(key, callback) {
188
+ //console.log("getting key", key)
189
+ return new Promise( async (resolve, reject) => {
190
+ this.client.get(key, (err, value) => {
191
+ if (err) {
192
+ reject(err);
193
+ }
194
+ else {
195
+ if (callback) {
196
+ callback(value);
197
+ }
198
+ return resolve(value);
199
+ }
200
+ });
201
+ });
202
+ }
203
+
204
+ async hgetall(dict_key, callback) {
205
+ //console.log("hgetting dics", dict_key);
206
+ return new Promise( async (resolve, reject) => {
207
+ this.client.hgetall(dict_key, (err, value) => {
208
+ if (err) {
209
+ reject(err);
210
+ if (callback) {
211
+ callback(err, null);
212
+ }
213
+ }
214
+ else {
215
+ if (callback) {
216
+ callback(null, value);
217
+ }
218
+ resolve(value);
219
+ }
220
+ });
221
+ });
222
+ }
223
+
224
+ async hget(dict_key, key, callback) {
225
+ //console.log("hgetting dics", dict_key);
226
+ return new Promise( async (resolve, reject) => {
227
+ this.client.hget(dict_key, key, (err, value) => {
228
+ if (err) {
229
+ reject(err);
230
+ if (callback) {
231
+ callback(err, null);
232
+ }
233
+ }
234
+ else {
235
+ if (callback) {
236
+ callback(null, value);
237
+ }
238
+ resolve(value);
239
+ }
240
+ });
241
+ });
242
+ }
243
+
244
+ async getJSON(key, callback) {
245
+ const value = await this.get(key);
246
+ return JSON.parse(value);
247
+ }
248
+
249
+ async del(key, callback) {
250
+ return new Promise( async (resolve, reject) => {
251
+ this.client.del(key, () => {
252
+ if (callback) {
253
+ callback();
254
+ }
255
+ return resolve();
256
+ });
257
+ })
258
+ }
259
+ }
260
+
261
+ module.exports = { TdCache };
@@ -218,6 +218,10 @@ class TiledeskExpression {
218
218
  name: "roundAsNumber",
219
219
  applyPattern: "TiledeskMath.round(Number(#1))"
220
220
  },
221
+ "convertToNumber": {
222
+ name: "convertToNumber",
223
+ applyPattern: "Number(#1)"
224
+ },
221
225
  "JSONparse": {
222
226
  name: "JSONparse",
223
227
  applyPattern: "JSON.parse(String(#1))"
@@ -259,7 +263,7 @@ class TiledeskExpression {
259
263
  // console.log("res=", res)
260
264
  }
261
265
  catch (err) {
262
- console.error("(evaluateJavascriptExpression) TiledeskExpression.evaluate() error:", err.message, "- while evaluating the following expression: '" + expression + "'");
266
+ // console.error("(evaluateJavascriptExpression) TiledeskExpression.evaluate() error:", err.message, "- while evaluating the following expression: '" + expression + "'");
263
267
  }
264
268
  return res;
265
269
  }
@@ -333,7 +337,7 @@ class TiledeskExpression {
333
337
  res = vm.run(`let $data = this;${expression}`);
334
338
  }
335
339
  catch (err) {
336
- console.error("TiledeskExpression.evaluate() error:", err.message, "evaluating expression: '" + expression + "'");
340
+ // console.error("TiledeskExpression.evaluate() error:", err.message, "evaluating expression: '" + expression + "'");
337
341
  }
338
342
  return res;
339
343
  }
@@ -355,7 +359,7 @@ class TiledeskExpression {
355
359
  // console.log("operand1_s:", operand1_s);
356
360
  }
357
361
  else {
358
- console.error("Condition evaluation stopped because of invalid operand", condition.operand1);
362
+ console.error("Condition evaluation stopped because of invalid operand1", condition.operand1);
359
363
  return null;
360
364
  }
361
365
 
@@ -0,0 +1,43 @@
1
+ const Utils = require('./utils')
2
+ class AiService {
3
+
4
+ constructor(options){
5
+ this.APIURL = options.API_ENDPOINT
6
+ this.TOKEN = options.TOKEN
7
+ this.PROJECT_ID = options.PROJECT_ID
8
+ }
9
+
10
+ async speechToText(url){
11
+ return new Promise((resolve, reject)=> {
12
+ const HTTPREQUEST = {
13
+ url: `${this.APIURL}/${this.PROJECT_ID}/llm/transcription`,
14
+ headers: {
15
+ 'Content-Type' : 'application/json',
16
+ 'Authorization': Utils.fixToken(this.TOKEN)
17
+ },
18
+ json: {
19
+ url: url
20
+ },
21
+ method: 'POST',
22
+ httpsOptions: this.httpsOptions
23
+ };
24
+ Utils.myrequest(
25
+ HTTPREQUEST,
26
+ function(err, resbody) {
27
+ if (err) {
28
+ reject(err)
29
+ }
30
+ else {
31
+ resolve(resbody)
32
+ }
33
+ }, this.LOG
34
+ );
35
+ });
36
+ }
37
+
38
+
39
+
40
+
41
+ }
42
+
43
+ module.exports= AiService