@tiledesk/tiledesk-whatsapp-connector 0.1.31 → 0.1.33
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/index.js +260 -412
- package/package.json +1 -1
- package/tiledesk/MessageHandler.js +1 -1
- package/tiledesk/TiledeskBotTester.js +137 -0
- package/tiledesk/TiledeskChannel.js +0 -1
package/index.js
CHANGED
|
@@ -18,6 +18,7 @@ const { TiledeskWhatsapp } = require('./tiledesk/TiledeskWhatsapp');
|
|
|
18
18
|
const { TiledeskChannel } = require('./tiledesk/TiledeskChannel');
|
|
19
19
|
const { TiledeskAppsClient } = require('./tiledesk/TiledeskAppsClient');
|
|
20
20
|
const { MessageHandler } = require('./tiledesk/MessageHandler');
|
|
21
|
+
const { TiledeskBotTester } = require('./tiledesk/TiledeskBotTester');
|
|
21
22
|
|
|
22
23
|
// mongo
|
|
23
24
|
const { KVBaseMongo } = require('@tiledesk/tiledesk-kvbasemongo');
|
|
@@ -42,7 +43,6 @@ let REDIS_PORT = null;
|
|
|
42
43
|
let REDIS_PASSWORD = null;
|
|
43
44
|
let log = false;
|
|
44
45
|
|
|
45
|
-
|
|
46
46
|
router.get('/', async (req, res) => {
|
|
47
47
|
res.send('Welcome to Tiledesk-WhatsApp Business connector!')
|
|
48
48
|
})
|
|
@@ -63,7 +63,7 @@ router.get('/detail', async (req, res) => {
|
|
|
63
63
|
|
|
64
64
|
readHTMLFile('/detail.html', (err, html) => {
|
|
65
65
|
if (err) {
|
|
66
|
-
console.log("(
|
|
66
|
+
console.log("(whatsapp) error read html file: ", err);
|
|
67
67
|
}
|
|
68
68
|
|
|
69
69
|
var template = handlebars.compile(html);
|
|
@@ -74,9 +74,6 @@ router.get('/detail', async (req, res) => {
|
|
|
74
74
|
app_id: app_id,
|
|
75
75
|
installed: installed
|
|
76
76
|
}
|
|
77
|
-
if (log) {
|
|
78
|
-
console.log("Replacements: ", replacements);
|
|
79
|
-
}
|
|
80
77
|
var html = template(replacements);
|
|
81
78
|
res.send(html);
|
|
82
79
|
})
|
|
@@ -88,28 +85,25 @@ router.post('/install', async (req, res) => {
|
|
|
88
85
|
let app_id = req.body.app_id;
|
|
89
86
|
let token = req.body.token;
|
|
90
87
|
|
|
91
|
-
console.log("Install app " + app_id + " for project id " + project_id);
|
|
88
|
+
console.log("(whatsapp) Install app " + app_id + " for project id " + project_id);
|
|
92
89
|
let installation_info = {
|
|
93
90
|
project_id: project_id,
|
|
94
91
|
app_id: app_id,
|
|
95
92
|
createdAt: Date.now()
|
|
96
93
|
};
|
|
97
94
|
|
|
98
|
-
console.log("installation info: ", installation_info)
|
|
99
|
-
|
|
100
95
|
const appClient = new TiledeskAppsClient({ APPS_API_URL: APPS_API_URL });
|
|
101
|
-
//let installation = await appClient.install(installation_info);
|
|
102
96
|
appClient.install(installation_info).then((installation) => {
|
|
103
97
|
|
|
104
98
|
if (log) {
|
|
105
|
-
console.log("installation response: ", installation);
|
|
99
|
+
console.log("(whatsapp) installation response: ", installation);
|
|
106
100
|
}
|
|
107
101
|
|
|
108
102
|
let installed = true;
|
|
109
103
|
|
|
110
104
|
readHTMLFile('/detail.html', (err, html) => {
|
|
111
105
|
if (err) {
|
|
112
|
-
console.log("(
|
|
106
|
+
console.log("(whatsapp) error read html file: ", err);
|
|
113
107
|
}
|
|
114
108
|
|
|
115
109
|
var template = handlebars.compile(html);
|
|
@@ -120,15 +114,12 @@ router.post('/install', async (req, res) => {
|
|
|
120
114
|
app_id: app_id,
|
|
121
115
|
installed: installed
|
|
122
116
|
}
|
|
123
|
-
if (log) {
|
|
124
|
-
console.log("Replacements: ", replacements);
|
|
125
|
-
}
|
|
126
117
|
var html = template(replacements);
|
|
127
118
|
res.send(html);
|
|
128
119
|
})
|
|
129
120
|
|
|
130
121
|
}).catch((err) => {
|
|
131
|
-
console.error("installation error: ", err.data)
|
|
122
|
+
console.error("(whatsapp) installation error: ", err.data)
|
|
132
123
|
res.send("An error occurred during the installation");
|
|
133
124
|
})
|
|
134
125
|
|
|
@@ -143,14 +134,14 @@ router.post('/uninstall', async (req, res) => {
|
|
|
143
134
|
appClient.uninstall(project_id, app_id).then((response) => {
|
|
144
135
|
|
|
145
136
|
if (log) {
|
|
146
|
-
console.log("uninstallation response: ", response);
|
|
137
|
+
console.log("(whatsapp) uninstallation response: ", response);
|
|
147
138
|
}
|
|
148
139
|
|
|
149
140
|
let installed = false;
|
|
150
141
|
|
|
151
142
|
readHTMLFile('/detail.html', (err, html) => {
|
|
152
143
|
if (err) {
|
|
153
|
-
console.log("(
|
|
144
|
+
console.log("(whatsapp) error read html file: ", err);
|
|
154
145
|
}
|
|
155
146
|
|
|
156
147
|
var template = handlebars.compile(html);
|
|
@@ -161,23 +152,20 @@ router.post('/uninstall', async (req, res) => {
|
|
|
161
152
|
app_id: app_id,
|
|
162
153
|
installed: installed
|
|
163
154
|
}
|
|
164
|
-
if (log) {
|
|
165
|
-
console.log("Replacements: ", replacements);
|
|
166
|
-
}
|
|
167
155
|
var html = template(replacements);
|
|
168
156
|
res.send(html);
|
|
169
157
|
})
|
|
170
158
|
|
|
171
159
|
}).catch((err) => {
|
|
172
|
-
console.error("uninsallation error: ", err.data)
|
|
160
|
+
console.error("(whatsapp) uninsallation error: ", err.data)
|
|
173
161
|
res.send("An error occurred during the uninstallation");
|
|
174
162
|
})
|
|
175
163
|
})
|
|
176
164
|
|
|
177
165
|
router.get('/configure', async (req, res) => {
|
|
178
|
-
console.log("\n/configure");
|
|
166
|
+
console.log("\n(whatsapp) /configure");
|
|
179
167
|
if (log) {
|
|
180
|
-
console.log("/configure query: ", req.query);
|
|
168
|
+
console.log("(whatsapp) /configure query: ", req.query);
|
|
181
169
|
}
|
|
182
170
|
|
|
183
171
|
let projectId = "";
|
|
@@ -191,13 +179,15 @@ router.get('/configure', async (req, res) => {
|
|
|
191
179
|
let CONTENT_KEY = "whatsapp-" + projectId;
|
|
192
180
|
|
|
193
181
|
let settings = await db.get(CONTENT_KEY);
|
|
194
|
-
|
|
182
|
+
if (log) {
|
|
183
|
+
console.log("(whatsapp) kvdb settings: ", settings);
|
|
184
|
+
}
|
|
195
185
|
|
|
196
186
|
if (settings) {
|
|
197
187
|
|
|
198
188
|
readHTMLFile('/configure.html', (err, html) => {
|
|
199
189
|
if (err) {
|
|
200
|
-
console.log("(
|
|
190
|
+
console.log("(whatsapp) error read html file: ", err);
|
|
201
191
|
}
|
|
202
192
|
|
|
203
193
|
var template = handlebars.compile(html);
|
|
@@ -210,9 +200,6 @@ router.get('/configure', async (req, res) => {
|
|
|
210
200
|
verify_token: settings.verify_token,
|
|
211
201
|
subscription_id: settings.subscriptionId,
|
|
212
202
|
}
|
|
213
|
-
if (log) {
|
|
214
|
-
console.log("Replacements: ", replacements);
|
|
215
|
-
}
|
|
216
203
|
var html = template(replacements);
|
|
217
204
|
res.send(html);
|
|
218
205
|
|
|
@@ -223,7 +210,7 @@ router.get('/configure', async (req, res) => {
|
|
|
223
210
|
readHTMLFile('/configure.html', (err, html) => {
|
|
224
211
|
|
|
225
212
|
if (err) {
|
|
226
|
-
console.log("(
|
|
213
|
+
console.log("(whatsapp) error read html file: ", err);
|
|
227
214
|
}
|
|
228
215
|
|
|
229
216
|
var template = handlebars.compile(html);
|
|
@@ -233,9 +220,6 @@ router.get('/configure', async (req, res) => {
|
|
|
233
220
|
token: token,
|
|
234
221
|
proxy_url: proxy_url,
|
|
235
222
|
}
|
|
236
|
-
if (log) {
|
|
237
|
-
console.log("Replacements: ", replacements);
|
|
238
|
-
}
|
|
239
223
|
var html = template(replacements);
|
|
240
224
|
res.send(html);
|
|
241
225
|
|
|
@@ -244,9 +228,9 @@ router.get('/configure', async (req, res) => {
|
|
|
244
228
|
})
|
|
245
229
|
|
|
246
230
|
router.post('/update', async (req, res) => {
|
|
247
|
-
console.log("\n/update");
|
|
231
|
+
console.log("\n(whatsapp) /update");
|
|
248
232
|
if (log) {
|
|
249
|
-
console.log("/update body: ", req.body);
|
|
233
|
+
console.log("(whatsapp) /update body: ", req.body);
|
|
250
234
|
}
|
|
251
235
|
|
|
252
236
|
let projectId = req.body.project_id;
|
|
@@ -268,7 +252,7 @@ router.post('/update', async (req, res) => {
|
|
|
268
252
|
|
|
269
253
|
readHTMLFile('/configure.html', (err, html) => {
|
|
270
254
|
if (err) {
|
|
271
|
-
console.log("(
|
|
255
|
+
console.log("(whatsapp) error read html file: ", err);
|
|
272
256
|
}
|
|
273
257
|
|
|
274
258
|
var template = handlebars.compile(html);
|
|
@@ -282,10 +266,6 @@ router.post('/update', async (req, res) => {
|
|
|
282
266
|
verify_token: settings.verify_token,
|
|
283
267
|
subscription_id: settings.subscriptionId,
|
|
284
268
|
}
|
|
285
|
-
if (log) {
|
|
286
|
-
console.log("Replacements: ", replacements);
|
|
287
|
-
}
|
|
288
|
-
|
|
289
269
|
var html = template(replacements);
|
|
290
270
|
res.send(html);
|
|
291
271
|
})
|
|
@@ -310,7 +290,7 @@ router.post('/update', async (req, res) => {
|
|
|
310
290
|
tdClient.subscribe(subscription_info).then((data) => {
|
|
311
291
|
let subscription = data;
|
|
312
292
|
if (log) {
|
|
313
|
-
console.log("\
|
|
293
|
+
console.log("\n(whatsapp) Subscription: ", subscription)
|
|
314
294
|
}
|
|
315
295
|
|
|
316
296
|
let settings = {
|
|
@@ -328,7 +308,7 @@ router.post('/update', async (req, res) => {
|
|
|
328
308
|
|
|
329
309
|
readHTMLFile('/configure.html', (err, html) => {
|
|
330
310
|
if (err) {
|
|
331
|
-
console.log("(
|
|
311
|
+
console.log("(whatsapp) error read html file: ", err);
|
|
332
312
|
}
|
|
333
313
|
|
|
334
314
|
var template = handlebars.compile(html);
|
|
@@ -342,10 +322,6 @@ router.post('/update', async (req, res) => {
|
|
|
342
322
|
verify_token: settings.verify_token,
|
|
343
323
|
subscription_id: settings.subscriptionId,
|
|
344
324
|
}
|
|
345
|
-
if (log) {
|
|
346
|
-
console.log("Replacements: ", replacements);
|
|
347
|
-
}
|
|
348
|
-
|
|
349
325
|
var html = template(replacements);
|
|
350
326
|
res.send(html);
|
|
351
327
|
})
|
|
@@ -354,7 +330,7 @@ router.post('/update', async (req, res) => {
|
|
|
354
330
|
|
|
355
331
|
readHTMLFile('/configure.html', (err, html) => {
|
|
356
332
|
if (err) {
|
|
357
|
-
console.log("(
|
|
333
|
+
console.log("(whatsapp) error read html file: ", err);
|
|
358
334
|
}
|
|
359
335
|
|
|
360
336
|
var template = handlebars.compile(html);
|
|
@@ -365,10 +341,6 @@ router.post('/update', async (req, res) => {
|
|
|
365
341
|
proxy_url: proxy_url,
|
|
366
342
|
show_error_modal: true
|
|
367
343
|
}
|
|
368
|
-
if (log) {
|
|
369
|
-
console.log("Replacements: ", replacements);
|
|
370
|
-
}
|
|
371
|
-
|
|
372
344
|
var html = template(replacements);
|
|
373
345
|
res.send(html);
|
|
374
346
|
})
|
|
@@ -378,20 +350,19 @@ router.post('/update', async (req, res) => {
|
|
|
378
350
|
})
|
|
379
351
|
|
|
380
352
|
router.post('/disconnect', async (req, res) => {
|
|
381
|
-
console.log("\n/disconnect")
|
|
353
|
+
console.log("\n(whatsapp) /disconnect")
|
|
382
354
|
if (log) {
|
|
383
|
-
console.log("/disconnect body: ", req.body)
|
|
355
|
+
console.log("(whatsapp) /disconnect body: ", req.body)
|
|
384
356
|
}
|
|
385
357
|
|
|
386
358
|
let projectId = req.body.project_id;
|
|
387
359
|
let token = req.body.token;
|
|
388
360
|
let subscriptionId = req.body.subscription_id;
|
|
389
361
|
|
|
390
|
-
console.log("uninstall --> subscriptionId: ", subscriptionId)
|
|
391
362
|
|
|
392
363
|
let CONTENT_KEY = "whatsapp-" + projectId;
|
|
393
364
|
await db.remove(CONTENT_KEY);
|
|
394
|
-
console.log("Content deleted.");
|
|
365
|
+
console.log("(whatsapp) Content deleted.");
|
|
395
366
|
|
|
396
367
|
let proxy_url = BASE_URL + "/webhook/" + projectId;
|
|
397
368
|
|
|
@@ -409,7 +380,7 @@ router.post('/disconnect', async (req, res) => {
|
|
|
409
380
|
readHTMLFile('/configure.html', (err, html) => {
|
|
410
381
|
|
|
411
382
|
if (err) {
|
|
412
|
-
console.log("(
|
|
383
|
+
console.log("(whatsapp) error read html file: ", err);
|
|
413
384
|
}
|
|
414
385
|
|
|
415
386
|
var template = handlebars.compile(html);
|
|
@@ -419,31 +390,25 @@ router.post('/disconnect', async (req, res) => {
|
|
|
419
390
|
token: token,
|
|
420
391
|
proxy_url: proxy_url,
|
|
421
392
|
}
|
|
422
|
-
if (log) {
|
|
423
|
-
console.log("Replacements: ", replacements);
|
|
424
|
-
}
|
|
425
|
-
|
|
426
393
|
var html = template(replacements);
|
|
427
394
|
res.send(html);
|
|
428
395
|
})
|
|
429
396
|
|
|
430
397
|
}).catch((err) => {
|
|
431
|
-
console.error("(
|
|
398
|
+
console.error("(whatsapp) error unsubscribe: ", err);
|
|
432
399
|
})
|
|
433
400
|
|
|
434
401
|
})
|
|
435
402
|
|
|
436
403
|
router.post('/tiledesk', async (req, res) => {
|
|
437
|
-
console.log("\n/tiledesk")
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
404
|
+
console.log("\n(whatsapp) /tiledesk")
|
|
405
|
+
if (log) {
|
|
406
|
+
console.log("(whatsapp) /tiledesk ---> tiledeskChannelMessage: " + JSON.stringify(req.body.payload));
|
|
407
|
+
}
|
|
441
408
|
|
|
442
409
|
var tiledeskChannelMessage = req.body.payload;
|
|
443
|
-
|
|
444
|
-
|
|
410
|
+
|
|
445
411
|
var projectId = req.body.payload.id_project;
|
|
446
|
-
console.log("(TILEDESK) PROJECT ID: ", projectId);
|
|
447
412
|
|
|
448
413
|
// get settings from mongo
|
|
449
414
|
let CONTENT_KEY = "whatsapp-" + projectId;
|
|
@@ -451,21 +416,22 @@ router.post('/tiledesk', async (req, res) => {
|
|
|
451
416
|
let wab_token = settings.wab_token;
|
|
452
417
|
|
|
453
418
|
var text = req.body.payload.text;
|
|
454
|
-
|
|
419
|
+
if (log) {
|
|
420
|
+
console.log("(whatsapp) /tiledesk text: ", text);
|
|
421
|
+
}
|
|
455
422
|
|
|
456
423
|
let attributes = req.body.payload.attributes;
|
|
457
|
-
console.log("(TILEDESK) ATTRIBUTES: ", JSON.stringify(attributes, null, 2))
|
|
458
424
|
if (log) {
|
|
425
|
+
console.log("(whatsapp) /tiledesk attributes: ", JSON.stringify(attributes))
|
|
459
426
|
}
|
|
460
427
|
|
|
461
428
|
let commands;
|
|
462
429
|
if (attributes && attributes.commands) {
|
|
463
430
|
commands = attributes.commands;
|
|
464
|
-
console.log("commands: ", JSON.stringify(commands, null, 2));
|
|
465
431
|
}
|
|
466
432
|
|
|
467
433
|
var sender_id = req.body.payload.sender;
|
|
468
|
-
console.log("(
|
|
434
|
+
console.log("(whatsapp) /tiledesk sender_id: ", sender_id);
|
|
469
435
|
|
|
470
436
|
if (sender_id.indexOf("wab") > -1) {
|
|
471
437
|
console.log("Skip same sender");
|
|
@@ -473,69 +439,58 @@ router.post('/tiledesk', async (req, res) => {
|
|
|
473
439
|
}
|
|
474
440
|
|
|
475
441
|
if (attributes && attributes.subtype === "info") {
|
|
476
|
-
console.log("(
|
|
442
|
+
console.log("(whatsapp) /tiledesk Skip subtype (info)");
|
|
477
443
|
return res.send(200);
|
|
478
444
|
}
|
|
479
445
|
|
|
480
446
|
if (attributes && attributes.subtype === 'info/support') {
|
|
481
|
-
console.log("Skip subtype: ", attributes.subtype);
|
|
447
|
+
console.log("(whatsapp) /tiledesk Skip subtype: ", attributes.subtype);
|
|
482
448
|
return res.send(200);
|
|
483
449
|
}
|
|
484
450
|
|
|
485
|
-
// Redirect for testing bots
|
|
486
|
-
//if (text.startsWith("#td")) {
|
|
487
|
-
// return res.redirect('/testitout');
|
|
488
|
-
//}
|
|
489
|
-
|
|
490
|
-
//console.log("/tiledesk ---> tiledeskChannelMessage: " + JSON.stringify(req.body.payload));
|
|
491
|
-
|
|
492
451
|
let recipient_id = tiledeskChannelMessage.recipient;
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
452
|
+
if (log) {
|
|
453
|
+
console.log("(whatsapp) /tiledesk Recipient_id: ", recipient_id);
|
|
454
|
+
}
|
|
496
455
|
|
|
497
456
|
let whatsapp_receiver = recipient_id.substring(recipient_id.lastIndexOf("-") + 1);
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
457
|
+
if (log) {
|
|
458
|
+
console.log("(whatsapp) /tiledesk whatsapp_receiver: ", whatsapp_receiver);
|
|
459
|
+
}
|
|
501
460
|
|
|
502
461
|
let phone_number_id = recipient_id.substring(recipient_id.lastIndexOf("wab-") + 4, recipient_id.lastIndexOf("-"));
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
462
|
+
if (log) {
|
|
463
|
+
console.log("(Tiledesk) phone_number_id: ", phone_number_id)
|
|
464
|
+
}
|
|
506
465
|
|
|
507
466
|
const messageHandler = new MessageHandler({ tiledeskChannelMessage: tiledeskChannelMessage });
|
|
508
467
|
const tlr = new TiledeskWhatsappTranslator();
|
|
509
468
|
|
|
510
469
|
if (commands) {
|
|
511
|
-
const that = this;
|
|
512
470
|
let i = 0;
|
|
513
471
|
async function execute(command) {
|
|
514
472
|
// message
|
|
515
|
-
console.log/("----> next command: ", command);
|
|
516
473
|
if (command.type === "message") {
|
|
517
474
|
let tiledeskCommandMessage = await messageHandler.generateMessageObject(command);
|
|
518
|
-
console.log("message generated
|
|
475
|
+
console.log("(whatsapp) message generated\ntiledeskCommandMessage: ", JSON.stringify(tiledeskCommandMessage))
|
|
519
476
|
|
|
520
477
|
let whatsappJsonMessage = await tlr.toWhatsapp(tiledeskCommandMessage, whatsapp_receiver);
|
|
521
|
-
console.log(
|
|
478
|
+
console.log("🟢 whatsappJsonMessage", JSON.stringify(whatsappJsonMessage))
|
|
522
479
|
|
|
523
|
-
|
|
524
480
|
if (whatsappJsonMessage) {
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
//console.log("Send message response: ", response.status, response.statusText);
|
|
481
|
+
const twClient = new TiledeskWhatsapp({ token: settings.wab_token, GRAPH_URL: GRAPH_URL });
|
|
482
|
+
twClient.sendMessage(phone_number_id, whatsappJsonMessage).then((response) => {
|
|
528
483
|
i += 1;
|
|
529
484
|
if (i < commands.length) {
|
|
530
485
|
execute(commands[i]);
|
|
531
486
|
} else {
|
|
532
|
-
console.log("End of commands")
|
|
487
|
+
console.log("(whatsapp) End of commands")
|
|
533
488
|
}
|
|
534
489
|
}).catch((err) => {
|
|
535
|
-
console.error("
|
|
490
|
+
console.error("(whatsapp) error send message: ", err);
|
|
536
491
|
})
|
|
537
492
|
} else {
|
|
538
|
-
console.error("Whatsapp Json Message is undefined!")
|
|
493
|
+
console.error("(whatsapp) Whatsapp Json Message is undefined!")
|
|
539
494
|
}
|
|
540
495
|
|
|
541
496
|
}
|
|
@@ -543,12 +498,11 @@ router.post('/tiledesk', async (req, res) => {
|
|
|
543
498
|
//wait
|
|
544
499
|
if (command.type === "wait") {
|
|
545
500
|
setTimeout(() => {
|
|
546
|
-
console.log("wait for " + command.time + " s")
|
|
547
501
|
i += 1;
|
|
548
502
|
if (i < commands.length) {
|
|
549
503
|
execute(commands[i]);
|
|
550
504
|
} else {
|
|
551
|
-
console.log("End of commands")
|
|
505
|
+
console.log("(whatsapp) End of commands")
|
|
552
506
|
}
|
|
553
507
|
}, command.time)
|
|
554
508
|
}
|
|
@@ -556,106 +510,28 @@ router.post('/tiledesk', async (req, res) => {
|
|
|
556
510
|
execute(commands[0]);
|
|
557
511
|
}
|
|
558
512
|
|
|
559
|
-
else if (tiledeskChannelMessage.text) {
|
|
560
|
-
|
|
561
|
-
console.log("tiledeskChannelMessage.text: ", tiledeskChannelMessage.text)
|
|
513
|
+
else if (tiledeskChannelMessage.text || tiledeskChannelMessage.metadata) {
|
|
562
514
|
|
|
563
515
|
let whatsappJsonMessage = await tlr.toWhatsapp(tiledeskChannelMessage, whatsapp_receiver);
|
|
564
|
-
console.log(
|
|
565
|
-
//console.log("whatsappJsonMessage: ", whatsappJsonMessage);
|
|
516
|
+
console.log("🟢 whatsappJsonMessage", JSON.stringify(whatsappJsonMessage))
|
|
566
517
|
|
|
567
518
|
if (whatsappJsonMessage) {
|
|
568
519
|
const twClient = new TiledeskWhatsapp({ token: settings.wab_token, GRAPH_URL: GRAPH_URL });
|
|
569
520
|
|
|
570
521
|
twClient.sendMessage(phone_number_id, whatsappJsonMessage).then((response) => {
|
|
571
|
-
console.log("Send message response: ", response.status, response.statusText);
|
|
522
|
+
console.log("(whatsapp) Send message response: ", response.status, response.statusText);
|
|
572
523
|
}).catch((err) => {
|
|
573
|
-
console.error("
|
|
524
|
+
console.error("(whatsapp) error send message: ", err);
|
|
574
525
|
})
|
|
575
526
|
|
|
576
|
-
/*
|
|
577
|
-
sendMessage(phone_number_id, whatsappJsonMessage, wab_token).then((response) => {
|
|
578
|
-
console.log("sendMessage() response: ", response);
|
|
579
|
-
}).catch((err) => {
|
|
580
|
-
console.log("ERROR sendMessage(): ", err);
|
|
581
|
-
})
|
|
582
|
-
*/
|
|
583
527
|
} else {
|
|
584
|
-
console.error("Whatsapp Json Message is undefined!")
|
|
528
|
+
console.error("(whatsapp) Whatsapp Json Message is undefined!")
|
|
585
529
|
}
|
|
586
530
|
|
|
587
531
|
} else {
|
|
588
|
-
console.log("no command, no text --> skip")
|
|
532
|
+
console.log("(whatsapp) no command, no text --> skip")
|
|
589
533
|
}
|
|
590
534
|
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
/*
|
|
595
|
-
if (commands) {
|
|
596
|
-
commands.forEach( async (command) => {
|
|
597
|
-
console.log("\ncommand: ", command);
|
|
598
|
-
if (command.type === "message") {
|
|
599
|
-
let tiledeskCommandMessage = await messageHandler.generateMessageObject(command);
|
|
600
|
-
console.log("message generated!\ntiledeskCommandMessage: ", tiledeskCommandMessage)
|
|
601
|
-
|
|
602
|
-
let whatsappJsonMessage = await tlr.toWhatsapp(tiledeskCommandMessage, whatsapp_receiver);
|
|
603
|
-
console.log('\x1b[34m%s\x1b[0m', 'whatsappJsonMessage', whatsappJsonMessage)
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
if (whatsappJsonMessage) {
|
|
607
|
-
const twClient = new TiledeskWhatsapp({ token: settings.wab_token, GRAPH_URL: GRAPH_URL });
|
|
608
|
-
twClient.sendMessage(phone_number_id, whatsappJsonMessage).then((response) => {
|
|
609
|
-
console.log("Send message response: ", response.status, response.statusText);
|
|
610
|
-
}).catch((err) => {
|
|
611
|
-
console.error("ERROR Send message: ", err);
|
|
612
|
-
})
|
|
613
|
-
} else {
|
|
614
|
-
console.error("Whatsapp Json Message is undefined!")
|
|
615
|
-
}
|
|
616
|
-
|
|
617
|
-
}
|
|
618
|
-
if (command.type === "wait") {
|
|
619
|
-
setTimeout(() => {
|
|
620
|
-
console.log("wait for " + command.time + " s")
|
|
621
|
-
console.log("Next command")
|
|
622
|
-
}, command.time)
|
|
623
|
-
}
|
|
624
|
-
})
|
|
625
|
-
}
|
|
626
|
-
*/
|
|
627
|
-
//new_tiledesk_message = addCommandmessage(commands[0]);
|
|
628
|
-
|
|
629
|
-
/*
|
|
630
|
-
let whatsappJsonMessage = await tlr.toWhatsapp(tiledeskChannelMessage, whatsapp_receiver);
|
|
631
|
-
console.log('\x1b[34m%s\x1b[0m', 'whatsappJsonMessage', whatsappJsonMessage)
|
|
632
|
-
//console.log("whatsappJsonMessage: ", whatsappJsonMessage);
|
|
633
|
-
|
|
634
|
-
if (whatsappJsonMessage) {
|
|
635
|
-
const twClient = new TiledeskWhatsapp({ token: settings.wab_token, GRAPH_URL: GRAPH_URL });
|
|
636
|
-
|
|
637
|
-
twClient.sendMessage(phone_number_id, whatsappJsonMessage).then((response) => {
|
|
638
|
-
console.log("Send message response: ", response.status, response.statusText);
|
|
639
|
-
}).catch((err) => {
|
|
640
|
-
console.error("ERROR Send message: ", err);
|
|
641
|
-
})
|
|
642
|
-
|
|
643
|
-
/*
|
|
644
|
-
sendMessage(phone_number_id, whatsappJsonMessage, wab_token).then((response) => {
|
|
645
|
-
console.log("sendMessage() response: ", response);
|
|
646
|
-
}).catch((err) => {
|
|
647
|
-
console.log("ERROR sendMessage(): ", err);
|
|
648
|
-
})
|
|
649
|
-
*/
|
|
650
|
-
|
|
651
|
-
/*
|
|
652
|
-
} else {
|
|
653
|
-
console.error("Whatsapp Json Message is undefined!")
|
|
654
|
-
}
|
|
655
|
-
*/
|
|
656
|
-
// richiamo toWhatsapp;
|
|
657
|
-
// sendMessage
|
|
658
|
-
//callSendAPI(project_id, phone_number_id, to, payload);
|
|
659
535
|
return res.send(200);
|
|
660
536
|
})
|
|
661
537
|
|
|
@@ -664,12 +540,11 @@ router.post('/tiledesk', async (req, res) => {
|
|
|
664
540
|
router.post("/webhook/:project_id", async (req, res) => {
|
|
665
541
|
|
|
666
542
|
// Parse the request body from the POST
|
|
667
|
-
let body = req.body;
|
|
668
543
|
let projectId = req.params.project_id;
|
|
544
|
+
//console.log("/webhook req.body: ", JSON.stringify(req.body, null, 2))
|
|
669
545
|
|
|
670
546
|
// Check the Incoming webhook message
|
|
671
547
|
// console.log("\n***Body: ", JSON.stringify(req.body, null, 2));
|
|
672
|
-
|
|
673
548
|
// info on WhatsApp text message payload: https://developers.facebook.com/docs/whatsapp/cloud-api/webhooks/payload-examples#text-messages
|
|
674
549
|
if (req.body.object) {
|
|
675
550
|
if (
|
|
@@ -680,135 +555,142 @@ router.post("/webhook/:project_id", async (req, res) => {
|
|
|
680
555
|
req.body.entry[0].changes[0].value.messages[0]
|
|
681
556
|
) {
|
|
682
557
|
|
|
683
|
-
console.log("\n
|
|
558
|
+
console.log("\n(whatsapp) /whatsapp Body: ", JSON.stringify(req.body));
|
|
684
559
|
|
|
685
560
|
if (req.body.entry[0].changes[0].value.messages[0].type == "system") {
|
|
686
|
-
console.log("Skip system message")
|
|
561
|
+
console.log("(whatsapp) Skip system message")
|
|
687
562
|
return res.sendStatus(200);
|
|
688
563
|
}
|
|
689
564
|
|
|
690
|
-
//let originalWhatsappMessage = req.body;
|
|
691
565
|
let whatsappChannelMessage = req.body.entry[0].changes[0].value.messages[0];
|
|
692
566
|
|
|
693
|
-
if (whatsappChannelMessage.text && whatsappChannelMessage.text.body.startsWith("#td")) {
|
|
694
|
-
return res.redirect(307, '/testitout/' + projectId);
|
|
695
|
-
}
|
|
696
|
-
|
|
697
|
-
let firstname = req.body.entry[0].changes[0].value.contacts[0].profile.name;
|
|
698
|
-
console.log("(WAB) firstname: ", firstname)
|
|
699
|
-
|
|
700
|
-
let message_info = {
|
|
701
|
-
channel: "whatsapp",
|
|
702
|
-
whatsapp: {
|
|
703
|
-
phone_number_id: req.body.entry[0].changes[0].value.metadata.phone_number_id,
|
|
704
|
-
from: req.body.entry[0].changes[0].value.messages[0].from,
|
|
705
|
-
firstname: req.body.entry[0].changes[0].value.contacts[0].profile.name,
|
|
706
|
-
lastname: " "
|
|
707
|
-
}
|
|
708
|
-
}
|
|
709
|
-
|
|
710
567
|
let CONTENT_KEY = "whatsapp-" + projectId;
|
|
711
|
-
|
|
712
568
|
let settings = await db.get(CONTENT_KEY);
|
|
713
569
|
if (log) {
|
|
714
|
-
console.log("
|
|
570
|
+
console.log("(whatsapp) kvdb settings: ", settings);
|
|
715
571
|
}
|
|
716
|
-
|
|
717
572
|
if (!settings) {
|
|
718
|
-
console.log("No settings found. Exit..");
|
|
719
|
-
res.sendStatus(200);
|
|
720
|
-
return;
|
|
573
|
+
console.log("(whatsapp) No settings found. Exit..");
|
|
574
|
+
return res.sendStatus(200);
|
|
721
575
|
}
|
|
722
576
|
|
|
723
|
-
let tiledeskJsonMessage;
|
|
724
|
-
|
|
725
577
|
const tlr = new TiledeskWhatsappTranslator();
|
|
578
|
+
const tdChannel = new TiledeskChannel({ settings: settings, API_URL: API_URL })
|
|
726
579
|
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
tiledeskJsonMessage = tlr.toTiledesk(whatsappChannelMessage, firstname);
|
|
730
|
-
|
|
731
|
-
}
|
|
732
|
-
else if (whatsappChannelMessage.type == 'interactive') {
|
|
733
|
-
console.log("message type interactive")
|
|
734
|
-
tiledeskJsonMessage = tlr.toTiledesk(whatsappChannelMessage, firstname);
|
|
735
|
-
}
|
|
736
|
-
else if ((whatsappChannelMessage.type == 'image') || (whatsappChannelMessage.type == 'video') || (whatsappChannelMessage.type == 'document')) {
|
|
737
|
-
let media;
|
|
738
|
-
const util = new TiledeskWhatsapp({ token: settings.wab_token, GRAPH_URL: GRAPH_URL })
|
|
739
|
-
|
|
740
|
-
if (whatsappChannelMessage.type == 'image') {
|
|
741
|
-
media = whatsappChannelMessage.image;
|
|
742
|
-
console.log("media_id: ", media.id);
|
|
743
|
-
|
|
744
|
-
const filename = await util.downloadMedia(media.id);
|
|
745
|
-
console.log("File position: ", filename);
|
|
746
|
-
if (!filename) {
|
|
747
|
-
console.log("Unable to download media. Message not sent.");
|
|
748
|
-
return res.status(500).send({ success: false, error: "unable to download media" })
|
|
749
|
-
}
|
|
750
|
-
let file_path = path.join(__dirname, 'tmp', filename);
|
|
580
|
+
// Initialize conversation with chatbot
|
|
581
|
+
if (whatsappChannelMessage.text && whatsappChannelMessage.text.body.startsWith("#td")) {
|
|
751
582
|
|
|
752
|
-
|
|
753
|
-
|
|
583
|
+
console.log("\nwhatsappChannelMessage.text.body: ", whatsappChannelMessage.text.body)
|
|
584
|
+
let code = whatsappChannelMessage.text.body.split(' ')[0];
|
|
585
|
+
console.log("code: ", code)
|
|
754
586
|
|
|
755
|
-
|
|
587
|
+
const bottester = new TiledeskBotTester({project_id: projectId, redis_client: redis_client, db: db, tdChannel: tdChannel, tlr: tlr});
|
|
588
|
+
bottester.startBotConversation(req.body, code).then((result) => {
|
|
589
|
+
console.log("(whatsapp) startBotConversation result: ", result);
|
|
590
|
+
}).catch((err) => {
|
|
591
|
+
console.log("(whatsapp) startBotConversation result: ", err);
|
|
592
|
+
})
|
|
756
593
|
|
|
594
|
+
// Standard message
|
|
595
|
+
} else {
|
|
596
|
+
|
|
597
|
+
let firstname = req.body.entry[0].changes[0].value.contacts[0].profile.name;
|
|
598
|
+
if (log) {
|
|
599
|
+
console.log("(whatsapp) /whatsapp firstname: ", firstname)
|
|
757
600
|
}
|
|
758
601
|
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
return res.status(500).send({ success: false, error: "unable to download media" })
|
|
602
|
+
let message_info = {
|
|
603
|
+
channel: "whatsapp",
|
|
604
|
+
whatsapp: {
|
|
605
|
+
phone_number_id: req.body.entry[0].changes[0].value.metadata.phone_number_id,
|
|
606
|
+
from: req.body.entry[0].changes[0].value.messages[0].from,
|
|
607
|
+
firstname: req.body.entry[0].changes[0].value.contacts[0].profile.name,
|
|
608
|
+
lastname: " "
|
|
767
609
|
}
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
tiledeskJsonMessage = tlr.toTiledesk(whatsappChannelMessage, firstname
|
|
610
|
+
}
|
|
611
|
+
|
|
612
|
+
let tiledeskJsonMessage;
|
|
613
|
+
|
|
614
|
+
if ((whatsappChannelMessage.type == 'text')) {
|
|
615
|
+
console.log("(whatsapp) /whatsapp message type text")
|
|
616
|
+
tiledeskJsonMessage = tlr.toTiledesk(whatsappChannelMessage, firstname);
|
|
617
|
+
|
|
618
|
+
}
|
|
619
|
+
else if (whatsappChannelMessage.type == 'interactive') {
|
|
620
|
+
console.log("(whatsapp) /whatsapp message type interactive")
|
|
621
|
+
tiledeskJsonMessage = tlr.toTiledesk(whatsappChannelMessage, firstname);
|
|
775
622
|
}
|
|
776
623
|
|
|
777
|
-
if (whatsappChannelMessage.type == 'document') {
|
|
778
|
-
media
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
console.log("
|
|
784
|
-
|
|
624
|
+
else if ((whatsappChannelMessage.type == 'image') || (whatsappChannelMessage.type == 'video') || (whatsappChannelMessage.type == 'document')) {
|
|
625
|
+
let media;
|
|
626
|
+
const util = new TiledeskWhatsapp({ token: settings.wab_token, GRAPH_URL: GRAPH_URL })
|
|
627
|
+
|
|
628
|
+
if (whatsappChannelMessage.type == 'image') {
|
|
629
|
+
media = whatsappChannelMessage.image;
|
|
630
|
+
console.log("(whatsapp) /whatsapp media_id: ", media.id);
|
|
631
|
+
|
|
632
|
+
const filename = await util.downloadMedia(media.id);
|
|
633
|
+
if (!filename) {
|
|
634
|
+
console.log("(whatsapp) /whatsapp Unable to download media. Message not sent.");
|
|
635
|
+
return res.status(500).send({ success: false, error: "unable to download media" })
|
|
636
|
+
}
|
|
637
|
+
let file_path = path.join(__dirname, 'tmp', filename);
|
|
638
|
+
|
|
639
|
+
const image_url = await util.uploadMedia(file_path, "images");
|
|
640
|
+
console.log("(whatsapp) /whatsapp image_url: ", image_url)
|
|
641
|
+
|
|
642
|
+
tiledeskJsonMessage = tlr.toTiledesk(whatsappChannelMessage, firstname, image_url);
|
|
785
643
|
}
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
644
|
+
|
|
645
|
+
if (whatsappChannelMessage.type == 'video') {
|
|
646
|
+
media = whatsappChannelMessage.video;
|
|
647
|
+
|
|
648
|
+
const filename = await util.downloadMedia(media.id);
|
|
649
|
+
if (!filename) {
|
|
650
|
+
console.log("(whatsapp) /whatsapp Unable to download media. Message not sent.");
|
|
651
|
+
return res.status(500).send({ success: false, error: "unable to download media" })
|
|
652
|
+
}
|
|
653
|
+
let file_path = path.join(__dirname, 'tmp', filename);
|
|
654
|
+
|
|
655
|
+
|
|
656
|
+
const media_url = await util.uploadMedia(file_path, "files");
|
|
657
|
+
console.log("(whatsapp) /whatsapp media_url: ", media_url)
|
|
658
|
+
|
|
659
|
+
tiledeskJsonMessage = tlr.toTiledesk(whatsappChannelMessage, firstname, media_url);
|
|
660
|
+
}
|
|
661
|
+
|
|
662
|
+
if (whatsappChannelMessage.type == 'document') {
|
|
663
|
+
media = whatsappChannelMessage.document;
|
|
664
|
+
|
|
665
|
+
const filename = await util.downloadMedia(media.id);
|
|
666
|
+
if (!filename) {
|
|
667
|
+
console.log("(whatsapp) /whatsapp Unable to download media. Message not sent.");
|
|
668
|
+
return res.status(500).send({ success: false, error: "unable to download media" })
|
|
669
|
+
}
|
|
670
|
+
let file_path = path.join(__dirname, 'tmp', filename);
|
|
671
|
+
|
|
672
|
+
const media_url = await util.uploadMedia(file_path, "files");
|
|
673
|
+
console.log("(whatsapp) /whatsapp media_url: ", media_url)
|
|
674
|
+
|
|
675
|
+
tiledeskJsonMessage = tlr.toTiledesk(whatsappChannelMessage, firstname, media_url);
|
|
676
|
+
}
|
|
677
|
+
|
|
678
|
+
} else {
|
|
679
|
+
// unsupported. Try anyway to send something.
|
|
792
680
|
}
|
|
793
681
|
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
// tdClient.signInWithCustomToken
|
|
801
|
-
// tdClient.getRequests
|
|
802
|
-
const tdChannel = new TiledeskChannel({ settings: settings, API_URL: API_URL })
|
|
803
|
-
const response = await tdChannel.send(tiledeskJsonMessage, message_info);
|
|
804
|
-
if (log) {
|
|
805
|
-
console.log("Send response: ", response)
|
|
682
|
+
console.log("🟠 tiledeskJsonMessage: ", JSON.stringify(tiledeskJsonMessage));
|
|
683
|
+
const response = await tdChannel.send(tiledeskJsonMessage, message_info);
|
|
684
|
+
if (log) {
|
|
685
|
+
console.log("(whatsapp) /whatsapp Send response: ", response)
|
|
686
|
+
}
|
|
687
|
+
|
|
806
688
|
}
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
res.sendStatus(200);
|
|
689
|
+
}
|
|
690
|
+
res.sendStatus(200);
|
|
810
691
|
} else {
|
|
811
692
|
// Return a '404 Not Found' if event is not from a WhatsApp API
|
|
693
|
+
console.log("event not from whatsapp")
|
|
812
694
|
res.sendStatus(404);
|
|
813
695
|
}
|
|
814
696
|
});
|
|
@@ -820,33 +702,28 @@ router.get("/webhook/:project_id", async (req, res) => {
|
|
|
820
702
|
* UPDATE YOUR VERIFY TOKEN
|
|
821
703
|
*This will be the Verify Token value when you set up webhook
|
|
822
704
|
**/
|
|
823
|
-
console.log("\
|
|
824
|
-
console.log("
|
|
705
|
+
console.log("\n(whatsapp) Verify the webhook... ");
|
|
706
|
+
console.log("(whatsapp) req.query: ", req.query);
|
|
825
707
|
|
|
826
708
|
// Parse params from the webhook verification request
|
|
827
709
|
let mode = req.query["hub.mode"];
|
|
828
710
|
let token = req.query["hub.verify_token"];
|
|
829
711
|
let challenge = req.query["hub.challenge"];
|
|
830
712
|
|
|
831
|
-
console.log("**********")
|
|
832
|
-
console.log("mode: ", mode)
|
|
833
|
-
console.log("token: ", token)
|
|
834
|
-
console.log("challenge: ", challenge)
|
|
835
|
-
console.log("**********")
|
|
836
|
-
|
|
837
713
|
let CONTENT_KEY = "whatsapp-" + req.params.project_id;
|
|
838
|
-
console.log("\CONTENT_KEY: ", CONTENT_KEY);
|
|
839
714
|
|
|
840
715
|
let settings = await db.get(CONTENT_KEY);
|
|
841
716
|
|
|
842
717
|
if (!settings || !settings.verify_token) {
|
|
843
|
-
console.error("No settings found! Unable to verify token.")
|
|
718
|
+
console.error("(whatsapp) No settings found! Unable to verify token.")
|
|
844
719
|
res.sendStatus(403);
|
|
845
720
|
} else {
|
|
846
721
|
let VERIFY_TOKEN = settings.verify_token;
|
|
847
722
|
|
|
848
|
-
|
|
849
|
-
|
|
723
|
+
if (log) {
|
|
724
|
+
console.log("token: ", token);
|
|
725
|
+
console.log("verify token: ", VERIFY_TOKEN);
|
|
726
|
+
}
|
|
850
727
|
|
|
851
728
|
// Check if a token and mode were sent
|
|
852
729
|
if (mode && token) {
|
|
@@ -854,15 +731,15 @@ router.get("/webhook/:project_id", async (req, res) => {
|
|
|
854
731
|
if (mode === "subscribe" && token === VERIFY_TOKEN) {
|
|
855
732
|
|
|
856
733
|
// Respond with 200 OK and challenge token from the request
|
|
857
|
-
console.log("WEBHOOK_VERIFIED");
|
|
734
|
+
console.log("(whatsapp) WEBHOOK_VERIFIED");
|
|
858
735
|
res.status(200).send(challenge);
|
|
859
736
|
} else {
|
|
860
737
|
// Responds with '403 Forbidden' if verify tokens do not match
|
|
861
|
-
console.error("mode is not 'subscribe' or token do not match");
|
|
738
|
+
console.error("(whatsapp) mode is not 'subscribe' or token do not match");
|
|
862
739
|
res.sendStatus(403);
|
|
863
740
|
}
|
|
864
741
|
} else {
|
|
865
|
-
console.error("mode or token undefined");
|
|
742
|
+
console.error("(whatsapp) mode or token undefined");
|
|
866
743
|
res.status(400).send("impossible to verify the webhook: mode or token undefined.")
|
|
867
744
|
}
|
|
868
745
|
|
|
@@ -870,24 +747,10 @@ router.get("/webhook/:project_id", async (req, res) => {
|
|
|
870
747
|
|
|
871
748
|
});
|
|
872
749
|
|
|
873
|
-
function getRandomName() {
|
|
874
|
-
|
|
875
|
-
let hexString = uuidv4();
|
|
876
|
-
console.log("hex: ", hexString);
|
|
877
|
-
|
|
878
|
-
// remove decoration
|
|
879
|
-
hexString = hexString.replace(/-/g, '');
|
|
880
|
-
|
|
881
|
-
let base64String = Buffer.from(hexString, 'hex').toString('base64')
|
|
882
|
-
console.log("base64: ", base64String);
|
|
883
|
-
|
|
884
|
-
return base64String;
|
|
885
|
-
}
|
|
886
|
-
|
|
887
750
|
|
|
888
751
|
router.post("/newtest", async (req, res) => {
|
|
889
|
-
|
|
890
|
-
console.log("/newtest body: ", JSON.stringify(req.body
|
|
752
|
+
|
|
753
|
+
console.log("(whatsapp) /newtest body: ", JSON.stringify(req.body));
|
|
891
754
|
let project_id = req.body.project_id;
|
|
892
755
|
let bot_id = req.body.bot_id;
|
|
893
756
|
|
|
@@ -896,7 +759,6 @@ router.post("/newtest", async (req, res) => {
|
|
|
896
759
|
bot_id: bot_id
|
|
897
760
|
}
|
|
898
761
|
|
|
899
|
-
//let short_uid = getRandomName();
|
|
900
762
|
let short_uid = uuidv4().substring(0, 8)
|
|
901
763
|
let key = "bottest:" + short_uid;
|
|
902
764
|
|
|
@@ -904,96 +766,19 @@ router.post("/newtest", async (req, res) => {
|
|
|
904
766
|
return res.status(500).send({ message: "Test it out on Whatsapp not available. Redis not ready."})
|
|
905
767
|
}
|
|
906
768
|
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
await redis_client.set(key, JSON.stringify(info));
|
|
910
|
-
//const value = await redis_client.get(key)
|
|
911
|
-
//console.log("get --> value: ", value)
|
|
769
|
+
await redis_client.set(key, JSON.stringify(info), 'EX', 604800);
|
|
912
770
|
redis_client.get(key, (err, value) => {
|
|
913
771
|
if (err) {
|
|
914
|
-
console.log("get err: ", err)
|
|
915
|
-
return res.status(500).send({success: "false", message: "
|
|
772
|
+
console.log("(whatsapp) redis get err: ", err)
|
|
773
|
+
return res.status(500).send({success: "false", message: "Testing info could not be saved"});
|
|
916
774
|
} else {
|
|
917
|
-
console.log("get value: ", value)
|
|
775
|
+
console.log("redis get value: ", value)
|
|
918
776
|
return res.status(200).send({short_uid: short_uid});
|
|
919
777
|
}
|
|
920
778
|
})
|
|
921
|
-
/*
|
|
922
|
-
const value = await redis_client.json.get(key, {
|
|
923
|
-
// JSON Path: .node = the element called 'node' at root level.
|
|
924
|
-
path: '.nodell',
|
|
925
|
-
});
|
|
926
|
-
*/
|
|
927
|
-
//res.status(200).send({short_uid: short_uid});
|
|
928
|
-
})
|
|
929
|
-
|
|
930
|
-
router.post("/testitout/:project_id", async (req, res) => {
|
|
931
|
-
|
|
932
|
-
//console.log("\n/(testitout): ", JSON.stringify(req.body, null, 2));
|
|
933
|
-
console.log("\n/(testitout)");
|
|
934
|
-
let projectId = req.params.project_id;
|
|
935
|
-
console.log("(testitout) projectId: ", projectId)
|
|
936
779
|
|
|
937
|
-
let whatsappChannelMessage = req.body.entry[0].changes[0].value.messages[0];
|
|
938
|
-
console.log("(testitout) whatsappChannelMessage: ", whatsappChannelMessage);
|
|
939
|
-
|
|
940
|
-
let whatsappContact = req.body.entry[0].changes[0].value.contacts[0];
|
|
941
|
-
|
|
942
|
-
let key = "bottest:" + whatsappChannelMessage.text.body.substring(3);
|
|
943
|
-
console.log("(testitout) key: ", key);
|
|
944
|
-
|
|
945
|
-
/*
|
|
946
|
-
const info = await redis_client.json.get(REDIS_KEY);
|
|
947
|
-
console.log("(testitout) info: ", info);
|
|
948
|
-
*/
|
|
949
|
-
let test_info;
|
|
950
|
-
redis_client.get(key, (err, value) => {
|
|
951
|
-
if (err) {
|
|
952
|
-
console.log("No info found on redis. Exit..");
|
|
953
|
-
res.sendStatus(200);
|
|
954
|
-
} else {
|
|
955
|
-
test_info = JSON.parse(value)
|
|
956
|
-
console.log("test_info: ", test_info)
|
|
957
|
-
}
|
|
958
|
-
})
|
|
959
|
-
|
|
960
|
-
let message_info = {
|
|
961
|
-
channel: "whatsapp",
|
|
962
|
-
whatsapp: {
|
|
963
|
-
phone_number_id: req.body.entry[0].changes[0].value.metadata.phone_number_id,
|
|
964
|
-
from: whatsappChannelMessage.from,
|
|
965
|
-
firstname: whatsappContact.profile.name,
|
|
966
|
-
lastname: " "
|
|
967
|
-
}
|
|
968
|
-
}
|
|
969
|
-
console.log("(testitout) message_info: ", message_info)
|
|
970
|
-
|
|
971
|
-
let CONTENT_KEY = "whatsapp-" + projectId;
|
|
972
|
-
let settings = await db.get(CONTENT_KEY);
|
|
973
|
-
if (log) {
|
|
974
|
-
console.log("[KVDB] settings: ", settings);
|
|
975
|
-
}
|
|
976
|
-
|
|
977
|
-
if (!settings) {
|
|
978
|
-
console.log("No settings found. Exit..");
|
|
979
|
-
res.sendStatus(200);
|
|
980
|
-
return;
|
|
981
|
-
}
|
|
982
|
-
|
|
983
|
-
const tlr = new TiledeskWhatsappTranslator();
|
|
984
|
-
|
|
985
|
-
whatsappChannelMessage.text.body = "/start";
|
|
986
|
-
let tiledeskJsonMessage = tlr.toTiledesk(whatsappChannelMessage, whatsappContact.profile.name);
|
|
987
|
-
console.log("(testitout) tiledeskJsonMessage: ", tiledeskJsonMessage)
|
|
988
|
-
|
|
989
|
-
const tdChannel = new TiledeskChannel({ settings: settings, API_URL: API_URL })
|
|
990
|
-
const response = await tdChannel.sendAndAddBot(tiledeskJsonMessage, message_info, test_info.bot_id)
|
|
991
|
-
console.log("testitout --> send response: ", response)
|
|
992
|
-
|
|
993
|
-
res.status(200).send("testitout")
|
|
994
780
|
})
|
|
995
781
|
|
|
996
|
-
|
|
997
782
|
// *****************************
|
|
998
783
|
// ********* FUNCTIONS *********
|
|
999
784
|
// *****************************
|
|
@@ -1042,17 +827,6 @@ async function startApp(settings, callback) {
|
|
|
1042
827
|
console.log("(whatsapp) Missing redis parameters --> Test it out on WhatsApp disabled");
|
|
1043
828
|
}
|
|
1044
829
|
|
|
1045
|
-
/*
|
|
1046
|
-
if (settings.REDIS_HOST && settings.REDIS_PORT && settings.REDIS_PASSWORD) {
|
|
1047
|
-
REDIS_HOST = settings.REDIS_HOST;
|
|
1048
|
-
REDIS_PORT = settings.REDIS_PORT;
|
|
1049
|
-
REDIS_PASSWORD = settings.REDIS_PASSWORD;
|
|
1050
|
-
connectRedis();
|
|
1051
|
-
} else {
|
|
1052
|
-
console.log("(whatsapp) Missing redis parameters --> Test it out on WhatsApp disabled");
|
|
1053
|
-
}
|
|
1054
|
-
*/
|
|
1055
|
-
|
|
1056
830
|
if (settings.log) {
|
|
1057
831
|
log = settings.log;
|
|
1058
832
|
}
|
|
@@ -1101,4 +875,78 @@ function readHTMLFile(templateName, callback) {
|
|
|
1101
875
|
})
|
|
1102
876
|
}
|
|
1103
877
|
|
|
1104
|
-
module.exports = { router: router, startApp: startApp };
|
|
878
|
+
module.exports = { router: router, startApp: startApp };
|
|
879
|
+
|
|
880
|
+
/*
|
|
881
|
+
router.post("/testitout/:project_id", async (req, res) => {
|
|
882
|
+
|
|
883
|
+
console.log("\n/(testitout)");
|
|
884
|
+
let projectId = req.params.project_id;
|
|
885
|
+
console.log("(testitout) projectId: ", projectId)
|
|
886
|
+
|
|
887
|
+
let whatsappChannelMessage = req.body.entry[0].changes[0].value.messages[0];
|
|
888
|
+
console.log("(testitout) whatsappChannelMessage: ", whatsappChannelMessage);
|
|
889
|
+
|
|
890
|
+
let whatsappContact = req.body.entry[0].changes[0].value.contacts[0];
|
|
891
|
+
|
|
892
|
+
let key = "bottest:" + whatsappChannelMessage.text.body.substring(3);
|
|
893
|
+
console.log("(testitout) key: ", key);
|
|
894
|
+
|
|
895
|
+
|
|
896
|
+
let test_info;
|
|
897
|
+
redis_client.get(key, (err, value) => {
|
|
898
|
+
if (err) {
|
|
899
|
+
console.log("An error occured on redis. Exit..");
|
|
900
|
+
return res.status(500).send({ success: false, error: err})
|
|
901
|
+
} else {
|
|
902
|
+
if (!value) {
|
|
903
|
+
console.log("No test info found on redis. Exit..");
|
|
904
|
+
return res.status(200).send({ success: false, message: "No test info found on redis"})
|
|
905
|
+
}
|
|
906
|
+
test_info = JSON.parse(value)
|
|
907
|
+
console.log("test_info: ", test_info)
|
|
908
|
+
}
|
|
909
|
+
})
|
|
910
|
+
|
|
911
|
+
let message_info = {
|
|
912
|
+
channel: "whatsapp",
|
|
913
|
+
whatsapp: {
|
|
914
|
+
phone_number_id: req.body.entry[0].changes[0].value.metadata.phone_number_id,
|
|
915
|
+
from: whatsappChannelMessage.from,
|
|
916
|
+
firstname: whatsappContact.profile.name,
|
|
917
|
+
lastname: " "
|
|
918
|
+
}
|
|
919
|
+
}
|
|
920
|
+
console.log("(testitout) message_info: ", message_info)
|
|
921
|
+
|
|
922
|
+
let CONTENT_KEY = "whatsapp-" + projectId;
|
|
923
|
+
let settings = await db.get(CONTENT_KEY);
|
|
924
|
+
if (log) {
|
|
925
|
+
console.log("[KVDB] settings: ", settings);
|
|
926
|
+
}
|
|
927
|
+
|
|
928
|
+
if (!settings) {
|
|
929
|
+
console.log("No settings found. Exit..");
|
|
930
|
+
res.sendStatus(200);
|
|
931
|
+
return;
|
|
932
|
+
}
|
|
933
|
+
|
|
934
|
+
const tlr = new TiledeskWhatsappTranslator();
|
|
935
|
+
|
|
936
|
+
whatsappChannelMessage.text.body = "/start";
|
|
937
|
+
let tiledeskJsonMessage = tlr.toTiledesk(whatsappChannelMessage, whatsappContact.profile.name);
|
|
938
|
+
console.log("(testitout) tiledeskJsonMessage: ", tiledeskJsonMessage)
|
|
939
|
+
|
|
940
|
+
const tdChannel = new TiledeskChannel({ settings: settings, API_URL: API_URL })
|
|
941
|
+
|
|
942
|
+
if (test_info) {
|
|
943
|
+
const response = await tdChannel.sendAndAddBot(tiledeskJsonMessage, message_info, test_info.bot_id)
|
|
944
|
+
console.log("testitout --> send response: ", response)
|
|
945
|
+
res.status(200).send("testitout")
|
|
946
|
+
} else {
|
|
947
|
+
console.log("testitout --> no bot selected, skip test: ")
|
|
948
|
+
res.status(200).send("Test skipped")
|
|
949
|
+
}
|
|
950
|
+
|
|
951
|
+
})
|
|
952
|
+
*/
|
package/package.json
CHANGED
|
@@ -36,7 +36,7 @@ class MessageHandler {
|
|
|
36
36
|
|
|
37
37
|
async generateMessageObject(command) {
|
|
38
38
|
console.log("[MessageHandler] command: ", command);
|
|
39
|
-
console.log("[MessageHandler] tiledeskChannelMessage: ", this.tiledeskChannelMessage);
|
|
39
|
+
//console.log("[MessageHandler] tiledeskChannelMessage: ", this.tiledeskChannelMessage);
|
|
40
40
|
let tiledeskCommandMessage = command.message;
|
|
41
41
|
|
|
42
42
|
tiledeskCommandMessage.recipient = this.tiledeskChannelMessage.recipient;
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
const axios = require("axios").default;
|
|
2
|
+
const jwt = require('jsonwebtoken');
|
|
3
|
+
const { v4: uuidv4 } = require('uuid');
|
|
4
|
+
|
|
5
|
+
const { TiledeskClient } = require('@tiledesk/tiledesk-client');
|
|
6
|
+
const { TiledeskWhatsappTranslator } = require('./TiledeskWhatsappTranslator');
|
|
7
|
+
const { TiledeskChannel } = require('./TiledeskChannel');
|
|
8
|
+
|
|
9
|
+
class TiledeskBotTester {
|
|
10
|
+
|
|
11
|
+
constructor(config) {
|
|
12
|
+
if (!config) {
|
|
13
|
+
throw new Error('config is mandatory');
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
if (!config.project_id) {
|
|
17
|
+
throw new Error('config.project_id is mandatory');
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
if (!config.redis_client) {
|
|
21
|
+
throw new Error('config.redis_client is mandatory');
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
if (!config.db) {
|
|
25
|
+
throw new Error('config.db is mandatory');
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
if (!config.tdChannel) {
|
|
29
|
+
throw new Error('config.tdChannel is mandatory');
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
if (!config.tlr) {
|
|
33
|
+
throw new Error('config.tlr is mandatory');
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
this.log = false;
|
|
37
|
+
if (config.log) {
|
|
38
|
+
this.log = config.log;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
this.settings = config.settings;
|
|
42
|
+
this.project_id = config.project_id;
|
|
43
|
+
this.redis_client = config.redis_client;
|
|
44
|
+
this.db = config.db;
|
|
45
|
+
this.tdChannel = config.tdChannel;
|
|
46
|
+
this.tlr = config.tlr;
|
|
47
|
+
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
async startBotConversation(body, code) {
|
|
51
|
+
|
|
52
|
+
return new Promise( async (resolve, reject) => {
|
|
53
|
+
console.log("\n/startBotConversation()");
|
|
54
|
+
/*
|
|
55
|
+
let projectId = req.params.project_id;
|
|
56
|
+
console.log("(testitout) projectId: ", projectId)
|
|
57
|
+
*/
|
|
58
|
+
|
|
59
|
+
let whatsappChannelMessage = body.entry[0].changes[0].value.messages[0];
|
|
60
|
+
console.log("(testitout) whatsappChannelMessage: ", whatsappChannelMessage);
|
|
61
|
+
|
|
62
|
+
let whatsappContact = body.entry[0].changes[0].value.contacts[0];
|
|
63
|
+
|
|
64
|
+
let key = "bottest:" + code.substring(3);
|
|
65
|
+
console.log("(testitout) key: ", key);
|
|
66
|
+
|
|
67
|
+
let test_info;
|
|
68
|
+
|
|
69
|
+
this.redis_client.get(key, async (err, value) => {
|
|
70
|
+
if (err) {
|
|
71
|
+
console.log("An error occured on redis. Exit..");
|
|
72
|
+
return reject(err);
|
|
73
|
+
} else {
|
|
74
|
+
|
|
75
|
+
if (!value) {
|
|
76
|
+
console.log("No test info found on redis. Exit..");
|
|
77
|
+
reject("No test info found on redis");
|
|
78
|
+
return;
|
|
79
|
+
} else {
|
|
80
|
+
|
|
81
|
+
test_info = JSON.parse(value)
|
|
82
|
+
console.log("test_info: ", test_info)
|
|
83
|
+
|
|
84
|
+
let message_info = {
|
|
85
|
+
channel: "whatsapp",
|
|
86
|
+
whatsapp: {
|
|
87
|
+
phone_number_id: body.entry[0].changes[0].value.metadata.phone_number_id,
|
|
88
|
+
from: whatsappChannelMessage.from,
|
|
89
|
+
firstname: whatsappContact.profile.name,
|
|
90
|
+
lastname: " "
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
console.log("(testitout) message_info: ", message_info)
|
|
94
|
+
|
|
95
|
+
let CONTENT_KEY = "whatsapp-" + this.project_id;
|
|
96
|
+
let settings = await this.db.get(CONTENT_KEY);
|
|
97
|
+
if (this.log) {
|
|
98
|
+
console.log("[KVDB] settings: ", settings);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
if (!settings) {
|
|
102
|
+
console.log("No settings found. Exit..");
|
|
103
|
+
return reject("No settings found. Exit..")
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
whatsappChannelMessage.text.body = "/start";
|
|
107
|
+
let tiledeskJsonMessage = await this.tlr.toTiledesk(whatsappChannelMessage, whatsappContact.profile.name);
|
|
108
|
+
console.log("(testitout) tiledeskJsonMessage: ", tiledeskJsonMessage)
|
|
109
|
+
|
|
110
|
+
if (test_info) {
|
|
111
|
+
const response = await this.tdChannel.sendAndAddBot(tiledeskJsonMessage, message_info, test_info.bot_id)
|
|
112
|
+
console.log("testitout --> send response: ", response)
|
|
113
|
+
return resolve()
|
|
114
|
+
} else {
|
|
115
|
+
console.log("testitout --> no bot selected, skip test: ")
|
|
116
|
+
return reject("Test skipped")
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
}
|
|
129
|
+
})
|
|
130
|
+
|
|
131
|
+
})
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
module.exports = { TiledeskBotTester }
|
|
137
|
+
|