@tiledesk/tiledesk-tybot-connector 2.0.16-rc5 → 2.0.16
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 +3 -28
- package/Logger.js +4 -14
- package/TdCache copy.js +242 -0
- package/engine/mock/MockBotsDataSource.js +2 -1
- package/index.js +0 -3
- package/logs/app.log +44714 -5981
- package/logs/app1.log +16653 -0
- package/package.json +2 -2
- package/tiledeskChatbotPlugs/DirectivesChatbotPlug.js +11 -29
- package/tiledeskChatbotPlugs/directives/DirAddKbContent.js +21 -20
- package/tiledeskChatbotPlugs/directives/DirAddTags.js +6 -5
- package/tiledeskChatbotPlugs/directives/DirAiPrompt.js +8 -7
- package/tiledeskChatbotPlugs/directives/DirAskGPTV2.js +21 -53
- package/tiledeskChatbotPlugs/directives/DirAssistant.js +2 -1
- package/tiledeskChatbotPlugs/directives/DirBrevo.js +2 -1
- package/tiledeskChatbotPlugs/directives/DirCaptureUserReply.js +5 -4
- package/tiledeskChatbotPlugs/directives/DirClearTranscript.js +2 -1
- package/tiledeskChatbotPlugs/directives/DirClose.js +3 -2
- package/tiledeskChatbotPlugs/directives/DirCode.js +2 -1
- package/tiledeskChatbotPlugs/directives/DirCondition.js +4 -3
- package/tiledeskChatbotPlugs/directives/DirContactUpdate.js +2 -1
- package/tiledeskChatbotPlugs/directives/DirCustomerio.js +2 -1
- package/tiledeskChatbotPlugs/directives/DirDeleteVariable.js +2 -1
- package/tiledeskChatbotPlugs/directives/DirDepartment.js +4 -3
- package/tiledeskChatbotPlugs/directives/DirFlowLog.js +5 -5
- package/tiledeskChatbotPlugs/directives/DirGptTask.js +5 -4
- package/tiledeskChatbotPlugs/directives/DirHubspot.js +2 -1
- package/tiledeskChatbotPlugs/directives/DirIfOnlineAgentsV2.js +2 -1
- package/tiledeskChatbotPlugs/directives/DirIfOpenHours.js +4 -3
- package/tiledeskChatbotPlugs/directives/DirIntent.js +1 -4
- package/tiledeskChatbotPlugs/directives/DirJSONCondition.js +5 -4
- package/tiledeskChatbotPlugs/directives/DirMake.js +2 -1
- package/tiledeskChatbotPlugs/directives/DirMoveToAgent.js +2 -1
- package/tiledeskChatbotPlugs/directives/DirMoveToUnassigned.js +2 -1
- package/tiledeskChatbotPlugs/directives/DirQapla.js +2 -1
- package/tiledeskChatbotPlugs/directives/DirRandomReply.js +2 -1
- package/tiledeskChatbotPlugs/directives/DirReplaceBot.js +2 -1
- package/tiledeskChatbotPlugs/directives/DirReplaceBotV2.js +2 -1
- package/tiledeskChatbotPlugs/directives/DirReplaceBotV3.js +2 -1
- package/tiledeskChatbotPlugs/directives/DirReply.js +5 -6
- package/tiledeskChatbotPlugs/directives/DirReplyV2.js +2 -1
- package/tiledeskChatbotPlugs/directives/DirSendEmail.js +2 -1
- package/tiledeskChatbotPlugs/directives/DirSendWhatsapp.js +2 -1
- package/tiledeskChatbotPlugs/directives/DirSetAttributeV2.js +2 -1
- package/tiledeskChatbotPlugs/directives/DirWait.js +3 -2
- package/tiledeskChatbotPlugs/directives/DirWebRequestV2.js +9 -8
- package/tiledeskChatbotPlugs/directives/DirWebRequestV2_old.js +418 -0
- package/tiledeskChatbotPlugs/directives/DirWebResponse.js +3 -2
- package/tiledeskChatbotPlugs/directives/DirWhatsappByAttribute.js +2 -1
- package/tiledeskChatbotPlugs/directives/Directives.js +0 -1
- package/utils/TiledeskChatbotUtil.js +25 -4
- package/logs/app4.log +0 -46163
- package/logs/app5.log +0 -39983
- package/logs/app6.log +0 -50376
- package/logs/app7.log +0 -43568
- 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.
|
|
38
|
+
this.logger.info("Executing WebRequest action ", directive.action)
|
|
38
39
|
this.go(action, (stop) => {
|
|
39
|
-
this.logger.
|
|
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.
|
|
119
|
+
this.logger.debug("[Web Request] resbody: ", resbody);
|
|
119
120
|
|
|
120
121
|
if (err) {
|
|
121
|
-
this.logger.error("
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
-
|
|
522
|
+
if(process.env.BASE_URL){
|
|
523
|
+
await chatbot.addParameter(TiledeskChatbotConst.REQ_CHAT_URL, `${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);
|