@chat21/chat21-ionic 3.4.27-rc1 → 3.4.27-rc12
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/CHANGELOG.md +39 -0
- package/angular.json +1 -0
- package/package.json +1 -1
- package/src/app/app.component.html +3 -1
- package/src/app/app.component.ts +50 -2
- package/src/app/components/canned-response/canned-response.component.scss +0 -2
- package/src/app/components/conversation-detail/message-text-area/message-text-area.component.html +23 -0
- package/src/app/components/conversation-detail/message-text-area/message-text-area.component.scss +30 -0
- package/src/app/components/conversation-detail/message-text-area/message-text-area.component.ts +26 -7
- package/src/app/components/conversation-info/info-group/info-group.component.ts +23 -21
- package/src/app/components/conversations-list/header-conversations-list/header-conversations-list.component.html +1 -1
- package/src/app/components/conversations-list/header-conversations-list/header-conversations-list.component.ts +5 -1
- package/src/app/components/navbar/navbar.component.html +3 -3
- package/src/app/components/navbar/navbar.component.ts +29 -38
- package/src/app/components/project-item/project-item.component.ts +11 -11
- package/src/app/components/sidebar/sidebar.component.html +65 -45
- package/src/app/components/sidebar/sidebar.component.ts +92 -117
- package/src/app/components/sidebar-user-details/sidebar-user-details.component.html +2 -2
- package/src/app/components/sidebar-user-details/sidebar-user-details.component.ts +10 -7
- package/src/app/pages/conversation-detail/conversation-detail.page.html +3 -1
- package/src/app/pages/conversation-detail/conversation-detail.page.ts +47 -5
- package/src/app/pages/conversations-list/conversations-list.page.html +2 -0
- package/src/app/pages/conversations-list/conversations-list.page.ts +36 -3
- package/src/app/services/global-settings/global-settings.service.ts +12 -3
- package/src/app/shared/shared.module.ts +11 -0
- package/src/app/utils/globals.ts +2 -0
- package/src/app/utils/permissions.constants.ts +14 -11
- package/src/assets/i18n/ar.json +11 -1
- package/src/assets/i18n/az.json +11 -1
- package/src/assets/i18n/de.json +11 -1
- package/src/assets/i18n/en.json +11 -1
- package/src/assets/i18n/es.json +11 -1
- package/src/assets/i18n/fr.json +11 -1
- package/src/assets/i18n/it.json +13 -3
- package/src/assets/i18n/kk.json +11 -1
- package/src/assets/i18n/pt.json +11 -1
- package/src/assets/i18n/ru.json +11 -1
- package/src/assets/i18n/sr.json +11 -1
- package/src/assets/i18n/sv.json +11 -1
- package/src/assets/i18n/tr.json +11 -1
- package/src/assets/i18n/uk.json +11 -1
- package/src/assets/i18n/uz.json +12 -1
- package/src/assets/js/agentDesktop-sdk.js +47 -0
- package/src/chat-config-template.json +1 -0
- package/src/chat-config.json +1 -0
- package/src/chat21-core/providers/tiledesk/tiledesk-auth.service.ts +3 -0
- package/src/chat21-core/utils/utils.ts +16 -2
|
@@ -176,6 +176,10 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
|
|
|
176
176
|
copilotQuestion: string = '';
|
|
177
177
|
/**COPILOT : end */
|
|
178
178
|
|
|
179
|
+
/** TICKET: start */
|
|
180
|
+
isTicketEnabled: boolean = false;
|
|
181
|
+
/** TICKET: end */
|
|
182
|
+
|
|
179
183
|
isMine = isMine
|
|
180
184
|
isInfo = isInfo
|
|
181
185
|
isFirstMessage = isFirstMessage
|
|
@@ -424,6 +428,8 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
|
|
|
424
428
|
ionViewDidEnter() {
|
|
425
429
|
this.logger.log('[CONVS-DETAIL] > ionViewDidEnter')
|
|
426
430
|
// this.info_content_child_enabled = true;
|
|
431
|
+
// Scroll to bottom to show the last message without animation
|
|
432
|
+
this.scrollToLastMessage()
|
|
427
433
|
}
|
|
428
434
|
|
|
429
435
|
// Unsubscibe when new page transition end
|
|
@@ -483,6 +489,7 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
|
|
|
483
489
|
this.messages = [] // list messages of conversation
|
|
484
490
|
this.isFileSelected = false // indicates if a file has been selected (image to upload)
|
|
485
491
|
this.isEmailEnabled = (this.appConfigProvider.getConfig().emailSection === 'true' || this.appConfigProvider.getConfig().emailSection === true) ? true : false;
|
|
492
|
+
this.isTicketEnabled = (this.appConfigProvider.getConfig().ticketSection === 'true' || this.appConfigProvider.getConfig().ticketSection === true) ? true : false;
|
|
486
493
|
this.isWhatsappTemplatesEnabled = (this.appConfigProvider.getConfig().whatsappTemplatesSection === 'true' || this.appConfigProvider.getConfig().whatsappTemplatesSection === true) ? true : false;
|
|
487
494
|
|
|
488
495
|
this.cannedResponsesService.initialize(appconfig.apiUrl)
|
|
@@ -554,9 +561,9 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
|
|
|
554
561
|
this.offlineMsgEmail = this.checkOfflineMsgEmailIsEnabled(project)
|
|
555
562
|
this.isCopilotEnabled = this.projectPlanUtils.checkProjectProfileFeature(project, 'copilot');
|
|
556
563
|
this.fileUploadAccept = this.checkAcceptedUploadFile(project)
|
|
557
|
-
this.rolesCanned = this.checkCannedResponsesRoles(
|
|
564
|
+
this.rolesCanned = this.checkCannedResponsesRoles()
|
|
558
565
|
this.canShowCanned = this.checkCannedResponses(project)
|
|
559
|
-
|
|
566
|
+
this.logger.log('[CONVS-DETAIL] this.rolesCanned ', this.canShowCanned)
|
|
560
567
|
}
|
|
561
568
|
}, (error) => {
|
|
562
569
|
this.logger.error('[CONVS-DETAIL] - GET PROJECTID BY CONV RECIPIENT - ERROR ', error)
|
|
@@ -603,14 +610,14 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
|
|
|
603
610
|
|
|
604
611
|
let hasRoleToShowCanned = this.rolesCanned[PERMISSIONS.CANNED_RESPONSES_READ]
|
|
605
612
|
this.logger.log('[CONVS-DETAIL] checkCannedResponses hasRoleToShowCanned ', hasRoleToShowCanned)
|
|
606
|
-
if(hasRoleToShowCanned){
|
|
607
|
-
return
|
|
613
|
+
if(!hasRoleToShowCanned){
|
|
614
|
+
return false
|
|
608
615
|
}
|
|
609
616
|
|
|
610
617
|
return true
|
|
611
618
|
}
|
|
612
619
|
|
|
613
|
-
checkCannedResponsesRoles(
|
|
620
|
+
checkCannedResponsesRoles(): { [key: string]: boolean } {
|
|
614
621
|
const permissionKeys = [
|
|
615
622
|
'CANNED_RESPONSES_CREATE',
|
|
616
623
|
'CANNED_RESPONSES_READ',
|
|
@@ -711,6 +718,11 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
|
|
|
711
718
|
"WHATSAPP.ERROR_WHATSAPP_NOT_INSTALLED",
|
|
712
719
|
"WHATSAPP.ERROR_WHATSAPP_GENERIC_ERROR",
|
|
713
720
|
|
|
721
|
+
"TICKET.OPEN_TICKET",
|
|
722
|
+
"TICKET.DESCRIPTION",
|
|
723
|
+
"TICKET.CONFIRM",
|
|
724
|
+
"TICKET.CLOSE",
|
|
725
|
+
|
|
714
726
|
"COPILOT.ASK_AI",
|
|
715
727
|
"COPILOT.NO_SUGGESTIONS_PRESENT",
|
|
716
728
|
|
|
@@ -1926,6 +1938,13 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
|
|
|
1926
1938
|
}
|
|
1927
1939
|
|
|
1928
1940
|
|
|
1941
|
+
onOpenTicket() {
|
|
1942
|
+
this.logger.debug('[CONVS-DETAIL] openTicketOnExternalService - conversationWith ', this.conversationWith)
|
|
1943
|
+
if(window['openTicketOnHDA']){
|
|
1944
|
+
window['openTicketOnHDA'](this.conversationWith)
|
|
1945
|
+
}
|
|
1946
|
+
|
|
1947
|
+
}
|
|
1929
1948
|
// -------------- START SCROLL/RESIZE -------------- //
|
|
1930
1949
|
/** */
|
|
1931
1950
|
resizeTextArea() {
|
|
@@ -1969,6 +1988,29 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
|
|
|
1969
1988
|
}
|
|
1970
1989
|
}
|
|
1971
1990
|
|
|
1991
|
+
/**
|
|
1992
|
+
* Scroll to last message without animation using requestAnimationFrame
|
|
1993
|
+
* This is a best practice alternative to setTimeout
|
|
1994
|
+
*/
|
|
1995
|
+
private scrollToLastMessage() {
|
|
1996
|
+
this.showIonContent = true
|
|
1997
|
+
if (this.ionContentChatArea) {
|
|
1998
|
+
// Use requestAnimationFrame for better performance
|
|
1999
|
+
requestAnimationFrame(() => {
|
|
2000
|
+
requestAnimationFrame(() => {
|
|
2001
|
+
// Double RAF ensures DOM is fully rendered
|
|
2002
|
+
this.ionContentChatArea.scrollToBottom(0).then(() => {
|
|
2003
|
+
this.logger.log('[CONVS-DETAIL] scroll posizionato all\'ultimo messaggio')
|
|
2004
|
+
}).catch((error) => {
|
|
2005
|
+
this.logger.error('[CONVS-DETAIL] errore durante lo scroll:', error)
|
|
2006
|
+
})
|
|
2007
|
+
})
|
|
2008
|
+
})
|
|
2009
|
+
} else {
|
|
2010
|
+
this.logger.warn('[CONVS-DETAIL] ionContentChatArea non disponibile')
|
|
2011
|
+
}
|
|
2012
|
+
}
|
|
2013
|
+
|
|
1972
2014
|
/**
|
|
1973
2015
|
* detectBottom
|
|
1974
2016
|
*/
|
|
@@ -7,6 +7,8 @@
|
|
|
7
7
|
[sound_btn]="sound_btn"
|
|
8
8
|
[isMobile]="isMobile"
|
|
9
9
|
[isVisibleTKT]="isVisibleTKT"
|
|
10
|
+
[isVisibleCNT]="isVisibleCNT"
|
|
11
|
+
[roles]="rolesHeader"
|
|
10
12
|
(onSoundChange)="onSoundChange($event)"
|
|
11
13
|
(openContactsDirectory)=openContactsDirectory($event)
|
|
12
14
|
(openProfileInfo)=openProfileInfo($event)>
|
|
@@ -53,7 +53,10 @@ import { Globals } from 'src/app/utils/globals';
|
|
|
53
53
|
import { TriggerEvents } from 'src/app/services/triggerEvents/triggerEvents';
|
|
54
54
|
import { MessageModel } from 'src/chat21-core/models/message';
|
|
55
55
|
import { Project } from 'src/chat21-core/models/projects';
|
|
56
|
-
import { getOSCode } from 'src/app/utils/utils';
|
|
56
|
+
import { getOSCode, hasRole } from 'src/app/utils/utils';
|
|
57
|
+
import { PERMISSIONS } from 'src/app/utils/permissions.constants';
|
|
58
|
+
import { ProjectUser } from 'src/chat21-core/models/projectUsers';
|
|
59
|
+
import { ProjectUsersService } from 'src/app/services/project_users/project-users.service';
|
|
57
60
|
|
|
58
61
|
@Component({
|
|
59
62
|
selector: 'app-conversations-list',
|
|
@@ -82,6 +85,7 @@ export class ConversationListPage implements OnInit {
|
|
|
82
85
|
public archived_btn: boolean
|
|
83
86
|
public sound_btn: string
|
|
84
87
|
public isVisibleTKT: boolean = true;
|
|
88
|
+
public isVisibleCNT: boolean = true;;
|
|
85
89
|
public convertMessage = convertMessage
|
|
86
90
|
private isShowMenuPage = false
|
|
87
91
|
private logger: LoggerService = LoggerInstance.getInstance()
|
|
@@ -104,6 +108,9 @@ export class ConversationListPage implements OnInit {
|
|
|
104
108
|
public isMobile: boolean = false;
|
|
105
109
|
public isInitialized: boolean = false;
|
|
106
110
|
|
|
111
|
+
public projectUser: ProjectUser;
|
|
112
|
+
public rolesHeader: { [key: string]: boolean }
|
|
113
|
+
|
|
107
114
|
// PROJECT AVAILABILITY INFO: start
|
|
108
115
|
project: Project
|
|
109
116
|
profile_name_translated: string;
|
|
@@ -130,6 +137,7 @@ export class ConversationListPage implements OnInit {
|
|
|
130
137
|
private translateService: CustomTranslateService,
|
|
131
138
|
public tiledeskService: TiledeskService,
|
|
132
139
|
public tiledeskAuthService: TiledeskAuthService,
|
|
140
|
+
public projectUsersService: ProjectUsersService,
|
|
133
141
|
public appConfigProvider: AppConfigProvider,
|
|
134
142
|
public platform: Platform,
|
|
135
143
|
public wsService: WebsocketService,
|
|
@@ -371,6 +379,11 @@ export class ConversationListPage implements OnInit {
|
|
|
371
379
|
// save conversationHandler in chatManager
|
|
372
380
|
this.chatManager.setConversationsHandler(this.conversationsHandlerService)
|
|
373
381
|
this.showPlaceholder = false
|
|
382
|
+
|
|
383
|
+
// Hide loading spinner if there are no conversations
|
|
384
|
+
if (this.conversations.length === 0) {
|
|
385
|
+
this.loadingIsActive = false
|
|
386
|
+
}
|
|
374
387
|
}
|
|
375
388
|
|
|
376
389
|
// private manageStoredConversations() {
|
|
@@ -471,9 +484,9 @@ export class ConversationListPage implements OnInit {
|
|
|
471
484
|
}
|
|
472
485
|
|
|
473
486
|
listenToCurrentStoredProject() {
|
|
474
|
-
this.events.subscribe('storage:last_project', projectObjct => {
|
|
487
|
+
this.events.subscribe('storage:last_project', async(projectObjct) => {
|
|
475
488
|
if (projectObjct && projectObjct !== 'undefined') {
|
|
476
|
-
|
|
489
|
+
console.log('[CONVS-LIST-PAGE] - GET STORED PROJECT ', projectObjct)
|
|
477
490
|
|
|
478
491
|
//TODO: recuperare info da root e non da id_project
|
|
479
492
|
this.project = {
|
|
@@ -496,6 +509,10 @@ export class ConversationListPage implements OnInit {
|
|
|
496
509
|
} else if (this.project.profile.type === 'payment' && this.project.profile.name === 'enterprise') {
|
|
497
510
|
this.profile_name_translated = this.translationMapHeader.get('PaydPlanNameEnterprise');
|
|
498
511
|
}
|
|
512
|
+
|
|
513
|
+
this.projectUser = await this.projectUsersService.getProjectUserByProjectId(this.project._id)
|
|
514
|
+
this.rolesHeader = this.checkCannedResponsesRoles();
|
|
515
|
+
this.logger.log('[CONVS-LIST-PAGE] - GET PROJECT USER ROLES ', this.rolesHeader)
|
|
499
516
|
}
|
|
500
517
|
})
|
|
501
518
|
}
|
|
@@ -631,8 +648,24 @@ export class ConversationListPage implements OnInit {
|
|
|
631
648
|
const public_Key = this.appConfigProvider.getConfig().t2y12PruGU9wUtEGzBJfolMIgK
|
|
632
649
|
this.logger.log('[CONVS-LIST-PAGE] AppConfigService getAppConfig public_Key', public_Key)
|
|
633
650
|
this.isVisibleTKT = getOSCode("TKT", public_Key);
|
|
651
|
+
this.isVisibleCNT = getOSCode("CNT", public_Key);
|
|
634
652
|
}
|
|
635
653
|
|
|
654
|
+
checkCannedResponsesRoles(): { [key: string]: boolean } {
|
|
655
|
+
const permissionKeys = [
|
|
656
|
+
'LEADS_READ',
|
|
657
|
+
] as const;
|
|
658
|
+
|
|
659
|
+
const roles: { [key: string]: boolean } = {};
|
|
660
|
+
for (const key of permissionKeys) {
|
|
661
|
+
const permission = PERMISSIONS[key];
|
|
662
|
+
roles[permission] = hasRole(this.projectUser, permission);
|
|
663
|
+
}
|
|
664
|
+
|
|
665
|
+
return roles;
|
|
666
|
+
|
|
667
|
+
}
|
|
668
|
+
|
|
636
669
|
onBackButtonFN(event) {
|
|
637
670
|
this.conversationType = 'active'
|
|
638
671
|
|
|
@@ -88,14 +88,14 @@ export class GlobalSettingsService {
|
|
|
88
88
|
this.logger.debug('[GLOBAL-SET] setVariableFromStorage :::::::: SET VARIABLE ---------->', Object.keys(globals));
|
|
89
89
|
for (const key of Object.keys(globals)) {
|
|
90
90
|
const val = this.appStorageService.getItem(key);
|
|
91
|
-
|
|
92
|
-
|
|
91
|
+
this.logger.debug('[GLOBAL-SET] setVariableFromStorage SET globals KEY ---------->', key);
|
|
92
|
+
this.logger.debug('[GLOBAL-SET] setVariableFromStorage SET globals VAL ---------->', val);
|
|
93
93
|
if (val && val !== null) {
|
|
94
94
|
// globals.setParameter(key, val);
|
|
95
95
|
globals[key] = stringToBoolean(val);
|
|
96
96
|
}
|
|
97
97
|
// this.logger.debug('[GLOBAL-SET] setVariableFromStorage SET globals == ---------->', globals);
|
|
98
|
-
}
|
|
98
|
+
}
|
|
99
99
|
}
|
|
100
100
|
|
|
101
101
|
/**
|
|
@@ -111,8 +111,10 @@ export class GlobalSettingsService {
|
|
|
111
111
|
}
|
|
112
112
|
|
|
113
113
|
TEMP = getParameterByName(windowContext, 'tiledesk_supportMode');
|
|
114
|
+
console.log('TEMP supportMode', TEMP);
|
|
114
115
|
if (TEMP) {
|
|
115
116
|
globals.supportMode = stringToBoolean(TEMP);
|
|
117
|
+
this.appStorageService.setItem('supportMode', String(globals.supportMode))
|
|
116
118
|
}
|
|
117
119
|
|
|
118
120
|
TEMP = getParameterByName(windowContext, 'tiledesk_lang');
|
|
@@ -138,6 +140,13 @@ export class GlobalSettingsService {
|
|
|
138
140
|
TEMP = getParameterByName(windowContext, 'tiledesk_projectID');
|
|
139
141
|
if (TEMP) {
|
|
140
142
|
globals.projectID = TEMP;
|
|
143
|
+
this.appStorageService.setItem('projectID', TEMP)
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
TEMP = getParameterByName(windowContext, 'tiledesk_logOut');
|
|
147
|
+
if (TEMP) {
|
|
148
|
+
globals.logOut = stringToBoolean(TEMP);
|
|
149
|
+
this.appStorageService.setItem('logOut', TEMP)
|
|
141
150
|
}
|
|
142
151
|
|
|
143
152
|
}
|
|
@@ -22,6 +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
|
+
import { TranslateLoader, TranslateModule } from '@ngx-translate/core';
|
|
26
|
+
import { createTranslateLoader } from 'src/chat21-core/utils/utils';
|
|
27
|
+
import { HttpClient } from '@angular/common/http';
|
|
25
28
|
|
|
26
29
|
// import { MessageTextAreaComponent } from '../components/conversation-detail/message-text-area/message-text-area.component'; // MessageTextAreaComponent is part of the declarations ConversationDetailPageModule
|
|
27
30
|
|
|
@@ -140,6 +143,14 @@ import { SafeHtmlPipe } from '../directives/safe-html.pipe';
|
|
|
140
143
|
NgSelectModule,
|
|
141
144
|
FormsModule,
|
|
142
145
|
|
|
146
|
+
TranslateModule.forChild({
|
|
147
|
+
loader: {
|
|
148
|
+
provide: TranslateLoader,
|
|
149
|
+
useFactory: (createTranslateLoader),
|
|
150
|
+
deps: [HttpClient]
|
|
151
|
+
}
|
|
152
|
+
})
|
|
153
|
+
|
|
143
154
|
],
|
|
144
155
|
schemas: [
|
|
145
156
|
CUSTOM_ELEMENTS_SCHEMA,
|
package/src/app/utils/globals.ts
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
};
|
package/src/assets/i18n/ar.json
CHANGED
|
@@ -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
|
}
|
package/src/assets/i18n/az.json
CHANGED
|
@@ -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
|
}
|
package/src/assets/i18n/de.json
CHANGED
|
@@ -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
|
}
|
package/src/assets/i18n/en.json
CHANGED
|
@@ -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
|
}
|
package/src/assets/i18n/es.json
CHANGED
|
@@ -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
|
}
|
package/src/assets/i18n/fr.json
CHANGED
|
@@ -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
|
}
|
package/src/assets/i18n/it.json
CHANGED
|
@@ -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
|
-
|
|
317
|
-
|
|
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
|
}
|
package/src/assets/i18n/kk.json
CHANGED
|
@@ -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": "URL рұқсат етілмеген доменді қамтиды"
|
|
313
|
+
"DOMAIN_NOT_ALLOWED": "URL рұқсат етілмеген доменді қамтиды",
|
|
314
|
+
"TICKET": {
|
|
315
|
+
"OPEN_TICKET": "Тапсырма ашу",
|
|
316
|
+
"DESCRIPTION": "Осы әңгіме үшін тапсырма ашқыңыз келетінін растайсыз ба?",
|
|
317
|
+
"CONFIRM": "Растау",
|
|
318
|
+
"CLOSE": "Жабу"
|
|
319
|
+
}
|
|
310
320
|
}
|
package/src/assets/i18n/pt.json
CHANGED
|
@@ -225,6 +225,10 @@
|
|
|
225
225
|
"admin": "Administrador",
|
|
226
226
|
"agent": "Agente",
|
|
227
227
|
"Conversations": "Conversas",
|
|
228
|
+
"Monitor": "Monitor",
|
|
229
|
+
"Flows": "Fluxos",
|
|
230
|
+
"Knowledgebases": "Bases de Conhecimento",
|
|
231
|
+
"Whatsappbroadcasts": "Transmissões do WhatsApp",
|
|
228
232
|
"Apps":"Aplicativos",
|
|
229
233
|
"Analytics":"Análise",
|
|
230
234
|
"Activities": "Atividades",
|
|
@@ -306,5 +310,11 @@
|
|
|
306
310
|
"SEND_EMAIL_SUCCESS_OFFLINE_MESSAGE":"Mensagem também enviada por e-mail 📩"
|
|
307
311
|
},
|
|
308
312
|
"EMOJI_NOT_ELLOWED": "Emoji não permitido",
|
|
309
|
-
"DOMAIN_NOT_ALLOWED": "O URL contém um domínio não permitido"
|
|
313
|
+
"DOMAIN_NOT_ALLOWED": "O URL contém um domínio não permitido",
|
|
314
|
+
"TICKET": {
|
|
315
|
+
"OPEN_TICKET": "Abrir Ticket",
|
|
316
|
+
"DESCRIPTION": "Confirma que deseja abrir um ticket para esta conversa?",
|
|
317
|
+
"CONFIRM": "Confirmar",
|
|
318
|
+
"CLOSE": "Fechar"
|
|
319
|
+
}
|
|
310
320
|
}
|
package/src/assets/i18n/ru.json
CHANGED
|
@@ -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": "URL содержит недопустимый домен"
|
|
313
|
+
"DOMAIN_NOT_ALLOWED": "URL содержит недопустимый домен",
|
|
314
|
+
"TICKET": {
|
|
315
|
+
"OPEN_TICKET": "Открыть тикет",
|
|
316
|
+
"DESCRIPTION": "Вы подтверждаете, что хотите открыть тикет для этого разговора?",
|
|
317
|
+
"CONFIRM": "Подтвердить",
|
|
318
|
+
"CLOSE": "Закрыть"
|
|
319
|
+
}
|
|
310
320
|
}
|
package/src/assets/i18n/sr.json
CHANGED
|
@@ -225,6 +225,10 @@
|
|
|
225
225
|
"admin": "Aдминистратор",
|
|
226
226
|
"agent": "Агент",
|
|
227
227
|
"Conversations": "Разговори",
|
|
228
|
+
"Monitor": "Монитор",
|
|
229
|
+
"Flows": "Токови",
|
|
230
|
+
"Knowledgebases": "Baze znanja",
|
|
231
|
+
"Whatsappbroadcasts": "WhatsApp emitovanja",
|
|
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": "Emodžiji nisu dozvoljeni",
|
|
309
|
-
"DOMAIN_NOT_ALLOWED": "URL sadrži nedozvoljenu domenu"
|
|
313
|
+
"DOMAIN_NOT_ALLOWED": "URL sadrži nedozvoljenu domenu",
|
|
314
|
+
"TICKET": {
|
|
315
|
+
"OPEN_TICKET": "Otvori tiket",
|
|
316
|
+
"DESCRIPTION": "Da li potvrđujete da želite da otvorite tiket za ovaj razgovor?",
|
|
317
|
+
"CONFIRM": "Potvrdi",
|
|
318
|
+
"CLOSE": "Zatvori"
|
|
319
|
+
}
|
|
310
320
|
}
|