@tiledesk/tiledesk-tybot-connector 2.0.26-rc1 → 2.0.26

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tiledesk/tiledesk-tybot-connector",
3
- "version": "2.0.26-rc1",
3
+ "version": "2.0.26",
4
4
  "description": "Tiledesk Tybot connector",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -15,7 +15,7 @@
15
15
  "@tiledesk/tiledesk-chatbot-client": "^0.5.30",
16
16
  "@tiledesk/tiledesk-chatbot-util": "^0.8.39",
17
17
  "@tiledesk/tiledesk-client": "^0.10.13",
18
- "@tiledesk/tiledesk-multi-worker": "^0.3.3",
18
+ "@tiledesk/tiledesk-multi-worker": "^0.3.2",
19
19
  "accept-language-parser": "^1.5.0",
20
20
  "app-root-path": "^3.1.0",
21
21
  "axios": "^1.7.7",
@@ -2,7 +2,7 @@ const httpUtils = require('../utils/HttpUtils');
2
2
  const winston = require('../utils/winston');
3
3
  const API_ENDPOINT = process.env.API_ENDPOINT;
4
4
 
5
- class LLMService {
5
+ class KBService {
6
6
 
7
7
  constructor() { }
8
8
 
@@ -101,5 +101,5 @@ class LLMService {
101
101
  }
102
102
  }
103
103
 
104
- const llmService = new LLMService();
105
- module.exports = llmService;
104
+ const kbService = new KBService();
105
+ module.exports = kbService;
@@ -54,13 +54,13 @@ const { DirMoveToUnassigned } = require('./directives/DirMoveToUnassigned');
54
54
  const { DirAddTags } = require('./directives/DirAddTags');
55
55
  const { DirSendWhatsapp } = require('./directives/DirSendWhatsapp');
56
56
  const { DirReplaceBotV3 } = require('./directives/DirReplaceBotV3');
57
- const { DirAiPrompt } = require('./directives/DirAiPrompt');
57
+ const { DirAiTask, DirAiPrompt } = require('./directives/DirAiPrompt');
58
58
  const { DirWebResponse } = require('./directives/DirWebResponse');
59
59
  const { DirConnectBlock } = require('./directives/DirConnectBlock');
60
- const { DirAddKbContent } = require('./directives/DirAddKbContent');
61
- const { DirFlowLog } = require('./directives/DirFlowLog');
62
60
 
63
61
  const winston = require('../utils/winston');
62
+ const { DirFlowLog } = require('./directives/DirFlowLog');
63
+ const { DirAddKbContent } = require('./directives/DirAddKbContent');
64
64
 
65
65
  class DirectivesChatbotPlug {
66
66
 
@@ -219,13 +219,14 @@ class DirectivesChatbotPlug {
219
219
  directive_name = directive.name.toLowerCase();
220
220
  }
221
221
  if (directive && directive.action) {
222
- const action_id = directive.action["_tdActionId"];
223
- const locked_action_id = await this.chatbot.currentLockedAction(this.supportRequest.request_id);
224
- if ( locked_action_id && (locked_action_id !== action_id) ) {
225
- let next_dir = await this.nextDirective(this.directives);
226
- this.process(next_dir);
227
- return;
228
- }
222
+ const action_id = directive.action["_tdActionId"];
223
+ const locked_action_id = await this.chatbot.currentLockedAction(this.supportRequest.request_id);
224
+ if ( locked_action_id && (locked_action_id !== action_id) ) {
225
+ let next_dir = await this.nextDirective(this.directives);
226
+ this.process(next_dir);
227
+ return;
228
+ }
229
+
229
230
  }
230
231
  if (directive == null || (directive !== null && directive["name"] === undefined)) {
231
232
  winston.debug("(DirectivesChatbotPlug) stop process(). directive is (null?): ", directive);
@@ -703,19 +704,6 @@ class DirectivesChatbotPlug {
703
704
  }
704
705
  });
705
706
  }
