@tiledesk/tiledesk-tybot-connector 0.1.74 → 0.1.75
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 +6 -0
- package/ExtUtil.js +0 -1
- package/TiledeskJSONEval.js +24 -0
- package/index.js +35 -21
- package/package.json +4 -4
- package/tiledeskChatbotPlugs/DirectivesChatbotPlug.js +1 -1
- package/tiledeskChatbotPlugs/directives/DirMessage.js +29 -26
- package/tiledeskChatbotPlugs/directives/DirWebRequest.js +33 -1
- package/.env +0 -9
- package/herokulog.sh +0 -1
- package/publish.sh +0 -10
- package/test/DEPRECATED-disable_input_text_directive_test.js_ +0 -88
- package/test/anomaly-detection-test.js +0 -173
- package/test/chatbot_util_test.js +0 -215
- package/test/check_steps_test.js +0 -23
- package/test/close_directive_test.js +0 -49
- package/test/condition_json_to_expression_test.js +0 -615
- package/test/conversation-actions-test.js +0 -329
- package/test/conversation-actions_bot.js +0 -236
- package/test/conversation-form-test.js +0 -1104
- package/test/conversation-form_bot.js +0 -834
- package/test/conversation-locked-intent-test.js +0 -242
- package/test/dir_set_attribute_test.js +0 -544
- package/test/directives_test.js +0 -39
- package/test/expression_evaluator_test.js +0 -161
- package/test/filter_commands_test.js +0 -349
- package/test/if_online_agents_directive_test.js +0 -44
- package/test/intent_form_pre_filled_test.js +0 -260
- package/test/intent_form_test.js +0 -239
- package/test/json_condition-actions_bot.js +0 -349
- package/test/json_condition-conversation_test.js +0 -334
- package/test/json_condition-with-intent-params-conversation_test.js +0 -282
- package/test/json_condition-with-intent-params_bot.js +0 -159
- package/test/mock_query_test.js +0 -276
- package/test/operation_json_to_expression_test.js +0 -783
- package/test/send_email_directive_test.js +0 -94
- package/test/single_test.sh +0 -11
- package/test/support_request.js +0 -249
- package/test/testin.js +0 -24
- package/test/validate_variable_names.js +0 -29
- package/test/var_splitter_test.js +0 -70
- package/test/web_request-bot.js +0 -142
- package/test/web_request-conversation_test.js +0 -243
- package/test/when_open_directive_test.js +0 -167
- package/tiledeskChatbotPlugs/publish.sh +0 -10
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,12 @@
|
|
|
5
5
|
available on:
|
|
6
6
|
▶️ https://www.npmjs.com/package/@tiledesk/tiledesk-tybot-connector
|
|
7
7
|
|
|
8
|
+
### 0.1.75
|
|
9
|
+
- introduced WebRequest action.assignments
|
|
10
|
+
- created TiledeskJSONEval class supported by handlebars
|
|
11
|
+
- removed debug logs
|
|
12
|
+
- added handlebars lib
|
|
13
|
+
|
|
8
14
|
### 0.1.74
|
|
9
15
|
- DEBUG VERSION
|
|
10
16
|
- Added if (log || projectId === "64218dfecdb804001380b9ba")
|
package/ExtUtil.js
CHANGED
|
@@ -19,7 +19,6 @@ class ExtUtil {
|
|
|
19
19
|
const messagePipeline = new MessagePipeline(static_bot_answer, null);
|
|
20
20
|
// /// const webhookurl = bot.webhook_url;
|
|
21
21
|
// /// messagePipeline.addPlug(new WebhookChatbotPlug(message.request, webhookurl, token));
|
|
22
|
-
console.log("111")
|
|
23
22
|
messagePipeline.addPlug(directivesPlug);
|
|
24
23
|
messagePipeline.addPlug(new FillParamsChatbotPlug(request, tdcache, log)); // in original message
|
|
25
24
|
messagePipeline.addPlug(new SplitsChatbotPlug(log));
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
const Handlebars = require("handlebars");
|
|
2
|
+
|
|
3
|
+
class TiledeskJSONEval {
|
|
4
|
+
|
|
5
|
+
static eval(data, expression) {
|
|
6
|
+
Handlebars.registerHelper("last", function(array) {
|
|
7
|
+
return array[array.length-1];
|
|
8
|
+
});
|
|
9
|
+
Handlebars.registerHelper("first", function(array) {
|
|
10
|
+
return array[0];
|
|
11
|
+
});
|
|
12
|
+
let template = null;
|
|
13
|
+
if (expression.startsWith("{")) {
|
|
14
|
+
template = Handlebars.compile(expression);
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
template = Handlebars.compile("{{{" + expression + "}}}");
|
|
18
|
+
}
|
|
19
|
+
const value = template(data);
|
|
20
|
+
return value;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
module.exports = { TiledeskJSONEval }
|
package/index.js
CHANGED
|
@@ -248,6 +248,7 @@ router.post('/ext/:botid', async (req, res) => {
|
|
|
248
248
|
|
|
249
249
|
async function updateRequestVariables(chatbot, message, projectId, requestId) {
|
|
250
250
|
// update request context
|
|
251
|
+
if (chatbot.log) {console.log("Updating request variables. Message:", JSON.stringify(message));}
|
|
251
252
|
const messageId = message._id;
|
|
252
253
|
const chat_url = `https://panel.tiledesk.com/v3/dashboard/#/project/${projectId}/wsrequest/${requestId}/messages`
|
|
253
254
|
await chatbot.addParameter(TiledeskChatbotConst.REQ_CHAT_URL, chat_url);
|
|
@@ -273,15 +274,28 @@ async function updateRequestVariables(chatbot, message, projectId, requestId) {
|
|
|
273
274
|
await chatbot.addParameter(TiledeskChatbotConst.REQ_USER_LANGUAGE_KEY, message.request["language"]);
|
|
274
275
|
await chatbot.addParameter(TiledeskChatbotConst.REQ_USER_AGENT_KEY, message.request.userAgent);
|
|
275
276
|
}
|
|
277
|
+
// console.log("message.request.language", message.request["language"])
|
|
276
278
|
if (message.request && message.request.department) {
|
|
277
|
-
// It was an error getting this from widget message's attributes
|
|
279
|
+
// It was an error when getting this from widget message's attributes
|
|
278
280
|
// await chatbot.addParameter(TiledeskChatbotConst.REQ_DEPARTMENT_ID_KEY, message.attributes.departmentId);
|
|
279
281
|
// await chatbot.addParameter(TiledeskChatbotConst.REQ_DEPARTMENT_NAME_KEY, message.attributes.departmentName);
|
|
280
282
|
// get from request.department instead
|
|
281
283
|
await chatbot.addParameter(TiledeskChatbotConst.REQ_DEPARTMENT_ID_KEY, message.request.department._id);
|
|
282
284
|
await chatbot.addParameter(TiledeskChatbotConst.REQ_DEPARTMENT_NAME_KEY, message.request.department.name);
|
|
283
285
|
}
|
|
286
|
+
|
|
287
|
+
// for BUG
|
|
288
|
+
// if (chatbot.log) {console.log("message.request.attributes.payload", JSON.stringify(message.request.attributes.payload))}
|
|
289
|
+
if (message && message.request && message.request.attributes && message.request.attributes.payload) {
|
|
290
|
+
if (!message.attributes) {
|
|
291
|
+
message.attributes = {}
|
|
292
|
+
}
|
|
293
|
+
message.attributes.payload = message.request.attributes.payload
|
|
294
|
+
if (chatbot.log) {console.log("FORCED SET message.attributes.payload:", JSON.stringify(message.attributes.payload))}
|
|
295
|
+
}
|
|
296
|
+
|
|
284
297
|
if (message.attributes) {
|
|
298
|
+
if (chatbot.log) {console.log("Ok message.attributes", JSON.stringify(message.attributes));}
|
|
285
299
|
await chatbot.addParameter(TiledeskChatbotConst.REQ_END_USER_ID_KEY, message.attributes.requester_id);
|
|
286
300
|
await chatbot.addParameter(TiledeskChatbotConst.REQ_END_USER_IP_ADDRESS_KEY, message.attributes.ipAddress);
|
|
287
301
|
if (message.attributes.payload) {
|
|
@@ -289,7 +303,7 @@ async function updateRequestVariables(chatbot, message, projectId, requestId) {
|
|
|
289
303
|
for (const [key, value] of Object.entries(message.attributes.payload)) {
|
|
290
304
|
// const value = all_parameters[key];
|
|
291
305
|
const value_type = typeof value;
|
|
292
|
-
|
|
306
|
+
console.log("importing payload parameter:", key, "value:", value, "type:", value_type)
|
|
293
307
|
await chatbot.addParameter(key, String(value));
|
|
294
308
|
}
|
|
295
309
|
}
|
|
@@ -353,13 +367,13 @@ router.post('/ext/:projectId/requests/:requestId/messages', async (req, res) =>
|
|
|
353
367
|
const projectId = req.params.projectId;
|
|
354
368
|
const requestId = req.params.requestId;
|
|
355
369
|
const token = req.headers["authorization"];
|
|
356
|
-
if (log
|
|
357
|
-
if (log
|
|
358
|
-
if (log
|
|
359
|
-
if (log
|
|
370
|
+
if (log) {console.log("/ext projectId:", projectId);}
|
|
371
|
+
if (log) {console.log("/ext requestId:", requestId);}
|
|
372
|
+
if (log) {console.log("/ext req.headers:", req.headers);}
|
|
373
|
+
if (log) {console.log("/ext token:", token);}
|
|
360
374
|
|
|
361
375
|
let answer = req.body;
|
|
362
|
-
if (log
|
|
376
|
+
if (log) {console.log("/ext => answer on sendSupportMessageExt:", JSON.stringify(answer));}
|
|
363
377
|
const tdclient = new TiledeskClient({
|
|
364
378
|
projectId: projectId,
|
|
365
379
|
token: token,
|
|
@@ -391,25 +405,25 @@ router.post('/ext/:projectId/requests/:requestId/messages', async (req, res) =>
|
|
|
391
405
|
// console.log("Cache request found.");
|
|
392
406
|
}
|
|
393
407
|
catch(err) {
|
|
394
|
-
console.error("
|
|
408
|
+
console.error("/ext => Request not found:", requestId);
|
|
395
409
|
}
|
|
396
410
|
// if (log) {console.log("(No tdcache) Got request with APIs");}
|
|
397
411
|
// }
|
|
398
412
|
if (!request) {
|
|
399
|
-
if (log
|
|
413
|
+
if (log) {console.log("/ext => Creating new Request. Chatbot-pure directives still work. Tiledesk specific directives don't");}
|
|
400
414
|
const request_botId_key = "tilebot:botId_requests:" + requestId;
|
|
401
415
|
const botId = await tdcache.get(request_botId_key);
|
|
402
|
-
if (log
|
|
416
|
+
if (log) {console.log("/ext => current botId [" + request_botId_key + "]:", botId);}
|
|
403
417
|
request = {
|
|
404
418
|
request_id: requestId,
|
|
405
419
|
id_project: projectId,
|
|
406
420
|
bot_id: botId
|
|
407
421
|
}
|
|
408
422
|
}
|
|
409
|
-
if (log
|
|
410
|
-
console.log("
|
|
411
|
-
console.log("
|
|
412
|
-
console.log("
|
|
423
|
+
if (log) {
|
|
424
|
+
console.log("/ext request....", JSON.stringify(request));
|
|
425
|
+
console.log("/ext APIURL....", APIURL);
|
|
426
|
+
console.log("/ext process.env.TYBOT_ENDPOINT....", process.env.TYBOT_ENDPOINT);
|
|
413
427
|
}
|
|
414
428
|
let directivesPlug = new DirectivesChatbotPlug({supportRequest: request, TILEDESK_API_ENDPOINT: APIURL, TILEBOT_ENDPOINT:process.env.TYBOT_ENDPOINT, token: token, log: log, HELP_CENTER_API_ENDPOINT: process.env.HELP_CENTER_API_ENDPOINT, cache: tdcache});
|
|
415
429
|
// let directivesPlug = null;
|
|
@@ -417,9 +431,9 @@ router.post('/ext/:projectId/requests/:requestId/messages', async (req, res) =>
|
|
|
417
431
|
// if (log) {console.log("answer to process:", JSON.stringify(answer));}
|
|
418
432
|
const original_answer_text = answer.text;
|
|
419
433
|
const bot_answer = await ExtUtil.execPipelineExt(request, answer, directivesPlug, tdcache, log);
|
|
420
|
-
if (log
|
|
434
|
+
if (log) {console.log("/ext => bot_answer", JSON.stringify(bot_answer))}
|
|
421
435
|
if (bot_answer) {
|
|
422
|
-
if (log
|
|
436
|
+
if (log) {console.log("/ext => adding to bot_answer original_answer_text:", JSON.stringify(original_answer_text));}
|
|
423
437
|
if (!bot_answer.attributes) {
|
|
424
438
|
bot_answer.attributes = {};
|
|
425
439
|
}
|
|
@@ -429,9 +443,9 @@ router.post('/ext/:projectId/requests/:requestId/messages', async (req, res) =>
|
|
|
429
443
|
bot_answer.attributes["_raw_message"] = original_answer_text;
|
|
430
444
|
// if (log) {console.log("bot_answer", JSON.stringify(bot_answer));}
|
|
431
445
|
tdclient.sendSupportMessage(requestId, bot_answer, (err, response) => {
|
|
432
|
-
if (log
|
|
446
|
+
if (log) {console.log("/ext => bot_answer sent:", JSON.stringify(bot_answer));}
|
|
433
447
|
if (err) {
|
|
434
|
-
console.error("
|
|
448
|
+
console.error("/ext => Error sending message", err);
|
|
435
449
|
}
|
|
436
450
|
directivesPlug.processDirectives( () => {
|
|
437
451
|
if (log) {console.log("After message - Directives executed.");}
|
|
@@ -439,7 +453,7 @@ router.post('/ext/:projectId/requests/:requestId/messages', async (req, res) =>
|
|
|
439
453
|
});
|
|
440
454
|
}
|
|
441
455
|
else {
|
|
442
|
-
if (log
|
|
456
|
+
if (log) {console.log("/ext => !bot_answer");}
|
|
443
457
|
directivesPlug.processDirectives( () => {
|
|
444
458
|
if (log) {console.log("Directives executed.");}
|
|
445
459
|
});
|
|
@@ -506,8 +520,8 @@ router.get('/', (req, res) => {
|
|
|
506
520
|
res.send('Hello Tilebot!');
|
|
507
521
|
});
|
|
508
522
|
|
|
509
|
-
router.get('/test/webrequest/get/plain', async (req, res) => {
|
|
510
|
-
res.send(
|
|
523
|
+
router.get('/test/webrequest/get/plain/:username', async (req, res) => {
|
|
524
|
+
res.send(`Application var ${req.params['username']}`);
|
|
511
525
|
});
|
|
512
526
|
|
|
513
527
|
router.post('/test/webrequest/post/plain', async (req, res) => {
|
package/package.json
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tiledesk/tiledesk-tybot-connector",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.75",
|
|
4
4
|
"description": "Tiledesk Tybot connector",
|
|
5
|
-
|
|
6
5
|
"main": "index.js",
|
|
7
6
|
"scripts": {
|
|
8
7
|
"test": "mocha --timeout 60000 --exit",
|
|
@@ -21,6 +20,8 @@
|
|
|
21
20
|
"cors": "^2.8.5",
|
|
22
21
|
"dotenv": "^16.0.3",
|
|
23
22
|
"express": "^4.17.1",
|
|
23
|
+
"handlebars": "^4.7.7",
|
|
24
|
+
"jsonschema": "^1.4.1",
|
|
24
25
|
"jsonwebtoken": "^8.5.1",
|
|
25
26
|
"minimist-string": "^1.0.2",
|
|
26
27
|
"mocha": "^10.2.0",
|
|
@@ -28,7 +29,6 @@
|
|
|
28
29
|
"nanoid": "^3.1.25",
|
|
29
30
|
"redis": "^3.1.2",
|
|
30
31
|
"uuid": "^3.3.3",
|
|
31
|
-
"vm2": "^3.9.13"
|
|
32
|
-
"jsonschema": "^1.4.1"
|
|
32
|
+
"vm2": "^3.9.13"
|
|
33
33
|
}
|
|
34
34
|
}
|
|
@@ -458,7 +458,7 @@ class DirectivesChatbotPlug {
|
|
|
458
458
|
});
|
|
459
459
|
}
|
|
460
460
|
else if (directive_name === Directives.SEND_EMAIL) {
|
|
461
|
-
console.log("...DirSendEmail");
|
|
461
|
+
// console.log("...DirSendEmail");
|
|
462
462
|
new DirSendEmail(context).execute(directive, async () => {
|
|
463
463
|
let next_dir = await this.nextDirective(this.directives);
|
|
464
464
|
this.process(next_dir);
|
|
@@ -69,6 +69,9 @@ class DirMessage {
|
|
|
69
69
|
if (directive.name === Directives.HMESSAGE) {
|
|
70
70
|
action.attributes.subtype = "info";
|
|
71
71
|
}
|
|
72
|
+
// if (directive.name === Directives.HMESSAGE) {
|
|
73
|
+
// action.sender = "tiledesk";
|
|
74
|
+
// }
|
|
72
75
|
}
|
|
73
76
|
else {
|
|
74
77
|
console.error("Incorrect directive:", directive);
|
|
@@ -113,33 +116,33 @@ class DirMessage {
|
|
|
113
116
|
});
|
|
114
117
|
}
|
|
115
118
|
|
|
116
|
-
static firstMessageInfoFromCommands(commands) {
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
119
|
+
// static firstMessageInfoFromCommands(commands) {
|
|
120
|
+
// let type = "text";
|
|
121
|
+
// let text = "New message";
|
|
122
|
+
// for (let i = 0; i < commands.length; i++) {
|
|
123
|
+
// const command = commands[i];
|
|
124
|
+
// console.log("cheking command", command)
|
|
125
|
+
// if (command.type === "message") {
|
|
126
|
+
// console.log("command.type: message!")
|
|
127
|
+
// console.log("command.message.type!", command.message.type)
|
|
128
|
+
// console.log("command.message.text!", command.message.text)
|
|
126
129
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
}
|
|
130
|
+
// if (command.message.type) {
|
|
131
|
+
// type = command.message.type;
|
|
132
|
+
// }
|
|
133
|
+
// if (command.message.text) {
|
|
134
|
+
// text = command.message.text;
|
|
135
|
+
// }
|
|
136
|
+
// break;
|
|
137
|
+
// }
|
|
138
|
+
// }
|
|
139
|
+
// const message_info = {
|
|
140
|
+
// type: type,
|
|
141
|
+
// text: text
|
|
142
|
+
// }
|
|
143
|
+
// // console.log("message_info:", message_info);
|
|
144
|
+
// return message_info;
|
|
145
|
+
// }
|
|
143
146
|
|
|
144
147
|
}
|
|
145
148
|
|
|
@@ -2,6 +2,7 @@ let axios = require('axios');
|
|
|
2
2
|
let https = require("https");
|
|
3
3
|
const { Filler } = require('../Filler');
|
|
4
4
|
const { TiledeskChatbot } = require('../../models/TiledeskChatbot');
|
|
5
|
+
const { TiledeskJSONEval } = require('../../TiledeskJSONEval');
|
|
5
6
|
|
|
6
7
|
class DirWebRequest {
|
|
7
8
|
constructor(context) {
|
|
@@ -88,7 +89,7 @@ class DirWebRequest {
|
|
|
88
89
|
}
|
|
89
90
|
}
|
|
90
91
|
else if (callback) {
|
|
91
|
-
if (action.assignTo && this.context.tdcache && resbody) {
|
|
92
|
+
if (action.assignTo && this.context.tdcache && resbody) { // DEPRECATED
|
|
92
93
|
if (this.log) {console.log("(webRequest) this.requestId:", this.context.requestId);}
|
|
93
94
|
let attributes =
|
|
94
95
|
await TiledeskChatbot.allParametersStatic(
|
|
@@ -107,6 +108,37 @@ class DirWebRequest {
|
|
|
107
108
|
if (this.log) {console.log("(webRequest) request parameter:", key, "value:", value, "type:", value_type)}
|
|
108
109
|
}
|
|
109
110
|
}
|
|
111
|
+
} else if (action.assignments && this.context.tdcache && resbody) {
|
|
112
|
+
if (this.log) {console.log("(webRequest) action.assignments for request:", this.context.requestId);}
|
|
113
|
+
let json_body;
|
|
114
|
+
if (typeof resbody === "string") {
|
|
115
|
+
json_body = {
|
|
116
|
+
body: resbody
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
json_body = resbody
|
|
121
|
+
}
|
|
122
|
+
if (this.log) {console.log("(webRequest) action.assignments json_body:", json_body);}
|
|
123
|
+
let attributes =
|
|
124
|
+
await TiledeskChatbot.allParametersStatic(this.context.tdcache, this.context.requestId);
|
|
125
|
+
if (this.log) {console.log("(webRequest) action.assignments attributes:", attributes);}
|
|
126
|
+
const assignments = action.assignments;
|
|
127
|
+
if (this.log) {console.log("(webRequest) assignments:", assignments);}
|
|
128
|
+
for (const [attr_name, attr_eval_expression] of Object.entries(assignments)) {
|
|
129
|
+
if (this.log) {console.log("", attr_name, attr_eval_expression);}
|
|
130
|
+
const attributeValue = TiledeskJSONEval.eval(json_body, attr_eval_expression);
|
|
131
|
+
if (this.log) {console.log("(webRequest) Assigning to:", attr_name, "value:", attributeValue);}
|
|
132
|
+
await TiledeskChatbot.addParameterStatic(this.context.tdcache, this.context.requestId, attr_name, attributeValue);
|
|
133
|
+
}
|
|
134
|
+
if (this.log) {
|
|
135
|
+
console.log("(webRequest) All attributes:");
|
|
136
|
+
const all_parameters = await TiledeskChatbot.allParametersStatic(this.context.tdcache, this.context.requestId);
|
|
137
|
+
for (const [key, value] of Object.entries(all_parameters)) {
|
|
138
|
+
const value_type = typeof value;
|
|
139
|
+
if (this.log) {console.log("(webRequest) request attribute:", key, "value:", value, "type:", value_type)}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
110
142
|
}
|
|
111
143
|
callback();
|
|
112
144
|
}
|
package/.env
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
API_ENDPOINT=http://localhost:10002
|
|
2
|
-
mongoUrl=mongodb://tiledesk-user1:YB62b7gQNGg3G9OW@tiledesk-prod-shard-00-00-vmvst.mongodb.net:27017,tiledesk-prod-shard-00-01-vmvst.mongodb.net:27017,tiledesk-prod-shard-00-02-vmvst.mongodb.net:27017/tiledesk-pre?ssl=true&replicaSet=tiledesk-prod-shard-0&authSource=admin&retryWrites=true
|
|
3
|
-
REDIS_HOST=localhost
|
|
4
|
-
REDIS_PORT=6379
|
|
5
|
-
TYBOT_ENDPOINT=http://localhost:10001
|
|
6
|
-
_TYBOT_ENDPOINT=http://localhost:3000
|
|
7
|
-
CHATBOT_TOKEN=JWT eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ3ZWJob29rX2VuYWJsZWQiOmZhbHNlLCJ0eXBlIjoiZXh0ZXJuYWwiLCJsYW5ndWFnZSI6ImVuIiwicHVibGljIjpmYWxzZSwiX2lkIjoiNjM4Yzc5MDQxZGI0NDkwMDM1MTEwMjYwIiwibmFtZSI6IlRoZSBGb3JtIHYyIC0gZXh0IiwidXJsIjoiaHR0cHM6Ly90aWxlYm90LWRldi5oZXJva3VhcHAuY29tL2V4dC82MzhjNzhkNzFkYjQ0OTAwMzUxMTAxYzIiLCJpZF9wcm9qZWN0IjoiNjM4Yzc4YTYxZGI0NDkwMDM1MTBmZjkxIiwidHJhc2hlZCI6ZmFsc2UsImNyZWF0ZWRCeSI6IjVlMDlkMTZkNGQzNjExMDAxNzUwNmQ3ZiIsImNyZWF0ZWRBdCI6IjIwMjItMTItMDRUMTA6NDA6MDQuMjA3WiIsInVwZGF0ZWRBdCI6IjIwMjItMTItMDVUMDc6MjE6MDIuOTIxWiIsIl9fdiI6MCwiZGVzY3JpcHRpb24iOiJPbiBIZXJva3UiLCJpYXQiOjE2NzA2NzE4ODksImF1ZCI6Imh0dHBzOi8vdGlsZWRlc2suY29tL2JvdHMvNjM4Yzc5MDQxZGI0NDkwMDM1MTEwMjYwIiwiaXNzIjoiaHR0cHM6Ly90aWxlZGVzay5jb20iLCJzdWIiOiJib3QiLCJqdGkiOiJmNDVlZGIwYS0zNzVhLTQ0NjMtYjFhZi1jM2ZiZDg4YmE3ZGQifQ.FbW3csHl1sQgSyRz5Jg0qaTvvpXWXgWHlJ1JWoVbv3s
|
|
8
|
-
_CHATBOT_ENDPOINT=http://localhost:10001
|
|
9
|
-
API_LOG=1
|
package/herokulog.sh
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
heroku logs --tail --app tilebot-dev
|
package/publish.sh
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
#npm version patch
|
|
2
|
-
version=`node -e 'console.log(require("./package.json").version)'`
|
|
3
|
-
echo "version $version"
|
|
4
|
-
|
|
5
|
-
if [ "$version" != "" ]; then
|
|
6
|
-
git tag -a "$version" -m "`git log -1 --format=%s`"
|
|
7
|
-
echo "Created a new tag, $version"
|
|
8
|
-
git push --tags
|
|
9
|
-
npm publish --access public
|
|
10
|
-
fi
|
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
var assert = require('assert');
|
|
2
|
-
const { ExtUtil } = require('../ExtUtil');
|
|
3
|
-
const { DirectivesChatbotPlug } = require('../tiledeskChatbotPlugs/DirectivesChatbotPlug');
|
|
4
|
-
const supportRequest = require('./support_request.js').request;
|
|
5
|
-
|
|
6
|
-
describe('Directive DirDisableInputText', function() {
|
|
7
|
-
|
|
8
|
-
it('test directive DisableInputText (basic)', async () => {
|
|
9
|
-
const message_text = `message1
|
|
10
|
-
message2
|
|
11
|
-
* button1
|
|
12
|
-
\\_tddisableinputtext`;
|
|
13
|
-
const answer = {
|
|
14
|
-
text: message_text,
|
|
15
|
-
attributes: {
|
|
16
|
-
splits: true,
|
|
17
|
-
directives: true,
|
|
18
|
-
markbot: true
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
let directivesPlug = new DirectivesChatbotPlug({supportRequest: supportRequest, TILEDESK_API_ENDPOINT: "APIURL", token: "token", log: false, HELP_CENTER_API_ENDPOINT: "HELP_CENTER_API_ENDPOINT"});
|
|
22
|
-
const bot_answer = await ExtUtil.execPipelineExt(supportRequest, answer, directivesPlug, null, false);
|
|
23
|
-
assert.strictEqual(bot_answer.text, "message1\nmessage2");
|
|
24
|
-
assert(bot_answer.attributes.commands == null);
|
|
25
|
-
assert(bot_answer.attributes.disableInputMessage == true);
|
|
26
|
-
assert(directivesPlug.directives != null);
|
|
27
|
-
assert(directivesPlug.directives.length == 1);
|
|
28
|
-
assert(directivesPlug.directives[0].name.toLowerCase() == "disableinputtext");
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
it('test directive DisableInputText (placeholder message option: --label)', async () => {
|
|
32
|
-
const message_text = `message1
|
|
33
|
-
message2
|
|
34
|
-
* button1
|
|
35
|
-
\\_tddisableinputtext --label "Press a button to reply"`;
|
|
36
|
-
const answer = {
|
|
37
|
-
text: message_text,
|
|
38
|
-
attributes: {
|
|
39
|
-
splits: true,
|
|
40
|
-
directives: true,
|
|
41
|
-
markbot: true
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
let directivesPlug = new DirectivesChatbotPlug({supportRequest: supportRequest, TILEDESK_API_ENDPOINT: "APIURL", token: "token", log: false, HELP_CENTER_API_ENDPOINT: "HELP_CENTER_API_ENDPOINT"});
|
|
45
|
-
const bot_answer = await ExtUtil.execPipelineExt(supportRequest, answer, directivesPlug, null, false);
|
|
46
|
-
// console.log("bot as obj", bot_answer);
|
|
47
|
-
// console.log("bot", JSON.stringify(bot_answer));
|
|
48
|
-
assert.strictEqual(bot_answer.text, "message1\nmessage2");
|
|
49
|
-
assert(bot_answer.attributes.commands == null);
|
|
50
|
-
assert(bot_answer.attributes.disableInputMessage == true);
|
|
51
|
-
assert(bot_answer.attributes.inputMessagePlaceholder === "Press a button to reply");
|
|
52
|
-
// console.log("Directives:", directivesPlug.directives)
|
|
53
|
-
assert(directivesPlug.directives != null);
|
|
54
|
-
assert(directivesPlug.directives.length == 1);
|
|
55
|
-
assert(directivesPlug.directives[0].name.toLowerCase() == "disableinputtext");
|
|
56
|
-
});
|
|
57
|
-
|
|
58
|
-
it('test directive DisableInputText (placeholder message, short form option: -l)', async () => {
|
|
59
|
-
const message_text = `message1
|
|
60
|
-
message2
|
|
61
|
-
* button1
|
|
62
|
-
\\_tddisableinputtext -l "Press a button to reply"`;
|
|
63
|
-
const answer = {
|
|
64
|
-
text: message_text,
|
|
65
|
-
attributes: {
|
|
66
|
-
splits: true,
|
|
67
|
-
directives: true,
|
|
68
|
-
markbot: true
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
let directivesPlug = new DirectivesChatbotPlug({supportRequest: supportRequest, TILEDESK_API_ENDPOINT: "APIURL", token: "token", log: false, HELP_CENTER_API_ENDPOINT: "HELP_CENTER_API_ENDPOINT"});
|
|
72
|
-
const bot_answer = await ExtUtil.execPipelineExt(supportRequest, answer, directivesPlug, null, false);
|
|
73
|
-
// console.log("bot as obj", bot_answer);
|
|
74
|
-
// console.log("bot", JSON.stringify(bot_answer));
|
|
75
|
-
assert.strictEqual(bot_answer.text, "message1\nmessage2");
|
|
76
|
-
assert(bot_answer.attributes.commands == null);
|
|
77
|
-
assert(bot_answer.attributes.disableInputMessage == true);
|
|
78
|
-
assert(bot_answer.attributes.inputMessagePlaceholder === "Press a button to reply");
|
|
79
|
-
// console.log("Directives:", directivesPlug.directives)
|
|
80
|
-
assert(directivesPlug.directives != null);
|
|
81
|
-
assert(directivesPlug.directives.length == 1);
|
|
82
|
-
assert(directivesPlug.directives[0].name.toLowerCase() == "disableinputtext");
|
|
83
|
-
});
|
|
84
|
-
|
|
85
|
-
});
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
@@ -1,173 +0,0 @@
|
|
|
1
|
-
var assert = require('assert');
|
|
2
|
-
let axios = require('axios');
|
|
3
|
-
const tybot = require("../");
|
|
4
|
-
const tybotRoute = tybot.router;
|
|
5
|
-
var express = require('express');
|
|
6
|
-
var app = express();
|
|
7
|
-
app.use("/", tybotRoute);
|
|
8
|
-
app.use((err, req, res, next) => {
|
|
9
|
-
console.error("General error", err);
|
|
10
|
-
});
|
|
11
|
-
require('dotenv').config();
|
|
12
|
-
const bodyParser = require('body-parser');
|
|
13
|
-
const { v4: uuidv4 } = require('uuid');
|
|
14
|
-
const bots_data = require('./conversation-actions_bot.js').bots_data;
|
|
15
|
-
|
|
16
|
-
const PROJECT_ID = "projectID"; //process.env.TEST_ACTIONS_PROJECT_ID;
|
|
17
|
-
const REQUEST_ID = "support-group-" + PROJECT_ID + "-" + uuidv4().replace(/-/g, "");
|
|
18
|
-
const BOT_ID = "botID"; //process.env.TEST_ACTIONS_BOT_ID;
|
|
19
|
-
const CHATBOT_TOKEN = "XXX"; //process.env.ACTIONS_CHATBOT_TOKEN;
|
|
20
|
-
|
|
21
|
-
describe('Conversation for anomaly detection test', async () => {
|
|
22
|
-
|
|
23
|
-
let app_listener;
|
|
24
|
-
|
|
25
|
-
before(() => {
|
|
26
|
-
return new Promise(async (resolve, reject) => {
|
|
27
|
-
console.log("Starting tilebot server...");
|
|
28
|
-
tybot.startApp(
|
|
29
|
-
{
|
|
30
|
-
// MONGODB_URI: process.env.mongoUrl,
|
|
31
|
-
bots: bots_data,
|
|
32
|
-
API_ENDPOINT: process.env.API_ENDPOINT,
|
|
33
|
-
REDIS_HOST: process.env.REDIS_HOST,
|
|
34
|
-
REDIS_PORT: process.env.REDIS_PORT,
|
|
35
|
-
REDIS_PASSWORD: process.env.REDIS_PASSWORD,
|
|
36
|
-
log: process.env.API_LOG
|
|
37
|
-
}, () => {
|
|
38
|
-
console.log("Tilebot route successfully started.");
|
|
39
|
-
var port = process.env.PORT || 10001;
|
|
40
|
-
app_listener = app.listen(port, () => {
|
|
41
|
-
console.log('Tilebot connector listening on port... ', port);
|
|
42
|
-
resolve();
|
|
43
|
-
});
|
|
44
|
-
});
|
|
45
|
-
})
|
|
46
|
-
});
|
|
47
|
-
|
|
48
|
-
after(function (done) {
|
|
49
|
-
app_listener.close(() => {
|
|
50
|
-
done();
|
|
51
|
-
});
|
|
52
|
-
});
|
|
53
|
-
|
|
54
|
-
it('/anomaly', (done) => {
|
|
55
|
-
console.log("/anomaly story...");
|
|
56
|
-
let message_id = uuidv4();
|
|
57
|
-
let listener;
|
|
58
|
-
let endpointServer = express();
|
|
59
|
-
endpointServer.use(bodyParser.json());
|
|
60
|
-
endpointServer.post('/:projectId/requests/:requestId/messages', function (req, res) {
|
|
61
|
-
// console.log("...req.body:", JSON.stringify(req.body));
|
|
62
|
-
res.send({ success: true });
|
|
63
|
-
const message = req.body;
|
|
64
|
-
assert(message.attributes.error !== null);
|
|
65
|
-
assert(message.attributes.runtimeError.message === "Request error: anomaly detection. MAX ACTIONS exeeded.");
|
|
66
|
-
// console.log("/anomaly test success");
|
|
67
|
-
listener.close(() => {
|
|
68
|
-
// console.log("/anomaly lister test closed");
|
|
69
|
-
done();
|
|
70
|
-
});
|
|
71
|
-
});
|
|
72
|
-
|
|
73
|
-
listener = endpointServer.listen(10002, '0.0.0.0', () => {
|
|
74
|
-
console.log('endpointServer started', listener.address());
|
|
75
|
-
let request = {
|
|
76
|
-
"payload": {
|
|
77
|
-
"_id": message_id,
|
|
78
|
-
"senderFullname": "guest#367e",
|
|
79
|
-
"type": "text",
|
|
80
|
-
"sender": "A-SENDER",
|
|
81
|
-
"recipient": REQUEST_ID,
|
|
82
|
-
"text": "/anomaly",
|
|
83
|
-
"id_project": PROJECT_ID,
|
|
84
|
-
"metadata": "",
|
|
85
|
-
"request": {
|
|
86
|
-
"request_id": REQUEST_ID
|
|
87
|
-
}
|
|
88
|
-
},
|
|
89
|
-
"token": CHATBOT_TOKEN
|
|
90
|
-
}
|
|
91
|
-
sendMessageToBot(request, BOT_ID, () => {
|
|
92
|
-
// console.log("Message sent:\n", request);
|
|
93
|
-
});
|
|
94
|
-
});
|
|
95
|
-
|
|
96
|
-
});
|
|
97
|
-
|
|
98
|
-
});
|
|
99
|
-
|
|
100
|
-
/**
|
|
101
|
-
* A stub to send message to the "ext/botId" endpoint, hosted by tilebot on:
|
|
102
|
-
* /${TILEBOT_ROUTE}/ext/${botId}
|
|
103
|
-
*
|
|
104
|
-
* @param {Object} message. The message to send
|
|
105
|
-
* @param {string} botId. Tiledesk botId
|
|
106
|
-
* @param {string} token. User token
|
|
107
|
-
*/
|
|
108
|
-
function sendMessageToBot(message, botId, callback) {
|
|
109
|
-
// const jwt_token = this.fixToken(token);
|
|
110
|
-
const url = `${process.env.TYBOT_ENDPOINT}/ext/${botId}`;
|
|
111
|
-
// console.log("sendMessageToBot URL", url);
|
|
112
|
-
const HTTPREQUEST = {
|
|
113
|
-
url: url,
|
|
114
|
-
headers: {
|
|
115
|
-
'Content-Type': 'application/json'
|
|
116
|
-
},
|
|
117
|
-
json: message,
|
|
118
|
-
method: 'POST'
|
|
119
|
-
};
|
|
120
|
-
myrequest(
|
|
121
|
-
HTTPREQUEST,
|
|
122
|
-
function (err, resbody) {
|
|
123
|
-
if (err) {
|
|
124
|
-
if (callback) {
|
|
125
|
-
callback(err);
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
else {
|
|
129
|
-
if (callback) {
|
|
130
|
-
callback(null, resbody);
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
}, false
|
|
134
|
-
);
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
function myrequest(options, callback, log) {
|
|
138
|
-
if (log) {
|
|
139
|
-
console.log("API URL:", options.url);
|
|
140
|
-
console.log("** Options:", JSON.stringify(options));
|
|
141
|
-
}
|
|
142
|
-
axios(
|
|
143
|
-
{
|
|
144
|
-
url: options.url,
|
|
145
|
-
method: options.method,
|
|
146
|
-
data: options.json,
|
|
147
|
-
params: options.params,
|
|
148
|
-
headers: options.headers
|
|
149
|
-
})
|
|
150
|
-
.then((res) => {
|
|
151
|
-
if (log) {
|
|
152
|
-
console.log("Response for url:", options.url);
|
|
153
|
-
console.log("Response headers:\n", JSON.stringify(res.headers));
|
|
154
|
-
//console.log("******** Response for url:", res);
|
|
155
|
-
}
|
|
156
|
-
if (res && res.status == 200 && res.data) {
|
|
157
|
-
if (callback) {
|
|
158
|
-
callback(null, res.data);
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
else {
|
|
162
|
-
if (callback) {
|
|
163
|
-
callback(TiledeskClient.getErr({ message: "Response status not 200" }, options, res), null, null);
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
})
|
|
167
|
-
.catch((error) => {
|
|
168
|
-
console.error("An error occurred:", error);
|
|
169
|
-
if (callback) {
|
|
170
|
-
callback(error, null, null);
|
|
171
|
-
}
|
|
172
|
-
});
|
|
173
|
-
}
|