mirror of
				https://github.com/lingble/chatwoot.git
				synced 2025-10-31 19:17:48 +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 | .claude/settings.local.json | ||||||
| .cursor | .cursor | ||||||
| CLAUDE.local.md | CLAUDE.local.md | ||||||
|  |  | ||||||
|  | # Histoire deployment | ||||||
|  | .netlify | ||||||
|  | .histoire | ||||||
|   | |||||||
							
								
								
									
										2
									
								
								Gemfile
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								Gemfile
									
									
									
									
									
								
							| @@ -81,6 +81,7 @@ gem 'devise_token_auth', '>= 1.2.3' | |||||||
| # authorization | # authorization | ||||||
| gem 'jwt' | gem 'jwt' | ||||||
| gem 'pundit' | gem 'pundit' | ||||||
|  |  | ||||||
| # super admin | # super admin | ||||||
| gem 'administrate', '>= 0.20.1' | gem 'administrate', '>= 0.20.1' | ||||||
| gem 'administrate-field-active_storage', '>= 1.0.3' | gem 'administrate-field-active_storage', '>= 1.0.3' | ||||||
| @@ -171,6 +172,7 @@ gem 'audited', '~> 5.4', '>= 5.4.1' | |||||||
|  |  | ||||||
| # need for google auth | # need for google auth | ||||||
| gem 'omniauth', '>= 2.1.2' | gem 'omniauth', '>= 2.1.2' | ||||||
|  | gem 'omniauth-saml' | ||||||
| gem 'omniauth-google-oauth2', '>= 1.1.3' | gem 'omniauth-google-oauth2', '>= 1.1.3' | ||||||
| gem 'omniauth-rails_csrf_protection', '~> 1.0', '>= 1.0.2' | 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) |     oj (3.16.10) | ||||||
|       bigdecimal (>= 3.0) |       bigdecimal (>= 3.0) | ||||||
|       ostruct (>= 0.2) |       ostruct (>= 0.2) | ||||||
|     omniauth (2.1.2) |     omniauth (2.1.3) | ||||||
|       hashie (>= 3.4.6) |       hashie (>= 3.4.6) | ||||||
|  |       logger | ||||||
|       rack (>= 2.2.3) |       rack (>= 2.2.3) | ||||||
|       rack-protection |       rack-protection | ||||||
|     omniauth-google-oauth2 (1.1.3) |     omniauth-google-oauth2 (1.1.3) | ||||||
| @@ -604,6 +605,9 @@ GEM | |||||||
|     omniauth-rails_csrf_protection (1.0.2) |     omniauth-rails_csrf_protection (1.0.2) | ||||||
|       actionpack (>= 4.2) |       actionpack (>= 4.2) | ||||||
|       omniauth (~> 2.0) |       omniauth (~> 2.0) | ||||||
|  |     omniauth-saml (2.2.4) | ||||||
|  |       omniauth (~> 2.1) | ||||||
|  |       ruby-saml (~> 1.18) | ||||||
|     opensearch-ruby (3.4.0) |     opensearch-ruby (3.4.0) | ||||||
|       faraday (>= 1.0, < 3) |       faraday (>= 1.0, < 3) | ||||||
|       multi_json (>= 1.0) |       multi_json (>= 1.0) | ||||||
| @@ -773,6 +777,9 @@ GEM | |||||||
|       faraday (>= 1) |       faraday (>= 1) | ||||||
|       faraday-multipart (>= 1) |       faraday-multipart (>= 1) | ||||||
|     ruby-progressbar (1.13.0) |     ruby-progressbar (1.13.0) | ||||||
|  |     ruby-saml (1.18.1) | ||||||
|  |       nokogiri (>= 1.13.10) | ||||||
|  |       rexml | ||||||
|     ruby-vips (2.1.4) |     ruby-vips (2.1.4) | ||||||
|       ffi (~> 1.12) |       ffi (~> 1.12) | ||||||
|     ruby2_keywords (0.0.5) |     ruby2_keywords (0.0.5) | ||||||
| @@ -1047,6 +1054,7 @@ DEPENDENCIES | |||||||
|   omniauth-google-oauth2 (>= 1.1.3) |   omniauth-google-oauth2 (>= 1.1.3) | ||||||
|   omniauth-oauth2 |   omniauth-oauth2 | ||||||
|   omniauth-rails_csrf_protection (~> 1.0, >= 1.0.2) |   omniauth-rails_csrf_protection (~> 1.0, >= 1.0.2) | ||||||
|  |   omniauth-saml | ||||||
|   opensearch-ruby |   opensearch-ruby | ||||||
|   pg |   pg | ||||||
|   pg_search |   pg_search | ||||||
|   | |||||||
| @@ -4,17 +4,28 @@ module SwitchLocale | |||||||
|   private |   private | ||||||
|  |  | ||||||
|   def switch_locale(&) |   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] |     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 |     locale ||= locale_from_custom_domain | ||||||
|  |  | ||||||
|     # if locale is not set in account, let's use DEFAULT_LOCALE env variable |     # if locale is not set in account, let's use DEFAULT_LOCALE env variable | ||||||
|     locale ||= ENV.fetch('DEFAULT_LOCALE', nil) |     locale ||= ENV.fetch('DEFAULT_LOCALE', nil) | ||||||
|  |  | ||||||
|     set_locale(locale, &) |     set_locale(locale, &) | ||||||
|   end |   end | ||||||
|  |  | ||||||
|   def switch_locale_using_account_locale(&) |   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, &) |     set_locale(locale, &) | ||||||
|   end |   end | ||||||
|  |  | ||||||
| @@ -32,6 +43,12 @@ module SwitchLocale | |||||||
|     @portal.default_locale |     @portal.default_locale | ||||||
|   end |   end | ||||||
|  |  | ||||||
|  |   def locale_from_user | ||||||
|  |     return unless @user | ||||||
|  |  | ||||||
|  |     @user.ui_settings&.dig('locale') | ||||||
|  |   end | ||||||
|  |  | ||||||
|   def set_locale(locale, &) |   def set_locale(locale, &) | ||||||
|     safe_locale = validate_and_get_locale(locale) |     safe_locale = validate_and_get_locale(locale) | ||||||
|     # Ensure locale won't bleed into other requests |     # Ensure locale won't bleed into other requests | ||||||
|   | |||||||
| @@ -47,10 +47,8 @@ class DeviseOverrides::OmniauthCallbacksController < DeviseTokenAuth::OmniauthCa | |||||||
|   end |   end | ||||||
|  |  | ||||||
|   def get_resource_from_auth_hash # rubocop:disable Naming/AccessorMethodName |   def get_resource_from_auth_hash # rubocop:disable Naming/AccessorMethodName | ||||||
|     # find the user with their email instead of UID and token |     email = auth_hash.dig('info', 'email') | ||||||
|     @resource = resource_class.where( |     @resource = resource_class.from_email(email) | ||||||
|       email: auth_hash['info']['email'] |  | ||||||
|     ).first |  | ||||||
|   end |   end | ||||||
|  |  | ||||||
|   def validate_signup_email_is_business_domain? |   def validate_signup_email_is_business_domain? | ||||||
| @@ -75,3 +73,5 @@ class DeviseOverrides::OmniauthCallbacksController < DeviseTokenAuth::OmniauthCa | |||||||
|     'user' |     'user' | ||||||
|   end |   end | ||||||
| end | end | ||||||
|  |  | ||||||
|  | DeviseOverrides::OmniauthCallbacksController.prepend_mod_with('DeviseOverrides::OmniauthCallbacksController') | ||||||
|   | |||||||
| @@ -44,3 +44,5 @@ class DeviseOverrides::PasswordsController < Devise::PasswordsController | |||||||
|     }, status: status |     }, status: status | ||||||
|   end |   end | ||||||
| end | end | ||||||
|  |  | ||||||
|  | DeviseOverrides::PasswordsController.prepend_mod_with('DeviseOverrides::PasswordsController') | ||||||
|   | |||||||
| @@ -1,4 +1,5 @@ | |||||||
| module PortalHelper | module PortalHelper | ||||||
|  |   include UrlHelper | ||||||
|   def set_og_image_url(portal_name, title) |   def set_og_image_url(portal_name, title) | ||||||
|     cdn_url = GlobalConfig.get('OG_IMAGE_CDN_URL')['OG_IMAGE_CDN_URL'] |     cdn_url = GlobalConfig.get('OG_IMAGE_CDN_URL')['OG_IMAGE_CDN_URL'] | ||||||
|     return if cdn_url.blank? |     return if cdn_url.blank? | ||||||
| @@ -79,7 +80,7 @@ module PortalHelper | |||||||
|     query_params = Rack::Utils.parse_query(url.query) |     query_params = Rack::Utils.parse_query(url.query) | ||||||
|     query_params['utm_medium'] = 'helpcenter' |     query_params['utm_medium'] = 'helpcenter' | ||||||
|     query_params['utm_campaign'] = 'branding' |     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.query = query_params.to_query | ||||||
|     url.to_s |     url.to_s | ||||||
|   | |||||||
| @@ -20,7 +20,11 @@ import { | |||||||
|   verifyServiceWorkerExistence, |   verifyServiceWorkerExistence, | ||||||
| } from './helper/pushHelper'; | } from './helper/pushHelper'; | ||||||
| import ReconnectService from 'dashboard/helper/ReconnectService'; | 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 { | export default { | ||||||
|   name: 'App', |   name: 'App', | ||||||
| @@ -41,12 +45,14 @@ export default { | |||||||
|     const { accountId } = useAccount(); |     const { accountId } = useAccount(); | ||||||
|     // Use the font size composable (it automatically sets up the watcher) |     // Use the font size composable (it automatically sets up the watcher) | ||||||
|     const { currentFontSize } = useFontSize(); |     const { currentFontSize } = useFontSize(); | ||||||
|  |     const { uiSettings } = useUISettings(); | ||||||
|  |  | ||||||
|     return { |     return { | ||||||
|       router, |       router, | ||||||
|       store, |       store, | ||||||
|       currentAccountId: accountId, |       currentAccountId: accountId, | ||||||
|       currentFontSize, |       currentFontSize, | ||||||
|  |       uiSettings, | ||||||
|     }; |     }; | ||||||
|   }, |   }, | ||||||
|   data() { |   data() { | ||||||
| @@ -93,8 +99,10 @@ export default { | |||||||
|   mounted() { |   mounted() { | ||||||
|     this.initializeColorTheme(); |     this.initializeColorTheme(); | ||||||
|     this.listenToThemeChanges(); |     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 |     // Prepare dashboard ringtone; requires a user gesture once to unlock AudioContext | ||||||
|     window.playAudioAlert = () => {}; |     window.playAudioAlert = () => {}; | ||||||
| @@ -136,7 +144,8 @@ export default { | |||||||
|       const { locale, latest_chatwoot_version: latestChatwootVersion } = |       const { locale, latest_chatwoot_version: latestChatwootVersion } = | ||||||
|         this.getAccount(this.currentAccountId); |         this.getAccount(this.currentAccountId); | ||||||
|       const { pubsub_token: pubsubToken } = this.currentUser || {}; |       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; |       this.latestChatwootVersion = latestChatwootVersion; | ||||||
|       vueActionCable.init(this.store, pubsubToken); |       vueActionCable.init(this.store, pubsubToken); | ||||||
|       this.reconnectService = new ReconnectService(this.store, this.router); |       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 => { | const handleRemoveLabel = label => { | ||||||
|   return handleLabelAction({ value: labelId }); |   return handleLabelAction({ value: label.id }); | ||||||
| }; | }; | ||||||
|  |  | ||||||
| watch( | watch( | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ const props = defineProps({ | |||||||
| const emit = defineEmits(['remove', 'hover']); | const emit = defineEmits(['remove', 'hover']); | ||||||
|  |  | ||||||
| const handleRemoveLabel = () => { | const handleRemoveLabel = () => { | ||||||
|   emit('remove', props.label?.id); |   emit('remove', props.label); | ||||||
| }; | }; | ||||||
|  |  | ||||||
| const handleMouseEnter = () => { | const handleMouseEnter = () => { | ||||||
| @@ -45,6 +45,7 @@ const handleMouseEnter = () => { | |||||||
|       <Button |       <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="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 }" |         :class="{ 'opacity-0': !isHovered, 'opacity-100': isHovered }" | ||||||
|  |         type="button" | ||||||
|         slate |         slate | ||||||
|         xs |         xs | ||||||
|         faded |         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 => { | const resetModelOnAttributeKeyChange = newAttributeKey => { | ||||||
|   /** |   /** | ||||||
|    * Resets the filter values and operator when the attribute key changes. This ensures that |    * Resets the filter values and operator when the attribute key changes. This ensures that | ||||||
| @@ -182,7 +188,7 @@ defineExpose({ validate }); | |||||||
|         <Input |         <Input | ||||||
|           v-else |           v-else | ||||||
|           v-model="values" |           v-model="values" | ||||||
|           :type="inputType === 'date' ? 'date' : 'text'" |           :type="inputFieldType" | ||||||
|           class="[&>input]:h-8 [&>input]:py-1.5 [&>input]:outline-offset-0" |           class="[&>input]:h-8 [&>input]:py-1.5 [&>input]:outline-offset-0" | ||||||
|           :placeholder="t('FILTER.INPUT_PLACEHOLDER')" |           :placeholder="t('FILTER.INPUT_PLACEHOLDER')" | ||||||
|         /> |         /> | ||||||
|   | |||||||
| @@ -164,8 +164,8 @@ export function useConversationFilterContext() { | |||||||
|       value: CONVERSATION_ATTRIBUTES.DISPLAY_ID, |       value: CONVERSATION_ATTRIBUTES.DISPLAY_ID, | ||||||
|       attributeName: t('FILTER.ATTRIBUTES.CONVERSATION_IDENTIFIER'), |       attributeName: t('FILTER.ATTRIBUTES.CONVERSATION_IDENTIFIER'), | ||||||
|       label: t('FILTER.ATTRIBUTES.CONVERSATION_IDENTIFIER'), |       label: t('FILTER.ATTRIBUTES.CONVERSATION_IDENTIFIER'), | ||||||
|       inputType: 'plainText', |       inputType: 'number', | ||||||
|       datatype: 'number', |       dataType: 'number', | ||||||
|       filterOperators: containmentOperators.value, |       filterOperators: containmentOperators.value, | ||||||
|       attributeModel: 'standard', |       attributeModel: 'standard', | ||||||
|     }, |     }, | ||||||
| @@ -179,7 +179,7 @@ export function useConversationFilterContext() { | |||||||
|         id: campaign.id, |         id: campaign.id, | ||||||
|         name: campaign.title, |         name: campaign.title, | ||||||
|       })), |       })), | ||||||
|       datatype: 'number', |       dataType: 'number', | ||||||
|       filterOperators: presenceOperators.value, |       filterOperators: presenceOperators.value, | ||||||
|       attributeModel: 'standard', |       attributeModel: 'standard', | ||||||
|     }, |     }, | ||||||
|   | |||||||
| @@ -78,6 +78,8 @@ watch(unit, () => { | |||||||
|     <option :value="DURATION_UNITS.HOURS"> |     <option :value="DURATION_UNITS.HOURS"> | ||||||
|       {{ t('DURATION_INPUT.HOURS') }} |       {{ t('DURATION_INPUT.HOURS') }} | ||||||
|     </option> |     </option> | ||||||
|     <option :value="DURATION_UNITS.DAYS">{{ t('DURATION_INPUT.DAYS') }}</option> |     <option :value="DURATION_UNITS.DAYS"> | ||||||
|  |       {{ t('DURATION_INPUT.DAYS') }} | ||||||
|  |     </option> | ||||||
|   </select> |   </select> | ||||||
| </template> | </template> | ||||||
|   | |||||||
| @@ -15,6 +15,7 @@ const props = defineProps({ | |||||||
|     validator: value => ['info', 'error', 'success'].includes(value), |     validator: value => ['info', 'error', 'success'].includes(value), | ||||||
|   }, |   }, | ||||||
|   min: { type: String, default: '' }, |   min: { type: String, default: '' }, | ||||||
|  |   max: { type: String, default: '' }, | ||||||
|   autofocus: { type: Boolean, default: false }, |   autofocus: { type: Boolean, default: false }, | ||||||
| }); | }); | ||||||
|  |  | ||||||
| @@ -54,7 +55,12 @@ const inputOutlineClass = computed(() => { | |||||||
| }); | }); | ||||||
|  |  | ||||||
| const handleInput = event => { | 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); |   emit('input', event); | ||||||
| }; | }; | ||||||
|  |  | ||||||
| @@ -108,7 +114,12 @@ onMounted(() => { | |||||||
|       :placeholder="placeholder" |       :placeholder="placeholder" | ||||||
|       :disabled="disabled" |       :disabled="disabled" | ||||||
|       :min="['date', 'datetime-local', 'time'].includes(type) ? min : undefined" |       :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" |       @input="handleInput" | ||||||
|       @focus="handleFocus" |       @focus="handleFocus" | ||||||
|       @blur="handleBlur" |       @blur="handleBlur" | ||||||
|   | |||||||
| @@ -8,6 +8,10 @@ const props = defineProps({ | |||||||
|     type: String, |     type: String, | ||||||
|     default: REPLY_EDITOR_MODES.REPLY, |     default: REPLY_EDITOR_MODES.REPLY, | ||||||
|   }, |   }, | ||||||
|  |   disabled: { | ||||||
|  |     type: Boolean, | ||||||
|  |     default: false, | ||||||
|  |   }, | ||||||
| }); | }); | ||||||
|  |  | ||||||
| defineEmits(['toggleMode']); | defineEmits(['toggleMode']); | ||||||
| @@ -20,9 +24,12 @@ const privateModeSize = useElementSize(wootEditorPrivateMode); | |||||||
|  |  | ||||||
| /** | /** | ||||||
|  * Computed boolean indicating if the editor is in private note mode |  * 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>} |  * @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 |  * Computes the width of the sliding background chip in pixels | ||||||
| @@ -53,6 +60,10 @@ const translateValue = computed(() => { | |||||||
| <template> | <template> | ||||||
|   <button |   <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" |     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')" |     @click="$emit('toggleMode')" | ||||||
|   > |   > | ||||||
|     <div ref="wootEditorReplyMode" class="flex items-center gap-1 px-2 z-20"> |     <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') }} |       {{ $t('CONVERSATION.REPLYBOX.PRIVATE_NOTE') }} | ||||||
|     </div> |     </div> | ||||||
|     <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="{ |       :style="{ | ||||||
|         '--chip-width': width, |         '--chip-width': width, | ||||||
|         '--translate-x': translateValue, |         '--translate-x': translateValue, | ||||||
|   | |||||||
| @@ -10,7 +10,6 @@ import { getAllowedFileTypesByChannel } from '@chatwoot/utils'; | |||||||
| import { ALLOWED_FILE_TYPES } from 'shared/constants/messages'; | import { ALLOWED_FILE_TYPES } from 'shared/constants/messages'; | ||||||
| import VideoCallButton from '../VideoCallButton.vue'; | import VideoCallButton from '../VideoCallButton.vue'; | ||||||
| import AIAssistanceButton from '../AIAssistanceButton.vue'; | import AIAssistanceButton from '../AIAssistanceButton.vue'; | ||||||
| import { REPLY_EDITOR_MODES } from './constants'; |  | ||||||
| import { INBOX_TYPES } from 'dashboard/helper/inbox'; | import { INBOX_TYPES } from 'dashboard/helper/inbox'; | ||||||
| import { mapGetters } from 'vuex'; | import { mapGetters } from 'vuex'; | ||||||
| import NextButton from 'dashboard/components-next/button/Button.vue'; | import NextButton from 'dashboard/components-next/button/Button.vue'; | ||||||
| @@ -20,9 +19,9 @@ export default { | |||||||
|   components: { NextButton, FileUpload, VideoCallButton, AIAssistanceButton }, |   components: { NextButton, FileUpload, VideoCallButton, AIAssistanceButton }, | ||||||
|   mixins: [inboxMixin], |   mixins: [inboxMixin], | ||||||
|   props: { |   props: { | ||||||
|     mode: { |     isNote: { | ||||||
|       type: String, |       type: Boolean, | ||||||
|       default: REPLY_EDITOR_MODES.REPLY, |       default: false, | ||||||
|     }, |     }, | ||||||
|     onSend: { |     onSend: { | ||||||
|       type: Function, |       type: Function, | ||||||
| @@ -168,9 +167,6 @@ export default { | |||||||
|       isFeatureEnabledonAccount: 'accounts/isFeatureEnabledonAccount', |       isFeatureEnabledonAccount: 'accounts/isFeatureEnabledonAccount', | ||||||
|       uiFlags: 'integrations/getUIFlags', |       uiFlags: 'integrations/getUIFlags', | ||||||
|     }), |     }), | ||||||
|     isNote() { |  | ||||||
|       return this.mode === REPLY_EDITOR_MODES.NOTE; |  | ||||||
|     }, |  | ||||||
|     wrapClass() { |     wrapClass() { | ||||||
|       return { |       return { | ||||||
|         'is-note-mode': this.isNote, |         'is-note-mode': this.isNote, | ||||||
|   | |||||||
| @@ -15,6 +15,10 @@ export default { | |||||||
|       type: String, |       type: String, | ||||||
|       default: REPLY_EDITOR_MODES.REPLY, |       default: REPLY_EDITOR_MODES.REPLY, | ||||||
|     }, |     }, | ||||||
|  |     isReplyRestricted: { | ||||||
|  |       type: Boolean, | ||||||
|  |       default: false, | ||||||
|  |     }, | ||||||
|     isMessageLengthReachingThreshold: { |     isMessageLengthReachingThreshold: { | ||||||
|       type: Boolean, |       type: Boolean, | ||||||
|       default: () => false, |       default: () => false, | ||||||
| @@ -30,6 +34,7 @@ export default { | |||||||
|       emit('setReplyMode', mode); |       emit('setReplyMode', mode); | ||||||
|     }; |     }; | ||||||
|     const handleReplyClick = () => { |     const handleReplyClick = () => { | ||||||
|  |       if (props.isReplyRestricted) return; | ||||||
|       setReplyMode(REPLY_EDITOR_MODES.REPLY); |       setReplyMode(REPLY_EDITOR_MODES.REPLY); | ||||||
|     }; |     }; | ||||||
|     const handleNoteClick = () => { |     const handleNoteClick = () => { | ||||||
| @@ -88,6 +93,7 @@ export default { | |||||||
|   <div class="flex justify-between h-[3.25rem] gap-2 ltr:pl-3 rtl:pr-3"> |   <div class="flex justify-between h-[3.25rem] gap-2 ltr:pl-3 rtl:pr-3"> | ||||||
|     <EditorModeToggle |     <EditorModeToggle | ||||||
|       :mode="mode" |       :mode="mode" | ||||||
|  |       :disabled="isReplyRestricted" | ||||||
|       class="mt-3" |       class="mt-3" | ||||||
|       @toggle-mode="handleModeToggle" |       @toggle-mode="handleModeToggle" | ||||||
|     /> |     /> | ||||||
|   | |||||||
| @@ -170,6 +170,9 @@ export default { | |||||||
|       } |       } | ||||||
|       return true; |       return true; | ||||||
|     }, |     }, | ||||||
|  |     isReplyRestricted() { | ||||||
|  |       return !this.currentChat?.can_reply && !this.isAWhatsAppChannel; | ||||||
|  |     }, | ||||||
|     inboxId() { |     inboxId() { | ||||||
|       return this.currentChat.inbox_id; |       return this.currentChat.inbox_id; | ||||||
|     }, |     }, | ||||||
| @@ -1078,6 +1081,7 @@ export default { | |||||||
|   <div ref="replyEditor" class="reply-box" :class="replyBoxClass"> |   <div ref="replyEditor" class="reply-box" :class="replyBoxClass"> | ||||||
|     <ReplyTopPanel |     <ReplyTopPanel | ||||||
|       :mode="replyType" |       :mode="replyType" | ||||||
|  |       :is-reply-restricted="isReplyRestricted" | ||||||
|       :is-message-length-reaching-threshold="isMessageLengthReachingThreshold" |       :is-message-length-reaching-threshold="isMessageLengthReachingThreshold" | ||||||
|       :characters-remaining="charactersRemaining" |       :characters-remaining="charactersRemaining" | ||||||
|       :popout-reply-box="popOutReplyBox" |       :popout-reply-box="popOutReplyBox" | ||||||
| @@ -1188,7 +1192,7 @@ export default { | |||||||
|       :is-on-private-note="isOnPrivateNote" |       :is-on-private-note="isOnPrivateNote" | ||||||
|       :is-recording-audio="isRecordingAudio" |       :is-recording-audio="isRecordingAudio" | ||||||
|       :is-send-disabled="isReplyButtonDisabled" |       :is-send-disabled="isReplyButtonDisabled" | ||||||
|       :mode="replyType" |       :is-note="isPrivate" | ||||||
|       :on-file-upload="onFileUpload" |       :on-file-upload="onFileUpload" | ||||||
|       :on-send="onSendReply" |       :on-send="onSendReply" | ||||||
|       :conversation-type="conversationType" |       :conversation-type="conversationType" | ||||||
|   | |||||||
| @@ -43,18 +43,22 @@ describe('useFontSize', () => { | |||||||
|  |  | ||||||
|   it('returns fontSizeOptions with correct structure', () => { |   it('returns fontSizeOptions with correct structure', () => { | ||||||
|     const { fontSizeOptions } = useFontSize(); |     const { fontSizeOptions } = useFontSize(); | ||||||
|     expect(fontSizeOptions).toHaveLength(5); |     expect(fontSizeOptions.value).toHaveLength(5); | ||||||
|     expect(fontSizeOptions[0]).toHaveProperty('value'); |     expect(fontSizeOptions.value[0]).toHaveProperty('value'); | ||||||
|     expect(fontSizeOptions[0]).toHaveProperty('label'); |     expect(fontSizeOptions.value[0]).toHaveProperty('label'); | ||||||
|  |  | ||||||
|     // Check specific options |     // Check specific options | ||||||
|     expect(fontSizeOptions.find(option => option.value === '16px')).toEqual({ |     expect( | ||||||
|  |       fontSizeOptions.value.find(option => option.value === '16px') | ||||||
|  |     ).toEqual({ | ||||||
|       value: '16px', |       value: '16px', | ||||||
|       label: |       label: | ||||||
|         'PROFILE_SETTINGS.FORM.INTERFACE_SECTION.FONT_SIZE.OPTIONS.DEFAULT', |         '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', |       value: '14px', | ||||||
|       label: |       label: | ||||||
|         'PROFILE_SETTINGS.FORM.INTERFACE_SECTION.FONT_SIZE.OPTIONS.SMALLER', |         'PROFILE_SETTINGS.FORM.INTERFACE_SECTION.FONT_SIZE.OPTIONS.SMALLER', | ||||||
| @@ -143,12 +147,12 @@ describe('useFontSize', () => { | |||||||
|     const { fontSizeOptions } = useFontSize(); |     const { fontSizeOptions } = useFontSize(); | ||||||
|  |  | ||||||
|     // Check that translation is applied |     // Check that translation is applied | ||||||
|     expect(fontSizeOptions.find(option => option.value === '14px').label).toBe( |     expect( | ||||||
|       'Smaller' |       fontSizeOptions.value.find(option => option.value === '14px').label | ||||||
|     ); |     ).toBe('Smaller'); | ||||||
|     expect(fontSizeOptions.find(option => option.value === '16px').label).toBe( |     expect( | ||||||
|       'Default' |       fontSizeOptions.value.find(option => option.value === '16px').label | ||||||
|     ); |     ).toBe('Default'); | ||||||
|  |  | ||||||
|     // Verify translation function was called with correct keys |     // Verify translation function was called with correct keys | ||||||
|     expect(mockTranslate).toHaveBeenCalledWith( |     expect(mockTranslate).toHaveBeenCalledWith( | ||||||
|   | |||||||
| @@ -77,8 +77,8 @@ export const useFontSize = () => { | |||||||
|    * Font size options for select dropdown |    * Font size options for select dropdown | ||||||
|    * @type {Array<{value: string, label: string}>} |    * @type {Array<{value: string, label: string}>} | ||||||
|    */ |    */ | ||||||
|   const fontSizeOptions = FONT_SIZE_NAMES.map(name => |   const fontSizeOptions = computed(() => | ||||||
|     createFontSizeOption(t, name) |     FONT_SIZE_NAMES.map(name => createFontSizeOption(t, name)) | ||||||
|   ); |   ); | ||||||
|  |  | ||||||
|   /** |   /** | ||||||
|   | |||||||
| @@ -96,3 +96,18 @@ export const sanitizeVariableSearchKey = (searchKey = '') => { | |||||||
|     .replace(/,/g, '') // remove commas |     .replace(/,/g, '') // remove commas | ||||||
|     .trim(); |     .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, |   convertToCategorySlug, | ||||||
|   convertToPortalSlug, |   convertToPortalSlug, | ||||||
|   sanitizeVariableSearchKey, |   sanitizeVariableSearchKey, | ||||||
|  |   formatToTitleCase, | ||||||
| } from '../commons'; | } from '../commons'; | ||||||
|  |  | ||||||
| describe('#getTypingUsersText', () => { | describe('#getTypingUsersText', () => { | ||||||
| @@ -142,3 +143,51 @@ describe('sanitizeVariableSearchKey', () => { | |||||||
|     expect(sanitizeVariableSearchKey()).toBe(''); |     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", |       "SHOW_LABELS": "Show labels", | ||||||
|       "HIDE_LABELS": "Hide 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": { |     "HEADER": { | ||||||
|       "RESOLVE_ACTION": "Resolve", |       "RESOLVE_ACTION": "Resolve", | ||||||
|       "REOPEN_ACTION": "Reopen", |       "REOPEN_ACTION": "Reopen", | ||||||
|   | |||||||
| @@ -51,6 +51,13 @@ | |||||||
|             "LARGER": "Larger", |             "LARGER": "Larger", | ||||||
|             "EXTRA_LARGE": "Extra Large" |             "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": { |       "MESSAGE_SIGNATURE_SECTION": { | ||||||
| @@ -330,6 +337,7 @@ | |||||||
|     "REPORTS_LABEL": "Labels", |     "REPORTS_LABEL": "Labels", | ||||||
|     "REPORTS_INBOX": "Inbox", |     "REPORTS_INBOX": "Inbox", | ||||||
|     "REPORTS_TEAM": "Team", |     "REPORTS_TEAM": "Team", | ||||||
|  |     "AGENT_ASSIGNMENT": "Agent Assignment", | ||||||
|     "SET_AVAILABILITY_TITLE": "Set yourself as", |     "SET_AVAILABILITY_TITLE": "Set yourself as", | ||||||
|     "SET_YOUR_AVAILABILITY": "Set your availability", |     "SET_YOUR_AVAILABILITY": "Set your availability", | ||||||
|     "SLA": "SLA", |     "SLA": "SLA", | ||||||
| @@ -418,5 +426,255 @@ | |||||||
|       "SWITCH_TO_REPLY": "Switch to Reply", |       "SWITCH_TO_REPLY": "Switch to Reply", | ||||||
|       "TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown" |       "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": { |     "HEADER": { | ||||||
|       "RESOLVE_ACTION": "حل المحادثة", |       "RESOLVE_ACTION": "حل المحادثة", | ||||||
|       "REOPEN_ACTION": "إعادة فتح", |       "REOPEN_ACTION": "إعادة فتح", | ||||||
|   | |||||||
| @@ -51,6 +51,13 @@ | |||||||
|             "LARGER": "Larger", |             "LARGER": "Larger", | ||||||
|             "EXTRA_LARGE": "Extra Large" |             "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": { |       "MESSAGE_SIGNATURE_SECTION": { | ||||||
| @@ -330,6 +337,7 @@ | |||||||
|     "REPORTS_LABEL": "الوسوم", |     "REPORTS_LABEL": "الوسوم", | ||||||
|     "REPORTS_INBOX": "صندوق الوارد", |     "REPORTS_INBOX": "صندوق الوارد", | ||||||
|     "REPORTS_TEAM": "الفريق", |     "REPORTS_TEAM": "الفريق", | ||||||
|  |     "AGENT_ASSIGNMENT": "Agent Assignment", | ||||||
|     "SET_AVAILABILITY_TITLE": "تعيين نفسك كـ", |     "SET_AVAILABILITY_TITLE": "تعيين نفسك كـ", | ||||||
|     "SET_YOUR_AVAILABILITY": "قم بتعيين توافرك", |     "SET_YOUR_AVAILABILITY": "قم بتعيين توافرك", | ||||||
|     "SLA": "SLA", |     "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": "الأولوية", | ||||||
|  |           "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", |       "SHOW_LABELS": "Show labels", | ||||||
|       "HIDE_LABELS": "Hide 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": { |     "HEADER": { | ||||||
|       "RESOLVE_ACTION": "Resolve", |       "RESOLVE_ACTION": "Resolve", | ||||||
|       "REOPEN_ACTION": "Reopen", |       "REOPEN_ACTION": "Reopen", | ||||||
|   | |||||||
| @@ -51,6 +51,13 @@ | |||||||
|             "LARGER": "Larger", |             "LARGER": "Larger", | ||||||
|             "EXTRA_LARGE": "Extra Large" |             "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": { |       "MESSAGE_SIGNATURE_SECTION": { | ||||||
| @@ -330,6 +337,7 @@ | |||||||
|     "REPORTS_LABEL": "Labels", |     "REPORTS_LABEL": "Labels", | ||||||
|     "REPORTS_INBOX": "Inbox", |     "REPORTS_INBOX": "Inbox", | ||||||
|     "REPORTS_TEAM": "Team", |     "REPORTS_TEAM": "Team", | ||||||
|  |     "AGENT_ASSIGNMENT": "Agent Assignment", | ||||||
|     "SET_AVAILABILITY_TITLE": "Set yourself as", |     "SET_AVAILABILITY_TITLE": "Set yourself as", | ||||||
|     "SET_YOUR_AVAILABILITY": "Set your availability", |     "SET_YOUR_AVAILABILITY": "Set your availability", | ||||||
|     "SLA": "SLA", |     "SLA": "SLA", | ||||||
| @@ -418,5 +426,255 @@ | |||||||
|       "SWITCH_TO_REPLY": "Switch to Reply", |       "SWITCH_TO_REPLY": "Switch to Reply", | ||||||
|       "TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown" |       "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", |       "SHOW_LABELS": "Show labels", | ||||||
|       "HIDE_LABELS": "Hide 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": { |     "HEADER": { | ||||||
|       "RESOLVE_ACTION": "Resolve", |       "RESOLVE_ACTION": "Resolve", | ||||||
|       "REOPEN_ACTION": "Reopen", |       "REOPEN_ACTION": "Reopen", | ||||||
|   | |||||||
| @@ -51,6 +51,13 @@ | |||||||
|             "LARGER": "Larger", |             "LARGER": "Larger", | ||||||
|             "EXTRA_LARGE": "Extra Large" |             "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": { |       "MESSAGE_SIGNATURE_SECTION": { | ||||||
| @@ -330,6 +337,7 @@ | |||||||
|     "REPORTS_LABEL": "Labels", |     "REPORTS_LABEL": "Labels", | ||||||
|     "REPORTS_INBOX": "Входяща кутия", |     "REPORTS_INBOX": "Входяща кутия", | ||||||
|     "REPORTS_TEAM": "Team", |     "REPORTS_TEAM": "Team", | ||||||
|  |     "AGENT_ASSIGNMENT": "Agent Assignment", | ||||||
|     "SET_AVAILABILITY_TITLE": "Set yourself as", |     "SET_AVAILABILITY_TITLE": "Set yourself as", | ||||||
|     "SET_YOUR_AVAILABILITY": "Set your availability", |     "SET_YOUR_AVAILABILITY": "Set your availability", | ||||||
|     "SLA": "SLA", |     "SLA": "SLA", | ||||||
| @@ -418,5 +426,255 @@ | |||||||
|       "SWITCH_TO_REPLY": "Switch to Reply", |       "SWITCH_TO_REPLY": "Switch to Reply", | ||||||
|       "TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown" |       "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", |       "SHOW_LABELS": "Mostra etiquetes", | ||||||
|       "HIDE_LABELS": "Amaga 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": { |     "HEADER": { | ||||||
|       "RESOLVE_ACTION": "Resoldre", |       "RESOLVE_ACTION": "Resoldre", | ||||||
|       "REOPEN_ACTION": "Tornar a obrir", |       "REOPEN_ACTION": "Tornar a obrir", | ||||||
|   | |||||||
| @@ -51,6 +51,13 @@ | |||||||
|             "LARGER": "Larger", |             "LARGER": "Larger", | ||||||
|             "EXTRA_LARGE": "Extra Large" |             "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": { |       "MESSAGE_SIGNATURE_SECTION": { | ||||||
| @@ -330,6 +337,7 @@ | |||||||
|     "REPORTS_LABEL": "Etiquetes", |     "REPORTS_LABEL": "Etiquetes", | ||||||
|     "REPORTS_INBOX": "Safata d'entrada", |     "REPORTS_INBOX": "Safata d'entrada", | ||||||
|     "REPORTS_TEAM": "Equip", |     "REPORTS_TEAM": "Equip", | ||||||
|  |     "AGENT_ASSIGNMENT": "Agent Assignment", | ||||||
|     "SET_AVAILABILITY_TITLE": "Posa't com", |     "SET_AVAILABILITY_TITLE": "Posa't com", | ||||||
|     "SET_YOUR_AVAILABILITY": "Estableix la vostra disponibilitat", |     "SET_YOUR_AVAILABILITY": "Estableix la vostra disponibilitat", | ||||||
|     "SLA": "SLA", |     "SLA": "SLA", | ||||||
| @@ -418,5 +426,255 @@ | |||||||
|       "SWITCH_TO_REPLY": "Canvia a Respon", |       "SWITCH_TO_REPLY": "Canvia a Respon", | ||||||
|       "TOGGLE_SNOOZE_DROPDOWN": "Commuta el menú desplegable de posposar" |       "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", |       "SHOW_LABELS": "Show labels", | ||||||
|       "HIDE_LABELS": "Hide 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": { |     "HEADER": { | ||||||
|       "RESOLVE_ACTION": "Vyřešit", |       "RESOLVE_ACTION": "Vyřešit", | ||||||
|       "REOPEN_ACTION": "Znovu otevřít", |       "REOPEN_ACTION": "Znovu otevřít", | ||||||
|   | |||||||
| @@ -51,6 +51,13 @@ | |||||||
|             "LARGER": "Larger", |             "LARGER": "Larger", | ||||||
|             "EXTRA_LARGE": "Extra Large" |             "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": { |       "MESSAGE_SIGNATURE_SECTION": { | ||||||
| @@ -330,6 +337,7 @@ | |||||||
|     "REPORTS_LABEL": "Štítky", |     "REPORTS_LABEL": "Štítky", | ||||||
|     "REPORTS_INBOX": "Inbox", |     "REPORTS_INBOX": "Inbox", | ||||||
|     "REPORTS_TEAM": "Team", |     "REPORTS_TEAM": "Team", | ||||||
|  |     "AGENT_ASSIGNMENT": "Agent Assignment", | ||||||
|     "SET_AVAILABILITY_TITLE": "Set yourself as", |     "SET_AVAILABILITY_TITLE": "Set yourself as", | ||||||
|     "SET_YOUR_AVAILABILITY": "Nastavte svou dostupnost", |     "SET_YOUR_AVAILABILITY": "Nastavte svou dostupnost", | ||||||
|     "SLA": "SLA", |     "SLA": "SLA", | ||||||
| @@ -418,5 +426,255 @@ | |||||||
|       "SWITCH_TO_REPLY": "Switch to Reply", |       "SWITCH_TO_REPLY": "Switch to Reply", | ||||||
|       "TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown" |       "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", |       "SHOW_LABELS": "Vis etiketter", | ||||||
|       "HIDE_LABELS": "Skjul 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": { |     "HEADER": { | ||||||
|       "RESOLVE_ACTION": "Løs", |       "RESOLVE_ACTION": "Løs", | ||||||
|       "REOPEN_ACTION": "Genåben", |       "REOPEN_ACTION": "Genåben", | ||||||
|   | |||||||
| @@ -51,6 +51,13 @@ | |||||||
|             "LARGER": "Larger", |             "LARGER": "Larger", | ||||||
|             "EXTRA_LARGE": "Extra Large" |             "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": { |       "MESSAGE_SIGNATURE_SECTION": { | ||||||
| @@ -330,6 +337,7 @@ | |||||||
|     "REPORTS_LABEL": "Etiketter", |     "REPORTS_LABEL": "Etiketter", | ||||||
|     "REPORTS_INBOX": "Indbakke", |     "REPORTS_INBOX": "Indbakke", | ||||||
|     "REPORTS_TEAM": "Team", |     "REPORTS_TEAM": "Team", | ||||||
|  |     "AGENT_ASSIGNMENT": "Agent Assignment", | ||||||
|     "SET_AVAILABILITY_TITLE": "Sæt dig selv som", |     "SET_AVAILABILITY_TITLE": "Sæt dig selv som", | ||||||
|     "SET_YOUR_AVAILABILITY": "Indstil din tilgængelighed", |     "SET_YOUR_AVAILABILITY": "Indstil din tilgængelighed", | ||||||
|     "SLA": "SLA", |     "SLA": "SLA", | ||||||
| @@ -418,5 +426,255 @@ | |||||||
|       "SWITCH_TO_REPLY": "Skift til svar", |       "SWITCH_TO_REPLY": "Skift til svar", | ||||||
|       "TOGGLE_SNOOZE_DROPDOWN": "Skift snooze dropdown" |       "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", |       "SHOW_LABELS": "Labels anzeigen", | ||||||
|       "HIDE_LABELS": "Labels ausblenden" |       "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": { |     "HEADER": { | ||||||
|       "RESOLVE_ACTION": "Fall schließen", |       "RESOLVE_ACTION": "Fall schließen", | ||||||
|       "REOPEN_ACTION": "Wieder öffnen", |       "REOPEN_ACTION": "Wieder öffnen", | ||||||
|   | |||||||
| @@ -51,6 +51,13 @@ | |||||||
|             "LARGER": "Larger", |             "LARGER": "Larger", | ||||||
|             "EXTRA_LARGE": "Extra Large" |             "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": { |       "MESSAGE_SIGNATURE_SECTION": { | ||||||
| @@ -330,6 +337,7 @@ | |||||||
|     "REPORTS_LABEL": "Labels", |     "REPORTS_LABEL": "Labels", | ||||||
|     "REPORTS_INBOX": "Posteingang", |     "REPORTS_INBOX": "Posteingang", | ||||||
|     "REPORTS_TEAM": "Team", |     "REPORTS_TEAM": "Team", | ||||||
|  |     "AGENT_ASSIGNMENT": "Agent Assignment", | ||||||
|     "SET_AVAILABILITY_TITLE": "Setzen Sie sich als", |     "SET_AVAILABILITY_TITLE": "Setzen Sie sich als", | ||||||
|     "SET_YOUR_AVAILABILITY": "Legen Sie Ihre Verfügbarkeit fest", |     "SET_YOUR_AVAILABILITY": "Legen Sie Ihre Verfügbarkeit fest", | ||||||
|     "SLA": "SLA", |     "SLA": "SLA", | ||||||
| @@ -418,5 +426,255 @@ | |||||||
|       "SWITCH_TO_REPLY": "Zur Antwort wechseln", |       "SWITCH_TO_REPLY": "Zur Antwort wechseln", | ||||||
|       "TOGGLE_SNOOZE_DROPDOWN": "Schlummer-Dropdown ein-/ausblenden" |       "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": "Προβολή ετικετών", |       "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": { |     "HEADER": { | ||||||
|       "RESOLVE_ACTION": "Επίλυση", |       "RESOLVE_ACTION": "Επίλυση", | ||||||
|       "REOPEN_ACTION": "Επαναφορά", |       "REOPEN_ACTION": "Επαναφορά", | ||||||
|   | |||||||
| @@ -51,6 +51,13 @@ | |||||||
|             "LARGER": "Larger", |             "LARGER": "Larger", | ||||||
|             "EXTRA_LARGE": "Extra Large" |             "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": { |       "MESSAGE_SIGNATURE_SECTION": { | ||||||
| @@ -330,6 +337,7 @@ | |||||||
|     "REPORTS_LABEL": "Ετικέτες", |     "REPORTS_LABEL": "Ετικέτες", | ||||||
|     "REPORTS_INBOX": "Εισερχόμενα", |     "REPORTS_INBOX": "Εισερχόμενα", | ||||||
|     "REPORTS_TEAM": "Ομάδα", |     "REPORTS_TEAM": "Ομάδα", | ||||||
|  |     "AGENT_ASSIGNMENT": "Agent Assignment", | ||||||
|     "SET_AVAILABILITY_TITLE": "Ορίστε τον εαυτό σας ως", |     "SET_AVAILABILITY_TITLE": "Ορίστε τον εαυτό σας ως", | ||||||
|     "SET_YOUR_AVAILABILITY": "Ορίστε τη διαθεσιμότητά σας", |     "SET_YOUR_AVAILABILITY": "Ορίστε τη διαθεσιμότητά σας", | ||||||
|     "SLA": "SLA", |     "SLA": "SLA", | ||||||
| @@ -418,5 +426,255 @@ | |||||||
|       "SWITCH_TO_REPLY": "Εναλλαγή σε απάντηση", |       "SWITCH_TO_REPLY": "Εναλλαγή σε απάντηση", | ||||||
|       "TOGGLE_SNOOZE_DROPDOWN": "Εναλλαγή αναβολής dropdown" |       "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", |             "LARGER": "Larger", | ||||||
|             "EXTRA_LARGE": "Extra Large" |             "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": { |       "MESSAGE_SIGNATURE_SECTION": { | ||||||
| @@ -444,6 +451,230 @@ | |||||||
|           "Add agents to a policy - one policy per agent" |           "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", |       "NEW_CAMPAIGN": "Crear campaña", | ||||||
|       "EMPTY_STATE": { |       "EMPTY_STATE": { | ||||||
|         "TITLE": "No WhatsApp campaigns are available", |         "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": { |       "CARD": { | ||||||
|         "STATUS": { |         "STATUS": { | ||||||
| @@ -155,7 +155,7 @@ | |||||||
|         } |         } | ||||||
|       }, |       }, | ||||||
|       "CREATE": { |       "CREATE": { | ||||||
|         "TITLE": "Create WhatsApp campaign", |         "TITLE": "Crear campaña de WhatsApp", | ||||||
|         "CANCEL_BUTTON_TEXT": "Cancelar", |         "CANCEL_BUTTON_TEXT": "Cancelar", | ||||||
|         "CREATE_BUTTON_TEXT": "Crear", |         "CREATE_BUTTON_TEXT": "Crear", | ||||||
|         "FORM": { |         "FORM": { | ||||||
|   | |||||||
| @@ -40,7 +40,7 @@ | |||||||
|       "SEND_MESSAGE_LABEL": "Enviar mensaje", |       "SEND_MESSAGE_LABEL": "Enviar mensaje", | ||||||
|       "FORM_ERROR_MESSAGE": "Por favor, rellene todas las variables antes de enviar", |       "FORM_ERROR_MESSAGE": "Por favor, rellene todas las variables antes de enviar", | ||||||
|       "MEDIA_HEADER_LABEL": "{type} Header", |       "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" |       "MEDIA_URL_PLACEHOLDER": "https://example.com/image.jpg" | ||||||
|     }, |     }, | ||||||
|     "FORM": { |     "FORM": { | ||||||
|   | |||||||
| @@ -71,6 +71,17 @@ | |||||||
|       "SHOW_LABELS": "Mostrar etiquetas", |       "SHOW_LABELS": "Mostrar etiquetas", | ||||||
|       "HIDE_LABELS": "Ocultar 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": { |     "HEADER": { | ||||||
|       "RESOLVE_ACTION": "Resolver", |       "RESOLVE_ACTION": "Resolver", | ||||||
|       "REOPEN_ACTION": "Reabrir", |       "REOPEN_ACTION": "Reabrir", | ||||||
|   | |||||||
| @@ -51,6 +51,13 @@ | |||||||
|             "LARGER": "Larger", |             "LARGER": "Larger", | ||||||
|             "EXTRA_LARGE": "Extra Large" |             "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": { |       "MESSAGE_SIGNATURE_SECTION": { | ||||||
| @@ -226,7 +233,7 @@ | |||||||
|     "APPEARANCE": "Cambiar apariencia", |     "APPEARANCE": "Cambiar apariencia", | ||||||
|     "SUPER_ADMIN_CONSOLE": "Consola SuperAdmin", |     "SUPER_ADMIN_CONSOLE": "Consola SuperAdmin", | ||||||
|     "DOCS": "Leer la documentación", |     "DOCS": "Leer la documentación", | ||||||
|     "CHANGELOG": "Changelog", |     "CHANGELOG": "Notas de versión", | ||||||
|     "LOGOUT": "Cerrar sesión" |     "LOGOUT": "Cerrar sesión" | ||||||
|   }, |   }, | ||||||
|   "APP_GLOBAL": { |   "APP_GLOBAL": { | ||||||
| @@ -330,6 +337,7 @@ | |||||||
|     "REPORTS_LABEL": "Etiquetas", |     "REPORTS_LABEL": "Etiquetas", | ||||||
|     "REPORTS_INBOX": "Bandeja de entrada", |     "REPORTS_INBOX": "Bandeja de entrada", | ||||||
|     "REPORTS_TEAM": "Equipo", |     "REPORTS_TEAM": "Equipo", | ||||||
|  |     "AGENT_ASSIGNMENT": "Agent Assignment", | ||||||
|     "SET_AVAILABILITY_TITLE": "Ponte como", |     "SET_AVAILABILITY_TITLE": "Ponte como", | ||||||
|     "SET_YOUR_AVAILABILITY": "Establecer su disponibilidad", |     "SET_YOUR_AVAILABILITY": "Establecer su disponibilidad", | ||||||
|     "SLA": "SLA", |     "SLA": "SLA", | ||||||
| @@ -418,5 +426,255 @@ | |||||||
|       "SWITCH_TO_REPLY": "Cambiar a respuesta", |       "SWITCH_TO_REPLY": "Cambiar a respuesta", | ||||||
|       "TOGGLE_SNOOZE_DROPDOWN": "Cambiar el menú desplegable" |       "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": "آدرس آیپی", |     "IP_ADDRESS": "آدرس آیپی", | ||||||
|     "CREATED_AT_LABEL": "ایجاد شده", |     "CREATED_AT_LABEL": "ایجاد شده", | ||||||
|     "NEW_MESSAGE": "پیام جدید", |     "NEW_MESSAGE": "پیام جدید", | ||||||
|     "CALL": "Call", |     "CALL": "تماس", | ||||||
|     "CALL_UNDER_DEVELOPMENT": "Calling is under development", |     "CALL_UNDER_DEVELOPMENT": "Calling is under development", | ||||||
|     "VOICE_INBOX_PICKER": { |     "VOICE_INBOX_PICKER": { | ||||||
|       "TITLE": "Choose a voice inbox" |       "TITLE": "Choose a voice inbox" | ||||||
|   | |||||||
| @@ -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": { |     "HEADER": { | ||||||
|       "RESOLVE_ACTION": "حل شد", |       "RESOLVE_ACTION": "حل شد", | ||||||
|       "REOPEN_ACTION": "دوباره باز کنید", |       "REOPEN_ACTION": "دوباره باز کنید", | ||||||
|   | |||||||
| @@ -51,6 +51,13 @@ | |||||||
|             "LARGER": "Larger", |             "LARGER": "Larger", | ||||||
|             "EXTRA_LARGE": "Extra Large" |             "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": { |       "MESSAGE_SIGNATURE_SECTION": { | ||||||
| @@ -330,6 +337,7 @@ | |||||||
|     "REPORTS_LABEL": "برچسبها", |     "REPORTS_LABEL": "برچسبها", | ||||||
|     "REPORTS_INBOX": "صندوق ورودی", |     "REPORTS_INBOX": "صندوق ورودی", | ||||||
|     "REPORTS_TEAM": "تیم", |     "REPORTS_TEAM": "تیم", | ||||||
|  |     "AGENT_ASSIGNMENT": "Agent Assignment", | ||||||
|     "SET_AVAILABILITY_TITLE": "خود را به عنوان", |     "SET_AVAILABILITY_TITLE": "خود را به عنوان", | ||||||
|     "SET_YOUR_AVAILABILITY": "در دسترس بودن خود را تنظیم کنید", |     "SET_YOUR_AVAILABILITY": "در دسترس بودن خود را تنظیم کنید", | ||||||
|     "SLA": "SLA", |     "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": "اولویت", | ||||||
|  |           "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", |       "SHOW_LABELS": "Show labels", | ||||||
|       "HIDE_LABELS": "Hide 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": { |     "HEADER": { | ||||||
|       "RESOLVE_ACTION": "Ratkaise", |       "RESOLVE_ACTION": "Ratkaise", | ||||||
|       "REOPEN_ACTION": "Uudelleenavaa", |       "REOPEN_ACTION": "Uudelleenavaa", | ||||||
|   | |||||||
| @@ -51,6 +51,13 @@ | |||||||
|             "LARGER": "Larger", |             "LARGER": "Larger", | ||||||
|             "EXTRA_LARGE": "Extra Large" |             "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": { |       "MESSAGE_SIGNATURE_SECTION": { | ||||||
| @@ -330,6 +337,7 @@ | |||||||
|     "REPORTS_LABEL": "Tunnisteet", |     "REPORTS_LABEL": "Tunnisteet", | ||||||
|     "REPORTS_INBOX": "Inbox", |     "REPORTS_INBOX": "Inbox", | ||||||
|     "REPORTS_TEAM": "Team", |     "REPORTS_TEAM": "Team", | ||||||
|  |     "AGENT_ASSIGNMENT": "Agent Assignment", | ||||||
|     "SET_AVAILABILITY_TITLE": "Set yourself as", |     "SET_AVAILABILITY_TITLE": "Set yourself as", | ||||||
|     "SET_YOUR_AVAILABILITY": "Set your availability", |     "SET_YOUR_AVAILABILITY": "Set your availability", | ||||||
|     "SLA": "SLA", |     "SLA": "SLA", | ||||||
| @@ -418,5 +426,255 @@ | |||||||
|       "SWITCH_TO_REPLY": "Switch to Reply", |       "SWITCH_TO_REPLY": "Switch to Reply", | ||||||
|       "TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown" |       "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})" |       "EDIT": "{agentName} updated the account configuration (#{id})" | ||||||
|     }, |     }, | ||||||
|     "CONVERSATION": { |     "CONVERSATION": { | ||||||
|       "DELETE": "{agentName} deleted conversation #{id}" |       "DELETE": "{agentName} a supprimé la conversation #{id}" | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -131,7 +131,7 @@ | |||||||
|       "CONVERSATION_CREATED": "Conversation créée", |       "CONVERSATION_CREATED": "Conversation créée", | ||||||
|       "CONVERSATION_UPDATED": "Conversation mise à jour", |       "CONVERSATION_UPDATED": "Conversation mise à jour", | ||||||
|       "MESSAGE_CREATED": "Message créé", |       "MESSAGE_CREATED": "Message créé", | ||||||
|       "CONVERSATION_RESOLVED": "Conversation Resolved", |       "CONVERSATION_RESOLVED": "Conversation terminée", | ||||||
|       "CONVERSATION_OPENED": "Conversation ouverte" |       "CONVERSATION_OPENED": "Conversation ouverte" | ||||||
|     }, |     }, | ||||||
|     "ACTIONS": { |     "ACTIONS": { | ||||||
| @@ -153,8 +153,8 @@ | |||||||
|       "OPEN_CONVERSATION": "Ouvrir la conversation" |       "OPEN_CONVERSATION": "Ouvrir la conversation" | ||||||
|     }, |     }, | ||||||
|     "MESSAGE_TYPES": { |     "MESSAGE_TYPES": { | ||||||
|       "INCOMING": "Incoming Message", |       "INCOMING": "Boite de réception", | ||||||
|       "OUTGOING": "Outgoing Message" |       "OUTGOING": "Message envoyé" | ||||||
|     }, |     }, | ||||||
|     "PRIORITY_TYPES": { |     "PRIORITY_TYPES": { | ||||||
|       "NONE": "Aucun", |       "NONE": "Aucun", | ||||||
|   | |||||||
| @@ -138,11 +138,11 @@ | |||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "WHATSAPP": { |     "WHATSAPP": { | ||||||
|       "HEADER_TITLE": "WhatsApp campaigns", |       "HEADER_TITLE": "Campagnes WhatsApp", | ||||||
|       "NEW_CAMPAIGN": "Create campaign", |       "NEW_CAMPAIGN": "Create campaign", | ||||||
|       "EMPTY_STATE": { |       "EMPTY_STATE": { | ||||||
|         "TITLE": "No WhatsApp campaigns are available", |         "TITLE": "Aucune campagne WhatsApp n’est disponible", | ||||||
|         "SUBTITLE": "Launch a WhatsApp campaign to reach your customers directly. Send offers or make announcements with ease. Click 'Create campaign' to get started." |         "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": { |       "CARD": { | ||||||
|         "STATUS": { |         "STATUS": { | ||||||
| @@ -155,7 +155,7 @@ | |||||||
|         } |         } | ||||||
|       }, |       }, | ||||||
|       "CREATE": { |       "CREATE": { | ||||||
|         "TITLE": "Create WhatsApp campaign", |         "TITLE": "Créer une campagne WhatsApp", | ||||||
|         "CANCEL_BUTTON_TEXT": "Annuler", |         "CANCEL_BUTTON_TEXT": "Annuler", | ||||||
|         "CREATE_BUTTON_TEXT": "Créer", |         "CREATE_BUTTON_TEXT": "Créer", | ||||||
|         "FORM": { |         "FORM": { | ||||||
| @@ -170,15 +170,15 @@ | |||||||
|             "ERROR": "La boîte de réception est requise" |             "ERROR": "La boîte de réception est requise" | ||||||
|           }, |           }, | ||||||
|           "TEMPLATE": { |           "TEMPLATE": { | ||||||
|             "LABEL": "WhatsApp Template", |             "LABEL": "Modèle WhatsApp", | ||||||
|             "PLACEHOLDER": "Select a template", |             "PLACEHOLDER": "Sélectionner un modèle", | ||||||
|             "INFO": "Select a template to use for this campaign.", |             "INFO": "Sélectionnez un modèle pour cette campagne.", | ||||||
|             "ERROR": "Template is required", |             "ERROR": "Un modèle est requis", | ||||||
|             "PREVIEW_TITLE": "Traiter {templateName}", |             "PREVIEW_TITLE": "Traiter {templateName}", | ||||||
|             "LANGUAGE": "Langue", |             "LANGUAGE": "Langue", | ||||||
|             "CATEGORY": "Catégorie", |             "CATEGORY": "Catégorie", | ||||||
|             "VARIABLES_LABEL": "Variables", |             "VARIABLES_LABEL": "Variables", | ||||||
|             "VARIABLE_PLACEHOLDER": "Enter value for {variable}" |             "VARIABLE_PLACEHOLDER": "Entrez une valeur pour {variable}" | ||||||
|           }, |           }, | ||||||
|           "AUDIENCE": { |           "AUDIENCE": { | ||||||
|             "LABEL": "Audience", |             "LABEL": "Audience", | ||||||
| @@ -195,7 +195,7 @@ | |||||||
|             "CANCEL": "Annuler" |             "CANCEL": "Annuler" | ||||||
|           }, |           }, | ||||||
|           "API": { |           "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." |             "ERROR_MESSAGE": "Une erreur est survenue, veuillez réessayer." | ||||||
|           } |           } | ||||||
|         } |         } | ||||||
|   | |||||||
| @@ -51,6 +51,6 @@ | |||||||
|     "PLACEHOLDER": "Entrez la durée" |     "PLACEHOLDER": "Entrez la durée" | ||||||
|   }, |   }, | ||||||
|   "CHANNEL_SELECTOR": { |   "CHANNEL_SELECTOR": { | ||||||
|     "COMING_SOON": "Coming Soon!" |     "COMING_SOON": "Bientôt disponible !" | ||||||
|   } |   } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -17,10 +17,10 @@ | |||||||
|     "IP_ADDRESS": "Adresse IP", |     "IP_ADDRESS": "Adresse IP", | ||||||
|     "CREATED_AT_LABEL": "Créé", |     "CREATED_AT_LABEL": "Créé", | ||||||
|     "NEW_MESSAGE": "Nouveau message", |     "NEW_MESSAGE": "Nouveau message", | ||||||
|     "CALL": "Call", |     "CALL": "Appel", | ||||||
|     "CALL_UNDER_DEVELOPMENT": "Calling is under development", |     "CALL_UNDER_DEVELOPMENT": "Appel en cours de développement", | ||||||
|     "VOICE_INBOX_PICKER": { |     "VOICE_INBOX_PICKER": { | ||||||
|       "TITLE": "Choose a voice inbox" |       "TITLE": "Choisir une boîte de réception vocale" | ||||||
|     }, |     }, | ||||||
|     "CONVERSATIONS": { |     "CONVERSATIONS": { | ||||||
|       "NO_RECORDS_FOUND": "Il n'y a aucune conversation précédente associée à ce contact.", |       "NO_RECORDS_FOUND": "Il n'y a aucune conversation précédente associée à ce contact.", | ||||||
| @@ -290,7 +290,7 @@ | |||||||
|     "HEADER": { |     "HEADER": { | ||||||
|       "TITLE": "Contacts", |       "TITLE": "Contacts", | ||||||
|       "SEARCH_TITLE": "Search contacts", |       "SEARCH_TITLE": "Search contacts", | ||||||
|       "ACTIVE_TITLE": "Active contacts", |       "ACTIVE_TITLE": "Contacts actifs", | ||||||
|       "SEARCH_PLACEHOLDER": "Search...", |       "SEARCH_PLACEHOLDER": "Search...", | ||||||
|       "MESSAGE_BUTTON": "Message", |       "MESSAGE_BUTTON": "Message", | ||||||
|       "SEND_MESSAGE": "Envoyer un message", |       "SEND_MESSAGE": "Envoyer un message", | ||||||
| @@ -465,8 +465,8 @@ | |||||||
|         } |         } | ||||||
|       }, |       }, | ||||||
|       "DELETE_CONTACT": { |       "DELETE_CONTACT": { | ||||||
|         "MESSAGE": "This action is permanent and irreversible.", |         "MESSAGE": "Cette action est permanente et irréversible.", | ||||||
|         "BUTTON": "Delete now" |         "BUTTON": "Supprimer maintenant" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "DETAILS": { |     "DETAILS": { | ||||||
| @@ -476,7 +476,7 @@ | |||||||
|       "DELETE_CONTACT": "Supprimer le contact", |       "DELETE_CONTACT": "Supprimer le contact", | ||||||
|       "DELETE_DIALOG": { |       "DELETE_DIALOG": { | ||||||
|         "TITLE": "Confirmer la suppression", |         "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", |         "CONFIRM": "Oui, supprimer", | ||||||
|         "API": { |         "API": { | ||||||
|           "SUCCESS_MESSAGE": "Contact supprimé avec succès", |           "SUCCESS_MESSAGE": "Contact supprimé avec succès", | ||||||
| @@ -566,7 +566,7 @@ | |||||||
|       "BUTTON_LABEL": "Add contact", |       "BUTTON_LABEL": "Add contact", | ||||||
|       "SEARCH_EMPTY_STATE_TITLE": "Aucun contact ne correspond à votre recherche 🔍", |       "SEARCH_EMPTY_STATE_TITLE": "Aucun contact ne correspond à votre recherche 🔍", | ||||||
|       "LIST_EMPTY_STATE_TITLE": "No contacts available in this view 📋", |       "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": { |   "COMPOSE_NEW_CONVERSATION": { | ||||||
|   | |||||||
| @@ -1,33 +1,33 @@ | |||||||
| { | { | ||||||
|   "CONTENT_TEMPLATES": { |   "CONTENT_TEMPLATES": { | ||||||
|     "MODAL": { |     "MODAL": { | ||||||
|       "TITLE": "Twilio Templates", |       "TITLE": "Modèles Twilio", | ||||||
|       "SUBTITLE": "Select the Twilio template you want to send", |       "SUBTITLE": "Sélectionnez le modèle Twilio que vous souhaitez envoyer", | ||||||
|       "TEMPLATE_SELECTED_SUBTITLE": "Configure template: {templateName}" |       "TEMPLATE_SELECTED_SUBTITLE": "Configurer le modèle : {templateName}" | ||||||
|     }, |     }, | ||||||
|     "PICKER": { |     "PICKER": { | ||||||
|       "SEARCH_PLACEHOLDER": "Rechercher des modèles", |       "SEARCH_PLACEHOLDER": "Rechercher des modèles", | ||||||
|       "NO_TEMPLATES_FOUND": "Aucun modèle trouvé pour", |       "NO_TEMPLATES_FOUND": "Aucun modèle trouvé pour", | ||||||
|       "NO_CONTENT": "No content", |       "NO_CONTENT": "No content", | ||||||
|       "HEADER": "Header", |       "HEADER": "En-tête", | ||||||
|       "BODY": "Body", |       "BODY": "Corps", | ||||||
|       "FOOTER": "Footer", |       "FOOTER": "Pied de page", | ||||||
|       "BUTTONS": "Buttons", |       "BUTTONS": "Boutons", | ||||||
|       "CATEGORY": "Catégorie", |       "CATEGORY": "Catégorie", | ||||||
|       "MEDIA_CONTENT": "Media Content", |       "MEDIA_CONTENT": "Contenu média", | ||||||
|       "MEDIA_CONTENT_FALLBACK": "media content", |       "MEDIA_CONTENT_FALLBACK": "contenu multimédia", | ||||||
|       "NO_TEMPLATES_AVAILABLE": "No Twilio templates available. Click refresh to sync templates from Twilio.", |       "NO_TEMPLATES_AVAILABLE": "Aucun modèle Twilio disponible. Cliquez sur Actualiser pour synchroniser les modèles de Twilio.", | ||||||
|       "REFRESH_BUTTON": "Refresh templates", |       "REFRESH_BUTTON": "Rafraîchir les modèles", | ||||||
|       "REFRESH_SUCCESS": "Templates refresh initiated. It may take a couple of minutes to update.", |       "REFRESH_SUCCESS": "Mise à jour des modèles. La mise à jour peut prendre quelques minutes.", | ||||||
|       "REFRESH_ERROR": "Failed to refresh templates. Please try again.", |       "REFRESH_ERROR": "Échec de la mise à jour des modèles. Veuillez réessayer.", | ||||||
|       "LABELS": { |       "LABELS": { | ||||||
|         "LANGUAGE": "Langue", |         "LANGUAGE": "Langue", | ||||||
|         "TEMPLATE_BODY": "Corps du modèle", |         "TEMPLATE_BODY": "Corps du modèle", | ||||||
|         "CATEGORY": "Catégorie" |         "CATEGORY": "Catégorie" | ||||||
|       }, |       }, | ||||||
|       "TYPES": { |       "TYPES": { | ||||||
|         "MEDIA": "Media", |         "MEDIA": "Média", | ||||||
|         "QUICK_REPLY": "Quick Reply", |         "QUICK_REPLY": "Réponse rapide", | ||||||
|         "TEXT": "Texte" |         "TEXT": "Texte" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
| @@ -39,8 +39,8 @@ | |||||||
|       "GO_BACK_LABEL": "Retour", |       "GO_BACK_LABEL": "Retour", | ||||||
|       "SEND_MESSAGE_LABEL": "Envoyer un message", |       "SEND_MESSAGE_LABEL": "Envoyer un message", | ||||||
|       "FORM_ERROR_MESSAGE": "Veuillez remplir toutes les variables avant d'envoyer", |       "FORM_ERROR_MESSAGE": "Veuillez remplir toutes les variables avant d'envoyer", | ||||||
|       "MEDIA_HEADER_LABEL": "{type} Header", |       "MEDIA_HEADER_LABEL": "En-tête {type}", | ||||||
|       "MEDIA_URL_LABEL": "Enter full media URL", |       "MEDIA_URL_LABEL": "Saisissez l'URL complète du média", | ||||||
|       "MEDIA_URL_PLACEHOLDER": "https://example.com/image.jpg" |       "MEDIA_URL_PLACEHOLDER": "https://example.com/image.jpg" | ||||||
|     }, |     }, | ||||||
|     "FORM": { |     "FORM": { | ||||||
|   | |||||||
| @@ -35,11 +35,11 @@ | |||||||
|     "API_HOURS_WINDOW": "Vous ne pouvez répondre à cette conversation que dans un délai de {hours} heures", |     "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 ?", |     "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", |     "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_MESSAGE": "Vous répondez à une conversation actuellement gérée par un assistant ou un bot.", | ||||||
|     "BOT_HANDOFF_ACTION": "Mark open and assign to you", |     "BOT_HANDOFF_ACTION": "Ouvrir et m’attribuer", | ||||||
|     "BOT_HANDOFF_REOPEN_ACTION": "Mark conversation open", |     "BOT_HANDOFF_REOPEN_ACTION": "Marquer la conversation comme ouverte", | ||||||
|     "BOT_HANDOFF_SUCCESS": "Conversation has been handed over to you", |     "BOT_HANDOFF_SUCCESS": "La conversation vous a été attribuée", | ||||||
|     "BOT_HANDOFF_ERROR": "Failed to take over the conversation. Please try again.", |     "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_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", |     "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.", |     "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", |       "SHOW_LABELS": "Afficher les étiquettes", | ||||||
|       "HIDE_LABELS": "Masquer 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": { |     "HEADER": { | ||||||
|       "RESOLVE_ACTION": "Résoudre", |       "RESOLVE_ACTION": "Résoudre", | ||||||
|       "REOPEN_ACTION": "Ré-ouvrir", |       "REOPEN_ACTION": "Ré-ouvrir", | ||||||
|       "OPEN_ACTION": "Ouvert", |       "OPEN_ACTION": "Ouvert", | ||||||
|       "MORE_ACTIONS": "More actions", |       "MORE_ACTIONS": "Plus d'actions", | ||||||
|       "OPEN": "Plus", |       "OPEN": "Plus", | ||||||
|       "CLOSE": "Fermer", |       "CLOSE": "Fermer", | ||||||
|       "DETAILS": "détails", |       "DETAILS": "détails", | ||||||
| @@ -128,8 +139,8 @@ | |||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "DELETE_CONVERSATION": { |     "DELETE_CONVERSATION": { | ||||||
|       "TITLE": "Delete conversation #{conversationId}", |       "TITLE": "Supprimer la conversation #{conversationId}", | ||||||
|       "DESCRIPTION": "Are you sure you want to delete this conversation?", |       "DESCRIPTION": "Êtes-vous sûr de vouloir supprimer cette conversation ?", | ||||||
|       "CONFIRM": "Supprimer" |       "CONFIRM": "Supprimer" | ||||||
|     }, |     }, | ||||||
|     "CARD_CONTEXT_MENU": { |     "CARD_CONTEXT_MENU": { | ||||||
| @@ -148,10 +159,10 @@ | |||||||
|       "ASSIGN_LABEL": "Assigner une étiquette", |       "ASSIGN_LABEL": "Assigner une étiquette", | ||||||
|       "AGENTS_LOADING": "Chargement des agents...", |       "AGENTS_LOADING": "Chargement des agents...", | ||||||
|       "ASSIGN_TEAM": "Assigner une équipe", |       "ASSIGN_TEAM": "Assigner une équipe", | ||||||
|       "DELETE": "Delete conversation", |       "DELETE": "Supprimer la conversation", | ||||||
|       "OPEN_IN_NEW_TAB": "Open in new tab", |       "OPEN_IN_NEW_TAB": "Ouvrir dans un nouvel onglet", | ||||||
|       "COPY_LINK": "Copy conversation link", |       "COPY_LINK": "Copier le lien de la conversation", | ||||||
|       "COPY_LINK_SUCCESS": "Conversation link copied to clipboard", |       "COPY_LINK_SUCCESS": "Le lien de conversation a été copié dans le presse-papiers", | ||||||
|       "API": { |       "API": { | ||||||
|         "AGENT_ASSIGNMENT": { |         "AGENT_ASSIGNMENT": { | ||||||
|           "SUCCESFUL": "Conversation id {conversationId} assignée à \"{agentName}\"", |           "SUCCESFUL": "Conversation id {conversationId} assignée à \"{agentName}\"", | ||||||
| @@ -226,8 +237,8 @@ | |||||||
|     "ASSIGN_LABEL_SUCCESFUL": "Étiquette attribuée avec succès", |     "ASSIGN_LABEL_SUCCESFUL": "Étiquette attribuée avec succès", | ||||||
|     "ASSIGN_LABEL_FAILED": "Échec de l'attribution de l'étiquette", |     "ASSIGN_LABEL_FAILED": "Échec de l'attribution de l'étiquette", | ||||||
|     "CHANGE_TEAM": "L'équipe de conversation a été modifiée", |     "CHANGE_TEAM": "L'équipe de conversation a été modifiée", | ||||||
|     "SUCCESS_DELETE_CONVERSATION": "Conversation deleted successfully", |     "SUCCESS_DELETE_CONVERSATION": "Conversation supprimée avec succès", | ||||||
|     "FAIL_DELETE_CONVERSATION": "Couldn't delete conversation! Try again", |     "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", |     "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", |     "MESSAGE_ERROR": "Impossible d'envoyer ce message, veuillez réessayer plus tard", | ||||||
|     "SENT_BY": "Envoyé par:", |     "SENT_BY": "Envoyé par:", | ||||||
|   | |||||||
| @@ -51,6 +51,13 @@ | |||||||
|             "LARGER": "Larger", |             "LARGER": "Larger", | ||||||
|             "EXTRA_LARGE": "Extra Large" |             "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": { |       "MESSAGE_SIGNATURE_SECTION": { | ||||||
| @@ -330,6 +337,7 @@ | |||||||
|     "REPORTS_LABEL": "Étiquettes", |     "REPORTS_LABEL": "Étiquettes", | ||||||
|     "REPORTS_INBOX": "Boîte de réception", |     "REPORTS_INBOX": "Boîte de réception", | ||||||
|     "REPORTS_TEAM": "Équipes", |     "REPORTS_TEAM": "Équipes", | ||||||
|  |     "AGENT_ASSIGNMENT": "Agent Assignment", | ||||||
|     "SET_AVAILABILITY_TITLE": "Se définir comme", |     "SET_AVAILABILITY_TITLE": "Se définir comme", | ||||||
|     "SET_YOUR_AVAILABILITY": "Définissez votre disponibilité", |     "SET_YOUR_AVAILABILITY": "Définissez votre disponibilité", | ||||||
|     "SLA": "SLA", |     "SLA": "SLA", | ||||||
| @@ -418,5 +426,255 @@ | |||||||
|       "SWITCH_TO_REPLY": "Basculer vers la réponse", |       "SWITCH_TO_REPLY": "Basculer vers la réponse", | ||||||
|       "TOGGLE_SNOOZE_DROPDOWN": "Activer/désactiver la liste déroulante de répétition" |       "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": "הצג תויות", |       "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": { |     "HEADER": { | ||||||
|       "RESOLVE_ACTION": "פתרון", |       "RESOLVE_ACTION": "פתרון", | ||||||
|       "REOPEN_ACTION": "פתח מחדש", |       "REOPEN_ACTION": "פתח מחדש", | ||||||
|   | |||||||
| @@ -51,6 +51,13 @@ | |||||||
|             "LARGER": "Larger", |             "LARGER": "Larger", | ||||||
|             "EXTRA_LARGE": "Extra Large" |             "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": { |       "MESSAGE_SIGNATURE_SECTION": { | ||||||
| @@ -330,6 +337,7 @@ | |||||||
|     "REPORTS_LABEL": "תוויות", |     "REPORTS_LABEL": "תוויות", | ||||||
|     "REPORTS_INBOX": "תיבת הדואר הנכנס", |     "REPORTS_INBOX": "תיבת הדואר הנכנס", | ||||||
|     "REPORTS_TEAM": "צוות", |     "REPORTS_TEAM": "צוות", | ||||||
|  |     "AGENT_ASSIGNMENT": "Agent Assignment", | ||||||
|     "SET_AVAILABILITY_TITLE": "הגדר את עצמך בתור", |     "SET_AVAILABILITY_TITLE": "הגדר את עצמך בתור", | ||||||
|     "SET_YOUR_AVAILABILITY": "הגדר את הזמינות שלך", |     "SET_YOUR_AVAILABILITY": "הגדר את הזמינות שלך", | ||||||
|     "SLA": "SLA", |     "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": "Show labels", |       "SHOW_LABELS": "Show labels", | ||||||
|       "HIDE_LABELS": "Hide 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": { |     "HEADER": { | ||||||
|       "RESOLVE_ACTION": "Resolve", |       "RESOLVE_ACTION": "Resolve", | ||||||
|       "REOPEN_ACTION": "Reopen", |       "REOPEN_ACTION": "Reopen", | ||||||
|   | |||||||
| @@ -51,6 +51,13 @@ | |||||||
|             "LARGER": "Larger", |             "LARGER": "Larger", | ||||||
|             "EXTRA_LARGE": "Extra Large" |             "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": { |       "MESSAGE_SIGNATURE_SECTION": { | ||||||
| @@ -330,6 +337,7 @@ | |||||||
|     "REPORTS_LABEL": "Labels", |     "REPORTS_LABEL": "Labels", | ||||||
|     "REPORTS_INBOX": "Inbox", |     "REPORTS_INBOX": "Inbox", | ||||||
|     "REPORTS_TEAM": "Team", |     "REPORTS_TEAM": "Team", | ||||||
|  |     "AGENT_ASSIGNMENT": "Agent Assignment", | ||||||
|     "SET_AVAILABILITY_TITLE": "Set yourself as", |     "SET_AVAILABILITY_TITLE": "Set yourself as", | ||||||
|     "SET_YOUR_AVAILABILITY": "Set your availability", |     "SET_YOUR_AVAILABILITY": "Set your availability", | ||||||
|     "SLA": "SLA", |     "SLA": "SLA", | ||||||
| @@ -418,5 +426,255 @@ | |||||||
|       "SWITCH_TO_REPLY": "Switch to Reply", |       "SWITCH_TO_REPLY": "Switch to Reply", | ||||||
|       "TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown" |       "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", |       "SHOW_LABELS": "Show labels", | ||||||
|       "HIDE_LABELS": "Hide 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": { |     "HEADER": { | ||||||
|       "RESOLVE_ACTION": "Resolve", |       "RESOLVE_ACTION": "Resolve", | ||||||
|       "REOPEN_ACTION": "Reopen", |       "REOPEN_ACTION": "Reopen", | ||||||
|   | |||||||
| @@ -51,6 +51,13 @@ | |||||||
|             "LARGER": "Larger", |             "LARGER": "Larger", | ||||||
|             "EXTRA_LARGE": "Extra Large" |             "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": { |       "MESSAGE_SIGNATURE_SECTION": { | ||||||
| @@ -330,6 +337,7 @@ | |||||||
|     "REPORTS_LABEL": "Labels", |     "REPORTS_LABEL": "Labels", | ||||||
|     "REPORTS_INBOX": "Inbox", |     "REPORTS_INBOX": "Inbox", | ||||||
|     "REPORTS_TEAM": "Tim", |     "REPORTS_TEAM": "Tim", | ||||||
|  |     "AGENT_ASSIGNMENT": "Agent Assignment", | ||||||
|     "SET_AVAILABILITY_TITLE": "Postavi sebe kao", |     "SET_AVAILABILITY_TITLE": "Postavi sebe kao", | ||||||
|     "SET_YOUR_AVAILABILITY": "Set your availability", |     "SET_YOUR_AVAILABILITY": "Set your availability", | ||||||
|     "SLA": "SLA", |     "SLA": "SLA", | ||||||
| @@ -418,5 +426,255 @@ | |||||||
|       "SWITCH_TO_REPLY": "Switch to Reply", |       "SWITCH_TO_REPLY": "Switch to Reply", | ||||||
|       "TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown" |       "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", |       "SHOW_LABELS": "Cimkék mutatása", | ||||||
|       "HIDE_LABELS": "Cimkék elrejtése" |       "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": { |     "HEADER": { | ||||||
|       "RESOLVE_ACTION": "Megoldva", |       "RESOLVE_ACTION": "Megoldva", | ||||||
|       "REOPEN_ACTION": "Újranyitás", |       "REOPEN_ACTION": "Újranyitás", | ||||||
|   | |||||||
| @@ -51,6 +51,13 @@ | |||||||
|             "LARGER": "Larger", |             "LARGER": "Larger", | ||||||
|             "EXTRA_LARGE": "Extra Large" |             "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": { |       "MESSAGE_SIGNATURE_SECTION": { | ||||||
| @@ -330,6 +337,7 @@ | |||||||
|     "REPORTS_LABEL": "Cimkék", |     "REPORTS_LABEL": "Cimkék", | ||||||
|     "REPORTS_INBOX": "Fiók", |     "REPORTS_INBOX": "Fiók", | ||||||
|     "REPORTS_TEAM": "Csapat", |     "REPORTS_TEAM": "Csapat", | ||||||
|  |     "AGENT_ASSIGNMENT": "Agent Assignment", | ||||||
|     "SET_AVAILABILITY_TITLE": "Ugrás a Beszélgetések Irányítópultjához", |     "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", |     "SET_YOUR_AVAILABILITY": "Elérhetőség beállítása", | ||||||
|     "SLA": "SLA", |     "SLA": "SLA", | ||||||
| @@ -418,5 +426,255 @@ | |||||||
|       "SWITCH_TO_REPLY": "Válts a válasz fülre", |       "SWITCH_TO_REPLY": "Válts a válasz fülre", | ||||||
|       "TOGGLE_SNOOZE_DROPDOWN": "Alvómód bekapcsolása a legördülő menüben" |       "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", |       "SHOW_LABELS": "Show labels", | ||||||
|       "HIDE_LABELS": "Hide 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": { |     "HEADER": { | ||||||
|       "RESOLVE_ACTION": "Resolve", |       "RESOLVE_ACTION": "Resolve", | ||||||
|       "REOPEN_ACTION": "Reopen", |       "REOPEN_ACTION": "Reopen", | ||||||
|   | |||||||
| @@ -51,6 +51,13 @@ | |||||||
|             "LARGER": "Larger", |             "LARGER": "Larger", | ||||||
|             "EXTRA_LARGE": "Extra Large" |             "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": { |       "MESSAGE_SIGNATURE_SECTION": { | ||||||
| @@ -330,6 +337,7 @@ | |||||||
|     "REPORTS_LABEL": "Labels", |     "REPORTS_LABEL": "Labels", | ||||||
|     "REPORTS_INBOX": "Inbox", |     "REPORTS_INBOX": "Inbox", | ||||||
|     "REPORTS_TEAM": "Team", |     "REPORTS_TEAM": "Team", | ||||||
|  |     "AGENT_ASSIGNMENT": "Agent Assignment", | ||||||
|     "SET_AVAILABILITY_TITLE": "Set yourself as", |     "SET_AVAILABILITY_TITLE": "Set yourself as", | ||||||
|     "SET_YOUR_AVAILABILITY": "Set your availability", |     "SET_YOUR_AVAILABILITY": "Set your availability", | ||||||
|     "SLA": "SLA", |     "SLA": "SLA", | ||||||
| @@ -418,5 +426,255 @@ | |||||||
|       "SWITCH_TO_REPLY": "Switch to Reply", |       "SWITCH_TO_REPLY": "Switch to Reply", | ||||||
|       "TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown" |       "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", |       "SHOW_LABELS": "Tampilkan label", | ||||||
|       "HIDE_LABELS": "Sembunyikan 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": { |     "HEADER": { | ||||||
|       "RESOLVE_ACTION": "Menyelesaikan", |       "RESOLVE_ACTION": "Menyelesaikan", | ||||||
|       "REOPEN_ACTION": "Buka Kembali", |       "REOPEN_ACTION": "Buka Kembali", | ||||||
|   | |||||||
| @@ -51,6 +51,13 @@ | |||||||
|             "LARGER": "Larger", |             "LARGER": "Larger", | ||||||
|             "EXTRA_LARGE": "Extra Large" |             "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": { |       "MESSAGE_SIGNATURE_SECTION": { | ||||||
| @@ -330,6 +337,7 @@ | |||||||
|     "REPORTS_LABEL": "Label", |     "REPORTS_LABEL": "Label", | ||||||
|     "REPORTS_INBOX": "Kotak Masuk", |     "REPORTS_INBOX": "Kotak Masuk", | ||||||
|     "REPORTS_TEAM": "Tim", |     "REPORTS_TEAM": "Tim", | ||||||
|  |     "AGENT_ASSIGNMENT": "Agent Assignment", | ||||||
|     "SET_AVAILABILITY_TITLE": "Atur diri anda sebagai", |     "SET_AVAILABILITY_TITLE": "Atur diri anda sebagai", | ||||||
|     "SET_YOUR_AVAILABILITY": "Atur ketersediaan Anda", |     "SET_YOUR_AVAILABILITY": "Atur ketersediaan Anda", | ||||||
|     "SLA": "SLA", |     "SLA": "SLA", | ||||||
| @@ -418,5 +426,255 @@ | |||||||
|       "SWITCH_TO_REPLY": "Beralih ke Balasan", |       "SWITCH_TO_REPLY": "Beralih ke Balasan", | ||||||
|       "TOGGLE_SNOOZE_DROPDOWN": "Buka/Tutup dropdown penundaan" |       "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", |       "SHOW_LABELS": "Show labels", | ||||||
|       "HIDE_LABELS": "Hide 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": { |     "HEADER": { | ||||||
|       "RESOLVE_ACTION": "Resolve", |       "RESOLVE_ACTION": "Resolve", | ||||||
|       "REOPEN_ACTION": "Reopen", |       "REOPEN_ACTION": "Reopen", | ||||||
|   | |||||||
| @@ -51,6 +51,13 @@ | |||||||
|             "LARGER": "Larger", |             "LARGER": "Larger", | ||||||
|             "EXTRA_LARGE": "Extra Large" |             "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": { |       "MESSAGE_SIGNATURE_SECTION": { | ||||||
| @@ -330,6 +337,7 @@ | |||||||
|     "REPORTS_LABEL": "Labels", |     "REPORTS_LABEL": "Labels", | ||||||
|     "REPORTS_INBOX": "Innhólf", |     "REPORTS_INBOX": "Innhólf", | ||||||
|     "REPORTS_TEAM": "Team", |     "REPORTS_TEAM": "Team", | ||||||
|  |     "AGENT_ASSIGNMENT": "Agent Assignment", | ||||||
|     "SET_AVAILABILITY_TITLE": "Set yourself as", |     "SET_AVAILABILITY_TITLE": "Set yourself as", | ||||||
|     "SET_YOUR_AVAILABILITY": "Set your availability", |     "SET_YOUR_AVAILABILITY": "Set your availability", | ||||||
|     "SLA": "SLA", |     "SLA": "SLA", | ||||||
| @@ -418,5 +426,255 @@ | |||||||
|       "SWITCH_TO_REPLY": "Switch to Reply", |       "SWITCH_TO_REPLY": "Switch to Reply", | ||||||
|       "TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown" |       "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", |       "SHOW_LABELS": "Show labels", | ||||||
|       "HIDE_LABELS": "Hide 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": { |     "HEADER": { | ||||||
|       "RESOLVE_ACTION": "Risolvi", |       "RESOLVE_ACTION": "Risolvi", | ||||||
|       "REOPEN_ACTION": "Riapri", |       "REOPEN_ACTION": "Riapri", | ||||||
|   | |||||||
| @@ -51,6 +51,13 @@ | |||||||
|             "LARGER": "Larger", |             "LARGER": "Larger", | ||||||
|             "EXTRA_LARGE": "Extra Large" |             "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": { |       "MESSAGE_SIGNATURE_SECTION": { | ||||||
| @@ -330,6 +337,7 @@ | |||||||
|     "REPORTS_LABEL": "Etichette", |     "REPORTS_LABEL": "Etichette", | ||||||
|     "REPORTS_INBOX": "Posta", |     "REPORTS_INBOX": "Posta", | ||||||
|     "REPORTS_TEAM": "Team", |     "REPORTS_TEAM": "Team", | ||||||
|  |     "AGENT_ASSIGNMENT": "Agent Assignment", | ||||||
|     "SET_AVAILABILITY_TITLE": "Imposta te stesso come", |     "SET_AVAILABILITY_TITLE": "Imposta te stesso come", | ||||||
|     "SET_YOUR_AVAILABILITY": "Imposta la tua disponibilità", |     "SET_YOUR_AVAILABILITY": "Imposta la tua disponibilità", | ||||||
|     "SLA": "SLA", |     "SLA": "SLA", | ||||||
| @@ -418,5 +426,255 @@ | |||||||
|       "SWITCH_TO_REPLY": "Passa a Risposta", |       "SWITCH_TO_REPLY": "Passa a Risposta", | ||||||
|       "TOGGLE_SNOOZE_DROPDOWN": "Attiva/Disattiva sospensione a discesa" |       "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": "ラベルを表示", |       "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": { |     "HEADER": { | ||||||
|       "RESOLVE_ACTION": "解決する", |       "RESOLVE_ACTION": "解決する", | ||||||
|       "REOPEN_ACTION": "再開する", |       "REOPEN_ACTION": "再開する", | ||||||
|   | |||||||
| @@ -51,6 +51,13 @@ | |||||||
|             "LARGER": "Larger", |             "LARGER": "Larger", | ||||||
|             "EXTRA_LARGE": "Extra Large" |             "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": { |       "MESSAGE_SIGNATURE_SECTION": { | ||||||
| @@ -330,6 +337,7 @@ | |||||||
|     "REPORTS_LABEL": "ラベル", |     "REPORTS_LABEL": "ラベル", | ||||||
|     "REPORTS_INBOX": "受信トレイ", |     "REPORTS_INBOX": "受信トレイ", | ||||||
|     "REPORTS_TEAM": "チーム", |     "REPORTS_TEAM": "チーム", | ||||||
|  |     "AGENT_ASSIGNMENT": "Agent Assignment", | ||||||
|     "SET_AVAILABILITY_TITLE": "ステータスを設定", |     "SET_AVAILABILITY_TITLE": "ステータスを設定", | ||||||
|     "SET_YOUR_AVAILABILITY": "利用可能ステータスを設定", |     "SET_YOUR_AVAILABILITY": "利用可能ステータスを設定", | ||||||
|     "SLA": "SLA", |     "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": "優先度", | ||||||
|  |           "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