@chat21/chat21-ionic 3.4.27-rc2 → 3.4.27-rc21

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.
Files changed (154) hide show
  1. package/CHANGELOG.md +65 -0
  2. package/angular.json +1 -0
  3. package/package.json +1 -1
  4. package/src/app/app.component.html +3 -1
  5. package/src/app/app.component.ts +74 -24
  6. package/src/app/chatlib/conversation-detail/conversation-content/conversation-content.component.scss +3 -3
  7. package/src/app/chatlib/conversation-detail/conversation-content/conversation-content.component.ts +1 -1
  8. package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.html +1 -1
  9. package/src/app/chatlib/conversation-detail/message/avatar/avatar.component.html +1 -1
  10. package/src/app/chatlib/conversation-detail/message/avatar/avatar.component.ts +4 -4
  11. package/src/app/chatlib/conversation-detail/message/return-receipt/return-receipt.component.scss +3 -3
  12. package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.html +9 -9
  13. package/src/app/components/bubbleMessageInfo-popover/bubbleinfo-popover.component.html +1 -1
  14. package/src/app/components/canned-response/canned-response.component.html +2 -2
  15. package/src/app/components/canned-response/canned-response.component.scss +0 -2
  16. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.html +8 -8
  17. package/src/app/components/conversation-detail/message-text-area/message-text-area.component.html +23 -0
  18. package/src/app/components/conversation-detail/message-text-area/message-text-area.component.scss +30 -0
  19. package/src/app/components/conversation-detail/message-text-area/message-text-area.component.ts +35 -7
  20. package/src/app/components/conversation-info/info-content/info-content.component.ts +2 -2
  21. package/src/app/components/conversation-info/info-group/info-group.component.ts +23 -21
  22. package/src/app/components/conversations-list/header-conversations-list/header-conversations-list.component.html +1 -1
  23. package/src/app/components/conversations-list/header-conversations-list/header-conversations-list.component.ts +5 -1
  24. package/src/app/components/copilot-popover/copilot-popover.component.html +1 -1
  25. package/src/app/components/navbar/navbar.component.html +3 -3
  26. package/src/app/components/navbar/navbar.component.ts +29 -38
  27. package/src/app/components/project-item/project-item.component.ts +11 -11
  28. package/src/app/components/sidebar/sidebar.component.html +67 -47
  29. package/src/app/components/sidebar/sidebar.component.ts +110 -117
  30. package/src/app/components/sidebar-user-details/sidebar-user-details.component.html +4 -4
  31. package/src/app/components/sidebar-user-details/sidebar-user-details.component.ts +17 -14
  32. package/src/app/modals/create-ticket/create-ticket.page.html +6 -6
  33. package/src/app/modals/create-ticket/create-ticket.page.ts +4 -4
  34. package/src/app/modals/loader-preview/loader-preview.page.ts +1 -1
  35. package/src/app/modals/send-whatsapp-template/send-whatsapp-template.page.scss +1 -1
  36. package/src/app/pages/conversation-detail/conversation-detail.page.html +3 -1
  37. package/src/app/pages/conversation-detail/conversation-detail.page.scss +1 -1
  38. package/src/app/pages/conversation-detail/conversation-detail.page.ts +47 -5
  39. package/src/app/pages/conversations-list/conversations-list.page.html +2 -0
  40. package/src/app/pages/conversations-list/conversations-list.page.ts +48 -10
  41. package/src/app/pages/profile-info/profile-info.page.ts +3 -3
  42. package/src/app/services/brand/brand.service.ts +5 -5
  43. package/src/app/services/global-settings/global-settings.service.ts +12 -3
  44. package/src/app/services/nav-proxy.service.ts +0 -1
  45. package/src/app/services/triggerEvents/triggerEvents.ts +28 -0
  46. package/src/app/services/websocket/websocket-js.ts +95 -77
  47. package/src/app/shared/shared.module.ts +11 -2
  48. package/src/app/utils/globals.ts +2 -0
  49. package/src/app/utils/permissions.constants.ts +14 -11
  50. package/src/app/utils/utils-resources.ts +8 -7
  51. package/src/assets/i18n/ar.json +11 -1
  52. package/src/assets/i18n/az.json +11 -1
  53. package/src/assets/i18n/de.json +11 -1
  54. package/src/assets/i18n/en.json +11 -1
  55. package/src/assets/i18n/es.json +11 -1
  56. package/src/assets/i18n/fr.json +11 -1
  57. package/src/assets/i18n/it.json +13 -3
  58. package/src/assets/i18n/kk.json +11 -1
  59. package/src/assets/i18n/pt.json +11 -1
  60. package/src/assets/i18n/ru.json +11 -1
  61. package/src/assets/i18n/sr.json +11 -1
  62. package/src/assets/i18n/sv.json +11 -1
  63. package/src/assets/i18n/tr.json +11 -1
  64. package/src/assets/i18n/uk.json +11 -1
  65. package/src/assets/i18n/uz.json +12 -1
  66. package/src/assets/js/agentDesktop-sdk.js +55 -0
  67. package/src/chat-config-template.json +1 -0
  68. package/src/chat-config.json +1 -0
  69. package/src/chat21-core/providers/tiledesk/tiledesk-auth.service.ts +3 -0
  70. package/src/chat21-core/utils/constants.ts +2 -2
  71. package/src/chat21-core/utils/utils.ts +16 -2
  72. /package/src/assets/{images → img}/channel_icons/chat21.svg +0 -0
  73. /package/src/assets/{images → img}/channel_icons/direct.svg +0 -0
  74. /package/src/assets/{images → img}/channel_icons/email-logo.svg +0 -0
  75. /package/src/assets/{images → img}/channel_icons/form-logo_v2.svg +0 -0
  76. /package/src/assets/{images → img}/channel_icons/group.svg +0 -0
  77. /package/src/assets/{images → img}/channel_icons/messenger-logo.svg +0 -0
  78. /package/src/assets/{images → img}/channel_icons/telegram-logo.svg +0 -0
  79. /package/src/assets/{images → img}/channel_icons/voice.svg +0 -0
  80. /package/src/assets/{images → img}/channel_icons/whatsapp-logo.svg +0 -0
  81. /package/src/assets/{images → img}/default-avatar-x-select.png +0 -0
  82. /package/src/assets/{images → img}/f21ico-done.svg +0 -0
  83. /package/src/assets/{images → img}/f21ico-done_all.svg +0 -0
  84. /package/src/assets/{images → img}/f21ico-schedule.svg +0 -0
  85. /package/src/assets/{images → img}/file-alt-solid.png +0 -0
  86. /package/src/assets/{images → img}/icons/copilot.svg +0 -0
  87. /package/src/assets/{images → img}/json-file.svg +0 -0
  88. /package/src/assets/{images → img}/language_flag/ar.png +0 -0
  89. /package/src/assets/{images → img}/language_flag/az.png +0 -0
  90. /package/src/assets/{images → img}/language_flag/bg.png +0 -0
  91. /package/src/assets/{images → img}/language_flag/ca.png +0 -0
  92. /package/src/assets/{images → img}/language_flag/cs.png +0 -0
  93. /package/src/assets/{images → img}/language_flag/da.png +0 -0
  94. /package/src/assets/{images → img}/language_flag/de.png +0 -0
  95. /package/src/assets/{images → img}/language_flag/el.png +0 -0
  96. /package/src/assets/{images → img}/language_flag/en.png +0 -0
  97. /package/src/assets/{images → img}/language_flag/es.png +0 -0
  98. /package/src/assets/{images → img}/language_flag/fa.png +0 -0
  99. /package/src/assets/{images → img}/language_flag/fi.png +0 -0
  100. /package/src/assets/{images → img}/language_flag/fr.png +0 -0
  101. /package/src/assets/{images → img}/language_flag/he.png +0 -0
  102. /package/src/assets/{images → img}/language_flag/hi.png +0 -0
  103. /package/src/assets/{images → img}/language_flag/hr.png +0 -0
  104. /package/src/assets/{images → img}/language_flag/hu.png +0 -0
  105. /package/src/assets/{images → img}/language_flag/id.png +0 -0
  106. /package/src/assets/{images → img}/language_flag/it.png +0 -0
  107. /package/src/assets/{images → img}/language_flag/ja.png +0 -0
  108. /package/src/assets/{images → img}/language_flag/kk.png +0 -0
  109. /package/src/assets/{images → img}/language_flag/ko.png +0 -0
  110. /package/src/assets/{images → img}/language_flag/ml-IN.png +0 -0
  111. /package/src/assets/{images → img}/language_flag/ne-NP.png +0 -0
  112. /package/src/assets/{images → img}/language_flag/nl.png +0 -0
  113. /package/src/assets/{images → img}/language_flag/no.png +0 -0
  114. /package/src/assets/{images → img}/language_flag/pl.png +0 -0
  115. /package/src/assets/{images → img}/language_flag/pt-BR.png +0 -0
  116. /package/src/assets/{images → img}/language_flag/pt.png +0 -0
  117. /package/src/assets/{images → img}/language_flag/ro.png +0 -0
  118. /package/src/assets/{images → img}/language_flag/ru.png +0 -0
  119. /package/src/assets/{images → img}/language_flag/sk.png +0 -0
  120. /package/src/assets/{images → img}/language_flag/sl.png +0 -0
  121. /package/src/assets/{images → img}/language_flag/sr.png +0 -0
  122. /package/src/assets/{images → img}/language_flag/sv.png +0 -0
  123. /package/src/assets/{images → img}/language_flag/ta.png +0 -0
  124. /package/src/assets/{images → img}/language_flag/th.png +0 -0
  125. /package/src/assets/{images → img}/language_flag/tr.png +0 -0
  126. /package/src/assets/{images → img}/language_flag/uk.png +0 -0
  127. /package/src/assets/{images → img}/language_flag/uz.png +0 -0
  128. /package/src/assets/{images → img}/language_flag/vi.png +0 -0
  129. /package/src/assets/{images → img}/language_flag/zh-CN.png +0 -0
  130. /package/src/assets/{images → img}/language_flag/zh-TW.png +0 -0
  131. /package/src/assets/{logos → img/logos}/chat21-logo.png +0 -0
  132. /package/src/assets/{logos → img/logos}/logo.png +0 -0
  133. /package/src/assets/{logos → img/logos}/tiledesk-logo_new_white.svg +0 -0
  134. /package/src/assets/{logos → img/logos}/tiledesk-solo-logo.png +0 -0
  135. /package/src/assets/{logos → img/logos}/tiledesk_logo.svg +0 -0
  136. /package/src/assets/{logos → img/logos}/tiledesk_logo_no_text.svg +0 -0
  137. /package/src/assets/{logos → img/logos}/tiledesk_logo_white_small.svg +0 -0
  138. /package/src/assets/{images → img}/no_conversation.jpg +0 -0
  139. /package/src/assets/{images → img}/no_image.png +0 -0
  140. /package/src/assets/{images → img}/no_image_user.png +0 -0
  141. /package/src/assets/{images → img}/pin.svg +0 -0
  142. /package/src/assets/{images → img}/pinned.svg +0 -0
  143. /package/src/assets/{images → img}/priority_icons/high.svg +0 -0
  144. /package/src/assets/{images → img}/priority_icons/high_v2.svg +0 -0
  145. /package/src/assets/{images → img}/priority_icons/low.svg +0 -0
  146. /package/src/assets/{images → img}/priority_icons/low_v2.svg +0 -0
  147. /package/src/assets/{images → img}/priority_icons/medium.svg +0 -0
  148. /package/src/assets/{images → img}/priority_icons/medium_v2.svg +0 -0
  149. /package/src/assets/{images → img}/priority_icons/urgent.svg +0 -0
  150. /package/src/assets/{images → img}/priority_icons/urgent_v2.svg +0 -0
  151. /package/src/assets/{images → img}/teammate-status/avaible.svg +0 -0
  152. /package/src/assets/{images → img}/teammate-status/inactive.svg +0 -0
  153. /package/src/assets/{images → img}/teammate-status/unavaible.svg +0 -0
  154. /package/src/assets/{images → img}/whatsapp_background.png +0 -0
