posiflow-telegram-connector 1.0.3

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 ADDED
@@ -0,0 +1,795 @@
1
+ "use strict";
2
+ const express = require("express");
3
+ const router = express.Router();
4
+ const bodyParser = require("body-parser");
5
+ const handlebars = require('handlebars');
6
+ const fs = require('fs');
7
+ const path = require('path');
8
+ const pjson = require('./package.json');
9
+ const winston = require('./winston');
10
+
11
+ // tiledesk clients
12
+ const { TiledeskSubscriptionClient } = require('./tiledesk/TiledeskSubscriptionClient');
13
+ const { TiledeskTelegram } = require('./tiledesk/TiledeskTelegram');
14
+ const { TiledeskTelegramTranslator } = require('./tiledesk/TiledeskTelegramTranslator');
15
+ const { TiledeskChannel } = require('./tiledesk/TiledeskChannel');
16
+ const { TiledeskAppsClient } = require('./tiledesk/TiledeskAppsClient');
17
+ const { MessageHandler } = require('./tiledesk/MessageHandler');
18
+
19
+ // mongo
20
+ const { KVBaseMongo } = require('./tiledesk/KVBaseMongo');
21
+ const kvbase_collection = 'kvstore';
22
+ const db = new KVBaseMongo({ KVBASE_COLLECTION: kvbase_collection, log: false });
23
+
24
+ router.use(bodyParser.json());
25
+ router.use(bodyParser.urlencoded({ extended: true }));
26
+ router.use(express.static(path.join(__dirname, 'template')));
27
+
28
+ var API_URL = null;
29
+ var TELEGRAM_API_URL = null;
30
+ var TELEGRAM_FILE_URL = null;
31
+ var BASE_URL = null;
32
+ var APPS_API_URL = null;
33
+ let BRAND_NAME = null;
34
+ var log = false;
35
+
36
+ // Handlebars register helpers
37
+ handlebars.registerHelper('isEqual', (a, b) => {
38
+ if (a == b) {
39
+ return true
40
+ } else {
41
+ return false
42
+ }
43
+ })
44
+
45
+ router.get('/', async (req, res) => {
46
+ res.send('Welcome on Tiledesk Telegram Connector!')
47
+ })
48
+
49
+ router.get('/detail', async (req, res) => {
50
+
51
+ winston.verbose("(tgm) /detail")
52
+ let projectId = req.query.project_id;
53
+ let token = req.query.token;
54
+ let app_id = req.query.app_id;
55
+
56
+ const appClient = new TiledeskAppsClient({ APPS_API_URL: APPS_API_URL });
57
+ let installation = await appClient.getInstallations(projectId, app_id);
58
+
59
+ let installed = false;
60
+ if (installation) {
61
+ installed = true;
62
+ }
63
+
64
+ readHTMLFile('/detail.html', (err, html) => {
65
+ if (err) {
66
+ winston.error("(tgm) Read html file error: ", err);
67
+ }
68
+
69
+ var template = handlebars.compile(html);
70
+ var replacements = {
71
+ app_version: pjson.version,
72
+ project_id: projectId,
73
+ token: token,
74
+ app_id: app_id,
75
+ installed: installed
76
+ }
77
+ var html = template(replacements);
78
+ res.send(html);
79
+ })
80
+ })
81
+
82
+ router.post('/install', async (req, res) => {
83
+ winston.verbose("(tgm) /install");
84
+ let project_id = req.body.project_id;
85
+ let app_id = req.body.app_id;
86
+ let token = req.body.token;
87
+
88
+ winston.verbose("(tgm) Install app " + app_id + " for project id " + project_id);
89
+ let installation_info = {
90
+ project_id: project_id,
91
+ app_id: app_id,
92
+ createdAt: Date.now()
93
+ };
94
+
95
+ const appClient = new TiledeskAppsClient({ APPS_API_URL: APPS_API_URL });
96
+ appClient.install(installation_info).then((installation) => {
97
+
98
+ winston.debug("(tgm) installation response: ", installation);
99
+
100
+ let installed = true;
101
+
102
+ readHTMLFile('/detail.html', (err, html) => {
103
+ if (err) {
104
+ winston.error("(tgm) Read html file error: ", err);
105
+ }
106
+
107
+ var template = handlebars.compile(html);
108
+ var replacements = {
109
+ app_version: pjson.version,
110
+ project_id: project_id,
111
+ token: token,
112
+ app_id: app_id,
113
+ installed: installed
114
+ }
115
+ var html = template(replacements);
116
+ res.send(html);
117
+ })
118
+
119
+ }).catch((err) => {
120
+ winston.error("(tgm) installation error: ", err.data)
121
+ res.send("An error occurred during the installation");
122
+ })
123
+
124
+ })
125
+
126
+ router.post('/uninstall', async (req, res) => {
127
+ winston.verbose("(tgm) /uninstall");
128
+ let project_id = req.body.project_id;
129
+ let app_id = req.body.app_id;
130
+ let token = req.body.token;
131
+
132
+ const appClient = new TiledeskAppsClient({ APPS_API_URL: APPS_API_URL });
133
+ appClient.uninstall(project_id, app_id).then((response) => {
134
+
135
+ winston.debug("(tgm) uninstallation response: ", response);
136
+
137
+ let installed = false;
138
+
139
+ readHTMLFile('/detail.html', (err, html) => {
140
+ if (err) {
141
+ winston.error("(tgm) Read html file error: ", err);
142
+ }
143
+
144
+ var template = handlebars.compile(html);
145
+ var replacements = {
146
+ app_version: pjson.version,
147
+ project_id: project_id,
148
+ token: token,
149
+ app_id: app_id,
150
+ installed: installed
151
+ }
152
+ var html = template(replacements);
153
+ res.send(html);
154
+ })
155
+
156
+ }).catch((err) => {
157
+ winston.error("(tgm) uninsallation error: ", err.data)
158
+ res.send("An error occurred during the uninstallation");
159
+ })
160
+ })
161
+
162
+ router.get('/configure', async (req, res) => {
163
+ winston.verbose("(tgm) /configure")
164
+ winston.debug("(tgm) query: ", req.query);
165
+
166
+ let projectId = "";
167
+ let token = "";
168
+
169
+ projectId = req.query.project_id;
170
+ token = req.query.token;
171
+
172
+ if (!projectId || !token) {
173
+ let error_message = "Query params project_id and token are required."
174
+ readHTMLFile('/error.html', (err, html) => {
175
+ var template = handlebars.compile(html);
176
+
177
+ var replacements = {
178
+ app_version: pjson.version,
179
+ error_message: error_message
180
+ }
181
+ var html = template(replacements);
182
+ return res.send(html);
183
+ })
184
+ return
185
+ }
186
+
187
+ let CONTENT_KEY = "telegram-" + projectId;
188
+
189
+ let settings = await db.get(CONTENT_KEY);
190
+ winston.debug("(tgm) settings found: ", settings)
191
+
192
+ // get departments
193
+ const tdChannel = new TiledeskChannel({ settings: { project_id: projectId, token: token }, API_URL: API_URL })
194
+ let departments = await tdChannel.getDepartments(token);
195
+
196
+ if (!departments) {
197
+ winston.verbose("(tgm) Unable to get departments for the project_id " + projectId);
198
+ }
199
+
200
+ if (settings) {
201
+ var replacements = {
202
+ app_version: pjson.version,
203
+ project_id: projectId,
204
+ token: token,
205
+ bot_name: settings.bot_name,
206
+ telegram_token: settings.telegram_token,
207
+ subscriptionId: settings.subscriptionId,
208
+ show_info_message: settings.show_info_message,
209
+ department_id: settings.department_id,
210
+ departments: departments,
211
+ brand_name: BRAND_NAME
212
+ }
213
+ } else {
214
+ var replacements = {
215
+ app_version: pjson.version,
216
+ project_id: projectId,
217
+ token: token,
218
+ departments: departments,
219
+ brand_name: BRAND_NAME
220
+ }
221
+ }
222
+
223
+ readHTMLFile('/configure.html', (err, html) => {
224
+ if (err) {
225
+ winston.error("(tgm) Read html file error: ", err);
226
+ }
227
+ var template = handlebars.compile(html);
228
+ var html = template(replacements);
229
+ res.send(html);
230
+ })
231
+
232
+ })
233
+
234
+ router.post('/update', async (req, res) => {
235
+ winston.verbose("(tgm) update");
236
+ winston.debug("(tgm) body: ", req.body);
237
+
238
+ let projectId = req.body.project_id;
239
+ let token = req.body.token;
240
+ let telegram_token = req.body.telegram_token;
241
+ let bot_name = req.body.bot_name;
242
+ let department_id = req.body.department;
243
+
244
+ let CONTENT_KEY = "telegram-" + projectId;
245
+ let settings = await db.get(CONTENT_KEY);
246
+
247
+ const tdChannel = new TiledeskChannel({ settings: { project_id: projectId, token: token }, API_URL: API_URL })
248
+ let departments = await tdChannel.getDepartments(token);
249
+ if (!departments) {
250
+ winston.verbose("(tgm) Unable to get departments for the project_id " + projectId);
251
+ }
252
+
253
+ if (settings) {
254
+ settings.bot_name = bot_name;
255
+ settings.telegram_token = telegram_token;
256
+ settings.department_id = department_id;
257
+
258
+ console.log("settings: ", settings)
259
+ await db.set(CONTENT_KEY, settings);
260
+
261
+ readHTMLFile('/configure.html', (err, html) => {
262
+ if (err) {
263
+ winston.error("(tgm) Read html file error: ", err);
264
+ }
265
+
266
+ var template = handlebars.compile(html);
267
+ var replacements = {
268
+ app_version: pjson.version,
269
+ project_id: settings.project_id,
270
+ token: settings.token,
271
+ subscriptionId: settings.subscriptionId,
272
+ bot_name: settings.bot_name,
273
+ telegram_token: settings.telegram_token,
274
+ show_info_message: settings.show_info_message,
275
+ department_id: settings.department_id,
276
+ departments: departments,
277
+ brand_name: BRAND_NAME
278
+ }
279
+ var html = template(replacements);
280
+ res.send(html);
281
+ })
282
+
283
+ }
284
+ else {
285
+ // Add new settings on mongodb
286
+ const tdClient = new TiledeskSubscriptionClient({ API_URL: API_URL, project_id: projectId, token: token, log: false })
287
+
288
+ const subscription_info = {
289
+ target: BASE_URL + "/tiledesk",
290
+ event: 'message.create.request.channel.telegram'
291
+ }
292
+
293
+ tdClient.subscribe(subscription_info).then((data) => {
294
+ let subscription = data;
295
+ winston.debug("(tgm) subscription: ", subscription)
296
+
297
+ // setWebhookEndpoint for Telegram
298
+ const ttClient = new TiledeskTelegram({ BASE_URL: BASE_URL, TELEGRAM_API_URL: TELEGRAM_API_URL, log: true });
299
+
300
+ ttClient.setWebhookEndpoint(projectId, telegram_token).then((response) => {
301
+ winston.debug("(tgm) Set webhook endpoint response: "+ response.result + ' ' + response.description);
302
+
303
+ let settings = {
304
+ app_version: pjson.version,
305
+ project_id: projectId,
306
+ token: token,
307
+ subscriptionId: subscription._id,
308
+ secret: subscription.secret,
309
+ bot_name: bot_name,
310
+ telegram_token: telegram_token,
311
+ department_id: department_id
312
+ }
313
+
314
+ console.log("settings 2: ", settings)
315
+
316
+ db.set(CONTENT_KEY, settings);
317
+
318
+ readHTMLFile('/configure.html', (err, html) => {
319
+ if (err) {
320
+ winston.error("(tgm) Read html file error: ", err);
321
+ }
322
+
323
+ var template = handlebars.compile(html);
324
+ var replacements = {
325
+ app_version: pjson.version,
326
+ project_id: settings.project_id,
327
+ token: settings.token,
328
+ subscriptionId: settings.subscriptionId,
329
+ bot_name: settings.bot_name,
330
+ telegram_token: settings.telegram_token,
331
+ show_info_message: settings.show_info_message,
332
+ department_id: settings.department_id,
333
+ departments: departments,
334
+ brand_name: BRAND_NAME
335
+ }
336
+ var html = template(replacements);
337
+ res.send(html);
338
+ })
339
+
340
+ }).catch((err) => {
341
+ winston.error("(tgm) set webhook endpoint error: ", err);
342
+ })
343
+
344
+ }).catch((err) => {
345
+ winston.error("(tgm) subscription error: ", err)
346
+ })
347
+ }
348
+ })
349
+
350
+ router.post('/update_advanced', async (req, res) => {
351
+ winston.verbose("(tgm) /update");
352
+ winston.debug("(tgm) body: ", req.body);
353
+
354
+ let projectId = req.body.project_id;
355
+ let show_info_message = false;
356
+ if (req.body.show_info_message && req.body.show_info_message == 'on') {
357
+ show_info_message = true;
358
+ }
359
+
360
+ let CONTENT_KEY = "telegram-" + projectId;
361
+ let settings = await db.get(CONTENT_KEY);
362
+
363
+ if (settings) {
364
+ settings.show_info_message = show_info_message;
365
+ db.set(CONTENT_KEY, settings);
366
+ await db.get(CONTENT_KEY);
367
+ }
368
+ res.status(200)
369
+ })
370
+
371
+ router.post('/disconnect', async (req, res) => {
372
+ winston.verbose("(tgm) /disconnect")
373
+ winston.debug("(tgm) body: ", req.body)
374
+
375
+ let projectId = req.body.project_id;
376
+ let token = req.body.token;
377
+ let subscriptionId = req.body.subscriptionId;
378
+
379
+ let telegram_token = ''
380
+
381
+ let CONTENT_KEY = "telegram-" + projectId;
382
+ let settings = await db.get(CONTENT_KEY);
383
+ if (settings) {
384
+ telegram_token = settings?.telegram_token;
385
+ await db.remove(CONTENT_KEY);
386
+ winston.verbose("(tgm) Content deleted: ", CONTENT_KEY);
387
+ }
388
+
389
+
390
+
391
+
392
+ const tdChannel = new TiledeskChannel({ settings: { project_id: projectId, token: token }, API_URL: API_URL })
393
+ const tdClient = new TiledeskSubscriptionClient({ API_URL: API_URL, project_id: projectId, token: token, log: false })
394
+
395
+ let departments = await tdChannel.getDepartments(token);
396
+ if (!departments) {
397
+ winston.verbose("(tgm) Unable to get departments for the project_id " + projectId);
398
+ }
399
+
400
+ tdClient.unsubscribe(subscriptionId).then((data) => {
401
+
402
+ // setWebhookEndpoint for Telegram
403
+ const ttClient = new TiledeskTelegram({ BASE_URL: BASE_URL, TELEGRAM_API_URL: TELEGRAM_API_URL, log: true });
404
+
405
+ ttClient.deleteWebhookEndpoint(projectId, telegram_token).then((response) => {
406
+ winston.debug("(tgm) Delete webhook endpoint response: ", response.result, response.description);
407
+
408
+ readHTMLFile('/configure.html', (err, html) => {
409
+
410
+ if (err) {
411
+ winston.error("(tgm) Read html file error: ", err);
412
+ }
413
+
414
+ var template = handlebars.compile(html);
415
+ var replacements = {
416
+ app_version: pjson.version,
417
+ project_id: projectId,
418
+ token: token,
419
+ departments: departments,
420
+ brand_name: BRAND_NAME
421
+ }
422
+ var html = template(replacements);
423
+ res.send(html);
424
+ })
425
+
426
+
427
+ });
428
+
429
+
430
+ }).catch((err) => {
431
+ winston.error("(tgm) unsubscribe error: ", err.response.data);
432
+ })
433
+
434
+ })
435
+
436
+ router.post('/tiledesk', async (req, res) => {
437
+ winston.verbose("(tgm) Message received from Tiledesk")
438
+ winston.debug("(tgm) tiledeskChannelMessage: ", req.body.payload);
439
+
440
+ var tiledeskChannelMessage = req.body.payload;
441
+ let projectId = tiledeskChannelMessage.id_project;
442
+
443
+ let attributes = req.body.payload.attributes;
444
+
445
+ let commands;
446
+ if (attributes && attributes.commands) {
447
+ commands = attributes.commands;
448
+ }
449
+
450
+
451
+ let sender_id = tiledeskChannelMessage.sender;
452
+
453
+ if (sender_id.indexOf("telegram") > -1) {
454
+ winston.verbose("(tgm) Skip same sender");
455
+ return res.sendStatus(200);
456
+ }
457
+
458
+ if (attributes && attributes.subtype === "info") {
459
+ winston.verbose("(tgm) Skip subtype: " + attributes.subtype);
460
+ return res.sendStatus(200);
461
+ }
462
+
463
+ let CONTENT_KEY = "telegram-" + projectId;
464
+ let settings = await db.get(CONTENT_KEY);
465
+
466
+ if (attributes && attributes.subtype === 'info/support') {
467
+ // Temporary solve the bug of multiple lead update messages
468
+ if (attributes.messagelabel.key == 'LEAD_UPDATED') {
469
+ winston.debug("(tgm) Skip LEAD_UPDATED");
470
+ return res.sendStatus(200);
471
+ }
472
+
473
+ if (!settings.show_info_message || settings.show_info_message == false) {
474
+ return res.sendStatus(200);
475
+ }
476
+ }
477
+
478
+ let recipient_id = tiledeskChannelMessage.recipient;
479
+ let chat_id = recipient_id.substring(recipient_id.lastIndexOf("-") + 1);
480
+
481
+ // Return an info message option
482
+ if (settings.expired &&
483
+ settings.expired === true) {
484
+
485
+ winston.verbose("settings expired: " + settings.expired);
486
+ let tiledeskJsonMessage = {
487
+ text: 'Expired. Upgrade Plan.',
488
+ sender: "system",
489
+ senderFullname: "System",
490
+ attributes: {
491
+ subtype: 'info'
492
+ },
493
+ channel: { name: 'telegram' }
494
+ }
495
+ let message_info = {
496
+ channel: "telegram",
497
+ telegram: {
498
+ from: chat_id,
499
+ }
500
+ }
501
+
502
+ const tdChannel = new TiledeskChannel({ settings: settings, API_URL: API_URL })
503
+ const response = await tdChannel.send(tiledeskJsonMessage, message_info, settings.department_id);
504
+ winston.verbose("(wab) Expiration message sent to Tiledesk")
505
+ return res.sendStatus(200);
506
+ }
507
+
508
+ winston.debug("(tgm) attributes: " + attributes);
509
+ winston.debug("(tgm) sender_id: " + sender_id);
510
+ winston.debug("(tgm) chat_id: " + chat_id);
511
+
512
+ const messageHandler = new MessageHandler({ tiledeskChannelMessage: tiledeskChannelMessage });
513
+ const tlr = new TiledeskTelegramTranslator();
514
+ const ttClient = new TiledeskTelegram({ BASE_URL: BASE_URL, TELEGRAM_API_URL: TELEGRAM_API_URL, log: true });
515
+
516
+ if (commands) {
517
+ let i = 0;
518
+ async function execute(command) {
519
+ //message
520
+ if (command.type === 'message') {
521
+ let tiledeskCommandMessage = await messageHandler.generateMessageObject(command);
522
+ winston.debug("(tgm) message generated from commands: ", tiledeskCommandMessage);
523
+ winston.info("(tgm) message generated from commands: ", tiledeskCommandMessage);
524
+
525
+ let telegramJsonMessage = await tlr.toTelegram(tiledeskCommandMessage, chat_id);
526
+ winston.debug("(tgm) telegramJsonMessage", telegramJsonMessage)
527
+
528
+ if (telegramJsonMessage) {
529
+ ttClient.send(settings.telegram_token, telegramJsonMessage).then((response) => {
530
+ winston.verbose("(tgm) Message sent to Telegram! " + response.status + " " + response.statusText);
531
+ i += 1;
532
+ if (i < commands.length) {
533
+ execute(commands[i]);
534
+ } else {
535
+ winston.debug("(tgm) End of commands")
536
+ }
537
+ }).catch((err) => {
538
+ winston.error("(tgm) send message error: ", err);
539
+ })
540
+ winston.verbose("(tgm) Message sent to Telegram")
541
+ } else {
542
+ winston.error("(tgm) telegramJsonMessage is undefined!");
543
+ }
544
+ }
545
+
546
+ //wait
547
+ if (command.type === "wait") {
548
+ setTimeout(() => {
549
+ i += 1;
550
+ if (i < commands.length) {
551
+ execute(commands[i]);
552
+ } else {
553
+ winston.debug("(tgm) End of commands")
554
+ }
555
+ }, command.time)
556
+ }
557
+ }
558
+ execute(commands[0]);
559
+ }
560
+
561
+ else if (tiledeskChannelMessage.text || tiledeskChannelMessage.metadata) {
562
+
563
+ let telegramJsonMessage = await tlr.toTelegram(tiledeskChannelMessage, chat_id);
564
+ winston.debug("(tgm) telegramJsonMessage", telegramJsonMessage)
565
+
566
+ if (telegramJsonMessage) {
567
+
568
+ ttClient.send(settings.telegram_token, telegramJsonMessage).then((response) => {
569
+ winston.verbose("(tgm) Message sent to Telegram! " + response.status + " " + response.statusText);
570
+ }).catch((err) => {
571
+ winston.error("(tgm) send message error: ", err);
572
+ })
573
+ }
574
+
575
+ } else {
576
+ winston.debug("(tgm) no command, no text --> skip");
577
+ }
578
+
579
+ return res.sendStatus(200);
580
+
581
+ /*
582
+ const telegramJsonMessage = await tlr.toTelegram(tiledeskChannelMessage, chat_id);
583
+ winston.verbose("(tgm) telegramJsonMessage: ", telegramJsonMessage);
584
+
585
+ if (telegramJsonMessage) {
586
+
587
+ const ttClient = new TiledeskTelegram({ BASE_URL: BASE_URL, TELEGRAM_API_URL: TELEGRAM_API_URL, log: true });
588
+
589
+ if (telegramJsonMessage.photo) {
590
+ ttClient.sendPhoto(settings.telegram_token, telegramJsonMessage)
591
+ }
592
+ else if (telegramJsonMessage.video) {
593
+ ttClient.sendVideo(settings.telegram_token, telegramJsonMessage)
594
+ }
595
+ else if (telegramJsonMessage.document) {
596
+ ttClient.sendDocument(settings.telegram_token, telegramJsonMessage)
597
+ }
598
+ else {
599
+ ttClient.sendMessage(settings.telegram_token, telegramJsonMessage)
600
+ }
601
+ winston.verbose("(tgm) Message sent to Telegram")
602
+ return res.send(200);
603
+
604
+
605
+ } else {
606
+ winston.verbose("(tgm) telegramJsonMessage is undefined.");
607
+ }
608
+ */
609
+
610
+ })
611
+
612
+ router.post('/telegram', async (req, res) => {
613
+ winston.verbose("(tgm) Message received from Telegram");
614
+ winston.debug("(tgm) telegramChannelMessage: ", req.body);
615
+
616
+ let projectId = req.query.project_id;
617
+
618
+ if (!req.body.message) {
619
+ winston.verbose("(tgm) Message undefined");
620
+ return res.send({ message: "Message not sent" });
621
+ }
622
+
623
+ if (req.body.edited_message) {
624
+ winston.verbose("(tgm) ignore edited message");
625
+ return res.send({ message: "Edited messages are not supported. Message ignored." })
626
+ }
627
+
628
+ let telegramChannelMessage = req.body;
629
+
630
+ let CONTENT_KEY = "telegram-" + projectId;
631
+
632
+ let settings = await db.get(CONTENT_KEY);
633
+ winston.debug("(tgm) settings found: ", settings);
634
+
635
+ if (!settings) {
636
+ winston.verbose("(tgm) No settings found. Exit..");
637
+ return res.send({ message: "Telegram not installed for this project" });
638
+ }
639
+
640
+ const ttClient = new TiledeskTelegram({ BASE_URL: BASE_URL, TELEGRAM_API_URL: TELEGRAM_API_URL, log: true });
641
+
642
+ // Reply Keyboard removes itself automatically with one_time_keyboard: true
643
+ // No need to manually clear buttons
644
+
645
+ const tlr = new TiledeskTelegramTranslator();
646
+ let tiledeskJsonMessage;
647
+
648
+ if (telegramChannelMessage.message) {
649
+
650
+ // Photo
651
+ if (telegramChannelMessage.message.photo) {
652
+ let index = telegramChannelMessage.message.photo.length - 1;
653
+ const file = await ttClient.downloadMedia(settings.telegram_token, telegramChannelMessage.message.photo[index].file_id);
654
+ tiledeskJsonMessage = await tlr.toTiledesk(telegramChannelMessage, settings.telegram_token, file.result.file_path);
655
+ }
656
+
657
+ // Video
658
+ else if (telegramChannelMessage.message.video) {
659
+ const file = await ttClient.downloadMedia(settings.telegram_token, telegramChannelMessage.message.video.file_id);
660
+ tiledeskJsonMessage = await tlr.toTiledesk(telegramChannelMessage, settings.telegram_token, file.result.file_path);
661
+ }
662
+
663
+ // File or Document
664
+ else if (telegramChannelMessage.message.document) {
665
+ const file = await ttClient.downloadMedia(settings.telegram_token, telegramChannelMessage.message.document.file_id);
666
+ tiledeskJsonMessage = await tlr.toTiledesk(telegramChannelMessage, settings.telegram_token, file.result.file_path);
667
+ }
668
+
669
+ // Text Message
670
+ else {
671
+ tiledeskJsonMessage = await tlr.toTiledesk(telegramChannelMessage);
672
+ }
673
+
674
+ } else {
675
+ tiledeskJsonMessage = await tlr.toTiledesk(telegramChannelMessage);
676
+ }
677
+
678
+ winston.debug("(tgm) tiledeskJsonMessage: ", tiledeskJsonMessage);
679
+
680
+ if (tiledeskJsonMessage) {
681
+
682
+ let message;
683
+ if (telegramChannelMessage.message) {
684
+ message = telegramChannelMessage.message;
685
+ } else {
686
+ message = telegramChannelMessage.callback_query;
687
+ }
688
+
689
+ let message_info = {
690
+ channel: "telegram",
691
+ telegram: {
692
+ from: message.from.id,
693
+ firstname: message.from.first_name,
694
+ lastname: message.from.last_name
695
+ }
696
+ };
697
+
698
+ const tdChannel = new TiledeskChannel({ settings: settings, API_URL: API_URL });
699
+ const response = await tdChannel.send(tiledeskJsonMessage, message_info, settings.department_id);
700
+ winston.verbose("(tgm) Message sent to Tiledesk! " + response.status + " " + response.statusText);
701
+
702
+ res.sendStatus(200);
703
+ } else {
704
+ res.sendStatus(400);
705
+ }
706
+
707
+ })
708
+
709
+
710
+ // *****************************
711
+ // ********* FUNCTIONS *********
712
+ // *****************************
713
+
714
+ function startApp(settings, callback) {
715
+ winston.info("(tgm) Starting Telegram App: ");
716
+
717
+ if (!settings.MONGODB_URL) {
718
+ throw new Error("settings.MONGODB_URL is mandatory")
719
+ }
720
+
721
+ if (!settings.API_URL) {
722
+ throw new Error("settings.API_URL is mandatory");
723
+ } else {
724
+ API_URL = settings.API_URL;
725
+ winston.info("(tgm) API_URL: " + API_URL);
726
+ }
727
+
728
+ if (!settings.BASE_URL) {
729
+ throw new Error("settings.BASE_URL is mandatory");
730
+ } else {
731
+ BASE_URL = settings.BASE_URL;
732
+ winston.info("(tgm) BASE_URL: " + BASE_URL);
733
+ }
734
+
735
+ if (!settings.TELEGRAM_API_URL) {
736
+ throw new Error("settings.TELEGRAM_API_URL is mandatory");
737
+ } else {
738
+ TELEGRAM_API_URL = settings.TELEGRAM_API_URL;
739
+ winston.info("(tgm) TELEGRAM_API_URL: " + TELEGRAM_API_URL);
740
+ }
741
+
742
+ if (!settings.TELEGRAM_FILE_URL) {
743
+ throw new Error("settings.TELEGRAM_API_URL is mandatory");
744
+ } else {
745
+ TELEGRAM_FILE_URL = settings.TELEGRAM_FILE_URL;
746
+ winston.info("(tgm) TELEGRAM_FILE_URL: " + TELEGRAM_FILE_URL);
747
+ }
748
+
749
+ if (!settings.APPS_API_URL) {
750
+ throw new Error("settings.APPS_API_URL is mandatory");
751
+ } else {
752
+ APPS_API_URL = settings.APPS_API_URL;
753
+ winston.info("(tgm) APPS_API_URL: " + APPS_API_URL);
754
+ }
755
+
756
+ if (settings.BRAND_NAME) {
757
+ BRAND_NAME = settings.BRAND_NAME
758
+ }
759
+ console.log("BRAND_NAME: ", BRAND_NAME)
760
+
761
+ if (settings.log) {
762
+ log = settings.log;
763
+ }
764
+
765
+ if (settings.dbconnection) {
766
+ db.reuseConnection(settings.dbconnection, () => {
767
+ winston.info("(wab) KVBaseMongo reused exsisting db connection");
768
+ if (callback) {
769
+ callback(null);
770
+ }
771
+ })
772
+ } else {
773
+ db.connect(settings.MONGODB_URL, () => {
774
+ winston.info("(wab) KVBaseMongo successfully connected.");
775
+
776
+ if (callback) {
777
+ callback(null);
778
+ }
779
+ });
780
+ }
781
+ }
782
+
783
+ function readHTMLFile(templateName, callback) {
784
+ fs.readFile(__dirname + '/template' + templateName, { encoding: 'utf-8' },
785
+ function(err, html) {
786
+ if (err) {
787
+ throw err;
788
+ //callback(err);
789
+ } else {
790
+ callback(null, html)
791
+ }
792
+ })
793
+ }
794
+
795
+ module.exports = { router: router, startApp: startApp };