706
- else if (directive_name === Directives.WEBHOOK) {
707
- // console.log(".....DirIntent")
708
- new DirIntent(context).execute(directive, async (stop) => {
709
- if (stop) {
710
- if (context.log) { console.log("Stopping Actions on:", JSON.stringify(directive));}
711
- this.theend();
712
- }
713
- else {
714
- let next_dir = await this.nextDirective(this.directives);
715
- this.process(next_dir);
716
- }
717
- });
718
- }
719
707
  else if (directive_name === Directives.WEB_RESPONSE) {
720
708
  new DirWebResponse(context).execute(directive, async () => {
721
709
  let next_dir = await this.nextDirective(this.directives);
@@ -728,12 +716,6 @@ class DirectivesChatbotPlug {
728
716
  this.process(next_dir);
729
717
  })
730
718
  }
731
- else if (directive_name === Directives.ADD_KB_CONTENT) {
732
- new DirAddKbContent(context).execute(directive, async () => {
733
- let next_dir = await this.nextDirective(this.directives);
734
- this.process(next_dir);
735
- });
736
- }
737
719
  else {
738
720
  let next_dir = await this.nextDirective(this.directives);
739
721
  this.process(next_dir);
@@ -11,10 +11,8 @@ const winston = require('../../utils/winston');
11
11
  const httpUtils = require("../../utils/HttpUtils");
12
12
  const integrationService = require("../../services/IntegrationService");
13
13
  const { Logger } = require("../../Logger");
14
+ const kbService = require("../../services/KbService");
14
15
  const quotasService = require("../../services/QuotasService");
15
- const llmService = require("../../services/LLMService");
16
-
17
-
18
16
 
19
17
  class DirAskGPTV2 {
20
18
 
@@ -173,7 +171,7 @@ class DirAskGPTV2 {
173
171
  if (!key) {
174
172
  this.logger.native("[Ask Knowledge Base] OpenAI key not found in Integration. Using shared OpenAI key");
175
173
  winston.verbose("DirAskGPTV2 - Key not found in Integrations. Searching in kb settings...");
176
- key = await llmService.getKeyFromKbSettings(this.projectId, this.token);
174
+ key = await kbService.getKeyFromKbSettings(this.projectId, this.token);
177
175
  }
178
176
 
179
177
  if (!key) {
@@ -363,7 +361,7 @@ class DirAskGPTV2 {
363
361
  }
364
362
  } else {
365
363
  await this.#assignAttributes(action, answer, source);
366
- llmService.addUnansweredQuestion(this.projectId, json.namespace, json.question, this.token).catch((err) => {
364
+ kbService.addUnansweredQuestion(this.projectId, json.namespace, json.question, this.token).catch((err) => {
367
365
  winston.error("DirAskGPTV2 - Error adding unanswered question: ", err);
368
366
  this.logger.warn("[Ask Knowledge Base] Unable to add unanswered question", json.question, "to namespacae", json.namespace);
369
367
  })
@@ -522,10 +520,10 @@ class DirAskGPTV2 {
522
520
  return new Promise((resolve) => {
523
521
  let engine = {
524
522
  name: "pinecone",
525
- type: isHybrid ? "serverless" : "pod",
523
+ type: isHybrid ? "serverless" : process.env.PINECONE_TYPE,
526
524
  apikey: "",
527
525
  vector_size: 1536,
528
- index_name: isHybrid ? "hybrid_index" : "standard_index"
526
+ index_name: isHybrid ? process.env.PINECONE_INDEX_HYBRID : process.env.PINECONE_INDEX
529
527
  }
530
528
  resolve(engine);
531
529
  })
@@ -58,6 +58,7 @@ class DirReply {
58
58
  );
59
59
 
60
60
  TiledeskChatbotUtil.replaceJSONButtons(message, requestAttributes);
61
+ TiledeskChatbotUtil.replaceJSONGalleries(message, requestAttributes);
61
62
 
62
63
  const filler = new Filler();
63
64
  // fill text attribute
@@ -118,7 +118,7 @@ class DirWebRequestV2 {
118
118
  this.logger.native("[Web Request] resbody: ", resbody);
119
119
 
120
120
  if (err) {
121
- this.logger.error("[Web Request] error: ", err);
121
+ this.logger.error("WebRequest error: ", err);
122
122
  winston.log("webRequest error: ", err);
123
123
  if (callback) {
124
124
  if (falseIntent) {
@@ -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 };
@@ -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";
@@ -8,6 +8,8 @@ require('dotenv').config();
8
8
  let axios = require('axios');
9
9
  const winston = require('./winston');
10
10
 
11
+ const { CHANNEL_NAME } = require('./constants.js')
12
+
11
13
  class TiledeskChatbotUtil {
12
14
 
13
15
  static parseIntent(explicit_intent_name) {
@@ -305,9 +307,7 @@ class TiledeskChatbotUtil {
305
307
  let command = commands[i];
306
308
  if (command.type === 'message' && command.message) {
307
309
  if (command.message.attributes && command.message.attributes.attachment && command.message.attributes.attachment.json_buttons){
308
- // console.log("command with buttons ok:")
309
310
  let json_buttons_string = command.message.attributes.attachment.json_buttons;
310
- console.log("json_buttons_string:", json_buttons_string)
311
311
  let final_buttons = this.renderJSONButtons(json_buttons_string, flow_attributes);
312
312
  // let final_buttons = [];
313
313
  // try {
@@ -430,36 +430,27 @@ class TiledeskChatbotUtil {
430
430
  }
431
431
 
432
432
  static replaceJSONGalleries(message, flow_attributes) {
433
- console.log("replaceJSONGalleries...");
434
433
  if (message.attributes && message.attributes.commands) {
435
- console.log("message.attributes && message.attributes.commands...");
436
434
  let commands = message.attributes.commands;
437
435
  if (commands.length > 0) {
438
- console.log("commands.length > 0");
439
436
  for (let i = 0; i < commands.length; i++) {
440
437
  let command = commands[i];
441
- console.log("command:", JSON.stringify(command));
442
438
  if (command.type === 'message' && command.message) {
443
- console.log("command.type === 'message' && command.message");
444
439
  if (command.message.attributes && command.message.attributes.attachment && command.message.attributes.attachment.json_gallery){
445
- console.log("command with json_galley")
446
440
  let final_gallery = [];
447
441
  try {
448
442
  // fill previews
449
443
  const filler = new Filler();
450
444
  let json_gallery_string = command.message.attributes.attachment.json_gallery;
451
- console.log("gallerystring is:", json_gallery_string)
452
445
  json_gallery_string = filler.fill(json_gallery_string, flow_attributes);
453
446
  let json_gallery = JSON.parse(json_gallery_string);
454
447
  if (Array.isArray(json_gallery)) {
455
- console.log("is gallery")
456
448
  json_gallery.forEach(el => {
457
449
  if (el.buttons) {
458
450
  el.buttons = TiledeskChatbotUtil.renderJSONButtons(JSON.stringify(el.buttons));
459
451
  }
460
452
  final_gallery.push(el);
461
453
  });
462
- console.log("final: ", final_gallery)
463
454
  }
464
455
  else {
465
456
  winston.verbose("Invalid json_gallery.");
@@ -530,9 +521,7 @@ class TiledeskChatbotUtil {
530
521
  catch(error) {
531
522
  winston.warn("Error on JSON gallery parsing:", error);
532
523
  }
533
- console.log("final gallery...", final_gallery)
534
524
  if (final_gallery && final_gallery.length > 0) {
535
- console.log("updating with final gallery...", final_gallery)
536
525
  command.message.attributes.attachment.gallery = final_gallery;
537
526
  delete command.message.attributes.attachment.json_gallery;
538
527
  }
@@ -792,7 +781,10 @@ class TiledeskChatbotUtil {
792
781
  if (message.request.lead.phone) {
793
782
  await chatbot.addParameter(TiledeskChatbotConst.REQ_USER_PHONE_KEY, message.request.lead.phone);
794
783
  }
795
- if (message.request.lead.lead_id && message.request.lead.lead_id.startsWith("wab-")) {
784
+ if (message.request.lead.lead_id && (message.request.lead.lead_id.startsWith("wab-") ||
785
+ message.request.lead.lead_id.startsWith("vxml-") ||
786
+ message.request.lead.lead_id.startsWith(CHANNEL_NAME.VOICE_TWILIO) ||
787
+ message.request.lead.lead_id.startsWith(CHANNEL_NAME.SMS))) {
796
788
  const splits = message.request.lead.lead_id.split("-");
797
789
  if (splits && splits.length > 1) {
798
790
  await chatbot.addParameter(TiledeskChatbotConst.REQ_CURRENT_PHONE_NUMBER_KEY,splits[1]);