@@ -8,14 +8,13 @@ import { LoggerInstance } from 'src/chat21-core/providers/logger/loggerInstance'
8
8
  export class WebSocketJs {
9
9
 
10
10
  public url;
11
- public onCreate;
12
- public onUpdate;
13
- public onOpen;
14
- public onData;
11
+ public onCreate?: Function;
12
+ public onUpdate?: Function;
13
+ public onOpen?: Function;
14
+ public onData?: Function;
15
15
  public ws;
16
16
  public topics;
17
17
  public callbacks;
18
- public readyState: number;
19
18
  // public userHasClosed: boolean;
20
19
 
21
20
  // HEARTBEAT https://github.com/zimv/websocket-heartbeat-js/blob/master/lib/index.js
@@ -23,13 +22,15 @@ export class WebSocketJs {
23
22
  private pongTimeoutId;
24
23
 
25
24
  public pingMsg = { action: "heartbeat", payload: { message: { text: "ping" } } }
26
-
27
25
  public pongMsg = { action: "heartbeat", payload: { message: { text: "pong" } } }
28
26
 
29
-
30
27
  public pongTimeout = 10000;
31
28
  public pingTimeout = 15000;
32
29
 
30
+ private reconnectAttempts = 0;
31
+ private readonly maxReconnectDelay = 30000;
32
+ private manuallyClosed = false;
33
+
33
34
  // nktest
34
35
  // startTimeMS = 0;
35
36
 
@@ -78,7 +79,7 @@ export class WebSocketJs {
78
79
  this.callbacks.set(topic, { onCreate: onCreate, onUpdate: onUpdate, onData: onData });
79
80
  this.logger.log('[WEBSOCKET-JS] - CALLBACK-SET - callbacks', this.callbacks);
80
81
 
81
- if (this.ws && this.ws.readyState == 1) {
82
+ if (this.ws && this.ws.readyState == WebSocket.OPEN) {
82
83
  this.logger.log('[WEBSOCKET-JS] - REF - READY STATE ', this.ws.readyState);
83
84
  this.logger.log('[WEBSOCKET-JS] - REF - READY STATE = 1 > SUBSCRIBE TO TOPICS ');
84
85
 
@@ -126,10 +127,8 @@ export class WebSocketJs {
126
127
  method: undefined
127
128
  },
128
129
  };
129
- var str = JSON.stringify(message);
130
- this.logger.log("[WEBSOCKET-JS] - SUBSCRIBE TO TOPIC - STRING TO SEND " + str, " FOR SUBSCRIBE TO TOPIC: ", topic);
131
-
132
- this.send(str, `SUBSCRIBE to ${topic}`);
130
+ this.logger.log("[WEBSOCKET-JS] - SUBSCRIBE TO TOPIC - DATA TO SEND ", message, " FOR SUBSCRIBE TO TOPIC: ", topic);
131
+ this.send(message, `SUBSCRIBE to ${topic}`);
133
132
  }
134
133
 
135
134
  // -----------------------------------------------------------------------------------------------------
@@ -170,12 +169,11 @@ export class WebSocketJs {
170
169
  method: undefined
171
170
  },
172
171
  };
173
- var str = JSON.stringify(message);
174
- this.logger.log("[WEBSOCKET-JS] - UN-SUBSCRIBE str " + str);
172
+ this.logger.log("[WEBSOCKET-JS] - UN-SUBSCRIBE " + message);
175
173
 
176
- if (this.ws && this.ws.readyState == 1) {
177
- this.logger.log("[WEBSOCKET-JS] - UN-SUBSCRIBE TO TOPIC - STRING TO SEND " + str, " FOR UNSUBSCRIBE TO TOPIC: ", topic);
178
- this.send(str, `UNSUSCRIBE from ${topic}`);
174
+ if (this.ws && this.ws.readyState == WebSocket.OPEN) {
175
+ this.logger.log("[WEBSOCKET-JS] - UN-SUBSCRIBE TO TOPIC - DATA TO SEND ", message, " FOR UNSUBSCRIBE TO TOPIC: ", topic);
176
+ this.send(message, `UNSUSCRIBE from ${topic}`);
179
177
 
180
178
  } else if (this.ws) {
181
179
  this.logger.log("[WEBSOCKET-JS] - UN-SUBSCRIBE TRY 'SEND' BUT READY STASTE IS : ", this.ws.readyState);
@@ -185,10 +183,10 @@ export class WebSocketJs {
185
183
  // -----------------------------------------------------------------------------------------------------
186
184
  // @ send -
187
185
  // -----------------------------------------------------------------------------------------------------
188
- send(initialMessage, calling_method) {
186
+ send(data, calling_method) {
189
187
  // this.logger.log("[WEBSOCKET-JS] - SEND - INIZIAL-MSG ", initialMessage, " CALLED BY ", calling_method);
190
188
 
191
- this.ws.send(initialMessage);
189
+ this.ws.send(JSON.stringify(data));
192
190
  }
193
191
 
194
192
 
@@ -205,6 +203,23 @@ export class WebSocketJs {
205
203
  this.ws.close();
206
204
  }
207
205
  this.heartReset();
206
+ this.manuallyClosed = true;
207
+ }
208
+
209
+ reconnect(url, onCreate, onUpdate, onData, onOpen = undefined, onOpenCallback = undefined, _topics = [], _callbacks = new Map()) {
210
+ this.reconnectAttempts++;
211
+ const delay = Math.min(this.reconnectAttempts * 1000, this.maxReconnectDelay);
212
+
213
+ console.log(`WebSocket reconnect in ${delay}ms`);
214
+ const that = this;
215
+ setTimeout(() => {
216
+ if (!that.manuallyClosed) {
217
+ that.init(url, onCreate, onUpdate, onData, onOpen, function () {
218
+ that.logger.log('[WEBSOCKET-JS] websocket IS CLOSED ... CALLING RESUSCRIBE ');
219
+ that.resubscribe();
220
+ }, that.topics, that.callbacks);
221
+ }
222
+ }, delay);
208
223
  }
209
224
 
210
225
  // -----------------------------------------------------------------------------------------------------
@@ -272,41 +287,45 @@ export class WebSocketJs {
272
287
  // -----------------------------------------------------------------------------------------------------
273
288
  // @ HeartStart
274
289
  // -----------------------------------------------------------------------------------------------------
275
- heartStart() {
290
+ private heartStart() {
276
291
  // this.getRemainingTime();
277
- this.pingTimeoutId = setTimeout(() => {
278
-
279
- // Qui viene inviato un battito cardiaco Dopo averlo ricevuto, viene restituito un messaggio di battito cardiaco.
280
- // onmessage Ottieni il battito cardiaco restituito per indicare che la connessione è normale
281
- if (this.ws && this.ws.readyState == 1) {
282
-
283
- this.logger.log("[WEBSOCKET-JS] - HEART-START - SEND PING-MSG");
284
-
285
- this.send(JSON.stringify(this.pingMsg), 'HEART-START')
286
292
 
287
- } else if (this.ws) {
293
+ // usa intervallo adattivo se tab è in background (Chrome throtla i timer)
294
+ const adaptivePing = document.hidden ? this.pingTimeout * 3 : this.pingTimeout;
288
295
 
289
- this.logger.log("[WEBSOCKET-JS] - HEART-START - TRY TO SEND PING-MSG BUT READY STATE IS ", this.ws.readyState);
296
+ // pianifica invio ping
297
+ this.pingTimeoutId = setTimeout(() => {
298
+ if (!this.ws || this.ws.readyState !== WebSocket.OPEN) return;
290
299
 
291
- }
300
+ // Qui viene inviato un battito cardiaco. Dopo averlo ricevuto, viene restituito un messaggio di battito cardiaco.
301
+ // onmessage Ottieni il battito cardiaco restituito per indicare che la connessione è normale
302
+ this.send(this.pingMsg, 'HEART-START')
292
303
 
293
304
  // Se non viene ripristinato dopo un determinato periodo di tempo, il backend viene attivamente disconnesso
294
305
  this.pongTimeoutId = setTimeout(() => {
295
- this.logger.log("[WEBSOCKET-JS] - HEART-START - PONG-TIMEOUT-ID - CLOSE WS ");
306
+ this.logger.log("[WEBSOCKET-JS] - HEART-START - PONG-TIMEOUT-ID - CLOSE WS ");
296
307
  // se onclose Si esibirà reconnect,Eseguiamo ws.close() Bene, se lo esegui direttamente reconnect Si innescherà onclose Causa riconnessione due volte
297
308
  this.ws.close();
298
- }, this.pongTimeout);
309
+ }, this.pongTimeout) as unknown as number;
310
+
311
+
312
+ }, adaptivePing);
299
313
 
300
- }, this.pingTimeout);
301
314
  }
302
315
 
303
316
  // -----------------------------------------------------------------------------------------------------
304
317
  // @ heartReset
305
318
  // -----------------------------------------------------------------------------------------------------
306
- heartReset() {
307
- // this.logger.log("[WEBSOCKET-JS] - HEART-RESET");
308
- clearTimeout(this.pingTimeoutId);
309
- clearTimeout(this.pongTimeoutId);
319
+ private heartReset() {
320
+ if (this.pongTimeoutId !== undefined) {
321
+ clearTimeout(this.pongTimeoutId);
322
+ this.pongTimeoutId = undefined;
323
+ }
324
+
325
+ if (this.pingTimeoutId !== undefined) {
326
+ clearTimeout(this.pingTimeoutId);
327
+ this.pingTimeoutId = undefined;
328
+ }
310
329
  }
311
330
 
312
331
  // -----------------------------------------------------------------------------------------------------
@@ -315,7 +334,7 @@ export class WebSocketJs {
315
334
  init(url, onCreate, onUpdate, onData, onOpen = undefined, onOpenCallback = undefined, _topics = [], _callbacks = new Map()) {
316
335
 
317
336
 
318
-
337
+ this.manuallyClosed = false;
319
338
  this.url = url;
320
339
  this.onCreate = onCreate;
321
340
  this.onUpdate = onUpdate;
@@ -360,19 +379,12 @@ export class WebSocketJs {
360
379
  that.ws.onopen = function (e) {
361
380
  that.logger.log('[WEBSOCKET-JS] - websocket is connected ...', e);
362
381
 
363
- // -----------------
364
- // @ heartCheck
365
- // -----------------
382
+ // Inizializza heartbeat
366
383
  that.heartCheck();
384
+ that.reconnectAttempts = 0;
367
385
 
368
-
369
- if (onOpenCallback) {
370
- onOpenCallback();
371
- }
372
-
373
- if (that.onOpen) {
374
- that.onOpen();
375
- }
386
+ if (onOpenCallback) { onOpenCallback(); }
387
+ if (that.onOpen) { that.onOpen(); }
376
388
 
377
389
  }
378
390
 
@@ -389,13 +401,21 @@ export class WebSocketJs {
389
401
  // --------------------
390
402
  // @ init > resubscribe
391
403
  // --------------------
404
+ that.heartReset();
392
405
 
393
- setTimeout(function () {
394
- that.init(url, onCreate, onUpdate, onData, onOpen, function () {
406
+ if (!that.manuallyClosed) {
407
+ that.reconnect(url, onCreate, onUpdate, onData, onOpen, function () {
395
408
  that.logger.log('[WEBSOCKET-JS] websocket IS CLOSED ... CALLING RESUSCRIBE ');
396
409
  that.resubscribe();
397
410
  }, that.topics, that.callbacks);
398
- }, 3000);
411
+ }
412
+
413
+ // setTimeout(function () {
414
+ // that.init(url, onCreate, onUpdate, onData, onOpen, function () {
415
+ // that.logger.log('[WEBSOCKET-JS] websocket IS CLOSED ... CALLING RESUSCRIBE ');
416
+ // that.resubscribe();
417
+ // }, that.topics, that.callbacks);
418
+ // }, 3000);
399
419
  }
400
420
 
401
421
  // -----------------------------------------------------------------------------------------------------
@@ -415,8 +435,9 @@ export class WebSocketJs {
415
435
  // let test = '{ "action": "publish","payload": {"topic": "/5df26badde7e1c001743b63c/requests", "method": "CREATE", "message": [ { "_id": "5f29372d690e6f0034edf100", "status": 200, "preflight": false, "hasBot": true, "participants": ["bot_5df272e8de7e1c001743b645"], "participantsAgents": [], "participantsBots": ["5df272e8de7e1c001743b645"], "request_id": "support-group-MDszsSJlwqQn1_WCh6u", "requester": "5f29371b690e6f0034edf0f5", "lead": "5f29372d690e6f0034edf0ff", "first_text": "ocourse the email is valid ","department": "5df26badde7e1c001743b63e", "agents": [{"user_available": true,"online_status": "online", "number_assigned_requests": 35, "_id": "5e0f2119705a35001725714d","id_project": "5df26badde7e1c001743b63c", "id_user": "5aaa99024c3b110014b478f0", "role": "admin", "createdBy": "5df26ba1de7e1c001743b637","createdAt": "2020-01-03T11:10:17.123Z", "updatedAt": "2020-01-03T11:10:17.123Z", "__v": 0 }, { "user_available": false, "online_status": "offline", "number_assigned_requests": 0, "_id": "5e1a13824437eb0017f712b4", "id_project": "5df26badde7e1c001743b63c","id_user": "5ac7521787f6b50014e0b592", "role": "admin", "createdBy": "5df26ba1de7e1c001743b637", "createdAt": "2020-01-11T18:27:14.657Z","updatedAt": "2020-01-11T18:27:14.657Z", "__v": 0}, { "user_available": false,"online_status": "offline", "number_assigned_requests": 0, "_id": "5df26bdfde7e1c001743b640", "id_project": "5df26badde7e1c001743b63c", "id_user": "5de9200d6722370017731969","role": "admin","createdBy": "5df26ba1de7e1c001743b637", "createdAt": "2019-12-12T16:33:35.244Z", "updatedAt": "2019-12-12T16:33:35.244Z","__v": 0 }, {"user_available": true, "online_status": "online","number_assigned_requests": -11, "_id": "5eb1a3647ac005003480f54d", "id_project": "5df26badde7e1c001743b63c","id_user": "5e09d16d4d36110017506d7f","role": "owner", "createdBy": "5aaa99024c3b110014b478f0","createdAt": "2020-05-05T17:33:24.328Z", "updatedAt": "2020-05-05T17:33:24.328Z","__v": 0}], "sourcePage": "https://www.tiledesk.com/pricing-self-managed/", "language": "en","userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36","attributes": { "departmentId": "5df26badde7e1c001743b63e","departmentName": "Default Department","ipAddress": "115.96.30.154","client": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36","sourcePage": "https://www.tiledesk.com/pricing-self-managed/", "projectId": "5df26badde7e1c001743b63c", "requester_id": "ce31d3fd-a358-49c7-9b9f-5aead8330063", "subtype": "info","decoded_jwt": {"_id": "ce31d3fd-a358-49c7-9b9f-5aead8330063","firstname": "Guest", "id": "ce31d3fd-a358-49c7-9b9f-5aead8330063", "fullName": "Guest ","iat": 1596536604,"aud": "https://tiledesk.com","iss": "https://tiledesk.com","sub": "guest","jti": "702a4a7e-e56a-43cf-aadd-376f7c12f633"}},"id_project": "5df26badde7e1c001743b63c","createdBy": "ce31d3fd-a358-49c7-9b9f-5aead8330063","tags": [], "notes": [],"channel": {"name": "chat21"},"createdAt": "2020-08-04T10:23:41.641Z","updatedAt": "2021-03-25T18:01:13.371Z","__v": 3,"assigned_at": "2020-08-04T10:25:26.059Z","channelOutbound": {"name": "chat21"},"snapshot": {"agents": [{"id_user": "5aaa99024c3b110014b478f0"}, {"id_user": "5ac7521787f6b50014e0b592"}, {"id_user": "5de9200d6722370017731969"}, { "id_user": "5e09d16d4d36110017506d7f"}]},"id": "5f29372d690e6f0034edf100","requester_id": "5f29372d690e6f0034edf0ff"}]}}'
416
436
  // let test_due = '{ "action": "publish","payload": {"topic": "/5df26badde7e1c001743b63c/requests", "method": "CREATE", "message": [ { "_id": "5f29372d690e6f0034edf100", "status": 200, "preflight": false, "hasBot": true, "participants": ["bot_5df272e8de7e1c001743b645"], "participantsAgents": [], "participantsBots": ["5df272e8de7e1c001743b645"], "request_id": "support-group-MDszsSJlwqQn1_WCh6u", "requester": "5f29371b690e6f0034edf0f5", "lead": "5f29372d690e6f0034edf0ff", "first_text": "ocourse the email is valid ","department": "5df26badde7e1c001743b63e", "agents": [{"user_available": true,"online_status": "online", "number_assigned_requests": 35, "_id": "5e0f2119705a35001725714d","id_project": "5df26badde7e1c001743b63c", "id_user": "5aaa99024c3b110014b478f0", "role": "admin", "createdBy": "5df26ba1de7e1c001743b637","createdAt": "2020-01-03T11:10:17.123Z", "updatedAt": "2020-01-03T11:10:17.123Z", "__v": 0 }, { "user_available": false, "online_status": "offline", "number_assigned_requests": 0, "_id": "5e1a13824437eb0017f712b4", "id_project": "5df26badde7e1c001743b63c","id_user": "5ac7521787f6b50014e0b592", "role": "admin", "createdBy": "5df26ba1de7e1c001743b637", "createdAt": "2020-01-11T18:27:14.657Z","updatedAt": "2020-01-11T18:27:14.657Z", "__v": 0}, { "user_available": false,"online_status": "offline", "number_assigned_requests": 0, "_id": "5df26bdfde7e1c001743b640", "id_project": "5df26badde7e1c001743b63c", "id_user": "5de9200d6722370017731969","role": "admin","createdBy": "5df26ba1de7e1c001743b637", "createdAt": "2019-12-12T16:33:35.244Z", "updatedAt": "2019-12-12T16:33:35.244Z","__v": 0 }, {"user_available": true, "online_status": "online","number_assigned_requests": -11, "_id": "5eb1a3647ac005003480f54d", "id_project": "5df26badde7e1c001743b63c","id_user": "5e09d16d4d36110017506d7f","role": "owner", "createdBy": "5aaa99024c3b110014b478f0","createdAt": "2020-05-05T17:33:24.328Z", "updatedAt": "2020-05-05T17:33:24.328Z","__v": 0}], "sourcePage": "https://www.tiledesk.com/pricing-self-managed/", "language": "en","userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36","attributes": { "departmentId": "5df26badde7e1c001743b63e","departmentName": "Default Department","ipAddress": "115.96.30.154","client": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36","sourcePage": "https://www.tiledesk.com/pricing-self-managed/", "projectId": "5df26badde7e1c001743b63c", "requester_id": "ce31d3fd-a358-49c7-9b9f-5aead8330063", "subtype": "info","decoded_jwt": {"_id": "ce31d3fd-a358-49c7-9b9f-5aead8330063","firstname": "Guest", "id": "ce31d3fd-a358-49c7-9b9f-5aead8330063", "fullName": "Guest ","iat": 1596536604,"aud": "https://tiledesk.com","iss": "https://tiledesk.com","sub": "guest","jti": "702a4a7e-e56a-43cf-aadd-376f7c12f633"}},"id_project": "5df26badde7e1c001743b63c","createdBy": "ce31d3fd-a358-49c7-9b9f-5aead8330063","tags": [], "notes": [],"channel": {"name": "chat21"},"createdAt": "2020-08-04T10:23:41.641Z","updatedAt": "2021-03-25T18:01:13.371Z","__v": 3,"assigned_at": "2020-08-04T10:25:26.059Z","channelOutbound": {"name": "chat21"},"_snapshot": {"agents": [{"id_user": "5aaa99024c3b110014b478f0"}, {"id_user": "5ac7521787f6b50014e0b592"}, {"id_user": "5de9200d6722370017731969"}, { "id_user": "5e09d16d4d36110017506d7f"}]},"id": "5f29372d690e6f0034edf100","requester_id": "5f29372d690e6f0034edf0ff"}]}}'
417
437
 
438
+ let json;
418
439
  try {
419
- var json = JSON.parse(message.data);
440
+ json = JSON.parse(message.data);
420
441
  // var json = JSON.parse(test_due);
421
442
  // this.logger.log('% »»» WebSocketJs - websocket onmessage JSON.parse(message.data) json payload', json.payload);
422
443
  // this.logger.log('% »»» WebSocketJs - websocket onmessage JSON.parse(message.data) json payload topic', json.payload.topic);
@@ -426,30 +447,27 @@ export class WebSocketJs {
426
447
  return;
427
448
  }
428
449
 
450
+
451
+ // -----------------------
452
+ // HEARTBEAT HANDLING
453
+ // @ check the action and the message's text -
454
+ // if action is 'heartbeat' and text is ping send the PONG message and return
455
+ // -----------------------
456
+ if (json.action === "heartbeat") {
457
+ const text = json?.payload?.message?.text;
458
+
459
+ // Server -> Client ping
460
+ if (text === "ping") {
461
+ that.send(that.pongMsg, 'ON-MESSAGE');
462
+ return;
463
+ }
429
464
 
430
- // -------------------
431
- // @ heartCheck
432
- // -------------------
433
- that.heartCheck();
434
-
435
- // --------------------------------------------------------------------------------------------------------------------
436
- // @ check the action and the message's text - if action is 'heartbeat' and text is ping send the PONG message and return
437
- // --------------------------------------------------------------------------------------------------------------------
438
-
439
- if (json.action == "heartbeat") {
440
-
441
- if (json.payload.message.text == "ping") {
442
- // -------------------
443
- // @ send PONG
444
- // -------------------
445
- // that.logger.log('[WEBSOCKET-JS] - RECEIVED PING -> SEND PONG MSG');
446
-
447
- that.send(JSON.stringify(that.pongMsg), 'ON-MESSAGE')
448
-
449
- } else {
450
- // nk
451
- // this.logger.log('[WEBSOCKET-JS] - NOT RECEIVED PING ');
465
+ // Server -> Client pong (risposta al nostro ping)
466
+ if (text === "pong") {
467
+ that.heartCheck();
468
+ return;
452
469
  }
470
+
453
471
  return;
454
472
  }
455
473
 
@@ -22,8 +22,9 @@ import { MatTooltipModule } from '@angular/material/tooltip';
22
22
  import { MatSnackBarModule } from '@angular/material/snack-bar';
23
23
  import { MatSlideToggleModule } from '@angular/material/slide-toggle';
24
24
  import { SafeHtmlPipe } from '../directives/safe-html.pipe';
25
-
26
- // import { MessageTextAreaComponent } from '../components/conversation-detail/message-text-area/message-text-area.component'; // MessageTextAreaComponent is part of the declarations ConversationDetailPageModule
25
+ import { TranslateLoader, TranslateModule } from '@ngx-translate/core';
26
+ import { createTranslateLoader } from 'src/chat21-core/utils/utils';
27
+ import { HttpClient } from '@angular/common/http';
27
28
 
28
29
  @NgModule({
29
30
  declarations: [
@@ -140,6 +141,14 @@ import { SafeHtmlPipe } from '../directives/safe-html.pipe';
140
141
  NgSelectModule,
141
142
  FormsModule,
142
143
 
144
+ TranslateModule.forChild({
145
+ loader: {
146
+ provide: TranslateLoader,
147
+ useFactory: (createTranslateLoader),
148
+ deps: [HttpClient]
149
+ }
150
+ })
151
+
143
152
  ],
144
153
  schemas: [
145
154
  CUSTOM_ELEMENTS_SCHEMA,
@@ -15,6 +15,7 @@ export class Globals {
15
15
  jwt: string;
16
16
  fileUploadAccept: string;
17
17
  projectID: string;
18
+ logOut: boolean
18
19
 
19
20
  constructor(
20
21
  ) { }
@@ -36,6 +37,7 @@ export class Globals {
36
37
  this.lang = 'en'
37
38
  this.fileUploadAccept = 'image/*,.pdf,.txt'
38
39
  this.projectID = null;
40
+ this.logOut = true;
39
41
 
40
42
  }
41
43
 
@@ -4,6 +4,8 @@ export const PERMISSIONS = {
4
4
  REQUEST_READ_GROUP: 'request_read_group',
5
5
  REQUEST_READ_MY: 'request_read_my',
6
6
 
7
+ HOME_READ: 'home_read',
8
+
7
9
  INBOX_READ: 'inbox_read',
8
10
  REQUEST_UPDATE: 'request_update',
9
11
  REQUEST_SEND: 'request_send',
@@ -25,6 +27,8 @@ export const PERMISSIONS = {
25
27
 
26
28
  HISTORY_READ: 'history_read',
27
29
 
30
+ RATING_READ:'rating_read',
31
+
28
32
  AUTOMATIONSLOG_READ: "automationslog_read",
29
33
  AUTOMATIONSLOG_CREATE: "automationslog_create",
30
34
 
@@ -70,18 +74,21 @@ export const PERMISSIONS = {
70
74
  WIDGETSETUP_READ: 'widgetsetup_read',
71
75
  INSTALLATION_READ: 'installation_read',
72
76
  TRANSLATIONS_READ: 'translations_read',
77
+ WIDGETSETUP_UPDATE: 'widgetsetup_update',
78
+
79
+
73
80
 
74
81
  DEPARTMENTS_LIST_READ: 'department_list_read',
75
82
  DEPARTMENT_DETAIL_READ: 'department_detail_read',
76
83
  DEPARTMENT_CREATE_READ: 'department_create_read',
77
84
 
78
85
  TEAMMATES_READ: 'teammates_read',
79
- TEAMMATES_DETAILS_READ: 'teammates_detail_read',
86
+ TEAMMATE_UPDATE: 'teammate_update',
80
87
  TEAMMATES_CREATE: 'teammates_create',
81
88
  ROLES_READ: 'roles_read',
82
89
  GROUPS_READ: 'groups_read',
83
90
 
84
- TEAMMATE_STATUS_UPDATE: 'teammate_status_update',
91
+
85
92
 
86
93
  EMAIL_TICKETING_READ:'email_ticketing_read',
87
94
  EMAIL_TICKETING_UPDATE:'email_ticketing_update',
@@ -107,29 +114,25 @@ export const PERMISSIONS = {
107
114
  APPS_READ:'apps_read',
108
115
  APPS_UPDATE:'apps_update',
109
116
 
117
+ SETTINGS_READ: 'settings_read',
110
118
  PROJECTSETTINGS_GENERAL_READ: 'projectsettings_general_read',
111
119
  PROJECTSETTINGS_GENERAL_UPDATE: 'projectsettings_general_update',
112
-
113
120
  PROJECTSETTINGS_SUBSCRIPTION_READ: 'projectsettings_subscription_read',
114
-
115
121
  PROJECTSETTINGS_DEVELOPER_READ: 'projectsettings_developer_read',
116
122
  PROJECTSETTINGS_DEVELOPER_UPDATE: 'projectsettings_developer_update',
117
-
118
123
  PROJECTSETTINGS_SMARTASSIGNMENT_READ: 'projectsettings_smartassignment_read',
119
124
  PROJECTSETTINGS_SMARTASSIGNMENT_UPDATE: 'projectsettings_smartassignment_update',
120
-
121
125
  PROJECTSETTINGS_NOTIFICATION_READ: 'projectsettings_notification_read',
122
-
123
126
  PROJECTSETTINGS_SECURITY_READ: 'projectsettings_security_read',
124
-
125
127
  PROJECTSETTINGS_BANNED_READ: 'projectsettings_banned_read',
126
-
127
128
  PROJECTSETTINGS_ADVANCED_READ: 'projectsettings_advanced_read',
128
129
 
129
-
130
130
  ACCESS_LISTS: 'accessLists',
131
131
  PROFILE_PAGES: 'profilePages',
132
132
  LEAD_DATA: 'leadData',
133
133
  IMPORT_DATA: 'importData',
134
- MANAGE_TAGS: 'manageTags'
134
+ MANAGE_TAGS: 'manageTags',
135
+
136
+ CHANGE_PROJECT:'change_project',
137
+ SIMULATE_CONV:'simulate_conv',
135
138
  };
@@ -7,16 +7,17 @@ export const BRAND_BASE_INFO: { [key: string] : string | boolean} ={
7
7
  FAVICON: "https://tiledesk.com/wp-content/uploads/2022/07/tiledesk_v13-300x300.png",
8
8
  META_TITLE:"Tiledesk - Open Source Live Chat",
9
9
  DOCS: true,
10
- LOGOUT_ENABLED: true
10
+ LOGOUT_ENABLED: true,
11
+ DISPLAY_EDIT_PROFILE: true
11
12
  }
12
13
 
13
14
  export var LOGOS_ITEMS: { [key: string] : { label: string | boolean, icon: string }} ={
14
- COMPANY_LOGO: {label: BRAND_BASE_INFO.COMPANY_NAME, icon: 'assets/logos/tiledesk_logo.svg'},
15
- COMPANY_LOGO_NO_TEXT: {label: BRAND_BASE_INFO.COMPANY_NAME, icon: 'assets/logos/tiledesk_logo_no_text.svg'},
16
- BASE_LOGO: {label: BRAND_BASE_INFO.BRAND_NAME, icon: 'assets/logos/tiledesk_logo.svg'},
17
- BASE_LOGO_NO_TEXT: {label: BRAND_BASE_INFO.BRAND_NAME, icon: 'assets/logos/tiledesk_logo_no_text.svg'},
18
- BASE_LOGO_WHITE: { label: BRAND_BASE_INFO.BRAND_NAME, icon: '"assets/logos/tiledesk-logo_new_white.svg'},
19
- BASE_LOGO_WHITE_NO_TEXT: { label: BRAND_BASE_INFO.BRAND_NAME, icon: '"assets/logos/tiledesk-logo_new_white.svg'},
15
+ COMPANY_LOGO: {label: BRAND_BASE_INFO.COMPANY_NAME, icon: 'assets/img/logos/tiledesk_logo.svg'},
16
+ COMPANY_LOGO_NO_TEXT: {label: BRAND_BASE_INFO.COMPANY_NAME, icon: 'assets/img/logos/tiledesk_logo_no_text.svg'},
17
+ BASE_LOGO: {label: BRAND_BASE_INFO.BRAND_NAME, icon: 'assets/img/logos/tiledesk_logo.svg'},
18
+ BASE_LOGO_NO_TEXT: {label: BRAND_BASE_INFO.BRAND_NAME, icon: 'assets/img/logos/tiledesk_logo_no_text.svg'},
19
+ BASE_LOGO_WHITE: { label: BRAND_BASE_INFO.BRAND_NAME, icon: '"assets/img/logos/tiledesk-logo_new_white.svg'},
20
+ BASE_LOGO_WHITE_NO_TEXT: { label: BRAND_BASE_INFO.BRAND_NAME, icon: '"assets/img/logos/tiledesk-logo_new_white.svg'},
20
21
  BASE_LOGO_GRAY: { label: BRAND_BASE_INFO.BRAND_NAME, icon: 'https://support-pre.tiledesk.com/dashboard/assets/img/logos/tiledesk-logo_new_gray.svg'}
21
22
  }
22
23
 
@@ -225,6 +225,10 @@
225
225
  "admin": "مدير",
226
226
  "agent": "وكيل",
227
227
  "Conversations": "المحادثات",
228
+ "Monitor": "شاشة",
229
+ "Flows": "التدفّقات",
230
+ "Knowledgebases": "قواعد المعرفة",
231
+ "Whatsappbroadcasts": "نشرات WhatsApp",
228
232
  "Apps": "تطبيقات",
229
233
  "Analytics": "تحليلات",
230
234
  "Activities": "أنشطة",
@@ -306,5 +310,11 @@
306
310
  "SEND_EMAIL_SUCCESS_OFFLINE_MESSAGE":"تم إرسال الرسالة أيضًا عبر البريد الإلكتروني 📩"
307
311
  },
308
312
  "EMOJI_NOT_ELLOWED": "الرموز التعبيرية غير مسموح بها",
309
- "DOMAIN_NOT_ALLOWED": "يحتوي الرابط على نطاق غير مسموح"
313
+ "DOMAIN_NOT_ALLOWED": "يحتوي الرابط على نطاق غير مسموح",
314
+ "TICKET": {
315
+ "OPEN_TICKET": "افتح تذكرة",
316
+ "DESCRIPTION": "هل تؤكد أنك تريد فتح تذكرة لهذه المحادثة؟",
317
+ "CONFIRM": "تأكيد",
318
+ "CLOSE": "إغلاق"
319
+ }
310
320
  }
@@ -225,6 +225,10 @@
225
225
  "admin": "Administrator",
226
226
  "agent": "Agent",
227
227
  "Conversations": "Söhbətlər",
228
+ "Monitor": "Monitor",
229
+ "Flows": "Axınlar",
230
+ "Knowledgebases": "Bilik bazaları",
231
+ "Whatsappbroadcasts": "WhatsApp Yayınları",
228
232
  "Apps": "Proqramlar",
229
233
  "Analytics": "Analitika",
230
234
  "Activities": "Fəaliyyətlər",
@@ -306,5 +310,11 @@
306
310
  "SEND_EMAIL_SUCCESS_OFFLINE_MESSAGE":"Mesaj e-poçt vasitəsilə də göndərilib 📩"
307
311
  },
308
312
  "EMOJI_NOT_ELLOWED": "Emoji icazə verilmir",
309
- "DOMAIN_NOT_ALLOWED": "URL icazə verilməyən domeni ehtiva edir"
313
+ "DOMAIN_NOT_ALLOWED": "URL icazə verilməyən domeni ehtiva edir",
314
+ "TICKET": {
315
+ "OPEN_TICKET": "Bilet aç",
316
+ "DESCRIPTION": "Bu söhbət üçün bilet açmaq istədiyinizi təsdiqləyirsinizmi?",
317
+ "CONFIRM": "Təsdiqlə",
318
+ "CLOSE": "Bağla"
319
+ }
310
320
  }
@@ -225,6 +225,10 @@
225
225
  "admin": "Administrator",
226
226
  "agent": "Agent",
227
227
  "Conversations": "Gespräche",
228
+ "Monitor": "Monitor",
229
+ "Flows": "Flows",
230
+ "Knowledgebases": "Wissensdatenbanken",
231
+ "Whatsappbroadcasts": "WhatsApp-Broadcasts",
228
232
  "Apps": "Anwendungen",
229
233
  "Analytics": "Analytik",
230
234
  "Activities": "Aktivitäten",
@@ -306,5 +310,11 @@
306
310
  "SEND_EMAIL_SUCCESS_OFFLINE_MESSAGE":"Nachricht auch per E-Mail gesendet 📩"
307
311
  },
308
312
  "EMOJI_NOT_ELLOWED": "Emoji nicht erlaubt",
309
- "DOMAIN_NOT_ALLOWED": "Die URL enthält eine nicht erlaubte Domain"
313
+ "DOMAIN_NOT_ALLOWED": "Die URL enthält eine nicht erlaubte Domain",
314
+ "TICKET": {
315
+ "OPEN_TICKET": "Ticket öffnen",
316
+ "DESCRIPTION": "Bestätigen Sie, dass Sie ein Ticket für dieses Gespräch eröffnen möchten?",
317
+ "CONFIRM": "Bestätigen",
318
+ "CLOSE": "Schließen"
319
+ }
310
320
  }
@@ -225,6 +225,10 @@
225
225
  "admin": "Administrator",
226
226
  "agent": "Agent",
227
227
  "Conversations": "Conversations",
228
+ "Monitor":"Monitor",
229
+ "Flows": "Flows",
230
+ "Knowledgebases": "Knowledge Bases",
231
+ "Whatsappbroadcasts": "WhatsApp Broadcasts",
228
232
  "Apps": "Apps",
229
233
  "Analytics": "Analytics",
230
234
  "Activities": "Activities",
@@ -314,5 +318,11 @@
314
318
  "HOW_CAN_I_HELP_YOU":"How can i help you?"
315
319
  },
316
320
  "EMOJI_NOT_ELLOWED":"Emoji not allowed",
317
- "DOMAIN_NOT_ALLOWED":"URL contains a non-allowed domain"
321
+ "DOMAIN_NOT_ALLOWED":"URL contains a non-allowed domain",
322
+ "TICKET": {
323
+ "OPEN_TICKET": "Open Ticket",
324
+ "DESCRIPTION": "Do you confirm you want to open a ticket for this conversation?",
325
+ "CONFIRM": "Confirm",
326
+ "CLOSE": "Close"
327
+ }
318
328
  }
@@ -225,6 +225,10 @@
225
225
  "admin": "Administrador",
226
226
  "agent": "Agente",
227
227
  "Conversations": "Conversaciones",
228
+ "Monitor": "Monitor",
229
+ "Flows": "Flujos",
230
+ "Knowledgebases": "Bases de Conocimiento",
231
+ "Whatsappbroadcasts": "Difusiones de WhatsApp",
228
232
  "Apps":"Aplicaciones",
229
233
  "Analytics":"Analíticas",
230
234
  "Activities": "Actividades",
@@ -306,5 +310,11 @@
306
310
  "SEND_EMAIL_SUCCESS_OFFLINE_MESSAGE":"Mensaje también enviado por correo electrónico 📩"
307
311
  },
308
312
  "EMOJI_NOT_ELLOWED": "Emoji no permitido",
309
- "DOMAIN_NOT_ALLOWED": "La URL contiene un dominio no permitido"
313
+ "DOMAIN_NOT_ALLOWED": "La URL contiene un dominio no permitido",
314
+ "TICKET": {
315
+ "OPEN_TICKET": "Abrir Ticket",
316
+ "DESCRIPTION": "¿Confirmas que deseas abrir un ticket para esta conversación?",
317
+ "CONFIRM": "Confirmar",
318
+ "CLOSE": "Cerrar"
319
+ }
310
320
  }
@@ -225,6 +225,10 @@
225
225
  "admin": "Administrateur",
226
226
  "agent": "Agent",
227
227
  "Conversations": "Conversations",
228
+ "Monitor": "Moniteur",
229
+ "Flows": "Flux",
230
+ "Knowledgebases": "Bases de Connaissances",
231
+ "Whatsappbroadcasts": "Diffusions WhatsApp",
228
232
  "Apps":"Applications",
229
233
  "Analytics":"Analytique",
230
234
  "Activities": "Activités",
@@ -306,5 +310,11 @@
306
310
  "SEND_EMAIL_SUCCESS_OFFLINE_MESSAGE":"Message également envoyé par mail 📩"
307
311
  },
308
312
  "EMOJI_NOT_ELLOWED": "Emoji non autorisé",
309
- "DOMAIN_NOT_ALLOWED": "L'URL contient un domaine non autorisé"
313
+ "DOMAIN_NOT_ALLOWED": "L'URL contient un domaine non autorisé",
314
+ "TICKET": {
315
+ "OPEN_TICKET": "Ouvrir un Ticket",
316
+ "DESCRIPTION": "Confirmez-vous vouloir ouvrir un ticket pour cette conversation ?",
317
+ "CONFIRM": "Confirmer",
318
+ "CLOSE": "Fermer"
319
+ }
310
320
  }
@@ -225,6 +225,10 @@
225
225
  "admin": "Amministratore",
226
226
  "agent": "Agente",
227
227
  "Conversations": "Conversazioni",
228
+ "Monitor": "Monitor",
229
+ "Flows": "Flussi",
230
+ "Knowledgebases": "Basi di Conoscenza",
231
+ "Whatsappbroadcasts": "Trasmissioni WhatsApp",
228
232
  "Apps":"App",
229
233
  "Analytics":"Analitica",
230
234
  "Activities": "Attività",
@@ -312,7 +316,13 @@
312
316
  "NO_SUGGESTIONS_PRESENT":"Nessun suggerimento trovato",
313
317
  "INSERT_PROMPT_HERE":"Inserisci un prompt qui",
314
318
  "HOW_CAN_I_HELP_YOU":"Come posso aiutarti?"
315
- },
316
- "EMOJI_NOT_ELLOWED": "Emoji non consentite",
317
- "DOMAIN_NOT_ALLOWED": "L'URL contiene un dominio non consentito"
319
+ },
320
+ "EMOJI_NOT_ELLOWED": "Emoji non consentite",
321
+ "DOMAIN_NOT_ALLOWED": "L'URL contiene un dominio non consentito",
322
+ "TICKET": {
323
+ "OPEN_TICKET": "Apri Ticket",
324
+ "DESCRIPTION": "Confermi di voler aprire un ticket per questa conversazione?",
325
+ "CONFIRM": "Conferma",
326
+ "CLOSE": "Chiudi"
327
+ }
318
328
  }