@tiledesk/tiledesk-whatsapp-connector 0.1.0

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.
@@ -0,0 +1,168 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+
4
+ <head>
5
+ <meta charset="utf-8">
6
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
7
+ <meta name="viewport" content="width=device-width, initial-scale=1">
8
+
9
+ <!-- Latest compiled and minified CSS -->
10
+ <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css"
11
+ integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous">
12
+
13
+ <!-- Optional theme -->
14
+ <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap-theme.min.css"
15
+ integrity="sha384-6pzBo3FDv/PJ8r2KRkGHifhEocL+1X2rVCTTkUfGk7/0pbek5mMa1upzvWbrUbOZ" crossorigin="anonymous">
16
+
17
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
18
+
19
+ <script src="//code.jquery.com/jquery-1.12.0.min.js"></script>
20
+ <script src="//code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
21
+
22
+ <!-- Latest compiled and minified JavaScript -->
23
+ <script src="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"
24
+ integrity="sha384-aJ21OjlMXNL5UyIl/XNwTMqvzeRMZH2w8c5cRVpzpU8Y5bApTppSuUkhZXN0VxHd" crossorigin="anonymous">
25
+ </script>
26
+
27
+ </head>
28
+
29
+ <body>
30
+
31
+ <div style="padding: 100px 230px; background-color: #efefef; min-width: 800px; display: flex; justify-content: center;" >
32
+
33
+ <div style="background-color: white; border-radius: 8px; padding: 20px; box-shadow: 0px 0px 5px 0px #cfcfcf; min-width: 800px;">
34
+
35
+ <div>
36
+
37
+ <div style="display: flex; flex-direction: row; align-items: center;">
38
+
39
+ <div style="margin-right: 80px;">
40
+ <img width="130" height="auto" style="margin-top: 6px;" src="https://upload.wikimedia.org/wikipedia/commons/thumb/6/6b/WhatsApp.svg/479px-WhatsApp.svg.png" alt="..." class="img-rounded">
41
+ </div>
42
+
43
+ <div>
44
+
45
+ <h1 style="margin-top: 0px; margin-bottom: 2px; min-width: 500px;">WhatsApp Business (Test)</h1>
46
+ <h7 style="color: rgb(140, 140, 140);">by Tiledesk (v. 2.0.2)</h7>
47
+
48
+ {{#if wab_token}}
49
+ <div style="margin-top: 20px;">
50
+ <h7 style="color: rgb(140, 140, 140);">The Whatsapp Business App is configured on your Tildesk project.</h7>
51
+ <form action="./disconnect" method="post">
52
+ <input type="hidden" name="project_id" value="{{ project_id }}">
53
+ <input type="hidden" name="token" value="{{ token }}">
54
+ <input type="hidden" name="subscription_id" value="{{ subscription_id }}">
55
+ <input type="submit" class="btn btn-danger" style="margin-top: 10px; width: 160px;" value="Disconnect">
56
+ </form>
57
+ </div>
58
+ {{/if}}
59
+
60
+ </div>
61
+ </div>
62
+
63
+ <!--
64
+ <button onClick="javascript:window.open('https://gethelp.tiledesk.com/articles/telegram/', '_blank');" class="btn btn- primary">View Documentation</button>
65
+ -->
66
+
67
+ <div style="margin-top: 40px; padding: 20px; background-color: aliceblue; border-radius: 8px; min-width: 600px;">
68
+ <h7>Receive Whatsapp bot conversations in your Tiledesk dashboard. Seamlessly Chat with your targeted audience on Whatsapp right from the Tiledesk dashboard.</h7>
69
+ <ul>
70
+ <li>
71
+ <h7>Integrate your Whatsapp number with Tiledesk.</h7>
72
+ </li>
73
+ <li>
74
+ <h7>Once a chat is initiated on your Whatsapp number, receive an alert on your Tiledesk account.</h7>
75
+ </li>
76
+ <li>
77
+ <h7>Enable instant messaging and answer multiple conversations - everything from Tiledesk account.</h7>
78
+ </li>
79
+ </ul>
80
+ </div>
81
+
82
+ <div style="margin-top: 10px;">
83
+ <a href="https://gethelp.tiledesk.com/" target="_blank">View documentation</a>
84
+ </div>
85
+
86
+
87
+ <hr>
88
+
89
+ <div>
90
+ <h4>Your Configuration</h4>
91
+
92
+ <div style="min-width: 600px">
93
+ <form action="./update" method="post">
94
+
95
+ <div class="form-group" style="width: 490px;">
96
+ <label style="margin-bottom: 0px;" for="proxy_url">Webhook Endpoint
97
+ <a href="https://gethelp.tiledesk.com/" target="_blank"><span style="margin-left: 10px;"><i class="fa fa-question-circle" style="color: #337ab7;"></i></span></a></label>
98
+ <p style="margin-bottom: 5px; font-size: 12px; color: #a7a7a7;">Copy this URL in the Facebook Developer Dashboad. See documentation for more info.</p>
99
+ <div style="display: flex; flex-direction: row; justify-content: space-between">
100
+ <div style="width: 400px;">
101
+ <input type="text" readonly class="form-control" name="proxy_url" id="proxy_url"
102
+ value="{{ proxy_url}}">
103
+ </div>
104
+ <div style="width: 80px;">
105
+ <input type="button" class="btn btn-primary" style="width: 100%;"
106
+ onclick="copyTextToClipboard(this, document.getElementById('proxy_url').value)"
107
+ value="Copy"></input>
108
+ </div>
109
+
110
+ </div>
111
+ </div>
112
+
113
+ <div class="form-group" style="width: 400px;">
114
+ <label for="wab_token">Whatsapp Token</label>
115
+ <input type="text" class="form-control" name="wab_token" value="{{ wab_token }}"
116
+ placeholder="Enter the Whatsapp Token">
117
+ </div>
118
+
119
+ <div class="form-group" style="width: 400px;">
120
+ <label for="verify_token">Verify Token</label>
121
+ <input type="password" class="form-control" name="verify_token" value="{{ verify_token }}"
122
+ placeholder="Enter your Verify Token">
123
+ </div>
124
+
125
+ <input type="hidden" name="project_id" value="{{ project_id }}" />
126
+ <input type="hidden" name="token" value="{{ token }}" />
127
+
128
+ {{#if wab_token}}
129
+ <div style="width: 400px; text-align: right;">
130
+ <input type="submit" class="btn btn-primary" style="width: 35%;" value="Update">
131
+ </div>
132
+ {{else}}
133
+ <div style="width: 400px; text-align: right;">
134
+ <input type="submit" class="btn btn-primary" style="width: 35%;" value="Connect">
135
+ </div>
136
+ {{/if}}
137
+
138
+ </form>
139
+
140
+
141
+ </div>
142
+ </div>
143
+
144
+ </div>
145
+
146
+ </div>
147
+ </div>
148
+
149
+ <script>
150
+
151
+ function copyTextToClipboard(btn, text) {
152
+ console.log("Button clicked")
153
+ // if (!navigator.clipboard) {
154
+ // fallbackCopyTextToClipboard(text);
155
+ // return;
156
+ // }
157
+ btn.value = "Copied!"
158
+ navigator.clipboard.writeText(text).then(function () {
159
+ console.log('Async: Copied to clipboard!');
160
+
161
+ }, function (err) {
162
+ console.error('Async: Could not copy text: ', err);
163
+ });
164
+ }
165
+ </script>
166
+
167
+
168
+ </body>
@@ -0,0 +1,412 @@
1
+ var assert = require('assert');
2
+ const { TiledeskWhatsappTranslator } = require('../tiledesk/TiledeskWhatsappTranslator');
3
+ const log = false;
4
+
5
+
6
+ describe('Test Translator\n', function() {
7
+
8
+ // TILEDESK >>>>>>>>> WHATSAPP
9
+
10
+ it("Translates a TEXT message from Tiledesk to Whatsapp", function() {
11
+ let tiledeskChannelMessage = {
12
+ text: 'Test Message',
13
+ recipient: 'support-group-62c3f10152dc7400352bab0d-86a2293e-c7dc-4e62-89b1-ffe9bba7fd59-wab-104777398965560-tel393484506627',
14
+ attributes: {
15
+ userFullname: 'John Doe'
16
+ }
17
+ }
18
+ let whatsapp_receiver = tiledeskChannelMessage.recipient.substring(tiledeskChannelMessage.recipient.lastIndexOf("tel") + 1)
19
+
20
+ const tlr = new TiledeskWhatsappTranslator({ channelMessage: tiledeskChannelMessage });
21
+ assert(tlr != null);
22
+ const whatsappJsonMessage = tlr.toWhatsapp(whatsapp_receiver);
23
+ assert(whatsappJsonMessage != null);
24
+ assert(whatsappJsonMessage.messaging_product === TiledeskWhatsappTranslator.WHATSAPP_MESSAGING_PRODUCT);
25
+ assert(whatsappJsonMessage.to === whatsapp_receiver);
26
+ assert(whatsappJsonMessage.text);
27
+ assert(whatsappJsonMessage.text.body === tiledeskChannelMessage.text);
28
+ if (log) {
29
+ console.log("(test) whatsappJsonMessage: ", whatsappJsonMessage);
30
+ }
31
+ })
32
+
33
+
34
+ it("Translates a message containing an IMAGE from Tiledesk to Whatsapp", function() {
35
+
36
+ let tiledeskChannelMessage = {
37
+ text: 'Image Caption', // can be empty --> ""
38
+ recipient: 'support-group-62c3f10152dc7400352bab0d-86a2293e-c7dc-4e62-89b1-ffe9bba7fd59-wab-104777398965560-tel393484506627',
39
+ metadata: {
40
+ src: 'https://fakeimageurl.com/',
41
+ type: 'image/png',
42
+ },
43
+ attributes: {
44
+ userFullname: 'John Doe'
45
+ }
46
+ }
47
+ let whatsapp_receiver = tiledeskChannelMessage.recipient.substring(tiledeskChannelMessage.recipient.lastIndexOf("tel") + 3)
48
+
49
+ const tlr = new TiledeskWhatsappTranslator({ channelMessage: tiledeskChannelMessage });
50
+ assert(tlr != null);
51
+ const whatsappJsonMessage = tlr.toWhatsapp(whatsapp_receiver);
52
+ assert(whatsappJsonMessage != null);
53
+ assert(whatsappJsonMessage.messaging_product === TiledeskWhatsappTranslator.WHATSAPP_MESSAGING_PRODUCT);
54
+ assert(whatsappJsonMessage.to === whatsapp_receiver);
55
+ assert(!whatsappJsonMessage.text);
56
+ assert(whatsappJsonMessage.image);
57
+ assert(whatsappJsonMessage.image.link === tiledeskChannelMessage.metadata.src);
58
+ assert(whatsappJsonMessage.image.caption === tiledeskChannelMessage.text);
59
+ if (log) {
60
+ console.log("(test) whatsappJsonMessage: ", whatsappJsonMessage);
61
+ }
62
+ })
63
+
64
+
65
+ it("Translates a message containing a VIDEO message from Tiledesk to Whatsapp", function() {
66
+
67
+ let tiledeskChannelMessage = {
68
+ text: 'Video Caption', // can be empty --> ""
69
+ recipient: 'support-group-62c3f10152dc7400352bab0d-86a2293e-c7dc-4e62-89b1-ffe9bba7fd59-wab-104777398965560-393484506627',
70
+ metadata: {
71
+ src: 'https://fakevideourl.com/',
72
+ type: 'video/png',
73
+ },
74
+ attributes: {
75
+ userFullname: 'John Doe'
76
+ }
77
+ }
78
+ let whatsapp_receiver = tiledeskChannelMessage.recipient.substring(tiledeskChannelMessage.recipient.lastIndexOf("tel") + 3)
79
+
80
+ const tlr = new TiledeskWhatsappTranslator({ channelMessage: tiledeskChannelMessage });
81
+ assert(tlr != null);
82
+ const whatsappJsonMessage = tlr.toWhatsapp(whatsapp_receiver);
83
+ assert(whatsappJsonMessage != null);
84
+ assert(whatsappJsonMessage.messaging_product === TiledeskWhatsappTranslator.WHATSAPP_MESSAGING_PRODUCT);
85
+ assert(whatsappJsonMessage.to === whatsapp_receiver);
86
+ assert(!whatsappJsonMessage.text);
87
+ assert(whatsappJsonMessage.document);
88
+ assert(whatsappJsonMessage.document.link === tiledeskChannelMessage.metadata.src);
89
+ assert(whatsappJsonMessage.document.caption === tiledeskChannelMessage.text);
90
+ if (log) {
91
+ console.log("(test) whatsappJsonMessage: ", whatsappJsonMessage);
92
+ }
93
+ })
94
+
95
+
96
+ it("Translates a message containing a DOCUMENT from Tiledesk to Whatsapp", function() {
97
+
98
+ let tiledeskChannelMessage = {
99
+ text: 'Document Caption', // can be empty --> ""
100
+ recipient: 'support-group-62c3f10152dc7400352bab0d-86a2293e-c7dc-4e62-89b1-ffe9bba7fd59-wab-104777398965560-tel393484506627',
101
+ metadata: {
102
+ src: 'https://fakedocumenturl.com/',
103
+ type: 'application/pdf',
104
+ },
105
+ attributes: {
106
+ userFullname: 'John Doe'
107
+ }
108
+ }
109
+ let whatsapp_receiver = tiledeskChannelMessage.recipient.substring(tiledeskChannelMessage.recipient.lastIndexOf("tel") + 3)
110
+
111
+ const tlr = new TiledeskWhatsappTranslator({ channelMessage: tiledeskChannelMessage });
112
+ assert(tlr != null);
113
+ const whatsappJsonMessage = tlr.toWhatsapp(whatsapp_receiver);
114
+ assert(whatsappJsonMessage != null);
115
+ assert(whatsappJsonMessage.messaging_product === TiledeskWhatsappTranslator.WHATSAPP_MESSAGING_PRODUCT);
116
+ assert(whatsappJsonMessage.to === whatsapp_receiver);
117
+ assert(!whatsappJsonMessage.text);
118
+ assert(whatsappJsonMessage.document);
119
+ assert(whatsappJsonMessage.document.link === tiledeskChannelMessage.metadata.src);
120
+ assert(whatsappJsonMessage.document.caption === tiledeskChannelMessage.text);
121
+ if (log) {
122
+ console.log("(test) whatsappJsonMessage: ", whatsappJsonMessage);
123
+ }
124
+ })
125
+
126
+
127
+ it("Translates a message with BUTTONS (max. 3) from Tiledesk to Whatsapp", function() {
128
+
129
+ let tiledeskChannelMessage = {
130
+ text: 'Test Message',
131
+ recipient: 'support-group-62c3f10152dc7400352bab0d-86a2293e-c7dc-4e62-89b1-ffe9bba7fd59-wab-104777398965560-tel393484506627',
132
+ attributes: {
133
+ attachment: {
134
+ buttons: [
135
+ { type: 'text', value: 'Button 1' },
136
+ { type: 'text', value: 'Button 2' },
137
+ { type: 'action', value: '↩︎ Back', action: 'main_menu' }
138
+ ]
139
+ }
140
+ }
141
+ }
142
+ let whatsapp_receiver = tiledeskChannelMessage.recipient.substring(tiledeskChannelMessage.recipient.lastIndexOf("tel") + 3)
143
+
144
+ const tlr = new TiledeskWhatsappTranslator({ channelMessage: tiledeskChannelMessage });
145
+ assert(tlr != null);
146
+ const whatsappJsonMessage = tlr.toWhatsapp(whatsapp_receiver);
147
+ assert(whatsappJsonMessage != null);
148
+ assert(whatsappJsonMessage.messaging_product === TiledeskWhatsappTranslator.WHATSAPP_MESSAGING_PRODUCT);
149
+ assert(!whatsappJsonMessage.text);
150
+ assert(whatsappJsonMessage.type === "interactive");
151
+ assert(whatsappJsonMessage.interactive);
152
+ assert(whatsappJsonMessage.interactive.type === "button");
153
+ assert(whatsappJsonMessage.interactive.body.text === tiledeskChannelMessage.text);
154
+ assert(whatsappJsonMessage.interactive.action);
155
+ assert(whatsappJsonMessage.interactive.action.buttons.length === 3);
156
+ tiledeskChannelMessage.attributes.attachment.buttons.forEach((button, index) => {
157
+ assert(button.value === whatsappJsonMessage.interactive.action.buttons[index].reply.title)
158
+ })
159
+ if (log) {
160
+ console.log("(test) whatsappJsonMessage: ", whatsappJsonMessage);
161
+ }
162
+ })
163
+
164
+
165
+ it("Translates a message with BUTTONS (min. 4 - max 10) from Tiledesk to Whatsapp", function() {
166
+
167
+ let tiledeskChannelMessage = {
168
+ text: 'Test Message',
169
+ recipient: 'support-group-62c3f10152dc7400352bab0d-86a2293e-c7dc-4e62-89b1-ffe9bba7fd59-wab-104777398965560-tel393484506627',
170
+ attributes: {
171
+ attachment: {
172
+ buttons: [
173
+ { type: 'text', value: 'Button 1' },
174
+ { type: 'text', value: 'Button 2' },
175
+ { type: 'text', value: 'Button 3' },
176
+ { type: 'text', value: 'Button 4' },
177
+ { type: 'action', value: '↩︎ Back', action: 'main_menu' }
178
+ ]
179
+ }
180
+ }
181
+ }
182
+ let whatsapp_receiver = tiledeskChannelMessage.recipient.substring(tiledeskChannelMessage.recipient.lastIndexOf("tel") + 3)
183
+
184
+ const tlr = new TiledeskWhatsappTranslator({ channelMessage: tiledeskChannelMessage });
185
+ assert(tlr != null);
186
+ const whatsappJsonMessage = tlr.toWhatsapp(whatsapp_receiver);
187
+ assert(whatsappJsonMessage != null);
188
+ assert(whatsappJsonMessage.messaging_product === TiledeskWhatsappTranslator.WHATSAPP_MESSAGING_PRODUCT);
189
+ assert(!whatsappJsonMessage.text);
190
+ assert(whatsappJsonMessage.type === "interactive");
191
+ assert(whatsappJsonMessage.interactive);
192
+ assert(whatsappJsonMessage.interactive.type === "list");
193
+ assert(whatsappJsonMessage.interactive.body.text === tiledeskChannelMessage.text);
194
+ assert(whatsappJsonMessage.interactive.action);
195
+ assert(whatsappJsonMessage.interactive.action.button === 'Choose an option');
196
+ assert(whatsappJsonMessage.interactive.action.sections);
197
+ assert(whatsappJsonMessage.interactive.action.sections[0].rows.length === 4);
198
+ assert(whatsappJsonMessage.interactive.action.sections[1].rows.length === 1);
199
+ if (log) {
200
+ console.log("(test) tiledeskJsonMessage: ", tiledeskJsonMessage);
201
+ }
202
+ })
203
+
204
+
205
+ // WHATSAPP >>>>>>>>> TILEDESK
206
+
207
+ it("Translates a TEXT message from Whatsapp to Tiledesk", function() {
208
+
209
+ let whatsappChannelMessage = {
210
+ text: {
211
+ body: "Test Message"
212
+ },
213
+ type: "text"
214
+ }
215
+ let fullname = "John Doe"; // from whatsapp contacts
216
+
217
+ const tlr = new TiledeskWhatsappTranslator({ channelMessage: whatsappChannelMessage });
218
+ assert(tlr != null);
219
+ const tiledeskJsonMessage = tlr.toTiledesk(fullname, null)
220
+ assert(tiledeskJsonMessage != null);
221
+ assert(tiledeskJsonMessage.channel.name === TiledeskWhatsappTranslator.CHANNEL_NAME);
222
+ assert(tiledeskJsonMessage.text === whatsappChannelMessage.text.body);
223
+ assert(tiledeskJsonMessage.senderFullname === fullname);
224
+ if (log) {
225
+ console.log("(test) tiledeskJsonMessage: ", tiledeskJsonMessage);
226
+ }
227
+ })
228
+
229
+
230
+ it("Translates a message with QUICK REPLY (list_reply) from Whatsapp to Tiledesk", function() {
231
+
232
+ let whatsappChannelMessage = {
233
+ type: "interactive",
234
+ interactive: {
235
+ type: "list_reply",
236
+ list_reply: {
237
+ id: "quick_Tiledesk Overview",
238
+ title: "Tiledesk Overview"
239
+ }
240
+ }
241
+ }
242
+ let fullname = "John Doe"; // from whatsapp contacts
243
+
244
+ const tlr = new TiledeskWhatsappTranslator({ channelMessage: whatsappChannelMessage });
245
+ assert(tlr != null);
246
+ const tiledeskJsonMessage = tlr.toTiledesk(fullname, null)
247
+ assert(tiledeskJsonMessage != null);
248
+ assert(tiledeskJsonMessage.channel.name === TiledeskWhatsappTranslator.CHANNEL_NAME);
249
+ assert(tiledeskJsonMessage.text === whatsappChannelMessage.interactive.list_reply.title);
250
+ assert(tiledeskJsonMessage.senderFullname === fullname);
251
+ if (log) {
252
+ console.log("(test) tiledeskJsonMessage: ", tiledeskJsonMessage);
253
+ }
254
+ })
255
+
256
+
257
+ it("Translates a message with ACTION BUTTON (list_reply) from Whatsapp to Tiledesk", function() {
258
+
259
+ let whatsappChannelMessage = {
260
+ type: "interactive",
261
+ interactive: {
262
+ type: "list_reply",
263
+ list_reply: {
264
+ id: "action_main_menu",
265
+ title: "↩︎ Back"
266
+ }
267
+ }
268
+ }
269
+ let fullname = "John Doe"; // from whatsapp contacts
270
+
271
+ const tlr = new TiledeskWhatsappTranslator({ channelMessage: whatsappChannelMessage });
272
+ assert(tlr != null);
273
+ const tiledeskJsonMessage = tlr.toTiledesk(fullname, null)
274
+ assert(tiledeskJsonMessage != null);
275
+ assert(tiledeskJsonMessage.channel.name === TiledeskWhatsappTranslator.CHANNEL_NAME);
276
+ assert(tiledeskJsonMessage.text === ' ');
277
+ assert(tiledeskJsonMessage.type === 'text');
278
+ assert(tiledeskJsonMessage.attributes);
279
+ assert(tiledeskJsonMessage.attributes.action);
280
+ assert(tiledeskJsonMessage.attributes.action === whatsappChannelMessage.interactive.list_reply.id.substring(7));
281
+ assert(tiledeskJsonMessage.attributes.subtype);
282
+ assert(tiledeskJsonMessage.attributes.subtype === "info");
283
+ assert(tiledeskJsonMessage.senderFullname === fullname);
284
+
285
+ if (log) {
286
+ console.log("(test) tiledeskJsonMessage: ", tiledeskJsonMessage);
287
+ }
288
+
289
+ })
290
+
291
+
292
+ it("Translates a message with QUICK REPLY (button_reply) from Whatsapp to Tiledesk", function() {
293
+
294
+ let whatsappChannelMessage = {
295
+ type: "interactive",
296
+ interactive: {
297
+ type: "button_reply",
298
+ button_reply: {
299
+ id: "quick_Cloud pricing",
300
+ title: "Cloud pricing"
301
+ }
302
+ }
303
+ }
304
+ let fullname = "John Doe"; // from whatsapp contacts
305
+
306
+ const tlr = new TiledeskWhatsappTranslator({ channelMessage: whatsappChannelMessage });
307
+ assert(tlr != null);
308
+ const tiledeskJsonMessage = tlr.toTiledesk(fullname, null)
309
+ assert(tiledeskJsonMessage != null);
310
+ assert(tiledeskJsonMessage.channel.name === TiledeskWhatsappTranslator.CHANNEL_NAME);
311
+ assert(tiledeskJsonMessage.text === whatsappChannelMessage.interactive.button_reply.title);
312
+ assert(tiledeskJsonMessage.senderFullname === fullname);
313
+ if (log) {
314
+ console.log("(test) tiledeskJsonMessage: ", tiledeskJsonMessage);
315
+ }
316
+ })
317
+
318
+
319
+ it("Translates a message with ACTION BUTTON (button_reply) from Whatsapp to Tiledesk", function() {
320
+
321
+ let whatsappChannelMessage = {
322
+ type: "interactive",
323
+ interactive: {
324
+ type: "button_reply",
325
+ button_reply: {
326
+ id: "action_main_menu",
327
+ title: "↩︎ Back"
328
+ }
329
+ }
330
+ }
331
+ let fullname = "John Doe"; // from whatsapp contacts
332
+
333
+ const tlr = new TiledeskWhatsappTranslator({ channelMessage: whatsappChannelMessage });
334
+ assert(tlr != null);
335
+ const tiledeskJsonMessage = tlr.toTiledesk(fullname, null)
336
+ assert(tiledeskJsonMessage != null);
337
+ assert(tiledeskJsonMessage.channel.name === TiledeskWhatsappTranslator.CHANNEL_NAME);
338
+ assert(tiledeskJsonMessage.text === ' ');
339
+ assert(tiledeskJsonMessage.type === 'text');
340
+ assert(tiledeskJsonMessage.attributes);
341
+ assert(tiledeskJsonMessage.attributes.action);
342
+ assert(tiledeskJsonMessage.attributes.action === whatsappChannelMessage.interactive.button_reply.id.substring(7));
343
+ assert(tiledeskJsonMessage.attributes.subtype);
344
+ assert(tiledeskJsonMessage.attributes.subtype === 'info');
345
+ assert(tiledeskJsonMessage.senderFullname === fullname);
346
+ if (log) {
347
+ console.log("(test) tiledeskJsonMessage: ", tiledeskJsonMessage);
348
+ }
349
+ })
350
+
351
+
352
+ it("Translates a message containing an IMAGE from Whatsapp to Tiledesk", function() {
353
+ let whatsappChannelMessage = {
354
+ type: "image",
355
+ image: {
356
+ caption: "Image Caption" // optional
357
+ }
358
+ }
359
+ let fullname = "John Doe";
360
+ let media_url = "https://fakeimageurl.com/"
361
+
362
+ const tlr = new TiledeskWhatsappTranslator({ channelMessage: whatsappChannelMessage });
363
+ assert(tlr != null);
364
+ const tiledeskJsonMessage = tlr.toTiledesk(fullname, media_url);
365
+ assert(tiledeskJsonMessage != null);
366
+ if (log) {
367
+ console.log("(test) tiledeskJsonMessage: ", tiledeskJsonMessage);
368
+ }
369
+ })
370
+
371
+
372
+ it("Translates a message containing a VIDEO from Whatsapp to Tiledesk", function() {
373
+ let whatsappChannelMessage = {
374
+ type: "video",
375
+ video: {
376
+ caption: "Video Caption" // optional
377
+ }
378
+ }
379
+ let fullname = "John Doe";
380
+ let media_url = "https://fakeimageurl.com/"
381
+
382
+ const tlr = new TiledeskWhatsappTranslator({ channelMessage: whatsappChannelMessage });
383
+ assert(tlr != null);
384
+ const tiledeskJsonMessage = tlr.toTiledesk(fullname, media_url);
385
+ assert(tiledeskJsonMessage != null);
386
+ if (log) {
387
+ console.log("(test) tiledeskJsonMessage: ", tiledeskJsonMessage);
388
+ }
389
+ })
390
+
391
+
392
+ it("Translates a message containing a DOCUMENT from Whatsapp to Tiledesk", function() {
393
+ let whatsappChannelMessage = {
394
+ type: "document",
395
+ document: {
396
+ caption: "Document Caption" // optional
397
+ }
398
+ }
399
+ let fullname = "John Doe";
400
+ let media_url = "https://fakedocumenturl.com/"
401
+
402
+ const tlr = new TiledeskWhatsappTranslator({ channelMessage: whatsappChannelMessage });
403
+ assert(tlr != null);
404
+ const tiledeskJsonMessage = tlr.toTiledesk(fullname, media_url);
405
+ assert(tiledeskJsonMessage != null);
406
+ if (log) {
407
+ console.log("(test) tiledeskJsonMessage: ", tiledeskJsonMessage);
408
+ }
409
+ })
410
+
411
+
412
+ })