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 +795 -0
- package/models/Setting.js +32 -0
- package/package.json +32 -0
- package/publish.sh +22 -0
- package/template/configure.html +349 -0
- package/template/css/configure.css +477 -0
- package/template/css/detail.css +186 -0
- package/template/css/error.css +67 -0
- package/template/css/style.css +93 -0
- package/template/detail.html +278 -0
- package/template/error.html +65 -0
- package/template/img/arrow-right.png +0 -0
- package/template/img/check.png +0 -0
- package/template/img/telegram-header.png +0 -0
- package/test/test_translate_telegram.js +464 -0
- package/tiledesk/KVBaseMongo.js +104 -0
- package/tiledesk/MessageHandler.js +31 -0
- package/tiledesk/TiledeskAppsClient.js +163 -0
- package/tiledesk/TiledeskChannel.js +175 -0
- package/tiledesk/TiledeskSubscriptionClient.js +138 -0
- package/tiledesk/TiledeskTelegram.js +304 -0
- package/tiledesk/TiledeskTelegramTranslator.js +300 -0
- package/winston.js +41 -0
|
@@ -0,0 +1,464 @@
|
|
|
1
|
+
var assert = require('assert');
|
|
2
|
+
const { TiledeskTelegramTranslator } = require('../tiledesk/TiledeskTelegramTranslator');
|
|
3
|
+
const log = true;
|
|
4
|
+
|
|
5
|
+
describe('Test Translator\n', function() {
|
|
6
|
+
|
|
7
|
+
// TILEDESK >>>>>>>>> TELEGRAM
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
it("Translates a TEXT message from Tiledesk to Telegram", async function() {
|
|
11
|
+
|
|
12
|
+
let tiledeskChannelMessage = {
|
|
13
|
+
text: 'Test Message',
|
|
14
|
+
recipient: 'support-group-62c3f10152dc7400352bab0d-86a2293e-telegram-238070007',
|
|
15
|
+
attributes: {
|
|
16
|
+
userFullname: 'John Doe'
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
let telegram_receiver = tiledeskChannelMessage.recipient.substring(tiledeskChannelMessage.recipient.lastIndexOf("-") + 1);
|
|
20
|
+
|
|
21
|
+
const tlr = new TiledeskTelegramTranslator();
|
|
22
|
+
assert(tlr != null);
|
|
23
|
+
const telegramJsonMessage = await tlr.toTelegram(tiledeskChannelMessage, telegram_receiver);
|
|
24
|
+
assert(telegramJsonMessage != null);
|
|
25
|
+
assert(telegramJsonMessage.parse_mode === "markdown");
|
|
26
|
+
assert(telegramJsonMessage.chat_id === telegram_receiver);
|
|
27
|
+
assert(telegramJsonMessage.text);
|
|
28
|
+
assert(telegramJsonMessage.text == tiledeskChannelMessage.text);
|
|
29
|
+
if (log) {
|
|
30
|
+
console.log("\n(test) telegramJsonMessage: ", telegramJsonMessage);
|
|
31
|
+
}
|
|
32
|
+
})
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
it("Translates a message containing an IMAGE from Tiledesk to Telegram", async function() {
|
|
36
|
+
|
|
37
|
+
let tiledeskChannelMessage = {
|
|
38
|
+
text: 'Test Message',
|
|
39
|
+
type: 'image',
|
|
40
|
+
recipient: 'support-group-62c3f10152dc7400352bab0d-86a2293e-telegram-238070007',
|
|
41
|
+
metadata: {
|
|
42
|
+
src: 'https://fakeimageurl.com/',
|
|
43
|
+
type: 'image/png'
|
|
44
|
+
},
|
|
45
|
+
attributes: {
|
|
46
|
+
userFullname: 'John Doe'
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
let telegram_receiver = tiledeskChannelMessage.recipient.substring(tiledeskChannelMessage.recipient.lastIndexOf("-") + 1);
|
|
50
|
+
|
|
51
|
+
const tlr = new TiledeskTelegramTranslator();
|
|
52
|
+
assert(tlr != null);
|
|
53
|
+
const telegramJsonMessage = await tlr.toTelegram(tiledeskChannelMessage, telegram_receiver);
|
|
54
|
+
assert(telegramJsonMessage != null);
|
|
55
|
+
assert(telegramJsonMessage.parse_mode === "markdown");
|
|
56
|
+
assert(telegramJsonMessage.chat_id === telegram_receiver);
|
|
57
|
+
assert(telegramJsonMessage.photo === tiledeskChannelMessage.metadata.src);
|
|
58
|
+
assert(telegramJsonMessage.caption === tiledeskChannelMessage.text);
|
|
59
|
+
if (log) {
|
|
60
|
+
console.log("\n(test) telegramJsonMessage: ", telegramJsonMessage);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
})
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
it("Translates a message containing a VIDEO message from Tiledesk to Telegram", async function() {
|
|
67
|
+
|
|
68
|
+
let tiledeskChannelMessage = {
|
|
69
|
+
text: 'Video Caption',
|
|
70
|
+
type: 'video',
|
|
71
|
+
recipient: 'support-group-62c3f10152dc7400352bab0d-86a2293e-telegram-238070007',
|
|
72
|
+
metadata: {
|
|
73
|
+
src: 'https://fakevideourl.com/',
|
|
74
|
+
type: 'video/mp4',
|
|
75
|
+
name: 'fakevideo.mp4'
|
|
76
|
+
},
|
|
77
|
+
attributes: {
|
|
78
|
+
userFullname: 'John Doe'
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
let telegram_receiver = tiledeskChannelMessage.recipient.substring(tiledeskChannelMessage.recipient.lastIndexOf("-") + 1);
|
|
82
|
+
|
|
83
|
+
const tlr = new TiledeskTelegramTranslator();
|
|
84
|
+
assert(tlr != null);
|
|
85
|
+
const telegramJsonMessage = await tlr.toTelegram(tiledeskChannelMessage, telegram_receiver);
|
|
86
|
+
assert(telegramJsonMessage != null);
|
|
87
|
+
assert(telegramJsonMessage.parse_mode === "markdown");
|
|
88
|
+
assert(telegramJsonMessage.chat_id === telegram_receiver);
|
|
89
|
+
assert(telegramJsonMessage.video != null);
|
|
90
|
+
assert(telegramJsonMessage.video === tiledeskChannelMessage.metadata.src);
|
|
91
|
+
assert(telegramJsonMessage.caption != null);
|
|
92
|
+
assert(telegramJsonMessage.caption === tiledeskChannelMessage.text);
|
|
93
|
+
if (log) {
|
|
94
|
+
console.log("\n(test) telegramJsonMessage: ", telegramJsonMessage);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
})
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
it("Translates a message containing a DOCUMENT from Tiledesk to Telegram", async function() {
|
|
101
|
+
|
|
102
|
+
let tiledeskChannelMessage = {
|
|
103
|
+
text: 'Document Caption',
|
|
104
|
+
type: 'file',
|
|
105
|
+
recipient: 'support-group-62c3f10152dc7400352bab0d-86a2293e-telegram-238070007',
|
|
106
|
+
metadata: {
|
|
107
|
+
src: 'https://fakedocumenturl.com/',
|
|
108
|
+
type: 'application/pdf',
|
|
109
|
+
name: 'fakedocument.pdf'
|
|
110
|
+
},
|
|
111
|
+
attributes: {
|
|
112
|
+
userFullname: 'John Doe'
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
let telegram_receiver = tiledeskChannelMessage.recipient.substring(tiledeskChannelMessage.recipient.lastIndexOf("-") + 1);
|
|
116
|
+
|
|
117
|
+
const tlr = new TiledeskTelegramTranslator();
|
|
118
|
+
assert(tlr != null);
|
|
119
|
+
const telegramJsonMessage = await tlr.toTelegram(tiledeskChannelMessage, telegram_receiver);
|
|
120
|
+
assert(telegramJsonMessage != null);
|
|
121
|
+
assert(telegramJsonMessage.parse_mode === "markdown");
|
|
122
|
+
assert(telegramJsonMessage.chat_id === telegram_receiver);
|
|
123
|
+
assert(telegramJsonMessage.document != null);
|
|
124
|
+
assert(telegramJsonMessage.document === tiledeskChannelMessage.metadata.src);
|
|
125
|
+
assert(telegramJsonMessage.caption != null);
|
|
126
|
+
assert(telegramJsonMessage.caption === tiledeskChannelMessage.text);
|
|
127
|
+
if (log) {
|
|
128
|
+
console.log("\n(test) telegramJsonMessage: ", telegramJsonMessage);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
})
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
it("Translates a message with BUTTONS from Tiledesk to Telegram", async function() {
|
|
135
|
+
|
|
136
|
+
let tiledeskChannelMessage = {
|
|
137
|
+
text: 'Test Message',
|
|
138
|
+
recipient: 'support-group-62c3f10152dc7400352bab0d-86a2293e-wab-104777398965560-393484506627',
|
|
139
|
+
attributes: {
|
|
140
|
+
attachment: {
|
|
141
|
+
buttons: [
|
|
142
|
+
{ type: 'text', value: 'Button 1' },
|
|
143
|
+
{ type: 'url', value: 'Url 1' },
|
|
144
|
+
{ type: 'action', value: '↩︎ Back', action: 'main_menu' }
|
|
145
|
+
]
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
let telegram_receiver = tiledeskChannelMessage.recipient.substring(tiledeskChannelMessage.recipient.lastIndexOf("tel") + 3)
|
|
150
|
+
|
|
151
|
+
let text_btn = {
|
|
152
|
+
t: tiledeskChannelMessage.attributes.attachment.buttons[0].type.substring(0,1),
|
|
153
|
+
value: tiledeskChannelMessage.attributes.attachment.buttons[0].value
|
|
154
|
+
}
|
|
155
|
+
let action_btn = {
|
|
156
|
+
t: tiledeskChannelMessage.attributes.attachment.buttons[2].type.substring(0,1),
|
|
157
|
+
action: tiledeskChannelMessage.attributes.attachment.buttons[2].action
|
|
158
|
+
}
|
|
159
|
+
let callback_data_text = JSON.stringify(text_btn);
|
|
160
|
+
let callback_data_action = JSON.stringify(action_btn);
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
const tlr = new TiledeskTelegramTranslator();
|
|
164
|
+
assert(tlr != null);
|
|
165
|
+
const telegramJsonMessage = await tlr.toTelegram(tiledeskChannelMessage, telegram_receiver);
|
|
166
|
+
assert(telegramJsonMessage != null);
|
|
167
|
+
assert(telegramJsonMessage.parse_mode === "markdown");
|
|
168
|
+
assert(telegramJsonMessage.chat_id === telegram_receiver);
|
|
169
|
+
assert(telegramJsonMessage.text === tiledeskChannelMessage.text);
|
|
170
|
+
assert(telegramJsonMessage.reply_markup != null);
|
|
171
|
+
assert(telegramJsonMessage.reply_markup.inline_keyboard != null);
|
|
172
|
+
assert(telegramJsonMessage.reply_markup.inline_keyboard.length === 3);
|
|
173
|
+
// text button
|
|
174
|
+
assert(telegramJsonMessage.reply_markup.inline_keyboard[0][0].text === tiledeskChannelMessage.attributes.attachment.buttons[0].value);
|
|
175
|
+
assert(telegramJsonMessage.reply_markup.inline_keyboard[0][0].callback_data != null);
|
|
176
|
+
assert(telegramJsonMessage.reply_markup.inline_keyboard[0][0].callback_data === callback_data_text);
|
|
177
|
+
// url button
|
|
178
|
+
assert(telegramJsonMessage.reply_markup.inline_keyboard[1][0].text === tiledeskChannelMessage.attributes.attachment.buttons[1].value);
|
|
179
|
+
assert(telegramJsonMessage.reply_markup.inline_keyboard[1][0].callback_data == null);
|
|
180
|
+
// action button
|
|
181
|
+
assert(telegramJsonMessage.reply_markup.inline_keyboard[2][0].text === tiledeskChannelMessage.attributes.attachment.buttons[2].value);
|
|
182
|
+
assert(telegramJsonMessage.reply_markup.inline_keyboard[2][0].callback_data != null);
|
|
183
|
+
assert(telegramJsonMessage.reply_markup.inline_keyboard[2][0].callback_data === callback_data_action);
|
|
184
|
+
if (log) {
|
|
185
|
+
console.log("\n(test) telegramJsonMessage: ", telegramJsonMessage);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
})
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
// TELEGRAM >>>>>>>>> TILEDESK
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
it("Translates a TEXT message from Telegram to Tiledesk", async function() {
|
|
195
|
+
let telegramChannelMessage = {
|
|
196
|
+
message: {
|
|
197
|
+
from: {
|
|
198
|
+
first_name: "John",
|
|
199
|
+
last_name: "Doe",
|
|
200
|
+
},
|
|
201
|
+
text: "Test Message"
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
const tlr = new TiledeskTelegramTranslator();
|
|
206
|
+
assert(tlr != null);
|
|
207
|
+
const tiledeskJsonMessage = await tlr.toTiledesk(telegramChannelMessage);
|
|
208
|
+
assert(tiledeskJsonMessage != null);
|
|
209
|
+
assert(tiledeskJsonMessage.text = telegramChannelMessage.message.text);
|
|
210
|
+
assert(tiledeskJsonMessage.senderFullname === telegramChannelMessage.message.from.first_name + " " + telegramChannelMessage.message.from.last_name);
|
|
211
|
+
assert(tiledeskJsonMessage.channel != null);
|
|
212
|
+
assert(tiledeskJsonMessage.channel.name === TiledeskTelegramTranslator.CHANNEL_NAME);
|
|
213
|
+
if (log) {
|
|
214
|
+
console.log("(test) tiledeskJsonMessage: ", tiledeskJsonMessage);
|
|
215
|
+
}
|
|
216
|
+
})
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
it("Translates a message with CALLBACK_QUERY (text button) from Telegram to Tiledesk", async function() {
|
|
220
|
+
|
|
221
|
+
let telegramChannelMessage = {
|
|
222
|
+
callback_query: {
|
|
223
|
+
from: {
|
|
224
|
+
first_name: "John",
|
|
225
|
+
last_name: "Doe",
|
|
226
|
+
},
|
|
227
|
+
data: '{"t":"t","value":"Button 1"}'
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
let data = JSON.parse(telegramChannelMessage.callback_query.data);
|
|
231
|
+
|
|
232
|
+
const tlr = new TiledeskTelegramTranslator();
|
|
233
|
+
assert(tlr != null);
|
|
234
|
+
const tiledeskJsonMessage = await tlr.toTiledesk(telegramChannelMessage);
|
|
235
|
+
assert(tiledeskJsonMessage != null);
|
|
236
|
+
assert(tiledeskJsonMessage.text === data.value);
|
|
237
|
+
assert(tiledeskJsonMessage.senderFullname === telegramChannelMessage.callback_query.from.first_name + " " + telegramChannelMessage.callback_query.from.last_name);
|
|
238
|
+
assert(tiledeskJsonMessage.channel.name === TiledeskTelegramTranslator.CHANNEL_NAME);
|
|
239
|
+
if (log) {
|
|
240
|
+
console.log("(test) tiledeskJsonMessage: ", tiledeskJsonMessage);
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
})
|
|
244
|
+
|
|
245
|
+
|
|
246
|
+
it("Translates a message with CALLBACK_QUERY (action button) from Telegram to Tiledesk", async function() {
|
|
247
|
+
let telegramChannelMessage = {
|
|
248
|
+
callback_query: {
|
|
249
|
+
from: {
|
|
250
|
+
first_name: "John",
|
|
251
|
+
last_name: "Doe",
|
|
252
|
+
},
|
|
253
|
+
data: '{"t":"a","action":"↩︎ Back"}'
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
let data = JSON.parse(telegramChannelMessage.callback_query.data);
|
|
257
|
+
|
|
258
|
+
const tlr = new TiledeskTelegramTranslator();
|
|
259
|
+
assert(tlr != null);
|
|
260
|
+
const tiledeskJsonMessage = await tlr.toTiledesk(telegramChannelMessage);
|
|
261
|
+
assert(tiledeskJsonMessage != null);
|
|
262
|
+
console.log("--> tiledeskJsonMessage: ", JSON.stringify(tiledeskJsonMessage, null, 2))
|
|
263
|
+
assert(tiledeskJsonMessage.text === ' ');
|
|
264
|
+
assert(tiledeskJsonMessage.type === 'text');
|
|
265
|
+
assert(tiledeskJsonMessage.attributes != null);
|
|
266
|
+
assert(tiledeskJsonMessage.attributes.subtype === 'info');
|
|
267
|
+
assert(tiledeskJsonMessage.attributes.action === data.action);
|
|
268
|
+
assert(tiledeskJsonMessage.senderFullname === telegramChannelMessage.callback_query.from.first_name + " " + telegramChannelMessage.callback_query.from.last_name);
|
|
269
|
+
assert(tiledeskJsonMessage.channel.name === TiledeskTelegramTranslator.CHANNEL_NAME);
|
|
270
|
+
if (log) {
|
|
271
|
+
console.log("(test) tiledeskJsonMessage: ", tiledeskJsonMessage);
|
|
272
|
+
}
|
|
273
|
+
})
|
|
274
|
+
|
|
275
|
+
|
|
276
|
+
it("Translates a message with an IMAGE from Telegram to Tiledesk", async function() {
|
|
277
|
+
|
|
278
|
+
let telegramChannelMessage = {
|
|
279
|
+
message: {
|
|
280
|
+
from: {
|
|
281
|
+
first_name: "John",
|
|
282
|
+
last_name: "Doe",
|
|
283
|
+
},
|
|
284
|
+
photo: [
|
|
285
|
+
{
|
|
286
|
+
file_id: "AgACAgQAAxkBAAIEKGNWqcQrqlkpgggIsrEaXSwAAlOUAAKVuzEbmy65UksGxHJfOuPNAQADAgADcwADKgQ",
|
|
287
|
+
file_unique_id: "AQADlbsxG5suuVJ4",
|
|
288
|
+
file_size: 1116,
|
|
289
|
+
width: 90,
|
|
290
|
+
height: 90
|
|
291
|
+
},
|
|
292
|
+
{
|
|
293
|
+
file_id: "AgACAgQAAxkBAAIEKGNWqcQrqlkpgggIsrEaXSwAAlOUAAKVuzEbmy65UksGxHJfOuPNAQADAgADbQADKgQ",
|
|
294
|
+
file_unique_id: "AQADlbsxG5suuVJy",
|
|
295
|
+
file_size: 7548,
|
|
296
|
+
width: 320,
|
|
297
|
+
height: 320
|
|
298
|
+
},
|
|
299
|
+
{
|
|
300
|
+
file_id: "AgACAgQAAxkBAAIEKGNWqcQrqlkpgggIsrEaXSwAAlOUAAKVuzEbmy65UksGxHJfOuPNAQADAgADeAADKgQ",
|
|
301
|
+
file_unique_id: "AQADlbsxG5suuVJ9",
|
|
302
|
+
file_size: 10412,
|
|
303
|
+
width: 512,
|
|
304
|
+
height: 512
|
|
305
|
+
}
|
|
306
|
+
]
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
let file_path = "photos/file_6.jpg";
|
|
310
|
+
let telegram_token = "test-telegram-token"
|
|
311
|
+
|
|
312
|
+
const tlr = new TiledeskTelegramTranslator();
|
|
313
|
+
assert(tlr != null);
|
|
314
|
+
const tiledeskJsonMessage = await tlr.toTiledesk(telegramChannelMessage, telegram_token, file_path);
|
|
315
|
+
assert(tiledeskJsonMessage != null);
|
|
316
|
+
assert(tiledeskJsonMessage.text != null);
|
|
317
|
+
assert(tiledeskJsonMessage.text === "Attached image");
|
|
318
|
+
assert(tiledeskJsonMessage.senderFullname === telegramChannelMessage.message.from.first_name + " " + telegramChannelMessage.message.from.last_name);
|
|
319
|
+
assert(tiledeskJsonMessage.type === 'image');
|
|
320
|
+
assert(tiledeskJsonMessage.metadata != null);
|
|
321
|
+
assert(tiledeskJsonMessage.metadata.src === TiledeskTelegramTranslator.TELEGRAM_FILE_BASE_URL + telegram_token + "/" + file_path);
|
|
322
|
+
if (log) {
|
|
323
|
+
console.log("(test) tiledeskJsonMessage: ", tiledeskJsonMessage);
|
|
324
|
+
}
|
|
325
|
+
})
|
|
326
|
+
|
|
327
|
+
it("Translates a message with an IMAGE from Telegram to Tiledesk", async function() {
|
|
328
|
+
|
|
329
|
+
let telegramChannelMessage = {
|
|
330
|
+
message: {
|
|
331
|
+
from: {
|
|
332
|
+
first_name: "John",
|
|
333
|
+
last_name: "Doe",
|
|
334
|
+
},
|
|
335
|
+
photo: [
|
|
336
|
+
{
|
|
337
|
+
file_id: "AgACAgQAAxkBAAIEKGNWqcQrqlkpgggIsrEaXSwAAlOUAAKVuzEbmy65UksGxHJfOuPNAQADAgADcwADKgQ",
|
|
338
|
+
file_unique_id: "AQADlbsxG5suuVJ4",
|
|
339
|
+
file_size: 1116,
|
|
340
|
+
width: 90,
|
|
341
|
+
height: 90
|
|
342
|
+
},
|
|
343
|
+
{
|
|
344
|
+
file_id: "AgACAgQAAxkBAAIEKGNWqcQrqlkpgggIsrEaXSwAAlOUAAKVuzEbmy65UksGxHJfOuPNAQADAgADbQADKgQ",
|
|
345
|
+
file_unique_id: "AQADlbsxG5suuVJy",
|
|
346
|
+
file_size: 7548,
|
|
347
|
+
width: 320,
|
|
348
|
+
height: 320
|
|
349
|
+
},
|
|
350
|
+
{
|
|
351
|
+
file_id: "AgACAgQAAxkBAAIEKGNWqcQrqlkpgggIsrEaXSwAAlOUAAKVuzEbmy65UksGxHJfOuPNAQADAgADeAADKgQ",
|
|
352
|
+
file_unique_id: "AQADlbsxG5suuVJ9",
|
|
353
|
+
file_size: 10412,
|
|
354
|
+
width: 512,
|
|
355
|
+
height: 512
|
|
356
|
+
}
|
|
357
|
+
],
|
|
358
|
+
caption: "Test Caption"
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
let file_path = "photos/file_6.jpg";
|
|
362
|
+
let telegram_token = "test-telegram-token"
|
|
363
|
+
|
|
364
|
+
const tlr = new TiledeskTelegramTranslator();
|
|
365
|
+
assert(tlr != null);
|
|
366
|
+
const tiledeskJsonMessage = await tlr.toTiledesk(telegramChannelMessage, telegram_token, file_path);
|
|
367
|
+
assert(tiledeskJsonMessage != null);
|
|
368
|
+
assert(tiledeskJsonMessage.text != null);
|
|
369
|
+
assert(tiledeskJsonMessage.text === telegramChannelMessage.message.caption);
|
|
370
|
+
assert(tiledeskJsonMessage.senderFullname === telegramChannelMessage.message.from.first_name + " " + telegramChannelMessage.message.from.last_name);
|
|
371
|
+
assert(tiledeskJsonMessage.type === 'image');
|
|
372
|
+
assert(tiledeskJsonMessage.metadata != null);
|
|
373
|
+
assert(tiledeskJsonMessage.metadata.src === TiledeskTelegramTranslator.TELEGRAM_FILE_BASE_URL + telegram_token + "/" + file_path);
|
|
374
|
+
if (log) {
|
|
375
|
+
console.log("(test) tiledeskJsonMessage: ", tiledeskJsonMessage);
|
|
376
|
+
}
|
|
377
|
+
})
|
|
378
|
+
|
|
379
|
+
|
|
380
|
+
it("Translates a message with a VIDEO from Telegram to Tiledesk", async function() {
|
|
381
|
+
|
|
382
|
+
let telegramChannelMessage = {
|
|
383
|
+
message: {
|
|
384
|
+
from: {
|
|
385
|
+
first_name: "John",
|
|
386
|
+
last_name: "Doe",
|
|
387
|
+
},
|
|
388
|
+
video: {
|
|
389
|
+
duration: 29,
|
|
390
|
+
width: 1280,
|
|
391
|
+
height: 720,
|
|
392
|
+
file_name: 'fake_video.mp4',
|
|
393
|
+
mime_type: 'video/mp4',
|
|
394
|
+
thumb: [Object],
|
|
395
|
+
file_id: 'BAACAgQAAxkBAAIELGNWrOqLM9qg4WqVPHCWtB_13zRNAAIWDgACmy65UhuALt2Eeq5VKgQ',
|
|
396
|
+
file_unique_id: 'AgADFg4AApsuuVI',
|
|
397
|
+
file_size: 5253880
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
let file_path = "videos/file_X.mp4";
|
|
402
|
+
let telegram_token = "test-telegram-token"
|
|
403
|
+
|
|
404
|
+
const tlr = new TiledeskTelegramTranslator();
|
|
405
|
+
assert(tlr != null);
|
|
406
|
+
const tiledeskJsonMessage = await tlr.toTiledesk(telegramChannelMessage, telegram_token, file_path);
|
|
407
|
+
assert(tiledeskJsonMessage != null);
|
|
408
|
+
assert(tiledeskJsonMessage.text != null);
|
|
409
|
+
assert(tiledeskJsonMessage.type === 'video');
|
|
410
|
+
assert(tiledeskJsonMessage.metadata != null);
|
|
411
|
+
assert(tiledeskJsonMessage.metadata.src === TiledeskTelegramTranslator.TELEGRAM_FILE_BASE_URL + telegram_token + "/" + file_path);
|
|
412
|
+
assert(tiledeskJsonMessage.metadata.name === telegramChannelMessage.message.video.file_name);
|
|
413
|
+
assert(tiledeskJsonMessage.metadata.type === telegramChannelMessage.message.video.mime_type);
|
|
414
|
+
assert(tiledeskJsonMessage.text === '[' + telegramChannelMessage.message.video.file_name + '](' + TiledeskTelegramTranslator.TELEGRAM_FILE_BASE_URL + telegram_token + "/" + file_path + ')')
|
|
415
|
+
if (log) {
|
|
416
|
+
console.log("(test) tiledeskJsonMessage: ", tiledeskJsonMessage);
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
})
|
|
420
|
+
|
|
421
|
+
|
|
422
|
+
it("Translates a message with a DOCUMENT from Telegram to Tiledesk", async function() {
|
|
423
|
+
let telegramChannelMessage = {
|
|
424
|
+
message: {
|
|
425
|
+
from: {
|
|
426
|
+
first_name: "John",
|
|
427
|
+
last_name: "Doe",
|
|
428
|
+
},
|
|
429
|
+
document: {
|
|
430
|
+
file_name: "fake_document.pdf",
|
|
431
|
+
mime_type: "application/pdf",
|
|
432
|
+
thumb: {
|
|
433
|
+
file_id: "AAMCBAADGQEAAgQ2Y1a1G9RFbvq10qUS-KhsljUYiB4AAiMOAAKbLrlS4RjZ3vuL478BAAdtAAMqBA",
|
|
434
|
+
file_unique_id: "AQADIw4AApsuuVJy",
|
|
435
|
+
file_size: 14824,
|
|
436
|
+
width: 226,
|
|
437
|
+
height: 320
|
|
438
|
+
},
|
|
439
|
+
file_id: "BQACAgQAAxkBAAIENmNWtRvURW76tdKlEviobJY1GIgeAAIjDgACmy65UuEY2d77i-O_KgQ",
|
|
440
|
+
file_unique_id: "AgADIw4AApsuuVI",
|
|
441
|
+
file_size: 702874
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
let file_path = "documents/file_X.mp4";
|
|
446
|
+
let telegram_token = "test-telegram-token"
|
|
447
|
+
|
|
448
|
+
const tlr = new TiledeskTelegramTranslator();
|
|
449
|
+
assert(tlr != null);
|
|
450
|
+
const tiledeskJsonMessage = await tlr.toTiledesk(telegramChannelMessage, telegram_token, file_path);
|
|
451
|
+
assert(tiledeskJsonMessage != null);
|
|
452
|
+
assert(tiledeskJsonMessage.text != null);
|
|
453
|
+
assert(tiledeskJsonMessage.type === 'file');
|
|
454
|
+
assert(tiledeskJsonMessage.metadata != null);
|
|
455
|
+
assert(tiledeskJsonMessage.metadata.src === TiledeskTelegramTranslator.TELEGRAM_FILE_BASE_URL + telegram_token + "/" + file_path);
|
|
456
|
+
assert(tiledeskJsonMessage.metadata.name === telegramChannelMessage.message.document.file_name);
|
|
457
|
+
assert(tiledeskJsonMessage.metadata.type === telegramChannelMessage.message.document.mime_type);
|
|
458
|
+
assert(tiledeskJsonMessage.text === '[' + telegramChannelMessage.message.document.file_name + '](' + TiledeskTelegramTranslator.TELEGRAM_FILE_BASE_URL + telegram_token + "/" + file_path + ')')
|
|
459
|
+
if (log) {
|
|
460
|
+
console.log("(test) tiledeskJsonMessage: ", tiledeskJsonMessage);
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
})
|
|
464
|
+
})
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
const mongodb = require("mongodb");
|
|
2
|
+
const winston = require('../winston');
|
|
3
|
+
|
|
4
|
+
class KVBaseMongo {
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Constructor for KVBaseMongo object
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* const { KVBaseMongo } = require('./KVBaseMongo');
|
|
11
|
+
* let db = new KVBaseMongo("kvstore");
|
|
12
|
+
*
|
|
13
|
+
* @param {KVBASE_COLLECTION} The name of the Mongodb collection used as key-value store. Mandatory.
|
|
14
|
+
*/
|
|
15
|
+
constructor(config) {
|
|
16
|
+
if (!config.KVBASE_COLLECTION) {
|
|
17
|
+
throw new Error('KVBASE_COLLECTION (the name of the Mongodb collection used as key-value store) is mandatory.');
|
|
18
|
+
}
|
|
19
|
+
this.KV_COLLECTION = config.KVBASE_COLLECTION;
|
|
20
|
+
winston.verbose("KV_COLLECTION: ", this.KV_COLLECTION)
|
|
21
|
+
|
|
22
|
+
this.log = false;
|
|
23
|
+
if (config.log) {
|
|
24
|
+
this.log = config.log;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
connect(MONGODB_URI, callback) {
|
|
29
|
+
mongodb.MongoClient.connect(MONGODB_URI, { useNewUrlParser: true, useUnifiedTopology: true }, (err, client) => {
|
|
30
|
+
if (err) {
|
|
31
|
+
winston.error(err);
|
|
32
|
+
process.exit(1);
|
|
33
|
+
} else {
|
|
34
|
+
this.db = client.db();
|
|
35
|
+
this.db.collection(this.KV_COLLECTION).createIndex(
|
|
36
|
+
{ "key": 1 }, { unique: true }
|
|
37
|
+
);
|
|
38
|
+
callback();
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
reuseConnection(db, callback) {
|
|
44
|
+
this.db = db;
|
|
45
|
+
this.db.collection(this.KV_COLLECTION).createIndex(
|
|
46
|
+
{ "key": 1 }, { unique: true }
|
|
47
|
+
)
|
|
48
|
+
callback();
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
set(k, v) {
|
|
52
|
+
return new Promise((resolve, reject) => {
|
|
53
|
+
//this.db.set(k, v).then(() => {resolve();});
|
|
54
|
+
this.db.collection(this.KV_COLLECTION).updateOne({key: k}, { $set: { value: v, key: k } }, { upsert: true }, function(err, doc) {
|
|
55
|
+
if (err) {
|
|
56
|
+
reject(err);
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
resolve();
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
get(k) {
|
|
66
|
+
return new Promise((resolve, reject) => {
|
|
67
|
+
//this.db.get(k).then(value => {resolve(value)});
|
|
68
|
+
//console.log("Searching on ", this.db)
|
|
69
|
+
winston.debug("Searching on Collection", this.KV_COLLECTION)
|
|
70
|
+
|
|
71
|
+
this.db.collection(this.KV_COLLECTION).findOne({ key: k }, function(err, doc) {
|
|
72
|
+
if (err) {
|
|
73
|
+
winston.error("Error reading mongodb value", err);
|
|
74
|
+
reject(err);
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
if (doc) {
|
|
78
|
+
winston.debug("Doc found with key: ", doc.key);
|
|
79
|
+
resolve(doc.value);
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
winston.verbose("No Doc found!");
|
|
83
|
+
resolve(null);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
remove(k) {
|
|
91
|
+
return new Promise((resolve, reject) => {
|
|
92
|
+
this.db.collection(this.KV_COLLECTION).deleteOne({key: k}, function(err) {
|
|
93
|
+
if (err) {
|
|
94
|
+
reject(err);
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
resolve();
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
module.exports = { KVBaseMongo };
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
const winston = require('../winston');
|
|
2
|
+
|
|
3
|
+
class MessageHandler {
|
|
4
|
+
|
|
5
|
+
constructor(config) {
|
|
6
|
+
|
|
7
|
+
if (!config) {
|
|
8
|
+
throw new Error('config is mandatory');
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
if (!config.tiledeskChannelMessage) {
|
|
12
|
+
throw new Error('!config.telegramChannelMessage is mandatory');
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
this.tiledeskChannelMessage = config.tiledeskChannelMessage;
|
|
16
|
+
this.log = false;
|
|
17
|
+
if (config.log) {
|
|
18
|
+
this.log = config.log;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
async generateMessageObject(command) {
|
|
23
|
+
winston.debug("(telegram) [MessageHandler] command: ", command);
|
|
24
|
+
let tiledeskCommandMessage = command.message;
|
|
25
|
+
tiledeskCommandMessage.recipient = this.tiledeskChannelMessage.recipient;
|
|
26
|
+
|
|
27
|
+
return tiledeskCommandMessage;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
module.exports = { MessageHandler }
|