@tiledesk/tiledesk-tybot-connector 2.0.16-rc5 → 2.0.17

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 (56) hide show
  1. package/CHANGELOG.md +3 -28
  2. package/Logger.js +4 -14
  3. package/TdCache copy.js +242 -0
  4. package/engine/mock/MockBotsDataSource.js +2 -1
  5. package/index.js +0 -3
  6. package/logs/app.log +44714 -5981
  7. package/logs/app1.log +16653 -0
  8. package/package.json +2 -2
  9. package/tiledeskChatbotPlugs/DirectivesChatbotPlug.js +11 -29
  10. package/tiledeskChatbotPlugs/directives/DirAddKbContent.js +21 -20
  11. package/tiledeskChatbotPlugs/directives/DirAddTags.js +6 -5
  12. package/tiledeskChatbotPlugs/directives/DirAiPrompt.js +8 -7
  13. package/tiledeskChatbotPlugs/directives/DirAskGPTV2.js +21 -53
  14. package/tiledeskChatbotPlugs/directives/DirAssistant.js +2 -1
  15. package/tiledeskChatbotPlugs/directives/DirBrevo.js +2 -1
  16. package/tiledeskChatbotPlugs/directives/DirCaptureUserReply.js +5 -4
  17. package/tiledeskChatbotPlugs/directives/DirClearTranscript.js +2 -1
  18. package/tiledeskChatbotPlugs/directives/DirClose.js +3 -2
  19. package/tiledeskChatbotPlugs/directives/DirCode.js +2 -1
  20. package/tiledeskChatbotPlugs/directives/DirCondition.js +4 -3
  21. package/tiledeskChatbotPlugs/directives/DirContactUpdate.js +2 -1
  22. package/tiledeskChatbotPlugs/directives/DirCustomerio.js +2 -1
  23. package/tiledeskChatbotPlugs/directives/DirDeleteVariable.js +2 -1
  24. package/tiledeskChatbotPlugs/directives/DirDepartment.js +4 -3
  25. package/tiledeskChatbotPlugs/directives/DirFlowLog.js +5 -5
  26. package/tiledeskChatbotPlugs/directives/DirGptTask.js +5 -4
  27. package/tiledeskChatbotPlugs/directives/DirHubspot.js +2 -1
  28. package/tiledeskChatbotPlugs/directives/DirIfOnlineAgentsV2.js +2 -1
  29. package/tiledeskChatbotPlugs/directives/DirIfOpenHours.js +4 -3
  30. package/tiledeskChatbotPlugs/directives/DirIntent.js +1 -4
  31. package/tiledeskChatbotPlugs/directives/DirJSONCondition.js +5 -4
  32. package/tiledeskChatbotPlugs/directives/DirMake.js +2 -1
  33. package/tiledeskChatbotPlugs/directives/DirMoveToAgent.js +2 -1
  34. package/tiledeskChatbotPlugs/directives/DirMoveToUnassigned.js +2 -1
  35. package/tiledeskChatbotPlugs/directives/DirQapla.js +2 -1
  36. package/tiledeskChatbotPlugs/directives/DirRandomReply.js +2 -1
  37. package/tiledeskChatbotPlugs/directives/DirReplaceBot.js +2 -1
  38. package/tiledeskChatbotPlugs/directives/DirReplaceBotV2.js +2 -1
  39. package/tiledeskChatbotPlugs/directives/DirReplaceBotV3.js +2 -1
  40. package/tiledeskChatbotPlugs/directives/DirReply.js +5 -6
  41. package/tiledeskChatbotPlugs/directives/DirReplyV2.js +2 -1
  42. package/tiledeskChatbotPlugs/directives/DirSendEmail.js +2 -1
  43. package/tiledeskChatbotPlugs/directives/DirSendWhatsapp.js +2 -1
  44. package/tiledeskChatbotPlugs/directives/DirSetAttributeV2.js +2 -1
  45. package/tiledeskChatbotPlugs/directives/DirWait.js +3 -2
  46. package/tiledeskChatbotPlugs/directives/DirWebRequestV2.js +9 -8
  47. package/tiledeskChatbotPlugs/directives/DirWebRequestV2_old.js +418 -0
  48. package/tiledeskChatbotPlugs/directives/DirWebResponse.js +3 -2
  49. package/tiledeskChatbotPlugs/directives/DirWhatsappByAttribute.js +2 -1
  50. package/tiledeskChatbotPlugs/directives/Directives.js +0 -1
  51. package/utils/TiledeskChatbotUtil.js +25 -4
  52. package/logs/app4.log +0 -46163
  53. package/logs/app5.log +0 -39983
  54. package/logs/app6.log +0 -50376
  55. package/logs/app7.log +0 -43568
  56. package/logs/app8.log +0 -4779
