mirror of
				https://github.com/lingble/chatwoot.git
				synced 2025-10-31 11:08:04 +00:00 
			
		
		
		
	Merge branch 'develop' into feat/voice-channel: resolve App.vue and pnpm-lock.yaml conflicts
This commit is contained in:
		
							
								
								
									
										4
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -95,3 +95,7 @@ yarn-debug.log* | ||||
| .claude/settings.local.json | ||||
| .cursor | ||||
| CLAUDE.local.md | ||||
|  | ||||
| # Histoire deployment | ||||
| .netlify | ||||
| .histoire | ||||
|   | ||||
							
								
								
									
										2
									
								
								Gemfile
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								Gemfile
									
									
									
									
									
								
							| @@ -81,6 +81,7 @@ gem 'devise_token_auth', '>= 1.2.3' | ||||
| # authorization | ||||
| gem 'jwt' | ||||
| gem 'pundit' | ||||
|  | ||||
| # super admin | ||||
| gem 'administrate', '>= 0.20.1' | ||||
| gem 'administrate-field-active_storage', '>= 1.0.3' | ||||
| @@ -171,6 +172,7 @@ gem 'audited', '~> 5.4', '>= 5.4.1' | ||||
|  | ||||
| # need for google auth | ||||
| gem 'omniauth', '>= 2.1.2' | ||||
| gem 'omniauth-saml' | ||||
| gem 'omniauth-google-oauth2', '>= 1.1.3' | ||||
| gem 'omniauth-rails_csrf_protection', '~> 1.0', '>= 1.0.2' | ||||
|  | ||||
|   | ||||
							
								
								
									
										10
									
								
								Gemfile.lock
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								Gemfile.lock
									
									
									
									
									
								
							| @@ -589,8 +589,9 @@ GEM | ||||
|     oj (3.16.10) | ||||
|       bigdecimal (>= 3.0) | ||||
|       ostruct (>= 0.2) | ||||
|     omniauth (2.1.2) | ||||
|     omniauth (2.1.3) | ||||
|       hashie (>= 3.4.6) | ||||
|       logger | ||||
|       rack (>= 2.2.3) | ||||
|       rack-protection | ||||
|     omniauth-google-oauth2 (1.1.3) | ||||
| @@ -604,6 +605,9 @@ GEM | ||||
|     omniauth-rails_csrf_protection (1.0.2) | ||||
|       actionpack (>= 4.2) | ||||
|       omniauth (~> 2.0) | ||||
|     omniauth-saml (2.2.4) | ||||
|       omniauth (~> 2.1) | ||||
|       ruby-saml (~> 1.18) | ||||
|     opensearch-ruby (3.4.0) | ||||
|       faraday (>= 1.0, < 3) | ||||
|       multi_json (>= 1.0) | ||||
| @@ -773,6 +777,9 @@ GEM | ||||
|       faraday (>= 1) | ||||
|       faraday-multipart (>= 1) | ||||
|     ruby-progressbar (1.13.0) | ||||
|     ruby-saml (1.18.1) | ||||
|       nokogiri (>= 1.13.10) | ||||
|       rexml | ||||
|     ruby-vips (2.1.4) | ||||
|       ffi (~> 1.12) | ||||
|     ruby2_keywords (0.0.5) | ||||
| @@ -1047,6 +1054,7 @@ DEPENDENCIES | ||||
|   omniauth-google-oauth2 (>= 1.1.3) | ||||
|   omniauth-oauth2 | ||||
|   omniauth-rails_csrf_protection (~> 1.0, >= 1.0.2) | ||||
|   omniauth-saml | ||||
|   opensearch-ruby | ||||
|   pg | ||||
|   pg_search | ||||
|   | ||||
| @@ -4,17 +4,28 @@ module SwitchLocale | ||||
|   private | ||||
|  | ||||
|   def switch_locale(&) | ||||
|     # priority is for locale set in query string (mostly for widget/from js sdk) | ||||
|     # Priority is for locale set in query string (mostly for widget/from js sdk) | ||||
|     locale ||= params[:locale] | ||||
|  | ||||
|     # Use the user's locale if available | ||||
|     locale ||= locale_from_user | ||||
|  | ||||
|     # Use the locale from a custom domain if applicable | ||||
|     locale ||= locale_from_custom_domain | ||||
|  | ||||
|     # if locale is not set in account, let's use DEFAULT_LOCALE env variable | ||||
|     locale ||= ENV.fetch('DEFAULT_LOCALE', nil) | ||||
|  | ||||
|     set_locale(locale, &) | ||||
|   end | ||||
|  | ||||
|   def switch_locale_using_account_locale(&) | ||||
|     locale = locale_from_account(@current_account) | ||||
|     # Get the locale from the user first | ||||
|     locale = locale_from_user | ||||
|  | ||||
|     # Fallback to the account's locale if the user's locale is not set | ||||
|     locale ||= locale_from_account(@current_account) | ||||
|  | ||||
|     set_locale(locale, &) | ||||
|   end | ||||
|  | ||||
| @@ -32,6 +43,12 @@ module SwitchLocale | ||||
|     @portal.default_locale | ||||
|   end | ||||
|  | ||||
|   def locale_from_user | ||||
|     return unless @user | ||||
|  | ||||
|     @user.ui_settings&.dig('locale') | ||||
|   end | ||||
|  | ||||
|   def set_locale(locale, &) | ||||
|     safe_locale = validate_and_get_locale(locale) | ||||
|     # Ensure locale won't bleed into other requests | ||||
|   | ||||
| @@ -47,10 +47,8 @@ class DeviseOverrides::OmniauthCallbacksController < DeviseTokenAuth::OmniauthCa | ||||
|   end | ||||
|  | ||||
|   def get_resource_from_auth_hash # rubocop:disable Naming/AccessorMethodName | ||||
|     # find the user with their email instead of UID and token | ||||
|     @resource = resource_class.where( | ||||
|       email: auth_hash['info']['email'] | ||||
|     ).first | ||||
|     email = auth_hash.dig('info', 'email') | ||||
|     @resource = resource_class.from_email(email) | ||||
|   end | ||||
|  | ||||
|   def validate_signup_email_is_business_domain? | ||||
| @@ -75,3 +73,5 @@ class DeviseOverrides::OmniauthCallbacksController < DeviseTokenAuth::OmniauthCa | ||||
|     'user' | ||||
|   end | ||||
| end | ||||
|  | ||||
| DeviseOverrides::OmniauthCallbacksController.prepend_mod_with('DeviseOverrides::OmniauthCallbacksController') | ||||
|   | ||||
| @@ -44,3 +44,5 @@ class DeviseOverrides::PasswordsController < Devise::PasswordsController | ||||
|     }, status: status | ||||
|   end | ||||
| end | ||||
|  | ||||
| DeviseOverrides::PasswordsController.prepend_mod_with('DeviseOverrides::PasswordsController') | ||||
|   | ||||
| @@ -1,4 +1,5 @@ | ||||
| module PortalHelper | ||||
|   include UrlHelper | ||||
|   def set_og_image_url(portal_name, title) | ||||
|     cdn_url = GlobalConfig.get('OG_IMAGE_CDN_URL')['OG_IMAGE_CDN_URL'] | ||||
|     return if cdn_url.blank? | ||||
| @@ -79,7 +80,7 @@ module PortalHelper | ||||
|     query_params = Rack::Utils.parse_query(url.query) | ||||
|     query_params['utm_medium'] = 'helpcenter' | ||||
|     query_params['utm_campaign'] = 'branding' | ||||
|     query_params['utm_source'] = URI.parse(referer).host if referer.present? && referer.match?(URI::DEFAULT_PARSER.make_regexp) | ||||
|     query_params['utm_source'] = URI.parse(referer).host if url_valid?(referer) | ||||
|  | ||||
|     url.query = query_params.to_query | ||||
|     url.to_s | ||||
|   | ||||
| @@ -20,7 +20,11 @@ import { | ||||
|   verifyServiceWorkerExistence, | ||||
| } from './helper/pushHelper'; | ||||
| import ReconnectService from 'dashboard/helper/ReconnectService'; | ||||
| import { getAlertAudio, initOnEvents } from 'shared/helpers/AudioNotificationHelper'; | ||||
| import { | ||||
|   getAlertAudio, | ||||
|   initOnEvents, | ||||
| } from 'shared/helpers/AudioNotificationHelper'; | ||||
| import { useUISettings } from 'dashboard/composables/useUISettings'; | ||||
|  | ||||
| export default { | ||||
|   name: 'App', | ||||
| @@ -41,12 +45,14 @@ export default { | ||||
|     const { accountId } = useAccount(); | ||||
|     // Use the font size composable (it automatically sets up the watcher) | ||||
|     const { currentFontSize } = useFontSize(); | ||||
|     const { uiSettings } = useUISettings(); | ||||
|  | ||||
|     return { | ||||
|       router, | ||||
|       store, | ||||
|       currentAccountId: accountId, | ||||
|       currentFontSize, | ||||
|       uiSettings, | ||||
|     }; | ||||
|   }, | ||||
|   data() { | ||||
| @@ -93,8 +99,10 @@ export default { | ||||
|   mounted() { | ||||
|     this.initializeColorTheme(); | ||||
|     this.listenToThemeChanges(); | ||||
|     this.setLocale(window.chatwootConfig.selectedLocale); | ||||
|  | ||||
|     // If user locale is set, use it; otherwise use account locale | ||||
|     this.setLocale( | ||||
|       this.uiSettings?.locale || window.chatwootConfig.selectedLocale | ||||
|     ); | ||||
|  | ||||
|     // Prepare dashboard ringtone; requires a user gesture once to unlock AudioContext | ||||
|     window.playAudioAlert = () => {}; | ||||
| @@ -136,7 +144,8 @@ export default { | ||||
|       const { locale, latest_chatwoot_version: latestChatwootVersion } = | ||||
|         this.getAccount(this.currentAccountId); | ||||
|       const { pubsub_token: pubsubToken } = this.currentUser || {}; | ||||
|       this.setLocale(locale); | ||||
|       // If user locale is set, use it; otherwise use account locale | ||||
|       this.setLocale(this.uiSettings?.locale || locale); | ||||
|       this.latestChatwootVersion = latestChatwootVersion; | ||||
|       vueActionCable.init(this.store, pubsubToken); | ||||
|       this.reconnectService = new ReconnectService(this.store, this.router); | ||||
|   | ||||
							
								
								
									
										43
									
								
								app/javascript/dashboard/api/agentCapacityPolicies.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								app/javascript/dashboard/api/agentCapacityPolicies.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,43 @@ | ||||
| /* global axios */ | ||||
|  | ||||
| import ApiClient from './ApiClient'; | ||||
|  | ||||
| class AgentCapacityPolicies extends ApiClient { | ||||
|   constructor() { | ||||
|     super('agent_capacity_policies', { accountScoped: true }); | ||||
|   } | ||||
|  | ||||
|   getUsers(policyId) { | ||||
|     return axios.get(`${this.url}/${policyId}/users`); | ||||
|   } | ||||
|  | ||||
|   addUser(policyId, userData) { | ||||
|     return axios.post(`${this.url}/${policyId}/users`, { | ||||
|       user_id: userData.id, | ||||
|       capacity: userData.capacity, | ||||
|     }); | ||||
|   } | ||||
|  | ||||
|   removeUser(policyId, userId) { | ||||
|     return axios.delete(`${this.url}/${policyId}/users/${userId}`); | ||||
|   } | ||||
|  | ||||
|   createInboxLimit(policyId, limitData) { | ||||
|     return axios.post(`${this.url}/${policyId}/inbox_limits`, { | ||||
|       inbox_id: limitData.inboxId, | ||||
|       conversation_limit: limitData.conversationLimit, | ||||
|     }); | ||||
|   } | ||||
|  | ||||
|   updateInboxLimit(policyId, limitId, limitData) { | ||||
|     return axios.put(`${this.url}/${policyId}/inbox_limits/${limitId}`, { | ||||
|       conversation_limit: limitData.conversationLimit, | ||||
|     }); | ||||
|   } | ||||
|  | ||||
|   deleteInboxLimit(policyId, limitId) { | ||||
|     return axios.delete(`${this.url}/${policyId}/inbox_limits/${limitId}`); | ||||
|   } | ||||
| } | ||||
|  | ||||
| export default new AgentCapacityPolicies(); | ||||
							
								
								
									
										36
									
								
								app/javascript/dashboard/api/assignmentPolicies.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								app/javascript/dashboard/api/assignmentPolicies.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,36 @@ | ||||
| /* global axios */ | ||||
|  | ||||
| import ApiClient from './ApiClient'; | ||||
|  | ||||
| class AssignmentPolicies extends ApiClient { | ||||
|   constructor() { | ||||
|     super('assignment_policies', { accountScoped: true }); | ||||
|   } | ||||
|  | ||||
|   getInboxes(policyId) { | ||||
|     return axios.get(`${this.url}/${policyId}/inboxes`); | ||||
|   } | ||||
|  | ||||
|   setInboxPolicy(inboxId, policyId) { | ||||
|     return axios.post( | ||||
|       `/api/v1/accounts/${this.accountIdFromRoute}/inboxes/${inboxId}/assignment_policy`, | ||||
|       { | ||||
|         assignment_policy_id: policyId, | ||||
|       } | ||||
|     ); | ||||
|   } | ||||
|  | ||||
|   getInboxPolicy(inboxId) { | ||||
|     return axios.get( | ||||
|       `/api/v1/accounts/${this.accountIdFromRoute}/inboxes/${inboxId}/assignment_policy` | ||||
|     ); | ||||
|   } | ||||
|  | ||||
|   removeInboxPolicy(inboxId) { | ||||
|     return axios.delete( | ||||
|       `/api/v1/accounts/${this.accountIdFromRoute}/inboxes/${inboxId}/assignment_policy` | ||||
|     ); | ||||
|   } | ||||
| } | ||||
|  | ||||
| export default new AssignmentPolicies(); | ||||
| @@ -0,0 +1,98 @@ | ||||
| import agentCapacityPolicies from '../agentCapacityPolicies'; | ||||
| import ApiClient from '../ApiClient'; | ||||
|  | ||||
| describe('#AgentCapacityPoliciesAPI', () => { | ||||
|   it('creates correct instance', () => { | ||||
|     expect(agentCapacityPolicies).toBeInstanceOf(ApiClient); | ||||
|     expect(agentCapacityPolicies).toHaveProperty('get'); | ||||
|     expect(agentCapacityPolicies).toHaveProperty('show'); | ||||
|     expect(agentCapacityPolicies).toHaveProperty('create'); | ||||
|     expect(agentCapacityPolicies).toHaveProperty('update'); | ||||
|     expect(agentCapacityPolicies).toHaveProperty('delete'); | ||||
|     expect(agentCapacityPolicies).toHaveProperty('getUsers'); | ||||
|     expect(agentCapacityPolicies).toHaveProperty('addUser'); | ||||
|     expect(agentCapacityPolicies).toHaveProperty('removeUser'); | ||||
|     expect(agentCapacityPolicies).toHaveProperty('createInboxLimit'); | ||||
|     expect(agentCapacityPolicies).toHaveProperty('updateInboxLimit'); | ||||
|     expect(agentCapacityPolicies).toHaveProperty('deleteInboxLimit'); | ||||
|   }); | ||||
|  | ||||
|   describe('API calls', () => { | ||||
|     const originalAxios = window.axios; | ||||
|     const axiosMock = { | ||||
|       get: vi.fn(() => Promise.resolve()), | ||||
|       post: vi.fn(() => Promise.resolve()), | ||||
|       put: vi.fn(() => Promise.resolve()), | ||||
|       delete: vi.fn(() => Promise.resolve()), | ||||
|     }; | ||||
|  | ||||
|     beforeEach(() => { | ||||
|       window.axios = axiosMock; | ||||
|       // Mock accountIdFromRoute | ||||
|       Object.defineProperty(agentCapacityPolicies, 'accountIdFromRoute', { | ||||
|         get: () => '1', | ||||
|         configurable: true, | ||||
|       }); | ||||
|     }); | ||||
|  | ||||
|     afterEach(() => { | ||||
|       window.axios = originalAxios; | ||||
|     }); | ||||
|  | ||||
|     it('#getUsers', () => { | ||||
|       agentCapacityPolicies.getUsers(123); | ||||
|       expect(axiosMock.get).toHaveBeenCalledWith( | ||||
|         '/api/v1/accounts/1/agent_capacity_policies/123/users' | ||||
|       ); | ||||
|     }); | ||||
|  | ||||
|     it('#addUser', () => { | ||||
|       const userData = { id: 456, capacity: 20 }; | ||||
|       agentCapacityPolicies.addUser(123, userData); | ||||
|       expect(axiosMock.post).toHaveBeenCalledWith( | ||||
|         '/api/v1/accounts/1/agent_capacity_policies/123/users', | ||||
|         { | ||||
|           user_id: 456, | ||||
|           capacity: 20, | ||||
|         } | ||||
|       ); | ||||
|     }); | ||||
|  | ||||
|     it('#removeUser', () => { | ||||
|       agentCapacityPolicies.removeUser(123, 456); | ||||
|       expect(axiosMock.delete).toHaveBeenCalledWith( | ||||
|         '/api/v1/accounts/1/agent_capacity_policies/123/users/456' | ||||
|       ); | ||||
|     }); | ||||
|  | ||||
|     it('#createInboxLimit', () => { | ||||
|       const limitData = { inboxId: 1, conversationLimit: 10 }; | ||||
|       agentCapacityPolicies.createInboxLimit(123, limitData); | ||||
|       expect(axiosMock.post).toHaveBeenCalledWith( | ||||
|         '/api/v1/accounts/1/agent_capacity_policies/123/inbox_limits', | ||||
|         { | ||||
|           inbox_id: 1, | ||||
|           conversation_limit: 10, | ||||
|         } | ||||
|       ); | ||||
|     }); | ||||
|  | ||||
|     it('#updateInboxLimit', () => { | ||||
|       const limitData = { conversationLimit: 15 }; | ||||
|       agentCapacityPolicies.updateInboxLimit(123, 789, limitData); | ||||
|       expect(axiosMock.put).toHaveBeenCalledWith( | ||||
|         '/api/v1/accounts/1/agent_capacity_policies/123/inbox_limits/789', | ||||
|         { | ||||
|           conversation_limit: 15, | ||||
|         } | ||||
|       ); | ||||
|     }); | ||||
|  | ||||
|     it('#deleteInboxLimit', () => { | ||||
|       agentCapacityPolicies.deleteInboxLimit(123, 789); | ||||
|       expect(axiosMock.delete).toHaveBeenCalledWith( | ||||
|         '/api/v1/accounts/1/agent_capacity_policies/123/inbox_limits/789' | ||||
|       ); | ||||
|     }); | ||||
|   }); | ||||
| }); | ||||
| @@ -0,0 +1,70 @@ | ||||
| import assignmentPolicies from '../assignmentPolicies'; | ||||
| import ApiClient from '../ApiClient'; | ||||
|  | ||||
| describe('#AssignmentPoliciesAPI', () => { | ||||
|   it('creates correct instance', () => { | ||||
|     expect(assignmentPolicies).toBeInstanceOf(ApiClient); | ||||
|     expect(assignmentPolicies).toHaveProperty('get'); | ||||
|     expect(assignmentPolicies).toHaveProperty('show'); | ||||
|     expect(assignmentPolicies).toHaveProperty('create'); | ||||
|     expect(assignmentPolicies).toHaveProperty('update'); | ||||
|     expect(assignmentPolicies).toHaveProperty('delete'); | ||||
|     expect(assignmentPolicies).toHaveProperty('getInboxes'); | ||||
|     expect(assignmentPolicies).toHaveProperty('setInboxPolicy'); | ||||
|     expect(assignmentPolicies).toHaveProperty('getInboxPolicy'); | ||||
|     expect(assignmentPolicies).toHaveProperty('removeInboxPolicy'); | ||||
|   }); | ||||
|  | ||||
|   describe('API calls', () => { | ||||
|     const originalAxios = window.axios; | ||||
|     const axiosMock = { | ||||
|       get: vi.fn(() => Promise.resolve()), | ||||
|       post: vi.fn(() => Promise.resolve()), | ||||
|       delete: vi.fn(() => Promise.resolve()), | ||||
|     }; | ||||
|  | ||||
|     beforeEach(() => { | ||||
|       window.axios = axiosMock; | ||||
|       // Mock accountIdFromRoute | ||||
|       Object.defineProperty(assignmentPolicies, 'accountIdFromRoute', { | ||||
|         get: () => '1', | ||||
|         configurable: true, | ||||
|       }); | ||||
|     }); | ||||
|  | ||||
|     afterEach(() => { | ||||
|       window.axios = originalAxios; | ||||
|     }); | ||||
|  | ||||
|     it('#getInboxes', () => { | ||||
|       assignmentPolicies.getInboxes(123); | ||||
|       expect(axiosMock.get).toHaveBeenCalledWith( | ||||
|         '/api/v1/accounts/1/assignment_policies/123/inboxes' | ||||
|       ); | ||||
|     }); | ||||
|  | ||||
|     it('#setInboxPolicy', () => { | ||||
|       assignmentPolicies.setInboxPolicy(456, 123); | ||||
|       expect(axiosMock.post).toHaveBeenCalledWith( | ||||
|         '/api/v1/accounts/1/inboxes/456/assignment_policy', | ||||
|         { | ||||
|           assignment_policy_id: 123, | ||||
|         } | ||||
|       ); | ||||
|     }); | ||||
|  | ||||
|     it('#getInboxPolicy', () => { | ||||
|       assignmentPolicies.getInboxPolicy(456); | ||||
|       expect(axiosMock.get).toHaveBeenCalledWith( | ||||
|         '/api/v1/accounts/1/inboxes/456/assignment_policy' | ||||
|       ); | ||||
|     }); | ||||
|  | ||||
|     it('#removeInboxPolicy', () => { | ||||
|       assignmentPolicies.removeInboxPolicy(456); | ||||
|       expect(axiosMock.delete).toHaveBeenCalledWith( | ||||
|         '/api/v1/accounts/1/inboxes/456/assignment_policy' | ||||
|       ); | ||||
|     }); | ||||
|   }); | ||||
| }); | ||||
| @@ -0,0 +1,116 @@ | ||||
| <script setup> | ||||
| import AgentCapacityPolicyCard from './AgentCapacityPolicyCard.vue'; | ||||
|  | ||||
| const mockUsers = [ | ||||
|   { | ||||
|     id: 1, | ||||
|     name: 'John Smith', | ||||
|     email: 'john.smith@example.com', | ||||
|     avatarUrl: 'https://i.pravatar.cc/150?img=1', | ||||
|   }, | ||||
|   { | ||||
|     id: 2, | ||||
|     name: 'Sarah Johnson', | ||||
|     email: 'sarah.johnson@example.com', | ||||
|     avatarUrl: 'https://i.pravatar.cc/150?img=2', | ||||
|   }, | ||||
|   { | ||||
|     id: 3, | ||||
|     name: 'Mike Chen', | ||||
|     email: 'mike.chen@example.com', | ||||
|     avatarUrl: 'https://i.pravatar.cc/150?img=3', | ||||
|   }, | ||||
|   { | ||||
|     id: 4, | ||||
|     name: 'Emily Davis', | ||||
|     email: 'emily.davis@example.com', | ||||
|     avatarUrl: 'https://i.pravatar.cc/150?img=4', | ||||
|   }, | ||||
|   { | ||||
|     id: 5, | ||||
|     name: 'Alex Rodriguez', | ||||
|     email: 'alex.rodriguez@example.com', | ||||
|     avatarUrl: 'https://i.pravatar.cc/150?img=5', | ||||
|   }, | ||||
| ]; | ||||
|  | ||||
| const withCount = policy => ({ | ||||
|   ...policy, | ||||
|   assignedAgentCount: policy.users.length, | ||||
| }); | ||||
|  | ||||
| const policyA = withCount({ | ||||
|   id: 1, | ||||
|   name: 'High Volume Support', | ||||
|   description: | ||||
|     'Capacity-based policy for handling high conversation volumes with experienced agents', | ||||
|   users: [mockUsers[0], mockUsers[1], mockUsers[2]], | ||||
|   isFetchingUsers: false, | ||||
| }); | ||||
|  | ||||
| const policyB = withCount({ | ||||
|   id: 2, | ||||
|   name: 'Specialized Team', | ||||
|   description: 'Custom capacity limits for specialized support team members', | ||||
|   users: [mockUsers[3], mockUsers[4]], | ||||
|   isFetchingUsers: false, | ||||
| }); | ||||
|  | ||||
| const emptyPolicy = withCount({ | ||||
|   id: 3, | ||||
|   name: 'New Policy', | ||||
|   description: 'Recently created policy with no assigned agents yet', | ||||
|   users: [], | ||||
|   isFetchingUsers: false, | ||||
| }); | ||||
|  | ||||
| const loadingPolicy = withCount({ | ||||
|   id: 4, | ||||
|   name: 'Loading Policy', | ||||
|   description: 'Policy currently loading agent information', | ||||
|   users: [], | ||||
|   isFetchingUsers: true, | ||||
| }); | ||||
|  | ||||
| const onEdit = id => console.log('Edit policy:', id); | ||||
| const onDelete = id => console.log('Delete policy:', id); | ||||
| const onFetchUsers = id => console.log('Fetch users for policy:', id); | ||||
| </script> | ||||
|  | ||||
| <template> | ||||
|   <Story | ||||
|     title="Components/AgentManagementPolicy/AgentCapacityPolicyCard" | ||||
|     :layout="{ type: 'grid', width: '1200px' }" | ||||
|   > | ||||
|     <Variant title="Multiple Cards (Various States)"> | ||||
|       <div class="p-4 bg-n-background"> | ||||
|         <div class="grid grid-cols-1 gap-4"> | ||||
|           <AgentCapacityPolicyCard | ||||
|             v-bind="policyA" | ||||
|             @edit="onEdit" | ||||
|             @delete="onDelete" | ||||
|             @fetch-users="onFetchUsers" | ||||
|           /> | ||||
|           <AgentCapacityPolicyCard | ||||
|             v-bind="policyB" | ||||
|             @edit="onEdit" | ||||
|             @delete="onDelete" | ||||
|             @fetch-users="onFetchUsers" | ||||
|           /> | ||||
|           <AgentCapacityPolicyCard | ||||
|             v-bind="emptyPolicy" | ||||
|             @edit="onEdit" | ||||
|             @delete="onDelete" | ||||
|             @fetch-users="onFetchUsers" | ||||
|           /> | ||||
|           <AgentCapacityPolicyCard | ||||
|             v-bind="loadingPolicy" | ||||
|             @edit="onEdit" | ||||
|             @delete="onDelete" | ||||
|             @fetch-users="onFetchUsers" | ||||
|           /> | ||||
|         </div> | ||||
|       </div> | ||||
|     </Variant> | ||||
|   </Story> | ||||
| </template> | ||||
| @@ -0,0 +1,86 @@ | ||||
| <script setup> | ||||
| import { computed } from 'vue'; | ||||
| import { useI18n } from 'vue-i18n'; | ||||
|  | ||||
| import Button from 'dashboard/components-next/button/Button.vue'; | ||||
| import CardLayout from 'dashboard/components-next/CardLayout.vue'; | ||||
| import CardPopover from '../components/CardPopover.vue'; | ||||
|  | ||||
| const props = defineProps({ | ||||
|   id: { type: Number, required: true }, | ||||
|   name: { type: String, default: '' }, | ||||
|   description: { type: String, default: '' }, | ||||
|   assignedAgentCount: { type: Number, default: 0 }, | ||||
|   users: { type: Array, default: () => [] }, | ||||
|   isFetchingUsers: { type: Boolean, default: false }, | ||||
| }); | ||||
|  | ||||
| const emit = defineEmits(['edit', 'delete', 'fetchUsers']); | ||||
|  | ||||
| const { t } = useI18n(); | ||||
|  | ||||
| const users = computed(() => { | ||||
|   return props.users.map(user => { | ||||
|     return { | ||||
|       name: user.name, | ||||
|       key: user.id, | ||||
|       email: user.email, | ||||
|       avatarUrl: user.avatarUrl, | ||||
|     }; | ||||
|   }); | ||||
| }); | ||||
|  | ||||
| const handleEdit = () => { | ||||
|   emit('edit', props.id); | ||||
| }; | ||||
|  | ||||
| const handleDelete = () => { | ||||
|   emit('delete', props.id); | ||||
| }; | ||||
|  | ||||
| const handleFetchUsers = () => { | ||||
|   if (props.users?.length > 0) return; | ||||
|   emit('fetchUsers', props.id); | ||||
| }; | ||||
| </script> | ||||
|  | ||||
| <template> | ||||
|   <CardLayout class="[&>div]:px-5"> | ||||
|     <div class="flex flex-col gap-2 relative justify-between w-full"> | ||||
|       <div class="flex items-center gap-3 justify-between w-full"> | ||||
|         <div class="flex items-center gap-3"> | ||||
|           <h3 class="text-base font-medium text-n-slate-12 line-clamp-1"> | ||||
|             {{ name }} | ||||
|           </h3> | ||||
|           <CardPopover | ||||
|             :title=" | ||||
|               t('ASSIGNMENT_POLICY.AGENT_CAPACITY_POLICY.INDEX.CARD.POPOVER') | ||||
|             " | ||||
|             icon="i-lucide-users-round" | ||||
|             :count="assignedAgentCount" | ||||
|             :items="users" | ||||
|             :is-fetching="isFetchingUsers" | ||||
|             @fetch="handleFetchUsers" | ||||
|           /> | ||||
|         </div> | ||||
|         <div class="flex items-center gap-2"> | ||||
|           <Button | ||||
|             :label=" | ||||
|               t('ASSIGNMENT_POLICY.AGENT_CAPACITY_POLICY.INDEX.CARD.EDIT') | ||||
|             " | ||||
|             sm | ||||
|             slate | ||||
|             link | ||||
|             class="px-2" | ||||
|             @click="handleEdit" | ||||
|           /> | ||||
|           <div class="w-px h-2.5 bg-n-slate-5" /> | ||||
|           <Button icon="i-lucide-trash" sm slate ghost @click="handleDelete" /> | ||||
|         </div> | ||||
|       </div> | ||||
|       <p class="text-n-slate-11 text-sm line-clamp-1 mb-0 py-1"> | ||||
|         {{ description }} | ||||
|       </p> | ||||
|     </div> | ||||
|   </CardLayout> | ||||
| </template> | ||||
| @@ -0,0 +1,104 @@ | ||||
| <script setup> | ||||
| import AssignmentPolicyCard from './AssignmentPolicyCard.vue'; | ||||
|  | ||||
| const mockInboxes = [ | ||||
|   { | ||||
|     id: 1, | ||||
|     name: 'Website Support', | ||||
|     channel_type: 'Channel::WebWidget', | ||||
|     inbox_type: 'Website', | ||||
|   }, | ||||
|   { | ||||
|     id: 2, | ||||
|     name: 'Email Support', | ||||
|     channel_type: 'Channel::Email', | ||||
|     inbox_type: 'Email', | ||||
|   }, | ||||
|   { | ||||
|     id: 3, | ||||
|     name: 'WhatsApp Business', | ||||
|     channel_type: 'Channel::Whatsapp', | ||||
|     inbox_type: 'WhatsApp', | ||||
|   }, | ||||
|   { | ||||
|     id: 4, | ||||
|     name: 'Facebook Messenger', | ||||
|     channel_type: 'Channel::FacebookPage', | ||||
|     inbox_type: 'Messenger', | ||||
|   }, | ||||
| ]; | ||||
|  | ||||
| const withCount = policy => ({ | ||||
|   ...policy, | ||||
|   assignedInboxCount: policy.inboxes.length, | ||||
| }); | ||||
|  | ||||
| const policyA = withCount({ | ||||
|   id: 1, | ||||
|   name: 'Website & Email', | ||||
|   description: 'Distributes conversations evenly among available agents', | ||||
|   assignmentOrder: 'round_robin', | ||||
|   conversationPriority: 'high', | ||||
|   enabled: true, | ||||
|   inboxes: [mockInboxes[0], mockInboxes[1]], | ||||
|   isFetchingInboxes: false, | ||||
| }); | ||||
|  | ||||
| const policyB = withCount({ | ||||
|   id: 2, | ||||
|   name: 'WhatsApp & Messenger', | ||||
|   description: 'Assigns based on capacity and workload', | ||||
|   assignmentOrder: 'capacity_based', | ||||
|   conversationPriority: 'medium', | ||||
|   enabled: true, | ||||
|   inboxes: [mockInboxes[2], mockInboxes[3]], | ||||
|   isFetchingInboxes: false, | ||||
| }); | ||||
|  | ||||
| const emptyPolicy = withCount({ | ||||
|   id: 3, | ||||
|   name: 'No Inboxes Yet', | ||||
|   description: 'Policy with no assigned inboxes', | ||||
|   assignmentOrder: 'manual', | ||||
|   conversationPriority: 'low', | ||||
|   enabled: false, | ||||
|   inboxes: [], | ||||
|   isFetchingInboxes: false, | ||||
| }); | ||||
|  | ||||
| const onEdit = id => console.log('Edit policy:', id); | ||||
| const onDelete = id => console.log('Delete policy:', id); | ||||
| const onFetch = () => console.log('Fetch inboxes'); | ||||
| </script> | ||||
|  | ||||
| <template> | ||||
|   <Story | ||||
|     title="Components/AgentManagementPolicy/AssignmentPolicyCard" | ||||
|     :layout="{ type: 'grid', width: '1200px' }" | ||||
|   > | ||||
|     <Variant title="Three Cards (Two with inboxes, One empty)"> | ||||
|       <div class="p-4 bg-n-background"> | ||||
|         <div class="grid grid-cols-1 gap-4"> | ||||
|           <AssignmentPolicyCard | ||||
|             v-bind="policyA" | ||||
|             @edit="onEdit" | ||||
|             @delete="onDelete" | ||||
|             @fetch-inboxes="onFetch" | ||||
|           /> | ||||
|           <AssignmentPolicyCard | ||||
|             v-bind="policyB" | ||||
|             @edit="onEdit" | ||||
|             @delete="onDelete" | ||||
|             @fetch-inboxes="onFetch" | ||||
|           /> | ||||
|           <AssignmentPolicyCard | ||||
|             v-bind="emptyPolicy" | ||||
|             @edit="onEdit" | ||||
|             @delete="onDelete" | ||||
|             @fetch-inboxes="onFetch" | ||||
|           /> | ||||
|         </div> | ||||
|       </div> | ||||
|     </Variant> | ||||
|   </Story> | ||||
| </template> | ||||
| @@ -0,0 +1,133 @@ | ||||
| <script setup> | ||||
| import { computed } from 'vue'; | ||||
| import { useI18n } from 'vue-i18n'; | ||||
| import { getInboxIconByType } from 'dashboard/helper/inbox'; | ||||
| import { formatToTitleCase } from 'dashboard/helper/commons'; | ||||
|  | ||||
| import Button from 'dashboard/components-next/button/Button.vue'; | ||||
| import CardLayout from 'dashboard/components-next/CardLayout.vue'; | ||||
| import CardPopover from '../components/CardPopover.vue'; | ||||
|  | ||||
| const props = defineProps({ | ||||
|   id: { type: Number, required: true }, | ||||
|   name: { type: String, default: '' }, | ||||
|   description: { type: String, default: '' }, | ||||
|   assignmentOrder: { type: String, default: '' }, | ||||
|   conversationPriority: { type: String, default: '' }, | ||||
|   assignedInboxCount: { type: Number, default: 0 }, | ||||
|   enabled: { type: Boolean, default: false }, | ||||
|   inboxes: { type: Array, default: () => [] }, | ||||
|   isFetchingInboxes: { type: Boolean, default: false }, | ||||
| }); | ||||
|  | ||||
| const emit = defineEmits(['edit', 'delete', 'fetchInboxes']); | ||||
|  | ||||
| const { t } = useI18n(); | ||||
|  | ||||
| const inboxes = computed(() => { | ||||
|   return props.inboxes.map(inbox => { | ||||
|     return { | ||||
|       name: inbox.name, | ||||
|       id: inbox.id, | ||||
|       icon: getInboxIconByType(inbox.channelType, inbox.medium, 'line'), | ||||
|     }; | ||||
|   }); | ||||
| }); | ||||
|  | ||||
| const order = computed(() => { | ||||
|   return formatToTitleCase(props.assignmentOrder); | ||||
| }); | ||||
|  | ||||
| const priority = computed(() => { | ||||
|   return formatToTitleCase(props.conversationPriority); | ||||
| }); | ||||
|  | ||||
| const handleEdit = () => { | ||||
|   emit('edit', props.id); | ||||
| }; | ||||
|  | ||||
| const handleDelete = () => { | ||||
|   emit('delete', props.id); | ||||
| }; | ||||
|  | ||||
| const handleFetchInboxes = () => { | ||||
|   if (props.inboxes?.length > 0) return; | ||||
|   emit('fetchInboxes', props.id); | ||||
| }; | ||||
| </script> | ||||
|  | ||||
| <template> | ||||
|   <CardLayout class="[&>div]:px-5"> | ||||
|     <div class="flex flex-col gap-2 relative justify-between w-full"> | ||||
|       <div class="flex items-center gap-3 justify-between w-full"> | ||||
|         <div class="flex items-center gap-3"> | ||||
|           <h3 class="text-base font-medium text-n-slate-12 line-clamp-1"> | ||||
|             {{ name }} | ||||
|           </h3> | ||||
|           <div class="flex items-center gap-2"> | ||||
|             <div class="flex items-center rounded-md bg-n-alpha-2 h-6 px-2"> | ||||
|               <span | ||||
|                 class="text-xs" | ||||
|                 :class="enabled ? 'text-n-teal-11' : 'text-n-slate-12'" | ||||
|               > | ||||
|                 {{ | ||||
|                   enabled | ||||
|                     ? t( | ||||
|                         'ASSIGNMENT_POLICY.AGENT_ASSIGNMENT_POLICY.INDEX.CARD.ACTIVE' | ||||
|                       ) | ||||
|                     : t( | ||||
|                         'ASSIGNMENT_POLICY.AGENT_ASSIGNMENT_POLICY.INDEX.CARD.INACTIVE' | ||||
|                       ) | ||||
|                 }} | ||||
|               </span> | ||||
|             </div> | ||||
|             <CardPopover | ||||
|               :title=" | ||||
|                 t( | ||||
|                   'ASSIGNMENT_POLICY.AGENT_ASSIGNMENT_POLICY.INDEX.CARD.POPOVER' | ||||
|                 ) | ||||
|               " | ||||
|               icon="i-lucide-inbox" | ||||
|               :count="assignedInboxCount" | ||||
|               :items="inboxes" | ||||
|               :is-fetching="isFetchingInboxes" | ||||
|               @fetch="handleFetchInboxes" | ||||
|             /> | ||||
|           </div> | ||||
|         </div> | ||||
|         <div class="flex items-center gap-2"> | ||||
|           <Button | ||||
|             :label=" | ||||
|               t('ASSIGNMENT_POLICY.AGENT_ASSIGNMENT_POLICY.INDEX.CARD.EDIT') | ||||
|             " | ||||
|             sm | ||||
|             slate | ||||
|             link | ||||
|             class="px-2" | ||||
|             @click="handleEdit" | ||||
|           /> | ||||
|           <div v-if="order" class="w-px h-2.5 bg-n-slate-5" /> | ||||
|           <Button icon="i-lucide-trash" sm slate ghost @click="handleDelete" /> | ||||
|         </div> | ||||
|       </div> | ||||
|       <p class="text-n-slate-11 text-sm line-clamp-1 mb-0 py-1"> | ||||
|         {{ description }} | ||||
|       </p> | ||||
|       <div class="flex items-center gap-3 py-1.5"> | ||||
|         <span v-if="order" class="text-n-slate-11 text-sm"> | ||||
|           {{ | ||||
|             `${t('ASSIGNMENT_POLICY.AGENT_ASSIGNMENT_POLICY.INDEX.CARD.ORDER')}:` | ||||
|           }} | ||||
|           <span class="text-n-slate-12">{{ order }}</span> | ||||
|         </span> | ||||
|         <div v-if="order" class="w-px h-3 bg-n-strong" /> | ||||
|         <span v-if="priority" class="text-n-slate-11 text-sm"> | ||||
|           {{ | ||||
|             `${t('ASSIGNMENT_POLICY.AGENT_ASSIGNMENT_POLICY.INDEX.CARD.PRIORITY')}:` | ||||
|           }} | ||||
|           <span class="text-n-slate-12">{{ priority }}</span> | ||||
|         </span> | ||||
|       </div> | ||||
|     </div> | ||||
|   </CardLayout> | ||||
| </template> | ||||
| @@ -0,0 +1,134 @@ | ||||
| <script setup> | ||||
| import { computed, ref } from 'vue'; | ||||
| import { useToggle } from '@vueuse/core'; | ||||
| import { vOnClickOutside } from '@vueuse/components'; | ||||
| import { picoSearch } from '@scmmishra/pico-search'; | ||||
|  | ||||
| import Avatar from 'next/avatar/Avatar.vue'; | ||||
| import Icon from 'dashboard/components-next/icon/Icon.vue'; | ||||
| import Button from 'dashboard/components-next/button/Button.vue'; | ||||
| import Input from 'dashboard/components-next/input/Input.vue'; | ||||
|  | ||||
| const props = defineProps({ | ||||
|   label: { | ||||
|     type: String, | ||||
|     default: '', | ||||
|   }, | ||||
|   searchPlaceholder: { | ||||
|     type: String, | ||||
|     default: '', | ||||
|   }, | ||||
|   items: { | ||||
|     type: Array, | ||||
|     default: () => [], | ||||
|   }, | ||||
| }); | ||||
|  | ||||
| const emit = defineEmits(['add']); | ||||
|  | ||||
| const [showPopover, togglePopover] = useToggle(); | ||||
|  | ||||
| const searchValue = ref(''); | ||||
|  | ||||
| const filteredItems = computed(() => { | ||||
|   if (!searchValue.value) return props.items; | ||||
|   const query = searchValue.value.toLowerCase(); | ||||
|  | ||||
|   return picoSearch(props.items, query, ['name']); | ||||
| }); | ||||
|  | ||||
| const handleAdd = item => { | ||||
|   emit('add', item); | ||||
|   togglePopover(false); | ||||
| }; | ||||
|  | ||||
| const handleClickOutside = () => { | ||||
|   if (showPopover.value) { | ||||
|     togglePopover(false); | ||||
|   } | ||||
| }; | ||||
| </script> | ||||
|  | ||||
| <template> | ||||
|   <div | ||||
|     v-on-click-outside="handleClickOutside" | ||||
|     class="relative flex items-center group" | ||||
|   > | ||||
|     <Button | ||||
|       slate | ||||
|       type="button" | ||||
|       icon="i-lucide-plus" | ||||
|       sm | ||||
|       :label="label" | ||||
|       @click="togglePopover(!showPopover)" | ||||
|     /> | ||||
|     <div | ||||
|       v-if="showPopover" | ||||
|       class="top-full mt-2 ltr:right-0 rtl:left-0 xl:ltr:left-0 xl:rtl:right-0 z-50 flex flex-col items-start absolute bg-n-alpha-3 backdrop-blur-[50px] border-0 gap-4 outline outline-1 outline-n-weak rounded-xl max-w-96 min-w-80 max-h-[20rem] overflow-y-auto py-2" | ||||
|     > | ||||
|       <div class="flex flex-col divide-y divide-n-slate-4 w-full"> | ||||
|         <Input | ||||
|           v-model="searchValue" | ||||
|           :placeholder="searchPlaceholder" | ||||
|           custom-input-class="bg-transparent !outline-none w-full ltr:!pl-10 rtl:!pr-10 h-10" | ||||
|         > | ||||
|           <template #prefix> | ||||
|             <Icon | ||||
|               icon="i-lucide-search" | ||||
|               class="absolute -translate-y-1/2 text-n-slate-11 size-4 top-1/2 ltr:left-3 rtl:right-3" | ||||
|             /> | ||||
|           </template> | ||||
|         </Input> | ||||
|  | ||||
|         <div | ||||
|           v-for="item in filteredItems" | ||||
|           :key="item.id" | ||||
|           class="flex gap-3 min-w-0 w-full py-4 px-3 hover:bg-n-alpha-2 cursor-pointer" | ||||
|           :class="{ 'items-center': item.color, 'items-start': !item.color }" | ||||
|           @click="handleAdd(item)" | ||||
|         > | ||||
|           <Icon | ||||
|             v-if="item.icon" | ||||
|             :icon="item.icon" | ||||
|             class="size-2 text-n-slate-12 flex-shrink-0 mt-0.5" | ||||
|           /> | ||||
|           <span | ||||
|             v-else-if="item.color" | ||||
|             :style="{ backgroundColor: item.color }" | ||||
|             class="size-3 rounded-sm" | ||||
|           /> | ||||
|           <Avatar | ||||
|             v-else | ||||
|             :title="item.name" | ||||
|             :src="item.avatarUrl" | ||||
|             :name="item.name" | ||||
|             :size="20" | ||||
|             rounded-full | ||||
|           /> | ||||
|           <div class="flex flex-col items-start gap-2 min-w-0"> | ||||
|             <div class="flex items-center gap-1 min-w-0"> | ||||
|               <span | ||||
|                 :title="item.name || item.title" | ||||
|                 class="text-sm text-n-slate-12 truncate min-w-0" | ||||
|               > | ||||
|                 {{ item.name || item.title }} | ||||
|               </span> | ||||
|               <span | ||||
|                 v-if="item.id" | ||||
|                 class="text-xs text-n-slate-11 flex-shrink-0" | ||||
|               > | ||||
|                 {{ `#${item.id}` }} | ||||
|               </span> | ||||
|             </div> | ||||
|             <span | ||||
|               v-if="item.email || item.phoneNumber" | ||||
|               class="text-sm text-n-slate-11 truncate min-w-0" | ||||
|             > | ||||
|               {{ item.email || item.phoneNumber }} | ||||
|             </span> | ||||
|           </div> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|   </div> | ||||
| </template> | ||||
| @@ -0,0 +1,127 @@ | ||||
| <script setup> | ||||
| import { computed, watch } from 'vue'; | ||||
| import { useVuelidate } from '@vuelidate/core'; | ||||
| import { required, minLength } from '@vuelidate/validators'; | ||||
|  | ||||
| import WithLabel from 'v3/components/Form/WithLabel.vue'; | ||||
| import Input from 'dashboard/components-next/input/Input.vue'; | ||||
| import Switch from 'dashboard/components-next/switch/Switch.vue'; | ||||
|  | ||||
| defineProps({ | ||||
|   nameLabel: { | ||||
|     type: String, | ||||
|     default: '', | ||||
|   }, | ||||
|   namePlaceholder: { | ||||
|     type: String, | ||||
|     default: '', | ||||
|   }, | ||||
|   descriptionLabel: { | ||||
|     type: String, | ||||
|     default: '', | ||||
|   }, | ||||
|   descriptionPlaceholder: { | ||||
|     type: String, | ||||
|     default: '', | ||||
|   }, | ||||
|   statusLabel: { | ||||
|     type: String, | ||||
|     default: '', | ||||
|   }, | ||||
|   statusPlaceholder: { | ||||
|     type: String, | ||||
|     default: '', | ||||
|   }, | ||||
| }); | ||||
|  | ||||
| const emit = defineEmits(['validationChange']); | ||||
|  | ||||
| const policyName = defineModel('policyName', { | ||||
|   type: String, | ||||
|   default: '', | ||||
| }); | ||||
|  | ||||
| const description = defineModel('description', { | ||||
|   type: String, | ||||
|   default: '', | ||||
| }); | ||||
|  | ||||
| const enabled = defineModel('enabled', { | ||||
|   type: Boolean, | ||||
|   default: true, | ||||
| }); | ||||
|  | ||||
| const validationRules = { | ||||
|   policyName: { required, minLength: minLength(1) }, | ||||
|   description: { required, minLength: minLength(1) }, | ||||
| }; | ||||
|  | ||||
| const v$ = useVuelidate(validationRules, { policyName, description }); | ||||
|  | ||||
| const isValid = computed(() => !v$.value.$invalid); | ||||
|  | ||||
| watch( | ||||
|   isValid, | ||||
|   () => { | ||||
|     emit('validationChange', { | ||||
|       isValid: isValid.value, | ||||
|       section: 'baseInfo', | ||||
|     }); | ||||
|   }, | ||||
|   { immediate: true } | ||||
| ); | ||||
| </script> | ||||
|  | ||||
| <template> | ||||
|   <div class="flex flex-col gap-4 pb-4"> | ||||
|     <!-- Policy Name Field --> | ||||
|     <div class="flex items-center gap-6"> | ||||
|       <WithLabel | ||||
|         :label="nameLabel" | ||||
|         name="policyName" | ||||
|         class="flex items-center w-full [&>label]:min-w-[120px]" | ||||
|       > | ||||
|         <div class="flex-1"> | ||||
|           <Input | ||||
|             v-model="policyName" | ||||
|             type="text" | ||||
|             :placeholder="namePlaceholder" | ||||
|           /> | ||||
|         </div> | ||||
|       </WithLabel> | ||||
|     </div> | ||||
|  | ||||
|     <!-- Description Field --> | ||||
|     <div class="flex items-center gap-6"> | ||||
|       <WithLabel | ||||
|         :label="descriptionLabel" | ||||
|         name="description" | ||||
|         class="flex items-center w-full [&>label]:min-w-[120px]" | ||||
|       > | ||||
|         <div class="flex-1"> | ||||
|           <Input | ||||
|             v-model="description" | ||||
|             type="text" | ||||
|             :placeholder="descriptionPlaceholder" | ||||
|           /> | ||||
|         </div> | ||||
|       </WithLabel> | ||||
|     </div> | ||||
|  | ||||
|     <!-- Status Field --> | ||||
|     <div v-if="statusLabel" class="flex items-center gap-6"> | ||||
|       <WithLabel | ||||
|         :label="statusLabel" | ||||
|         name="enabled" | ||||
|         class="flex items-center w-full [&>label]:min-w-[120px]" | ||||
|       > | ||||
|         <div class="flex items-center gap-2"> | ||||
|           <Switch v-model="enabled" /> | ||||
|           <span class="text-sm text-n-slate-11"> | ||||
|             {{ statusPlaceholder }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </WithLabel> | ||||
|     </div> | ||||
|   </div> | ||||
| </template> | ||||
| @@ -0,0 +1,121 @@ | ||||
| <script setup> | ||||
| import { useToggle } from '@vueuse/core'; | ||||
| import { vOnClickOutside } from '@vueuse/components'; | ||||
|  | ||||
| import Avatar from 'next/avatar/Avatar.vue'; | ||||
| import Icon from 'dashboard/components-next/icon/Icon.vue'; | ||||
| import Spinner from 'dashboard/components-next/spinner/Spinner.vue'; | ||||
|  | ||||
| defineProps({ | ||||
|   count: { | ||||
|     type: Number, | ||||
|     default: 0, | ||||
|   }, | ||||
|   title: { | ||||
|     type: String, | ||||
|     default: '', | ||||
|   }, | ||||
|   icon: { | ||||
|     type: String, | ||||
|     default: '', | ||||
|   }, | ||||
|   items: { | ||||
|     type: Array, | ||||
|     default: () => [], | ||||
|   }, | ||||
|   isFetching: { | ||||
|     type: Boolean, | ||||
|     default: false, | ||||
|   }, | ||||
| }); | ||||
|  | ||||
| const emit = defineEmits(['fetch']); | ||||
|  | ||||
| const [showPopover, togglePopover] = useToggle(); | ||||
|  | ||||
| const handleButtonClick = () => { | ||||
|   emit('fetch'); | ||||
|   togglePopover(!showPopover.value); | ||||
| }; | ||||
|  | ||||
| const handleClickOutside = () => { | ||||
|   if (showPopover.value) { | ||||
|     togglePopover(false); | ||||
|   } | ||||
| }; | ||||
| </script> | ||||
|  | ||||
| <template> | ||||
|   <div | ||||
|     v-on-click-outside="handleClickOutside" | ||||
|     class="relative flex items-center group" | ||||
|   > | ||||
|     <button | ||||
|       v-if="count" | ||||
|       class="h-6 px-2 rounded-md bg-n-alpha-2 gap-1.5 flex items-center" | ||||
|       @click="handleButtonClick()" | ||||
|     > | ||||
|       <Icon :icon="icon" class="size-3.5 text-n-slate-12" /> | ||||
|       <span class="text-n-slate-12 text-sm"> | ||||
|         {{ count }} | ||||
|       </span> | ||||
|     </button> | ||||
|     <div | ||||
|       v-if="showPopover" | ||||
|       class="top-full mt-1 ltr:left-0 rtl:right-0 z-50 flex flex-col items-start absolute bg-n-alpha-3 backdrop-blur-[50px] border-0 gap-4 outline outline-1 outline-n-weak p-3 rounded-xl max-w-96 min-w-80 max-h-[20rem] overflow-y-auto" | ||||
|     > | ||||
|       <div class="flex items-center gap-2.5 pb-2"> | ||||
|         <Icon :icon="icon" class="size-3.5" /> | ||||
|         <span class="text-sm text-n-slate-12 font-medium">{{ title }}</span> | ||||
|       </div> | ||||
|  | ||||
|       <div | ||||
|         v-if="isFetching" | ||||
|         class="flex items-center justify-center py-3 w-full text-n-slate-11" | ||||
|       > | ||||
|         <Spinner /> | ||||
|       </div> | ||||
|  | ||||
|       <div v-else class="flex flex-col gap-4 w-full"> | ||||
|         <div | ||||
|           v-for="item in items" | ||||
|           :key="item.id" | ||||
|           class="flex items-center justify-between gap-2 min-w-0 w-full" | ||||
|         > | ||||
|           <div class="flex items-center gap-2 min-w-0 w-full"> | ||||
|             <Icon | ||||
|               v-if="item.icon" | ||||
|               :icon="item.icon" | ||||
|               class="size-4 text-n-slate-12 flex-shrink-0" | ||||
|             /> | ||||
|             <Avatar | ||||
|               v-else | ||||
|               :title="item.name" | ||||
|               :src="item.avatarUrl" | ||||
|               :name="item.name" | ||||
|               :size="20" | ||||
|               rounded-full | ||||
|             /> | ||||
|             <div class="flex items-center gap-1 min-w-0 flex-1"> | ||||
|               <span | ||||
|                 :title="item.name" | ||||
|                 class="text-sm text-n-slate-12 truncate min-w-0" | ||||
|               > | ||||
|                 {{ item.name }} | ||||
|               </span> | ||||
|               <span | ||||
|                 v-if="item.id" | ||||
|                 class="text-sm text-n-slate-11 flex-shrink-0" | ||||
|               > | ||||
|                 {{ `#${item.id}` }} | ||||
|               </span> | ||||
|             </div> | ||||
|           </div> | ||||
|           <span v-if="item.email" class="text-sm text-n-slate-11 flex-shrink-0"> | ||||
|             {{ item.email }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|   </div> | ||||
| </template> | ||||
| @@ -0,0 +1,90 @@ | ||||
| <script setup> | ||||
| import Avatar from 'next/avatar/Avatar.vue'; | ||||
| import Icon from 'dashboard/components-next/icon/Icon.vue'; | ||||
| import Button from 'dashboard/components-next/button/Button.vue'; | ||||
| import Spinner from 'dashboard/components-next/spinner/Spinner.vue'; | ||||
|  | ||||
| defineProps({ | ||||
|   items: { | ||||
|     type: Array, | ||||
|     default: () => [], | ||||
|   }, | ||||
|   isFetching: { | ||||
|     type: Boolean, | ||||
|     default: false, | ||||
|   }, | ||||
|   emptyStateMessage: { | ||||
|     type: String, | ||||
|     default: '', | ||||
|   }, | ||||
| }); | ||||
|  | ||||
| const emit = defineEmits(['delete']); | ||||
|  | ||||
| const handleDelete = itemId => { | ||||
|   emit('delete', itemId); | ||||
| }; | ||||
| </script> | ||||
|  | ||||
| <template> | ||||
|   <div | ||||
|     v-if="isFetching" | ||||
|     class="flex items-center justify-center py-3 w-full text-n-slate-11" | ||||
|   > | ||||
|     <Spinner /> | ||||
|   </div> | ||||
|   <div | ||||
|     v-else-if="items.length === 0 && emptyStateMessage" | ||||
|     class="custom-dashed-border flex items-center justify-center py-6 w-full" | ||||
|   > | ||||
|     <span class="text-sm text-n-slate-11"> | ||||
|       {{ emptyStateMessage }} | ||||
|     </span> | ||||
|   </div> | ||||
|   <div v-else class="flex flex-col divide-y divide-n-weak"> | ||||
|     <div | ||||
|       v-for="item in items" | ||||
|       :key="item.id" | ||||
|       class="grid grid-cols-4 items-center gap-3 min-w-0 w-full justify-between h-[3.25rem] ltr:pr-2 rtl:pl-2" | ||||
|     > | ||||
|       <div class="flex items-center gap-2 col-span-2"> | ||||
|         <Icon | ||||
|           v-if="item.icon" | ||||
|           :icon="item.icon" | ||||
|           class="size-4 text-n-slate-12 flex-shrink-0" | ||||
|         /> | ||||
|         <Avatar | ||||
|           v-else | ||||
|           :title="item.name" | ||||
|           :src="item.avatarUrl" | ||||
|           :name="item.name" | ||||
|           :size="20" | ||||
|           rounded-full | ||||
|         /> | ||||
|         <span class="text-sm text-n-slate-12 truncate min-w-0"> | ||||
|           {{ item.name }} | ||||
|         </span> | ||||
|       </div> | ||||
|  | ||||
|       <div class="flex items-start gap-2 col-span-1"> | ||||
|         <span | ||||
|           :title="item.email || item.phoneNumber" | ||||
|           class="text-sm text-n-slate-12 truncate min-w-0" | ||||
|         > | ||||
|           {{ item.email || item.phoneNumber }} | ||||
|         </span> | ||||
|       </div> | ||||
|  | ||||
|       <div class="col-span-1 justify-end flex items-center"> | ||||
|         <Button | ||||
|           icon="i-lucide-trash" | ||||
|           slate | ||||
|           ghost | ||||
|           sm | ||||
|           type="button" | ||||
|           @click="handleDelete(item.id)" | ||||
|         /> | ||||
|       </div> | ||||
|     </div> | ||||
|   </div> | ||||
| </template> | ||||
| @@ -0,0 +1,149 @@ | ||||
| <script setup> | ||||
| import { computed, ref, onMounted } from 'vue'; | ||||
| import { useI18n } from 'vue-i18n'; | ||||
| import AddDataDropdown from 'dashboard/components-next/AssignmentPolicy/components/AddDataDropdown.vue'; | ||||
| import LabelItem from 'dashboard/components-next/Label/LabelItem.vue'; | ||||
| import DurationInput from 'dashboard/components-next/input/DurationInput.vue'; | ||||
| import { DURATION_UNITS } from 'dashboard/components-next/input/constants'; | ||||
|  | ||||
| const props = defineProps({ | ||||
|   tagsList: { | ||||
|     type: Array, | ||||
|     default: () => [], | ||||
|   }, | ||||
| }); | ||||
|  | ||||
| const excludedLabels = defineModel('excludedLabels', { | ||||
|   type: Array, | ||||
|   default: () => [], | ||||
| }); | ||||
|  | ||||
| const excludeOlderThanMinutes = defineModel('excludeOlderThanMinutes', { | ||||
|   type: Number, | ||||
|   default: 10, | ||||
| }); | ||||
|  | ||||
| // Duration limits: 10 minutes to 999 days (in minutes) | ||||
| const MIN_DURATION_MINUTES = 10; | ||||
| const MAX_DURATION_MINUTES = 1438560; // 999 days * 24 hours * 60 minutes | ||||
|  | ||||
| const { t } = useI18n(); | ||||
|  | ||||
| const hoveredLabel = ref(null); | ||||
| const windowUnit = ref(DURATION_UNITS.MINUTES); | ||||
|  | ||||
| const addedTags = computed(() => | ||||
|   props.tagsList | ||||
|     .filter(label => excludedLabels.value.includes(label.name)) | ||||
|     .map(label => ({ id: label.id, title: label.name, ...label })) | ||||
| ); | ||||
|  | ||||
| const filteredTags = computed(() => | ||||
|   props.tagsList.filter( | ||||
|     label => !addedTags.value.some(tag => tag.id === label.id) | ||||
|   ) | ||||
| ); | ||||
|  | ||||
| const detectUnit = minutes => { | ||||
|   const m = Number(minutes) || 0; | ||||
|   if (m === 0) return DURATION_UNITS.MINUTES; | ||||
|   if (m % (24 * 60) === 0) return DURATION_UNITS.DAYS; | ||||
|   if (m % 60 === 0) return DURATION_UNITS.HOURS; | ||||
|   return DURATION_UNITS.MINUTES; | ||||
| }; | ||||
|  | ||||
| const onClickAddTag = tag => { | ||||
|   excludedLabels.value = [...excludedLabels.value, tag.name]; | ||||
| }; | ||||
|  | ||||
| const onClickRemoveTag = tag => { | ||||
|   excludedLabels.value = excludedLabels.value.filter( | ||||
|     name => name !== tag.title | ||||
|   ); | ||||
| }; | ||||
|  | ||||
| onMounted(() => { | ||||
|   windowUnit.value = detectUnit(excludeOlderThanMinutes.value); | ||||
| }); | ||||
| </script> | ||||
|  | ||||
| <template> | ||||
|   <div class="py-4 flex-col flex gap-6"> | ||||
|     <div class="flex flex-col items-start gap-1 py-1"> | ||||
|       <label class="text-sm font-medium text-n-slate-12 py-1"> | ||||
|         {{ | ||||
|           t( | ||||
|             'ASSIGNMENT_POLICY.AGENT_CAPACITY_POLICY.FORM.EXCLUSION_RULES.LABEL' | ||||
|           ) | ||||
|         }} | ||||
|       </label> | ||||
|       <p class="mb-0 text-n-slate-11 text-sm"> | ||||
|         {{ | ||||
|           t( | ||||
|             'ASSIGNMENT_POLICY.AGENT_CAPACITY_POLICY.FORM.EXCLUSION_RULES.DESCRIPTION' | ||||
|           ) | ||||
|         }} | ||||
|       </p> | ||||
|     </div> | ||||
|  | ||||
|     <div class="flex flex-col items-start gap-4"> | ||||
|       <label class="text-sm font-medium text-n-slate-12 py-1"> | ||||
|         {{ | ||||
|           t( | ||||
|             'ASSIGNMENT_POLICY.AGENT_CAPACITY_POLICY.FORM.EXCLUSION_RULES.TAGS.LABEL' | ||||
|           ) | ||||
|         }} | ||||
|       </label> | ||||
|       <div | ||||
|         class="flex items-start gap-2 flex-wrap" | ||||
|         @mouseleave="hoveredLabel = null" | ||||
|       > | ||||
|         <LabelItem | ||||
|           v-for="tag in addedTags" | ||||
|           :key="tag.id" | ||||
|           :label="tag" | ||||
|           :is-hovered="hoveredLabel === tag.id" | ||||
|           class="h-8" | ||||
|           @remove="onClickRemoveTag" | ||||
|           @hover="hoveredLabel = tag.id" | ||||
|         /> | ||||
|         <AddDataDropdown | ||||
|           :label=" | ||||
|             t( | ||||
|               'ASSIGNMENT_POLICY.AGENT_CAPACITY_POLICY.FORM.EXCLUSION_RULES.TAGS.ADD_TAG' | ||||
|             ) | ||||
|           " | ||||
|           :search-placeholder=" | ||||
|             t( | ||||
|               'ASSIGNMENT_POLICY.AGENT_CAPACITY_POLICY.FORM.EXCLUSION_RULES.TAGS.DROPDOWN.SEARCH_PLACEHOLDER' | ||||
|             ) | ||||
|           " | ||||
|           :items="filteredTags" | ||||
|           class="[&>button]:!text-n-blue-text" | ||||
|           @add="onClickAddTag" | ||||
|         /> | ||||
|       </div> | ||||
|     </div> | ||||
|  | ||||
|     <div class="flex flex-col items-start gap-4"> | ||||
|       <label class="text-sm font-medium text-n-slate-12 py-1"> | ||||
|         {{ | ||||
|           t( | ||||
|             'ASSIGNMENT_POLICY.AGENT_CAPACITY_POLICY.FORM.EXCLUSION_RULES.DURATION.LABEL' | ||||
|           ) | ||||
|         }} | ||||
|       </label> | ||||
|       <div | ||||
|         class="flex items-center gap-2 flex-1 [&>select]:!bg-n-alpha-2 [&>select]:!outline-none [&>select]:hover:brightness-110" | ||||
|       > | ||||
|         <!-- allow 10 mins to 999 days --> | ||||
|         <DurationInput | ||||
|           v-model:unit="windowUnit" | ||||
|           v-model:model-value="excludeOlderThanMinutes" | ||||
|           :min="MIN_DURATION_MINUTES" | ||||
|           :max="MAX_DURATION_MINUTES" | ||||
|         /> | ||||
|       </div> | ||||
|     </div> | ||||
|   </div> | ||||
| </template> | ||||
| @@ -0,0 +1,86 @@ | ||||
| <script setup> | ||||
| import { ref, onMounted } from 'vue'; | ||||
| import { useI18n } from 'vue-i18n'; | ||||
| import Input from 'dashboard/components-next/input/Input.vue'; | ||||
| import DurationInput from 'dashboard/components-next/input/DurationInput.vue'; | ||||
| import { DURATION_UNITS } from 'dashboard/components-next/input/constants'; | ||||
|  | ||||
| const { t } = useI18n(); | ||||
|  | ||||
| const fairDistributionLimit = defineModel('fairDistributionLimit', { | ||||
|   type: Number, | ||||
|   default: 100, | ||||
|   set(value) { | ||||
|     return Number(value) || 0; | ||||
|   }, | ||||
| }); | ||||
|  | ||||
| const fairDistributionWindow = defineModel('fairDistributionWindow', { | ||||
|   type: Number, | ||||
|   default: 3600, | ||||
|   set(value) { | ||||
|     return Number(value) || 0; | ||||
|   }, | ||||
| }); | ||||
|  | ||||
| const windowUnit = ref(DURATION_UNITS.MINUTES); | ||||
|  | ||||
| const detectUnit = minutes => { | ||||
|   const m = Number(minutes) || 0; | ||||
|   if (m === 0) return DURATION_UNITS.MINUTES; | ||||
|   if (m % (24 * 60) === 0) return DURATION_UNITS.DAYS; | ||||
|   if (m % 60 === 0) return DURATION_UNITS.HOURS; | ||||
|   return DURATION_UNITS.MINUTES; | ||||
| }; | ||||
|  | ||||
| onMounted(() => { | ||||
|   windowUnit.value = detectUnit(fairDistributionWindow.value); | ||||
| }); | ||||
| </script> | ||||
|  | ||||
| <template> | ||||
|   <div | ||||
|     class="flex items-start xl:items-center flex-col md:flex-row gap-4 lg:gap-3 bg-n-solid-1 p-4 outline outline-1 outline-n-weak rounded-xl" | ||||
|   > | ||||
|     <div class="flex items-center gap-3"> | ||||
|       <label class="text-sm font-medium text-n-slate-12"> | ||||
|         {{ | ||||
|           t( | ||||
|             'ASSIGNMENT_POLICY.AGENT_ASSIGNMENT_POLICY.FORM.FAIR_DISTRIBUTION.INPUT_MAX' | ||||
|           ) | ||||
|         }} | ||||
|       </label> | ||||
|       <div class="flex-1"> | ||||
|         <Input | ||||
|           v-model="fairDistributionLimit" | ||||
|           type="number" | ||||
|           placeholder="100" | ||||
|           max="100000" | ||||
|           class="w-full" | ||||
|         /> | ||||
|       </div> | ||||
|     </div> | ||||
|  | ||||
|     <div class="flex sm:flex-row flex-col items-start sm:items-center gap-4"> | ||||
|       <label class="text-sm font-medium text-n-slate-12"> | ||||
|         {{ | ||||
|           t( | ||||
|             'ASSIGNMENT_POLICY.AGENT_ASSIGNMENT_POLICY.FORM.FAIR_DISTRIBUTION.DURATION' | ||||
|           ) | ||||
|         }} | ||||
|       </label> | ||||
|  | ||||
|       <div | ||||
|         class="flex items-center gap-2 flex-1 [&>select]:!bg-n-alpha-2 [&>select]:!outline-none [&>select]:hover:brightness-110" | ||||
|       > | ||||
|         <!-- allow 10 mins to 999 days --> | ||||
|         <DurationInput | ||||
|           v-model:model-value="fairDistributionWindow" | ||||
|           v-model:unit="windowUnit" | ||||
|           :min="10" | ||||
|           :max="1438560" | ||||
|         /> | ||||
|       </div> | ||||
|     </div> | ||||
|   </div> | ||||
| </template> | ||||
| @@ -0,0 +1,163 @@ | ||||
| <script setup> | ||||
| import { computed } from 'vue'; | ||||
| import { useI18n } from 'vue-i18n'; | ||||
| import Button from 'dashboard/components-next/button/Button.vue'; | ||||
| import Spinner from 'dashboard/components-next/spinner/Spinner.vue'; | ||||
| import AddDataDropdown from 'dashboard/components-next/AssignmentPolicy/components/AddDataDropdown.vue'; | ||||
|  | ||||
| const props = defineProps({ | ||||
|   inboxList: { | ||||
|     type: Array, | ||||
|     default: () => [], | ||||
|   }, | ||||
|   isFetching: { | ||||
|     type: Boolean, | ||||
|     default: false, | ||||
|   }, | ||||
| }); | ||||
|  | ||||
| const emit = defineEmits(['delete', 'add', 'update']); | ||||
|  | ||||
| const inboxCapacityLimits = defineModel('inboxCapacityLimits', { | ||||
|   type: Array, | ||||
|   default: () => [], | ||||
| }); | ||||
|  | ||||
| const { t } = useI18n(); | ||||
|  | ||||
| const BASE_KEY = 'ASSIGNMENT_POLICY.AGENT_CAPACITY_POLICY'; | ||||
| const DEFAULT_CONVERSATION_LIMIT = 10; | ||||
| const MIN_CONVERSATION_LIMIT = 1; | ||||
| const MAX_CONVERSATION_LIMIT = 100000; | ||||
|  | ||||
| const selectedInboxIds = computed( | ||||
|   () => new Set(inboxCapacityLimits.value.map(limit => limit.inboxId)) | ||||
| ); | ||||
|  | ||||
| const availableInboxes = computed(() => | ||||
|   props.inboxList.filter( | ||||
|     inbox => inbox && !selectedInboxIds.value.has(inbox.id) | ||||
|   ) | ||||
| ); | ||||
|  | ||||
| const isLimitValid = limit => { | ||||
|   return ( | ||||
|     limit.conversationLimit >= MIN_CONVERSATION_LIMIT && | ||||
|     limit.conversationLimit <= MAX_CONVERSATION_LIMIT | ||||
|   ); | ||||
| }; | ||||
|  | ||||
| const inboxMap = computed( | ||||
|   () => new Map(props.inboxList.map(inbox => [inbox.id, inbox])) | ||||
| ); | ||||
|  | ||||
| const handleAddInbox = inbox => { | ||||
|   emit('add', { | ||||
|     inboxId: inbox.id, | ||||
|     conversationLimit: DEFAULT_CONVERSATION_LIMIT, | ||||
|   }); | ||||
| }; | ||||
|  | ||||
| const handleRemoveLimit = limitId => { | ||||
|   emit('delete', limitId); | ||||
| }; | ||||
|  | ||||
| const handleLimitChange = limit => { | ||||
|   if (isLimitValid(limit)) { | ||||
|     emit('update', limit); | ||||
|   } | ||||
| }; | ||||
|  | ||||
| const getInboxName = inboxId => { | ||||
|   return inboxMap.value.get(inboxId)?.name || ''; | ||||
| }; | ||||
| </script> | ||||
|  | ||||
| <template> | ||||
|   <div class="py-4 flex-col flex gap-3"> | ||||
|     <div class="flex items-center w-full gap-8 justify-between pt-1 pb-3"> | ||||
|       <label class="text-sm font-medium text-n-slate-12"> | ||||
|         {{ t(`${BASE_KEY}.FORM.INBOX_CAPACITY_LIMIT.LABEL`) }} | ||||
|       </label> | ||||
|  | ||||
|       <AddDataDropdown | ||||
|         :label="t(`${BASE_KEY}.FORM.INBOX_CAPACITY_LIMIT.ADD_BUTTON`)" | ||||
|         :search-placeholder=" | ||||
|           t(`${BASE_KEY}.FORM.INBOX_CAPACITY_LIMIT.FIELD.SELECT_INBOX`) | ||||
|         " | ||||
|         :items="availableInboxes" | ||||
|         @add="handleAddInbox" | ||||
|       /> | ||||
|     </div> | ||||
|  | ||||
|     <div | ||||
|       v-if="isFetching" | ||||
|       class="flex items-center justify-center py-3 w-full text-n-slate-11" | ||||
|     > | ||||
|       <Spinner /> | ||||
|     </div> | ||||
|  | ||||
|     <div | ||||
|       v-else-if="!inboxCapacityLimits.length" | ||||
|       class="custom-dashed-border flex items-center justify-center py-6 w-full" | ||||
|     > | ||||
|       <span class="text-sm text-n-slate-11"> | ||||
|         {{ t(`${BASE_KEY}.FORM.INBOX_CAPACITY_LIMIT.EMPTY_STATE`) }} | ||||
|       </span> | ||||
|     </div> | ||||
|  | ||||
|     <div v-else class="flex-col flex gap-3"> | ||||
|       <div | ||||
|         v-for="(limit, index) in inboxCapacityLimits" | ||||
|         :key="limit.id || `temp-${index}`" | ||||
|         class="flex items-center gap-3" | ||||
|       > | ||||
|         <div | ||||
|           class="flex items-start rounded-lg outline-1 outline cursor-not-allowed text-n-slate-11 outline-n-weak py-2.5 px-3 text-sm w-full" | ||||
|         > | ||||
|           {{ getInboxName(limit.inboxId) }} | ||||
|         </div> | ||||
|  | ||||
|         <div | ||||
|           class="py-2.5 px-3 rounded-lg gap-2 outline outline-1 flex-shrink-0 flex items-center" | ||||
|           :class="[ | ||||
|             !isLimitValid(limit) ? 'outline-n-ruby-8' : 'outline-n-weak', | ||||
|           ]" | ||||
|         > | ||||
|           <label class="text-sm text-n-slate-12 ltr:pr-2 rtl:pl-2"> | ||||
|             {{ | ||||
|               t(`${BASE_KEY}.FORM.INBOX_CAPACITY_LIMIT.FIELD.MAX_CONVERSATIONS`) | ||||
|             }} | ||||
|           </label> | ||||
|  | ||||
|           <div class="h-5 w-px bg-n-weak" /> | ||||
|  | ||||
|           <input | ||||
|             v-model.number="limit.conversationLimit" | ||||
|             type="number" | ||||
|             :min="MIN_CONVERSATION_LIMIT" | ||||
|             :max="MAX_CONVERSATION_LIMIT" | ||||
|             class="reset-base bg-transparent focus:outline-none max-w-20 text-sm" | ||||
|             :class="[ | ||||
|               !isLimitValid(limit) | ||||
|                 ? 'placeholder:text-n-ruby-9 !text-n-ruby-9' | ||||
|                 : 'placeholder:text-n-slate-10 text-n-slate-12', | ||||
|             ]" | ||||
|             :placeholder=" | ||||
|               t(`${BASE_KEY}.FORM.INBOX_CAPACITY_LIMIT.FIELD.SET_LIMIT`) | ||||
|             " | ||||
|             @blur="handleLimitChange(limit)" | ||||
|           /> | ||||
|         </div> | ||||
|  | ||||
|         <Button | ||||
|           type="button" | ||||
|           slate | ||||
|           icon="i-lucide-trash" | ||||
|           class="flex-shrink-0" | ||||
|           @click="handleRemoveLimit(limit.id)" | ||||
|         /> | ||||
|       </div> | ||||
|     </div> | ||||
|   </div> | ||||
| </template> | ||||
| @@ -0,0 +1,60 @@ | ||||
| <script setup> | ||||
| const props = defineProps({ | ||||
|   id: { | ||||
|     type: String, | ||||
|     required: true, | ||||
|   }, | ||||
|   label: { | ||||
|     type: String, | ||||
|     required: true, | ||||
|   }, | ||||
|   description: { | ||||
|     type: String, | ||||
|     required: true, | ||||
|   }, | ||||
|   isActive: { | ||||
|     type: Boolean, | ||||
|     default: false, | ||||
|   }, | ||||
| }); | ||||
|  | ||||
| const emit = defineEmits(['select']); | ||||
|  | ||||
| const handleChange = () => { | ||||
|   if (!props.isActive) { | ||||
|     emit('select', props.id); | ||||
|   } | ||||
| }; | ||||
| </script> | ||||
|  | ||||
| <template> | ||||
|   <div | ||||
|     class="relative cursor-pointer rounded-xl outline outline-1 p-4 transition-all duration-200 bg-n-solid-1 py-4 ltr:pl-4 rtl:pr-4 ltr:pr-6 rtl:pl-6" | ||||
|     :class="[ | ||||
|       isActive ? 'outline-n-blue-9' : 'outline-n-weak hover:outline-n-strong', | ||||
|     ]" | ||||
|     @click="handleChange" | ||||
|   > | ||||
|     <div class="absolute top-4 right-4"> | ||||
|       <input | ||||
|         :id="`${id}`" | ||||
|         :checked="isActive" | ||||
|         :value="id" | ||||
|         :name="id" | ||||
|         type="radio" | ||||
|         class="h-4 w-4 border-n-slate-6 text-n-brand focus:ring-n-brand focus:ring-offset-0" | ||||
|         @change="handleChange" | ||||
|       /> | ||||
|     </div> | ||||
|  | ||||
|     <!-- Content --> | ||||
|     <div class="flex flex-col gap-3 items-start"> | ||||
|       <h3 class="text-sm font-medium text-n-slate-12"> | ||||
|         {{ label }} | ||||
|       </h3> | ||||
|       <p class="text-sm text-n-slate-11"> | ||||
|         {{ description }} | ||||
|       </p> | ||||
|     </div> | ||||
|   </div> | ||||
| </template> | ||||
| @@ -0,0 +1,92 @@ | ||||
| <script setup> | ||||
| import AddDataDropdown from '../AddDataDropdown.vue'; | ||||
|  | ||||
| const mockInboxes = [ | ||||
|   { | ||||
|     id: 1, | ||||
|     name: 'Website Support', | ||||
|     email: 'support@company.com', | ||||
|     icon: 'i-lucide-globe', | ||||
|   }, | ||||
|   { | ||||
|     id: 2, | ||||
|     name: 'Email Support', | ||||
|     email: 'help@company.com', | ||||
|     icon: 'i-lucide-mail', | ||||
|   }, | ||||
|   { | ||||
|     id: 3, | ||||
|     name: 'WhatsApp Business', | ||||
|     phoneNumber: '+1 555-0123', | ||||
|     icon: 'i-lucide-message-circle', | ||||
|   }, | ||||
|   { | ||||
|     id: 4, | ||||
|     name: 'Facebook Messenger', | ||||
|     email: 'messenger@company.com', | ||||
|     icon: 'i-lucide-facebook', | ||||
|   }, | ||||
|   { | ||||
|     id: 5, | ||||
|     name: 'Twitter DM', | ||||
|     email: 'twitter@company.com', | ||||
|     icon: 'i-lucide-twitter', | ||||
|   }, | ||||
| ]; | ||||
|  | ||||
| const mockTags = [ | ||||
|   { | ||||
|     id: 1, | ||||
|     name: 'urgent', | ||||
|     color: '#ff4757', | ||||
|   }, | ||||
|   { | ||||
|     id: 2, | ||||
|     name: 'bug', | ||||
|     color: '#ff6b6b', | ||||
|   }, | ||||
|   { | ||||
|     id: 3, | ||||
|     name: 'feature-request', | ||||
|     color: '#4834d4', | ||||
|   }, | ||||
|   { | ||||
|     id: 4, | ||||
|     name: 'documentation', | ||||
|     color: '#26de81', | ||||
|   }, | ||||
| ]; | ||||
|  | ||||
| const handleAdd = item => { | ||||
|   console.log('Add item:', item); | ||||
| }; | ||||
| </script> | ||||
|  | ||||
| <template> | ||||
|   <Story | ||||
|     title="Components/AgentManagementPolicy/AddDataDropdown" | ||||
|     :layout="{ type: 'grid', width: '500px' }" | ||||
|   > | ||||
|     <Variant title="Basic Usage - Inboxes"> | ||||
|       <div class="p-8 bg-n-background flex gap-4 h-[400px] items-start"> | ||||
|         <AddDataDropdown | ||||
|           label="Add Inbox" | ||||
|           search-placeholder="Search inboxes..." | ||||
|           :items="mockInboxes" | ||||
|           @add="handleAdd" | ||||
|         /> | ||||
|       </div> | ||||
|     </Variant> | ||||
|  | ||||
|     <Variant title="Basic Usage - Tags"> | ||||
|       <div class="p-8 bg-n-background flex gap-4 h-[400px] items-start"> | ||||
|         <AddDataDropdown | ||||
|           label="Add Tag" | ||||
|           search-placeholder="Search tags..." | ||||
|           :items="mockTags" | ||||
|           @add="handleAdd" | ||||
|         /> | ||||
|       </div> | ||||
|     </Variant> | ||||
|   </Story> | ||||
| </template> | ||||
| @@ -0,0 +1,33 @@ | ||||
| <script setup> | ||||
| import { ref } from 'vue'; | ||||
| import BaseInfo from '../BaseInfo.vue'; | ||||
|  | ||||
| const policyName = ref('Round Robin Policy'); | ||||
| const description = ref( | ||||
|   'Distributes conversations evenly among available agents' | ||||
| ); | ||||
| const enabled = ref(true); | ||||
| </script> | ||||
|  | ||||
| <template> | ||||
|   <Story | ||||
|     title="Components/AgentManagementPolicy/BaseInfo" | ||||
|     :layout="{ type: 'grid', width: '600px' }" | ||||
|   > | ||||
|     <Variant title="Basic Usage"> | ||||
|       <div class="p-8 bg-n-background"> | ||||
|         <BaseInfo | ||||
|           v-model:policy-name="policyName" | ||||
|           v-model:description="description" | ||||
|           v-model:enabled="enabled" | ||||
|           name-label="Policy Name" | ||||
|           name-placeholder="Enter policy name" | ||||
|           description-label="Description" | ||||
|           description-placeholder="Enter policy description" | ||||
|           status-label="Status" | ||||
|           status-placeholder="Active" | ||||
|         /> | ||||
|       </div> | ||||
|     </Variant> | ||||
|   </Story> | ||||
| </template> | ||||
| @@ -0,0 +1,89 @@ | ||||
| <script setup> | ||||
| import CardPopover from '../CardPopover.vue'; | ||||
|  | ||||
| const mockItems = [ | ||||
|   { | ||||
|     id: 1, | ||||
|     name: 'Website Support', | ||||
|     icon: 'i-lucide-globe', | ||||
|   }, | ||||
|   { | ||||
|     id: 2, | ||||
|     name: 'Email Support', | ||||
|     icon: 'i-lucide-mail', | ||||
|   }, | ||||
|   { | ||||
|     id: 3, | ||||
|     name: 'WhatsApp Business', | ||||
|     icon: 'i-lucide-message-circle', | ||||
|   }, | ||||
|   { | ||||
|     id: 4, | ||||
|     name: 'Facebook Messenger', | ||||
|     icon: 'i-lucide-facebook', | ||||
|   }, | ||||
| ]; | ||||
|  | ||||
| const mockUsers = [ | ||||
|   { | ||||
|     id: 1, | ||||
|     name: 'John Smith', | ||||
|     email: 'john.smith@example.com', | ||||
|     avatarUrl: 'https://i.pravatar.cc/150?img=1', | ||||
|   }, | ||||
|   { | ||||
|     id: 2, | ||||
|     name: 'Sarah Johnson', | ||||
|     email: 'sarah.johnson@example.com', | ||||
|     avatarUrl: 'https://i.pravatar.cc/150?img=2', | ||||
|   }, | ||||
|   { | ||||
|     id: 3, | ||||
|     name: 'Mike Chen', | ||||
|     email: 'mike.chen@example.com', | ||||
|     avatarUrl: 'https://i.pravatar.cc/150?img=3', | ||||
|   }, | ||||
|   { | ||||
|     id: 4, | ||||
|     name: 'Emily Davis', | ||||
|     email: 'emily.davis@example.com', | ||||
|     avatarUrl: 'https://i.pravatar.cc/150?img=4', | ||||
|   }, | ||||
|   { | ||||
|     id: 5, | ||||
|     name: 'Alex Rodriguez', | ||||
|     email: 'alex.rodriguez@example.com', | ||||
|     avatarUrl: 'https://i.pravatar.cc/150?img=5', | ||||
|   }, | ||||
| ]; | ||||
| </script> | ||||
|  | ||||
| <template> | ||||
|   <Story | ||||
|     title="Components/AgentManagementPolicy/CardPopover" | ||||
|     :layout="{ type: 'grid', width: '800px' }" | ||||
|   > | ||||
|     <Variant title="Basic Usage"> | ||||
|       <div class="p-8 bg-n-background flex gap-4 h-96 items-start"> | ||||
|         <CardPopover | ||||
|           :count="3" | ||||
|           title="Added Inboxes" | ||||
|           icon="i-lucide-inbox" | ||||
|           :items="mockItems.slice(0, 3)" | ||||
|           @fetch="() => console.log('Fetch triggered')" | ||||
|         /> | ||||
|       </div> | ||||
|     </Variant> | ||||
|     <Variant title="Basic Usage"> | ||||
|       <div class="p-8 bg-n-background flex gap-4 h-96 items-start"> | ||||
|         <CardPopover | ||||
|           :count="3" | ||||
|           title="Added Agents" | ||||
|           icon="i-lucide-users-round" | ||||
|           :items="mockUsers.slice(0, 3)" | ||||
|           @fetch="() => console.log('Fetch triggered')" | ||||
|         /> | ||||
|       </div> | ||||
|     </Variant> | ||||
|   </Story> | ||||
| </template> | ||||
| @@ -0,0 +1,87 @@ | ||||
| <script setup> | ||||
| import DataTable from '../DataTable.vue'; | ||||
|  | ||||
| const mockItems = [ | ||||
|   { | ||||
|     id: 1, | ||||
|     name: 'Website Support', | ||||
|     email: 'support@company.com', | ||||
|     icon: 'i-lucide-globe', | ||||
|   }, | ||||
|   { | ||||
|     id: 2, | ||||
|     name: 'Email Support', | ||||
|     email: 'help@company.com', | ||||
|     icon: 'i-lucide-mail', | ||||
|   }, | ||||
|   { | ||||
|     id: 3, | ||||
|     name: 'WhatsApp Business', | ||||
|     phoneNumber: '+1 555-0123', | ||||
|     icon: 'i-lucide-message-circle', | ||||
|   }, | ||||
| ]; | ||||
|  | ||||
| const mockAgentList = [ | ||||
|   { | ||||
|     id: 1, | ||||
|     name: 'John Doe', | ||||
|     email: 'john.doe@example.com', | ||||
|     avatarUrl: 'https://i.pravatar.cc/150?img=1', | ||||
|   }, | ||||
|   { | ||||
|     id: 2, | ||||
|     name: 'Jane Smith', | ||||
|     email: 'jane.smith@example.com', | ||||
|     avatarUrl: 'https://i.pravatar.cc/150?img=2', | ||||
|   }, | ||||
| ]; | ||||
|  | ||||
| const handleDelete = itemId => { | ||||
|   console.log('Delete item:', itemId); | ||||
| }; | ||||
| </script> | ||||
|  | ||||
| <template> | ||||
|   <Story | ||||
|     title="Components/AgentManagementPolicy/DataTable" | ||||
|     :layout="{ type: 'grid', width: '800px' }" | ||||
|   > | ||||
|     <Variant title="With Data"> | ||||
|       <div class="p-8 bg-n-background"> | ||||
|         <DataTable | ||||
|           :items="mockItems" | ||||
|           :is-fetching="false" | ||||
|           @delete="handleDelete" | ||||
|         /> | ||||
|       </div> | ||||
|     </Variant> | ||||
|  | ||||
|     <Variant title="With Agents"> | ||||
|       <div class="p-8 bg-n-background"> | ||||
|         <DataTable | ||||
|           :items="mockAgentList" | ||||
|           :is-fetching="false" | ||||
|           @delete="handleDelete" | ||||
|         /> | ||||
|       </div> | ||||
|     </Variant> | ||||
|  | ||||
|     <Variant title="Loading State"> | ||||
|       <div class="p-8 bg-n-background"> | ||||
|         <DataTable :items="[]" is-fetching @delete="handleDelete" /> | ||||
|       </div> | ||||
|     </Variant> | ||||
|  | ||||
|     <Variant title="Empty State"> | ||||
|       <div class="p-8 bg-n-background"> | ||||
|         <DataTable | ||||
|           :items="[]" | ||||
|           :is-fetching="false" | ||||
|           empty-state-message="No items found" | ||||
|           @delete="handleDelete" | ||||
|         /> | ||||
|       </div> | ||||
|     </Variant> | ||||
|   </Story> | ||||
| </template> | ||||
| @@ -0,0 +1,67 @@ | ||||
| <script setup> | ||||
| import ExclusionRules from '../ExclusionRules.vue'; | ||||
| import { ref } from 'vue'; | ||||
|  | ||||
| const mockTagsList = [ | ||||
|   { | ||||
|     id: 1, | ||||
|     name: 'urgent', | ||||
|     color: '#ff4757', | ||||
|   }, | ||||
|   { | ||||
|     id: 2, | ||||
|     name: 'bug', | ||||
|     color: '#ff6b6b', | ||||
|   }, | ||||
|   { | ||||
|     id: 3, | ||||
|     name: 'feature-request', | ||||
|     color: '#4834d4', | ||||
|   }, | ||||
|   { | ||||
|     id: 4, | ||||
|     name: 'documentation', | ||||
|     color: '#26de81', | ||||
|   }, | ||||
|   { | ||||
|     id: 5, | ||||
|     name: 'enhancement', | ||||
|     color: '#2ed573', | ||||
|   }, | ||||
|   { | ||||
|     id: 6, | ||||
|     name: 'question', | ||||
|     color: '#ffa502', | ||||
|   }, | ||||
|   { | ||||
|     id: 7, | ||||
|     name: 'duplicate', | ||||
|     color: '#747d8c', | ||||
|   }, | ||||
|   { | ||||
|     id: 8, | ||||
|     name: 'wontfix', | ||||
|     color: '#57606f', | ||||
|   }, | ||||
| ]; | ||||
|  | ||||
| const excludedLabelsBasic = ref([]); | ||||
| const excludeOlderThanHoursBasic = ref(10); | ||||
| </script> | ||||
|  | ||||
| <template> | ||||
|   <Story | ||||
|     title="Components/AgentManagementPolicy/ExclusionRules" | ||||
|     :layout="{ type: 'grid', width: '1200px' }" | ||||
|   > | ||||
|     <Variant title="Basic Usage"> | ||||
|       <div class="p-8 bg-n-background h-[600px]"> | ||||
|         <ExclusionRules | ||||
|           v-model:excluded-labels="excludedLabelsBasic" | ||||
|           v-model:exclude-older-than-minutes="excludeOlderThanHoursBasic" | ||||
|           :tags-list="mockTagsList" | ||||
|         /> | ||||
|       </div> | ||||
|     </Variant> | ||||
|   </Story> | ||||
| </template> | ||||
| @@ -0,0 +1,25 @@ | ||||
| <script setup> | ||||
| import { ref } from 'vue'; | ||||
| import FairDistribution from '../FairDistribution.vue'; | ||||
|  | ||||
| const fairDistributionLimit = ref(100); | ||||
| const fairDistributionWindow = ref(3600); | ||||
| const windowUnit = ref('minutes'); | ||||
| </script> | ||||
|  | ||||
| <template> | ||||
|   <Story | ||||
|     title="Components/AgentManagementPolicy/FairDistribution" | ||||
|     :layout="{ type: 'grid', width: '800px' }" | ||||
|   > | ||||
|     <Variant title="Basic Usage"> | ||||
|       <div class="p-8 bg-n-background"> | ||||
|         <FairDistribution | ||||
|           v-model:fair-distribution-limit="fairDistributionLimit" | ||||
|           v-model:fair-distribution-window="fairDistributionWindow" | ||||
|           v-model:window-unit="windowUnit" | ||||
|         /> | ||||
|       </div> | ||||
|     </Variant> | ||||
|   </Story> | ||||
| </template> | ||||
| @@ -0,0 +1,108 @@ | ||||
| <script setup> | ||||
| import InboxCapacityLimits from '../InboxCapacityLimits.vue'; | ||||
| import { ref } from 'vue'; | ||||
|  | ||||
| const mockInboxList = [ | ||||
|   { | ||||
|     value: 1, | ||||
|     label: 'Website Support', | ||||
|     icon: 'i-lucide-globe', | ||||
|   }, | ||||
|   { | ||||
|     value: 2, | ||||
|     label: 'Email Support', | ||||
|     icon: 'i-lucide-mail', | ||||
|   }, | ||||
|   { | ||||
|     value: 3, | ||||
|     label: 'WhatsApp Business', | ||||
|     icon: 'i-lucide-message-circle', | ||||
|   }, | ||||
|   { | ||||
|     value: 4, | ||||
|     label: 'Facebook Messenger', | ||||
|     icon: 'i-lucide-facebook', | ||||
|   }, | ||||
|   { | ||||
|     value: 5, | ||||
|     label: 'Twitter DM', | ||||
|     icon: 'i-lucide-twitter', | ||||
|   }, | ||||
|   { | ||||
|     value: 6, | ||||
|     label: 'Telegram', | ||||
|     icon: 'i-lucide-send', | ||||
|   }, | ||||
| ]; | ||||
|  | ||||
| const inboxCapacityLimitsEmpty = ref([]); | ||||
| const inboxCapacityLimitsNew = ref([ | ||||
|   { id: 1, inboxId: 1, conversationLimit: 5 }, | ||||
|   { inboxId: null, conversationLimit: null }, | ||||
| ]); | ||||
|  | ||||
| const handleDelete = id => { | ||||
|   console.log('Delete capacity limit:', id); | ||||
| }; | ||||
| </script> | ||||
|  | ||||
| <template> | ||||
|   <Story | ||||
|     title="Components/AgentManagementPolicy/InboxCapacityLimits" | ||||
|     :layout="{ type: 'grid', width: '900px' }" | ||||
|   > | ||||
|     <Variant title="Empty State"> | ||||
|       <div class="p-8 bg-n-background"> | ||||
|         <InboxCapacityLimits | ||||
|           v-model:inbox-capacity-limits="inboxCapacityLimitsEmpty" | ||||
|           :inbox-list="mockInboxList" | ||||
|           :is-fetching="false" | ||||
|           :is-updating="false" | ||||
|           @delete="handleDelete" | ||||
|         /> | ||||
|       </div> | ||||
|     </Variant> | ||||
|  | ||||
|     <Variant title="Loading State"> | ||||
|       <div class="p-8 bg-n-background"> | ||||
|         <InboxCapacityLimits | ||||
|           v-model:inbox-capacity-limits="inboxCapacityLimitsEmpty" | ||||
|           :inbox-list="mockInboxList" | ||||
|           is-fetching | ||||
|           :is-updating="false" | ||||
|           @delete="handleDelete" | ||||
|         /> | ||||
|       </div> | ||||
|     </Variant> | ||||
|  | ||||
|     <Variant title="With New Row and existing data"> | ||||
|       <div class="p-8 bg-n-background"> | ||||
|         <InboxCapacityLimits | ||||
|           v-model:inbox-capacity-limits="inboxCapacityLimitsNew" | ||||
|           :inbox-list="mockInboxList" | ||||
|           :is-fetching="false" | ||||
|           :is-updating="false" | ||||
|           @delete="handleDelete" | ||||
|         /> | ||||
|       </div> | ||||
|     </Variant> | ||||
|  | ||||
|     <Variant title="Interactive Demo"> | ||||
|       <div class="p-8 bg-n-background"> | ||||
|         <InboxCapacityLimits | ||||
|           v-model:inbox-capacity-limits="inboxCapacityLimitsEmpty" | ||||
|           :inbox-list="mockInboxList" | ||||
|           :is-fetching="false" | ||||
|           :is-updating="false" | ||||
|           @delete="handleDelete" | ||||
|         /> | ||||
|         <div class="mt-4 p-4 bg-n-alpha-2 rounded-lg"> | ||||
|           <h4 class="text-sm font-medium mb-2">Current Limits:</h4> | ||||
|           <pre class="text-xs">{{ | ||||
|             JSON.stringify(inboxCapacityLimitsEmpty, null, 2) | ||||
|           }}</pre> | ||||
|         </div> | ||||
|       </div> | ||||
|     </Variant> | ||||
|   </Story> | ||||
| </template> | ||||
| @@ -0,0 +1,61 @@ | ||||
| <script setup> | ||||
| import { ref } from 'vue'; | ||||
| import RadioCard from '../RadioCard.vue'; | ||||
|  | ||||
| const selectedOption = ref('round_robin'); | ||||
|  | ||||
| const handleSelect = value => { | ||||
|   selectedOption.value = value; | ||||
|   console.log('Selected:', value); | ||||
| }; | ||||
| </script> | ||||
|  | ||||
| <template> | ||||
|   <Story | ||||
|     title="Components/AgentManagementPolicy/RadioCard" | ||||
|     :layout="{ type: 'grid', width: '600px' }" | ||||
|   > | ||||
|     <Variant title="Basic Usage"> | ||||
|       <div class="p-8 bg-n-background space-y-4"> | ||||
|         <RadioCard | ||||
|           id="round_robin" | ||||
|           label="Round Robin" | ||||
|           description="Distributes conversations evenly among all available agents in a rotating manner" | ||||
|           :is-active="selectedOption === 'round_robin'" | ||||
|           @select="handleSelect" | ||||
|         /> | ||||
|         <RadioCard | ||||
|           id="balanced" | ||||
|           label="Balanced Assignment" | ||||
|           description="Assigns conversations based on agent workload to maintain balance" | ||||
|           :is-active="selectedOption === 'balanced'" | ||||
|           @select="handleSelect" | ||||
|         /> | ||||
|       </div> | ||||
|     </Variant> | ||||
|  | ||||
|     <Variant title="Active State"> | ||||
|       <div class="p-8 bg-n-background"> | ||||
|         <RadioCard | ||||
|           id="active_option" | ||||
|           label="Active Option" | ||||
|           description="This option is currently selected and active" | ||||
|           is-active | ||||
|           @select="handleSelect" | ||||
|         /> | ||||
|       </div> | ||||
|     </Variant> | ||||
|  | ||||
|     <Variant title="Inactive State"> | ||||
|       <div class="p-8 bg-n-background"> | ||||
|         <RadioCard | ||||
|           id="inactive_option" | ||||
|           label="Inactive Option" | ||||
|           description="This option is not selected and can be clicked to activate" | ||||
|           is-active | ||||
|           @select="handleSelect" | ||||
|         /> | ||||
|       </div> | ||||
|     </Variant> | ||||
|   </Story> | ||||
| </template> | ||||
| @@ -86,8 +86,8 @@ const handleLabelAction = async ({ value }) => { | ||||
|   } | ||||
| }; | ||||
|  | ||||
| const handleRemoveLabel = labelId => { | ||||
|   return handleLabelAction({ value: labelId }); | ||||
| const handleRemoveLabel = label => { | ||||
|   return handleLabelAction({ value: label.id }); | ||||
| }; | ||||
|  | ||||
| watch( | ||||
|   | ||||
| @@ -15,7 +15,7 @@ const props = defineProps({ | ||||
| const emit = defineEmits(['remove', 'hover']); | ||||
|  | ||||
| const handleRemoveLabel = () => { | ||||
|   emit('remove', props.label?.id); | ||||
|   emit('remove', props.label); | ||||
| }; | ||||
|  | ||||
| const handleMouseEnter = () => { | ||||
| @@ -45,6 +45,7 @@ const handleMouseEnter = () => { | ||||
|       <Button | ||||
|         class="transition-opacity duration-200 !h-7 ltr:rounded-r-md rtl:rounded-l-md ltr:rounded-l-none rtl:rounded-r-none w-6 bg-transparent" | ||||
|         :class="{ 'opacity-0': !isHovered, 'opacity-100': isHovered }" | ||||
|         type="button" | ||||
|         slate | ||||
|         xs | ||||
|         faded | ||||
|   | ||||
| @@ -103,6 +103,12 @@ const validationError = computed(() => { | ||||
|   ); | ||||
| }); | ||||
|  | ||||
| const inputFieldType = computed(() => { | ||||
|   if (inputType.value === 'date') return 'date'; | ||||
|   if (inputType.value === 'number') return 'number'; | ||||
|   return 'text'; | ||||
| }); | ||||
|  | ||||
| const resetModelOnAttributeKeyChange = newAttributeKey => { | ||||
|   /** | ||||
|    * Resets the filter values and operator when the attribute key changes. This ensures that | ||||
| @@ -182,7 +188,7 @@ defineExpose({ validate }); | ||||
|         <Input | ||||
|           v-else | ||||
|           v-model="values" | ||||
|           :type="inputType === 'date' ? 'date' : 'text'" | ||||
|           :type="inputFieldType" | ||||
|           class="[&>input]:h-8 [&>input]:py-1.5 [&>input]:outline-offset-0" | ||||
|           :placeholder="t('FILTER.INPUT_PLACEHOLDER')" | ||||
|         /> | ||||
|   | ||||
| @@ -164,8 +164,8 @@ export function useConversationFilterContext() { | ||||
|       value: CONVERSATION_ATTRIBUTES.DISPLAY_ID, | ||||
|       attributeName: t('FILTER.ATTRIBUTES.CONVERSATION_IDENTIFIER'), | ||||
|       label: t('FILTER.ATTRIBUTES.CONVERSATION_IDENTIFIER'), | ||||
|       inputType: 'plainText', | ||||
|       datatype: 'number', | ||||
|       inputType: 'number', | ||||
|       dataType: 'number', | ||||
|       filterOperators: containmentOperators.value, | ||||
|       attributeModel: 'standard', | ||||
|     }, | ||||
| @@ -179,7 +179,7 @@ export function useConversationFilterContext() { | ||||
|         id: campaign.id, | ||||
|         name: campaign.title, | ||||
|       })), | ||||
|       datatype: 'number', | ||||
|       dataType: 'number', | ||||
|       filterOperators: presenceOperators.value, | ||||
|       attributeModel: 'standard', | ||||
|     }, | ||||
|   | ||||
| @@ -78,6 +78,8 @@ watch(unit, () => { | ||||
|     <option :value="DURATION_UNITS.HOURS"> | ||||
|       {{ t('DURATION_INPUT.HOURS') }} | ||||
|     </option> | ||||
|     <option :value="DURATION_UNITS.DAYS">{{ t('DURATION_INPUT.DAYS') }}</option> | ||||
|     <option :value="DURATION_UNITS.DAYS"> | ||||
|       {{ t('DURATION_INPUT.DAYS') }} | ||||
|     </option> | ||||
|   </select> | ||||
| </template> | ||||
|   | ||||
| @@ -15,6 +15,7 @@ const props = defineProps({ | ||||
|     validator: value => ['info', 'error', 'success'].includes(value), | ||||
|   }, | ||||
|   min: { type: String, default: '' }, | ||||
|   max: { type: String, default: '' }, | ||||
|   autofocus: { type: Boolean, default: false }, | ||||
| }); | ||||
|  | ||||
| @@ -54,7 +55,12 @@ const inputOutlineClass = computed(() => { | ||||
| }); | ||||
|  | ||||
| const handleInput = event => { | ||||
|   emit('update:modelValue', event.target.value); | ||||
|   let value = event.target.value; | ||||
|   // Convert to number if type is number and value is not empty | ||||
|   if (props.type === 'number' && value !== '') { | ||||
|     value = Number(value); | ||||
|   } | ||||
|   emit('update:modelValue', value); | ||||
|   emit('input', event); | ||||
| }; | ||||
|  | ||||
| @@ -108,7 +114,12 @@ onMounted(() => { | ||||
|       :placeholder="placeholder" | ||||
|       :disabled="disabled" | ||||
|       :min="['date', 'datetime-local', 'time'].includes(type) ? min : undefined" | ||||
|       class="block w-full reset-base text-sm h-10 !px-3 !py-2.5 !mb-0 outline outline-1 border-none border-0 outline-offset-[-1px] rounded-lg bg-n-alpha-black2 file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-n-slate-10 dark:placeholder:text-n-slate-10 disabled:cursor-not-allowed disabled:opacity-50 text-n-slate-12 transition-all duration-500 ease-in-out" | ||||
|       :max=" | ||||
|         ['date', 'datetime-local', 'time', 'number'].includes(type) | ||||
|           ? max | ||||
|           : undefined | ||||
|       " | ||||
|       class="block w-full reset-base text-sm h-10 !px-3 !py-2.5 !mb-0 outline outline-1 border-none border-0 outline-offset-[-1px] rounded-lg bg-n-alpha-black2 file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-n-slate-10 dark:placeholder:text-n-slate-10 disabled:cursor-not-allowed disabled:opacity-50 text-n-slate-12 transition-all duration-500 ease-in-out [appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none" | ||||
|       @input="handleInput" | ||||
|       @focus="handleFocus" | ||||
|       @blur="handleBlur" | ||||
|   | ||||
| @@ -8,6 +8,10 @@ const props = defineProps({ | ||||
|     type: String, | ||||
|     default: REPLY_EDITOR_MODES.REPLY, | ||||
|   }, | ||||
|   disabled: { | ||||
|     type: Boolean, | ||||
|     default: false, | ||||
|   }, | ||||
| }); | ||||
|  | ||||
| defineEmits(['toggleMode']); | ||||
| @@ -20,9 +24,12 @@ const privateModeSize = useElementSize(wootEditorPrivateMode); | ||||
|  | ||||
| /** | ||||
|  * Computed boolean indicating if the editor is in private note mode | ||||
|  * When disabled, always show NOTE mode regardless of actual mode prop | ||||
|  * @type {ComputedRef<boolean>} | ||||
|  */ | ||||
| const isPrivate = computed(() => props.mode === REPLY_EDITOR_MODES.NOTE); | ||||
| const isPrivate = computed(() => { | ||||
|   return props.disabled || props.mode === REPLY_EDITOR_MODES.NOTE; | ||||
| }); | ||||
|  | ||||
| /** | ||||
|  * Computes the width of the sliding background chip in pixels | ||||
| @@ -53,6 +60,10 @@ const translateValue = computed(() => { | ||||
| <template> | ||||
|   <button | ||||
|     class="flex items-center w-auto h-8 p-1 transition-all border rounded-full bg-n-alpha-2 group relative duration-300 ease-in-out z-0" | ||||
|     :disabled="disabled" | ||||
|     :class="{ | ||||
|       'cursor-not-allowed': disabled, | ||||
|     }" | ||||
|     @click="$emit('toggleMode')" | ||||
|   > | ||||
|     <div ref="wootEditorReplyMode" class="flex items-center gap-1 px-2 z-20"> | ||||
| @@ -62,7 +73,10 @@ const translateValue = computed(() => { | ||||
|       {{ $t('CONVERSATION.REPLYBOX.PRIVATE_NOTE') }} | ||||
|     </div> | ||||
|     <div | ||||
|       class="absolute shadow-sm rounded-full h-6 w-[var(--chip-width)] transition-all duration-300 ease-in-out translate-x-[var(--translate-x)] rtl:translate-x-[var(--rtl-translate-x)] bg-n-solid-1" | ||||
|       class="absolute shadow-sm rounded-full h-6 w-[var(--chip-width)] ease-in-out translate-x-[var(--translate-x)] rtl:translate-x-[var(--rtl-translate-x)] bg-n-solid-1" | ||||
|       :class="{ | ||||
|         'transition-all duration-300': !disabled, | ||||
|       }" | ||||
|       :style="{ | ||||
|         '--chip-width': width, | ||||
|         '--translate-x': translateValue, | ||||
|   | ||||
| @@ -10,7 +10,6 @@ import { getAllowedFileTypesByChannel } from '@chatwoot/utils'; | ||||
| import { ALLOWED_FILE_TYPES } from 'shared/constants/messages'; | ||||
| import VideoCallButton from '../VideoCallButton.vue'; | ||||
| import AIAssistanceButton from '../AIAssistanceButton.vue'; | ||||
| import { REPLY_EDITOR_MODES } from './constants'; | ||||
| import { INBOX_TYPES } from 'dashboard/helper/inbox'; | ||||
| import { mapGetters } from 'vuex'; | ||||
| import NextButton from 'dashboard/components-next/button/Button.vue'; | ||||
| @@ -20,9 +19,9 @@ export default { | ||||
|   components: { NextButton, FileUpload, VideoCallButton, AIAssistanceButton }, | ||||
|   mixins: [inboxMixin], | ||||
|   props: { | ||||
|     mode: { | ||||
|       type: String, | ||||
|       default: REPLY_EDITOR_MODES.REPLY, | ||||
|     isNote: { | ||||
|       type: Boolean, | ||||
|       default: false, | ||||
|     }, | ||||
|     onSend: { | ||||
|       type: Function, | ||||
| @@ -168,9 +167,6 @@ export default { | ||||
|       isFeatureEnabledonAccount: 'accounts/isFeatureEnabledonAccount', | ||||
|       uiFlags: 'integrations/getUIFlags', | ||||
|     }), | ||||
|     isNote() { | ||||
|       return this.mode === REPLY_EDITOR_MODES.NOTE; | ||||
|     }, | ||||
|     wrapClass() { | ||||
|       return { | ||||
|         'is-note-mode': this.isNote, | ||||
|   | ||||
| @@ -15,6 +15,10 @@ export default { | ||||
|       type: String, | ||||
|       default: REPLY_EDITOR_MODES.REPLY, | ||||
|     }, | ||||
|     isReplyRestricted: { | ||||
|       type: Boolean, | ||||
|       default: false, | ||||
|     }, | ||||
|     isMessageLengthReachingThreshold: { | ||||
|       type: Boolean, | ||||
|       default: () => false, | ||||
| @@ -30,6 +34,7 @@ export default { | ||||
|       emit('setReplyMode', mode); | ||||
|     }; | ||||
|     const handleReplyClick = () => { | ||||
|       if (props.isReplyRestricted) return; | ||||
|       setReplyMode(REPLY_EDITOR_MODES.REPLY); | ||||
|     }; | ||||
|     const handleNoteClick = () => { | ||||
| @@ -88,6 +93,7 @@ export default { | ||||
|   <div class="flex justify-between h-[3.25rem] gap-2 ltr:pl-3 rtl:pr-3"> | ||||
|     <EditorModeToggle | ||||
|       :mode="mode" | ||||
|       :disabled="isReplyRestricted" | ||||
|       class="mt-3" | ||||
|       @toggle-mode="handleModeToggle" | ||||
|     /> | ||||
|   | ||||
| @@ -170,6 +170,9 @@ export default { | ||||
|       } | ||||
|       return true; | ||||
|     }, | ||||
|     isReplyRestricted() { | ||||
|       return !this.currentChat?.can_reply && !this.isAWhatsAppChannel; | ||||
|     }, | ||||
|     inboxId() { | ||||
|       return this.currentChat.inbox_id; | ||||
|     }, | ||||
| @@ -1078,6 +1081,7 @@ export default { | ||||
|   <div ref="replyEditor" class="reply-box" :class="replyBoxClass"> | ||||
|     <ReplyTopPanel | ||||
|       :mode="replyType" | ||||
|       :is-reply-restricted="isReplyRestricted" | ||||
|       :is-message-length-reaching-threshold="isMessageLengthReachingThreshold" | ||||
|       :characters-remaining="charactersRemaining" | ||||
|       :popout-reply-box="popOutReplyBox" | ||||
| @@ -1188,7 +1192,7 @@ export default { | ||||
|       :is-on-private-note="isOnPrivateNote" | ||||
|       :is-recording-audio="isRecordingAudio" | ||||
|       :is-send-disabled="isReplyButtonDisabled" | ||||
|       :mode="replyType" | ||||
|       :is-note="isPrivate" | ||||
|       :on-file-upload="onFileUpload" | ||||
|       :on-send="onSendReply" | ||||
|       :conversation-type="conversationType" | ||||
|   | ||||
| @@ -43,18 +43,22 @@ describe('useFontSize', () => { | ||||
|  | ||||
|   it('returns fontSizeOptions with correct structure', () => { | ||||
|     const { fontSizeOptions } = useFontSize(); | ||||
|     expect(fontSizeOptions).toHaveLength(5); | ||||
|     expect(fontSizeOptions[0]).toHaveProperty('value'); | ||||
|     expect(fontSizeOptions[0]).toHaveProperty('label'); | ||||
|     expect(fontSizeOptions.value).toHaveLength(5); | ||||
|     expect(fontSizeOptions.value[0]).toHaveProperty('value'); | ||||
|     expect(fontSizeOptions.value[0]).toHaveProperty('label'); | ||||
|  | ||||
|     // Check specific options | ||||
|     expect(fontSizeOptions.find(option => option.value === '16px')).toEqual({ | ||||
|     expect( | ||||
|       fontSizeOptions.value.find(option => option.value === '16px') | ||||
|     ).toEqual({ | ||||
|       value: '16px', | ||||
|       label: | ||||
|         'PROFILE_SETTINGS.FORM.INTERFACE_SECTION.FONT_SIZE.OPTIONS.DEFAULT', | ||||
|     }); | ||||
|  | ||||
|     expect(fontSizeOptions.find(option => option.value === '14px')).toEqual({ | ||||
|     expect( | ||||
|       fontSizeOptions.value.find(option => option.value === '14px') | ||||
|     ).toEqual({ | ||||
|       value: '14px', | ||||
|       label: | ||||
|         'PROFILE_SETTINGS.FORM.INTERFACE_SECTION.FONT_SIZE.OPTIONS.SMALLER', | ||||
| @@ -143,12 +147,12 @@ describe('useFontSize', () => { | ||||
|     const { fontSizeOptions } = useFontSize(); | ||||
|  | ||||
|     // Check that translation is applied | ||||
|     expect(fontSizeOptions.find(option => option.value === '14px').label).toBe( | ||||
|       'Smaller' | ||||
|     ); | ||||
|     expect(fontSizeOptions.find(option => option.value === '16px').label).toBe( | ||||
|       'Default' | ||||
|     ); | ||||
|     expect( | ||||
|       fontSizeOptions.value.find(option => option.value === '14px').label | ||||
|     ).toBe('Smaller'); | ||||
|     expect( | ||||
|       fontSizeOptions.value.find(option => option.value === '16px').label | ||||
|     ).toBe('Default'); | ||||
|  | ||||
|     // Verify translation function was called with correct keys | ||||
|     expect(mockTranslate).toHaveBeenCalledWith( | ||||
|   | ||||
| @@ -77,8 +77,8 @@ export const useFontSize = () => { | ||||
|    * Font size options for select dropdown | ||||
|    * @type {Array<{value: string, label: string}>} | ||||
|    */ | ||||
|   const fontSizeOptions = FONT_SIZE_NAMES.map(name => | ||||
|     createFontSizeOption(t, name) | ||||
|   const fontSizeOptions = computed(() => | ||||
|     FONT_SIZE_NAMES.map(name => createFontSizeOption(t, name)) | ||||
|   ); | ||||
|  | ||||
|   /** | ||||
|   | ||||
| @@ -96,3 +96,18 @@ export const sanitizeVariableSearchKey = (searchKey = '') => { | ||||
|     .replace(/,/g, '') // remove commas | ||||
|     .trim(); | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * Convert underscore-separated string to title case. | ||||
|  * Eg. "round_robin" => "Round Robin" | ||||
|  * @param {string} str | ||||
|  * @returns {string} | ||||
|  */ | ||||
| export const formatToTitleCase = str => { | ||||
|   return ( | ||||
|     str | ||||
|       ?.replace(/_/g, ' ') | ||||
|       .replace(/\b\w/g, l => l.toUpperCase()) | ||||
|       .trim() || '' | ||||
|   ); | ||||
| }; | ||||
|   | ||||
| @@ -5,6 +5,7 @@ import { | ||||
|   convertToCategorySlug, | ||||
|   convertToPortalSlug, | ||||
|   sanitizeVariableSearchKey, | ||||
|   formatToTitleCase, | ||||
| } from '../commons'; | ||||
|  | ||||
| describe('#getTypingUsersText', () => { | ||||
| @@ -142,3 +143,51 @@ describe('sanitizeVariableSearchKey', () => { | ||||
|     expect(sanitizeVariableSearchKey()).toBe(''); | ||||
|   }); | ||||
| }); | ||||
|  | ||||
| describe('formatToTitleCase', () => { | ||||
|   it('converts underscore-separated string to title case', () => { | ||||
|     expect(formatToTitleCase('round_robin')).toBe('Round Robin'); | ||||
|   }); | ||||
|  | ||||
|   it('converts single word to title case', () => { | ||||
|     expect(formatToTitleCase('priority')).toBe('Priority'); | ||||
|   }); | ||||
|  | ||||
|   it('converts multiple underscores to title case', () => { | ||||
|     expect(formatToTitleCase('auto_assignment_policy')).toBe( | ||||
|       'Auto Assignment Policy' | ||||
|     ); | ||||
|   }); | ||||
|  | ||||
|   it('handles already capitalized words', () => { | ||||
|     expect(formatToTitleCase('HIGH_PRIORITY')).toBe('HIGH PRIORITY'); | ||||
|   }); | ||||
|  | ||||
|   it('handles mixed case with underscores', () => { | ||||
|     expect(formatToTitleCase('first_Name_last')).toBe('First Name Last'); | ||||
|   }); | ||||
|  | ||||
|   it('handles empty string', () => { | ||||
|     expect(formatToTitleCase('')).toBe(''); | ||||
|   }); | ||||
|  | ||||
|   it('handles null input', () => { | ||||
|     expect(formatToTitleCase(null)).toBe(''); | ||||
|   }); | ||||
|  | ||||
|   it('handles undefined input', () => { | ||||
|     expect(formatToTitleCase(undefined)).toBe(''); | ||||
|   }); | ||||
|  | ||||
|   it('handles string without underscores', () => { | ||||
|     expect(formatToTitleCase('hello')).toBe('Hello'); | ||||
|   }); | ||||
|  | ||||
|   it('handles string with numbers', () => { | ||||
|     expect(formatToTitleCase('priority_1_high')).toBe('Priority 1 High'); | ||||
|   }); | ||||
|  | ||||
|   it('handles leading and trailing underscores', () => { | ||||
|     expect(formatToTitleCase('_leading_trailing_')).toBe('Leading Trailing'); | ||||
|   }); | ||||
| }); | ||||
|   | ||||
| @@ -71,6 +71,17 @@ | ||||
|       "SHOW_LABELS": "Show labels", | ||||
|       "HIDE_LABELS": "Hide labels" | ||||
|     }, | ||||
|     "VOICE_CALL": { | ||||
|       "INCOMING_CALL": "Incoming call", | ||||
|       "OUTGOING_CALL": "Outgoing call", | ||||
|       "CALL_IN_PROGRESS": "Call in progress", | ||||
|       "NO_ANSWER": "No answer", | ||||
|       "MISSED_CALL": "Missed call", | ||||
|       "CALL_ENDED": "Call ended", | ||||
|       "NOT_ANSWERED_YET": "Not answered yet", | ||||
|       "THEY_ANSWERED": "They answered", | ||||
|       "YOU_ANSWERED": "You answered" | ||||
|     }, | ||||
|     "HEADER": { | ||||
|       "RESOLVE_ACTION": "Resolve", | ||||
|       "REOPEN_ACTION": "Reopen", | ||||
|   | ||||
| @@ -51,6 +51,13 @@ | ||||
|             "LARGER": "Larger", | ||||
|             "EXTRA_LARGE": "Extra Large" | ||||
|           } | ||||
|         }, | ||||
|         "LANGUAGE": { | ||||
|           "TITLE": "Preferred Language", | ||||
|           "NOTE": "Choose the language you want to use.", | ||||
|           "UPDATE_SUCCESS": "Your Language settings have been updated successfully", | ||||
|           "UPDATE_ERROR": "There is an error while updating the language settings, please try again", | ||||
|           "USE_ACCOUNT_DEFAULT": "Use account default" | ||||
|         } | ||||
|       }, | ||||
|       "MESSAGE_SIGNATURE_SECTION": { | ||||
| @@ -330,6 +337,7 @@ | ||||
|     "REPORTS_LABEL": "Labels", | ||||
|     "REPORTS_INBOX": "Inbox", | ||||
|     "REPORTS_TEAM": "Team", | ||||
|     "AGENT_ASSIGNMENT": "Agent Assignment", | ||||
|     "SET_AVAILABILITY_TITLE": "Set yourself as", | ||||
|     "SET_YOUR_AVAILABILITY": "Set your availability", | ||||
|     "SLA": "SLA", | ||||
| @@ -418,5 +426,255 @@ | ||||
|       "SWITCH_TO_REPLY": "Switch to Reply", | ||||
|       "TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown" | ||||
|     } | ||||
|   }, | ||||
|   "ASSIGNMENT_POLICY": { | ||||
|     "INDEX": { | ||||
|       "HEADER": { | ||||
|         "TITLE": "Agent assignment", | ||||
|         "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here" | ||||
|       }, | ||||
|       "ASSIGNMENT_POLICY": { | ||||
|         "TITLE": "Assignment policy", | ||||
|         "DESCRIPTION": "Manage how conversations get assigned in inboxes.", | ||||
|         "FEATURES": [ | ||||
|           "Assign by conversations evenly or by available capacity", | ||||
|           "Add fair distribution rules to avoid overloading any agent", | ||||
|           "Add inboxes to a policy - one policy per inbox" | ||||
|         ] | ||||
|       }, | ||||
|       "AGENT_CAPACITY_POLICY": { | ||||
|         "TITLE": "Agent capacity policy", | ||||
|         "DESCRIPTION": "Manage workload for agents.", | ||||
|         "FEATURES": [ | ||||
|           "Define maximum conversations per inbox", | ||||
|           "Create exceptions based on labels and time", | ||||
|           "Add agents to a policy - one policy per agent" | ||||
|         ] | ||||
|       } | ||||
|     }, | ||||
|     "AGENT_ASSIGNMENT_POLICY": { | ||||
|       "INDEX": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Assignment policy", | ||||
|           "CREATE_POLICY": "New policy" | ||||
|         }, | ||||
|         "CARD": { | ||||
|           "ORDER": "Order", | ||||
|           "PRIORITY": "Priority", | ||||
|           "ACTIVE": "Active", | ||||
|           "INACTIVE": "Inactive", | ||||
|           "POPOVER": "Added inboxes", | ||||
|           "EDIT": "Edit" | ||||
|         }, | ||||
|         "NO_RECORDS_FOUND": "No assignment policies found" | ||||
|       }, | ||||
|       "CREATE": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Create assignment policy" | ||||
|         }, | ||||
|         "CREATE_BUTTON": "Create policy", | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Assignment policy created successfully", | ||||
|           "ERROR_MESSAGE": "Failed to create assignment policy" | ||||
|         } | ||||
|       }, | ||||
|       "EDIT": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Edit assignment policy" | ||||
|         }, | ||||
|         "EDIT_BUTTON": "Update policy", | ||||
|         "CONFIRM_ADD_INBOX_DIALOG": { | ||||
|           "TITLE": "Add inbox", | ||||
|           "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", | ||||
|           "CONFIRM_BUTTON_LABEL": "Continue", | ||||
|           "CANCEL_BUTTON_LABEL": "Cancel" | ||||
|         }, | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Assignment policy updated successfully", | ||||
|           "ERROR_MESSAGE": "Failed to update assignment policy" | ||||
|         }, | ||||
|         "INBOX_API": { | ||||
|           "ADD": { | ||||
|             "SUCCESS_MESSAGE": "Inbox added to policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to add inbox to policy" | ||||
|           }, | ||||
|           "REMOVE": { | ||||
|             "SUCCESS_MESSAGE": "Inbox removed from policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to remove inbox from policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "FORM": { | ||||
|         "NAME": { | ||||
|           "LABEL": "Policy name:", | ||||
|           "PLACEHOLDER": "Enter policy name" | ||||
|         }, | ||||
|         "DESCRIPTION": { | ||||
|           "LABEL": "Description:", | ||||
|           "PLACEHOLDER": "Enter description" | ||||
|         }, | ||||
|         "STATUS": { | ||||
|           "LABEL": "Status:", | ||||
|           "PLACEHOLDER": "Select status", | ||||
|           "ACTIVE": "Policy is active", | ||||
|           "INACTIVE": "Policy is inactive" | ||||
|         }, | ||||
|         "ASSIGNMENT_ORDER": { | ||||
|           "LABEL": "Assignment order", | ||||
|           "ROUND_ROBIN": { | ||||
|             "LABEL": "Round robin", | ||||
|             "DESCRIPTION": "Assign conversations evenly among agents." | ||||
|           }, | ||||
|           "BALANCED": { | ||||
|             "LABEL": "Balanced", | ||||
|             "DESCRIPTION": "Assign conversations based on available capacity." | ||||
|           } | ||||
|         }, | ||||
|         "ASSIGNMENT_PRIORITY": { | ||||
|           "LABEL": "Assignment priority", | ||||
|           "EARLIEST_CREATED": { | ||||
|             "LABEL": "Earliest created", | ||||
|             "DESCRIPTION": "The conversation that was created first gets assigned first." | ||||
|           }, | ||||
|           "LONGEST_WAITING": { | ||||
|             "LABEL": "Longest waiting", | ||||
|             "DESCRIPTION": "The conversation waiting the longest gets assigned first." | ||||
|           } | ||||
|         }, | ||||
|         "FAIR_DISTRIBUTION": { | ||||
|           "LABEL": "Fair distribution policy", | ||||
|           "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.", | ||||
|           "INPUT_MAX": "Assign max", | ||||
|           "DURATION": "Conversations per agent in every" | ||||
|         }, | ||||
|         "INBOXES": { | ||||
|           "LABEL": "Added inboxes", | ||||
|           "DESCRIPTION": "Add inboxes for which this policy will be applicable.", | ||||
|           "ADD_BUTTON": "Add inbox", | ||||
|           "DROPDOWN": { | ||||
|             "SEARCH_PLACEHOLDER": "Search and select inboxes to add", | ||||
|             "ADD_BUTTON": "Add" | ||||
|           }, | ||||
|           "EMPTY_STATE": "No inboxes added to this policy, add an inbox to get started", | ||||
|           "API": { | ||||
|             "SUCCESS_MESSAGE": "Inbox successfully added to policy", | ||||
|             "ERROR_MESSAGE": "Failed to add inbox to policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "DELETE_POLICY": { | ||||
|         "SUCCESS_MESSAGE": "Assignment policy deleted successfully", | ||||
|         "ERROR_MESSAGE": "Failed to delete assignment policy" | ||||
|       } | ||||
|     }, | ||||
|     "AGENT_CAPACITY_POLICY": { | ||||
|       "INDEX": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Agent capacity", | ||||
|           "CREATE_POLICY": "New policy" | ||||
|         }, | ||||
|         "CARD": { | ||||
|           "POPOVER": "Added agents", | ||||
|           "EDIT": "Edit" | ||||
|         }, | ||||
|         "NO_RECORDS_FOUND": "No agent capacity policies found" | ||||
|       }, | ||||
|       "CREATE": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Create agent capacity policy" | ||||
|         }, | ||||
|         "CREATE_BUTTON": "Create policy", | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Agent capacity policy created successfully", | ||||
|           "ERROR_MESSAGE": "Failed to create agent capacity policy" | ||||
|         } | ||||
|       }, | ||||
|       "EDIT": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Edit agent capacity policy" | ||||
|         }, | ||||
|         "EDIT_BUTTON": "Update policy", | ||||
|         "CONFIRM_ADD_AGENT_DIALOG": { | ||||
|           "TITLE": "Add agent", | ||||
|           "DESCRIPTION": "{agentName} is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", | ||||
|           "CONFIRM_BUTTON_LABEL": "Continue", | ||||
|           "CANCEL_BUTTON_LABEL": "Cancel" | ||||
|         }, | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Agent capacity policy updated successfully", | ||||
|           "ERROR_MESSAGE": "Failed to update agent capacity policy" | ||||
|         }, | ||||
|         "AGENT_API": { | ||||
|           "ADD": { | ||||
|             "SUCCESS_MESSAGE": "Agent added to policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to add agent to policy" | ||||
|           }, | ||||
|           "REMOVE": { | ||||
|             "SUCCESS_MESSAGE": "Agent removed from policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to remove agent from policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "FORM": { | ||||
|         "NAME": { | ||||
|           "LABEL": "Policy name:", | ||||
|           "PLACEHOLDER": "Enter policy name" | ||||
|         }, | ||||
|         "DESCRIPTION": { | ||||
|           "LABEL": "Description:", | ||||
|           "PLACEHOLDER": "Enter description" | ||||
|         }, | ||||
|         "INBOX_CAPACITY_LIMIT": { | ||||
|           "LABEL": "Inbox capacity limits", | ||||
|           "ADD_BUTTON": "Add inbox", | ||||
|           "FIELD": { | ||||
|             "SELECT_INBOX": "Select inbox", | ||||
|             "MAX_CONVERSATIONS": "Max conversations", | ||||
|             "SET_LIMIT": "Set limit" | ||||
|           }, | ||||
|           "EMPTY_STATE": "No inbox limit set" | ||||
|         }, | ||||
|         "EXCLUSION_RULES": { | ||||
|           "LABEL": "Exclusion rules", | ||||
|           "DESCRIPTION": "Conversations that satisfy the following conditions would not count towards agent capacity", | ||||
|           "TAGS": { | ||||
|             "LABEL": "Exclude conversations tagged with specific labels", | ||||
|             "ADD_TAG": "add tag", | ||||
|             "DROPDOWN": { | ||||
|               "SEARCH_PLACEHOLDER": "Search and select tags to add" | ||||
|             }, | ||||
|             "EMPTY_STATE": "No tags added to this policy." | ||||
|           }, | ||||
|           "DURATION": { | ||||
|             "LABEL": "Exclude conversations older than a specified duration", | ||||
|             "PLACEHOLDER": "Set time" | ||||
|           } | ||||
|         }, | ||||
|         "USERS": { | ||||
|           "LABEL": "Assigned agents", | ||||
|           "DESCRIPTION": "Add agents for which this policy will be applicable.", | ||||
|           "ADD_BUTTON": "Add agent", | ||||
|           "DROPDOWN": { | ||||
|             "SEARCH_PLACEHOLDER": "Search and select agents to add", | ||||
|             "ADD_BUTTON": "Add" | ||||
|           }, | ||||
|           "EMPTY_STATE": "No agents added", | ||||
|           "API": { | ||||
|             "SUCCESS_MESSAGE": "Agent successfully added to policy", | ||||
|             "ERROR_MESSAGE": "Failed to add agent to policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "DELETE_POLICY": { | ||||
|         "SUCCESS_MESSAGE": "Agent capacity policy deleted successfully", | ||||
|         "ERROR_MESSAGE": "Failed to delete agent capacity policy" | ||||
|       } | ||||
|     }, | ||||
|     "DELETE_POLICY": { | ||||
|       "TITLE": "Delete policy", | ||||
|       "DESCRIPTION": "Are you sure you want to delete this policy? This action cannot be undone.", | ||||
|       "CONFIRM_BUTTON_LABEL": "Delete", | ||||
|       "CANCEL_BUTTON_LABEL": "Cancel" | ||||
|     } | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -71,6 +71,17 @@ | ||||
|       "SHOW_LABELS": "إظهار السمات", | ||||
|       "HIDE_LABELS": "إخفاء السمات" | ||||
|     }, | ||||
|     "VOICE_CALL": { | ||||
|       "INCOMING_CALL": "Incoming call", | ||||
|       "OUTGOING_CALL": "Outgoing call", | ||||
|       "CALL_IN_PROGRESS": "Call in progress", | ||||
|       "NO_ANSWER": "No answer", | ||||
|       "MISSED_CALL": "Missed call", | ||||
|       "CALL_ENDED": "Call ended", | ||||
|       "NOT_ANSWERED_YET": "Not answered yet", | ||||
|       "THEY_ANSWERED": "They answered", | ||||
|       "YOU_ANSWERED": "You answered" | ||||
|     }, | ||||
|     "HEADER": { | ||||
|       "RESOLVE_ACTION": "حل المحادثة", | ||||
|       "REOPEN_ACTION": "إعادة فتح", | ||||
|   | ||||
| @@ -51,6 +51,13 @@ | ||||
|             "LARGER": "Larger", | ||||
|             "EXTRA_LARGE": "Extra Large" | ||||
|           } | ||||
|         }, | ||||
|         "LANGUAGE": { | ||||
|           "TITLE": "Preferred Language", | ||||
|           "NOTE": "Choose the language you want to use.", | ||||
|           "UPDATE_SUCCESS": "Your Language settings have been updated successfully", | ||||
|           "UPDATE_ERROR": "There is an error while updating the language settings, please try again", | ||||
|           "USE_ACCOUNT_DEFAULT": "Use account default" | ||||
|         } | ||||
|       }, | ||||
|       "MESSAGE_SIGNATURE_SECTION": { | ||||
| @@ -330,6 +337,7 @@ | ||||
|     "REPORTS_LABEL": "الوسوم", | ||||
|     "REPORTS_INBOX": "صندوق الوارد", | ||||
|     "REPORTS_TEAM": "الفريق", | ||||
|     "AGENT_ASSIGNMENT": "Agent Assignment", | ||||
|     "SET_AVAILABILITY_TITLE": "تعيين نفسك كـ", | ||||
|     "SET_YOUR_AVAILABILITY": "قم بتعيين توافرك", | ||||
|     "SLA": "SLA", | ||||
| @@ -418,5 +426,255 @@ | ||||
|       "SWITCH_TO_REPLY": "التبديل إلى الرد", | ||||
|       "TOGGLE_SNOOZE_DROPDOWN": "تبديل القائمة المنسدلة" | ||||
|     } | ||||
|   }, | ||||
|   "ASSIGNMENT_POLICY": { | ||||
|     "INDEX": { | ||||
|       "HEADER": { | ||||
|         "TITLE": "Agent assignment", | ||||
|         "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here" | ||||
|       }, | ||||
|       "ASSIGNMENT_POLICY": { | ||||
|         "TITLE": "Assignment policy", | ||||
|         "DESCRIPTION": "Manage how conversations get assigned in inboxes.", | ||||
|         "FEATURES": [ | ||||
|           "Assign by conversations evenly or by available capacity", | ||||
|           "Add fair distribution rules to avoid overloading any agent", | ||||
|           "Add inboxes to a policy - one policy per inbox" | ||||
|         ] | ||||
|       }, | ||||
|       "AGENT_CAPACITY_POLICY": { | ||||
|         "TITLE": "Agent capacity policy", | ||||
|         "DESCRIPTION": "Manage workload for agents.", | ||||
|         "FEATURES": [ | ||||
|           "Define maximum conversations per inbox", | ||||
|           "Create exceptions based on labels and time", | ||||
|           "Add agents to a policy - one policy per agent" | ||||
|         ] | ||||
|       } | ||||
|     }, | ||||
|     "AGENT_ASSIGNMENT_POLICY": { | ||||
|       "INDEX": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Assignment policy", | ||||
|           "CREATE_POLICY": "New policy" | ||||
|         }, | ||||
|         "CARD": { | ||||
|           "ORDER": "Order", | ||||
|           "PRIORITY": "الأولوية", | ||||
|           "ACTIVE": "مفعل", | ||||
|           "INACTIVE": "Inactive", | ||||
|           "POPOVER": "Added inboxes", | ||||
|           "EDIT": "تعديل" | ||||
|         }, | ||||
|         "NO_RECORDS_FOUND": "No assignment policies found" | ||||
|       }, | ||||
|       "CREATE": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Create assignment policy" | ||||
|         }, | ||||
|         "CREATE_BUTTON": "Create policy", | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Assignment policy created successfully", | ||||
|           "ERROR_MESSAGE": "Failed to create assignment policy" | ||||
|         } | ||||
|       }, | ||||
|       "EDIT": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Edit assignment policy" | ||||
|         }, | ||||
|         "EDIT_BUTTON": "Update policy", | ||||
|         "CONFIRM_ADD_INBOX_DIALOG": { | ||||
|           "TITLE": "Add inbox", | ||||
|           "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", | ||||
|           "CONFIRM_BUTTON_LABEL": "Continue", | ||||
|           "CANCEL_BUTTON_LABEL": "إلغاء" | ||||
|         }, | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Assignment policy updated successfully", | ||||
|           "ERROR_MESSAGE": "Failed to update assignment policy" | ||||
|         }, | ||||
|         "INBOX_API": { | ||||
|           "ADD": { | ||||
|             "SUCCESS_MESSAGE": "Inbox added to policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to add inbox to policy" | ||||
|           }, | ||||
|           "REMOVE": { | ||||
|             "SUCCESS_MESSAGE": "Inbox removed from policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to remove inbox from policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "FORM": { | ||||
|         "NAME": { | ||||
|           "LABEL": "Policy name:", | ||||
|           "PLACEHOLDER": "Enter policy name" | ||||
|         }, | ||||
|         "DESCRIPTION": { | ||||
|           "LABEL": "الوصف:", | ||||
|           "PLACEHOLDER": "أدخل الوصف" | ||||
|         }, | ||||
|         "STATUS": { | ||||
|           "LABEL": "الحالة:", | ||||
|           "PLACEHOLDER": "اختر الحالة", | ||||
|           "ACTIVE": "Policy is active", | ||||
|           "INACTIVE": "Policy is inactive" | ||||
|         }, | ||||
|         "ASSIGNMENT_ORDER": { | ||||
|           "LABEL": "Assignment order", | ||||
|           "ROUND_ROBIN": { | ||||
|             "LABEL": "Round robin", | ||||
|             "DESCRIPTION": "Assign conversations evenly among agents." | ||||
|           }, | ||||
|           "BALANCED": { | ||||
|             "LABEL": "Balanced", | ||||
|             "DESCRIPTION": "Assign conversations based on available capacity." | ||||
|           } | ||||
|         }, | ||||
|         "ASSIGNMENT_PRIORITY": { | ||||
|           "LABEL": "Assignment priority", | ||||
|           "EARLIEST_CREATED": { | ||||
|             "LABEL": "Earliest created", | ||||
|             "DESCRIPTION": "The conversation that was created first gets assigned first." | ||||
|           }, | ||||
|           "LONGEST_WAITING": { | ||||
|             "LABEL": "Longest waiting", | ||||
|             "DESCRIPTION": "The conversation waiting the longest gets assigned first." | ||||
|           } | ||||
|         }, | ||||
|         "FAIR_DISTRIBUTION": { | ||||
|           "LABEL": "Fair distribution policy", | ||||
|           "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.", | ||||
|           "INPUT_MAX": "Assign max", | ||||
|           "DURATION": "Conversations per agent in every" | ||||
|         }, | ||||
|         "INBOXES": { | ||||
|           "LABEL": "Added inboxes", | ||||
|           "DESCRIPTION": "Add inboxes for which this policy will be applicable.", | ||||
|           "ADD_BUTTON": "Add inbox", | ||||
|           "DROPDOWN": { | ||||
|             "SEARCH_PLACEHOLDER": "Search and select inboxes to add", | ||||
|             "ADD_BUTTON": "إضافة" | ||||
|           }, | ||||
|           "EMPTY_STATE": "No inboxes added to this policy, add an inbox to get started", | ||||
|           "API": { | ||||
|             "SUCCESS_MESSAGE": "Inbox successfully added to policy", | ||||
|             "ERROR_MESSAGE": "Failed to add inbox to policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "DELETE_POLICY": { | ||||
|         "SUCCESS_MESSAGE": "Assignment policy deleted successfully", | ||||
|         "ERROR_MESSAGE": "Failed to delete assignment policy" | ||||
|       } | ||||
|     }, | ||||
|     "AGENT_CAPACITY_POLICY": { | ||||
|       "INDEX": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Agent capacity", | ||||
|           "CREATE_POLICY": "New policy" | ||||
|         }, | ||||
|         "CARD": { | ||||
|           "POPOVER": "Added agents", | ||||
|           "EDIT": "تعديل" | ||||
|         }, | ||||
|         "NO_RECORDS_FOUND": "No agent capacity policies found" | ||||
|       }, | ||||
|       "CREATE": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Create agent capacity policy" | ||||
|         }, | ||||
|         "CREATE_BUTTON": "Create policy", | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Agent capacity policy created successfully", | ||||
|           "ERROR_MESSAGE": "Failed to create agent capacity policy" | ||||
|         } | ||||
|       }, | ||||
|       "EDIT": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Edit agent capacity policy" | ||||
|         }, | ||||
|         "EDIT_BUTTON": "Update policy", | ||||
|         "CONFIRM_ADD_AGENT_DIALOG": { | ||||
|           "TITLE": "Add agent", | ||||
|           "DESCRIPTION": "{agentName} is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", | ||||
|           "CONFIRM_BUTTON_LABEL": "Continue", | ||||
|           "CANCEL_BUTTON_LABEL": "إلغاء" | ||||
|         }, | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Agent capacity policy updated successfully", | ||||
|           "ERROR_MESSAGE": "Failed to update agent capacity policy" | ||||
|         }, | ||||
|         "AGENT_API": { | ||||
|           "ADD": { | ||||
|             "SUCCESS_MESSAGE": "Agent added to policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to add agent to policy" | ||||
|           }, | ||||
|           "REMOVE": { | ||||
|             "SUCCESS_MESSAGE": "Agent removed from policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to remove agent from policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "FORM": { | ||||
|         "NAME": { | ||||
|           "LABEL": "Policy name:", | ||||
|           "PLACEHOLDER": "Enter policy name" | ||||
|         }, | ||||
|         "DESCRIPTION": { | ||||
|           "LABEL": "الوصف:", | ||||
|           "PLACEHOLDER": "أدخل الوصف" | ||||
|         }, | ||||
|         "INBOX_CAPACITY_LIMIT": { | ||||
|           "LABEL": "Inbox capacity limits", | ||||
|           "ADD_BUTTON": "Add inbox", | ||||
|           "FIELD": { | ||||
|             "SELECT_INBOX": "Select inbox", | ||||
|             "MAX_CONVERSATIONS": "Max conversations", | ||||
|             "SET_LIMIT": "Set limit" | ||||
|           }, | ||||
|           "EMPTY_STATE": "No inbox limit set" | ||||
|         }, | ||||
|         "EXCLUSION_RULES": { | ||||
|           "LABEL": "Exclusion rules", | ||||
|           "DESCRIPTION": "Conversations that satisfy the following conditions would not count towards agent capacity", | ||||
|           "TAGS": { | ||||
|             "LABEL": "Exclude conversations tagged with specific labels", | ||||
|             "ADD_TAG": "add tag", | ||||
|             "DROPDOWN": { | ||||
|               "SEARCH_PLACEHOLDER": "Search and select tags to add" | ||||
|             }, | ||||
|             "EMPTY_STATE": "No tags added to this policy." | ||||
|           }, | ||||
|           "DURATION": { | ||||
|             "LABEL": "Exclude conversations older than a specified duration", | ||||
|             "PLACEHOLDER": "Set time" | ||||
|           } | ||||
|         }, | ||||
|         "USERS": { | ||||
|           "LABEL": "Assigned agents", | ||||
|           "DESCRIPTION": "Add agents for which this policy will be applicable.", | ||||
|           "ADD_BUTTON": "Add agent", | ||||
|           "DROPDOWN": { | ||||
|             "SEARCH_PLACEHOLDER": "Search and select agents to add", | ||||
|             "ADD_BUTTON": "إضافة" | ||||
|           }, | ||||
|           "EMPTY_STATE": "No agents added", | ||||
|           "API": { | ||||
|             "SUCCESS_MESSAGE": "Agent successfully added to policy", | ||||
|             "ERROR_MESSAGE": "Failed to add agent to policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "DELETE_POLICY": { | ||||
|         "SUCCESS_MESSAGE": "Agent capacity policy deleted successfully", | ||||
|         "ERROR_MESSAGE": "Failed to delete agent capacity policy" | ||||
|       } | ||||
|     }, | ||||
|     "DELETE_POLICY": { | ||||
|       "TITLE": "Delete policy", | ||||
|       "DESCRIPTION": "Are you sure you want to delete this policy? This action cannot be undone.", | ||||
|       "CONFIRM_BUTTON_LABEL": "حذف", | ||||
|       "CANCEL_BUTTON_LABEL": "إلغاء" | ||||
|     } | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -71,6 +71,17 @@ | ||||
|       "SHOW_LABELS": "Show labels", | ||||
|       "HIDE_LABELS": "Hide labels" | ||||
|     }, | ||||
|     "VOICE_CALL": { | ||||
|       "INCOMING_CALL": "Incoming call", | ||||
|       "OUTGOING_CALL": "Outgoing call", | ||||
|       "CALL_IN_PROGRESS": "Call in progress", | ||||
|       "NO_ANSWER": "No answer", | ||||
|       "MISSED_CALL": "Missed call", | ||||
|       "CALL_ENDED": "Call ended", | ||||
|       "NOT_ANSWERED_YET": "Not answered yet", | ||||
|       "THEY_ANSWERED": "They answered", | ||||
|       "YOU_ANSWERED": "You answered" | ||||
|     }, | ||||
|     "HEADER": { | ||||
|       "RESOLVE_ACTION": "Resolve", | ||||
|       "REOPEN_ACTION": "Reopen", | ||||
|   | ||||
| @@ -51,6 +51,13 @@ | ||||
|             "LARGER": "Larger", | ||||
|             "EXTRA_LARGE": "Extra Large" | ||||
|           } | ||||
|         }, | ||||
|         "LANGUAGE": { | ||||
|           "TITLE": "Preferred Language", | ||||
|           "NOTE": "Choose the language you want to use.", | ||||
|           "UPDATE_SUCCESS": "Your Language settings have been updated successfully", | ||||
|           "UPDATE_ERROR": "There is an error while updating the language settings, please try again", | ||||
|           "USE_ACCOUNT_DEFAULT": "Use account default" | ||||
|         } | ||||
|       }, | ||||
|       "MESSAGE_SIGNATURE_SECTION": { | ||||
| @@ -330,6 +337,7 @@ | ||||
|     "REPORTS_LABEL": "Labels", | ||||
|     "REPORTS_INBOX": "Inbox", | ||||
|     "REPORTS_TEAM": "Team", | ||||
|     "AGENT_ASSIGNMENT": "Agent Assignment", | ||||
|     "SET_AVAILABILITY_TITLE": "Set yourself as", | ||||
|     "SET_YOUR_AVAILABILITY": "Set your availability", | ||||
|     "SLA": "SLA", | ||||
| @@ -418,5 +426,255 @@ | ||||
|       "SWITCH_TO_REPLY": "Switch to Reply", | ||||
|       "TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown" | ||||
|     } | ||||
|   }, | ||||
|   "ASSIGNMENT_POLICY": { | ||||
|     "INDEX": { | ||||
|       "HEADER": { | ||||
|         "TITLE": "Agent assignment", | ||||
|         "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here" | ||||
|       }, | ||||
|       "ASSIGNMENT_POLICY": { | ||||
|         "TITLE": "Assignment policy", | ||||
|         "DESCRIPTION": "Manage how conversations get assigned in inboxes.", | ||||
|         "FEATURES": [ | ||||
|           "Assign by conversations evenly or by available capacity", | ||||
|           "Add fair distribution rules to avoid overloading any agent", | ||||
|           "Add inboxes to a policy - one policy per inbox" | ||||
|         ] | ||||
|       }, | ||||
|       "AGENT_CAPACITY_POLICY": { | ||||
|         "TITLE": "Agent capacity policy", | ||||
|         "DESCRIPTION": "Manage workload for agents.", | ||||
|         "FEATURES": [ | ||||
|           "Define maximum conversations per inbox", | ||||
|           "Create exceptions based on labels and time", | ||||
|           "Add agents to a policy - one policy per agent" | ||||
|         ] | ||||
|       } | ||||
|     }, | ||||
|     "AGENT_ASSIGNMENT_POLICY": { | ||||
|       "INDEX": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Assignment policy", | ||||
|           "CREATE_POLICY": "New policy" | ||||
|         }, | ||||
|         "CARD": { | ||||
|           "ORDER": "Order", | ||||
|           "PRIORITY": "Priority", | ||||
|           "ACTIVE": "Active", | ||||
|           "INACTIVE": "Inactive", | ||||
|           "POPOVER": "Added inboxes", | ||||
|           "EDIT": "Edit" | ||||
|         }, | ||||
|         "NO_RECORDS_FOUND": "No assignment policies found" | ||||
|       }, | ||||
|       "CREATE": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Create assignment policy" | ||||
|         }, | ||||
|         "CREATE_BUTTON": "Create policy", | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Assignment policy created successfully", | ||||
|           "ERROR_MESSAGE": "Failed to create assignment policy" | ||||
|         } | ||||
|       }, | ||||
|       "EDIT": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Edit assignment policy" | ||||
|         }, | ||||
|         "EDIT_BUTTON": "Update policy", | ||||
|         "CONFIRM_ADD_INBOX_DIALOG": { | ||||
|           "TITLE": "Add inbox", | ||||
|           "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", | ||||
|           "CONFIRM_BUTTON_LABEL": "Continue", | ||||
|           "CANCEL_BUTTON_LABEL": "Cancel" | ||||
|         }, | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Assignment policy updated successfully", | ||||
|           "ERROR_MESSAGE": "Failed to update assignment policy" | ||||
|         }, | ||||
|         "INBOX_API": { | ||||
|           "ADD": { | ||||
|             "SUCCESS_MESSAGE": "Inbox added to policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to add inbox to policy" | ||||
|           }, | ||||
|           "REMOVE": { | ||||
|             "SUCCESS_MESSAGE": "Inbox removed from policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to remove inbox from policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "FORM": { | ||||
|         "NAME": { | ||||
|           "LABEL": "Policy name:", | ||||
|           "PLACEHOLDER": "Enter policy name" | ||||
|         }, | ||||
|         "DESCRIPTION": { | ||||
|           "LABEL": "Description:", | ||||
|           "PLACEHOLDER": "Enter description" | ||||
|         }, | ||||
|         "STATUS": { | ||||
|           "LABEL": "Status:", | ||||
|           "PLACEHOLDER": "Select status", | ||||
|           "ACTIVE": "Policy is active", | ||||
|           "INACTIVE": "Policy is inactive" | ||||
|         }, | ||||
|         "ASSIGNMENT_ORDER": { | ||||
|           "LABEL": "Assignment order", | ||||
|           "ROUND_ROBIN": { | ||||
|             "LABEL": "Round robin", | ||||
|             "DESCRIPTION": "Assign conversations evenly among agents." | ||||
|           }, | ||||
|           "BALANCED": { | ||||
|             "LABEL": "Balanced", | ||||
|             "DESCRIPTION": "Assign conversations based on available capacity." | ||||
|           } | ||||
|         }, | ||||
|         "ASSIGNMENT_PRIORITY": { | ||||
|           "LABEL": "Assignment priority", | ||||
|           "EARLIEST_CREATED": { | ||||
|             "LABEL": "Earliest created", | ||||
|             "DESCRIPTION": "The conversation that was created first gets assigned first." | ||||
|           }, | ||||
|           "LONGEST_WAITING": { | ||||
|             "LABEL": "Longest waiting", | ||||
|             "DESCRIPTION": "The conversation waiting the longest gets assigned first." | ||||
|           } | ||||
|         }, | ||||
|         "FAIR_DISTRIBUTION": { | ||||
|           "LABEL": "Fair distribution policy", | ||||
|           "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.", | ||||
|           "INPUT_MAX": "Assign max", | ||||
|           "DURATION": "Conversations per agent in every" | ||||
|         }, | ||||
|         "INBOXES": { | ||||
|           "LABEL": "Added inboxes", | ||||
|           "DESCRIPTION": "Add inboxes for which this policy will be applicable.", | ||||
|           "ADD_BUTTON": "Add inbox", | ||||
|           "DROPDOWN": { | ||||
|             "SEARCH_PLACEHOLDER": "Search and select inboxes to add", | ||||
|             "ADD_BUTTON": "Add" | ||||
|           }, | ||||
|           "EMPTY_STATE": "No inboxes added to this policy, add an inbox to get started", | ||||
|           "API": { | ||||
|             "SUCCESS_MESSAGE": "Inbox successfully added to policy", | ||||
|             "ERROR_MESSAGE": "Failed to add inbox to policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "DELETE_POLICY": { | ||||
|         "SUCCESS_MESSAGE": "Assignment policy deleted successfully", | ||||
|         "ERROR_MESSAGE": "Failed to delete assignment policy" | ||||
|       } | ||||
|     }, | ||||
|     "AGENT_CAPACITY_POLICY": { | ||||
|       "INDEX": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Agent capacity", | ||||
|           "CREATE_POLICY": "New policy" | ||||
|         }, | ||||
|         "CARD": { | ||||
|           "POPOVER": "Added agents", | ||||
|           "EDIT": "Edit" | ||||
|         }, | ||||
|         "NO_RECORDS_FOUND": "No agent capacity policies found" | ||||
|       }, | ||||
|       "CREATE": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Create agent capacity policy" | ||||
|         }, | ||||
|         "CREATE_BUTTON": "Create policy", | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Agent capacity policy created successfully", | ||||
|           "ERROR_MESSAGE": "Failed to create agent capacity policy" | ||||
|         } | ||||
|       }, | ||||
|       "EDIT": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Edit agent capacity policy" | ||||
|         }, | ||||
|         "EDIT_BUTTON": "Update policy", | ||||
|         "CONFIRM_ADD_AGENT_DIALOG": { | ||||
|           "TITLE": "Add agent", | ||||
|           "DESCRIPTION": "{agentName} is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", | ||||
|           "CONFIRM_BUTTON_LABEL": "Continue", | ||||
|           "CANCEL_BUTTON_LABEL": "Cancel" | ||||
|         }, | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Agent capacity policy updated successfully", | ||||
|           "ERROR_MESSAGE": "Failed to update agent capacity policy" | ||||
|         }, | ||||
|         "AGENT_API": { | ||||
|           "ADD": { | ||||
|             "SUCCESS_MESSAGE": "Agent added to policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to add agent to policy" | ||||
|           }, | ||||
|           "REMOVE": { | ||||
|             "SUCCESS_MESSAGE": "Agent removed from policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to remove agent from policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "FORM": { | ||||
|         "NAME": { | ||||
|           "LABEL": "Policy name:", | ||||
|           "PLACEHOLDER": "Enter policy name" | ||||
|         }, | ||||
|         "DESCRIPTION": { | ||||
|           "LABEL": "Description:", | ||||
|           "PLACEHOLDER": "Enter description" | ||||
|         }, | ||||
|         "INBOX_CAPACITY_LIMIT": { | ||||
|           "LABEL": "Inbox capacity limits", | ||||
|           "ADD_BUTTON": "Add inbox", | ||||
|           "FIELD": { | ||||
|             "SELECT_INBOX": "Select inbox", | ||||
|             "MAX_CONVERSATIONS": "Max conversations", | ||||
|             "SET_LIMIT": "Set limit" | ||||
|           }, | ||||
|           "EMPTY_STATE": "No inbox limit set" | ||||
|         }, | ||||
|         "EXCLUSION_RULES": { | ||||
|           "LABEL": "Exclusion rules", | ||||
|           "DESCRIPTION": "Conversations that satisfy the following conditions would not count towards agent capacity", | ||||
|           "TAGS": { | ||||
|             "LABEL": "Exclude conversations tagged with specific labels", | ||||
|             "ADD_TAG": "add tag", | ||||
|             "DROPDOWN": { | ||||
|               "SEARCH_PLACEHOLDER": "Search and select tags to add" | ||||
|             }, | ||||
|             "EMPTY_STATE": "No tags added to this policy." | ||||
|           }, | ||||
|           "DURATION": { | ||||
|             "LABEL": "Exclude conversations older than a specified duration", | ||||
|             "PLACEHOLDER": "Set time" | ||||
|           } | ||||
|         }, | ||||
|         "USERS": { | ||||
|           "LABEL": "Assigned agents", | ||||
|           "DESCRIPTION": "Add agents for which this policy will be applicable.", | ||||
|           "ADD_BUTTON": "Add agent", | ||||
|           "DROPDOWN": { | ||||
|             "SEARCH_PLACEHOLDER": "Search and select agents to add", | ||||
|             "ADD_BUTTON": "Add" | ||||
|           }, | ||||
|           "EMPTY_STATE": "No agents added", | ||||
|           "API": { | ||||
|             "SUCCESS_MESSAGE": "Agent successfully added to policy", | ||||
|             "ERROR_MESSAGE": "Failed to add agent to policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "DELETE_POLICY": { | ||||
|         "SUCCESS_MESSAGE": "Agent capacity policy deleted successfully", | ||||
|         "ERROR_MESSAGE": "Failed to delete agent capacity policy" | ||||
|       } | ||||
|     }, | ||||
|     "DELETE_POLICY": { | ||||
|       "TITLE": "Delete policy", | ||||
|       "DESCRIPTION": "Are you sure you want to delete this policy? This action cannot be undone.", | ||||
|       "CONFIRM_BUTTON_LABEL": "Delete", | ||||
|       "CANCEL_BUTTON_LABEL": "Cancel" | ||||
|     } | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -71,6 +71,17 @@ | ||||
|       "SHOW_LABELS": "Show labels", | ||||
|       "HIDE_LABELS": "Hide labels" | ||||
|     }, | ||||
|     "VOICE_CALL": { | ||||
|       "INCOMING_CALL": "Incoming call", | ||||
|       "OUTGOING_CALL": "Outgoing call", | ||||
|       "CALL_IN_PROGRESS": "Call in progress", | ||||
|       "NO_ANSWER": "No answer", | ||||
|       "MISSED_CALL": "Missed call", | ||||
|       "CALL_ENDED": "Call ended", | ||||
|       "NOT_ANSWERED_YET": "Not answered yet", | ||||
|       "THEY_ANSWERED": "They answered", | ||||
|       "YOU_ANSWERED": "You answered" | ||||
|     }, | ||||
|     "HEADER": { | ||||
|       "RESOLVE_ACTION": "Resolve", | ||||
|       "REOPEN_ACTION": "Reopen", | ||||
|   | ||||
| @@ -51,6 +51,13 @@ | ||||
|             "LARGER": "Larger", | ||||
|             "EXTRA_LARGE": "Extra Large" | ||||
|           } | ||||
|         }, | ||||
|         "LANGUAGE": { | ||||
|           "TITLE": "Preferred Language", | ||||
|           "NOTE": "Choose the language you want to use.", | ||||
|           "UPDATE_SUCCESS": "Your Language settings have been updated successfully", | ||||
|           "UPDATE_ERROR": "There is an error while updating the language settings, please try again", | ||||
|           "USE_ACCOUNT_DEFAULT": "Use account default" | ||||
|         } | ||||
|       }, | ||||
|       "MESSAGE_SIGNATURE_SECTION": { | ||||
| @@ -330,6 +337,7 @@ | ||||
|     "REPORTS_LABEL": "Labels", | ||||
|     "REPORTS_INBOX": "Входяща кутия", | ||||
|     "REPORTS_TEAM": "Team", | ||||
|     "AGENT_ASSIGNMENT": "Agent Assignment", | ||||
|     "SET_AVAILABILITY_TITLE": "Set yourself as", | ||||
|     "SET_YOUR_AVAILABILITY": "Set your availability", | ||||
|     "SLA": "SLA", | ||||
| @@ -418,5 +426,255 @@ | ||||
|       "SWITCH_TO_REPLY": "Switch to Reply", | ||||
|       "TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown" | ||||
|     } | ||||
|   }, | ||||
|   "ASSIGNMENT_POLICY": { | ||||
|     "INDEX": { | ||||
|       "HEADER": { | ||||
|         "TITLE": "Agent assignment", | ||||
|         "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here" | ||||
|       }, | ||||
|       "ASSIGNMENT_POLICY": { | ||||
|         "TITLE": "Assignment policy", | ||||
|         "DESCRIPTION": "Manage how conversations get assigned in inboxes.", | ||||
|         "FEATURES": [ | ||||
|           "Assign by conversations evenly or by available capacity", | ||||
|           "Add fair distribution rules to avoid overloading any agent", | ||||
|           "Add inboxes to a policy - one policy per inbox" | ||||
|         ] | ||||
|       }, | ||||
|       "AGENT_CAPACITY_POLICY": { | ||||
|         "TITLE": "Agent capacity policy", | ||||
|         "DESCRIPTION": "Manage workload for agents.", | ||||
|         "FEATURES": [ | ||||
|           "Define maximum conversations per inbox", | ||||
|           "Create exceptions based on labels and time", | ||||
|           "Add agents to a policy - one policy per agent" | ||||
|         ] | ||||
|       } | ||||
|     }, | ||||
|     "AGENT_ASSIGNMENT_POLICY": { | ||||
|       "INDEX": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Assignment policy", | ||||
|           "CREATE_POLICY": "New policy" | ||||
|         }, | ||||
|         "CARD": { | ||||
|           "ORDER": "Order", | ||||
|           "PRIORITY": "Priority", | ||||
|           "ACTIVE": "Активен", | ||||
|           "INACTIVE": "Inactive", | ||||
|           "POPOVER": "Added inboxes", | ||||
|           "EDIT": "Редактирай" | ||||
|         }, | ||||
|         "NO_RECORDS_FOUND": "No assignment policies found" | ||||
|       }, | ||||
|       "CREATE": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Create assignment policy" | ||||
|         }, | ||||
|         "CREATE_BUTTON": "Create policy", | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Assignment policy created successfully", | ||||
|           "ERROR_MESSAGE": "Failed to create assignment policy" | ||||
|         } | ||||
|       }, | ||||
|       "EDIT": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Edit assignment policy" | ||||
|         }, | ||||
|         "EDIT_BUTTON": "Update policy", | ||||
|         "CONFIRM_ADD_INBOX_DIALOG": { | ||||
|           "TITLE": "Add inbox", | ||||
|           "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", | ||||
|           "CONFIRM_BUTTON_LABEL": "Continue", | ||||
|           "CANCEL_BUTTON_LABEL": "Отмени" | ||||
|         }, | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Assignment policy updated successfully", | ||||
|           "ERROR_MESSAGE": "Failed to update assignment policy" | ||||
|         }, | ||||
|         "INBOX_API": { | ||||
|           "ADD": { | ||||
|             "SUCCESS_MESSAGE": "Inbox added to policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to add inbox to policy" | ||||
|           }, | ||||
|           "REMOVE": { | ||||
|             "SUCCESS_MESSAGE": "Inbox removed from policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to remove inbox from policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "FORM": { | ||||
|         "NAME": { | ||||
|           "LABEL": "Policy name:", | ||||
|           "PLACEHOLDER": "Enter policy name" | ||||
|         }, | ||||
|         "DESCRIPTION": { | ||||
|           "LABEL": "Описание:", | ||||
|           "PLACEHOLDER": "Enter description" | ||||
|         }, | ||||
|         "STATUS": { | ||||
|           "LABEL": "Статус:", | ||||
|           "PLACEHOLDER": "Select status", | ||||
|           "ACTIVE": "Policy is active", | ||||
|           "INACTIVE": "Policy is inactive" | ||||
|         }, | ||||
|         "ASSIGNMENT_ORDER": { | ||||
|           "LABEL": "Assignment order", | ||||
|           "ROUND_ROBIN": { | ||||
|             "LABEL": "Round robin", | ||||
|             "DESCRIPTION": "Assign conversations evenly among agents." | ||||
|           }, | ||||
|           "BALANCED": { | ||||
|             "LABEL": "Balanced", | ||||
|             "DESCRIPTION": "Assign conversations based on available capacity." | ||||
|           } | ||||
|         }, | ||||
|         "ASSIGNMENT_PRIORITY": { | ||||
|           "LABEL": "Assignment priority", | ||||
|           "EARLIEST_CREATED": { | ||||
|             "LABEL": "Earliest created", | ||||
|             "DESCRIPTION": "The conversation that was created first gets assigned first." | ||||
|           }, | ||||
|           "LONGEST_WAITING": { | ||||
|             "LABEL": "Longest waiting", | ||||
|             "DESCRIPTION": "The conversation waiting the longest gets assigned first." | ||||
|           } | ||||
|         }, | ||||
|         "FAIR_DISTRIBUTION": { | ||||
|           "LABEL": "Fair distribution policy", | ||||
|           "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.", | ||||
|           "INPUT_MAX": "Assign max", | ||||
|           "DURATION": "Conversations per agent in every" | ||||
|         }, | ||||
|         "INBOXES": { | ||||
|           "LABEL": "Added inboxes", | ||||
|           "DESCRIPTION": "Add inboxes for which this policy will be applicable.", | ||||
|           "ADD_BUTTON": "Add inbox", | ||||
|           "DROPDOWN": { | ||||
|             "SEARCH_PLACEHOLDER": "Search and select inboxes to add", | ||||
|             "ADD_BUTTON": "Добавяне" | ||||
|           }, | ||||
|           "EMPTY_STATE": "No inboxes added to this policy, add an inbox to get started", | ||||
|           "API": { | ||||
|             "SUCCESS_MESSAGE": "Inbox successfully added to policy", | ||||
|             "ERROR_MESSAGE": "Failed to add inbox to policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "DELETE_POLICY": { | ||||
|         "SUCCESS_MESSAGE": "Assignment policy deleted successfully", | ||||
|         "ERROR_MESSAGE": "Failed to delete assignment policy" | ||||
|       } | ||||
|     }, | ||||
|     "AGENT_CAPACITY_POLICY": { | ||||
|       "INDEX": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Agent capacity", | ||||
|           "CREATE_POLICY": "New policy" | ||||
|         }, | ||||
|         "CARD": { | ||||
|           "POPOVER": "Added agents", | ||||
|           "EDIT": "Редактирай" | ||||
|         }, | ||||
|         "NO_RECORDS_FOUND": "No agent capacity policies found" | ||||
|       }, | ||||
|       "CREATE": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Create agent capacity policy" | ||||
|         }, | ||||
|         "CREATE_BUTTON": "Create policy", | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Agent capacity policy created successfully", | ||||
|           "ERROR_MESSAGE": "Failed to create agent capacity policy" | ||||
|         } | ||||
|       }, | ||||
|       "EDIT": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Edit agent capacity policy" | ||||
|         }, | ||||
|         "EDIT_BUTTON": "Update policy", | ||||
|         "CONFIRM_ADD_AGENT_DIALOG": { | ||||
|           "TITLE": "Add agent", | ||||
|           "DESCRIPTION": "{agentName} is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", | ||||
|           "CONFIRM_BUTTON_LABEL": "Continue", | ||||
|           "CANCEL_BUTTON_LABEL": "Отмени" | ||||
|         }, | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Agent capacity policy updated successfully", | ||||
|           "ERROR_MESSAGE": "Failed to update agent capacity policy" | ||||
|         }, | ||||
|         "AGENT_API": { | ||||
|           "ADD": { | ||||
|             "SUCCESS_MESSAGE": "Agent added to policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to add agent to policy" | ||||
|           }, | ||||
|           "REMOVE": { | ||||
|             "SUCCESS_MESSAGE": "Agent removed from policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to remove agent from policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "FORM": { | ||||
|         "NAME": { | ||||
|           "LABEL": "Policy name:", | ||||
|           "PLACEHOLDER": "Enter policy name" | ||||
|         }, | ||||
|         "DESCRIPTION": { | ||||
|           "LABEL": "Описание:", | ||||
|           "PLACEHOLDER": "Enter description" | ||||
|         }, | ||||
|         "INBOX_CAPACITY_LIMIT": { | ||||
|           "LABEL": "Inbox capacity limits", | ||||
|           "ADD_BUTTON": "Add inbox", | ||||
|           "FIELD": { | ||||
|             "SELECT_INBOX": "Select inbox", | ||||
|             "MAX_CONVERSATIONS": "Max conversations", | ||||
|             "SET_LIMIT": "Set limit" | ||||
|           }, | ||||
|           "EMPTY_STATE": "No inbox limit set" | ||||
|         }, | ||||
|         "EXCLUSION_RULES": { | ||||
|           "LABEL": "Exclusion rules", | ||||
|           "DESCRIPTION": "Conversations that satisfy the following conditions would not count towards agent capacity", | ||||
|           "TAGS": { | ||||
|             "LABEL": "Exclude conversations tagged with specific labels", | ||||
|             "ADD_TAG": "add tag", | ||||
|             "DROPDOWN": { | ||||
|               "SEARCH_PLACEHOLDER": "Search and select tags to add" | ||||
|             }, | ||||
|             "EMPTY_STATE": "No tags added to this policy." | ||||
|           }, | ||||
|           "DURATION": { | ||||
|             "LABEL": "Exclude conversations older than a specified duration", | ||||
|             "PLACEHOLDER": "Set time" | ||||
|           } | ||||
|         }, | ||||
|         "USERS": { | ||||
|           "LABEL": "Assigned agents", | ||||
|           "DESCRIPTION": "Add agents for which this policy will be applicable.", | ||||
|           "ADD_BUTTON": "Add agent", | ||||
|           "DROPDOWN": { | ||||
|             "SEARCH_PLACEHOLDER": "Search and select agents to add", | ||||
|             "ADD_BUTTON": "Добавяне" | ||||
|           }, | ||||
|           "EMPTY_STATE": "No agents added", | ||||
|           "API": { | ||||
|             "SUCCESS_MESSAGE": "Agent successfully added to policy", | ||||
|             "ERROR_MESSAGE": "Failed to add agent to policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "DELETE_POLICY": { | ||||
|         "SUCCESS_MESSAGE": "Agent capacity policy deleted successfully", | ||||
|         "ERROR_MESSAGE": "Failed to delete agent capacity policy" | ||||
|       } | ||||
|     }, | ||||
|     "DELETE_POLICY": { | ||||
|       "TITLE": "Delete policy", | ||||
|       "DESCRIPTION": "Are you sure you want to delete this policy? This action cannot be undone.", | ||||
|       "CONFIRM_BUTTON_LABEL": "Изтрий", | ||||
|       "CANCEL_BUTTON_LABEL": "Отмени" | ||||
|     } | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -71,6 +71,17 @@ | ||||
|       "SHOW_LABELS": "Mostra etiquetes", | ||||
|       "HIDE_LABELS": "Amaga etiquetes" | ||||
|     }, | ||||
|     "VOICE_CALL": { | ||||
|       "INCOMING_CALL": "Incoming call", | ||||
|       "OUTGOING_CALL": "Outgoing call", | ||||
|       "CALL_IN_PROGRESS": "Call in progress", | ||||
|       "NO_ANSWER": "No answer", | ||||
|       "MISSED_CALL": "Missed call", | ||||
|       "CALL_ENDED": "Call ended", | ||||
|       "NOT_ANSWERED_YET": "Not answered yet", | ||||
|       "THEY_ANSWERED": "They answered", | ||||
|       "YOU_ANSWERED": "You answered" | ||||
|     }, | ||||
|     "HEADER": { | ||||
|       "RESOLVE_ACTION": "Resoldre", | ||||
|       "REOPEN_ACTION": "Tornar a obrir", | ||||
|   | ||||
| @@ -51,6 +51,13 @@ | ||||
|             "LARGER": "Larger", | ||||
|             "EXTRA_LARGE": "Extra Large" | ||||
|           } | ||||
|         }, | ||||
|         "LANGUAGE": { | ||||
|           "TITLE": "Preferred Language", | ||||
|           "NOTE": "Choose the language you want to use.", | ||||
|           "UPDATE_SUCCESS": "Your Language settings have been updated successfully", | ||||
|           "UPDATE_ERROR": "There is an error while updating the language settings, please try again", | ||||
|           "USE_ACCOUNT_DEFAULT": "Use account default" | ||||
|         } | ||||
|       }, | ||||
|       "MESSAGE_SIGNATURE_SECTION": { | ||||
| @@ -330,6 +337,7 @@ | ||||
|     "REPORTS_LABEL": "Etiquetes", | ||||
|     "REPORTS_INBOX": "Safata d'entrada", | ||||
|     "REPORTS_TEAM": "Equip", | ||||
|     "AGENT_ASSIGNMENT": "Agent Assignment", | ||||
|     "SET_AVAILABILITY_TITLE": "Posa't com", | ||||
|     "SET_YOUR_AVAILABILITY": "Estableix la vostra disponibilitat", | ||||
|     "SLA": "SLA", | ||||
| @@ -418,5 +426,255 @@ | ||||
|       "SWITCH_TO_REPLY": "Canvia a Respon", | ||||
|       "TOGGLE_SNOOZE_DROPDOWN": "Commuta el menú desplegable de posposar" | ||||
|     } | ||||
|   }, | ||||
|   "ASSIGNMENT_POLICY": { | ||||
|     "INDEX": { | ||||
|       "HEADER": { | ||||
|         "TITLE": "Agent assignment", | ||||
|         "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here" | ||||
|       }, | ||||
|       "ASSIGNMENT_POLICY": { | ||||
|         "TITLE": "Assignment policy", | ||||
|         "DESCRIPTION": "Manage how conversations get assigned in inboxes.", | ||||
|         "FEATURES": [ | ||||
|           "Assign by conversations evenly or by available capacity", | ||||
|           "Add fair distribution rules to avoid overloading any agent", | ||||
|           "Add inboxes to a policy - one policy per inbox" | ||||
|         ] | ||||
|       }, | ||||
|       "AGENT_CAPACITY_POLICY": { | ||||
|         "TITLE": "Agent capacity policy", | ||||
|         "DESCRIPTION": "Manage workload for agents.", | ||||
|         "FEATURES": [ | ||||
|           "Define maximum conversations per inbox", | ||||
|           "Create exceptions based on labels and time", | ||||
|           "Add agents to a policy - one policy per agent" | ||||
|         ] | ||||
|       } | ||||
|     }, | ||||
|     "AGENT_ASSIGNMENT_POLICY": { | ||||
|       "INDEX": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Assignment policy", | ||||
|           "CREATE_POLICY": "New policy" | ||||
|         }, | ||||
|         "CARD": { | ||||
|           "ORDER": "Order", | ||||
|           "PRIORITY": "Prioritat", | ||||
|           "ACTIVE": "Actiu", | ||||
|           "INACTIVE": "Inactive", | ||||
|           "POPOVER": "Added inboxes", | ||||
|           "EDIT": "Edita" | ||||
|         }, | ||||
|         "NO_RECORDS_FOUND": "No assignment policies found" | ||||
|       }, | ||||
|       "CREATE": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Create assignment policy" | ||||
|         }, | ||||
|         "CREATE_BUTTON": "Create policy", | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Assignment policy created successfully", | ||||
|           "ERROR_MESSAGE": "Failed to create assignment policy" | ||||
|         } | ||||
|       }, | ||||
|       "EDIT": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Edit assignment policy" | ||||
|         }, | ||||
|         "EDIT_BUTTON": "Update policy", | ||||
|         "CONFIRM_ADD_INBOX_DIALOG": { | ||||
|           "TITLE": "Add inbox", | ||||
|           "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", | ||||
|           "CONFIRM_BUTTON_LABEL": "Continue", | ||||
|           "CANCEL_BUTTON_LABEL": "Cancel·la" | ||||
|         }, | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Assignment policy updated successfully", | ||||
|           "ERROR_MESSAGE": "Failed to update assignment policy" | ||||
|         }, | ||||
|         "INBOX_API": { | ||||
|           "ADD": { | ||||
|             "SUCCESS_MESSAGE": "Inbox added to policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to add inbox to policy" | ||||
|           }, | ||||
|           "REMOVE": { | ||||
|             "SUCCESS_MESSAGE": "Inbox removed from policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to remove inbox from policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "FORM": { | ||||
|         "NAME": { | ||||
|           "LABEL": "Policy name:", | ||||
|           "PLACEHOLDER": "Enter policy name" | ||||
|         }, | ||||
|         "DESCRIPTION": { | ||||
|           "LABEL": "Descripció:", | ||||
|           "PLACEHOLDER": "Introdueix la descripció" | ||||
|         }, | ||||
|         "STATUS": { | ||||
|           "LABEL": "Estat:", | ||||
|           "PLACEHOLDER": "Selecciona l'estat", | ||||
|           "ACTIVE": "Policy is active", | ||||
|           "INACTIVE": "Policy is inactive" | ||||
|         }, | ||||
|         "ASSIGNMENT_ORDER": { | ||||
|           "LABEL": "Assignment order", | ||||
|           "ROUND_ROBIN": { | ||||
|             "LABEL": "Round robin", | ||||
|             "DESCRIPTION": "Assign conversations evenly among agents." | ||||
|           }, | ||||
|           "BALANCED": { | ||||
|             "LABEL": "Balanced", | ||||
|             "DESCRIPTION": "Assign conversations based on available capacity." | ||||
|           } | ||||
|         }, | ||||
|         "ASSIGNMENT_PRIORITY": { | ||||
|           "LABEL": "Assignment priority", | ||||
|           "EARLIEST_CREATED": { | ||||
|             "LABEL": "Earliest created", | ||||
|             "DESCRIPTION": "The conversation that was created first gets assigned first." | ||||
|           }, | ||||
|           "LONGEST_WAITING": { | ||||
|             "LABEL": "Longest waiting", | ||||
|             "DESCRIPTION": "The conversation waiting the longest gets assigned first." | ||||
|           } | ||||
|         }, | ||||
|         "FAIR_DISTRIBUTION": { | ||||
|           "LABEL": "Fair distribution policy", | ||||
|           "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.", | ||||
|           "INPUT_MAX": "Assign max", | ||||
|           "DURATION": "Conversations per agent in every" | ||||
|         }, | ||||
|         "INBOXES": { | ||||
|           "LABEL": "Added inboxes", | ||||
|           "DESCRIPTION": "Add inboxes for which this policy will be applicable.", | ||||
|           "ADD_BUTTON": "Add inbox", | ||||
|           "DROPDOWN": { | ||||
|             "SEARCH_PLACEHOLDER": "Search and select inboxes to add", | ||||
|             "ADD_BUTTON": "Afegir" | ||||
|           }, | ||||
|           "EMPTY_STATE": "No inboxes added to this policy, add an inbox to get started", | ||||
|           "API": { | ||||
|             "SUCCESS_MESSAGE": "Inbox successfully added to policy", | ||||
|             "ERROR_MESSAGE": "Failed to add inbox to policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "DELETE_POLICY": { | ||||
|         "SUCCESS_MESSAGE": "Assignment policy deleted successfully", | ||||
|         "ERROR_MESSAGE": "Failed to delete assignment policy" | ||||
|       } | ||||
|     }, | ||||
|     "AGENT_CAPACITY_POLICY": { | ||||
|       "INDEX": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Agent capacity", | ||||
|           "CREATE_POLICY": "New policy" | ||||
|         }, | ||||
|         "CARD": { | ||||
|           "POPOVER": "Added agents", | ||||
|           "EDIT": "Edita" | ||||
|         }, | ||||
|         "NO_RECORDS_FOUND": "No agent capacity policies found" | ||||
|       }, | ||||
|       "CREATE": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Create agent capacity policy" | ||||
|         }, | ||||
|         "CREATE_BUTTON": "Create policy", | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Agent capacity policy created successfully", | ||||
|           "ERROR_MESSAGE": "Failed to create agent capacity policy" | ||||
|         } | ||||
|       }, | ||||
|       "EDIT": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Edit agent capacity policy" | ||||
|         }, | ||||
|         "EDIT_BUTTON": "Update policy", | ||||
|         "CONFIRM_ADD_AGENT_DIALOG": { | ||||
|           "TITLE": "Add agent", | ||||
|           "DESCRIPTION": "{agentName} is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", | ||||
|           "CONFIRM_BUTTON_LABEL": "Continue", | ||||
|           "CANCEL_BUTTON_LABEL": "Cancel·la" | ||||
|         }, | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Agent capacity policy updated successfully", | ||||
|           "ERROR_MESSAGE": "Failed to update agent capacity policy" | ||||
|         }, | ||||
|         "AGENT_API": { | ||||
|           "ADD": { | ||||
|             "SUCCESS_MESSAGE": "Agent added to policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to add agent to policy" | ||||
|           }, | ||||
|           "REMOVE": { | ||||
|             "SUCCESS_MESSAGE": "Agent removed from policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to remove agent from policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "FORM": { | ||||
|         "NAME": { | ||||
|           "LABEL": "Policy name:", | ||||
|           "PLACEHOLDER": "Enter policy name" | ||||
|         }, | ||||
|         "DESCRIPTION": { | ||||
|           "LABEL": "Descripció:", | ||||
|           "PLACEHOLDER": "Introdueix la descripció" | ||||
|         }, | ||||
|         "INBOX_CAPACITY_LIMIT": { | ||||
|           "LABEL": "Inbox capacity limits", | ||||
|           "ADD_BUTTON": "Add inbox", | ||||
|           "FIELD": { | ||||
|             "SELECT_INBOX": "Select inbox", | ||||
|             "MAX_CONVERSATIONS": "Max conversations", | ||||
|             "SET_LIMIT": "Set limit" | ||||
|           }, | ||||
|           "EMPTY_STATE": "No inbox limit set" | ||||
|         }, | ||||
|         "EXCLUSION_RULES": { | ||||
|           "LABEL": "Exclusion rules", | ||||
|           "DESCRIPTION": "Conversations that satisfy the following conditions would not count towards agent capacity", | ||||
|           "TAGS": { | ||||
|             "LABEL": "Exclude conversations tagged with specific labels", | ||||
|             "ADD_TAG": "add tag", | ||||
|             "DROPDOWN": { | ||||
|               "SEARCH_PLACEHOLDER": "Search and select tags to add" | ||||
|             }, | ||||
|             "EMPTY_STATE": "No tags added to this policy." | ||||
|           }, | ||||
|           "DURATION": { | ||||
|             "LABEL": "Exclude conversations older than a specified duration", | ||||
|             "PLACEHOLDER": "Set time" | ||||
|           } | ||||
|         }, | ||||
|         "USERS": { | ||||
|           "LABEL": "Assigned agents", | ||||
|           "DESCRIPTION": "Add agents for which this policy will be applicable.", | ||||
|           "ADD_BUTTON": "Add agent", | ||||
|           "DROPDOWN": { | ||||
|             "SEARCH_PLACEHOLDER": "Search and select agents to add", | ||||
|             "ADD_BUTTON": "Afegir" | ||||
|           }, | ||||
|           "EMPTY_STATE": "No agents added", | ||||
|           "API": { | ||||
|             "SUCCESS_MESSAGE": "Agent successfully added to policy", | ||||
|             "ERROR_MESSAGE": "Failed to add agent to policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "DELETE_POLICY": { | ||||
|         "SUCCESS_MESSAGE": "Agent capacity policy deleted successfully", | ||||
|         "ERROR_MESSAGE": "Failed to delete agent capacity policy" | ||||
|       } | ||||
|     }, | ||||
|     "DELETE_POLICY": { | ||||
|       "TITLE": "Delete policy", | ||||
|       "DESCRIPTION": "Are you sure you want to delete this policy? This action cannot be undone.", | ||||
|       "CONFIRM_BUTTON_LABEL": "Esborrar", | ||||
|       "CANCEL_BUTTON_LABEL": "Cancel·la" | ||||
|     } | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -71,6 +71,17 @@ | ||||
|       "SHOW_LABELS": "Show labels", | ||||
|       "HIDE_LABELS": "Hide labels" | ||||
|     }, | ||||
|     "VOICE_CALL": { | ||||
|       "INCOMING_CALL": "Incoming call", | ||||
|       "OUTGOING_CALL": "Outgoing call", | ||||
|       "CALL_IN_PROGRESS": "Call in progress", | ||||
|       "NO_ANSWER": "No answer", | ||||
|       "MISSED_CALL": "Missed call", | ||||
|       "CALL_ENDED": "Call ended", | ||||
|       "NOT_ANSWERED_YET": "Not answered yet", | ||||
|       "THEY_ANSWERED": "They answered", | ||||
|       "YOU_ANSWERED": "You answered" | ||||
|     }, | ||||
|     "HEADER": { | ||||
|       "RESOLVE_ACTION": "Vyřešit", | ||||
|       "REOPEN_ACTION": "Znovu otevřít", | ||||
|   | ||||
| @@ -51,6 +51,13 @@ | ||||
|             "LARGER": "Larger", | ||||
|             "EXTRA_LARGE": "Extra Large" | ||||
|           } | ||||
|         }, | ||||
|         "LANGUAGE": { | ||||
|           "TITLE": "Preferred Language", | ||||
|           "NOTE": "Choose the language you want to use.", | ||||
|           "UPDATE_SUCCESS": "Your Language settings have been updated successfully", | ||||
|           "UPDATE_ERROR": "There is an error while updating the language settings, please try again", | ||||
|           "USE_ACCOUNT_DEFAULT": "Use account default" | ||||
|         } | ||||
|       }, | ||||
|       "MESSAGE_SIGNATURE_SECTION": { | ||||
| @@ -330,6 +337,7 @@ | ||||
|     "REPORTS_LABEL": "Štítky", | ||||
|     "REPORTS_INBOX": "Inbox", | ||||
|     "REPORTS_TEAM": "Team", | ||||
|     "AGENT_ASSIGNMENT": "Agent Assignment", | ||||
|     "SET_AVAILABILITY_TITLE": "Set yourself as", | ||||
|     "SET_YOUR_AVAILABILITY": "Nastavte svou dostupnost", | ||||
|     "SLA": "SLA", | ||||
| @@ -418,5 +426,255 @@ | ||||
|       "SWITCH_TO_REPLY": "Switch to Reply", | ||||
|       "TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown" | ||||
|     } | ||||
|   }, | ||||
|   "ASSIGNMENT_POLICY": { | ||||
|     "INDEX": { | ||||
|       "HEADER": { | ||||
|         "TITLE": "Agent assignment", | ||||
|         "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here" | ||||
|       }, | ||||
|       "ASSIGNMENT_POLICY": { | ||||
|         "TITLE": "Assignment policy", | ||||
|         "DESCRIPTION": "Manage how conversations get assigned in inboxes.", | ||||
|         "FEATURES": [ | ||||
|           "Assign by conversations evenly or by available capacity", | ||||
|           "Add fair distribution rules to avoid overloading any agent", | ||||
|           "Add inboxes to a policy - one policy per inbox" | ||||
|         ] | ||||
|       }, | ||||
|       "AGENT_CAPACITY_POLICY": { | ||||
|         "TITLE": "Agent capacity policy", | ||||
|         "DESCRIPTION": "Manage workload for agents.", | ||||
|         "FEATURES": [ | ||||
|           "Define maximum conversations per inbox", | ||||
|           "Create exceptions based on labels and time", | ||||
|           "Add agents to a policy - one policy per agent" | ||||
|         ] | ||||
|       } | ||||
|     }, | ||||
|     "AGENT_ASSIGNMENT_POLICY": { | ||||
|       "INDEX": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Assignment policy", | ||||
|           "CREATE_POLICY": "New policy" | ||||
|         }, | ||||
|         "CARD": { | ||||
|           "ORDER": "Order", | ||||
|           "PRIORITY": "Priority", | ||||
|           "ACTIVE": "Active", | ||||
|           "INACTIVE": "Inactive", | ||||
|           "POPOVER": "Added inboxes", | ||||
|           "EDIT": "Upravit" | ||||
|         }, | ||||
|         "NO_RECORDS_FOUND": "No assignment policies found" | ||||
|       }, | ||||
|       "CREATE": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Create assignment policy" | ||||
|         }, | ||||
|         "CREATE_BUTTON": "Create policy", | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Assignment policy created successfully", | ||||
|           "ERROR_MESSAGE": "Failed to create assignment policy" | ||||
|         } | ||||
|       }, | ||||
|       "EDIT": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Edit assignment policy" | ||||
|         }, | ||||
|         "EDIT_BUTTON": "Update policy", | ||||
|         "CONFIRM_ADD_INBOX_DIALOG": { | ||||
|           "TITLE": "Add inbox", | ||||
|           "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", | ||||
|           "CONFIRM_BUTTON_LABEL": "Continue", | ||||
|           "CANCEL_BUTTON_LABEL": "Zrušit" | ||||
|         }, | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Assignment policy updated successfully", | ||||
|           "ERROR_MESSAGE": "Failed to update assignment policy" | ||||
|         }, | ||||
|         "INBOX_API": { | ||||
|           "ADD": { | ||||
|             "SUCCESS_MESSAGE": "Inbox added to policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to add inbox to policy" | ||||
|           }, | ||||
|           "REMOVE": { | ||||
|             "SUCCESS_MESSAGE": "Inbox removed from policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to remove inbox from policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "FORM": { | ||||
|         "NAME": { | ||||
|           "LABEL": "Policy name:", | ||||
|           "PLACEHOLDER": "Enter policy name" | ||||
|         }, | ||||
|         "DESCRIPTION": { | ||||
|           "LABEL": "Description:", | ||||
|           "PLACEHOLDER": "Enter description" | ||||
|         }, | ||||
|         "STATUS": { | ||||
|           "LABEL": "Stav:", | ||||
|           "PLACEHOLDER": "Select status", | ||||
|           "ACTIVE": "Policy is active", | ||||
|           "INACTIVE": "Policy is inactive" | ||||
|         }, | ||||
|         "ASSIGNMENT_ORDER": { | ||||
|           "LABEL": "Assignment order", | ||||
|           "ROUND_ROBIN": { | ||||
|             "LABEL": "Round robin", | ||||
|             "DESCRIPTION": "Assign conversations evenly among agents." | ||||
|           }, | ||||
|           "BALANCED": { | ||||
|             "LABEL": "Balanced", | ||||
|             "DESCRIPTION": "Assign conversations based on available capacity." | ||||
|           } | ||||
|         }, | ||||
|         "ASSIGNMENT_PRIORITY": { | ||||
|           "LABEL": "Assignment priority", | ||||
|           "EARLIEST_CREATED": { | ||||
|             "LABEL": "Earliest created", | ||||
|             "DESCRIPTION": "The conversation that was created first gets assigned first." | ||||
|           }, | ||||
|           "LONGEST_WAITING": { | ||||
|             "LABEL": "Longest waiting", | ||||
|             "DESCRIPTION": "The conversation waiting the longest gets assigned first." | ||||
|           } | ||||
|         }, | ||||
|         "FAIR_DISTRIBUTION": { | ||||
|           "LABEL": "Fair distribution policy", | ||||
|           "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.", | ||||
|           "INPUT_MAX": "Assign max", | ||||
|           "DURATION": "Conversations per agent in every" | ||||
|         }, | ||||
|         "INBOXES": { | ||||
|           "LABEL": "Added inboxes", | ||||
|           "DESCRIPTION": "Add inboxes for which this policy will be applicable.", | ||||
|           "ADD_BUTTON": "Add inbox", | ||||
|           "DROPDOWN": { | ||||
|             "SEARCH_PLACEHOLDER": "Search and select inboxes to add", | ||||
|             "ADD_BUTTON": "Přidat" | ||||
|           }, | ||||
|           "EMPTY_STATE": "No inboxes added to this policy, add an inbox to get started", | ||||
|           "API": { | ||||
|             "SUCCESS_MESSAGE": "Inbox successfully added to policy", | ||||
|             "ERROR_MESSAGE": "Failed to add inbox to policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "DELETE_POLICY": { | ||||
|         "SUCCESS_MESSAGE": "Assignment policy deleted successfully", | ||||
|         "ERROR_MESSAGE": "Failed to delete assignment policy" | ||||
|       } | ||||
|     }, | ||||
|     "AGENT_CAPACITY_POLICY": { | ||||
|       "INDEX": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Agent capacity", | ||||
|           "CREATE_POLICY": "New policy" | ||||
|         }, | ||||
|         "CARD": { | ||||
|           "POPOVER": "Added agents", | ||||
|           "EDIT": "Upravit" | ||||
|         }, | ||||
|         "NO_RECORDS_FOUND": "No agent capacity policies found" | ||||
|       }, | ||||
|       "CREATE": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Create agent capacity policy" | ||||
|         }, | ||||
|         "CREATE_BUTTON": "Create policy", | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Agent capacity policy created successfully", | ||||
|           "ERROR_MESSAGE": "Failed to create agent capacity policy" | ||||
|         } | ||||
|       }, | ||||
|       "EDIT": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Edit agent capacity policy" | ||||
|         }, | ||||
|         "EDIT_BUTTON": "Update policy", | ||||
|         "CONFIRM_ADD_AGENT_DIALOG": { | ||||
|           "TITLE": "Add agent", | ||||
|           "DESCRIPTION": "{agentName} is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", | ||||
|           "CONFIRM_BUTTON_LABEL": "Continue", | ||||
|           "CANCEL_BUTTON_LABEL": "Zrušit" | ||||
|         }, | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Agent capacity policy updated successfully", | ||||
|           "ERROR_MESSAGE": "Failed to update agent capacity policy" | ||||
|         }, | ||||
|         "AGENT_API": { | ||||
|           "ADD": { | ||||
|             "SUCCESS_MESSAGE": "Agent added to policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to add agent to policy" | ||||
|           }, | ||||
|           "REMOVE": { | ||||
|             "SUCCESS_MESSAGE": "Agent removed from policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to remove agent from policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "FORM": { | ||||
|         "NAME": { | ||||
|           "LABEL": "Policy name:", | ||||
|           "PLACEHOLDER": "Enter policy name" | ||||
|         }, | ||||
|         "DESCRIPTION": { | ||||
|           "LABEL": "Description:", | ||||
|           "PLACEHOLDER": "Enter description" | ||||
|         }, | ||||
|         "INBOX_CAPACITY_LIMIT": { | ||||
|           "LABEL": "Inbox capacity limits", | ||||
|           "ADD_BUTTON": "Add inbox", | ||||
|           "FIELD": { | ||||
|             "SELECT_INBOX": "Select inbox", | ||||
|             "MAX_CONVERSATIONS": "Max conversations", | ||||
|             "SET_LIMIT": "Set limit" | ||||
|           }, | ||||
|           "EMPTY_STATE": "No inbox limit set" | ||||
|         }, | ||||
|         "EXCLUSION_RULES": { | ||||
|           "LABEL": "Exclusion rules", | ||||
|           "DESCRIPTION": "Conversations that satisfy the following conditions would not count towards agent capacity", | ||||
|           "TAGS": { | ||||
|             "LABEL": "Exclude conversations tagged with specific labels", | ||||
|             "ADD_TAG": "add tag", | ||||
|             "DROPDOWN": { | ||||
|               "SEARCH_PLACEHOLDER": "Search and select tags to add" | ||||
|             }, | ||||
|             "EMPTY_STATE": "No tags added to this policy." | ||||
|           }, | ||||
|           "DURATION": { | ||||
|             "LABEL": "Exclude conversations older than a specified duration", | ||||
|             "PLACEHOLDER": "Set time" | ||||
|           } | ||||
|         }, | ||||
|         "USERS": { | ||||
|           "LABEL": "Assigned agents", | ||||
|           "DESCRIPTION": "Add agents for which this policy will be applicable.", | ||||
|           "ADD_BUTTON": "Add agent", | ||||
|           "DROPDOWN": { | ||||
|             "SEARCH_PLACEHOLDER": "Search and select agents to add", | ||||
|             "ADD_BUTTON": "Přidat" | ||||
|           }, | ||||
|           "EMPTY_STATE": "No agents added", | ||||
|           "API": { | ||||
|             "SUCCESS_MESSAGE": "Agent successfully added to policy", | ||||
|             "ERROR_MESSAGE": "Failed to add agent to policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "DELETE_POLICY": { | ||||
|         "SUCCESS_MESSAGE": "Agent capacity policy deleted successfully", | ||||
|         "ERROR_MESSAGE": "Failed to delete agent capacity policy" | ||||
|       } | ||||
|     }, | ||||
|     "DELETE_POLICY": { | ||||
|       "TITLE": "Delete policy", | ||||
|       "DESCRIPTION": "Are you sure you want to delete this policy? This action cannot be undone.", | ||||
|       "CONFIRM_BUTTON_LABEL": "Vymazat", | ||||
|       "CANCEL_BUTTON_LABEL": "Zrušit" | ||||
|     } | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -71,6 +71,17 @@ | ||||
|       "SHOW_LABELS": "Vis etiketter", | ||||
|       "HIDE_LABELS": "Skjul etiketter" | ||||
|     }, | ||||
|     "VOICE_CALL": { | ||||
|       "INCOMING_CALL": "Incoming call", | ||||
|       "OUTGOING_CALL": "Outgoing call", | ||||
|       "CALL_IN_PROGRESS": "Call in progress", | ||||
|       "NO_ANSWER": "No answer", | ||||
|       "MISSED_CALL": "Missed call", | ||||
|       "CALL_ENDED": "Call ended", | ||||
|       "NOT_ANSWERED_YET": "Not answered yet", | ||||
|       "THEY_ANSWERED": "They answered", | ||||
|       "YOU_ANSWERED": "You answered" | ||||
|     }, | ||||
|     "HEADER": { | ||||
|       "RESOLVE_ACTION": "Løs", | ||||
|       "REOPEN_ACTION": "Genåben", | ||||
|   | ||||
| @@ -51,6 +51,13 @@ | ||||
|             "LARGER": "Larger", | ||||
|             "EXTRA_LARGE": "Extra Large" | ||||
|           } | ||||
|         }, | ||||
|         "LANGUAGE": { | ||||
|           "TITLE": "Preferred Language", | ||||
|           "NOTE": "Choose the language you want to use.", | ||||
|           "UPDATE_SUCCESS": "Your Language settings have been updated successfully", | ||||
|           "UPDATE_ERROR": "There is an error while updating the language settings, please try again", | ||||
|           "USE_ACCOUNT_DEFAULT": "Use account default" | ||||
|         } | ||||
|       }, | ||||
|       "MESSAGE_SIGNATURE_SECTION": { | ||||
| @@ -330,6 +337,7 @@ | ||||
|     "REPORTS_LABEL": "Etiketter", | ||||
|     "REPORTS_INBOX": "Indbakke", | ||||
|     "REPORTS_TEAM": "Team", | ||||
|     "AGENT_ASSIGNMENT": "Agent Assignment", | ||||
|     "SET_AVAILABILITY_TITLE": "Sæt dig selv som", | ||||
|     "SET_YOUR_AVAILABILITY": "Indstil din tilgængelighed", | ||||
|     "SLA": "SLA", | ||||
| @@ -418,5 +426,255 @@ | ||||
|       "SWITCH_TO_REPLY": "Skift til svar", | ||||
|       "TOGGLE_SNOOZE_DROPDOWN": "Skift snooze dropdown" | ||||
|     } | ||||
|   }, | ||||
|   "ASSIGNMENT_POLICY": { | ||||
|     "INDEX": { | ||||
|       "HEADER": { | ||||
|         "TITLE": "Agent assignment", | ||||
|         "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here" | ||||
|       }, | ||||
|       "ASSIGNMENT_POLICY": { | ||||
|         "TITLE": "Assignment policy", | ||||
|         "DESCRIPTION": "Manage how conversations get assigned in inboxes.", | ||||
|         "FEATURES": [ | ||||
|           "Assign by conversations evenly or by available capacity", | ||||
|           "Add fair distribution rules to avoid overloading any agent", | ||||
|           "Add inboxes to a policy - one policy per inbox" | ||||
|         ] | ||||
|       }, | ||||
|       "AGENT_CAPACITY_POLICY": { | ||||
|         "TITLE": "Agent capacity policy", | ||||
|         "DESCRIPTION": "Manage workload for agents.", | ||||
|         "FEATURES": [ | ||||
|           "Define maximum conversations per inbox", | ||||
|           "Create exceptions based on labels and time", | ||||
|           "Add agents to a policy - one policy per agent" | ||||
|         ] | ||||
|       } | ||||
|     }, | ||||
|     "AGENT_ASSIGNMENT_POLICY": { | ||||
|       "INDEX": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Assignment policy", | ||||
|           "CREATE_POLICY": "New policy" | ||||
|         }, | ||||
|         "CARD": { | ||||
|           "ORDER": "Order", | ||||
|           "PRIORITY": "Priority", | ||||
|           "ACTIVE": "Aktiv", | ||||
|           "INACTIVE": "Inactive", | ||||
|           "POPOVER": "Added inboxes", | ||||
|           "EDIT": "Rediger" | ||||
|         }, | ||||
|         "NO_RECORDS_FOUND": "No assignment policies found" | ||||
|       }, | ||||
|       "CREATE": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Create assignment policy" | ||||
|         }, | ||||
|         "CREATE_BUTTON": "Create policy", | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Assignment policy created successfully", | ||||
|           "ERROR_MESSAGE": "Failed to create assignment policy" | ||||
|         } | ||||
|       }, | ||||
|       "EDIT": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Edit assignment policy" | ||||
|         }, | ||||
|         "EDIT_BUTTON": "Update policy", | ||||
|         "CONFIRM_ADD_INBOX_DIALOG": { | ||||
|           "TITLE": "Add inbox", | ||||
|           "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", | ||||
|           "CONFIRM_BUTTON_LABEL": "Continue", | ||||
|           "CANCEL_BUTTON_LABEL": "Annuller" | ||||
|         }, | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Assignment policy updated successfully", | ||||
|           "ERROR_MESSAGE": "Failed to update assignment policy" | ||||
|         }, | ||||
|         "INBOX_API": { | ||||
|           "ADD": { | ||||
|             "SUCCESS_MESSAGE": "Inbox added to policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to add inbox to policy" | ||||
|           }, | ||||
|           "REMOVE": { | ||||
|             "SUCCESS_MESSAGE": "Inbox removed from policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to remove inbox from policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "FORM": { | ||||
|         "NAME": { | ||||
|           "LABEL": "Policy name:", | ||||
|           "PLACEHOLDER": "Enter policy name" | ||||
|         }, | ||||
|         "DESCRIPTION": { | ||||
|           "LABEL": "Beskrivelse:", | ||||
|           "PLACEHOLDER": "Enter description" | ||||
|         }, | ||||
|         "STATUS": { | ||||
|           "LABEL": "Status:", | ||||
|           "PLACEHOLDER": "Select status", | ||||
|           "ACTIVE": "Policy is active", | ||||
|           "INACTIVE": "Policy is inactive" | ||||
|         }, | ||||
|         "ASSIGNMENT_ORDER": { | ||||
|           "LABEL": "Assignment order", | ||||
|           "ROUND_ROBIN": { | ||||
|             "LABEL": "Round robin", | ||||
|             "DESCRIPTION": "Assign conversations evenly among agents." | ||||
|           }, | ||||
|           "BALANCED": { | ||||
|             "LABEL": "Balanced", | ||||
|             "DESCRIPTION": "Assign conversations based on available capacity." | ||||
|           } | ||||
|         }, | ||||
|         "ASSIGNMENT_PRIORITY": { | ||||
|           "LABEL": "Assignment priority", | ||||
|           "EARLIEST_CREATED": { | ||||
|             "LABEL": "Earliest created", | ||||
|             "DESCRIPTION": "The conversation that was created first gets assigned first." | ||||
|           }, | ||||
|           "LONGEST_WAITING": { | ||||
|             "LABEL": "Longest waiting", | ||||
|             "DESCRIPTION": "The conversation waiting the longest gets assigned first." | ||||
|           } | ||||
|         }, | ||||
|         "FAIR_DISTRIBUTION": { | ||||
|           "LABEL": "Fair distribution policy", | ||||
|           "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.", | ||||
|           "INPUT_MAX": "Assign max", | ||||
|           "DURATION": "Conversations per agent in every" | ||||
|         }, | ||||
|         "INBOXES": { | ||||
|           "LABEL": "Added inboxes", | ||||
|           "DESCRIPTION": "Add inboxes for which this policy will be applicable.", | ||||
|           "ADD_BUTTON": "Add inbox", | ||||
|           "DROPDOWN": { | ||||
|             "SEARCH_PLACEHOLDER": "Search and select inboxes to add", | ||||
|             "ADD_BUTTON": "Tilføj" | ||||
|           }, | ||||
|           "EMPTY_STATE": "No inboxes added to this policy, add an inbox to get started", | ||||
|           "API": { | ||||
|             "SUCCESS_MESSAGE": "Inbox successfully added to policy", | ||||
|             "ERROR_MESSAGE": "Failed to add inbox to policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "DELETE_POLICY": { | ||||
|         "SUCCESS_MESSAGE": "Assignment policy deleted successfully", | ||||
|         "ERROR_MESSAGE": "Failed to delete assignment policy" | ||||
|       } | ||||
|     }, | ||||
|     "AGENT_CAPACITY_POLICY": { | ||||
|       "INDEX": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Agent capacity", | ||||
|           "CREATE_POLICY": "New policy" | ||||
|         }, | ||||
|         "CARD": { | ||||
|           "POPOVER": "Added agents", | ||||
|           "EDIT": "Rediger" | ||||
|         }, | ||||
|         "NO_RECORDS_FOUND": "No agent capacity policies found" | ||||
|       }, | ||||
|       "CREATE": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Create agent capacity policy" | ||||
|         }, | ||||
|         "CREATE_BUTTON": "Create policy", | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Agent capacity policy created successfully", | ||||
|           "ERROR_MESSAGE": "Failed to create agent capacity policy" | ||||
|         } | ||||
|       }, | ||||
|       "EDIT": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Edit agent capacity policy" | ||||
|         }, | ||||
|         "EDIT_BUTTON": "Update policy", | ||||
|         "CONFIRM_ADD_AGENT_DIALOG": { | ||||
|           "TITLE": "Add agent", | ||||
|           "DESCRIPTION": "{agentName} is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", | ||||
|           "CONFIRM_BUTTON_LABEL": "Continue", | ||||
|           "CANCEL_BUTTON_LABEL": "Annuller" | ||||
|         }, | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Agent capacity policy updated successfully", | ||||
|           "ERROR_MESSAGE": "Failed to update agent capacity policy" | ||||
|         }, | ||||
|         "AGENT_API": { | ||||
|           "ADD": { | ||||
|             "SUCCESS_MESSAGE": "Agent added to policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to add agent to policy" | ||||
|           }, | ||||
|           "REMOVE": { | ||||
|             "SUCCESS_MESSAGE": "Agent removed from policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to remove agent from policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "FORM": { | ||||
|         "NAME": { | ||||
|           "LABEL": "Policy name:", | ||||
|           "PLACEHOLDER": "Enter policy name" | ||||
|         }, | ||||
|         "DESCRIPTION": { | ||||
|           "LABEL": "Beskrivelse:", | ||||
|           "PLACEHOLDER": "Enter description" | ||||
|         }, | ||||
|         "INBOX_CAPACITY_LIMIT": { | ||||
|           "LABEL": "Inbox capacity limits", | ||||
|           "ADD_BUTTON": "Add inbox", | ||||
|           "FIELD": { | ||||
|             "SELECT_INBOX": "Select inbox", | ||||
|             "MAX_CONVERSATIONS": "Max conversations", | ||||
|             "SET_LIMIT": "Set limit" | ||||
|           }, | ||||
|           "EMPTY_STATE": "No inbox limit set" | ||||
|         }, | ||||
|         "EXCLUSION_RULES": { | ||||
|           "LABEL": "Exclusion rules", | ||||
|           "DESCRIPTION": "Conversations that satisfy the following conditions would not count towards agent capacity", | ||||
|           "TAGS": { | ||||
|             "LABEL": "Exclude conversations tagged with specific labels", | ||||
|             "ADD_TAG": "add tag", | ||||
|             "DROPDOWN": { | ||||
|               "SEARCH_PLACEHOLDER": "Search and select tags to add" | ||||
|             }, | ||||
|             "EMPTY_STATE": "No tags added to this policy." | ||||
|           }, | ||||
|           "DURATION": { | ||||
|             "LABEL": "Exclude conversations older than a specified duration", | ||||
|             "PLACEHOLDER": "Set time" | ||||
|           } | ||||
|         }, | ||||
|         "USERS": { | ||||
|           "LABEL": "Assigned agents", | ||||
|           "DESCRIPTION": "Add agents for which this policy will be applicable.", | ||||
|           "ADD_BUTTON": "Add agent", | ||||
|           "DROPDOWN": { | ||||
|             "SEARCH_PLACEHOLDER": "Search and select agents to add", | ||||
|             "ADD_BUTTON": "Tilføj" | ||||
|           }, | ||||
|           "EMPTY_STATE": "No agents added", | ||||
|           "API": { | ||||
|             "SUCCESS_MESSAGE": "Agent successfully added to policy", | ||||
|             "ERROR_MESSAGE": "Failed to add agent to policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "DELETE_POLICY": { | ||||
|         "SUCCESS_MESSAGE": "Agent capacity policy deleted successfully", | ||||
|         "ERROR_MESSAGE": "Failed to delete agent capacity policy" | ||||
|       } | ||||
|     }, | ||||
|     "DELETE_POLICY": { | ||||
|       "TITLE": "Delete policy", | ||||
|       "DESCRIPTION": "Are you sure you want to delete this policy? This action cannot be undone.", | ||||
|       "CONFIRM_BUTTON_LABEL": "Slet", | ||||
|       "CANCEL_BUTTON_LABEL": "Annuller" | ||||
|     } | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -71,6 +71,17 @@ | ||||
|       "SHOW_LABELS": "Labels anzeigen", | ||||
|       "HIDE_LABELS": "Labels ausblenden" | ||||
|     }, | ||||
|     "VOICE_CALL": { | ||||
|       "INCOMING_CALL": "Incoming call", | ||||
|       "OUTGOING_CALL": "Outgoing call", | ||||
|       "CALL_IN_PROGRESS": "Call in progress", | ||||
|       "NO_ANSWER": "No answer", | ||||
|       "MISSED_CALL": "Missed call", | ||||
|       "CALL_ENDED": "Call ended", | ||||
|       "NOT_ANSWERED_YET": "Not answered yet", | ||||
|       "THEY_ANSWERED": "They answered", | ||||
|       "YOU_ANSWERED": "You answered" | ||||
|     }, | ||||
|     "HEADER": { | ||||
|       "RESOLVE_ACTION": "Fall schließen", | ||||
|       "REOPEN_ACTION": "Wieder öffnen", | ||||
|   | ||||
| @@ -51,6 +51,13 @@ | ||||
|             "LARGER": "Larger", | ||||
|             "EXTRA_LARGE": "Extra Large" | ||||
|           } | ||||
|         }, | ||||
|         "LANGUAGE": { | ||||
|           "TITLE": "Preferred Language", | ||||
|           "NOTE": "Choose the language you want to use.", | ||||
|           "UPDATE_SUCCESS": "Your Language settings have been updated successfully", | ||||
|           "UPDATE_ERROR": "There is an error while updating the language settings, please try again", | ||||
|           "USE_ACCOUNT_DEFAULT": "Use account default" | ||||
|         } | ||||
|       }, | ||||
|       "MESSAGE_SIGNATURE_SECTION": { | ||||
| @@ -330,6 +337,7 @@ | ||||
|     "REPORTS_LABEL": "Labels", | ||||
|     "REPORTS_INBOX": "Posteingang", | ||||
|     "REPORTS_TEAM": "Team", | ||||
|     "AGENT_ASSIGNMENT": "Agent Assignment", | ||||
|     "SET_AVAILABILITY_TITLE": "Setzen Sie sich als", | ||||
|     "SET_YOUR_AVAILABILITY": "Legen Sie Ihre Verfügbarkeit fest", | ||||
|     "SLA": "SLA", | ||||
| @@ -418,5 +426,255 @@ | ||||
|       "SWITCH_TO_REPLY": "Zur Antwort wechseln", | ||||
|       "TOGGLE_SNOOZE_DROPDOWN": "Schlummer-Dropdown ein-/ausblenden" | ||||
|     } | ||||
|   }, | ||||
|   "ASSIGNMENT_POLICY": { | ||||
|     "INDEX": { | ||||
|       "HEADER": { | ||||
|         "TITLE": "Agent assignment", | ||||
|         "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here" | ||||
|       }, | ||||
|       "ASSIGNMENT_POLICY": { | ||||
|         "TITLE": "Assignment policy", | ||||
|         "DESCRIPTION": "Manage how conversations get assigned in inboxes.", | ||||
|         "FEATURES": [ | ||||
|           "Assign by conversations evenly or by available capacity", | ||||
|           "Add fair distribution rules to avoid overloading any agent", | ||||
|           "Add inboxes to a policy - one policy per inbox" | ||||
|         ] | ||||
|       }, | ||||
|       "AGENT_CAPACITY_POLICY": { | ||||
|         "TITLE": "Agent capacity policy", | ||||
|         "DESCRIPTION": "Manage workload for agents.", | ||||
|         "FEATURES": [ | ||||
|           "Define maximum conversations per inbox", | ||||
|           "Create exceptions based on labels and time", | ||||
|           "Add agents to a policy - one policy per agent" | ||||
|         ] | ||||
|       } | ||||
|     }, | ||||
|     "AGENT_ASSIGNMENT_POLICY": { | ||||
|       "INDEX": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Assignment policy", | ||||
|           "CREATE_POLICY": "New policy" | ||||
|         }, | ||||
|         "CARD": { | ||||
|           "ORDER": "Order", | ||||
|           "PRIORITY": "Priorität", | ||||
|           "ACTIVE": "Aktiv", | ||||
|           "INACTIVE": "Inactive", | ||||
|           "POPOVER": "Added inboxes", | ||||
|           "EDIT": "Bearbeiten" | ||||
|         }, | ||||
|         "NO_RECORDS_FOUND": "No assignment policies found" | ||||
|       }, | ||||
|       "CREATE": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Create assignment policy" | ||||
|         }, | ||||
|         "CREATE_BUTTON": "Create policy", | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Assignment policy created successfully", | ||||
|           "ERROR_MESSAGE": "Failed to create assignment policy" | ||||
|         } | ||||
|       }, | ||||
|       "EDIT": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Edit assignment policy" | ||||
|         }, | ||||
|         "EDIT_BUTTON": "Update policy", | ||||
|         "CONFIRM_ADD_INBOX_DIALOG": { | ||||
|           "TITLE": "Add inbox", | ||||
|           "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", | ||||
|           "CONFIRM_BUTTON_LABEL": "Continue", | ||||
|           "CANCEL_BUTTON_LABEL": "Stornieren" | ||||
|         }, | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Assignment policy updated successfully", | ||||
|           "ERROR_MESSAGE": "Failed to update assignment policy" | ||||
|         }, | ||||
|         "INBOX_API": { | ||||
|           "ADD": { | ||||
|             "SUCCESS_MESSAGE": "Inbox added to policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to add inbox to policy" | ||||
|           }, | ||||
|           "REMOVE": { | ||||
|             "SUCCESS_MESSAGE": "Inbox removed from policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to remove inbox from policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "FORM": { | ||||
|         "NAME": { | ||||
|           "LABEL": "Policy name:", | ||||
|           "PLACEHOLDER": "Enter policy name" | ||||
|         }, | ||||
|         "DESCRIPTION": { | ||||
|           "LABEL": "Beschreibung:", | ||||
|           "PLACEHOLDER": "Beschreibung eingeben" | ||||
|         }, | ||||
|         "STATUS": { | ||||
|           "LABEL": "Status:", | ||||
|           "PLACEHOLDER": "Status auswählen", | ||||
|           "ACTIVE": "Policy is active", | ||||
|           "INACTIVE": "Policy is inactive" | ||||
|         }, | ||||
|         "ASSIGNMENT_ORDER": { | ||||
|           "LABEL": "Assignment order", | ||||
|           "ROUND_ROBIN": { | ||||
|             "LABEL": "Round robin", | ||||
|             "DESCRIPTION": "Assign conversations evenly among agents." | ||||
|           }, | ||||
|           "BALANCED": { | ||||
|             "LABEL": "Balanced", | ||||
|             "DESCRIPTION": "Assign conversations based on available capacity." | ||||
|           } | ||||
|         }, | ||||
|         "ASSIGNMENT_PRIORITY": { | ||||
|           "LABEL": "Assignment priority", | ||||
|           "EARLIEST_CREATED": { | ||||
|             "LABEL": "Earliest created", | ||||
|             "DESCRIPTION": "The conversation that was created first gets assigned first." | ||||
|           }, | ||||
|           "LONGEST_WAITING": { | ||||
|             "LABEL": "Longest waiting", | ||||
|             "DESCRIPTION": "The conversation waiting the longest gets assigned first." | ||||
|           } | ||||
|         }, | ||||
|         "FAIR_DISTRIBUTION": { | ||||
|           "LABEL": "Fair distribution policy", | ||||
|           "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.", | ||||
|           "INPUT_MAX": "Assign max", | ||||
|           "DURATION": "Conversations per agent in every" | ||||
|         }, | ||||
|         "INBOXES": { | ||||
|           "LABEL": "Added inboxes", | ||||
|           "DESCRIPTION": "Add inboxes for which this policy will be applicable.", | ||||
|           "ADD_BUTTON": "Add inbox", | ||||
|           "DROPDOWN": { | ||||
|             "SEARCH_PLACEHOLDER": "Search and select inboxes to add", | ||||
|             "ADD_BUTTON": "Hinzufügen" | ||||
|           }, | ||||
|           "EMPTY_STATE": "No inboxes added to this policy, add an inbox to get started", | ||||
|           "API": { | ||||
|             "SUCCESS_MESSAGE": "Inbox successfully added to policy", | ||||
|             "ERROR_MESSAGE": "Failed to add inbox to policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "DELETE_POLICY": { | ||||
|         "SUCCESS_MESSAGE": "Assignment policy deleted successfully", | ||||
|         "ERROR_MESSAGE": "Failed to delete assignment policy" | ||||
|       } | ||||
|     }, | ||||
|     "AGENT_CAPACITY_POLICY": { | ||||
|       "INDEX": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Agent capacity", | ||||
|           "CREATE_POLICY": "New policy" | ||||
|         }, | ||||
|         "CARD": { | ||||
|           "POPOVER": "Added agents", | ||||
|           "EDIT": "Bearbeiten" | ||||
|         }, | ||||
|         "NO_RECORDS_FOUND": "No agent capacity policies found" | ||||
|       }, | ||||
|       "CREATE": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Create agent capacity policy" | ||||
|         }, | ||||
|         "CREATE_BUTTON": "Create policy", | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Agent capacity policy created successfully", | ||||
|           "ERROR_MESSAGE": "Failed to create agent capacity policy" | ||||
|         } | ||||
|       }, | ||||
|       "EDIT": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Edit agent capacity policy" | ||||
|         }, | ||||
|         "EDIT_BUTTON": "Update policy", | ||||
|         "CONFIRM_ADD_AGENT_DIALOG": { | ||||
|           "TITLE": "Add agent", | ||||
|           "DESCRIPTION": "{agentName} is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", | ||||
|           "CONFIRM_BUTTON_LABEL": "Continue", | ||||
|           "CANCEL_BUTTON_LABEL": "Stornieren" | ||||
|         }, | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Agent capacity policy updated successfully", | ||||
|           "ERROR_MESSAGE": "Failed to update agent capacity policy" | ||||
|         }, | ||||
|         "AGENT_API": { | ||||
|           "ADD": { | ||||
|             "SUCCESS_MESSAGE": "Agent added to policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to add agent to policy" | ||||
|           }, | ||||
|           "REMOVE": { | ||||
|             "SUCCESS_MESSAGE": "Agent removed from policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to remove agent from policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "FORM": { | ||||
|         "NAME": { | ||||
|           "LABEL": "Policy name:", | ||||
|           "PLACEHOLDER": "Enter policy name" | ||||
|         }, | ||||
|         "DESCRIPTION": { | ||||
|           "LABEL": "Beschreibung:", | ||||
|           "PLACEHOLDER": "Beschreibung eingeben" | ||||
|         }, | ||||
|         "INBOX_CAPACITY_LIMIT": { | ||||
|           "LABEL": "Inbox capacity limits", | ||||
|           "ADD_BUTTON": "Add inbox", | ||||
|           "FIELD": { | ||||
|             "SELECT_INBOX": "Select inbox", | ||||
|             "MAX_CONVERSATIONS": "Max conversations", | ||||
|             "SET_LIMIT": "Set limit" | ||||
|           }, | ||||
|           "EMPTY_STATE": "No inbox limit set" | ||||
|         }, | ||||
|         "EXCLUSION_RULES": { | ||||
|           "LABEL": "Exclusion rules", | ||||
|           "DESCRIPTION": "Conversations that satisfy the following conditions would not count towards agent capacity", | ||||
|           "TAGS": { | ||||
|             "LABEL": "Exclude conversations tagged with specific labels", | ||||
|             "ADD_TAG": "add tag", | ||||
|             "DROPDOWN": { | ||||
|               "SEARCH_PLACEHOLDER": "Search and select tags to add" | ||||
|             }, | ||||
|             "EMPTY_STATE": "No tags added to this policy." | ||||
|           }, | ||||
|           "DURATION": { | ||||
|             "LABEL": "Exclude conversations older than a specified duration", | ||||
|             "PLACEHOLDER": "Set time" | ||||
|           } | ||||
|         }, | ||||
|         "USERS": { | ||||
|           "LABEL": "Assigned agents", | ||||
|           "DESCRIPTION": "Add agents for which this policy will be applicable.", | ||||
|           "ADD_BUTTON": "Add agent", | ||||
|           "DROPDOWN": { | ||||
|             "SEARCH_PLACEHOLDER": "Search and select agents to add", | ||||
|             "ADD_BUTTON": "Hinzufügen" | ||||
|           }, | ||||
|           "EMPTY_STATE": "No agents added", | ||||
|           "API": { | ||||
|             "SUCCESS_MESSAGE": "Agent successfully added to policy", | ||||
|             "ERROR_MESSAGE": "Failed to add agent to policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "DELETE_POLICY": { | ||||
|         "SUCCESS_MESSAGE": "Agent capacity policy deleted successfully", | ||||
|         "ERROR_MESSAGE": "Failed to delete agent capacity policy" | ||||
|       } | ||||
|     }, | ||||
|     "DELETE_POLICY": { | ||||
|       "TITLE": "Delete policy", | ||||
|       "DESCRIPTION": "Are you sure you want to delete this policy? This action cannot be undone.", | ||||
|       "CONFIRM_BUTTON_LABEL": "Löschen", | ||||
|       "CANCEL_BUTTON_LABEL": "Stornieren" | ||||
|     } | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -71,6 +71,17 @@ | ||||
|       "SHOW_LABELS": "Προβολή ετικετών", | ||||
|       "HIDE_LABELS": "Απόκρυψη ετικετών" | ||||
|     }, | ||||
|     "VOICE_CALL": { | ||||
|       "INCOMING_CALL": "Incoming call", | ||||
|       "OUTGOING_CALL": "Outgoing call", | ||||
|       "CALL_IN_PROGRESS": "Call in progress", | ||||
|       "NO_ANSWER": "No answer", | ||||
|       "MISSED_CALL": "Missed call", | ||||
|       "CALL_ENDED": "Call ended", | ||||
|       "NOT_ANSWERED_YET": "Not answered yet", | ||||
|       "THEY_ANSWERED": "They answered", | ||||
|       "YOU_ANSWERED": "You answered" | ||||
|     }, | ||||
|     "HEADER": { | ||||
|       "RESOLVE_ACTION": "Επίλυση", | ||||
|       "REOPEN_ACTION": "Επαναφορά", | ||||
|   | ||||
| @@ -51,6 +51,13 @@ | ||||
|             "LARGER": "Larger", | ||||
|             "EXTRA_LARGE": "Extra Large" | ||||
|           } | ||||
|         }, | ||||
|         "LANGUAGE": { | ||||
|           "TITLE": "Preferred Language", | ||||
|           "NOTE": "Choose the language you want to use.", | ||||
|           "UPDATE_SUCCESS": "Your Language settings have been updated successfully", | ||||
|           "UPDATE_ERROR": "There is an error while updating the language settings, please try again", | ||||
|           "USE_ACCOUNT_DEFAULT": "Use account default" | ||||
|         } | ||||
|       }, | ||||
|       "MESSAGE_SIGNATURE_SECTION": { | ||||
| @@ -330,6 +337,7 @@ | ||||
|     "REPORTS_LABEL": "Ετικέτες", | ||||
|     "REPORTS_INBOX": "Εισερχόμενα", | ||||
|     "REPORTS_TEAM": "Ομάδα", | ||||
|     "AGENT_ASSIGNMENT": "Agent Assignment", | ||||
|     "SET_AVAILABILITY_TITLE": "Ορίστε τον εαυτό σας ως", | ||||
|     "SET_YOUR_AVAILABILITY": "Ορίστε τη διαθεσιμότητά σας", | ||||
|     "SLA": "SLA", | ||||
| @@ -418,5 +426,255 @@ | ||||
|       "SWITCH_TO_REPLY": "Εναλλαγή σε απάντηση", | ||||
|       "TOGGLE_SNOOZE_DROPDOWN": "Εναλλαγή αναβολής dropdown" | ||||
|     } | ||||
|   }, | ||||
|   "ASSIGNMENT_POLICY": { | ||||
|     "INDEX": { | ||||
|       "HEADER": { | ||||
|         "TITLE": "Agent assignment", | ||||
|         "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here" | ||||
|       }, | ||||
|       "ASSIGNMENT_POLICY": { | ||||
|         "TITLE": "Assignment policy", | ||||
|         "DESCRIPTION": "Manage how conversations get assigned in inboxes.", | ||||
|         "FEATURES": [ | ||||
|           "Assign by conversations evenly or by available capacity", | ||||
|           "Add fair distribution rules to avoid overloading any agent", | ||||
|           "Add inboxes to a policy - one policy per inbox" | ||||
|         ] | ||||
|       }, | ||||
|       "AGENT_CAPACITY_POLICY": { | ||||
|         "TITLE": "Agent capacity policy", | ||||
|         "DESCRIPTION": "Manage workload for agents.", | ||||
|         "FEATURES": [ | ||||
|           "Define maximum conversations per inbox", | ||||
|           "Create exceptions based on labels and time", | ||||
|           "Add agents to a policy - one policy per agent" | ||||
|         ] | ||||
|       } | ||||
|     }, | ||||
|     "AGENT_ASSIGNMENT_POLICY": { | ||||
|       "INDEX": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Assignment policy", | ||||
|           "CREATE_POLICY": "New policy" | ||||
|         }, | ||||
|         "CARD": { | ||||
|           "ORDER": "Order", | ||||
|           "PRIORITY": "Priority", | ||||
|           "ACTIVE": "Ενεργή", | ||||
|           "INACTIVE": "Inactive", | ||||
|           "POPOVER": "Added inboxes", | ||||
|           "EDIT": "Επεξεργασία" | ||||
|         }, | ||||
|         "NO_RECORDS_FOUND": "No assignment policies found" | ||||
|       }, | ||||
|       "CREATE": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Create assignment policy" | ||||
|         }, | ||||
|         "CREATE_BUTTON": "Create policy", | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Assignment policy created successfully", | ||||
|           "ERROR_MESSAGE": "Failed to create assignment policy" | ||||
|         } | ||||
|       }, | ||||
|       "EDIT": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Edit assignment policy" | ||||
|         }, | ||||
|         "EDIT_BUTTON": "Update policy", | ||||
|         "CONFIRM_ADD_INBOX_DIALOG": { | ||||
|           "TITLE": "Add inbox", | ||||
|           "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", | ||||
|           "CONFIRM_BUTTON_LABEL": "Continue", | ||||
|           "CANCEL_BUTTON_LABEL": "Άκυρο" | ||||
|         }, | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Assignment policy updated successfully", | ||||
|           "ERROR_MESSAGE": "Failed to update assignment policy" | ||||
|         }, | ||||
|         "INBOX_API": { | ||||
|           "ADD": { | ||||
|             "SUCCESS_MESSAGE": "Inbox added to policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to add inbox to policy" | ||||
|           }, | ||||
|           "REMOVE": { | ||||
|             "SUCCESS_MESSAGE": "Inbox removed from policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to remove inbox from policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "FORM": { | ||||
|         "NAME": { | ||||
|           "LABEL": "Policy name:", | ||||
|           "PLACEHOLDER": "Enter policy name" | ||||
|         }, | ||||
|         "DESCRIPTION": { | ||||
|           "LABEL": "Περιγραφή:", | ||||
|           "PLACEHOLDER": "Enter description" | ||||
|         }, | ||||
|         "STATUS": { | ||||
|           "LABEL": "Κατάσταση:", | ||||
|           "PLACEHOLDER": "Select status", | ||||
|           "ACTIVE": "Policy is active", | ||||
|           "INACTIVE": "Policy is inactive" | ||||
|         }, | ||||
|         "ASSIGNMENT_ORDER": { | ||||
|           "LABEL": "Assignment order", | ||||
|           "ROUND_ROBIN": { | ||||
|             "LABEL": "Round robin", | ||||
|             "DESCRIPTION": "Assign conversations evenly among agents." | ||||
|           }, | ||||
|           "BALANCED": { | ||||
|             "LABEL": "Balanced", | ||||
|             "DESCRIPTION": "Assign conversations based on available capacity." | ||||
|           } | ||||
|         }, | ||||
|         "ASSIGNMENT_PRIORITY": { | ||||
|           "LABEL": "Assignment priority", | ||||
|           "EARLIEST_CREATED": { | ||||
|             "LABEL": "Earliest created", | ||||
|             "DESCRIPTION": "The conversation that was created first gets assigned first." | ||||
|           }, | ||||
|           "LONGEST_WAITING": { | ||||
|             "LABEL": "Longest waiting", | ||||
|             "DESCRIPTION": "The conversation waiting the longest gets assigned first." | ||||
|           } | ||||
|         }, | ||||
|         "FAIR_DISTRIBUTION": { | ||||
|           "LABEL": "Fair distribution policy", | ||||
|           "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.", | ||||
|           "INPUT_MAX": "Assign max", | ||||
|           "DURATION": "Conversations per agent in every" | ||||
|         }, | ||||
|         "INBOXES": { | ||||
|           "LABEL": "Added inboxes", | ||||
|           "DESCRIPTION": "Add inboxes for which this policy will be applicable.", | ||||
|           "ADD_BUTTON": "Add inbox", | ||||
|           "DROPDOWN": { | ||||
|             "SEARCH_PLACEHOLDER": "Search and select inboxes to add", | ||||
|             "ADD_BUTTON": "Προσθήκη" | ||||
|           }, | ||||
|           "EMPTY_STATE": "No inboxes added to this policy, add an inbox to get started", | ||||
|           "API": { | ||||
|             "SUCCESS_MESSAGE": "Inbox successfully added to policy", | ||||
|             "ERROR_MESSAGE": "Failed to add inbox to policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "DELETE_POLICY": { | ||||
|         "SUCCESS_MESSAGE": "Assignment policy deleted successfully", | ||||
|         "ERROR_MESSAGE": "Failed to delete assignment policy" | ||||
|       } | ||||
|     }, | ||||
|     "AGENT_CAPACITY_POLICY": { | ||||
|       "INDEX": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Agent capacity", | ||||
|           "CREATE_POLICY": "New policy" | ||||
|         }, | ||||
|         "CARD": { | ||||
|           "POPOVER": "Added agents", | ||||
|           "EDIT": "Επεξεργασία" | ||||
|         }, | ||||
|         "NO_RECORDS_FOUND": "No agent capacity policies found" | ||||
|       }, | ||||
|       "CREATE": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Create agent capacity policy" | ||||
|         }, | ||||
|         "CREATE_BUTTON": "Create policy", | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Agent capacity policy created successfully", | ||||
|           "ERROR_MESSAGE": "Failed to create agent capacity policy" | ||||
|         } | ||||
|       }, | ||||
|       "EDIT": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Edit agent capacity policy" | ||||
|         }, | ||||
|         "EDIT_BUTTON": "Update policy", | ||||
|         "CONFIRM_ADD_AGENT_DIALOG": { | ||||
|           "TITLE": "Add agent", | ||||
|           "DESCRIPTION": "{agentName} is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", | ||||
|           "CONFIRM_BUTTON_LABEL": "Continue", | ||||
|           "CANCEL_BUTTON_LABEL": "Άκυρο" | ||||
|         }, | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Agent capacity policy updated successfully", | ||||
|           "ERROR_MESSAGE": "Failed to update agent capacity policy" | ||||
|         }, | ||||
|         "AGENT_API": { | ||||
|           "ADD": { | ||||
|             "SUCCESS_MESSAGE": "Agent added to policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to add agent to policy" | ||||
|           }, | ||||
|           "REMOVE": { | ||||
|             "SUCCESS_MESSAGE": "Agent removed from policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to remove agent from policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "FORM": { | ||||
|         "NAME": { | ||||
|           "LABEL": "Policy name:", | ||||
|           "PLACEHOLDER": "Enter policy name" | ||||
|         }, | ||||
|         "DESCRIPTION": { | ||||
|           "LABEL": "Περιγραφή:", | ||||
|           "PLACEHOLDER": "Enter description" | ||||
|         }, | ||||
|         "INBOX_CAPACITY_LIMIT": { | ||||
|           "LABEL": "Inbox capacity limits", | ||||
|           "ADD_BUTTON": "Add inbox", | ||||
|           "FIELD": { | ||||
|             "SELECT_INBOX": "Select inbox", | ||||
|             "MAX_CONVERSATIONS": "Max conversations", | ||||
|             "SET_LIMIT": "Set limit" | ||||
|           }, | ||||
|           "EMPTY_STATE": "No inbox limit set" | ||||
|         }, | ||||
|         "EXCLUSION_RULES": { | ||||
|           "LABEL": "Exclusion rules", | ||||
|           "DESCRIPTION": "Conversations that satisfy the following conditions would not count towards agent capacity", | ||||
|           "TAGS": { | ||||
|             "LABEL": "Exclude conversations tagged with specific labels", | ||||
|             "ADD_TAG": "add tag", | ||||
|             "DROPDOWN": { | ||||
|               "SEARCH_PLACEHOLDER": "Search and select tags to add" | ||||
|             }, | ||||
|             "EMPTY_STATE": "No tags added to this policy." | ||||
|           }, | ||||
|           "DURATION": { | ||||
|             "LABEL": "Exclude conversations older than a specified duration", | ||||
|             "PLACEHOLDER": "Set time" | ||||
|           } | ||||
|         }, | ||||
|         "USERS": { | ||||
|           "LABEL": "Assigned agents", | ||||
|           "DESCRIPTION": "Add agents for which this policy will be applicable.", | ||||
|           "ADD_BUTTON": "Add agent", | ||||
|           "DROPDOWN": { | ||||
|             "SEARCH_PLACEHOLDER": "Search and select agents to add", | ||||
|             "ADD_BUTTON": "Προσθήκη" | ||||
|           }, | ||||
|           "EMPTY_STATE": "No agents added", | ||||
|           "API": { | ||||
|             "SUCCESS_MESSAGE": "Agent successfully added to policy", | ||||
|             "ERROR_MESSAGE": "Failed to add agent to policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "DELETE_POLICY": { | ||||
|         "SUCCESS_MESSAGE": "Agent capacity policy deleted successfully", | ||||
|         "ERROR_MESSAGE": "Failed to delete agent capacity policy" | ||||
|       } | ||||
|     }, | ||||
|     "DELETE_POLICY": { | ||||
|       "TITLE": "Delete policy", | ||||
|       "DESCRIPTION": "Are you sure you want to delete this policy? This action cannot be undone.", | ||||
|       "CONFIRM_BUTTON_LABEL": "Διαγραφή", | ||||
|       "CANCEL_BUTTON_LABEL": "Άκυρο" | ||||
|     } | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -51,6 +51,13 @@ | ||||
|             "LARGER": "Larger", | ||||
|             "EXTRA_LARGE": "Extra Large" | ||||
|           } | ||||
|         }, | ||||
|         "LANGUAGE": { | ||||
|           "TITLE": "Preferred Language", | ||||
|           "NOTE": "Choose the language you want to use.", | ||||
|           "UPDATE_SUCCESS": "Your Language settings have been updated successfully", | ||||
|           "UPDATE_ERROR": "There is an error while updating the language settings, please try again", | ||||
|           "USE_ACCOUNT_DEFAULT": "Use account default" | ||||
|         } | ||||
|       }, | ||||
|       "MESSAGE_SIGNATURE_SECTION": { | ||||
| @@ -444,6 +451,230 @@ | ||||
|           "Add agents to a policy - one policy per agent" | ||||
|         ] | ||||
|       } | ||||
|     }, | ||||
|     "AGENT_ASSIGNMENT_POLICY": { | ||||
|       "INDEX": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Assignment policy", | ||||
|           "CREATE_POLICY": "New policy" | ||||
|         }, | ||||
|         "CARD": { | ||||
|           "ORDER": "Order", | ||||
|           "PRIORITY": "Priority", | ||||
|           "ACTIVE": "Active", | ||||
|           "INACTIVE": "Inactive", | ||||
|           "POPOVER": "Added inboxes", | ||||
|           "EDIT": "Edit" | ||||
|         }, | ||||
|         "NO_RECORDS_FOUND": "No assignment policies found" | ||||
|       }, | ||||
|       "CREATE": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Create assignment policy" | ||||
|         }, | ||||
|         "CREATE_BUTTON": "Create policy", | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Assignment policy created successfully", | ||||
|           "ERROR_MESSAGE": "Failed to create assignment policy" | ||||
|         } | ||||
|       }, | ||||
|       "EDIT": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Edit assignment policy" | ||||
|         }, | ||||
|         "EDIT_BUTTON": "Update policy", | ||||
|         "CONFIRM_ADD_INBOX_DIALOG": { | ||||
|           "TITLE": "Add inbox", | ||||
|           "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", | ||||
|           "CONFIRM_BUTTON_LABEL": "Continue", | ||||
|           "CANCEL_BUTTON_LABEL": "Cancel" | ||||
|         }, | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Assignment policy updated successfully", | ||||
|           "ERROR_MESSAGE": "Failed to update assignment policy" | ||||
|         }, | ||||
|         "INBOX_API": { | ||||
|           "ADD": { | ||||
|             "SUCCESS_MESSAGE": "Inbox added to policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to add inbox to policy" | ||||
|           }, | ||||
|           "REMOVE": { | ||||
|             "SUCCESS_MESSAGE": "Inbox removed from policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to remove inbox from policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "FORM": { | ||||
|         "NAME": { | ||||
|           "LABEL": "Policy name:", | ||||
|           "PLACEHOLDER": "Enter policy name" | ||||
|         }, | ||||
|         "DESCRIPTION": { | ||||
|           "LABEL": "Description:", | ||||
|           "PLACEHOLDER": "Enter description" | ||||
|         }, | ||||
|         "STATUS": { | ||||
|           "LABEL": "Status:", | ||||
|           "PLACEHOLDER": "Select status", | ||||
|           "ACTIVE": "Policy is active", | ||||
|           "INACTIVE": "Policy is inactive" | ||||
|         }, | ||||
|         "ASSIGNMENT_ORDER": { | ||||
|           "LABEL": "Assignment order", | ||||
|           "ROUND_ROBIN": { | ||||
|             "LABEL": "Round robin", | ||||
|             "DESCRIPTION": "Assign conversations evenly among agents." | ||||
|           }, | ||||
|           "BALANCED": { | ||||
|             "LABEL": "Balanced", | ||||
|             "DESCRIPTION": "Assign conversations based on available capacity." | ||||
|           } | ||||
|         }, | ||||
|         "ASSIGNMENT_PRIORITY": { | ||||
|           "LABEL": "Assignment priority", | ||||
|           "EARLIEST_CREATED": { | ||||
|             "LABEL": "Earliest created", | ||||
|             "DESCRIPTION": "The conversation that was created first gets assigned first." | ||||
|           }, | ||||
|           "LONGEST_WAITING": { | ||||
|             "LABEL": "Longest waiting", | ||||
|             "DESCRIPTION": "The conversation waiting the longest gets assigned first." | ||||
|           } | ||||
|         }, | ||||
|         "FAIR_DISTRIBUTION": { | ||||
|           "LABEL": "Fair distribution policy", | ||||
|           "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.", | ||||
|           "INPUT_MAX": "Assign max", | ||||
|           "DURATION": "Conversations per agent in every" | ||||
|         }, | ||||
|         "INBOXES": { | ||||
|           "LABEL": "Added inboxes", | ||||
|           "DESCRIPTION": "Add inboxes for which this policy will be applicable.", | ||||
|           "ADD_BUTTON": "Add inbox", | ||||
|           "DROPDOWN": { | ||||
|             "SEARCH_PLACEHOLDER": "Search and select inboxes to add", | ||||
|             "ADD_BUTTON": "Add" | ||||
|           }, | ||||
|           "EMPTY_STATE": "No inboxes added to this policy, add an inbox to get started", | ||||
|           "API": { | ||||
|             "SUCCESS_MESSAGE": "Inbox successfully added to policy", | ||||
|             "ERROR_MESSAGE": "Failed to add inbox to policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "DELETE_POLICY": { | ||||
|         "SUCCESS_MESSAGE": "Assignment policy deleted successfully", | ||||
|         "ERROR_MESSAGE": "Failed to delete assignment policy" | ||||
|       } | ||||
|     }, | ||||
|     "AGENT_CAPACITY_POLICY": { | ||||
|       "INDEX": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Agent capacity", | ||||
|           "CREATE_POLICY": "New policy" | ||||
|         }, | ||||
|         "CARD": { | ||||
|           "POPOVER": "Added agents", | ||||
|           "EDIT": "Edit" | ||||
|         }, | ||||
|         "NO_RECORDS_FOUND": "No agent capacity policies found" | ||||
|       }, | ||||
|       "CREATE": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Create agent capacity policy" | ||||
|         }, | ||||
|         "CREATE_BUTTON": "Create policy", | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Agent capacity policy created successfully", | ||||
|           "ERROR_MESSAGE": "Failed to create agent capacity policy" | ||||
|         } | ||||
|       }, | ||||
|       "EDIT": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Edit agent capacity policy" | ||||
|         }, | ||||
|         "EDIT_BUTTON": "Update policy", | ||||
|         "CONFIRM_ADD_AGENT_DIALOG": { | ||||
|           "TITLE": "Add agent", | ||||
|           "DESCRIPTION": "{agentName} is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", | ||||
|           "CONFIRM_BUTTON_LABEL": "Continue", | ||||
|           "CANCEL_BUTTON_LABEL": "Cancel" | ||||
|         }, | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Agent capacity policy updated successfully", | ||||
|           "ERROR_MESSAGE": "Failed to update agent capacity policy" | ||||
|         }, | ||||
|         "AGENT_API": { | ||||
|           "ADD": { | ||||
|             "SUCCESS_MESSAGE": "Agent added to policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to add agent to policy" | ||||
|           }, | ||||
|           "REMOVE": { | ||||
|             "SUCCESS_MESSAGE": "Agent removed from policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to remove agent from policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "FORM": { | ||||
|         "NAME": { | ||||
|           "LABEL": "Policy name:", | ||||
|           "PLACEHOLDER": "Enter policy name" | ||||
|         }, | ||||
|         "DESCRIPTION": { | ||||
|           "LABEL": "Description:", | ||||
|           "PLACEHOLDER": "Enter description" | ||||
|         }, | ||||
|         "INBOX_CAPACITY_LIMIT": { | ||||
|           "LABEL": "Inbox capacity limits", | ||||
|           "ADD_BUTTON": "Add inbox", | ||||
|           "FIELD": { | ||||
|             "SELECT_INBOX": "Select inbox", | ||||
|             "MAX_CONVERSATIONS": "Max conversations", | ||||
|             "SET_LIMIT": "Set limit" | ||||
|           }, | ||||
|           "EMPTY_STATE": "No inbox limit set" | ||||
|         }, | ||||
|         "EXCLUSION_RULES": { | ||||
|           "LABEL": "Exclusion rules", | ||||
|           "DESCRIPTION": "Conversations that satisfy the following conditions would not count towards agent capacity", | ||||
|           "TAGS": { | ||||
|             "LABEL": "Exclude conversations tagged with specific labels", | ||||
|             "ADD_TAG": "add tag", | ||||
|             "DROPDOWN": { | ||||
|               "SEARCH_PLACEHOLDER": "Search and select tags to add" | ||||
|             }, | ||||
|             "EMPTY_STATE": "No tags added to this policy." | ||||
|           }, | ||||
|           "DURATION": { | ||||
|             "LABEL": "Exclude conversations older than a specified duration", | ||||
|             "PLACEHOLDER": "Set time" | ||||
|           } | ||||
|         }, | ||||
|         "USERS": { | ||||
|           "LABEL": "Assigned agents", | ||||
|           "DESCRIPTION": "Add agents for which this policy will be applicable.", | ||||
|           "ADD_BUTTON": "Add agent", | ||||
|           "DROPDOWN": { | ||||
|             "SEARCH_PLACEHOLDER": "Search and select agents to add", | ||||
|             "ADD_BUTTON": "Add" | ||||
|           }, | ||||
|           "EMPTY_STATE": "No agents added", | ||||
|           "API": { | ||||
|             "SUCCESS_MESSAGE": "Agent successfully added to policy", | ||||
|             "ERROR_MESSAGE": "Failed to add agent to policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "DELETE_POLICY": { | ||||
|         "SUCCESS_MESSAGE": "Agent capacity policy deleted successfully", | ||||
|         "ERROR_MESSAGE": "Failed to delete agent capacity policy" | ||||
|       } | ||||
|     }, | ||||
|     "DELETE_POLICY": { | ||||
|       "TITLE": "Delete policy", | ||||
|       "DESCRIPTION": "Are you sure you want to delete this policy? This action cannot be undone.", | ||||
|       "CONFIRM_BUTTON_LABEL": "Delete", | ||||
|       "CANCEL_BUTTON_LABEL": "Cancel" | ||||
|     } | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -142,7 +142,7 @@ | ||||
|       "NEW_CAMPAIGN": "Crear campaña", | ||||
|       "EMPTY_STATE": { | ||||
|         "TITLE": "No WhatsApp campaigns are available", | ||||
|         "SUBTITLE": "Launch a WhatsApp campaign to reach your customers directly. Send offers or make announcements with ease. Click 'Create campaign' to get started." | ||||
|         "SUBTITLE": "Lanza una campaña de WhatsApp para conectar con tus clientes directamente. Envía ofertas o has anuncios fácilmente. Haz clic en 'Crear campaña' para comenzar." | ||||
|       }, | ||||
|       "CARD": { | ||||
|         "STATUS": { | ||||
| @@ -155,7 +155,7 @@ | ||||
|         } | ||||
|       }, | ||||
|       "CREATE": { | ||||
|         "TITLE": "Create WhatsApp campaign", | ||||
|         "TITLE": "Crear campaña de WhatsApp", | ||||
|         "CANCEL_BUTTON_TEXT": "Cancelar", | ||||
|         "CREATE_BUTTON_TEXT": "Crear", | ||||
|         "FORM": { | ||||
|   | ||||
| @@ -40,7 +40,7 @@ | ||||
|       "SEND_MESSAGE_LABEL": "Enviar mensaje", | ||||
|       "FORM_ERROR_MESSAGE": "Por favor, rellene todas las variables antes de enviar", | ||||
|       "MEDIA_HEADER_LABEL": "{type} Header", | ||||
|       "MEDIA_URL_LABEL": "Enter full media URL", | ||||
|       "MEDIA_URL_LABEL": "Ingrese la URL completa", | ||||
|       "MEDIA_URL_PLACEHOLDER": "https://example.com/image.jpg" | ||||
|     }, | ||||
|     "FORM": { | ||||
|   | ||||
| @@ -71,6 +71,17 @@ | ||||
|       "SHOW_LABELS": "Mostrar etiquetas", | ||||
|       "HIDE_LABELS": "Ocultar etiquetas" | ||||
|     }, | ||||
|     "VOICE_CALL": { | ||||
|       "INCOMING_CALL": "Incoming call", | ||||
|       "OUTGOING_CALL": "Outgoing call", | ||||
|       "CALL_IN_PROGRESS": "Call in progress", | ||||
|       "NO_ANSWER": "No answer", | ||||
|       "MISSED_CALL": "Missed call", | ||||
|       "CALL_ENDED": "Call ended", | ||||
|       "NOT_ANSWERED_YET": "Not answered yet", | ||||
|       "THEY_ANSWERED": "They answered", | ||||
|       "YOU_ANSWERED": "You answered" | ||||
|     }, | ||||
|     "HEADER": { | ||||
|       "RESOLVE_ACTION": "Resolver", | ||||
|       "REOPEN_ACTION": "Reabrir", | ||||
|   | ||||
| @@ -51,6 +51,13 @@ | ||||
|             "LARGER": "Larger", | ||||
|             "EXTRA_LARGE": "Extra Large" | ||||
|           } | ||||
|         }, | ||||
|         "LANGUAGE": { | ||||
|           "TITLE": "Preferred Language", | ||||
|           "NOTE": "Choose the language you want to use.", | ||||
|           "UPDATE_SUCCESS": "Your Language settings have been updated successfully", | ||||
|           "UPDATE_ERROR": "There is an error while updating the language settings, please try again", | ||||
|           "USE_ACCOUNT_DEFAULT": "Use account default" | ||||
|         } | ||||
|       }, | ||||
|       "MESSAGE_SIGNATURE_SECTION": { | ||||
| @@ -226,7 +233,7 @@ | ||||
|     "APPEARANCE": "Cambiar apariencia", | ||||
|     "SUPER_ADMIN_CONSOLE": "Consola SuperAdmin", | ||||
|     "DOCS": "Leer la documentación", | ||||
|     "CHANGELOG": "Changelog", | ||||
|     "CHANGELOG": "Notas de versión", | ||||
|     "LOGOUT": "Cerrar sesión" | ||||
|   }, | ||||
|   "APP_GLOBAL": { | ||||
| @@ -330,6 +337,7 @@ | ||||
|     "REPORTS_LABEL": "Etiquetas", | ||||
|     "REPORTS_INBOX": "Bandeja de entrada", | ||||
|     "REPORTS_TEAM": "Equipo", | ||||
|     "AGENT_ASSIGNMENT": "Agent Assignment", | ||||
|     "SET_AVAILABILITY_TITLE": "Ponte como", | ||||
|     "SET_YOUR_AVAILABILITY": "Establecer su disponibilidad", | ||||
|     "SLA": "SLA", | ||||
| @@ -418,5 +426,255 @@ | ||||
|       "SWITCH_TO_REPLY": "Cambiar a respuesta", | ||||
|       "TOGGLE_SNOOZE_DROPDOWN": "Cambiar el menú desplegable" | ||||
|     } | ||||
|   }, | ||||
|   "ASSIGNMENT_POLICY": { | ||||
|     "INDEX": { | ||||
|       "HEADER": { | ||||
|         "TITLE": "Agent assignment", | ||||
|         "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here" | ||||
|       }, | ||||
|       "ASSIGNMENT_POLICY": { | ||||
|         "TITLE": "Assignment policy", | ||||
|         "DESCRIPTION": "Manage how conversations get assigned in inboxes.", | ||||
|         "FEATURES": [ | ||||
|           "Assign by conversations evenly or by available capacity", | ||||
|           "Add fair distribution rules to avoid overloading any agent", | ||||
|           "Add inboxes to a policy - one policy per inbox" | ||||
|         ] | ||||
|       }, | ||||
|       "AGENT_CAPACITY_POLICY": { | ||||
|         "TITLE": "Agent capacity policy", | ||||
|         "DESCRIPTION": "Manage workload for agents.", | ||||
|         "FEATURES": [ | ||||
|           "Define maximum conversations per inbox", | ||||
|           "Create exceptions based on labels and time", | ||||
|           "Add agents to a policy - one policy per agent" | ||||
|         ] | ||||
|       } | ||||
|     }, | ||||
|     "AGENT_ASSIGNMENT_POLICY": { | ||||
|       "INDEX": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Assignment policy", | ||||
|           "CREATE_POLICY": "New policy" | ||||
|         }, | ||||
|         "CARD": { | ||||
|           "ORDER": "Order", | ||||
|           "PRIORITY": "Prioridad", | ||||
|           "ACTIVE": "Activo", | ||||
|           "INACTIVE": "Inactive", | ||||
|           "POPOVER": "Added inboxes", | ||||
|           "EDIT": "Editar" | ||||
|         }, | ||||
|         "NO_RECORDS_FOUND": "No assignment policies found" | ||||
|       }, | ||||
|       "CREATE": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Create assignment policy" | ||||
|         }, | ||||
|         "CREATE_BUTTON": "Create policy", | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Assignment policy created successfully", | ||||
|           "ERROR_MESSAGE": "Failed to create assignment policy" | ||||
|         } | ||||
|       }, | ||||
|       "EDIT": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Edit assignment policy" | ||||
|         }, | ||||
|         "EDIT_BUTTON": "Update policy", | ||||
|         "CONFIRM_ADD_INBOX_DIALOG": { | ||||
|           "TITLE": "Add inbox", | ||||
|           "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", | ||||
|           "CONFIRM_BUTTON_LABEL": "Continue", | ||||
|           "CANCEL_BUTTON_LABEL": "Cancelar" | ||||
|         }, | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Assignment policy updated successfully", | ||||
|           "ERROR_MESSAGE": "Failed to update assignment policy" | ||||
|         }, | ||||
|         "INBOX_API": { | ||||
|           "ADD": { | ||||
|             "SUCCESS_MESSAGE": "Inbox added to policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to add inbox to policy" | ||||
|           }, | ||||
|           "REMOVE": { | ||||
|             "SUCCESS_MESSAGE": "Inbox removed from policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to remove inbox from policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "FORM": { | ||||
|         "NAME": { | ||||
|           "LABEL": "Policy name:", | ||||
|           "PLACEHOLDER": "Enter policy name" | ||||
|         }, | ||||
|         "DESCRIPTION": { | ||||
|           "LABEL": "Descripción:", | ||||
|           "PLACEHOLDER": "Introducir descripción" | ||||
|         }, | ||||
|         "STATUS": { | ||||
|           "LABEL": "Estado:", | ||||
|           "PLACEHOLDER": "Seleccionar estado", | ||||
|           "ACTIVE": "Policy is active", | ||||
|           "INACTIVE": "Policy is inactive" | ||||
|         }, | ||||
|         "ASSIGNMENT_ORDER": { | ||||
|           "LABEL": "Assignment order", | ||||
|           "ROUND_ROBIN": { | ||||
|             "LABEL": "Round robin", | ||||
|             "DESCRIPTION": "Assign conversations evenly among agents." | ||||
|           }, | ||||
|           "BALANCED": { | ||||
|             "LABEL": "Balanced", | ||||
|             "DESCRIPTION": "Assign conversations based on available capacity." | ||||
|           } | ||||
|         }, | ||||
|         "ASSIGNMENT_PRIORITY": { | ||||
|           "LABEL": "Assignment priority", | ||||
|           "EARLIEST_CREATED": { | ||||
|             "LABEL": "Earliest created", | ||||
|             "DESCRIPTION": "The conversation that was created first gets assigned first." | ||||
|           }, | ||||
|           "LONGEST_WAITING": { | ||||
|             "LABEL": "Longest waiting", | ||||
|             "DESCRIPTION": "The conversation waiting the longest gets assigned first." | ||||
|           } | ||||
|         }, | ||||
|         "FAIR_DISTRIBUTION": { | ||||
|           "LABEL": "Fair distribution policy", | ||||
|           "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.", | ||||
|           "INPUT_MAX": "Assign max", | ||||
|           "DURATION": "Conversations per agent in every" | ||||
|         }, | ||||
|         "INBOXES": { | ||||
|           "LABEL": "Added inboxes", | ||||
|           "DESCRIPTION": "Add inboxes for which this policy will be applicable.", | ||||
|           "ADD_BUTTON": "Add inbox", | ||||
|           "DROPDOWN": { | ||||
|             "SEARCH_PLACEHOLDER": "Search and select inboxes to add", | ||||
|             "ADD_BUTTON": "Añadir" | ||||
|           }, | ||||
|           "EMPTY_STATE": "No inboxes added to this policy, add an inbox to get started", | ||||
|           "API": { | ||||
|             "SUCCESS_MESSAGE": "Inbox successfully added to policy", | ||||
|             "ERROR_MESSAGE": "Failed to add inbox to policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "DELETE_POLICY": { | ||||
|         "SUCCESS_MESSAGE": "Assignment policy deleted successfully", | ||||
|         "ERROR_MESSAGE": "Failed to delete assignment policy" | ||||
|       } | ||||
|     }, | ||||
|     "AGENT_CAPACITY_POLICY": { | ||||
|       "INDEX": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Agent capacity", | ||||
|           "CREATE_POLICY": "New policy" | ||||
|         }, | ||||
|         "CARD": { | ||||
|           "POPOVER": "Added agents", | ||||
|           "EDIT": "Editar" | ||||
|         }, | ||||
|         "NO_RECORDS_FOUND": "No agent capacity policies found" | ||||
|       }, | ||||
|       "CREATE": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Create agent capacity policy" | ||||
|         }, | ||||
|         "CREATE_BUTTON": "Create policy", | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Agent capacity policy created successfully", | ||||
|           "ERROR_MESSAGE": "Failed to create agent capacity policy" | ||||
|         } | ||||
|       }, | ||||
|       "EDIT": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Edit agent capacity policy" | ||||
|         }, | ||||
|         "EDIT_BUTTON": "Update policy", | ||||
|         "CONFIRM_ADD_AGENT_DIALOG": { | ||||
|           "TITLE": "Add agent", | ||||
|           "DESCRIPTION": "{agentName} is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", | ||||
|           "CONFIRM_BUTTON_LABEL": "Continue", | ||||
|           "CANCEL_BUTTON_LABEL": "Cancelar" | ||||
|         }, | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Agent capacity policy updated successfully", | ||||
|           "ERROR_MESSAGE": "Failed to update agent capacity policy" | ||||
|         }, | ||||
|         "AGENT_API": { | ||||
|           "ADD": { | ||||
|             "SUCCESS_MESSAGE": "Agent added to policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to add agent to policy" | ||||
|           }, | ||||
|           "REMOVE": { | ||||
|             "SUCCESS_MESSAGE": "Agent removed from policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to remove agent from policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "FORM": { | ||||
|         "NAME": { | ||||
|           "LABEL": "Policy name:", | ||||
|           "PLACEHOLDER": "Enter policy name" | ||||
|         }, | ||||
|         "DESCRIPTION": { | ||||
|           "LABEL": "Descripción:", | ||||
|           "PLACEHOLDER": "Introducir descripción" | ||||
|         }, | ||||
|         "INBOX_CAPACITY_LIMIT": { | ||||
|           "LABEL": "Inbox capacity limits", | ||||
|           "ADD_BUTTON": "Add inbox", | ||||
|           "FIELD": { | ||||
|             "SELECT_INBOX": "Select inbox", | ||||
|             "MAX_CONVERSATIONS": "Max conversations", | ||||
|             "SET_LIMIT": "Set limit" | ||||
|           }, | ||||
|           "EMPTY_STATE": "No inbox limit set" | ||||
|         }, | ||||
|         "EXCLUSION_RULES": { | ||||
|           "LABEL": "Exclusion rules", | ||||
|           "DESCRIPTION": "Conversations that satisfy the following conditions would not count towards agent capacity", | ||||
|           "TAGS": { | ||||
|             "LABEL": "Exclude conversations tagged with specific labels", | ||||
|             "ADD_TAG": "add tag", | ||||
|             "DROPDOWN": { | ||||
|               "SEARCH_PLACEHOLDER": "Search and select tags to add" | ||||
|             }, | ||||
|             "EMPTY_STATE": "No tags added to this policy." | ||||
|           }, | ||||
|           "DURATION": { | ||||
|             "LABEL": "Exclude conversations older than a specified duration", | ||||
|             "PLACEHOLDER": "Set time" | ||||
|           } | ||||
|         }, | ||||
|         "USERS": { | ||||
|           "LABEL": "Assigned agents", | ||||
|           "DESCRIPTION": "Add agents for which this policy will be applicable.", | ||||
|           "ADD_BUTTON": "Add agent", | ||||
|           "DROPDOWN": { | ||||
|             "SEARCH_PLACEHOLDER": "Search and select agents to add", | ||||
|             "ADD_BUTTON": "Añadir" | ||||
|           }, | ||||
|           "EMPTY_STATE": "No agents added", | ||||
|           "API": { | ||||
|             "SUCCESS_MESSAGE": "Agent successfully added to policy", | ||||
|             "ERROR_MESSAGE": "Failed to add agent to policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "DELETE_POLICY": { | ||||
|         "SUCCESS_MESSAGE": "Agent capacity policy deleted successfully", | ||||
|         "ERROR_MESSAGE": "Failed to delete agent capacity policy" | ||||
|       } | ||||
|     }, | ||||
|     "DELETE_POLICY": { | ||||
|       "TITLE": "Delete policy", | ||||
|       "DESCRIPTION": "Are you sure you want to delete this policy? This action cannot be undone.", | ||||
|       "CONFIRM_BUTTON_LABEL": "Eliminar", | ||||
|       "CANCEL_BUTTON_LABEL": "Cancelar" | ||||
|     } | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -17,7 +17,7 @@ | ||||
|     "IP_ADDRESS": "آدرس آیپی", | ||||
|     "CREATED_AT_LABEL": "ایجاد شده", | ||||
|     "NEW_MESSAGE": "پیام جدید", | ||||
|     "CALL": "Call", | ||||
|     "CALL": "تماس", | ||||
|     "CALL_UNDER_DEVELOPMENT": "Calling is under development", | ||||
|     "VOICE_INBOX_PICKER": { | ||||
|       "TITLE": "Choose a voice inbox" | ||||
|   | ||||
| @@ -71,6 +71,17 @@ | ||||
|       "SHOW_LABELS": "مشاهده کردن برچسبها", | ||||
|       "HIDE_LABELS": "پنهان کردن برچسبها" | ||||
|     }, | ||||
|     "VOICE_CALL": { | ||||
|       "INCOMING_CALL": "Incoming call", | ||||
|       "OUTGOING_CALL": "Outgoing call", | ||||
|       "CALL_IN_PROGRESS": "Call in progress", | ||||
|       "NO_ANSWER": "No answer", | ||||
|       "MISSED_CALL": "Missed call", | ||||
|       "CALL_ENDED": "Call ended", | ||||
|       "NOT_ANSWERED_YET": "Not answered yet", | ||||
|       "THEY_ANSWERED": "They answered", | ||||
|       "YOU_ANSWERED": "You answered" | ||||
|     }, | ||||
|     "HEADER": { | ||||
|       "RESOLVE_ACTION": "حل شد", | ||||
|       "REOPEN_ACTION": "دوباره باز کنید", | ||||
|   | ||||
| @@ -51,6 +51,13 @@ | ||||
|             "LARGER": "Larger", | ||||
|             "EXTRA_LARGE": "Extra Large" | ||||
|           } | ||||
|         }, | ||||
|         "LANGUAGE": { | ||||
|           "TITLE": "Preferred Language", | ||||
|           "NOTE": "Choose the language you want to use.", | ||||
|           "UPDATE_SUCCESS": "Your Language settings have been updated successfully", | ||||
|           "UPDATE_ERROR": "There is an error while updating the language settings, please try again", | ||||
|           "USE_ACCOUNT_DEFAULT": "Use account default" | ||||
|         } | ||||
|       }, | ||||
|       "MESSAGE_SIGNATURE_SECTION": { | ||||
| @@ -330,6 +337,7 @@ | ||||
|     "REPORTS_LABEL": "برچسبها", | ||||
|     "REPORTS_INBOX": "صندوق ورودی", | ||||
|     "REPORTS_TEAM": "تیم", | ||||
|     "AGENT_ASSIGNMENT": "Agent Assignment", | ||||
|     "SET_AVAILABILITY_TITLE": "خود را به عنوان", | ||||
|     "SET_YOUR_AVAILABILITY": "در دسترس بودن خود را تنظیم کنید", | ||||
|     "SLA": "SLA", | ||||
| @@ -418,5 +426,255 @@ | ||||
|       "SWITCH_TO_REPLY": "رفتن به پاسخ", | ||||
|       "TOGGLE_SNOOZE_DROPDOWN": "تغییر حالت بازکردن تعویق" | ||||
|     } | ||||
|   }, | ||||
|   "ASSIGNMENT_POLICY": { | ||||
|     "INDEX": { | ||||
|       "HEADER": { | ||||
|         "TITLE": "Agent assignment", | ||||
|         "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here" | ||||
|       }, | ||||
|       "ASSIGNMENT_POLICY": { | ||||
|         "TITLE": "Assignment policy", | ||||
|         "DESCRIPTION": "Manage how conversations get assigned in inboxes.", | ||||
|         "FEATURES": [ | ||||
|           "Assign by conversations evenly or by available capacity", | ||||
|           "Add fair distribution rules to avoid overloading any agent", | ||||
|           "Add inboxes to a policy - one policy per inbox" | ||||
|         ] | ||||
|       }, | ||||
|       "AGENT_CAPACITY_POLICY": { | ||||
|         "TITLE": "Agent capacity policy", | ||||
|         "DESCRIPTION": "Manage workload for agents.", | ||||
|         "FEATURES": [ | ||||
|           "Define maximum conversations per inbox", | ||||
|           "Create exceptions based on labels and time", | ||||
|           "Add agents to a policy - one policy per agent" | ||||
|         ] | ||||
|       } | ||||
|     }, | ||||
|     "AGENT_ASSIGNMENT_POLICY": { | ||||
|       "INDEX": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Assignment policy", | ||||
|           "CREATE_POLICY": "New policy" | ||||
|         }, | ||||
|         "CARD": { | ||||
|           "ORDER": "Order", | ||||
|           "PRIORITY": "اولویت", | ||||
|           "ACTIVE": "فعال", | ||||
|           "INACTIVE": "Inactive", | ||||
|           "POPOVER": "Added inboxes", | ||||
|           "EDIT": "ویرایش" | ||||
|         }, | ||||
|         "NO_RECORDS_FOUND": "No assignment policies found" | ||||
|       }, | ||||
|       "CREATE": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Create assignment policy" | ||||
|         }, | ||||
|         "CREATE_BUTTON": "Create policy", | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Assignment policy created successfully", | ||||
|           "ERROR_MESSAGE": "Failed to create assignment policy" | ||||
|         } | ||||
|       }, | ||||
|       "EDIT": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Edit assignment policy" | ||||
|         }, | ||||
|         "EDIT_BUTTON": "Update policy", | ||||
|         "CONFIRM_ADD_INBOX_DIALOG": { | ||||
|           "TITLE": "Add inbox", | ||||
|           "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", | ||||
|           "CONFIRM_BUTTON_LABEL": "Continue", | ||||
|           "CANCEL_BUTTON_LABEL": "انصراف" | ||||
|         }, | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Assignment policy updated successfully", | ||||
|           "ERROR_MESSAGE": "Failed to update assignment policy" | ||||
|         }, | ||||
|         "INBOX_API": { | ||||
|           "ADD": { | ||||
|             "SUCCESS_MESSAGE": "Inbox added to policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to add inbox to policy" | ||||
|           }, | ||||
|           "REMOVE": { | ||||
|             "SUCCESS_MESSAGE": "Inbox removed from policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to remove inbox from policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "FORM": { | ||||
|         "NAME": { | ||||
|           "LABEL": "Policy name:", | ||||
|           "PLACEHOLDER": "Enter policy name" | ||||
|         }, | ||||
|         "DESCRIPTION": { | ||||
|           "LABEL": "توضیحات:", | ||||
|           "PLACEHOLDER": "Enter description" | ||||
|         }, | ||||
|         "STATUS": { | ||||
|           "LABEL": "وضعیت:", | ||||
|           "PLACEHOLDER": "Select status", | ||||
|           "ACTIVE": "Policy is active", | ||||
|           "INACTIVE": "Policy is inactive" | ||||
|         }, | ||||
|         "ASSIGNMENT_ORDER": { | ||||
|           "LABEL": "Assignment order", | ||||
|           "ROUND_ROBIN": { | ||||
|             "LABEL": "Round robin", | ||||
|             "DESCRIPTION": "Assign conversations evenly among agents." | ||||
|           }, | ||||
|           "BALANCED": { | ||||
|             "LABEL": "Balanced", | ||||
|             "DESCRIPTION": "Assign conversations based on available capacity." | ||||
|           } | ||||
|         }, | ||||
|         "ASSIGNMENT_PRIORITY": { | ||||
|           "LABEL": "Assignment priority", | ||||
|           "EARLIEST_CREATED": { | ||||
|             "LABEL": "Earliest created", | ||||
|             "DESCRIPTION": "The conversation that was created first gets assigned first." | ||||
|           }, | ||||
|           "LONGEST_WAITING": { | ||||
|             "LABEL": "Longest waiting", | ||||
|             "DESCRIPTION": "The conversation waiting the longest gets assigned first." | ||||
|           } | ||||
|         }, | ||||
|         "FAIR_DISTRIBUTION": { | ||||
|           "LABEL": "Fair distribution policy", | ||||
|           "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.", | ||||
|           "INPUT_MAX": "Assign max", | ||||
|           "DURATION": "Conversations per agent in every" | ||||
|         }, | ||||
|         "INBOXES": { | ||||
|           "LABEL": "Added inboxes", | ||||
|           "DESCRIPTION": "Add inboxes for which this policy will be applicable.", | ||||
|           "ADD_BUTTON": "Add inbox", | ||||
|           "DROPDOWN": { | ||||
|             "SEARCH_PLACEHOLDER": "Search and select inboxes to add", | ||||
|             "ADD_BUTTON": "افزودن" | ||||
|           }, | ||||
|           "EMPTY_STATE": "No inboxes added to this policy, add an inbox to get started", | ||||
|           "API": { | ||||
|             "SUCCESS_MESSAGE": "Inbox successfully added to policy", | ||||
|             "ERROR_MESSAGE": "Failed to add inbox to policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "DELETE_POLICY": { | ||||
|         "SUCCESS_MESSAGE": "Assignment policy deleted successfully", | ||||
|         "ERROR_MESSAGE": "Failed to delete assignment policy" | ||||
|       } | ||||
|     }, | ||||
|     "AGENT_CAPACITY_POLICY": { | ||||
|       "INDEX": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Agent capacity", | ||||
|           "CREATE_POLICY": "New policy" | ||||
|         }, | ||||
|         "CARD": { | ||||
|           "POPOVER": "Added agents", | ||||
|           "EDIT": "ویرایش" | ||||
|         }, | ||||
|         "NO_RECORDS_FOUND": "No agent capacity policies found" | ||||
|       }, | ||||
|       "CREATE": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Create agent capacity policy" | ||||
|         }, | ||||
|         "CREATE_BUTTON": "Create policy", | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Agent capacity policy created successfully", | ||||
|           "ERROR_MESSAGE": "Failed to create agent capacity policy" | ||||
|         } | ||||
|       }, | ||||
|       "EDIT": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Edit agent capacity policy" | ||||
|         }, | ||||
|         "EDIT_BUTTON": "Update policy", | ||||
|         "CONFIRM_ADD_AGENT_DIALOG": { | ||||
|           "TITLE": "Add agent", | ||||
|           "DESCRIPTION": "{agentName} is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", | ||||
|           "CONFIRM_BUTTON_LABEL": "Continue", | ||||
|           "CANCEL_BUTTON_LABEL": "انصراف" | ||||
|         }, | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Agent capacity policy updated successfully", | ||||
|           "ERROR_MESSAGE": "Failed to update agent capacity policy" | ||||
|         }, | ||||
|         "AGENT_API": { | ||||
|           "ADD": { | ||||
|             "SUCCESS_MESSAGE": "Agent added to policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to add agent to policy" | ||||
|           }, | ||||
|           "REMOVE": { | ||||
|             "SUCCESS_MESSAGE": "Agent removed from policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to remove agent from policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "FORM": { | ||||
|         "NAME": { | ||||
|           "LABEL": "Policy name:", | ||||
|           "PLACEHOLDER": "Enter policy name" | ||||
|         }, | ||||
|         "DESCRIPTION": { | ||||
|           "LABEL": "توضیحات:", | ||||
|           "PLACEHOLDER": "Enter description" | ||||
|         }, | ||||
|         "INBOX_CAPACITY_LIMIT": { | ||||
|           "LABEL": "Inbox capacity limits", | ||||
|           "ADD_BUTTON": "Add inbox", | ||||
|           "FIELD": { | ||||
|             "SELECT_INBOX": "Select inbox", | ||||
|             "MAX_CONVERSATIONS": "Max conversations", | ||||
|             "SET_LIMIT": "Set limit" | ||||
|           }, | ||||
|           "EMPTY_STATE": "No inbox limit set" | ||||
|         }, | ||||
|         "EXCLUSION_RULES": { | ||||
|           "LABEL": "Exclusion rules", | ||||
|           "DESCRIPTION": "Conversations that satisfy the following conditions would not count towards agent capacity", | ||||
|           "TAGS": { | ||||
|             "LABEL": "Exclude conversations tagged with specific labels", | ||||
|             "ADD_TAG": "add tag", | ||||
|             "DROPDOWN": { | ||||
|               "SEARCH_PLACEHOLDER": "Search and select tags to add" | ||||
|             }, | ||||
|             "EMPTY_STATE": "No tags added to this policy." | ||||
|           }, | ||||
|           "DURATION": { | ||||
|             "LABEL": "Exclude conversations older than a specified duration", | ||||
|             "PLACEHOLDER": "Set time" | ||||
|           } | ||||
|         }, | ||||
|         "USERS": { | ||||
|           "LABEL": "Assigned agents", | ||||
|           "DESCRIPTION": "Add agents for which this policy will be applicable.", | ||||
|           "ADD_BUTTON": "Add agent", | ||||
|           "DROPDOWN": { | ||||
|             "SEARCH_PLACEHOLDER": "Search and select agents to add", | ||||
|             "ADD_BUTTON": "افزودن" | ||||
|           }, | ||||
|           "EMPTY_STATE": "No agents added", | ||||
|           "API": { | ||||
|             "SUCCESS_MESSAGE": "Agent successfully added to policy", | ||||
|             "ERROR_MESSAGE": "Failed to add agent to policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "DELETE_POLICY": { | ||||
|         "SUCCESS_MESSAGE": "Agent capacity policy deleted successfully", | ||||
|         "ERROR_MESSAGE": "Failed to delete agent capacity policy" | ||||
|       } | ||||
|     }, | ||||
|     "DELETE_POLICY": { | ||||
|       "TITLE": "Delete policy", | ||||
|       "DESCRIPTION": "Are you sure you want to delete this policy? This action cannot be undone.", | ||||
|       "CONFIRM_BUTTON_LABEL": "حذف", | ||||
|       "CANCEL_BUTTON_LABEL": "انصراف" | ||||
|     } | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -71,6 +71,17 @@ | ||||
|       "SHOW_LABELS": "Show labels", | ||||
|       "HIDE_LABELS": "Hide labels" | ||||
|     }, | ||||
|     "VOICE_CALL": { | ||||
|       "INCOMING_CALL": "Incoming call", | ||||
|       "OUTGOING_CALL": "Outgoing call", | ||||
|       "CALL_IN_PROGRESS": "Call in progress", | ||||
|       "NO_ANSWER": "No answer", | ||||
|       "MISSED_CALL": "Missed call", | ||||
|       "CALL_ENDED": "Call ended", | ||||
|       "NOT_ANSWERED_YET": "Not answered yet", | ||||
|       "THEY_ANSWERED": "They answered", | ||||
|       "YOU_ANSWERED": "You answered" | ||||
|     }, | ||||
|     "HEADER": { | ||||
|       "RESOLVE_ACTION": "Ratkaise", | ||||
|       "REOPEN_ACTION": "Uudelleenavaa", | ||||
|   | ||||
| @@ -51,6 +51,13 @@ | ||||
|             "LARGER": "Larger", | ||||
|             "EXTRA_LARGE": "Extra Large" | ||||
|           } | ||||
|         }, | ||||
|         "LANGUAGE": { | ||||
|           "TITLE": "Preferred Language", | ||||
|           "NOTE": "Choose the language you want to use.", | ||||
|           "UPDATE_SUCCESS": "Your Language settings have been updated successfully", | ||||
|           "UPDATE_ERROR": "There is an error while updating the language settings, please try again", | ||||
|           "USE_ACCOUNT_DEFAULT": "Use account default" | ||||
|         } | ||||
|       }, | ||||
|       "MESSAGE_SIGNATURE_SECTION": { | ||||
| @@ -330,6 +337,7 @@ | ||||
|     "REPORTS_LABEL": "Tunnisteet", | ||||
|     "REPORTS_INBOX": "Inbox", | ||||
|     "REPORTS_TEAM": "Team", | ||||
|     "AGENT_ASSIGNMENT": "Agent Assignment", | ||||
|     "SET_AVAILABILITY_TITLE": "Set yourself as", | ||||
|     "SET_YOUR_AVAILABILITY": "Set your availability", | ||||
|     "SLA": "SLA", | ||||
| @@ -418,5 +426,255 @@ | ||||
|       "SWITCH_TO_REPLY": "Switch to Reply", | ||||
|       "TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown" | ||||
|     } | ||||
|   }, | ||||
|   "ASSIGNMENT_POLICY": { | ||||
|     "INDEX": { | ||||
|       "HEADER": { | ||||
|         "TITLE": "Agent assignment", | ||||
|         "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here" | ||||
|       }, | ||||
|       "ASSIGNMENT_POLICY": { | ||||
|         "TITLE": "Assignment policy", | ||||
|         "DESCRIPTION": "Manage how conversations get assigned in inboxes.", | ||||
|         "FEATURES": [ | ||||
|           "Assign by conversations evenly or by available capacity", | ||||
|           "Add fair distribution rules to avoid overloading any agent", | ||||
|           "Add inboxes to a policy - one policy per inbox" | ||||
|         ] | ||||
|       }, | ||||
|       "AGENT_CAPACITY_POLICY": { | ||||
|         "TITLE": "Agent capacity policy", | ||||
|         "DESCRIPTION": "Manage workload for agents.", | ||||
|         "FEATURES": [ | ||||
|           "Define maximum conversations per inbox", | ||||
|           "Create exceptions based on labels and time", | ||||
|           "Add agents to a policy - one policy per agent" | ||||
|         ] | ||||
|       } | ||||
|     }, | ||||
|     "AGENT_ASSIGNMENT_POLICY": { | ||||
|       "INDEX": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Assignment policy", | ||||
|           "CREATE_POLICY": "New policy" | ||||
|         }, | ||||
|         "CARD": { | ||||
|           "ORDER": "Order", | ||||
|           "PRIORITY": "Priority", | ||||
|           "ACTIVE": "Active", | ||||
|           "INACTIVE": "Inactive", | ||||
|           "POPOVER": "Added inboxes", | ||||
|           "EDIT": "Muokkaa" | ||||
|         }, | ||||
|         "NO_RECORDS_FOUND": "No assignment policies found" | ||||
|       }, | ||||
|       "CREATE": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Create assignment policy" | ||||
|         }, | ||||
|         "CREATE_BUTTON": "Create policy", | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Assignment policy created successfully", | ||||
|           "ERROR_MESSAGE": "Failed to create assignment policy" | ||||
|         } | ||||
|       }, | ||||
|       "EDIT": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Edit assignment policy" | ||||
|         }, | ||||
|         "EDIT_BUTTON": "Update policy", | ||||
|         "CONFIRM_ADD_INBOX_DIALOG": { | ||||
|           "TITLE": "Add inbox", | ||||
|           "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", | ||||
|           "CONFIRM_BUTTON_LABEL": "Continue", | ||||
|           "CANCEL_BUTTON_LABEL": "Peruuta" | ||||
|         }, | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Assignment policy updated successfully", | ||||
|           "ERROR_MESSAGE": "Failed to update assignment policy" | ||||
|         }, | ||||
|         "INBOX_API": { | ||||
|           "ADD": { | ||||
|             "SUCCESS_MESSAGE": "Inbox added to policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to add inbox to policy" | ||||
|           }, | ||||
|           "REMOVE": { | ||||
|             "SUCCESS_MESSAGE": "Inbox removed from policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to remove inbox from policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "FORM": { | ||||
|         "NAME": { | ||||
|           "LABEL": "Policy name:", | ||||
|           "PLACEHOLDER": "Enter policy name" | ||||
|         }, | ||||
|         "DESCRIPTION": { | ||||
|           "LABEL": "Kuvaus:", | ||||
|           "PLACEHOLDER": "Enter description" | ||||
|         }, | ||||
|         "STATUS": { | ||||
|           "LABEL": "Tila:", | ||||
|           "PLACEHOLDER": "Select status", | ||||
|           "ACTIVE": "Policy is active", | ||||
|           "INACTIVE": "Policy is inactive" | ||||
|         }, | ||||
|         "ASSIGNMENT_ORDER": { | ||||
|           "LABEL": "Assignment order", | ||||
|           "ROUND_ROBIN": { | ||||
|             "LABEL": "Round robin", | ||||
|             "DESCRIPTION": "Assign conversations evenly among agents." | ||||
|           }, | ||||
|           "BALANCED": { | ||||
|             "LABEL": "Balanced", | ||||
|             "DESCRIPTION": "Assign conversations based on available capacity." | ||||
|           } | ||||
|         }, | ||||
|         "ASSIGNMENT_PRIORITY": { | ||||
|           "LABEL": "Assignment priority", | ||||
|           "EARLIEST_CREATED": { | ||||
|             "LABEL": "Earliest created", | ||||
|             "DESCRIPTION": "The conversation that was created first gets assigned first." | ||||
|           }, | ||||
|           "LONGEST_WAITING": { | ||||
|             "LABEL": "Longest waiting", | ||||
|             "DESCRIPTION": "The conversation waiting the longest gets assigned first." | ||||
|           } | ||||
|         }, | ||||
|         "FAIR_DISTRIBUTION": { | ||||
|           "LABEL": "Fair distribution policy", | ||||
|           "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.", | ||||
|           "INPUT_MAX": "Assign max", | ||||
|           "DURATION": "Conversations per agent in every" | ||||
|         }, | ||||
|         "INBOXES": { | ||||
|           "LABEL": "Added inboxes", | ||||
|           "DESCRIPTION": "Add inboxes for which this policy will be applicable.", | ||||
|           "ADD_BUTTON": "Add inbox", | ||||
|           "DROPDOWN": { | ||||
|             "SEARCH_PLACEHOLDER": "Search and select inboxes to add", | ||||
|             "ADD_BUTTON": "Add" | ||||
|           }, | ||||
|           "EMPTY_STATE": "No inboxes added to this policy, add an inbox to get started", | ||||
|           "API": { | ||||
|             "SUCCESS_MESSAGE": "Inbox successfully added to policy", | ||||
|             "ERROR_MESSAGE": "Failed to add inbox to policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "DELETE_POLICY": { | ||||
|         "SUCCESS_MESSAGE": "Assignment policy deleted successfully", | ||||
|         "ERROR_MESSAGE": "Failed to delete assignment policy" | ||||
|       } | ||||
|     }, | ||||
|     "AGENT_CAPACITY_POLICY": { | ||||
|       "INDEX": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Agent capacity", | ||||
|           "CREATE_POLICY": "New policy" | ||||
|         }, | ||||
|         "CARD": { | ||||
|           "POPOVER": "Added agents", | ||||
|           "EDIT": "Muokkaa" | ||||
|         }, | ||||
|         "NO_RECORDS_FOUND": "No agent capacity policies found" | ||||
|       }, | ||||
|       "CREATE": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Create agent capacity policy" | ||||
|         }, | ||||
|         "CREATE_BUTTON": "Create policy", | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Agent capacity policy created successfully", | ||||
|           "ERROR_MESSAGE": "Failed to create agent capacity policy" | ||||
|         } | ||||
|       }, | ||||
|       "EDIT": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Edit agent capacity policy" | ||||
|         }, | ||||
|         "EDIT_BUTTON": "Update policy", | ||||
|         "CONFIRM_ADD_AGENT_DIALOG": { | ||||
|           "TITLE": "Add agent", | ||||
|           "DESCRIPTION": "{agentName} is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", | ||||
|           "CONFIRM_BUTTON_LABEL": "Continue", | ||||
|           "CANCEL_BUTTON_LABEL": "Peruuta" | ||||
|         }, | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Agent capacity policy updated successfully", | ||||
|           "ERROR_MESSAGE": "Failed to update agent capacity policy" | ||||
|         }, | ||||
|         "AGENT_API": { | ||||
|           "ADD": { | ||||
|             "SUCCESS_MESSAGE": "Agent added to policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to add agent to policy" | ||||
|           }, | ||||
|           "REMOVE": { | ||||
|             "SUCCESS_MESSAGE": "Agent removed from policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to remove agent from policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "FORM": { | ||||
|         "NAME": { | ||||
|           "LABEL": "Policy name:", | ||||
|           "PLACEHOLDER": "Enter policy name" | ||||
|         }, | ||||
|         "DESCRIPTION": { | ||||
|           "LABEL": "Kuvaus:", | ||||
|           "PLACEHOLDER": "Enter description" | ||||
|         }, | ||||
|         "INBOX_CAPACITY_LIMIT": { | ||||
|           "LABEL": "Inbox capacity limits", | ||||
|           "ADD_BUTTON": "Add inbox", | ||||
|           "FIELD": { | ||||
|             "SELECT_INBOX": "Select inbox", | ||||
|             "MAX_CONVERSATIONS": "Max conversations", | ||||
|             "SET_LIMIT": "Set limit" | ||||
|           }, | ||||
|           "EMPTY_STATE": "No inbox limit set" | ||||
|         }, | ||||
|         "EXCLUSION_RULES": { | ||||
|           "LABEL": "Exclusion rules", | ||||
|           "DESCRIPTION": "Conversations that satisfy the following conditions would not count towards agent capacity", | ||||
|           "TAGS": { | ||||
|             "LABEL": "Exclude conversations tagged with specific labels", | ||||
|             "ADD_TAG": "add tag", | ||||
|             "DROPDOWN": { | ||||
|               "SEARCH_PLACEHOLDER": "Search and select tags to add" | ||||
|             }, | ||||
|             "EMPTY_STATE": "No tags added to this policy." | ||||
|           }, | ||||
|           "DURATION": { | ||||
|             "LABEL": "Exclude conversations older than a specified duration", | ||||
|             "PLACEHOLDER": "Set time" | ||||
|           } | ||||
|         }, | ||||
|         "USERS": { | ||||
|           "LABEL": "Assigned agents", | ||||
|           "DESCRIPTION": "Add agents for which this policy will be applicable.", | ||||
|           "ADD_BUTTON": "Add agent", | ||||
|           "DROPDOWN": { | ||||
|             "SEARCH_PLACEHOLDER": "Search and select agents to add", | ||||
|             "ADD_BUTTON": "Add" | ||||
|           }, | ||||
|           "EMPTY_STATE": "No agents added", | ||||
|           "API": { | ||||
|             "SUCCESS_MESSAGE": "Agent successfully added to policy", | ||||
|             "ERROR_MESSAGE": "Failed to add agent to policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "DELETE_POLICY": { | ||||
|         "SUCCESS_MESSAGE": "Agent capacity policy deleted successfully", | ||||
|         "ERROR_MESSAGE": "Failed to delete agent capacity policy" | ||||
|       } | ||||
|     }, | ||||
|     "DELETE_POLICY": { | ||||
|       "TITLE": "Delete policy", | ||||
|       "DESCRIPTION": "Are you sure you want to delete this policy? This action cannot be undone.", | ||||
|       "CONFIRM_BUTTON_LABEL": "Poista", | ||||
|       "CANCEL_BUTTON_LABEL": "Peruuta" | ||||
|     } | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -71,7 +71,7 @@ | ||||
|       "EDIT": "{agentName} updated the account configuration (#{id})" | ||||
|     }, | ||||
|     "CONVERSATION": { | ||||
|       "DELETE": "{agentName} deleted conversation #{id}" | ||||
|       "DELETE": "{agentName} a supprimé la conversation #{id}" | ||||
|     } | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -131,7 +131,7 @@ | ||||
|       "CONVERSATION_CREATED": "Conversation créée", | ||||
|       "CONVERSATION_UPDATED": "Conversation mise à jour", | ||||
|       "MESSAGE_CREATED": "Message créé", | ||||
|       "CONVERSATION_RESOLVED": "Conversation Resolved", | ||||
|       "CONVERSATION_RESOLVED": "Conversation terminée", | ||||
|       "CONVERSATION_OPENED": "Conversation ouverte" | ||||
|     }, | ||||
|     "ACTIONS": { | ||||
| @@ -153,8 +153,8 @@ | ||||
|       "OPEN_CONVERSATION": "Ouvrir la conversation" | ||||
|     }, | ||||
|     "MESSAGE_TYPES": { | ||||
|       "INCOMING": "Incoming Message", | ||||
|       "OUTGOING": "Outgoing Message" | ||||
|       "INCOMING": "Boite de réception", | ||||
|       "OUTGOING": "Message envoyé" | ||||
|     }, | ||||
|     "PRIORITY_TYPES": { | ||||
|       "NONE": "Aucun", | ||||
|   | ||||
| @@ -138,11 +138,11 @@ | ||||
|       } | ||||
|     }, | ||||
|     "WHATSAPP": { | ||||
|       "HEADER_TITLE": "WhatsApp campaigns", | ||||
|       "HEADER_TITLE": "Campagnes WhatsApp", | ||||
|       "NEW_CAMPAIGN": "Create campaign", | ||||
|       "EMPTY_STATE": { | ||||
|         "TITLE": "No WhatsApp campaigns are available", | ||||
|         "SUBTITLE": "Launch a WhatsApp campaign to reach your customers directly. Send offers or make announcements with ease. Click 'Create campaign' to get started." | ||||
|         "TITLE": "Aucune campagne WhatsApp n’est disponible", | ||||
|         "SUBTITLE": "Lancez une campagne WhatsApp pour toucher directement vos clients. Envoyez des offres ou faites des annonces en toute simplicité. Cliquez sur “Créer une campagne” pour commencer." | ||||
|       }, | ||||
|       "CARD": { | ||||
|         "STATUS": { | ||||
| @@ -155,7 +155,7 @@ | ||||
|         } | ||||
|       }, | ||||
|       "CREATE": { | ||||
|         "TITLE": "Create WhatsApp campaign", | ||||
|         "TITLE": "Créer une campagne WhatsApp", | ||||
|         "CANCEL_BUTTON_TEXT": "Annuler", | ||||
|         "CREATE_BUTTON_TEXT": "Créer", | ||||
|         "FORM": { | ||||
| @@ -170,15 +170,15 @@ | ||||
|             "ERROR": "La boîte de réception est requise" | ||||
|           }, | ||||
|           "TEMPLATE": { | ||||
|             "LABEL": "WhatsApp Template", | ||||
|             "PLACEHOLDER": "Select a template", | ||||
|             "INFO": "Select a template to use for this campaign.", | ||||
|             "ERROR": "Template is required", | ||||
|             "LABEL": "Modèle WhatsApp", | ||||
|             "PLACEHOLDER": "Sélectionner un modèle", | ||||
|             "INFO": "Sélectionnez un modèle pour cette campagne.", | ||||
|             "ERROR": "Un modèle est requis", | ||||
|             "PREVIEW_TITLE": "Traiter {templateName}", | ||||
|             "LANGUAGE": "Langue", | ||||
|             "CATEGORY": "Catégorie", | ||||
|             "VARIABLES_LABEL": "Variables", | ||||
|             "VARIABLE_PLACEHOLDER": "Enter value for {variable}" | ||||
|             "VARIABLE_PLACEHOLDER": "Entrez une valeur pour {variable}" | ||||
|           }, | ||||
|           "AUDIENCE": { | ||||
|             "LABEL": "Audience", | ||||
| @@ -195,7 +195,7 @@ | ||||
|             "CANCEL": "Annuler" | ||||
|           }, | ||||
|           "API": { | ||||
|             "SUCCESS_MESSAGE": "WhatsApp campaign created successfully", | ||||
|             "SUCCESS_MESSAGE": "Campagne WhatsApp créée avec succès", | ||||
|             "ERROR_MESSAGE": "Une erreur est survenue, veuillez réessayer." | ||||
|           } | ||||
|         } | ||||
|   | ||||
| @@ -51,6 +51,6 @@ | ||||
|     "PLACEHOLDER": "Entrez la durée" | ||||
|   }, | ||||
|   "CHANNEL_SELECTOR": { | ||||
|     "COMING_SOON": "Coming Soon!" | ||||
|     "COMING_SOON": "Bientôt disponible !" | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -17,10 +17,10 @@ | ||||
|     "IP_ADDRESS": "Adresse IP", | ||||
|     "CREATED_AT_LABEL": "Créé", | ||||
|     "NEW_MESSAGE": "Nouveau message", | ||||
|     "CALL": "Call", | ||||
|     "CALL_UNDER_DEVELOPMENT": "Calling is under development", | ||||
|     "CALL": "Appel", | ||||
|     "CALL_UNDER_DEVELOPMENT": "Appel en cours de développement", | ||||
|     "VOICE_INBOX_PICKER": { | ||||
|       "TITLE": "Choose a voice inbox" | ||||
|       "TITLE": "Choisir une boîte de réception vocale" | ||||
|     }, | ||||
|     "CONVERSATIONS": { | ||||
|       "NO_RECORDS_FOUND": "Il n'y a aucune conversation précédente associée à ce contact.", | ||||
| @@ -290,7 +290,7 @@ | ||||
|     "HEADER": { | ||||
|       "TITLE": "Contacts", | ||||
|       "SEARCH_TITLE": "Search contacts", | ||||
|       "ACTIVE_TITLE": "Active contacts", | ||||
|       "ACTIVE_TITLE": "Contacts actifs", | ||||
|       "SEARCH_PLACEHOLDER": "Search...", | ||||
|       "MESSAGE_BUTTON": "Message", | ||||
|       "SEND_MESSAGE": "Envoyer un message", | ||||
| @@ -465,8 +465,8 @@ | ||||
|         } | ||||
|       }, | ||||
|       "DELETE_CONTACT": { | ||||
|         "MESSAGE": "This action is permanent and irreversible.", | ||||
|         "BUTTON": "Delete now" | ||||
|         "MESSAGE": "Cette action est permanente et irréversible.", | ||||
|         "BUTTON": "Supprimer maintenant" | ||||
|       } | ||||
|     }, | ||||
|     "DETAILS": { | ||||
| @@ -476,7 +476,7 @@ | ||||
|       "DELETE_CONTACT": "Supprimer le contact", | ||||
|       "DELETE_DIALOG": { | ||||
|         "TITLE": "Confirmer la suppression", | ||||
|         "DESCRIPTION": "Are you sure you want to delete this contact?", | ||||
|         "DESCRIPTION": "Êtes-vous sûr de vouloir supprimer ce contact ?", | ||||
|         "CONFIRM": "Oui, supprimer", | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Contact supprimé avec succès", | ||||
| @@ -566,7 +566,7 @@ | ||||
|       "BUTTON_LABEL": "Add contact", | ||||
|       "SEARCH_EMPTY_STATE_TITLE": "Aucun contact ne correspond à votre recherche 🔍", | ||||
|       "LIST_EMPTY_STATE_TITLE": "No contacts available in this view 📋", | ||||
|       "ACTIVE_EMPTY_STATE_TITLE": "No contacts are active at the moment 🌙" | ||||
|       "ACTIVE_EMPTY_STATE_TITLE": "Aucun contact n'est actif pour le moment 🌙" | ||||
|     } | ||||
|   }, | ||||
|   "COMPOSE_NEW_CONVERSATION": { | ||||
|   | ||||
| @@ -1,33 +1,33 @@ | ||||
| { | ||||
|   "CONTENT_TEMPLATES": { | ||||
|     "MODAL": { | ||||
|       "TITLE": "Twilio Templates", | ||||
|       "SUBTITLE": "Select the Twilio template you want to send", | ||||
|       "TEMPLATE_SELECTED_SUBTITLE": "Configure template: {templateName}" | ||||
|       "TITLE": "Modèles Twilio", | ||||
|       "SUBTITLE": "Sélectionnez le modèle Twilio que vous souhaitez envoyer", | ||||
|       "TEMPLATE_SELECTED_SUBTITLE": "Configurer le modèle : {templateName}" | ||||
|     }, | ||||
|     "PICKER": { | ||||
|       "SEARCH_PLACEHOLDER": "Rechercher des modèles", | ||||
|       "NO_TEMPLATES_FOUND": "Aucun modèle trouvé pour", | ||||
|       "NO_CONTENT": "No content", | ||||
|       "HEADER": "Header", | ||||
|       "BODY": "Body", | ||||
|       "FOOTER": "Footer", | ||||
|       "BUTTONS": "Buttons", | ||||
|       "HEADER": "En-tête", | ||||
|       "BODY": "Corps", | ||||
|       "FOOTER": "Pied de page", | ||||
|       "BUTTONS": "Boutons", | ||||
|       "CATEGORY": "Catégorie", | ||||
|       "MEDIA_CONTENT": "Media Content", | ||||
|       "MEDIA_CONTENT_FALLBACK": "media content", | ||||
|       "NO_TEMPLATES_AVAILABLE": "No Twilio templates available. Click refresh to sync templates from Twilio.", | ||||
|       "REFRESH_BUTTON": "Refresh templates", | ||||
|       "REFRESH_SUCCESS": "Templates refresh initiated. It may take a couple of minutes to update.", | ||||
|       "REFRESH_ERROR": "Failed to refresh templates. Please try again.", | ||||
|       "MEDIA_CONTENT": "Contenu média", | ||||
|       "MEDIA_CONTENT_FALLBACK": "contenu multimédia", | ||||
|       "NO_TEMPLATES_AVAILABLE": "Aucun modèle Twilio disponible. Cliquez sur Actualiser pour synchroniser les modèles de Twilio.", | ||||
|       "REFRESH_BUTTON": "Rafraîchir les modèles", | ||||
|       "REFRESH_SUCCESS": "Mise à jour des modèles. La mise à jour peut prendre quelques minutes.", | ||||
|       "REFRESH_ERROR": "Échec de la mise à jour des modèles. Veuillez réessayer.", | ||||
|       "LABELS": { | ||||
|         "LANGUAGE": "Langue", | ||||
|         "TEMPLATE_BODY": "Corps du modèle", | ||||
|         "CATEGORY": "Catégorie" | ||||
|       }, | ||||
|       "TYPES": { | ||||
|         "MEDIA": "Media", | ||||
|         "QUICK_REPLY": "Quick Reply", | ||||
|         "MEDIA": "Média", | ||||
|         "QUICK_REPLY": "Réponse rapide", | ||||
|         "TEXT": "Texte" | ||||
|       } | ||||
|     }, | ||||
| @@ -39,8 +39,8 @@ | ||||
|       "GO_BACK_LABEL": "Retour", | ||||
|       "SEND_MESSAGE_LABEL": "Envoyer un message", | ||||
|       "FORM_ERROR_MESSAGE": "Veuillez remplir toutes les variables avant d'envoyer", | ||||
|       "MEDIA_HEADER_LABEL": "{type} Header", | ||||
|       "MEDIA_URL_LABEL": "Enter full media URL", | ||||
|       "MEDIA_HEADER_LABEL": "En-tête {type}", | ||||
|       "MEDIA_URL_LABEL": "Saisissez l'URL complète du média", | ||||
|       "MEDIA_URL_PLACEHOLDER": "https://example.com/image.jpg" | ||||
|     }, | ||||
|     "FORM": { | ||||
|   | ||||
| @@ -35,11 +35,11 @@ | ||||
|     "API_HOURS_WINDOW": "Vous ne pouvez répondre à cette conversation que dans un délai de {hours} heures", | ||||
|     "NOT_ASSIGNED_TO_YOU": "Cette conversation ne vous est pas assignée. Voulez-vous vous assigner cette conversation ?", | ||||
|     "ASSIGN_TO_ME": "M’assigner la conversation", | ||||
|     "BOT_HANDOFF_MESSAGE": "You are responding to a conversation which is currently handled by an assistant or a bot.", | ||||
|     "BOT_HANDOFF_ACTION": "Mark open and assign to you", | ||||
|     "BOT_HANDOFF_REOPEN_ACTION": "Mark conversation open", | ||||
|     "BOT_HANDOFF_SUCCESS": "Conversation has been handed over to you", | ||||
|     "BOT_HANDOFF_ERROR": "Failed to take over the conversation. Please try again.", | ||||
|     "BOT_HANDOFF_MESSAGE": "Vous répondez à une conversation actuellement gérée par un assistant ou un bot.", | ||||
|     "BOT_HANDOFF_ACTION": "Ouvrir et m’attribuer", | ||||
|     "BOT_HANDOFF_REOPEN_ACTION": "Marquer la conversation comme ouverte", | ||||
|     "BOT_HANDOFF_SUCCESS": "La conversation vous a été attribuée", | ||||
|     "BOT_HANDOFF_ERROR": "Impossible de reprendre la conversation. Veuillez réessayer.", | ||||
|     "TWILIO_WHATSAPP_CAN_REPLY": "Vous pouvez seulement répondre à cette conversation en utilisant un modèle de message en raison de", | ||||
|     "TWILIO_WHATSAPP_24_HOURS_WINDOW": "Restriction de fenêtre de message de 24 heures", | ||||
|     "OLD_INSTAGRAM_INBOX_REPLY_BANNER": "Ce compte Instagram a été migré vers la nouvelle boîte de réception du canal Instagram. Tous les nouveaux messages y apparaîtront. Vous ne pourrez plus envoyer de messages depuis cette conversation.", | ||||
| @@ -71,11 +71,22 @@ | ||||
|       "SHOW_LABELS": "Afficher les étiquettes", | ||||
|       "HIDE_LABELS": "Masquer les étiquettes" | ||||
|     }, | ||||
|     "VOICE_CALL": { | ||||
|       "INCOMING_CALL": "Appel entrant", | ||||
|       "OUTGOING_CALL": "Appel sortant", | ||||
|       "CALL_IN_PROGRESS": "Appel en cours", | ||||
|       "NO_ANSWER": "Pas de réponse", | ||||
|       "MISSED_CALL": "Appel manqué", | ||||
|       "CALL_ENDED": "Appel terminé", | ||||
|       "NOT_ANSWERED_YET": "Pas encore répondu", | ||||
|       "THEY_ANSWERED": "Il a répondu", | ||||
|       "YOU_ANSWERED": "Vous avez répondu" | ||||
|     }, | ||||
|     "HEADER": { | ||||
|       "RESOLVE_ACTION": "Résoudre", | ||||
|       "REOPEN_ACTION": "Ré-ouvrir", | ||||
|       "OPEN_ACTION": "Ouvert", | ||||
|       "MORE_ACTIONS": "More actions", | ||||
|       "MORE_ACTIONS": "Plus d'actions", | ||||
|       "OPEN": "Plus", | ||||
|       "CLOSE": "Fermer", | ||||
|       "DETAILS": "détails", | ||||
| @@ -128,8 +139,8 @@ | ||||
|       } | ||||
|     }, | ||||
|     "DELETE_CONVERSATION": { | ||||
|       "TITLE": "Delete conversation #{conversationId}", | ||||
|       "DESCRIPTION": "Are you sure you want to delete this conversation?", | ||||
|       "TITLE": "Supprimer la conversation #{conversationId}", | ||||
|       "DESCRIPTION": "Êtes-vous sûr de vouloir supprimer cette conversation ?", | ||||
|       "CONFIRM": "Supprimer" | ||||
|     }, | ||||
|     "CARD_CONTEXT_MENU": { | ||||
| @@ -148,10 +159,10 @@ | ||||
|       "ASSIGN_LABEL": "Assigner une étiquette", | ||||
|       "AGENTS_LOADING": "Chargement des agents...", | ||||
|       "ASSIGN_TEAM": "Assigner une équipe", | ||||
|       "DELETE": "Delete conversation", | ||||
|       "OPEN_IN_NEW_TAB": "Open in new tab", | ||||
|       "COPY_LINK": "Copy conversation link", | ||||
|       "COPY_LINK_SUCCESS": "Conversation link copied to clipboard", | ||||
|       "DELETE": "Supprimer la conversation", | ||||
|       "OPEN_IN_NEW_TAB": "Ouvrir dans un nouvel onglet", | ||||
|       "COPY_LINK": "Copier le lien de la conversation", | ||||
|       "COPY_LINK_SUCCESS": "Le lien de conversation a été copié dans le presse-papiers", | ||||
|       "API": { | ||||
|         "AGENT_ASSIGNMENT": { | ||||
|           "SUCCESFUL": "Conversation id {conversationId} assignée à \"{agentName}\"", | ||||
| @@ -226,8 +237,8 @@ | ||||
|     "ASSIGN_LABEL_SUCCESFUL": "Étiquette attribuée avec succès", | ||||
|     "ASSIGN_LABEL_FAILED": "Échec de l'attribution de l'étiquette", | ||||
|     "CHANGE_TEAM": "L'équipe de conversation a été modifiée", | ||||
|     "SUCCESS_DELETE_CONVERSATION": "Conversation deleted successfully", | ||||
|     "FAIL_DELETE_CONVERSATION": "Couldn't delete conversation! Try again", | ||||
|     "SUCCESS_DELETE_CONVERSATION": "Conversation supprimée avec succès", | ||||
|     "FAIL_DELETE_CONVERSATION": "Impossible de supprimer la conversation ! Veuillez réessayer", | ||||
|     "FILE_SIZE_LIMIT": "Le fichier dépasse la limite de {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} pour les pièces jointes", | ||||
|     "MESSAGE_ERROR": "Impossible d'envoyer ce message, veuillez réessayer plus tard", | ||||
|     "SENT_BY": "Envoyé par:", | ||||
|   | ||||
| @@ -51,6 +51,13 @@ | ||||
|             "LARGER": "Larger", | ||||
|             "EXTRA_LARGE": "Extra Large" | ||||
|           } | ||||
|         }, | ||||
|         "LANGUAGE": { | ||||
|           "TITLE": "Preferred Language", | ||||
|           "NOTE": "Choose the language you want to use.", | ||||
|           "UPDATE_SUCCESS": "Your Language settings have been updated successfully", | ||||
|           "UPDATE_ERROR": "There is an error while updating the language settings, please try again", | ||||
|           "USE_ACCOUNT_DEFAULT": "Use account default" | ||||
|         } | ||||
|       }, | ||||
|       "MESSAGE_SIGNATURE_SECTION": { | ||||
| @@ -330,6 +337,7 @@ | ||||
|     "REPORTS_LABEL": "Étiquettes", | ||||
|     "REPORTS_INBOX": "Boîte de réception", | ||||
|     "REPORTS_TEAM": "Équipes", | ||||
|     "AGENT_ASSIGNMENT": "Agent Assignment", | ||||
|     "SET_AVAILABILITY_TITLE": "Se définir comme", | ||||
|     "SET_YOUR_AVAILABILITY": "Définissez votre disponibilité", | ||||
|     "SLA": "SLA", | ||||
| @@ -418,5 +426,255 @@ | ||||
|       "SWITCH_TO_REPLY": "Basculer vers la réponse", | ||||
|       "TOGGLE_SNOOZE_DROPDOWN": "Activer/désactiver la liste déroulante de répétition" | ||||
|     } | ||||
|   }, | ||||
|   "ASSIGNMENT_POLICY": { | ||||
|     "INDEX": { | ||||
|       "HEADER": { | ||||
|         "TITLE": "Agent assignment", | ||||
|         "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here" | ||||
|       }, | ||||
|       "ASSIGNMENT_POLICY": { | ||||
|         "TITLE": "Assignment policy", | ||||
|         "DESCRIPTION": "Manage how conversations get assigned in inboxes.", | ||||
|         "FEATURES": [ | ||||
|           "Assign by conversations evenly or by available capacity", | ||||
|           "Add fair distribution rules to avoid overloading any agent", | ||||
|           "Add inboxes to a policy - one policy per inbox" | ||||
|         ] | ||||
|       }, | ||||
|       "AGENT_CAPACITY_POLICY": { | ||||
|         "TITLE": "Agent capacity policy", | ||||
|         "DESCRIPTION": "Manage workload for agents.", | ||||
|         "FEATURES": [ | ||||
|           "Define maximum conversations per inbox", | ||||
|           "Create exceptions based on labels and time", | ||||
|           "Add agents to a policy - one policy per agent" | ||||
|         ] | ||||
|       } | ||||
|     }, | ||||
|     "AGENT_ASSIGNMENT_POLICY": { | ||||
|       "INDEX": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Assignment policy", | ||||
|           "CREATE_POLICY": "New policy" | ||||
|         }, | ||||
|         "CARD": { | ||||
|           "ORDER": "Order", | ||||
|           "PRIORITY": "Priorité", | ||||
|           "ACTIVE": "Actif", | ||||
|           "INACTIVE": "Inactive", | ||||
|           "POPOVER": "Added inboxes", | ||||
|           "EDIT": "Modifier" | ||||
|         }, | ||||
|         "NO_RECORDS_FOUND": "No assignment policies found" | ||||
|       }, | ||||
|       "CREATE": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Create assignment policy" | ||||
|         }, | ||||
|         "CREATE_BUTTON": "Create policy", | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Assignment policy created successfully", | ||||
|           "ERROR_MESSAGE": "Failed to create assignment policy" | ||||
|         } | ||||
|       }, | ||||
|       "EDIT": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Edit assignment policy" | ||||
|         }, | ||||
|         "EDIT_BUTTON": "Update policy", | ||||
|         "CONFIRM_ADD_INBOX_DIALOG": { | ||||
|           "TITLE": "Add inbox", | ||||
|           "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", | ||||
|           "CONFIRM_BUTTON_LABEL": "Continue", | ||||
|           "CANCEL_BUTTON_LABEL": "Annuler" | ||||
|         }, | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Assignment policy updated successfully", | ||||
|           "ERROR_MESSAGE": "Failed to update assignment policy" | ||||
|         }, | ||||
|         "INBOX_API": { | ||||
|           "ADD": { | ||||
|             "SUCCESS_MESSAGE": "Inbox added to policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to add inbox to policy" | ||||
|           }, | ||||
|           "REMOVE": { | ||||
|             "SUCCESS_MESSAGE": "Inbox removed from policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to remove inbox from policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "FORM": { | ||||
|         "NAME": { | ||||
|           "LABEL": "Policy name:", | ||||
|           "PLACEHOLDER": "Enter policy name" | ||||
|         }, | ||||
|         "DESCRIPTION": { | ||||
|           "LABEL": "Description:", | ||||
|           "PLACEHOLDER": "Enter description" | ||||
|         }, | ||||
|         "STATUS": { | ||||
|           "LABEL": "État:", | ||||
|           "PLACEHOLDER": "Select status", | ||||
|           "ACTIVE": "Policy is active", | ||||
|           "INACTIVE": "Policy is inactive" | ||||
|         }, | ||||
|         "ASSIGNMENT_ORDER": { | ||||
|           "LABEL": "Assignment order", | ||||
|           "ROUND_ROBIN": { | ||||
|             "LABEL": "Round robin", | ||||
|             "DESCRIPTION": "Assign conversations evenly among agents." | ||||
|           }, | ||||
|           "BALANCED": { | ||||
|             "LABEL": "Balanced", | ||||
|             "DESCRIPTION": "Assign conversations based on available capacity." | ||||
|           } | ||||
|         }, | ||||
|         "ASSIGNMENT_PRIORITY": { | ||||
|           "LABEL": "Assignment priority", | ||||
|           "EARLIEST_CREATED": { | ||||
|             "LABEL": "Earliest created", | ||||
|             "DESCRIPTION": "The conversation that was created first gets assigned first." | ||||
|           }, | ||||
|           "LONGEST_WAITING": { | ||||
|             "LABEL": "Longest waiting", | ||||
|             "DESCRIPTION": "The conversation waiting the longest gets assigned first." | ||||
|           } | ||||
|         }, | ||||
|         "FAIR_DISTRIBUTION": { | ||||
|           "LABEL": "Fair distribution policy", | ||||
|           "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.", | ||||
|           "INPUT_MAX": "Assign max", | ||||
|           "DURATION": "Conversations per agent in every" | ||||
|         }, | ||||
|         "INBOXES": { | ||||
|           "LABEL": "Added inboxes", | ||||
|           "DESCRIPTION": "Add inboxes for which this policy will be applicable.", | ||||
|           "ADD_BUTTON": "Add inbox", | ||||
|           "DROPDOWN": { | ||||
|             "SEARCH_PLACEHOLDER": "Search and select inboxes to add", | ||||
|             "ADD_BUTTON": "Ajouter" | ||||
|           }, | ||||
|           "EMPTY_STATE": "No inboxes added to this policy, add an inbox to get started", | ||||
|           "API": { | ||||
|             "SUCCESS_MESSAGE": "Inbox successfully added to policy", | ||||
|             "ERROR_MESSAGE": "Failed to add inbox to policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "DELETE_POLICY": { | ||||
|         "SUCCESS_MESSAGE": "Assignment policy deleted successfully", | ||||
|         "ERROR_MESSAGE": "Failed to delete assignment policy" | ||||
|       } | ||||
|     }, | ||||
|     "AGENT_CAPACITY_POLICY": { | ||||
|       "INDEX": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Agent capacity", | ||||
|           "CREATE_POLICY": "New policy" | ||||
|         }, | ||||
|         "CARD": { | ||||
|           "POPOVER": "Added agents", | ||||
|           "EDIT": "Modifier" | ||||
|         }, | ||||
|         "NO_RECORDS_FOUND": "No agent capacity policies found" | ||||
|       }, | ||||
|       "CREATE": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Create agent capacity policy" | ||||
|         }, | ||||
|         "CREATE_BUTTON": "Create policy", | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Agent capacity policy created successfully", | ||||
|           "ERROR_MESSAGE": "Failed to create agent capacity policy" | ||||
|         } | ||||
|       }, | ||||
|       "EDIT": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Edit agent capacity policy" | ||||
|         }, | ||||
|         "EDIT_BUTTON": "Update policy", | ||||
|         "CONFIRM_ADD_AGENT_DIALOG": { | ||||
|           "TITLE": "Add agent", | ||||
|           "DESCRIPTION": "{agentName} is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", | ||||
|           "CONFIRM_BUTTON_LABEL": "Continue", | ||||
|           "CANCEL_BUTTON_LABEL": "Annuler" | ||||
|         }, | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Agent capacity policy updated successfully", | ||||
|           "ERROR_MESSAGE": "Failed to update agent capacity policy" | ||||
|         }, | ||||
|         "AGENT_API": { | ||||
|           "ADD": { | ||||
|             "SUCCESS_MESSAGE": "Agent added to policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to add agent to policy" | ||||
|           }, | ||||
|           "REMOVE": { | ||||
|             "SUCCESS_MESSAGE": "Agent removed from policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to remove agent from policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "FORM": { | ||||
|         "NAME": { | ||||
|           "LABEL": "Policy name:", | ||||
|           "PLACEHOLDER": "Enter policy name" | ||||
|         }, | ||||
|         "DESCRIPTION": { | ||||
|           "LABEL": "Description:", | ||||
|           "PLACEHOLDER": "Enter description" | ||||
|         }, | ||||
|         "INBOX_CAPACITY_LIMIT": { | ||||
|           "LABEL": "Inbox capacity limits", | ||||
|           "ADD_BUTTON": "Add inbox", | ||||
|           "FIELD": { | ||||
|             "SELECT_INBOX": "Select inbox", | ||||
|             "MAX_CONVERSATIONS": "Max conversations", | ||||
|             "SET_LIMIT": "Set limit" | ||||
|           }, | ||||
|           "EMPTY_STATE": "No inbox limit set" | ||||
|         }, | ||||
|         "EXCLUSION_RULES": { | ||||
|           "LABEL": "Exclusion rules", | ||||
|           "DESCRIPTION": "Conversations that satisfy the following conditions would not count towards agent capacity", | ||||
|           "TAGS": { | ||||
|             "LABEL": "Exclude conversations tagged with specific labels", | ||||
|             "ADD_TAG": "add tag", | ||||
|             "DROPDOWN": { | ||||
|               "SEARCH_PLACEHOLDER": "Search and select tags to add" | ||||
|             }, | ||||
|             "EMPTY_STATE": "No tags added to this policy." | ||||
|           }, | ||||
|           "DURATION": { | ||||
|             "LABEL": "Exclude conversations older than a specified duration", | ||||
|             "PLACEHOLDER": "Set time" | ||||
|           } | ||||
|         }, | ||||
|         "USERS": { | ||||
|           "LABEL": "Assigned agents", | ||||
|           "DESCRIPTION": "Add agents for which this policy will be applicable.", | ||||
|           "ADD_BUTTON": "Add agent", | ||||
|           "DROPDOWN": { | ||||
|             "SEARCH_PLACEHOLDER": "Search and select agents to add", | ||||
|             "ADD_BUTTON": "Ajouter" | ||||
|           }, | ||||
|           "EMPTY_STATE": "No agents added", | ||||
|           "API": { | ||||
|             "SUCCESS_MESSAGE": "Agent successfully added to policy", | ||||
|             "ERROR_MESSAGE": "Failed to add agent to policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "DELETE_POLICY": { | ||||
|         "SUCCESS_MESSAGE": "Agent capacity policy deleted successfully", | ||||
|         "ERROR_MESSAGE": "Failed to delete agent capacity policy" | ||||
|       } | ||||
|     }, | ||||
|     "DELETE_POLICY": { | ||||
|       "TITLE": "Delete policy", | ||||
|       "DESCRIPTION": "Are you sure you want to delete this policy? This action cannot be undone.", | ||||
|       "CONFIRM_BUTTON_LABEL": "Supprimer", | ||||
|       "CANCEL_BUTTON_LABEL": "Annuler" | ||||
|     } | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -71,6 +71,17 @@ | ||||
|       "SHOW_LABELS": "הצג תויות", | ||||
|       "HIDE_LABELS": "הסתר תוויות" | ||||
|     }, | ||||
|     "VOICE_CALL": { | ||||
|       "INCOMING_CALL": "Incoming call", | ||||
|       "OUTGOING_CALL": "Outgoing call", | ||||
|       "CALL_IN_PROGRESS": "Call in progress", | ||||
|       "NO_ANSWER": "No answer", | ||||
|       "MISSED_CALL": "Missed call", | ||||
|       "CALL_ENDED": "Call ended", | ||||
|       "NOT_ANSWERED_YET": "Not answered yet", | ||||
|       "THEY_ANSWERED": "They answered", | ||||
|       "YOU_ANSWERED": "You answered" | ||||
|     }, | ||||
|     "HEADER": { | ||||
|       "RESOLVE_ACTION": "פתרון", | ||||
|       "REOPEN_ACTION": "פתח מחדש", | ||||
|   | ||||
| @@ -51,6 +51,13 @@ | ||||
|             "LARGER": "Larger", | ||||
|             "EXTRA_LARGE": "Extra Large" | ||||
|           } | ||||
|         }, | ||||
|         "LANGUAGE": { | ||||
|           "TITLE": "Preferred Language", | ||||
|           "NOTE": "Choose the language you want to use.", | ||||
|           "UPDATE_SUCCESS": "Your Language settings have been updated successfully", | ||||
|           "UPDATE_ERROR": "There is an error while updating the language settings, please try again", | ||||
|           "USE_ACCOUNT_DEFAULT": "Use account default" | ||||
|         } | ||||
|       }, | ||||
|       "MESSAGE_SIGNATURE_SECTION": { | ||||
| @@ -330,6 +337,7 @@ | ||||
|     "REPORTS_LABEL": "תוויות", | ||||
|     "REPORTS_INBOX": "תיבת הדואר הנכנס", | ||||
|     "REPORTS_TEAM": "צוות", | ||||
|     "AGENT_ASSIGNMENT": "Agent Assignment", | ||||
|     "SET_AVAILABILITY_TITLE": "הגדר את עצמך בתור", | ||||
|     "SET_YOUR_AVAILABILITY": "הגדר את הזמינות שלך", | ||||
|     "SLA": "SLA", | ||||
| @@ -418,5 +426,255 @@ | ||||
|       "SWITCH_TO_REPLY": "עבור לתשובה", | ||||
|       "TOGGLE_SNOOZE_DROPDOWN": "החלפת תפריט נודניק" | ||||
|     } | ||||
|   }, | ||||
|   "ASSIGNMENT_POLICY": { | ||||
|     "INDEX": { | ||||
|       "HEADER": { | ||||
|         "TITLE": "Agent assignment", | ||||
|         "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here" | ||||
|       }, | ||||
|       "ASSIGNMENT_POLICY": { | ||||
|         "TITLE": "Assignment policy", | ||||
|         "DESCRIPTION": "Manage how conversations get assigned in inboxes.", | ||||
|         "FEATURES": [ | ||||
|           "Assign by conversations evenly or by available capacity", | ||||
|           "Add fair distribution rules to avoid overloading any agent", | ||||
|           "Add inboxes to a policy - one policy per inbox" | ||||
|         ] | ||||
|       }, | ||||
|       "AGENT_CAPACITY_POLICY": { | ||||
|         "TITLE": "Agent capacity policy", | ||||
|         "DESCRIPTION": "Manage workload for agents.", | ||||
|         "FEATURES": [ | ||||
|           "Define maximum conversations per inbox", | ||||
|           "Create exceptions based on labels and time", | ||||
|           "Add agents to a policy - one policy per agent" | ||||
|         ] | ||||
|       } | ||||
|     }, | ||||
|     "AGENT_ASSIGNMENT_POLICY": { | ||||
|       "INDEX": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Assignment policy", | ||||
|           "CREATE_POLICY": "New policy" | ||||
|         }, | ||||
|         "CARD": { | ||||
|           "ORDER": "Order", | ||||
|           "PRIORITY": "Priority", | ||||
|           "ACTIVE": "פעיל", | ||||
|           "INACTIVE": "Inactive", | ||||
|           "POPOVER": "Added inboxes", | ||||
|           "EDIT": "ערוך" | ||||
|         }, | ||||
|         "NO_RECORDS_FOUND": "No assignment policies found" | ||||
|       }, | ||||
|       "CREATE": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Create assignment policy" | ||||
|         }, | ||||
|         "CREATE_BUTTON": "Create policy", | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Assignment policy created successfully", | ||||
|           "ERROR_MESSAGE": "Failed to create assignment policy" | ||||
|         } | ||||
|       }, | ||||
|       "EDIT": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Edit assignment policy" | ||||
|         }, | ||||
|         "EDIT_BUTTON": "Update policy", | ||||
|         "CONFIRM_ADD_INBOX_DIALOG": { | ||||
|           "TITLE": "Add inbox", | ||||
|           "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", | ||||
|           "CONFIRM_BUTTON_LABEL": "Continue", | ||||
|           "CANCEL_BUTTON_LABEL": "ביטול" | ||||
|         }, | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Assignment policy updated successfully", | ||||
|           "ERROR_MESSAGE": "Failed to update assignment policy" | ||||
|         }, | ||||
|         "INBOX_API": { | ||||
|           "ADD": { | ||||
|             "SUCCESS_MESSAGE": "Inbox added to policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to add inbox to policy" | ||||
|           }, | ||||
|           "REMOVE": { | ||||
|             "SUCCESS_MESSAGE": "Inbox removed from policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to remove inbox from policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "FORM": { | ||||
|         "NAME": { | ||||
|           "LABEL": "Policy name:", | ||||
|           "PLACEHOLDER": "Enter policy name" | ||||
|         }, | ||||
|         "DESCRIPTION": { | ||||
|           "LABEL": "תיאור:", | ||||
|           "PLACEHOLDER": "Enter description" | ||||
|         }, | ||||
|         "STATUS": { | ||||
|           "LABEL": "מצב:", | ||||
|           "PLACEHOLDER": "Select status", | ||||
|           "ACTIVE": "Policy is active", | ||||
|           "INACTIVE": "Policy is inactive" | ||||
|         }, | ||||
|         "ASSIGNMENT_ORDER": { | ||||
|           "LABEL": "Assignment order", | ||||
|           "ROUND_ROBIN": { | ||||
|             "LABEL": "Round robin", | ||||
|             "DESCRIPTION": "Assign conversations evenly among agents." | ||||
|           }, | ||||
|           "BALANCED": { | ||||
|             "LABEL": "Balanced", | ||||
|             "DESCRIPTION": "Assign conversations based on available capacity." | ||||
|           } | ||||
|         }, | ||||
|         "ASSIGNMENT_PRIORITY": { | ||||
|           "LABEL": "Assignment priority", | ||||
|           "EARLIEST_CREATED": { | ||||
|             "LABEL": "Earliest created", | ||||
|             "DESCRIPTION": "The conversation that was created first gets assigned first." | ||||
|           }, | ||||
|           "LONGEST_WAITING": { | ||||
|             "LABEL": "Longest waiting", | ||||
|             "DESCRIPTION": "The conversation waiting the longest gets assigned first." | ||||
|           } | ||||
|         }, | ||||
|         "FAIR_DISTRIBUTION": { | ||||
|           "LABEL": "Fair distribution policy", | ||||
|           "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.", | ||||
|           "INPUT_MAX": "Assign max", | ||||
|           "DURATION": "Conversations per agent in every" | ||||
|         }, | ||||
|         "INBOXES": { | ||||
|           "LABEL": "Added inboxes", | ||||
|           "DESCRIPTION": "Add inboxes for which this policy will be applicable.", | ||||
|           "ADD_BUTTON": "Add inbox", | ||||
|           "DROPDOWN": { | ||||
|             "SEARCH_PLACEHOLDER": "Search and select inboxes to add", | ||||
|             "ADD_BUTTON": "הוסף" | ||||
|           }, | ||||
|           "EMPTY_STATE": "No inboxes added to this policy, add an inbox to get started", | ||||
|           "API": { | ||||
|             "SUCCESS_MESSAGE": "Inbox successfully added to policy", | ||||
|             "ERROR_MESSAGE": "Failed to add inbox to policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "DELETE_POLICY": { | ||||
|         "SUCCESS_MESSAGE": "Assignment policy deleted successfully", | ||||
|         "ERROR_MESSAGE": "Failed to delete assignment policy" | ||||
|       } | ||||
|     }, | ||||
|     "AGENT_CAPACITY_POLICY": { | ||||
|       "INDEX": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Agent capacity", | ||||
|           "CREATE_POLICY": "New policy" | ||||
|         }, | ||||
|         "CARD": { | ||||
|           "POPOVER": "Added agents", | ||||
|           "EDIT": "ערוך" | ||||
|         }, | ||||
|         "NO_RECORDS_FOUND": "No agent capacity policies found" | ||||
|       }, | ||||
|       "CREATE": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Create agent capacity policy" | ||||
|         }, | ||||
|         "CREATE_BUTTON": "Create policy", | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Agent capacity policy created successfully", | ||||
|           "ERROR_MESSAGE": "Failed to create agent capacity policy" | ||||
|         } | ||||
|       }, | ||||
|       "EDIT": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Edit agent capacity policy" | ||||
|         }, | ||||
|         "EDIT_BUTTON": "Update policy", | ||||
|         "CONFIRM_ADD_AGENT_DIALOG": { | ||||
|           "TITLE": "Add agent", | ||||
|           "DESCRIPTION": "{agentName} is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", | ||||
|           "CONFIRM_BUTTON_LABEL": "Continue", | ||||
|           "CANCEL_BUTTON_LABEL": "ביטול" | ||||
|         }, | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Agent capacity policy updated successfully", | ||||
|           "ERROR_MESSAGE": "Failed to update agent capacity policy" | ||||
|         }, | ||||
|         "AGENT_API": { | ||||
|           "ADD": { | ||||
|             "SUCCESS_MESSAGE": "Agent added to policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to add agent to policy" | ||||
|           }, | ||||
|           "REMOVE": { | ||||
|             "SUCCESS_MESSAGE": "Agent removed from policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to remove agent from policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "FORM": { | ||||
|         "NAME": { | ||||
|           "LABEL": "Policy name:", | ||||
|           "PLACEHOLDER": "Enter policy name" | ||||
|         }, | ||||
|         "DESCRIPTION": { | ||||
|           "LABEL": "תיאור:", | ||||
|           "PLACEHOLDER": "Enter description" | ||||
|         }, | ||||
|         "INBOX_CAPACITY_LIMIT": { | ||||
|           "LABEL": "Inbox capacity limits", | ||||
|           "ADD_BUTTON": "Add inbox", | ||||
|           "FIELD": { | ||||
|             "SELECT_INBOX": "Select inbox", | ||||
|             "MAX_CONVERSATIONS": "Max conversations", | ||||
|             "SET_LIMIT": "Set limit" | ||||
|           }, | ||||
|           "EMPTY_STATE": "No inbox limit set" | ||||
|         }, | ||||
|         "EXCLUSION_RULES": { | ||||
|           "LABEL": "Exclusion rules", | ||||
|           "DESCRIPTION": "Conversations that satisfy the following conditions would not count towards agent capacity", | ||||
|           "TAGS": { | ||||
|             "LABEL": "Exclude conversations tagged with specific labels", | ||||
|             "ADD_TAG": "add tag", | ||||
|             "DROPDOWN": { | ||||
|               "SEARCH_PLACEHOLDER": "Search and select tags to add" | ||||
|             }, | ||||
|             "EMPTY_STATE": "No tags added to this policy." | ||||
|           }, | ||||
|           "DURATION": { | ||||
|             "LABEL": "Exclude conversations older than a specified duration", | ||||
|             "PLACEHOLDER": "Set time" | ||||
|           } | ||||
|         }, | ||||
|         "USERS": { | ||||
|           "LABEL": "Assigned agents", | ||||
|           "DESCRIPTION": "Add agents for which this policy will be applicable.", | ||||
|           "ADD_BUTTON": "Add agent", | ||||
|           "DROPDOWN": { | ||||
|             "SEARCH_PLACEHOLDER": "Search and select agents to add", | ||||
|             "ADD_BUTTON": "הוסף" | ||||
|           }, | ||||
|           "EMPTY_STATE": "No agents added", | ||||
|           "API": { | ||||
|             "SUCCESS_MESSAGE": "Agent successfully added to policy", | ||||
|             "ERROR_MESSAGE": "Failed to add agent to policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "DELETE_POLICY": { | ||||
|         "SUCCESS_MESSAGE": "Agent capacity policy deleted successfully", | ||||
|         "ERROR_MESSAGE": "Failed to delete agent capacity policy" | ||||
|       } | ||||
|     }, | ||||
|     "DELETE_POLICY": { | ||||
|       "TITLE": "Delete policy", | ||||
|       "DESCRIPTION": "Are you sure you want to delete this policy? This action cannot be undone.", | ||||
|       "CONFIRM_BUTTON_LABEL": "מחק", | ||||
|       "CANCEL_BUTTON_LABEL": "ביטול" | ||||
|     } | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -71,6 +71,17 @@ | ||||
|       "SHOW_LABELS": "Show labels", | ||||
|       "HIDE_LABELS": "Hide labels" | ||||
|     }, | ||||
|     "VOICE_CALL": { | ||||
|       "INCOMING_CALL": "Incoming call", | ||||
|       "OUTGOING_CALL": "Outgoing call", | ||||
|       "CALL_IN_PROGRESS": "Call in progress", | ||||
|       "NO_ANSWER": "No answer", | ||||
|       "MISSED_CALL": "Missed call", | ||||
|       "CALL_ENDED": "Call ended", | ||||
|       "NOT_ANSWERED_YET": "Not answered yet", | ||||
|       "THEY_ANSWERED": "They answered", | ||||
|       "YOU_ANSWERED": "You answered" | ||||
|     }, | ||||
|     "HEADER": { | ||||
|       "RESOLVE_ACTION": "Resolve", | ||||
|       "REOPEN_ACTION": "Reopen", | ||||
|   | ||||
| @@ -51,6 +51,13 @@ | ||||
|             "LARGER": "Larger", | ||||
|             "EXTRA_LARGE": "Extra Large" | ||||
|           } | ||||
|         }, | ||||
|         "LANGUAGE": { | ||||
|           "TITLE": "Preferred Language", | ||||
|           "NOTE": "Choose the language you want to use.", | ||||
|           "UPDATE_SUCCESS": "Your Language settings have been updated successfully", | ||||
|           "UPDATE_ERROR": "There is an error while updating the language settings, please try again", | ||||
|           "USE_ACCOUNT_DEFAULT": "Use account default" | ||||
|         } | ||||
|       }, | ||||
|       "MESSAGE_SIGNATURE_SECTION": { | ||||
| @@ -330,6 +337,7 @@ | ||||
|     "REPORTS_LABEL": "Labels", | ||||
|     "REPORTS_INBOX": "Inbox", | ||||
|     "REPORTS_TEAM": "Team", | ||||
|     "AGENT_ASSIGNMENT": "Agent Assignment", | ||||
|     "SET_AVAILABILITY_TITLE": "Set yourself as", | ||||
|     "SET_YOUR_AVAILABILITY": "Set your availability", | ||||
|     "SLA": "SLA", | ||||
| @@ -418,5 +426,255 @@ | ||||
|       "SWITCH_TO_REPLY": "Switch to Reply", | ||||
|       "TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown" | ||||
|     } | ||||
|   }, | ||||
|   "ASSIGNMENT_POLICY": { | ||||
|     "INDEX": { | ||||
|       "HEADER": { | ||||
|         "TITLE": "Agent assignment", | ||||
|         "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here" | ||||
|       }, | ||||
|       "ASSIGNMENT_POLICY": { | ||||
|         "TITLE": "Assignment policy", | ||||
|         "DESCRIPTION": "Manage how conversations get assigned in inboxes.", | ||||
|         "FEATURES": [ | ||||
|           "Assign by conversations evenly or by available capacity", | ||||
|           "Add fair distribution rules to avoid overloading any agent", | ||||
|           "Add inboxes to a policy - one policy per inbox" | ||||
|         ] | ||||
|       }, | ||||
|       "AGENT_CAPACITY_POLICY": { | ||||
|         "TITLE": "Agent capacity policy", | ||||
|         "DESCRIPTION": "Manage workload for agents.", | ||||
|         "FEATURES": [ | ||||
|           "Define maximum conversations per inbox", | ||||
|           "Create exceptions based on labels and time", | ||||
|           "Add agents to a policy - one policy per agent" | ||||
|         ] | ||||
|       } | ||||
|     }, | ||||
|     "AGENT_ASSIGNMENT_POLICY": { | ||||
|       "INDEX": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Assignment policy", | ||||
|           "CREATE_POLICY": "New policy" | ||||
|         }, | ||||
|         "CARD": { | ||||
|           "ORDER": "Order", | ||||
|           "PRIORITY": "Priority", | ||||
|           "ACTIVE": "Active", | ||||
|           "INACTIVE": "Inactive", | ||||
|           "POPOVER": "Added inboxes", | ||||
|           "EDIT": "Edit" | ||||
|         }, | ||||
|         "NO_RECORDS_FOUND": "No assignment policies found" | ||||
|       }, | ||||
|       "CREATE": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Create assignment policy" | ||||
|         }, | ||||
|         "CREATE_BUTTON": "Create policy", | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Assignment policy created successfully", | ||||
|           "ERROR_MESSAGE": "Failed to create assignment policy" | ||||
|         } | ||||
|       }, | ||||
|       "EDIT": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Edit assignment policy" | ||||
|         }, | ||||
|         "EDIT_BUTTON": "Update policy", | ||||
|         "CONFIRM_ADD_INBOX_DIALOG": { | ||||
|           "TITLE": "Add inbox", | ||||
|           "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", | ||||
|           "CONFIRM_BUTTON_LABEL": "Continue", | ||||
|           "CANCEL_BUTTON_LABEL": "Cancel" | ||||
|         }, | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Assignment policy updated successfully", | ||||
|           "ERROR_MESSAGE": "Failed to update assignment policy" | ||||
|         }, | ||||
|         "INBOX_API": { | ||||
|           "ADD": { | ||||
|             "SUCCESS_MESSAGE": "Inbox added to policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to add inbox to policy" | ||||
|           }, | ||||
|           "REMOVE": { | ||||
|             "SUCCESS_MESSAGE": "Inbox removed from policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to remove inbox from policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "FORM": { | ||||
|         "NAME": { | ||||
|           "LABEL": "Policy name:", | ||||
|           "PLACEHOLDER": "Enter policy name" | ||||
|         }, | ||||
|         "DESCRIPTION": { | ||||
|           "LABEL": "Description:", | ||||
|           "PLACEHOLDER": "Enter description" | ||||
|         }, | ||||
|         "STATUS": { | ||||
|           "LABEL": "Status:", | ||||
|           "PLACEHOLDER": "Select status", | ||||
|           "ACTIVE": "Policy is active", | ||||
|           "INACTIVE": "Policy is inactive" | ||||
|         }, | ||||
|         "ASSIGNMENT_ORDER": { | ||||
|           "LABEL": "Assignment order", | ||||
|           "ROUND_ROBIN": { | ||||
|             "LABEL": "Round robin", | ||||
|             "DESCRIPTION": "Assign conversations evenly among agents." | ||||
|           }, | ||||
|           "BALANCED": { | ||||
|             "LABEL": "Balanced", | ||||
|             "DESCRIPTION": "Assign conversations based on available capacity." | ||||
|           } | ||||
|         }, | ||||
|         "ASSIGNMENT_PRIORITY": { | ||||
|           "LABEL": "Assignment priority", | ||||
|           "EARLIEST_CREATED": { | ||||
|             "LABEL": "Earliest created", | ||||
|             "DESCRIPTION": "The conversation that was created first gets assigned first." | ||||
|           }, | ||||
|           "LONGEST_WAITING": { | ||||
|             "LABEL": "Longest waiting", | ||||
|             "DESCRIPTION": "The conversation waiting the longest gets assigned first." | ||||
|           } | ||||
|         }, | ||||
|         "FAIR_DISTRIBUTION": { | ||||
|           "LABEL": "Fair distribution policy", | ||||
|           "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.", | ||||
|           "INPUT_MAX": "Assign max", | ||||
|           "DURATION": "Conversations per agent in every" | ||||
|         }, | ||||
|         "INBOXES": { | ||||
|           "LABEL": "Added inboxes", | ||||
|           "DESCRIPTION": "Add inboxes for which this policy will be applicable.", | ||||
|           "ADD_BUTTON": "Add inbox", | ||||
|           "DROPDOWN": { | ||||
|             "SEARCH_PLACEHOLDER": "Search and select inboxes to add", | ||||
|             "ADD_BUTTON": "Add" | ||||
|           }, | ||||
|           "EMPTY_STATE": "No inboxes added to this policy, add an inbox to get started", | ||||
|           "API": { | ||||
|             "SUCCESS_MESSAGE": "Inbox successfully added to policy", | ||||
|             "ERROR_MESSAGE": "Failed to add inbox to policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "DELETE_POLICY": { | ||||
|         "SUCCESS_MESSAGE": "Assignment policy deleted successfully", | ||||
|         "ERROR_MESSAGE": "Failed to delete assignment policy" | ||||
|       } | ||||
|     }, | ||||
|     "AGENT_CAPACITY_POLICY": { | ||||
|       "INDEX": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Agent capacity", | ||||
|           "CREATE_POLICY": "New policy" | ||||
|         }, | ||||
|         "CARD": { | ||||
|           "POPOVER": "Added agents", | ||||
|           "EDIT": "Edit" | ||||
|         }, | ||||
|         "NO_RECORDS_FOUND": "No agent capacity policies found" | ||||
|       }, | ||||
|       "CREATE": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Create agent capacity policy" | ||||
|         }, | ||||
|         "CREATE_BUTTON": "Create policy", | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Agent capacity policy created successfully", | ||||
|           "ERROR_MESSAGE": "Failed to create agent capacity policy" | ||||
|         } | ||||
|       }, | ||||
|       "EDIT": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Edit agent capacity policy" | ||||
|         }, | ||||
|         "EDIT_BUTTON": "Update policy", | ||||
|         "CONFIRM_ADD_AGENT_DIALOG": { | ||||
|           "TITLE": "Add agent", | ||||
|           "DESCRIPTION": "{agentName} is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", | ||||
|           "CONFIRM_BUTTON_LABEL": "Continue", | ||||
|           "CANCEL_BUTTON_LABEL": "Cancel" | ||||
|         }, | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Agent capacity policy updated successfully", | ||||
|           "ERROR_MESSAGE": "Failed to update agent capacity policy" | ||||
|         }, | ||||
|         "AGENT_API": { | ||||
|           "ADD": { | ||||
|             "SUCCESS_MESSAGE": "Agent added to policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to add agent to policy" | ||||
|           }, | ||||
|           "REMOVE": { | ||||
|             "SUCCESS_MESSAGE": "Agent removed from policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to remove agent from policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "FORM": { | ||||
|         "NAME": { | ||||
|           "LABEL": "Policy name:", | ||||
|           "PLACEHOLDER": "Enter policy name" | ||||
|         }, | ||||
|         "DESCRIPTION": { | ||||
|           "LABEL": "Description:", | ||||
|           "PLACEHOLDER": "Enter description" | ||||
|         }, | ||||
|         "INBOX_CAPACITY_LIMIT": { | ||||
|           "LABEL": "Inbox capacity limits", | ||||
|           "ADD_BUTTON": "Add inbox", | ||||
|           "FIELD": { | ||||
|             "SELECT_INBOX": "Select inbox", | ||||
|             "MAX_CONVERSATIONS": "Max conversations", | ||||
|             "SET_LIMIT": "Set limit" | ||||
|           }, | ||||
|           "EMPTY_STATE": "No inbox limit set" | ||||
|         }, | ||||
|         "EXCLUSION_RULES": { | ||||
|           "LABEL": "Exclusion rules", | ||||
|           "DESCRIPTION": "Conversations that satisfy the following conditions would not count towards agent capacity", | ||||
|           "TAGS": { | ||||
|             "LABEL": "Exclude conversations tagged with specific labels", | ||||
|             "ADD_TAG": "add tag", | ||||
|             "DROPDOWN": { | ||||
|               "SEARCH_PLACEHOLDER": "Search and select tags to add" | ||||
|             }, | ||||
|             "EMPTY_STATE": "No tags added to this policy." | ||||
|           }, | ||||
|           "DURATION": { | ||||
|             "LABEL": "Exclude conversations older than a specified duration", | ||||
|             "PLACEHOLDER": "Set time" | ||||
|           } | ||||
|         }, | ||||
|         "USERS": { | ||||
|           "LABEL": "Assigned agents", | ||||
|           "DESCRIPTION": "Add agents for which this policy will be applicable.", | ||||
|           "ADD_BUTTON": "Add agent", | ||||
|           "DROPDOWN": { | ||||
|             "SEARCH_PLACEHOLDER": "Search and select agents to add", | ||||
|             "ADD_BUTTON": "Add" | ||||
|           }, | ||||
|           "EMPTY_STATE": "No agents added", | ||||
|           "API": { | ||||
|             "SUCCESS_MESSAGE": "Agent successfully added to policy", | ||||
|             "ERROR_MESSAGE": "Failed to add agent to policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "DELETE_POLICY": { | ||||
|         "SUCCESS_MESSAGE": "Agent capacity policy deleted successfully", | ||||
|         "ERROR_MESSAGE": "Failed to delete agent capacity policy" | ||||
|       } | ||||
|     }, | ||||
|     "DELETE_POLICY": { | ||||
|       "TITLE": "Delete policy", | ||||
|       "DESCRIPTION": "Are you sure you want to delete this policy? This action cannot be undone.", | ||||
|       "CONFIRM_BUTTON_LABEL": "Delete", | ||||
|       "CANCEL_BUTTON_LABEL": "Cancel" | ||||
|     } | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -71,6 +71,17 @@ | ||||
|       "SHOW_LABELS": "Show labels", | ||||
|       "HIDE_LABELS": "Hide labels" | ||||
|     }, | ||||
|     "VOICE_CALL": { | ||||
|       "INCOMING_CALL": "Incoming call", | ||||
|       "OUTGOING_CALL": "Outgoing call", | ||||
|       "CALL_IN_PROGRESS": "Call in progress", | ||||
|       "NO_ANSWER": "No answer", | ||||
|       "MISSED_CALL": "Missed call", | ||||
|       "CALL_ENDED": "Call ended", | ||||
|       "NOT_ANSWERED_YET": "Not answered yet", | ||||
|       "THEY_ANSWERED": "They answered", | ||||
|       "YOU_ANSWERED": "You answered" | ||||
|     }, | ||||
|     "HEADER": { | ||||
|       "RESOLVE_ACTION": "Resolve", | ||||
|       "REOPEN_ACTION": "Reopen", | ||||
|   | ||||
| @@ -51,6 +51,13 @@ | ||||
|             "LARGER": "Larger", | ||||
|             "EXTRA_LARGE": "Extra Large" | ||||
|           } | ||||
|         }, | ||||
|         "LANGUAGE": { | ||||
|           "TITLE": "Preferred Language", | ||||
|           "NOTE": "Choose the language you want to use.", | ||||
|           "UPDATE_SUCCESS": "Your Language settings have been updated successfully", | ||||
|           "UPDATE_ERROR": "There is an error while updating the language settings, please try again", | ||||
|           "USE_ACCOUNT_DEFAULT": "Use account default" | ||||
|         } | ||||
|       }, | ||||
|       "MESSAGE_SIGNATURE_SECTION": { | ||||
| @@ -330,6 +337,7 @@ | ||||
|     "REPORTS_LABEL": "Labels", | ||||
|     "REPORTS_INBOX": "Inbox", | ||||
|     "REPORTS_TEAM": "Tim", | ||||
|     "AGENT_ASSIGNMENT": "Agent Assignment", | ||||
|     "SET_AVAILABILITY_TITLE": "Postavi sebe kao", | ||||
|     "SET_YOUR_AVAILABILITY": "Set your availability", | ||||
|     "SLA": "SLA", | ||||
| @@ -418,5 +426,255 @@ | ||||
|       "SWITCH_TO_REPLY": "Switch to Reply", | ||||
|       "TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown" | ||||
|     } | ||||
|   }, | ||||
|   "ASSIGNMENT_POLICY": { | ||||
|     "INDEX": { | ||||
|       "HEADER": { | ||||
|         "TITLE": "Agent assignment", | ||||
|         "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here" | ||||
|       }, | ||||
|       "ASSIGNMENT_POLICY": { | ||||
|         "TITLE": "Assignment policy", | ||||
|         "DESCRIPTION": "Manage how conversations get assigned in inboxes.", | ||||
|         "FEATURES": [ | ||||
|           "Assign by conversations evenly or by available capacity", | ||||
|           "Add fair distribution rules to avoid overloading any agent", | ||||
|           "Add inboxes to a policy - one policy per inbox" | ||||
|         ] | ||||
|       }, | ||||
|       "AGENT_CAPACITY_POLICY": { | ||||
|         "TITLE": "Agent capacity policy", | ||||
|         "DESCRIPTION": "Manage workload for agents.", | ||||
|         "FEATURES": [ | ||||
|           "Define maximum conversations per inbox", | ||||
|           "Create exceptions based on labels and time", | ||||
|           "Add agents to a policy - one policy per agent" | ||||
|         ] | ||||
|       } | ||||
|     }, | ||||
|     "AGENT_ASSIGNMENT_POLICY": { | ||||
|       "INDEX": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Assignment policy", | ||||
|           "CREATE_POLICY": "New policy" | ||||
|         }, | ||||
|         "CARD": { | ||||
|           "ORDER": "Order", | ||||
|           "PRIORITY": "Prioritet", | ||||
|           "ACTIVE": "Active", | ||||
|           "INACTIVE": "Inactive", | ||||
|           "POPOVER": "Added inboxes", | ||||
|           "EDIT": "Uredi" | ||||
|         }, | ||||
|         "NO_RECORDS_FOUND": "No assignment policies found" | ||||
|       }, | ||||
|       "CREATE": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Create assignment policy" | ||||
|         }, | ||||
|         "CREATE_BUTTON": "Create policy", | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Assignment policy created successfully", | ||||
|           "ERROR_MESSAGE": "Failed to create assignment policy" | ||||
|         } | ||||
|       }, | ||||
|       "EDIT": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Edit assignment policy" | ||||
|         }, | ||||
|         "EDIT_BUTTON": "Update policy", | ||||
|         "CONFIRM_ADD_INBOX_DIALOG": { | ||||
|           "TITLE": "Add inbox", | ||||
|           "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", | ||||
|           "CONFIRM_BUTTON_LABEL": "Continue", | ||||
|           "CANCEL_BUTTON_LABEL": "Odustani" | ||||
|         }, | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Assignment policy updated successfully", | ||||
|           "ERROR_MESSAGE": "Failed to update assignment policy" | ||||
|         }, | ||||
|         "INBOX_API": { | ||||
|           "ADD": { | ||||
|             "SUCCESS_MESSAGE": "Inbox added to policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to add inbox to policy" | ||||
|           }, | ||||
|           "REMOVE": { | ||||
|             "SUCCESS_MESSAGE": "Inbox removed from policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to remove inbox from policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "FORM": { | ||||
|         "NAME": { | ||||
|           "LABEL": "Policy name:", | ||||
|           "PLACEHOLDER": "Enter policy name" | ||||
|         }, | ||||
|         "DESCRIPTION": { | ||||
|           "LABEL": "Description:", | ||||
|           "PLACEHOLDER": "Enter description" | ||||
|         }, | ||||
|         "STATUS": { | ||||
|           "LABEL": "Status:", | ||||
|           "PLACEHOLDER": "Select status", | ||||
|           "ACTIVE": "Policy is active", | ||||
|           "INACTIVE": "Policy is inactive" | ||||
|         }, | ||||
|         "ASSIGNMENT_ORDER": { | ||||
|           "LABEL": "Assignment order", | ||||
|           "ROUND_ROBIN": { | ||||
|             "LABEL": "Round robin", | ||||
|             "DESCRIPTION": "Assign conversations evenly among agents." | ||||
|           }, | ||||
|           "BALANCED": { | ||||
|             "LABEL": "Balanced", | ||||
|             "DESCRIPTION": "Assign conversations based on available capacity." | ||||
|           } | ||||
|         }, | ||||
|         "ASSIGNMENT_PRIORITY": { | ||||
|           "LABEL": "Assignment priority", | ||||
|           "EARLIEST_CREATED": { | ||||
|             "LABEL": "Earliest created", | ||||
|             "DESCRIPTION": "The conversation that was created first gets assigned first." | ||||
|           }, | ||||
|           "LONGEST_WAITING": { | ||||
|             "LABEL": "Longest waiting", | ||||
|             "DESCRIPTION": "The conversation waiting the longest gets assigned first." | ||||
|           } | ||||
|         }, | ||||
|         "FAIR_DISTRIBUTION": { | ||||
|           "LABEL": "Fair distribution policy", | ||||
|           "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.", | ||||
|           "INPUT_MAX": "Assign max", | ||||
|           "DURATION": "Conversations per agent in every" | ||||
|         }, | ||||
|         "INBOXES": { | ||||
|           "LABEL": "Added inboxes", | ||||
|           "DESCRIPTION": "Add inboxes for which this policy will be applicable.", | ||||
|           "ADD_BUTTON": "Add inbox", | ||||
|           "DROPDOWN": { | ||||
|             "SEARCH_PLACEHOLDER": "Search and select inboxes to add", | ||||
|             "ADD_BUTTON": "Add" | ||||
|           }, | ||||
|           "EMPTY_STATE": "No inboxes added to this policy, add an inbox to get started", | ||||
|           "API": { | ||||
|             "SUCCESS_MESSAGE": "Inbox successfully added to policy", | ||||
|             "ERROR_MESSAGE": "Failed to add inbox to policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "DELETE_POLICY": { | ||||
|         "SUCCESS_MESSAGE": "Assignment policy deleted successfully", | ||||
|         "ERROR_MESSAGE": "Failed to delete assignment policy" | ||||
|       } | ||||
|     }, | ||||
|     "AGENT_CAPACITY_POLICY": { | ||||
|       "INDEX": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Agent capacity", | ||||
|           "CREATE_POLICY": "New policy" | ||||
|         }, | ||||
|         "CARD": { | ||||
|           "POPOVER": "Added agents", | ||||
|           "EDIT": "Uredi" | ||||
|         }, | ||||
|         "NO_RECORDS_FOUND": "No agent capacity policies found" | ||||
|       }, | ||||
|       "CREATE": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Create agent capacity policy" | ||||
|         }, | ||||
|         "CREATE_BUTTON": "Create policy", | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Agent capacity policy created successfully", | ||||
|           "ERROR_MESSAGE": "Failed to create agent capacity policy" | ||||
|         } | ||||
|       }, | ||||
|       "EDIT": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Edit agent capacity policy" | ||||
|         }, | ||||
|         "EDIT_BUTTON": "Update policy", | ||||
|         "CONFIRM_ADD_AGENT_DIALOG": { | ||||
|           "TITLE": "Add agent", | ||||
|           "DESCRIPTION": "{agentName} is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", | ||||
|           "CONFIRM_BUTTON_LABEL": "Continue", | ||||
|           "CANCEL_BUTTON_LABEL": "Odustani" | ||||
|         }, | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Agent capacity policy updated successfully", | ||||
|           "ERROR_MESSAGE": "Failed to update agent capacity policy" | ||||
|         }, | ||||
|         "AGENT_API": { | ||||
|           "ADD": { | ||||
|             "SUCCESS_MESSAGE": "Agent added to policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to add agent to policy" | ||||
|           }, | ||||
|           "REMOVE": { | ||||
|             "SUCCESS_MESSAGE": "Agent removed from policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to remove agent from policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "FORM": { | ||||
|         "NAME": { | ||||
|           "LABEL": "Policy name:", | ||||
|           "PLACEHOLDER": "Enter policy name" | ||||
|         }, | ||||
|         "DESCRIPTION": { | ||||
|           "LABEL": "Description:", | ||||
|           "PLACEHOLDER": "Enter description" | ||||
|         }, | ||||
|         "INBOX_CAPACITY_LIMIT": { | ||||
|           "LABEL": "Inbox capacity limits", | ||||
|           "ADD_BUTTON": "Add inbox", | ||||
|           "FIELD": { | ||||
|             "SELECT_INBOX": "Select inbox", | ||||
|             "MAX_CONVERSATIONS": "Max conversations", | ||||
|             "SET_LIMIT": "Set limit" | ||||
|           }, | ||||
|           "EMPTY_STATE": "No inbox limit set" | ||||
|         }, | ||||
|         "EXCLUSION_RULES": { | ||||
|           "LABEL": "Exclusion rules", | ||||
|           "DESCRIPTION": "Conversations that satisfy the following conditions would not count towards agent capacity", | ||||
|           "TAGS": { | ||||
|             "LABEL": "Exclude conversations tagged with specific labels", | ||||
|             "ADD_TAG": "add tag", | ||||
|             "DROPDOWN": { | ||||
|               "SEARCH_PLACEHOLDER": "Search and select tags to add" | ||||
|             }, | ||||
|             "EMPTY_STATE": "No tags added to this policy." | ||||
|           }, | ||||
|           "DURATION": { | ||||
|             "LABEL": "Exclude conversations older than a specified duration", | ||||
|             "PLACEHOLDER": "Set time" | ||||
|           } | ||||
|         }, | ||||
|         "USERS": { | ||||
|           "LABEL": "Assigned agents", | ||||
|           "DESCRIPTION": "Add agents for which this policy will be applicable.", | ||||
|           "ADD_BUTTON": "Add agent", | ||||
|           "DROPDOWN": { | ||||
|             "SEARCH_PLACEHOLDER": "Search and select agents to add", | ||||
|             "ADD_BUTTON": "Add" | ||||
|           }, | ||||
|           "EMPTY_STATE": "No agents added", | ||||
|           "API": { | ||||
|             "SUCCESS_MESSAGE": "Agent successfully added to policy", | ||||
|             "ERROR_MESSAGE": "Failed to add agent to policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "DELETE_POLICY": { | ||||
|         "SUCCESS_MESSAGE": "Agent capacity policy deleted successfully", | ||||
|         "ERROR_MESSAGE": "Failed to delete agent capacity policy" | ||||
|       } | ||||
|     }, | ||||
|     "DELETE_POLICY": { | ||||
|       "TITLE": "Delete policy", | ||||
|       "DESCRIPTION": "Are you sure you want to delete this policy? This action cannot be undone.", | ||||
|       "CONFIRM_BUTTON_LABEL": "Izbriši", | ||||
|       "CANCEL_BUTTON_LABEL": "Odustani" | ||||
|     } | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -71,6 +71,17 @@ | ||||
|       "SHOW_LABELS": "Cimkék mutatása", | ||||
|       "HIDE_LABELS": "Cimkék elrejtése" | ||||
|     }, | ||||
|     "VOICE_CALL": { | ||||
|       "INCOMING_CALL": "Incoming call", | ||||
|       "OUTGOING_CALL": "Outgoing call", | ||||
|       "CALL_IN_PROGRESS": "Call in progress", | ||||
|       "NO_ANSWER": "No answer", | ||||
|       "MISSED_CALL": "Missed call", | ||||
|       "CALL_ENDED": "Call ended", | ||||
|       "NOT_ANSWERED_YET": "Not answered yet", | ||||
|       "THEY_ANSWERED": "They answered", | ||||
|       "YOU_ANSWERED": "You answered" | ||||
|     }, | ||||
|     "HEADER": { | ||||
|       "RESOLVE_ACTION": "Megoldva", | ||||
|       "REOPEN_ACTION": "Újranyitás", | ||||
|   | ||||
| @@ -51,6 +51,13 @@ | ||||
|             "LARGER": "Larger", | ||||
|             "EXTRA_LARGE": "Extra Large" | ||||
|           } | ||||
|         }, | ||||
|         "LANGUAGE": { | ||||
|           "TITLE": "Preferred Language", | ||||
|           "NOTE": "Choose the language you want to use.", | ||||
|           "UPDATE_SUCCESS": "Your Language settings have been updated successfully", | ||||
|           "UPDATE_ERROR": "There is an error while updating the language settings, please try again", | ||||
|           "USE_ACCOUNT_DEFAULT": "Use account default" | ||||
|         } | ||||
|       }, | ||||
|       "MESSAGE_SIGNATURE_SECTION": { | ||||
| @@ -330,6 +337,7 @@ | ||||
|     "REPORTS_LABEL": "Cimkék", | ||||
|     "REPORTS_INBOX": "Fiók", | ||||
|     "REPORTS_TEAM": "Csapat", | ||||
|     "AGENT_ASSIGNMENT": "Agent Assignment", | ||||
|     "SET_AVAILABILITY_TITLE": "Ugrás a Beszélgetések Irányítópultjához", | ||||
|     "SET_YOUR_AVAILABILITY": "Elérhetőség beállítása", | ||||
|     "SLA": "SLA", | ||||
| @@ -418,5 +426,255 @@ | ||||
|       "SWITCH_TO_REPLY": "Válts a válasz fülre", | ||||
|       "TOGGLE_SNOOZE_DROPDOWN": "Alvómód bekapcsolása a legördülő menüben" | ||||
|     } | ||||
|   }, | ||||
|   "ASSIGNMENT_POLICY": { | ||||
|     "INDEX": { | ||||
|       "HEADER": { | ||||
|         "TITLE": "Agent assignment", | ||||
|         "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here" | ||||
|       }, | ||||
|       "ASSIGNMENT_POLICY": { | ||||
|         "TITLE": "Assignment policy", | ||||
|         "DESCRIPTION": "Manage how conversations get assigned in inboxes.", | ||||
|         "FEATURES": [ | ||||
|           "Assign by conversations evenly or by available capacity", | ||||
|           "Add fair distribution rules to avoid overloading any agent", | ||||
|           "Add inboxes to a policy - one policy per inbox" | ||||
|         ] | ||||
|       }, | ||||
|       "AGENT_CAPACITY_POLICY": { | ||||
|         "TITLE": "Agent capacity policy", | ||||
|         "DESCRIPTION": "Manage workload for agents.", | ||||
|         "FEATURES": [ | ||||
|           "Define maximum conversations per inbox", | ||||
|           "Create exceptions based on labels and time", | ||||
|           "Add agents to a policy - one policy per agent" | ||||
|         ] | ||||
|       } | ||||
|     }, | ||||
|     "AGENT_ASSIGNMENT_POLICY": { | ||||
|       "INDEX": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Assignment policy", | ||||
|           "CREATE_POLICY": "New policy" | ||||
|         }, | ||||
|         "CARD": { | ||||
|           "ORDER": "Order", | ||||
|           "PRIORITY": "Prioritás", | ||||
|           "ACTIVE": "Aktív", | ||||
|           "INACTIVE": "Inactive", | ||||
|           "POPOVER": "Added inboxes", | ||||
|           "EDIT": "Szerkesztés" | ||||
|         }, | ||||
|         "NO_RECORDS_FOUND": "No assignment policies found" | ||||
|       }, | ||||
|       "CREATE": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Create assignment policy" | ||||
|         }, | ||||
|         "CREATE_BUTTON": "Create policy", | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Assignment policy created successfully", | ||||
|           "ERROR_MESSAGE": "Failed to create assignment policy" | ||||
|         } | ||||
|       }, | ||||
|       "EDIT": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Edit assignment policy" | ||||
|         }, | ||||
|         "EDIT_BUTTON": "Update policy", | ||||
|         "CONFIRM_ADD_INBOX_DIALOG": { | ||||
|           "TITLE": "Add inbox", | ||||
|           "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", | ||||
|           "CONFIRM_BUTTON_LABEL": "Continue", | ||||
|           "CANCEL_BUTTON_LABEL": "Mégse" | ||||
|         }, | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Assignment policy updated successfully", | ||||
|           "ERROR_MESSAGE": "Failed to update assignment policy" | ||||
|         }, | ||||
|         "INBOX_API": { | ||||
|           "ADD": { | ||||
|             "SUCCESS_MESSAGE": "Inbox added to policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to add inbox to policy" | ||||
|           }, | ||||
|           "REMOVE": { | ||||
|             "SUCCESS_MESSAGE": "Inbox removed from policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to remove inbox from policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "FORM": { | ||||
|         "NAME": { | ||||
|           "LABEL": "Policy name:", | ||||
|           "PLACEHOLDER": "Enter policy name" | ||||
|         }, | ||||
|         "DESCRIPTION": { | ||||
|           "LABEL": "Leírás:", | ||||
|           "PLACEHOLDER": "Enter description" | ||||
|         }, | ||||
|         "STATUS": { | ||||
|           "LABEL": "Státusz:", | ||||
|           "PLACEHOLDER": "Select status", | ||||
|           "ACTIVE": "Policy is active", | ||||
|           "INACTIVE": "Policy is inactive" | ||||
|         }, | ||||
|         "ASSIGNMENT_ORDER": { | ||||
|           "LABEL": "Assignment order", | ||||
|           "ROUND_ROBIN": { | ||||
|             "LABEL": "Round robin", | ||||
|             "DESCRIPTION": "Assign conversations evenly among agents." | ||||
|           }, | ||||
|           "BALANCED": { | ||||
|             "LABEL": "Balanced", | ||||
|             "DESCRIPTION": "Assign conversations based on available capacity." | ||||
|           } | ||||
|         }, | ||||
|         "ASSIGNMENT_PRIORITY": { | ||||
|           "LABEL": "Assignment priority", | ||||
|           "EARLIEST_CREATED": { | ||||
|             "LABEL": "Earliest created", | ||||
|             "DESCRIPTION": "The conversation that was created first gets assigned first." | ||||
|           }, | ||||
|           "LONGEST_WAITING": { | ||||
|             "LABEL": "Longest waiting", | ||||
|             "DESCRIPTION": "The conversation waiting the longest gets assigned first." | ||||
|           } | ||||
|         }, | ||||
|         "FAIR_DISTRIBUTION": { | ||||
|           "LABEL": "Fair distribution policy", | ||||
|           "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.", | ||||
|           "INPUT_MAX": "Assign max", | ||||
|           "DURATION": "Conversations per agent in every" | ||||
|         }, | ||||
|         "INBOXES": { | ||||
|           "LABEL": "Added inboxes", | ||||
|           "DESCRIPTION": "Add inboxes for which this policy will be applicable.", | ||||
|           "ADD_BUTTON": "Add inbox", | ||||
|           "DROPDOWN": { | ||||
|             "SEARCH_PLACEHOLDER": "Search and select inboxes to add", | ||||
|             "ADD_BUTTON": "Hozzáadás" | ||||
|           }, | ||||
|           "EMPTY_STATE": "No inboxes added to this policy, add an inbox to get started", | ||||
|           "API": { | ||||
|             "SUCCESS_MESSAGE": "Inbox successfully added to policy", | ||||
|             "ERROR_MESSAGE": "Failed to add inbox to policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "DELETE_POLICY": { | ||||
|         "SUCCESS_MESSAGE": "Assignment policy deleted successfully", | ||||
|         "ERROR_MESSAGE": "Failed to delete assignment policy" | ||||
|       } | ||||
|     }, | ||||
|     "AGENT_CAPACITY_POLICY": { | ||||
|       "INDEX": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Agent capacity", | ||||
|           "CREATE_POLICY": "New policy" | ||||
|         }, | ||||
|         "CARD": { | ||||
|           "POPOVER": "Added agents", | ||||
|           "EDIT": "Szerkesztés" | ||||
|         }, | ||||
|         "NO_RECORDS_FOUND": "No agent capacity policies found" | ||||
|       }, | ||||
|       "CREATE": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Create agent capacity policy" | ||||
|         }, | ||||
|         "CREATE_BUTTON": "Create policy", | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Agent capacity policy created successfully", | ||||
|           "ERROR_MESSAGE": "Failed to create agent capacity policy" | ||||
|         } | ||||
|       }, | ||||
|       "EDIT": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Edit agent capacity policy" | ||||
|         }, | ||||
|         "EDIT_BUTTON": "Update policy", | ||||
|         "CONFIRM_ADD_AGENT_DIALOG": { | ||||
|           "TITLE": "Add agent", | ||||
|           "DESCRIPTION": "{agentName} is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", | ||||
|           "CONFIRM_BUTTON_LABEL": "Continue", | ||||
|           "CANCEL_BUTTON_LABEL": "Mégse" | ||||
|         }, | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Agent capacity policy updated successfully", | ||||
|           "ERROR_MESSAGE": "Failed to update agent capacity policy" | ||||
|         }, | ||||
|         "AGENT_API": { | ||||
|           "ADD": { | ||||
|             "SUCCESS_MESSAGE": "Agent added to policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to add agent to policy" | ||||
|           }, | ||||
|           "REMOVE": { | ||||
|             "SUCCESS_MESSAGE": "Agent removed from policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to remove agent from policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "FORM": { | ||||
|         "NAME": { | ||||
|           "LABEL": "Policy name:", | ||||
|           "PLACEHOLDER": "Enter policy name" | ||||
|         }, | ||||
|         "DESCRIPTION": { | ||||
|           "LABEL": "Leírás:", | ||||
|           "PLACEHOLDER": "Enter description" | ||||
|         }, | ||||
|         "INBOX_CAPACITY_LIMIT": { | ||||
|           "LABEL": "Inbox capacity limits", | ||||
|           "ADD_BUTTON": "Add inbox", | ||||
|           "FIELD": { | ||||
|             "SELECT_INBOX": "Select inbox", | ||||
|             "MAX_CONVERSATIONS": "Max conversations", | ||||
|             "SET_LIMIT": "Set limit" | ||||
|           }, | ||||
|           "EMPTY_STATE": "No inbox limit set" | ||||
|         }, | ||||
|         "EXCLUSION_RULES": { | ||||
|           "LABEL": "Exclusion rules", | ||||
|           "DESCRIPTION": "Conversations that satisfy the following conditions would not count towards agent capacity", | ||||
|           "TAGS": { | ||||
|             "LABEL": "Exclude conversations tagged with specific labels", | ||||
|             "ADD_TAG": "add tag", | ||||
|             "DROPDOWN": { | ||||
|               "SEARCH_PLACEHOLDER": "Search and select tags to add" | ||||
|             }, | ||||
|             "EMPTY_STATE": "No tags added to this policy." | ||||
|           }, | ||||
|           "DURATION": { | ||||
|             "LABEL": "Exclude conversations older than a specified duration", | ||||
|             "PLACEHOLDER": "Set time" | ||||
|           } | ||||
|         }, | ||||
|         "USERS": { | ||||
|           "LABEL": "Assigned agents", | ||||
|           "DESCRIPTION": "Add agents for which this policy will be applicable.", | ||||
|           "ADD_BUTTON": "Add agent", | ||||
|           "DROPDOWN": { | ||||
|             "SEARCH_PLACEHOLDER": "Search and select agents to add", | ||||
|             "ADD_BUTTON": "Hozzáadás" | ||||
|           }, | ||||
|           "EMPTY_STATE": "No agents added", | ||||
|           "API": { | ||||
|             "SUCCESS_MESSAGE": "Agent successfully added to policy", | ||||
|             "ERROR_MESSAGE": "Failed to add agent to policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "DELETE_POLICY": { | ||||
|         "SUCCESS_MESSAGE": "Agent capacity policy deleted successfully", | ||||
|         "ERROR_MESSAGE": "Failed to delete agent capacity policy" | ||||
|       } | ||||
|     }, | ||||
|     "DELETE_POLICY": { | ||||
|       "TITLE": "Delete policy", | ||||
|       "DESCRIPTION": "Are you sure you want to delete this policy? This action cannot be undone.", | ||||
|       "CONFIRM_BUTTON_LABEL": "Törlés", | ||||
|       "CANCEL_BUTTON_LABEL": "Mégse" | ||||
|     } | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -71,6 +71,17 @@ | ||||
|       "SHOW_LABELS": "Show labels", | ||||
|       "HIDE_LABELS": "Hide labels" | ||||
|     }, | ||||
|     "VOICE_CALL": { | ||||
|       "INCOMING_CALL": "Incoming call", | ||||
|       "OUTGOING_CALL": "Outgoing call", | ||||
|       "CALL_IN_PROGRESS": "Call in progress", | ||||
|       "NO_ANSWER": "No answer", | ||||
|       "MISSED_CALL": "Missed call", | ||||
|       "CALL_ENDED": "Call ended", | ||||
|       "NOT_ANSWERED_YET": "Not answered yet", | ||||
|       "THEY_ANSWERED": "They answered", | ||||
|       "YOU_ANSWERED": "You answered" | ||||
|     }, | ||||
|     "HEADER": { | ||||
|       "RESOLVE_ACTION": "Resolve", | ||||
|       "REOPEN_ACTION": "Reopen", | ||||
|   | ||||
| @@ -51,6 +51,13 @@ | ||||
|             "LARGER": "Larger", | ||||
|             "EXTRA_LARGE": "Extra Large" | ||||
|           } | ||||
|         }, | ||||
|         "LANGUAGE": { | ||||
|           "TITLE": "Preferred Language", | ||||
|           "NOTE": "Choose the language you want to use.", | ||||
|           "UPDATE_SUCCESS": "Your Language settings have been updated successfully", | ||||
|           "UPDATE_ERROR": "There is an error while updating the language settings, please try again", | ||||
|           "USE_ACCOUNT_DEFAULT": "Use account default" | ||||
|         } | ||||
|       }, | ||||
|       "MESSAGE_SIGNATURE_SECTION": { | ||||
| @@ -330,6 +337,7 @@ | ||||
|     "REPORTS_LABEL": "Labels", | ||||
|     "REPORTS_INBOX": "Inbox", | ||||
|     "REPORTS_TEAM": "Team", | ||||
|     "AGENT_ASSIGNMENT": "Agent Assignment", | ||||
|     "SET_AVAILABILITY_TITLE": "Set yourself as", | ||||
|     "SET_YOUR_AVAILABILITY": "Set your availability", | ||||
|     "SLA": "SLA", | ||||
| @@ -418,5 +426,255 @@ | ||||
|       "SWITCH_TO_REPLY": "Switch to Reply", | ||||
|       "TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown" | ||||
|     } | ||||
|   }, | ||||
|   "ASSIGNMENT_POLICY": { | ||||
|     "INDEX": { | ||||
|       "HEADER": { | ||||
|         "TITLE": "Agent assignment", | ||||
|         "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here" | ||||
|       }, | ||||
|       "ASSIGNMENT_POLICY": { | ||||
|         "TITLE": "Assignment policy", | ||||
|         "DESCRIPTION": "Manage how conversations get assigned in inboxes.", | ||||
|         "FEATURES": [ | ||||
|           "Assign by conversations evenly or by available capacity", | ||||
|           "Add fair distribution rules to avoid overloading any agent", | ||||
|           "Add inboxes to a policy - one policy per inbox" | ||||
|         ] | ||||
|       }, | ||||
|       "AGENT_CAPACITY_POLICY": { | ||||
|         "TITLE": "Agent capacity policy", | ||||
|         "DESCRIPTION": "Manage workload for agents.", | ||||
|         "FEATURES": [ | ||||
|           "Define maximum conversations per inbox", | ||||
|           "Create exceptions based on labels and time", | ||||
|           "Add agents to a policy - one policy per agent" | ||||
|         ] | ||||
|       } | ||||
|     }, | ||||
|     "AGENT_ASSIGNMENT_POLICY": { | ||||
|       "INDEX": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Assignment policy", | ||||
|           "CREATE_POLICY": "New policy" | ||||
|         }, | ||||
|         "CARD": { | ||||
|           "ORDER": "Order", | ||||
|           "PRIORITY": "Priority", | ||||
|           "ACTIVE": "Active", | ||||
|           "INACTIVE": "Inactive", | ||||
|           "POPOVER": "Added inboxes", | ||||
|           "EDIT": "Edit" | ||||
|         }, | ||||
|         "NO_RECORDS_FOUND": "No assignment policies found" | ||||
|       }, | ||||
|       "CREATE": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Create assignment policy" | ||||
|         }, | ||||
|         "CREATE_BUTTON": "Create policy", | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Assignment policy created successfully", | ||||
|           "ERROR_MESSAGE": "Failed to create assignment policy" | ||||
|         } | ||||
|       }, | ||||
|       "EDIT": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Edit assignment policy" | ||||
|         }, | ||||
|         "EDIT_BUTTON": "Update policy", | ||||
|         "CONFIRM_ADD_INBOX_DIALOG": { | ||||
|           "TITLE": "Add inbox", | ||||
|           "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", | ||||
|           "CONFIRM_BUTTON_LABEL": "Continue", | ||||
|           "CANCEL_BUTTON_LABEL": "Cancel" | ||||
|         }, | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Assignment policy updated successfully", | ||||
|           "ERROR_MESSAGE": "Failed to update assignment policy" | ||||
|         }, | ||||
|         "INBOX_API": { | ||||
|           "ADD": { | ||||
|             "SUCCESS_MESSAGE": "Inbox added to policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to add inbox to policy" | ||||
|           }, | ||||
|           "REMOVE": { | ||||
|             "SUCCESS_MESSAGE": "Inbox removed from policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to remove inbox from policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "FORM": { | ||||
|         "NAME": { | ||||
|           "LABEL": "Policy name:", | ||||
|           "PLACEHOLDER": "Enter policy name" | ||||
|         }, | ||||
|         "DESCRIPTION": { | ||||
|           "LABEL": "Description:", | ||||
|           "PLACEHOLDER": "Enter description" | ||||
|         }, | ||||
|         "STATUS": { | ||||
|           "LABEL": "Status:", | ||||
|           "PLACEHOLDER": "Select status", | ||||
|           "ACTIVE": "Policy is active", | ||||
|           "INACTIVE": "Policy is inactive" | ||||
|         }, | ||||
|         "ASSIGNMENT_ORDER": { | ||||
|           "LABEL": "Assignment order", | ||||
|           "ROUND_ROBIN": { | ||||
|             "LABEL": "Round robin", | ||||
|             "DESCRIPTION": "Assign conversations evenly among agents." | ||||
|           }, | ||||
|           "BALANCED": { | ||||
|             "LABEL": "Balanced", | ||||
|             "DESCRIPTION": "Assign conversations based on available capacity." | ||||
|           } | ||||
|         }, | ||||
|         "ASSIGNMENT_PRIORITY": { | ||||
|           "LABEL": "Assignment priority", | ||||
|           "EARLIEST_CREATED": { | ||||
|             "LABEL": "Earliest created", | ||||
|             "DESCRIPTION": "The conversation that was created first gets assigned first." | ||||
|           }, | ||||
|           "LONGEST_WAITING": { | ||||
|             "LABEL": "Longest waiting", | ||||
|             "DESCRIPTION": "The conversation waiting the longest gets assigned first." | ||||
|           } | ||||
|         }, | ||||
|         "FAIR_DISTRIBUTION": { | ||||
|           "LABEL": "Fair distribution policy", | ||||
|           "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.", | ||||
|           "INPUT_MAX": "Assign max", | ||||
|           "DURATION": "Conversations per agent in every" | ||||
|         }, | ||||
|         "INBOXES": { | ||||
|           "LABEL": "Added inboxes", | ||||
|           "DESCRIPTION": "Add inboxes for which this policy will be applicable.", | ||||
|           "ADD_BUTTON": "Add inbox", | ||||
|           "DROPDOWN": { | ||||
|             "SEARCH_PLACEHOLDER": "Search and select inboxes to add", | ||||
|             "ADD_BUTTON": "Add" | ||||
|           }, | ||||
|           "EMPTY_STATE": "No inboxes added to this policy, add an inbox to get started", | ||||
|           "API": { | ||||
|             "SUCCESS_MESSAGE": "Inbox successfully added to policy", | ||||
|             "ERROR_MESSAGE": "Failed to add inbox to policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "DELETE_POLICY": { | ||||
|         "SUCCESS_MESSAGE": "Assignment policy deleted successfully", | ||||
|         "ERROR_MESSAGE": "Failed to delete assignment policy" | ||||
|       } | ||||
|     }, | ||||
|     "AGENT_CAPACITY_POLICY": { | ||||
|       "INDEX": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Agent capacity", | ||||
|           "CREATE_POLICY": "New policy" | ||||
|         }, | ||||
|         "CARD": { | ||||
|           "POPOVER": "Added agents", | ||||
|           "EDIT": "Edit" | ||||
|         }, | ||||
|         "NO_RECORDS_FOUND": "No agent capacity policies found" | ||||
|       }, | ||||
|       "CREATE": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Create agent capacity policy" | ||||
|         }, | ||||
|         "CREATE_BUTTON": "Create policy", | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Agent capacity policy created successfully", | ||||
|           "ERROR_MESSAGE": "Failed to create agent capacity policy" | ||||
|         } | ||||
|       }, | ||||
|       "EDIT": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Edit agent capacity policy" | ||||
|         }, | ||||
|         "EDIT_BUTTON": "Update policy", | ||||
|         "CONFIRM_ADD_AGENT_DIALOG": { | ||||
|           "TITLE": "Add agent", | ||||
|           "DESCRIPTION": "{agentName} is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", | ||||
|           "CONFIRM_BUTTON_LABEL": "Continue", | ||||
|           "CANCEL_BUTTON_LABEL": "Cancel" | ||||
|         }, | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Agent capacity policy updated successfully", | ||||
|           "ERROR_MESSAGE": "Failed to update agent capacity policy" | ||||
|         }, | ||||
|         "AGENT_API": { | ||||
|           "ADD": { | ||||
|             "SUCCESS_MESSAGE": "Agent added to policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to add agent to policy" | ||||
|           }, | ||||
|           "REMOVE": { | ||||
|             "SUCCESS_MESSAGE": "Agent removed from policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to remove agent from policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "FORM": { | ||||
|         "NAME": { | ||||
|           "LABEL": "Policy name:", | ||||
|           "PLACEHOLDER": "Enter policy name" | ||||
|         }, | ||||
|         "DESCRIPTION": { | ||||
|           "LABEL": "Description:", | ||||
|           "PLACEHOLDER": "Enter description" | ||||
|         }, | ||||
|         "INBOX_CAPACITY_LIMIT": { | ||||
|           "LABEL": "Inbox capacity limits", | ||||
|           "ADD_BUTTON": "Add inbox", | ||||
|           "FIELD": { | ||||
|             "SELECT_INBOX": "Select inbox", | ||||
|             "MAX_CONVERSATIONS": "Max conversations", | ||||
|             "SET_LIMIT": "Set limit" | ||||
|           }, | ||||
|           "EMPTY_STATE": "No inbox limit set" | ||||
|         }, | ||||
|         "EXCLUSION_RULES": { | ||||
|           "LABEL": "Exclusion rules", | ||||
|           "DESCRIPTION": "Conversations that satisfy the following conditions would not count towards agent capacity", | ||||
|           "TAGS": { | ||||
|             "LABEL": "Exclude conversations tagged with specific labels", | ||||
|             "ADD_TAG": "add tag", | ||||
|             "DROPDOWN": { | ||||
|               "SEARCH_PLACEHOLDER": "Search and select tags to add" | ||||
|             }, | ||||
|             "EMPTY_STATE": "No tags added to this policy." | ||||
|           }, | ||||
|           "DURATION": { | ||||
|             "LABEL": "Exclude conversations older than a specified duration", | ||||
|             "PLACEHOLDER": "Set time" | ||||
|           } | ||||
|         }, | ||||
|         "USERS": { | ||||
|           "LABEL": "Assigned agents", | ||||
|           "DESCRIPTION": "Add agents for which this policy will be applicable.", | ||||
|           "ADD_BUTTON": "Add agent", | ||||
|           "DROPDOWN": { | ||||
|             "SEARCH_PLACEHOLDER": "Search and select agents to add", | ||||
|             "ADD_BUTTON": "Add" | ||||
|           }, | ||||
|           "EMPTY_STATE": "No agents added", | ||||
|           "API": { | ||||
|             "SUCCESS_MESSAGE": "Agent successfully added to policy", | ||||
|             "ERROR_MESSAGE": "Failed to add agent to policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "DELETE_POLICY": { | ||||
|         "SUCCESS_MESSAGE": "Agent capacity policy deleted successfully", | ||||
|         "ERROR_MESSAGE": "Failed to delete agent capacity policy" | ||||
|       } | ||||
|     }, | ||||
|     "DELETE_POLICY": { | ||||
|       "TITLE": "Delete policy", | ||||
|       "DESCRIPTION": "Are you sure you want to delete this policy? This action cannot be undone.", | ||||
|       "CONFIRM_BUTTON_LABEL": "Delete", | ||||
|       "CANCEL_BUTTON_LABEL": "Cancel" | ||||
|     } | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -71,6 +71,17 @@ | ||||
|       "SHOW_LABELS": "Tampilkan label", | ||||
|       "HIDE_LABELS": "Sembunyikan label" | ||||
|     }, | ||||
|     "VOICE_CALL": { | ||||
|       "INCOMING_CALL": "Incoming call", | ||||
|       "OUTGOING_CALL": "Outgoing call", | ||||
|       "CALL_IN_PROGRESS": "Call in progress", | ||||
|       "NO_ANSWER": "No answer", | ||||
|       "MISSED_CALL": "Missed call", | ||||
|       "CALL_ENDED": "Call ended", | ||||
|       "NOT_ANSWERED_YET": "Not answered yet", | ||||
|       "THEY_ANSWERED": "They answered", | ||||
|       "YOU_ANSWERED": "You answered" | ||||
|     }, | ||||
|     "HEADER": { | ||||
|       "RESOLVE_ACTION": "Menyelesaikan", | ||||
|       "REOPEN_ACTION": "Buka Kembali", | ||||
|   | ||||
| @@ -51,6 +51,13 @@ | ||||
|             "LARGER": "Larger", | ||||
|             "EXTRA_LARGE": "Extra Large" | ||||
|           } | ||||
|         }, | ||||
|         "LANGUAGE": { | ||||
|           "TITLE": "Preferred Language", | ||||
|           "NOTE": "Choose the language you want to use.", | ||||
|           "UPDATE_SUCCESS": "Your Language settings have been updated successfully", | ||||
|           "UPDATE_ERROR": "There is an error while updating the language settings, please try again", | ||||
|           "USE_ACCOUNT_DEFAULT": "Use account default" | ||||
|         } | ||||
|       }, | ||||
|       "MESSAGE_SIGNATURE_SECTION": { | ||||
| @@ -330,6 +337,7 @@ | ||||
|     "REPORTS_LABEL": "Label", | ||||
|     "REPORTS_INBOX": "Kotak Masuk", | ||||
|     "REPORTS_TEAM": "Tim", | ||||
|     "AGENT_ASSIGNMENT": "Agent Assignment", | ||||
|     "SET_AVAILABILITY_TITLE": "Atur diri anda sebagai", | ||||
|     "SET_YOUR_AVAILABILITY": "Atur ketersediaan Anda", | ||||
|     "SLA": "SLA", | ||||
| @@ -418,5 +426,255 @@ | ||||
|       "SWITCH_TO_REPLY": "Beralih ke Balasan", | ||||
|       "TOGGLE_SNOOZE_DROPDOWN": "Buka/Tutup dropdown penundaan" | ||||
|     } | ||||
|   }, | ||||
|   "ASSIGNMENT_POLICY": { | ||||
|     "INDEX": { | ||||
|       "HEADER": { | ||||
|         "TITLE": "Agent assignment", | ||||
|         "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here" | ||||
|       }, | ||||
|       "ASSIGNMENT_POLICY": { | ||||
|         "TITLE": "Assignment policy", | ||||
|         "DESCRIPTION": "Manage how conversations get assigned in inboxes.", | ||||
|         "FEATURES": [ | ||||
|           "Assign by conversations evenly or by available capacity", | ||||
|           "Add fair distribution rules to avoid overloading any agent", | ||||
|           "Add inboxes to a policy - one policy per inbox" | ||||
|         ] | ||||
|       }, | ||||
|       "AGENT_CAPACITY_POLICY": { | ||||
|         "TITLE": "Agent capacity policy", | ||||
|         "DESCRIPTION": "Manage workload for agents.", | ||||
|         "FEATURES": [ | ||||
|           "Define maximum conversations per inbox", | ||||
|           "Create exceptions based on labels and time", | ||||
|           "Add agents to a policy - one policy per agent" | ||||
|         ] | ||||
|       } | ||||
|     }, | ||||
|     "AGENT_ASSIGNMENT_POLICY": { | ||||
|       "INDEX": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Assignment policy", | ||||
|           "CREATE_POLICY": "New policy" | ||||
|         }, | ||||
|         "CARD": { | ||||
|           "ORDER": "Order", | ||||
|           "PRIORITY": "Prioritas", | ||||
|           "ACTIVE": "Aktif", | ||||
|           "INACTIVE": "Inactive", | ||||
|           "POPOVER": "Added inboxes", | ||||
|           "EDIT": "Edit" | ||||
|         }, | ||||
|         "NO_RECORDS_FOUND": "No assignment policies found" | ||||
|       }, | ||||
|       "CREATE": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Create assignment policy" | ||||
|         }, | ||||
|         "CREATE_BUTTON": "Create policy", | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Assignment policy created successfully", | ||||
|           "ERROR_MESSAGE": "Failed to create assignment policy" | ||||
|         } | ||||
|       }, | ||||
|       "EDIT": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Edit assignment policy" | ||||
|         }, | ||||
|         "EDIT_BUTTON": "Update policy", | ||||
|         "CONFIRM_ADD_INBOX_DIALOG": { | ||||
|           "TITLE": "Add inbox", | ||||
|           "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", | ||||
|           "CONFIRM_BUTTON_LABEL": "Continue", | ||||
|           "CANCEL_BUTTON_LABEL": "Batalkan" | ||||
|         }, | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Assignment policy updated successfully", | ||||
|           "ERROR_MESSAGE": "Failed to update assignment policy" | ||||
|         }, | ||||
|         "INBOX_API": { | ||||
|           "ADD": { | ||||
|             "SUCCESS_MESSAGE": "Inbox added to policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to add inbox to policy" | ||||
|           }, | ||||
|           "REMOVE": { | ||||
|             "SUCCESS_MESSAGE": "Inbox removed from policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to remove inbox from policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "FORM": { | ||||
|         "NAME": { | ||||
|           "LABEL": "Policy name:", | ||||
|           "PLACEHOLDER": "Enter policy name" | ||||
|         }, | ||||
|         "DESCRIPTION": { | ||||
|           "LABEL": "Deskripsi:", | ||||
|           "PLACEHOLDER": "Enter description" | ||||
|         }, | ||||
|         "STATUS": { | ||||
|           "LABEL": "Status:", | ||||
|           "PLACEHOLDER": "Select status", | ||||
|           "ACTIVE": "Policy is active", | ||||
|           "INACTIVE": "Policy is inactive" | ||||
|         }, | ||||
|         "ASSIGNMENT_ORDER": { | ||||
|           "LABEL": "Assignment order", | ||||
|           "ROUND_ROBIN": { | ||||
|             "LABEL": "Round robin", | ||||
|             "DESCRIPTION": "Assign conversations evenly among agents." | ||||
|           }, | ||||
|           "BALANCED": { | ||||
|             "LABEL": "Balanced", | ||||
|             "DESCRIPTION": "Assign conversations based on available capacity." | ||||
|           } | ||||
|         }, | ||||
|         "ASSIGNMENT_PRIORITY": { | ||||
|           "LABEL": "Assignment priority", | ||||
|           "EARLIEST_CREATED": { | ||||
|             "LABEL": "Earliest created", | ||||
|             "DESCRIPTION": "The conversation that was created first gets assigned first." | ||||
|           }, | ||||
|           "LONGEST_WAITING": { | ||||
|             "LABEL": "Longest waiting", | ||||
|             "DESCRIPTION": "The conversation waiting the longest gets assigned first." | ||||
|           } | ||||
|         }, | ||||
|         "FAIR_DISTRIBUTION": { | ||||
|           "LABEL": "Fair distribution policy", | ||||
|           "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.", | ||||
|           "INPUT_MAX": "Assign max", | ||||
|           "DURATION": "Conversations per agent in every" | ||||
|         }, | ||||
|         "INBOXES": { | ||||
|           "LABEL": "Added inboxes", | ||||
|           "DESCRIPTION": "Add inboxes for which this policy will be applicable.", | ||||
|           "ADD_BUTTON": "Add inbox", | ||||
|           "DROPDOWN": { | ||||
|             "SEARCH_PLACEHOLDER": "Search and select inboxes to add", | ||||
|             "ADD_BUTTON": "Tambahkan" | ||||
|           }, | ||||
|           "EMPTY_STATE": "No inboxes added to this policy, add an inbox to get started", | ||||
|           "API": { | ||||
|             "SUCCESS_MESSAGE": "Inbox successfully added to policy", | ||||
|             "ERROR_MESSAGE": "Failed to add inbox to policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "DELETE_POLICY": { | ||||
|         "SUCCESS_MESSAGE": "Assignment policy deleted successfully", | ||||
|         "ERROR_MESSAGE": "Failed to delete assignment policy" | ||||
|       } | ||||
|     }, | ||||
|     "AGENT_CAPACITY_POLICY": { | ||||
|       "INDEX": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Agent capacity", | ||||
|           "CREATE_POLICY": "New policy" | ||||
|         }, | ||||
|         "CARD": { | ||||
|           "POPOVER": "Added agents", | ||||
|           "EDIT": "Edit" | ||||
|         }, | ||||
|         "NO_RECORDS_FOUND": "No agent capacity policies found" | ||||
|       }, | ||||
|       "CREATE": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Create agent capacity policy" | ||||
|         }, | ||||
|         "CREATE_BUTTON": "Create policy", | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Agent capacity policy created successfully", | ||||
|           "ERROR_MESSAGE": "Failed to create agent capacity policy" | ||||
|         } | ||||
|       }, | ||||
|       "EDIT": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Edit agent capacity policy" | ||||
|         }, | ||||
|         "EDIT_BUTTON": "Update policy", | ||||
|         "CONFIRM_ADD_AGENT_DIALOG": { | ||||
|           "TITLE": "Add agent", | ||||
|           "DESCRIPTION": "{agentName} is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", | ||||
|           "CONFIRM_BUTTON_LABEL": "Continue", | ||||
|           "CANCEL_BUTTON_LABEL": "Batalkan" | ||||
|         }, | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Agent capacity policy updated successfully", | ||||
|           "ERROR_MESSAGE": "Failed to update agent capacity policy" | ||||
|         }, | ||||
|         "AGENT_API": { | ||||
|           "ADD": { | ||||
|             "SUCCESS_MESSAGE": "Agent added to policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to add agent to policy" | ||||
|           }, | ||||
|           "REMOVE": { | ||||
|             "SUCCESS_MESSAGE": "Agent removed from policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to remove agent from policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "FORM": { | ||||
|         "NAME": { | ||||
|           "LABEL": "Policy name:", | ||||
|           "PLACEHOLDER": "Enter policy name" | ||||
|         }, | ||||
|         "DESCRIPTION": { | ||||
|           "LABEL": "Deskripsi:", | ||||
|           "PLACEHOLDER": "Enter description" | ||||
|         }, | ||||
|         "INBOX_CAPACITY_LIMIT": { | ||||
|           "LABEL": "Inbox capacity limits", | ||||
|           "ADD_BUTTON": "Add inbox", | ||||
|           "FIELD": { | ||||
|             "SELECT_INBOX": "Select inbox", | ||||
|             "MAX_CONVERSATIONS": "Max conversations", | ||||
|             "SET_LIMIT": "Set limit" | ||||
|           }, | ||||
|           "EMPTY_STATE": "No inbox limit set" | ||||
|         }, | ||||
|         "EXCLUSION_RULES": { | ||||
|           "LABEL": "Exclusion rules", | ||||
|           "DESCRIPTION": "Conversations that satisfy the following conditions would not count towards agent capacity", | ||||
|           "TAGS": { | ||||
|             "LABEL": "Exclude conversations tagged with specific labels", | ||||
|             "ADD_TAG": "add tag", | ||||
|             "DROPDOWN": { | ||||
|               "SEARCH_PLACEHOLDER": "Search and select tags to add" | ||||
|             }, | ||||
|             "EMPTY_STATE": "No tags added to this policy." | ||||
|           }, | ||||
|           "DURATION": { | ||||
|             "LABEL": "Exclude conversations older than a specified duration", | ||||
|             "PLACEHOLDER": "Set time" | ||||
|           } | ||||
|         }, | ||||
|         "USERS": { | ||||
|           "LABEL": "Assigned agents", | ||||
|           "DESCRIPTION": "Add agents for which this policy will be applicable.", | ||||
|           "ADD_BUTTON": "Add agent", | ||||
|           "DROPDOWN": { | ||||
|             "SEARCH_PLACEHOLDER": "Search and select agents to add", | ||||
|             "ADD_BUTTON": "Tambahkan" | ||||
|           }, | ||||
|           "EMPTY_STATE": "No agents added", | ||||
|           "API": { | ||||
|             "SUCCESS_MESSAGE": "Agent successfully added to policy", | ||||
|             "ERROR_MESSAGE": "Failed to add agent to policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "DELETE_POLICY": { | ||||
|         "SUCCESS_MESSAGE": "Agent capacity policy deleted successfully", | ||||
|         "ERROR_MESSAGE": "Failed to delete agent capacity policy" | ||||
|       } | ||||
|     }, | ||||
|     "DELETE_POLICY": { | ||||
|       "TITLE": "Delete policy", | ||||
|       "DESCRIPTION": "Are you sure you want to delete this policy? This action cannot be undone.", | ||||
|       "CONFIRM_BUTTON_LABEL": "Hapus", | ||||
|       "CANCEL_BUTTON_LABEL": "Batalkan" | ||||
|     } | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -71,6 +71,17 @@ | ||||
|       "SHOW_LABELS": "Show labels", | ||||
|       "HIDE_LABELS": "Hide labels" | ||||
|     }, | ||||
|     "VOICE_CALL": { | ||||
|       "INCOMING_CALL": "Incoming call", | ||||
|       "OUTGOING_CALL": "Outgoing call", | ||||
|       "CALL_IN_PROGRESS": "Call in progress", | ||||
|       "NO_ANSWER": "No answer", | ||||
|       "MISSED_CALL": "Missed call", | ||||
|       "CALL_ENDED": "Call ended", | ||||
|       "NOT_ANSWERED_YET": "Not answered yet", | ||||
|       "THEY_ANSWERED": "They answered", | ||||
|       "YOU_ANSWERED": "You answered" | ||||
|     }, | ||||
|     "HEADER": { | ||||
|       "RESOLVE_ACTION": "Resolve", | ||||
|       "REOPEN_ACTION": "Reopen", | ||||
|   | ||||
| @@ -51,6 +51,13 @@ | ||||
|             "LARGER": "Larger", | ||||
|             "EXTRA_LARGE": "Extra Large" | ||||
|           } | ||||
|         }, | ||||
|         "LANGUAGE": { | ||||
|           "TITLE": "Preferred Language", | ||||
|           "NOTE": "Choose the language you want to use.", | ||||
|           "UPDATE_SUCCESS": "Your Language settings have been updated successfully", | ||||
|           "UPDATE_ERROR": "There is an error while updating the language settings, please try again", | ||||
|           "USE_ACCOUNT_DEFAULT": "Use account default" | ||||
|         } | ||||
|       }, | ||||
|       "MESSAGE_SIGNATURE_SECTION": { | ||||
| @@ -330,6 +337,7 @@ | ||||
|     "REPORTS_LABEL": "Labels", | ||||
|     "REPORTS_INBOX": "Innhólf", | ||||
|     "REPORTS_TEAM": "Team", | ||||
|     "AGENT_ASSIGNMENT": "Agent Assignment", | ||||
|     "SET_AVAILABILITY_TITLE": "Set yourself as", | ||||
|     "SET_YOUR_AVAILABILITY": "Set your availability", | ||||
|     "SLA": "SLA", | ||||
| @@ -418,5 +426,255 @@ | ||||
|       "SWITCH_TO_REPLY": "Switch to Reply", | ||||
|       "TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown" | ||||
|     } | ||||
|   }, | ||||
|   "ASSIGNMENT_POLICY": { | ||||
|     "INDEX": { | ||||
|       "HEADER": { | ||||
|         "TITLE": "Agent assignment", | ||||
|         "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here" | ||||
|       }, | ||||
|       "ASSIGNMENT_POLICY": { | ||||
|         "TITLE": "Assignment policy", | ||||
|         "DESCRIPTION": "Manage how conversations get assigned in inboxes.", | ||||
|         "FEATURES": [ | ||||
|           "Assign by conversations evenly or by available capacity", | ||||
|           "Add fair distribution rules to avoid overloading any agent", | ||||
|           "Add inboxes to a policy - one policy per inbox" | ||||
|         ] | ||||
|       }, | ||||
|       "AGENT_CAPACITY_POLICY": { | ||||
|         "TITLE": "Agent capacity policy", | ||||
|         "DESCRIPTION": "Manage workload for agents.", | ||||
|         "FEATURES": [ | ||||
|           "Define maximum conversations per inbox", | ||||
|           "Create exceptions based on labels and time", | ||||
|           "Add agents to a policy - one policy per agent" | ||||
|         ] | ||||
|       } | ||||
|     }, | ||||
|     "AGENT_ASSIGNMENT_POLICY": { | ||||
|       "INDEX": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Assignment policy", | ||||
|           "CREATE_POLICY": "New policy" | ||||
|         }, | ||||
|         "CARD": { | ||||
|           "ORDER": "Order", | ||||
|           "PRIORITY": "Priority", | ||||
|           "ACTIVE": "Active", | ||||
|           "INACTIVE": "Inactive", | ||||
|           "POPOVER": "Added inboxes", | ||||
|           "EDIT": "Breyta" | ||||
|         }, | ||||
|         "NO_RECORDS_FOUND": "No assignment policies found" | ||||
|       }, | ||||
|       "CREATE": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Create assignment policy" | ||||
|         }, | ||||
|         "CREATE_BUTTON": "Create policy", | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Assignment policy created successfully", | ||||
|           "ERROR_MESSAGE": "Failed to create assignment policy" | ||||
|         } | ||||
|       }, | ||||
|       "EDIT": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Edit assignment policy" | ||||
|         }, | ||||
|         "EDIT_BUTTON": "Update policy", | ||||
|         "CONFIRM_ADD_INBOX_DIALOG": { | ||||
|           "TITLE": "Add inbox", | ||||
|           "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", | ||||
|           "CONFIRM_BUTTON_LABEL": "Continue", | ||||
|           "CANCEL_BUTTON_LABEL": "Hætta við" | ||||
|         }, | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Assignment policy updated successfully", | ||||
|           "ERROR_MESSAGE": "Failed to update assignment policy" | ||||
|         }, | ||||
|         "INBOX_API": { | ||||
|           "ADD": { | ||||
|             "SUCCESS_MESSAGE": "Inbox added to policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to add inbox to policy" | ||||
|           }, | ||||
|           "REMOVE": { | ||||
|             "SUCCESS_MESSAGE": "Inbox removed from policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to remove inbox from policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "FORM": { | ||||
|         "NAME": { | ||||
|           "LABEL": "Policy name:", | ||||
|           "PLACEHOLDER": "Enter policy name" | ||||
|         }, | ||||
|         "DESCRIPTION": { | ||||
|           "LABEL": "Description:", | ||||
|           "PLACEHOLDER": "Enter description" | ||||
|         }, | ||||
|         "STATUS": { | ||||
|           "LABEL": "Staða:", | ||||
|           "PLACEHOLDER": "Select status", | ||||
|           "ACTIVE": "Policy is active", | ||||
|           "INACTIVE": "Policy is inactive" | ||||
|         }, | ||||
|         "ASSIGNMENT_ORDER": { | ||||
|           "LABEL": "Assignment order", | ||||
|           "ROUND_ROBIN": { | ||||
|             "LABEL": "Round robin", | ||||
|             "DESCRIPTION": "Assign conversations evenly among agents." | ||||
|           }, | ||||
|           "BALANCED": { | ||||
|             "LABEL": "Balanced", | ||||
|             "DESCRIPTION": "Assign conversations based on available capacity." | ||||
|           } | ||||
|         }, | ||||
|         "ASSIGNMENT_PRIORITY": { | ||||
|           "LABEL": "Assignment priority", | ||||
|           "EARLIEST_CREATED": { | ||||
|             "LABEL": "Earliest created", | ||||
|             "DESCRIPTION": "The conversation that was created first gets assigned first." | ||||
|           }, | ||||
|           "LONGEST_WAITING": { | ||||
|             "LABEL": "Longest waiting", | ||||
|             "DESCRIPTION": "The conversation waiting the longest gets assigned first." | ||||
|           } | ||||
|         }, | ||||
|         "FAIR_DISTRIBUTION": { | ||||
|           "LABEL": "Fair distribution policy", | ||||
|           "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.", | ||||
|           "INPUT_MAX": "Assign max", | ||||
|           "DURATION": "Conversations per agent in every" | ||||
|         }, | ||||
|         "INBOXES": { | ||||
|           "LABEL": "Added inboxes", | ||||
|           "DESCRIPTION": "Add inboxes for which this policy will be applicable.", | ||||
|           "ADD_BUTTON": "Add inbox", | ||||
|           "DROPDOWN": { | ||||
|             "SEARCH_PLACEHOLDER": "Search and select inboxes to add", | ||||
|             "ADD_BUTTON": "Bæta við" | ||||
|           }, | ||||
|           "EMPTY_STATE": "No inboxes added to this policy, add an inbox to get started", | ||||
|           "API": { | ||||
|             "SUCCESS_MESSAGE": "Inbox successfully added to policy", | ||||
|             "ERROR_MESSAGE": "Failed to add inbox to policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "DELETE_POLICY": { | ||||
|         "SUCCESS_MESSAGE": "Assignment policy deleted successfully", | ||||
|         "ERROR_MESSAGE": "Failed to delete assignment policy" | ||||
|       } | ||||
|     }, | ||||
|     "AGENT_CAPACITY_POLICY": { | ||||
|       "INDEX": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Agent capacity", | ||||
|           "CREATE_POLICY": "New policy" | ||||
|         }, | ||||
|         "CARD": { | ||||
|           "POPOVER": "Added agents", | ||||
|           "EDIT": "Breyta" | ||||
|         }, | ||||
|         "NO_RECORDS_FOUND": "No agent capacity policies found" | ||||
|       }, | ||||
|       "CREATE": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Create agent capacity policy" | ||||
|         }, | ||||
|         "CREATE_BUTTON": "Create policy", | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Agent capacity policy created successfully", | ||||
|           "ERROR_MESSAGE": "Failed to create agent capacity policy" | ||||
|         } | ||||
|       }, | ||||
|       "EDIT": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Edit agent capacity policy" | ||||
|         }, | ||||
|         "EDIT_BUTTON": "Update policy", | ||||
|         "CONFIRM_ADD_AGENT_DIALOG": { | ||||
|           "TITLE": "Add agent", | ||||
|           "DESCRIPTION": "{agentName} is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", | ||||
|           "CONFIRM_BUTTON_LABEL": "Continue", | ||||
|           "CANCEL_BUTTON_LABEL": "Hætta við" | ||||
|         }, | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Agent capacity policy updated successfully", | ||||
|           "ERROR_MESSAGE": "Failed to update agent capacity policy" | ||||
|         }, | ||||
|         "AGENT_API": { | ||||
|           "ADD": { | ||||
|             "SUCCESS_MESSAGE": "Agent added to policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to add agent to policy" | ||||
|           }, | ||||
|           "REMOVE": { | ||||
|             "SUCCESS_MESSAGE": "Agent removed from policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to remove agent from policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "FORM": { | ||||
|         "NAME": { | ||||
|           "LABEL": "Policy name:", | ||||
|           "PLACEHOLDER": "Enter policy name" | ||||
|         }, | ||||
|         "DESCRIPTION": { | ||||
|           "LABEL": "Description:", | ||||
|           "PLACEHOLDER": "Enter description" | ||||
|         }, | ||||
|         "INBOX_CAPACITY_LIMIT": { | ||||
|           "LABEL": "Inbox capacity limits", | ||||
|           "ADD_BUTTON": "Add inbox", | ||||
|           "FIELD": { | ||||
|             "SELECT_INBOX": "Select inbox", | ||||
|             "MAX_CONVERSATIONS": "Max conversations", | ||||
|             "SET_LIMIT": "Set limit" | ||||
|           }, | ||||
|           "EMPTY_STATE": "No inbox limit set" | ||||
|         }, | ||||
|         "EXCLUSION_RULES": { | ||||
|           "LABEL": "Exclusion rules", | ||||
|           "DESCRIPTION": "Conversations that satisfy the following conditions would not count towards agent capacity", | ||||
|           "TAGS": { | ||||
|             "LABEL": "Exclude conversations tagged with specific labels", | ||||
|             "ADD_TAG": "add tag", | ||||
|             "DROPDOWN": { | ||||
|               "SEARCH_PLACEHOLDER": "Search and select tags to add" | ||||
|             }, | ||||
|             "EMPTY_STATE": "No tags added to this policy." | ||||
|           }, | ||||
|           "DURATION": { | ||||
|             "LABEL": "Exclude conversations older than a specified duration", | ||||
|             "PLACEHOLDER": "Set time" | ||||
|           } | ||||
|         }, | ||||
|         "USERS": { | ||||
|           "LABEL": "Assigned agents", | ||||
|           "DESCRIPTION": "Add agents for which this policy will be applicable.", | ||||
|           "ADD_BUTTON": "Add agent", | ||||
|           "DROPDOWN": { | ||||
|             "SEARCH_PLACEHOLDER": "Search and select agents to add", | ||||
|             "ADD_BUTTON": "Bæta við" | ||||
|           }, | ||||
|           "EMPTY_STATE": "No agents added", | ||||
|           "API": { | ||||
|             "SUCCESS_MESSAGE": "Agent successfully added to policy", | ||||
|             "ERROR_MESSAGE": "Failed to add agent to policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "DELETE_POLICY": { | ||||
|         "SUCCESS_MESSAGE": "Agent capacity policy deleted successfully", | ||||
|         "ERROR_MESSAGE": "Failed to delete agent capacity policy" | ||||
|       } | ||||
|     }, | ||||
|     "DELETE_POLICY": { | ||||
|       "TITLE": "Delete policy", | ||||
|       "DESCRIPTION": "Are you sure you want to delete this policy? This action cannot be undone.", | ||||
|       "CONFIRM_BUTTON_LABEL": "Eyða", | ||||
|       "CANCEL_BUTTON_LABEL": "Hætta við" | ||||
|     } | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -71,6 +71,17 @@ | ||||
|       "SHOW_LABELS": "Show labels", | ||||
|       "HIDE_LABELS": "Hide labels" | ||||
|     }, | ||||
|     "VOICE_CALL": { | ||||
|       "INCOMING_CALL": "Incoming call", | ||||
|       "OUTGOING_CALL": "Outgoing call", | ||||
|       "CALL_IN_PROGRESS": "Call in progress", | ||||
|       "NO_ANSWER": "No answer", | ||||
|       "MISSED_CALL": "Missed call", | ||||
|       "CALL_ENDED": "Call ended", | ||||
|       "NOT_ANSWERED_YET": "Not answered yet", | ||||
|       "THEY_ANSWERED": "They answered", | ||||
|       "YOU_ANSWERED": "You answered" | ||||
|     }, | ||||
|     "HEADER": { | ||||
|       "RESOLVE_ACTION": "Risolvi", | ||||
|       "REOPEN_ACTION": "Riapri", | ||||
|   | ||||
| @@ -51,6 +51,13 @@ | ||||
|             "LARGER": "Larger", | ||||
|             "EXTRA_LARGE": "Extra Large" | ||||
|           } | ||||
|         }, | ||||
|         "LANGUAGE": { | ||||
|           "TITLE": "Preferred Language", | ||||
|           "NOTE": "Choose the language you want to use.", | ||||
|           "UPDATE_SUCCESS": "Your Language settings have been updated successfully", | ||||
|           "UPDATE_ERROR": "There is an error while updating the language settings, please try again", | ||||
|           "USE_ACCOUNT_DEFAULT": "Use account default" | ||||
|         } | ||||
|       }, | ||||
|       "MESSAGE_SIGNATURE_SECTION": { | ||||
| @@ -330,6 +337,7 @@ | ||||
|     "REPORTS_LABEL": "Etichette", | ||||
|     "REPORTS_INBOX": "Posta", | ||||
|     "REPORTS_TEAM": "Team", | ||||
|     "AGENT_ASSIGNMENT": "Agent Assignment", | ||||
|     "SET_AVAILABILITY_TITLE": "Imposta te stesso come", | ||||
|     "SET_YOUR_AVAILABILITY": "Imposta la tua disponibilità", | ||||
|     "SLA": "SLA", | ||||
| @@ -418,5 +426,255 @@ | ||||
|       "SWITCH_TO_REPLY": "Passa a Risposta", | ||||
|       "TOGGLE_SNOOZE_DROPDOWN": "Attiva/Disattiva sospensione a discesa" | ||||
|     } | ||||
|   }, | ||||
|   "ASSIGNMENT_POLICY": { | ||||
|     "INDEX": { | ||||
|       "HEADER": { | ||||
|         "TITLE": "Agent assignment", | ||||
|         "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here" | ||||
|       }, | ||||
|       "ASSIGNMENT_POLICY": { | ||||
|         "TITLE": "Assignment policy", | ||||
|         "DESCRIPTION": "Manage how conversations get assigned in inboxes.", | ||||
|         "FEATURES": [ | ||||
|           "Assign by conversations evenly or by available capacity", | ||||
|           "Add fair distribution rules to avoid overloading any agent", | ||||
|           "Add inboxes to a policy - one policy per inbox" | ||||
|         ] | ||||
|       }, | ||||
|       "AGENT_CAPACITY_POLICY": { | ||||
|         "TITLE": "Agent capacity policy", | ||||
|         "DESCRIPTION": "Manage workload for agents.", | ||||
|         "FEATURES": [ | ||||
|           "Define maximum conversations per inbox", | ||||
|           "Create exceptions based on labels and time", | ||||
|           "Add agents to a policy - one policy per agent" | ||||
|         ] | ||||
|       } | ||||
|     }, | ||||
|     "AGENT_ASSIGNMENT_POLICY": { | ||||
|       "INDEX": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Assignment policy", | ||||
|           "CREATE_POLICY": "New policy" | ||||
|         }, | ||||
|         "CARD": { | ||||
|           "ORDER": "Order", | ||||
|           "PRIORITY": "Priorità", | ||||
|           "ACTIVE": "Attivo", | ||||
|           "INACTIVE": "Inactive", | ||||
|           "POPOVER": "Added inboxes", | ||||
|           "EDIT": "Modifica" | ||||
|         }, | ||||
|         "NO_RECORDS_FOUND": "No assignment policies found" | ||||
|       }, | ||||
|       "CREATE": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Create assignment policy" | ||||
|         }, | ||||
|         "CREATE_BUTTON": "Create policy", | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Assignment policy created successfully", | ||||
|           "ERROR_MESSAGE": "Failed to create assignment policy" | ||||
|         } | ||||
|       }, | ||||
|       "EDIT": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Edit assignment policy" | ||||
|         }, | ||||
|         "EDIT_BUTTON": "Update policy", | ||||
|         "CONFIRM_ADD_INBOX_DIALOG": { | ||||
|           "TITLE": "Add inbox", | ||||
|           "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", | ||||
|           "CONFIRM_BUTTON_LABEL": "Continue", | ||||
|           "CANCEL_BUTTON_LABEL": "annulla" | ||||
|         }, | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Assignment policy updated successfully", | ||||
|           "ERROR_MESSAGE": "Failed to update assignment policy" | ||||
|         }, | ||||
|         "INBOX_API": { | ||||
|           "ADD": { | ||||
|             "SUCCESS_MESSAGE": "Inbox added to policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to add inbox to policy" | ||||
|           }, | ||||
|           "REMOVE": { | ||||
|             "SUCCESS_MESSAGE": "Inbox removed from policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to remove inbox from policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "FORM": { | ||||
|         "NAME": { | ||||
|           "LABEL": "Policy name:", | ||||
|           "PLACEHOLDER": "Enter policy name" | ||||
|         }, | ||||
|         "DESCRIPTION": { | ||||
|           "LABEL": "Descrizione:", | ||||
|           "PLACEHOLDER": "Enter description" | ||||
|         }, | ||||
|         "STATUS": { | ||||
|           "LABEL": "Stato:", | ||||
|           "PLACEHOLDER": "Select status", | ||||
|           "ACTIVE": "Policy is active", | ||||
|           "INACTIVE": "Policy is inactive" | ||||
|         }, | ||||
|         "ASSIGNMENT_ORDER": { | ||||
|           "LABEL": "Assignment order", | ||||
|           "ROUND_ROBIN": { | ||||
|             "LABEL": "Round robin", | ||||
|             "DESCRIPTION": "Assign conversations evenly among agents." | ||||
|           }, | ||||
|           "BALANCED": { | ||||
|             "LABEL": "Balanced", | ||||
|             "DESCRIPTION": "Assign conversations based on available capacity." | ||||
|           } | ||||
|         }, | ||||
|         "ASSIGNMENT_PRIORITY": { | ||||
|           "LABEL": "Assignment priority", | ||||
|           "EARLIEST_CREATED": { | ||||
|             "LABEL": "Earliest created", | ||||
|             "DESCRIPTION": "The conversation that was created first gets assigned first." | ||||
|           }, | ||||
|           "LONGEST_WAITING": { | ||||
|             "LABEL": "Longest waiting", | ||||
|             "DESCRIPTION": "The conversation waiting the longest gets assigned first." | ||||
|           } | ||||
|         }, | ||||
|         "FAIR_DISTRIBUTION": { | ||||
|           "LABEL": "Fair distribution policy", | ||||
|           "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.", | ||||
|           "INPUT_MAX": "Assign max", | ||||
|           "DURATION": "Conversations per agent in every" | ||||
|         }, | ||||
|         "INBOXES": { | ||||
|           "LABEL": "Added inboxes", | ||||
|           "DESCRIPTION": "Add inboxes for which this policy will be applicable.", | ||||
|           "ADD_BUTTON": "Add inbox", | ||||
|           "DROPDOWN": { | ||||
|             "SEARCH_PLACEHOLDER": "Search and select inboxes to add", | ||||
|             "ADD_BUTTON": "Aggiungi" | ||||
|           }, | ||||
|           "EMPTY_STATE": "No inboxes added to this policy, add an inbox to get started", | ||||
|           "API": { | ||||
|             "SUCCESS_MESSAGE": "Inbox successfully added to policy", | ||||
|             "ERROR_MESSAGE": "Failed to add inbox to policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "DELETE_POLICY": { | ||||
|         "SUCCESS_MESSAGE": "Assignment policy deleted successfully", | ||||
|         "ERROR_MESSAGE": "Failed to delete assignment policy" | ||||
|       } | ||||
|     }, | ||||
|     "AGENT_CAPACITY_POLICY": { | ||||
|       "INDEX": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Agent capacity", | ||||
|           "CREATE_POLICY": "New policy" | ||||
|         }, | ||||
|         "CARD": { | ||||
|           "POPOVER": "Added agents", | ||||
|           "EDIT": "Modifica" | ||||
|         }, | ||||
|         "NO_RECORDS_FOUND": "No agent capacity policies found" | ||||
|       }, | ||||
|       "CREATE": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Create agent capacity policy" | ||||
|         }, | ||||
|         "CREATE_BUTTON": "Create policy", | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Agent capacity policy created successfully", | ||||
|           "ERROR_MESSAGE": "Failed to create agent capacity policy" | ||||
|         } | ||||
|       }, | ||||
|       "EDIT": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Edit agent capacity policy" | ||||
|         }, | ||||
|         "EDIT_BUTTON": "Update policy", | ||||
|         "CONFIRM_ADD_AGENT_DIALOG": { | ||||
|           "TITLE": "Add agent", | ||||
|           "DESCRIPTION": "{agentName} is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", | ||||
|           "CONFIRM_BUTTON_LABEL": "Continue", | ||||
|           "CANCEL_BUTTON_LABEL": "annulla" | ||||
|         }, | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Agent capacity policy updated successfully", | ||||
|           "ERROR_MESSAGE": "Failed to update agent capacity policy" | ||||
|         }, | ||||
|         "AGENT_API": { | ||||
|           "ADD": { | ||||
|             "SUCCESS_MESSAGE": "Agent added to policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to add agent to policy" | ||||
|           }, | ||||
|           "REMOVE": { | ||||
|             "SUCCESS_MESSAGE": "Agent removed from policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to remove agent from policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "FORM": { | ||||
|         "NAME": { | ||||
|           "LABEL": "Policy name:", | ||||
|           "PLACEHOLDER": "Enter policy name" | ||||
|         }, | ||||
|         "DESCRIPTION": { | ||||
|           "LABEL": "Descrizione:", | ||||
|           "PLACEHOLDER": "Enter description" | ||||
|         }, | ||||
|         "INBOX_CAPACITY_LIMIT": { | ||||
|           "LABEL": "Inbox capacity limits", | ||||
|           "ADD_BUTTON": "Add inbox", | ||||
|           "FIELD": { | ||||
|             "SELECT_INBOX": "Select inbox", | ||||
|             "MAX_CONVERSATIONS": "Max conversations", | ||||
|             "SET_LIMIT": "Set limit" | ||||
|           }, | ||||
|           "EMPTY_STATE": "No inbox limit set" | ||||
|         }, | ||||
|         "EXCLUSION_RULES": { | ||||
|           "LABEL": "Exclusion rules", | ||||
|           "DESCRIPTION": "Conversations that satisfy the following conditions would not count towards agent capacity", | ||||
|           "TAGS": { | ||||
|             "LABEL": "Exclude conversations tagged with specific labels", | ||||
|             "ADD_TAG": "add tag", | ||||
|             "DROPDOWN": { | ||||
|               "SEARCH_PLACEHOLDER": "Search and select tags to add" | ||||
|             }, | ||||
|             "EMPTY_STATE": "No tags added to this policy." | ||||
|           }, | ||||
|           "DURATION": { | ||||
|             "LABEL": "Exclude conversations older than a specified duration", | ||||
|             "PLACEHOLDER": "Set time" | ||||
|           } | ||||
|         }, | ||||
|         "USERS": { | ||||
|           "LABEL": "Assigned agents", | ||||
|           "DESCRIPTION": "Add agents for which this policy will be applicable.", | ||||
|           "ADD_BUTTON": "Add agent", | ||||
|           "DROPDOWN": { | ||||
|             "SEARCH_PLACEHOLDER": "Search and select agents to add", | ||||
|             "ADD_BUTTON": "Aggiungi" | ||||
|           }, | ||||
|           "EMPTY_STATE": "No agents added", | ||||
|           "API": { | ||||
|             "SUCCESS_MESSAGE": "Agent successfully added to policy", | ||||
|             "ERROR_MESSAGE": "Failed to add agent to policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "DELETE_POLICY": { | ||||
|         "SUCCESS_MESSAGE": "Agent capacity policy deleted successfully", | ||||
|         "ERROR_MESSAGE": "Failed to delete agent capacity policy" | ||||
|       } | ||||
|     }, | ||||
|     "DELETE_POLICY": { | ||||
|       "TITLE": "Delete policy", | ||||
|       "DESCRIPTION": "Are you sure you want to delete this policy? This action cannot be undone.", | ||||
|       "CONFIRM_BUTTON_LABEL": "Elimina", | ||||
|       "CANCEL_BUTTON_LABEL": "annulla" | ||||
|     } | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -71,6 +71,17 @@ | ||||
|       "SHOW_LABELS": "ラベルを表示", | ||||
|       "HIDE_LABELS": "ラベルを隠す" | ||||
|     }, | ||||
|     "VOICE_CALL": { | ||||
|       "INCOMING_CALL": "Incoming call", | ||||
|       "OUTGOING_CALL": "Outgoing call", | ||||
|       "CALL_IN_PROGRESS": "Call in progress", | ||||
|       "NO_ANSWER": "No answer", | ||||
|       "MISSED_CALL": "Missed call", | ||||
|       "CALL_ENDED": "Call ended", | ||||
|       "NOT_ANSWERED_YET": "Not answered yet", | ||||
|       "THEY_ANSWERED": "They answered", | ||||
|       "YOU_ANSWERED": "You answered" | ||||
|     }, | ||||
|     "HEADER": { | ||||
|       "RESOLVE_ACTION": "解決する", | ||||
|       "REOPEN_ACTION": "再開する", | ||||
|   | ||||
| @@ -51,6 +51,13 @@ | ||||
|             "LARGER": "Larger", | ||||
|             "EXTRA_LARGE": "Extra Large" | ||||
|           } | ||||
|         }, | ||||
|         "LANGUAGE": { | ||||
|           "TITLE": "Preferred Language", | ||||
|           "NOTE": "Choose the language you want to use.", | ||||
|           "UPDATE_SUCCESS": "Your Language settings have been updated successfully", | ||||
|           "UPDATE_ERROR": "There is an error while updating the language settings, please try again", | ||||
|           "USE_ACCOUNT_DEFAULT": "Use account default" | ||||
|         } | ||||
|       }, | ||||
|       "MESSAGE_SIGNATURE_SECTION": { | ||||
| @@ -330,6 +337,7 @@ | ||||
|     "REPORTS_LABEL": "ラベル", | ||||
|     "REPORTS_INBOX": "受信トレイ", | ||||
|     "REPORTS_TEAM": "チーム", | ||||
|     "AGENT_ASSIGNMENT": "Agent Assignment", | ||||
|     "SET_AVAILABILITY_TITLE": "ステータスを設定", | ||||
|     "SET_YOUR_AVAILABILITY": "利用可能ステータスを設定", | ||||
|     "SLA": "SLA", | ||||
| @@ -418,5 +426,255 @@ | ||||
|       "SWITCH_TO_REPLY": "返信に切り替え", | ||||
|       "TOGGLE_SNOOZE_DROPDOWN": "スヌーズドロップダウンを切り替え" | ||||
|     } | ||||
|   }, | ||||
|   "ASSIGNMENT_POLICY": { | ||||
|     "INDEX": { | ||||
|       "HEADER": { | ||||
|         "TITLE": "Agent assignment", | ||||
|         "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here" | ||||
|       }, | ||||
|       "ASSIGNMENT_POLICY": { | ||||
|         "TITLE": "Assignment policy", | ||||
|         "DESCRIPTION": "Manage how conversations get assigned in inboxes.", | ||||
|         "FEATURES": [ | ||||
|           "Assign by conversations evenly or by available capacity", | ||||
|           "Add fair distribution rules to avoid overloading any agent", | ||||
|           "Add inboxes to a policy - one policy per inbox" | ||||
|         ] | ||||
|       }, | ||||
|       "AGENT_CAPACITY_POLICY": { | ||||
|         "TITLE": "Agent capacity policy", | ||||
|         "DESCRIPTION": "Manage workload for agents.", | ||||
|         "FEATURES": [ | ||||
|           "Define maximum conversations per inbox", | ||||
|           "Create exceptions based on labels and time", | ||||
|           "Add agents to a policy - one policy per agent" | ||||
|         ] | ||||
|       } | ||||
|     }, | ||||
|     "AGENT_ASSIGNMENT_POLICY": { | ||||
|       "INDEX": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Assignment policy", | ||||
|           "CREATE_POLICY": "New policy" | ||||
|         }, | ||||
|         "CARD": { | ||||
|           "ORDER": "Order", | ||||
|           "PRIORITY": "優先度", | ||||
|           "ACTIVE": "有効", | ||||
|           "INACTIVE": "Inactive", | ||||
|           "POPOVER": "Added inboxes", | ||||
|           "EDIT": "編集" | ||||
|         }, | ||||
|         "NO_RECORDS_FOUND": "No assignment policies found" | ||||
|       }, | ||||
|       "CREATE": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Create assignment policy" | ||||
|         }, | ||||
|         "CREATE_BUTTON": "Create policy", | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Assignment policy created successfully", | ||||
|           "ERROR_MESSAGE": "Failed to create assignment policy" | ||||
|         } | ||||
|       }, | ||||
|       "EDIT": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Edit assignment policy" | ||||
|         }, | ||||
|         "EDIT_BUTTON": "Update policy", | ||||
|         "CONFIRM_ADD_INBOX_DIALOG": { | ||||
|           "TITLE": "Add inbox", | ||||
|           "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", | ||||
|           "CONFIRM_BUTTON_LABEL": "Continue", | ||||
|           "CANCEL_BUTTON_LABEL": "キャンセル" | ||||
|         }, | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Assignment policy updated successfully", | ||||
|           "ERROR_MESSAGE": "Failed to update assignment policy" | ||||
|         }, | ||||
|         "INBOX_API": { | ||||
|           "ADD": { | ||||
|             "SUCCESS_MESSAGE": "Inbox added to policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to add inbox to policy" | ||||
|           }, | ||||
|           "REMOVE": { | ||||
|             "SUCCESS_MESSAGE": "Inbox removed from policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to remove inbox from policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "FORM": { | ||||
|         "NAME": { | ||||
|           "LABEL": "Policy name:", | ||||
|           "PLACEHOLDER": "Enter policy name" | ||||
|         }, | ||||
|         "DESCRIPTION": { | ||||
|           "LABEL": "説明:", | ||||
|           "PLACEHOLDER": "説明を入力" | ||||
|         }, | ||||
|         "STATUS": { | ||||
|           "LABEL": "ステータス:", | ||||
|           "PLACEHOLDER": "状況を選択", | ||||
|           "ACTIVE": "Policy is active", | ||||
|           "INACTIVE": "Policy is inactive" | ||||
|         }, | ||||
|         "ASSIGNMENT_ORDER": { | ||||
|           "LABEL": "Assignment order", | ||||
|           "ROUND_ROBIN": { | ||||
|             "LABEL": "Round robin", | ||||
|             "DESCRIPTION": "Assign conversations evenly among agents." | ||||
|           }, | ||||
|           "BALANCED": { | ||||
|             "LABEL": "Balanced", | ||||
|             "DESCRIPTION": "Assign conversations based on available capacity." | ||||
|           } | ||||
|         }, | ||||
|         "ASSIGNMENT_PRIORITY": { | ||||
|           "LABEL": "Assignment priority", | ||||
|           "EARLIEST_CREATED": { | ||||
|             "LABEL": "Earliest created", | ||||
|             "DESCRIPTION": "The conversation that was created first gets assigned first." | ||||
|           }, | ||||
|           "LONGEST_WAITING": { | ||||
|             "LABEL": "Longest waiting", | ||||
|             "DESCRIPTION": "The conversation waiting the longest gets assigned first." | ||||
|           } | ||||
|         }, | ||||
|         "FAIR_DISTRIBUTION": { | ||||
|           "LABEL": "Fair distribution policy", | ||||
|           "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.", | ||||
|           "INPUT_MAX": "Assign max", | ||||
|           "DURATION": "Conversations per agent in every" | ||||
|         }, | ||||
|         "INBOXES": { | ||||
|           "LABEL": "Added inboxes", | ||||
|           "DESCRIPTION": "Add inboxes for which this policy will be applicable.", | ||||
|           "ADD_BUTTON": "Add inbox", | ||||
|           "DROPDOWN": { | ||||
|             "SEARCH_PLACEHOLDER": "Search and select inboxes to add", | ||||
|             "ADD_BUTTON": "追加" | ||||
|           }, | ||||
|           "EMPTY_STATE": "No inboxes added to this policy, add an inbox to get started", | ||||
|           "API": { | ||||
|             "SUCCESS_MESSAGE": "Inbox successfully added to policy", | ||||
|             "ERROR_MESSAGE": "Failed to add inbox to policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "DELETE_POLICY": { | ||||
|         "SUCCESS_MESSAGE": "Assignment policy deleted successfully", | ||||
|         "ERROR_MESSAGE": "Failed to delete assignment policy" | ||||
|       } | ||||
|     }, | ||||
|     "AGENT_CAPACITY_POLICY": { | ||||
|       "INDEX": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Agent capacity", | ||||
|           "CREATE_POLICY": "New policy" | ||||
|         }, | ||||
|         "CARD": { | ||||
|           "POPOVER": "Added agents", | ||||
|           "EDIT": "編集" | ||||
|         }, | ||||
|         "NO_RECORDS_FOUND": "No agent capacity policies found" | ||||
|       }, | ||||
|       "CREATE": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Create agent capacity policy" | ||||
|         }, | ||||
|         "CREATE_BUTTON": "Create policy", | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Agent capacity policy created successfully", | ||||
|           "ERROR_MESSAGE": "Failed to create agent capacity policy" | ||||
|         } | ||||
|       }, | ||||
|       "EDIT": { | ||||
|         "HEADER": { | ||||
|           "TITLE": "Edit agent capacity policy" | ||||
|         }, | ||||
|         "EDIT_BUTTON": "Update policy", | ||||
|         "CONFIRM_ADD_AGENT_DIALOG": { | ||||
|           "TITLE": "Add agent", | ||||
|           "DESCRIPTION": "{agentName} is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", | ||||
|           "CONFIRM_BUTTON_LABEL": "Continue", | ||||
|           "CANCEL_BUTTON_LABEL": "キャンセル" | ||||
|         }, | ||||
|         "API": { | ||||
|           "SUCCESS_MESSAGE": "Agent capacity policy updated successfully", | ||||
|           "ERROR_MESSAGE": "Failed to update agent capacity policy" | ||||
|         }, | ||||
|         "AGENT_API": { | ||||
|           "ADD": { | ||||
|             "SUCCESS_MESSAGE": "Agent added to policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to add agent to policy" | ||||
|           }, | ||||
|           "REMOVE": { | ||||
|             "SUCCESS_MESSAGE": "Agent removed from policy successfully", | ||||
|             "ERROR_MESSAGE": "Failed to remove agent from policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "FORM": { | ||||
|         "NAME": { | ||||
|           "LABEL": "Policy name:", | ||||
|           "PLACEHOLDER": "Enter policy name" | ||||
|         }, | ||||
|         "DESCRIPTION": { | ||||
|           "LABEL": "説明:", | ||||
|           "PLACEHOLDER": "説明を入力" | ||||
|         }, | ||||
|         "INBOX_CAPACITY_LIMIT": { | ||||
|           "LABEL": "Inbox capacity limits", | ||||
|           "ADD_BUTTON": "Add inbox", | ||||
|           "FIELD": { | ||||
|             "SELECT_INBOX": "Select inbox", | ||||
|             "MAX_CONVERSATIONS": "Max conversations", | ||||
|             "SET_LIMIT": "Set limit" | ||||
|           }, | ||||
|           "EMPTY_STATE": "No inbox limit set" | ||||
|         }, | ||||
|         "EXCLUSION_RULES": { | ||||
|           "LABEL": "Exclusion rules", | ||||
|           "DESCRIPTION": "Conversations that satisfy the following conditions would not count towards agent capacity", | ||||
|           "TAGS": { | ||||
|             "LABEL": "Exclude conversations tagged with specific labels", | ||||
|             "ADD_TAG": "add tag", | ||||
|             "DROPDOWN": { | ||||
|               "SEARCH_PLACEHOLDER": "Search and select tags to add" | ||||
|             }, | ||||
|             "EMPTY_STATE": "No tags added to this policy." | ||||
|           }, | ||||
|           "DURATION": { | ||||
|             "LABEL": "Exclude conversations older than a specified duration", | ||||
|             "PLACEHOLDER": "Set time" | ||||
|           } | ||||
|         }, | ||||
|         "USERS": { | ||||
|           "LABEL": "Assigned agents", | ||||
|           "DESCRIPTION": "Add agents for which this policy will be applicable.", | ||||
|           "ADD_BUTTON": "Add agent", | ||||
|           "DROPDOWN": { | ||||
|             "SEARCH_PLACEHOLDER": "Search and select agents to add", | ||||
|             "ADD_BUTTON": "追加" | ||||
|           }, | ||||
|           "EMPTY_STATE": "No agents added", | ||||
|           "API": { | ||||
|             "SUCCESS_MESSAGE": "Agent successfully added to policy", | ||||
|             "ERROR_MESSAGE": "Failed to add agent to policy" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "DELETE_POLICY": { | ||||
|         "SUCCESS_MESSAGE": "Agent capacity policy deleted successfully", | ||||
|         "ERROR_MESSAGE": "Failed to delete agent capacity policy" | ||||
|       } | ||||
|     }, | ||||
|     "DELETE_POLICY": { | ||||
|       "TITLE": "Delete policy", | ||||
|       "DESCRIPTION": "Are you sure you want to delete this policy? This action cannot be undone.", | ||||
|       "CONFIRM_BUTTON_LABEL": "削除", | ||||
|       "CANCEL_BUTTON_LABEL": "キャンセル" | ||||
|     } | ||||
|   } | ||||
| } | ||||
|   | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user
	 Sojan Jose
					Sojan Jose