@@ -23,6 +23,7 @@ class DirWebRequestV2 {
23
23
  }
24
24
 
25
25
  execute(directive, callback) {
26
+ this.logger.info("[Web Request] Executing action");
26
27
  winston.verbose("Execute WebRequestV2 directive");
27
28
  let action;
28
29
  if (directive.action) {
@@ -34,9 +35,9 @@ class DirWebRequestV2 {
34
35
  callback();
35
36
  return;
36
37
  }
37
- this.logger.native("Executing WebRequest action ", directive.action)
38
+ this.logger.info("Executing WebRequest action ", directive.action)
38
39
  this.go(action, (stop) => {
39
- this.logger.native("[Web Request] Executed");
40
+ this.logger.info("[Web Request] Action completed");
40
41
  callback(stop);
41
42
  }).catch((err) => {
42
43
  // do not nothing
@@ -115,10 +116,10 @@ class DirWebRequestV2 {
115
116
  let error = res.error;
116
117
  await this.#assignAttributes(action, resbody, status, error)
117
118
  winston.debug("DirWebRequestV2 resbody:", resbody);
118
- this.logger.native("[Web Request] resbody: ", resbody);
119
+ this.logger.debug("[Web Request] resbody: ", resbody);
119
120
 
120
121
  if (err) {
121
- this.logger.error("[Web Request] error: ", err);
122
+ this.logger.error("WebRequest error: ", err);
122
123
  winston.log("webRequest error: ", err);
123
124
  if (callback) {
124
125
  if (falseIntent) {
@@ -240,7 +241,7 @@ class DirWebRequestV2 {
240
241
  }
241
242
  if (result === true) {
242
243
  if (trueIntentDirective) {
243
- this.logger.native("WebRequest: executing true condition");
244
+ this.logger.info("WebRequest: executing true condition");
244
245
  this.intentDir.execute(trueIntentDirective, () => {
245
246
  if (callback) {
246
247
  callback();
@@ -248,7 +249,7 @@ class DirWebRequestV2 {
248
249
  });
249
250
  }
250
251
  else {
251
- this.logger.native("WebRequest: no block connected to true condition");
252
+ this.logger.info("WebRequest: no block connected to true condition");
252
253
  winston.debug("DirWebRequestV2 No trueIntentDirective specified");
253
254
  if (callback) {
254
255
  callback();
@@ -257,7 +258,7 @@ class DirWebRequestV2 {
257
258
  }
258
259
  else {
259
260
  if (falseIntentDirective) {
260
- this.logger.native("WebRequest: executing false condition");
261
+ this.logger.info("WebRequest: executing false condition");
261
262
  this.intentDir.execute(falseIntentDirective, () => {
262
263
  if (callback) {
263
264
  callback();
@@ -265,7 +266,7 @@ class DirWebRequestV2 {
265
266
  });
266
267
  }
267
268
  else {
268
- this.logger.native("WebRequest: no block connected to false condition");
269
+ this.logger.info("WebRequest: no block connected to false condition");
269
270
  winston.debug("DirWebRequestV2 No falseIntentDirective specified");
270
271
  if (callback) {
271
272
  callback();
@@ -0,0 +1,418 @@
1
+ let axios = require('axios');
2
+ let https = require("https");
3
+ const { Filler } = require('../Filler');
4
+ const { TiledeskChatbot } = require('../../engine/TiledeskChatbot');
5
+ const { DirIntent } = require('./DirIntent');
6
+
7
+ class DirWebRequestV2 {
8
+ constructor(context) {
9
+ if (!context) {
10
+ throw new Error('context object is mandatory.');
11
+ }
12
+ this.context = context;
13
+ this.tdcache = context.tdcache;
14
+ this.requestId = context.requestId;
15
+ this.chatbot = context.chatbot;
16
+ this.log = context.log;
17
+
18
+ this.intentDir = new DirIntent(context);
19
+ }
20
+
21
+ execute(directive, callback) {
22
+ let action;
23
+ if (directive.action) {
24
+ action = directive.action;
25
+ }
26
+ else {
27
+ console.error("Incorrect directive:", JSON.stringify(directive));
28
+ callback();
29
+ return;
30
+ }
31
+ this.go(action, (stop) => {
32
+ if (this.log) {console.log("(webrequestv2, stop?", stop); }
33
+ callback(stop);
34
+ });
35
+ }
36
+
37
+ async go(action, callback) {
38
+ if (this.log) {console.log("webRequest action:", JSON.stringify(action));}
39
+
40
+ // Condition branches
41
+ let trueIntent = action.trueIntent;
42
+ let falseIntent = action.falseIntent;
43
+ const trueIntentAttributes = action.trueIntentAttributes;
44
+ const falseIntentAttributes = action.falseIntentAttributes;
45
+ let stopOnConditionMet = action.stopOnConditionMet;
46
+ if (trueIntent && trueIntent.trim() === "") {
47
+ trueIntent = null;
48
+ }
49
+ if (falseIntent && falseIntent.trim() === "") {
50
+ falseIntent = null;
51
+ }
52
+
53
+ let requestAttributes = null;
54
+ if (this.tdcache) {
55
+ requestAttributes =
56
+ await TiledeskChatbot.allParametersStatic(
57
+ this.tdcache, this.requestId
58
+ );
59
+ }
60
+ const filler = new Filler();
61
+ const url = filler.fill(action.url, requestAttributes);
62
+
63
+ let headers = {};
64
+ if (action.headersString) {
65
+ let headersDict = action.headersString
66
+ for (const [key, value] of Object.entries(headersDict)) {
67
+ if (this.log) {console.log("header:", key, "value:", value)}
68
+ let filled_value = filler.fill(value, requestAttributes);
69
+ headers[key] = filled_value;
70
+ }
71
+ }
72
+
73
+ let json = null;
74
+ try {
75
+ if (action.jsonBody && action.bodyType == "json") {
76
+ if (this.log) {console.log("action.body is:", action.jsonBody);}
77
+ let jsonBody = filler.fill(action.jsonBody, requestAttributes);
78
+ try {
79
+ json = JSON.parse(jsonBody);
80
+ if (this.log) {console.log("json is:", json);}
81
+ }
82
+ catch(err) {
83
+ console.error("Error parsing webRequest jsonBody:", jsonBody);
84
+ if (callback) {
85
+ if (falseIntent) {
86
+ await this.chatbot.addParameter("flowError", "Error parsing jsonBody");
87
+ this.#executeCondition(false, trueIntent, trueIntentAttributes, falseIntent, falseIntentAttributes, () => {
88
+ console.log('herrrrr 11111' )
89
+ callback(true); // stop the flow
90
+ return;
91
+ });
92
+ }
93
+ else {
94
+ console.log('herrrrr 2222' )
95
+ callback(false); // continue the flow
96
+ return;
97
+ }
98
+ }
99
+ }
100
+ }
101
+ else if (action.formData && action.bodyType == "form-data") {
102
+ let formData = filler.fill(action.formData, requestAttributes);
103
+ if (this.log) {console.log("action.body is form-data:", formData);}
104
+ // // fill
105
+ if (formData && formData.length > 0) {
106
+ for (let i = 0; i < formData.length; i++) {
107
+ let field = formData[i];
108
+ if (field.value) {
109
+ field.value = filler.fill(field.value, requestAttributes);
110
+ if (this.log) {console.log("field filled:", field.value);}
111
+ }
112
+ }
113
+ }
114
+ json = {};
115
+ for (let i = 0; i < formData.length; i++) {
116
+ let field = formData[i];
117
+ if (field.enabled && field.value && field.type === "URL") {
118
+ if (this.log) {console.log("Getting file:", field.value);}
119
+ let response = await axios.get(field.value,
120
+ {
121
+ responseType: 'stream'
122
+ }
123
+ );
124
+ let stream = response.data;
125
+ // if (this.log) {console.log("Stream data:", stream);}
126
+ json[field.name] = stream;
127
+ // process.exit(0);
128
+ }
129
+ else if (field.enabled && field.value && field.type === "Text") {
130
+ json[field.name] = field.value;
131
+ }
132
+ }
133
+ if (this.log) {console.log("final json:", json);}
134
+ }
135
+ else {
136
+ if (this.log) {console.log("no action upload parts");}
137
+ }
138
+
139
+ }
140
+ catch(error) {
141
+ console.error("Error", error);
142
+ if (callback) {
143
+ if (falseIntent) {
144
+ await this.chatbot.addParameter("flowError", "Error: " + error);
145
+ this.#executeCondition(false, trueIntent, trueIntentAttributes, falseIntent, falseIntentAttributes, () => {
146
+ callback(true); // stop the flow
147
+ return;
148
+ });
149
+ }
150
+ else {
151
+ callback(false); // continue the flow
152
+ return;
153
+ }
154
+ }
155
+ }
156
+
157
+
158
+
159
+ let timeout = this.#webrequest_timeout(action, 20000, 1, 300000);
160
+
161
+ if (this.log) {console.log("webRequest URL", url);}
162
+
163
+ const HTTPREQUEST = {
164
+ url: url,
165
+ headers: headers,
166
+ json: json,
167
+ method: action.method,
168
+ timeout: timeout
169
+ };
170
+
171
+ if (this.log) {console.log("webRequest HTTPREQUEST", HTTPREQUEST);}
172
+ this.#myrequest(
173
+ HTTPREQUEST, async (err, res) => {
174
+ if (this.log && err) {
175
+ console.log("webRequest error:", err);
176
+ }
177
+ if (this.log) {console.log("got res:", res);}
178
+ let resbody = res.data;
179
+ let status = res.status;
180
+ let error = res.error;
181
+ await this.#assignAttributes(action, resbody, status, error)
182
+ if (this.log) {console.log("webRequest resbody:", resbody);}
183
+ if (err) {
184
+ if (this.log) {console.error("webRequest error:", err);}
185
+ if (callback) {
186
+ if (falseIntent) {
187
+ this.#executeCondition(false, trueIntent, trueIntentAttributes, falseIntent, falseIntentAttributes, () => {
188
+ callback(true); // stop the flow
189
+ });
190
+ }
191
+ else {
192
+ callback(false); // continue the flow
193
+ }
194
+ }
195
+ }
196
+ else if(res.status >= 200 && res.status <= 299) {
197
+ if (trueIntent) {
198
+ await this.#executeCondition(true, trueIntent, trueIntentAttributes, falseIntent, falseIntentAttributes, () => {
199
+ callback(true); // stop the flow
200
+ });
201
+ }
202
+ else {
203
+ callback(false); // continue the flow
204
+ }
205
+ }
206
+ else {
207
+ if (falseIntent) {
208
+ this.#executeCondition(false, trueIntent, trueIntentAttributes, falseIntent, falseIntentAttributes, () => {
209
+ callback(true); // stop the flow
210
+ });
211
+ }
212
+ else {
213
+ callback(false); // continue the flow
214
+ }
215
+ }
216
+ }
217
+ );
218
+ }
219
+
220
+ async #executeCondition(result, trueIntent, trueIntentAttributes, falseIntent, falseIntentAttributes, callback) {
221
+ let trueIntentDirective = null;
222
+ if (trueIntent) {
223
+ trueIntentDirective = DirIntent.intentDirectiveFor(trueIntent, trueIntentAttributes);
224
+ }
225
+ let falseIntentDirective = null;
226
+ if (falseIntent) {
227
+ falseIntentDirective = DirIntent.intentDirectiveFor(falseIntent, falseIntentAttributes);
228
+ }
229
+ if (result === true) {
230
+ if (trueIntentDirective) {
231
+ this.intentDir.execute(trueIntentDirective, () => {
232
+ callback();
233
+ });
234
+ }
235
+ else {
236
+ if (this.log) {console.log("No trueIntentDirective specified");}
237
+ callback();
238
+ }
239
+ }
240
+ else {
241
+ if (falseIntentDirective) {
242
+ this.intentDir.execute(falseIntentDirective, () => {
243
+ callback();
244
+ });
245
+ }
246
+ else {
247
+ if (this.log) {console.log("No falseIntentDirective specified");}
248
+ callback();
249
+ }
250
+ }
251
+ }
252
+
253
+ async #assignAttributes(action, resbody, status, error) {
254
+ if (this.log) {
255
+ console.log("assignAttributes resbody:", resbody)
256
+ console.log("assignAttributes error:", error)
257
+ console.log("assignAttributes status:", status)
258
+ console.log("assignAttributes action:", action)
259
+ }
260
+ if (this.context.tdcache) {
261
+ if (action.assignResultTo && resbody) {
262
+ if (this.log) {console.log("assign assignResultTo:", resbody);}
263
+ await TiledeskChatbot.addParameterStatic(this.context.tdcache, this.context.requestId, action.assignResultTo, resbody);
264
+ }
265
+ if (action.assignErrorTo && error) {
266
+ if (this.log) {console.log("assign assignResultTo:", error);}
267
+ await TiledeskChatbot.addParameterStatic(this.context.tdcache, this.context.requestId, action.assignErrorTo, error);
268
+ }
269
+ if (action.assignStatusTo && status) {
270
+ if (this.log) {console.log("assign assignStatusTo:", status);}
271
+ await TiledeskChatbot.addParameterStatic(this.context.tdcache, this.context.requestId, action.assignStatusTo, status);
272
+ }
273
+ // Debug log
274
+ if (this.log) {
275
+ const all_parameters = await TiledeskChatbot.allParametersStatic(this.context.tdcache, this.context.requestId);
276
+ for (const [key, value] of Object.entries(all_parameters)) {
277
+ if (this.log) {console.log("(webRequest) request parameter:", key, "value:", value, "type:", typeof value)}
278
+ }
279
+ }
280
+ }
281
+ }
282
+
283
+ #myrequest(options, callback) {
284
+ try {
285
+ if (this.log) {
286
+ console.log("API URL:", options.url);
287
+ //console.log("** Options:", JSON.stringify(options));
288
+ // Stringify "options". FIX THE STRINGIFY OF CIRCULAR STRUCTURE BUG - START
289
+ let cache = [];
290
+ let str_Options = JSON.stringify(options, function(key, value) { // try to use a separate function
291
+ if (typeof value === 'object' && value != null) {
292
+ if (cache.indexOf(value) !== -1) {
293
+ return;
294
+ }
295
+ cache.push(value);
296
+ }
297
+ return value;
298
+ });
299
+ console.log("** Options:", str_Options);
300
+ }
301
+ let axios_options = {
302
+ url: options.url,
303
+ method: options.method,
304
+ params: options.params,
305
+ headers: options.headers,
306
+ timeout: options.timeout,
307
+ maxContentLength: 10000000, // max 10mb response size
308
+ maxBodyLength: 10000000 // max 10mb request body size
309
+ }
310
+
311
+ if (options.json !== null) {
312
+ axios_options.data = options.json
313
+ }
314
+ // if (this.log) {
315
+ // console.log("axios_options:", JSON.stringify(axios_options));
316
+ // }
317
+ if (options.url.startsWith("https:")) {
318
+ const httpsAgent = new https.Agent({
319
+ rejectUnauthorized: false,
320
+ });
321
+ axios_options.httpsAgent = httpsAgent;
322
+ }
323
+
324
+ axios(axios_options)
325
+ .then((res) => {
326
+ if (this.log) {
327
+ console.log("Success Response:", res);
328
+ console.log("Response for url:", options.url);
329
+ console.log("Response headers:\n", JSON.stringify(res.headers));
330
+ }
331
+ if (callback) {
332
+ callback(null, res);
333
+ }
334
+ })
335
+ .catch( (err) => {
336
+ if (this.log) {
337
+ if (err.response) {
338
+ console.log("Error Response data:", err.response.data);
339
+ }
340
+ // FIX THE STRINGIFY OF CIRCULAR STRUCTURE BUG - START
341
+ let cache = [];
342
+ let error_log = JSON.stringify(err, function(key, value) { // try to use a separate function
343
+ if (typeof value === 'object' && value != null) {
344
+ if (cache.indexOf(value) !== -1) {
345
+ return;
346
+ }
347
+ cache.push(value);
348
+ }
349
+ return value;
350
+ });
351
+ console.error("An error occurred: ", error_log);
352
+ // FIX THE STRINGIFY OF CIRCULAR STRUCTURE BUG - END
353
+ // console.error("An error occurred:", JSON.stringify(err));
354
+ }
355
+ if (callback) {
356
+ let status = 1000;
357
+ let cache = [];
358
+ let str_error = JSON.stringify(err, function(key, value) { // try to use a separate function
359
+ if (typeof value === 'object' && value != null) {
360
+ if (cache.indexOf(value) !== -1) {
361
+ return;
362
+ }
363
+ cache.push(value);
364
+ }
365
+ return value;
366
+ });
367
+ let error = JSON.parse(str_error) // "status" disappears without this trick
368
+ let errorMessage = JSON.stringify(error);
369
+ if (error.status) {
370
+ status = error.status;
371
+ }
372
+ if (error.message) {
373
+ errorMessage = error.message;
374
+ }
375
+ let data = null;
376
+ if (err.response) {
377
+ data = err.response.data;
378
+ }
379
+ callback(
380
+ null, {
381
+ status: status,
382
+ data: data,
383
+ error: errorMessage
384
+ }
385
+ );
386
+ }
387
+ });
388
+ }
389
+ catch(error) {
390
+ console.error("Error:", error);
391
+ }
392
+ }
393
+
394
+ #webrequest_timeout(action, default_timeout, min, max) {
395
+ let timeout = default_timeout;
396
+ if (!action.settings) {
397
+ return timeout;
398
+ }
399
+ // console.log("default timeout:", timeout);
400
+ // console.log("action.settings:", action.settings);
401
+ // console.log("action.settings.timeout:", action.settings.timeout);
402
+ // console.log("typeof action.settings.timeout:", typeof action.settings.timeout);
403
+ // console.log("action.settings.timeout > min", action.settings.timeout > min)
404
+ // console.log("action.settings.timeout < max", action.settings.timeout < max)
405
+
406
+ if (action.settings.timeout) {
407
+ if ((typeof action.settings.timeout === "number") && action.settings.timeout > min && action.settings.timeout < max) {
408
+ timeout = Math.round(action.settings.timeout)
409
+ // console.log("new timeout:", timeout);
410
+ }
411
+ }
412
+ // console.log("returning timeout:", timeout);
413
+ return timeout
414
+ }
415
+
416
+ }
417
+
418
+ module.exports = { DirWebRequestV2 };
@@ -21,6 +21,7 @@ class DirWebResponse {
21
21
  }
22
22
 
23
23
  execute(directive, callback) {
24
+ this.logger.info("[Web Response] Executing action");
24
25
  winston.debug("Execute WebResponse directive: ", directive);
25
26
  let action;
26
27
  if (directive.action) {
@@ -33,7 +34,7 @@ class DirWebResponse {
33
34
  return;
34
35
  }
35
36
  this.go(action, () => {
36
- this.logger.native("[Web Response] Executed");
37
+ this.logger.info("[Web Response] Action completed");
37
38
  callback();
38
39
  });
39
40
  }
@@ -62,7 +63,7 @@ class DirWebResponse {
62
63
  payload: json
63
64
  }
64
65
 
65
- this.logger.native("[Web Response] payload: ", webResponse);
66
+ this.logger.debug("[Web Response] payload: ", webResponse);
66
67
 
67
68
  const topic = `/webhooks/${this.requestId}`;
68
69
 
@@ -20,6 +20,7 @@ class DirWhatsappByAttribute {
20
20
  }
21
21
 
22
22
  execute(directive, callback) {
23
+ this.logger.info("[Whatsapp by Attribute] Executing action");
23
24
  winston.verbose("Execute WhatsappByAttribute directive");
24
25
  let action;
25
26
  if (directive.action) {
@@ -32,7 +33,7 @@ class DirWhatsappByAttribute {
32
33
  return;
33
34
  }
34
35
  this.go(action, () => {
35
- this.logger.native("[Whatsapp by Attribute] Executed");
36
+ this.logger.info("[Whatsapp by Attribute] Action completed");
36
37
  callback();
37
38
  })
38
39
  }
@@ -58,7 +58,6 @@ class Directives {
58
58
  static MOVE_TO_UNASSIGNED = "move_to_unassigned";
59
59
  static CONNECT_BLOCK = "connect_block";
60
60
  static ADD_TAGS = 'add_tags'
61
- static WEBHOOK = 'webhook';
62
61
  static WEB_RESPONSE = "web_response";
63
62
  static FLOW_LOG = "flow_log";
64
63
  static ADD_KB_CONTENT = "add_kb_content";
@@ -333,6 +333,27 @@ class TiledeskChatbotUtil {
333
333
  }
334
334
  });
335
335
  }
336
+
337
+ // "buttons": [
338
+ // {
339
+ // "type": "action",
340
+ // "value": "Button1", // obbligatorio sempre
341
+ // "action": "#bb347206-d639-4926-94c9-e94930623dce", // mandatory
342
+ // "show_echo": true, // lo inserisco sempre
343
+ // "alias": "button1 alias"
344
+ // },
345
+ // {
346
+ // "type": "text",
347
+ // "value": "Button2 text", // obbligatorio sempre
348
+ // "show_echo": true // lo inserisco sempre
349
+ // },
350
+ // {
351
+ // "type": "url",
352
+ // "value": "Button3 link", // obbligatorio sempre
353
+ // "link": "http://", // obbligatorio
354
+ // "show_echo": true // lo inserisco sempre
355
+ // }
356
+ // ]
336
357
  }
337
358
  catch(error) {
338
359
  winston.warn("Invalid json_buttons:", error)
@@ -497,9 +518,11 @@ class TiledeskChatbotUtil {
497
518
  try {
498
519
  winston.debug("Updating request variables. Message:", message);
499
520
  const messageId = message._id;
500
- const chat_url = `https://panel.tiledesk.com/v3/dashboard/#/project/${projectId}/wsrequest/${requestId}/messages`
501
521
 
502
- await chatbot.addParameter(TiledeskChatbotConst.REQ_CHAT_URL, chat_url);
522
+ if(process.env.BASE_URL){
523
+ await chatbot.addParameter(TiledeskChatbotConst.REQ_CHAT_URL, `${process.env.BASE_URL}/dashboard/#/project/${projectId}/wsrequest/${requestId}/messages`);
524
+ }
525
+
503
526
  await chatbot.addParameter(TiledeskChatbotConst.REQ_PROJECT_ID_KEY, projectId);
504
527
  await chatbot.addParameter(TiledeskChatbotConst.REQ_REQUEST_ID_KEY, requestId);
505
528
 
@@ -581,10 +604,8 @@ class TiledeskChatbotUtil {
581
604
  }
582
605
  let currentLeadName = await chatbot.getParameter(TiledeskChatbotConst.REQ_LEAD_USERFULLNAME_KEY);
583
606
  winston.debug("(TiledeskChatbotUtil) You lead email from attributes: " + currentLeadEmail);
584
- console.log("currentLeadName: ", currentLeadName)
585
607
  if (message.request.lead.fullname && !currentLeadName) {
586
608
  // worth saving
587
- console.log("inside if")
588
609
  winston.debug("(TiledeskChatbotUtil) worth saving email");
589
610
  try {
590
611
  await chatbot.addParameter(TiledeskChatbotConst.REQ_LEAD_USERFULLNAME_KEY, message.request.lead.fullname);