diff --git a/Rakefile b/Rakefile
index 591d2c4c6..2e996417e 100644
--- a/Rakefile
+++ b/Rakefile
@@ -2,9 +2,8 @@
# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
require_relative 'config/application'
+# Load Enterprise Edition rake tasks if they exist
+enterprise_tasks_path = Rails.root.join('enterprise/tasks_railtie.rb').to_s
+require enterprise_tasks_path if File.exist?(enterprise_tasks_path)
Rails.application.load_tasks
-
-# Load Enterprise Edition rake tasks if they exist
-enterprise_tasks_path = Rails.root.join('enterprise/lib/tasks.rb').to_s
-require enterprise_tasks_path if File.exist?(enterprise_tasks_path)
diff --git a/app/builders/agent_builder.rb b/app/builders/agent_builder.rb
index 54f478920..2fe11cae0 100644
--- a/app/builders/agent_builder.rb
+++ b/app/builders/agent_builder.rb
@@ -52,3 +52,5 @@ class AgentBuilder
}.compact))
end
end
+
+AgentBuilder.prepend_mod_with('AgentBuilder')
diff --git a/app/controllers/api/v1/accounts/portals_controller.rb b/app/controllers/api/v1/accounts/portals_controller.rb
index af96441f8..57344cc1e 100644
--- a/app/controllers/api/v1/accounts/portals_controller.rb
+++ b/app/controllers/api/v1/accounts/portals_controller.rb
@@ -85,7 +85,8 @@ class Api::V1::Accounts::PortalsController < Api::V1::Accounts::BaseController
def live_chat_widget_params
permitted_params = params.permit(:inbox_id)
- return {} if permitted_params[:inbox_id].blank?
+ return {} unless permitted_params.key?(:inbox_id)
+ return { channel_web_widget_id: nil } if permitted_params[:inbox_id].blank?
inbox = Inbox.find(permitted_params[:inbox_id])
return {} unless inbox.web_widget?
diff --git a/app/controllers/api/v1/accounts/whatsapp/authorizations_controller.rb b/app/controllers/api/v1/accounts/whatsapp/authorizations_controller.rb
index 3e7d876c3..d52f396fc 100644
--- a/app/controllers/api/v1/accounts/whatsapp/authorizations_controller.rb
+++ b/app/controllers/api/v1/accounts/whatsapp/authorizations_controller.rb
@@ -1,5 +1,4 @@
class Api::V1::Accounts::Whatsapp::AuthorizationsController < Api::V1::Accounts::BaseController
- before_action :validate_feature_enabled!
before_action :fetch_and_validate_inbox, if: -> { params[:inbox_id].present? }
# POST /api/v1/accounts/:account_id/whatsapp/authorization
@@ -65,15 +64,6 @@ class Api::V1::Accounts::Whatsapp::AuthorizationsController < Api::V1::Accounts:
}, status: :unprocessable_entity
end
- def validate_feature_enabled!
- return if Current.account.feature_whatsapp_embedded_signup?
-
- render json: {
- success: false,
- error: 'WhatsApp embedded signup is not enabled for this account'
- }, status: :forbidden
- end
-
def validate_embedded_signup_params!
missing_params = []
missing_params << 'code' if params[:code].blank?
diff --git a/app/controllers/widgets_controller.rb b/app/controllers/widgets_controller.rb
index 4be690ffe..9a6a376f7 100644
--- a/app/controllers/widgets_controller.rb
+++ b/app/controllers/widgets_controller.rb
@@ -70,7 +70,12 @@ class WidgetsController < ActionController::Base
end
def allow_iframe_requests
- response.headers.delete('X-Frame-Options')
+ if @web_widget.allowed_domains.blank?
+ response.headers.delete('X-Frame-Options')
+ else
+ domains = @web_widget.allowed_domains.split(',').map(&:strip).join(' ')
+ response.headers['Content-Security-Policy'] = "frame-ancestors #{domains}"
+ end
end
end
diff --git a/app/javascript/dashboard/api/samlSettings.js b/app/javascript/dashboard/api/samlSettings.js
new file mode 100644
index 000000000..7c0f5b266
--- /dev/null
+++ b/app/javascript/dashboard/api/samlSettings.js
@@ -0,0 +1,26 @@
+/* global axios */
+import ApiClient from './ApiClient';
+
+class SamlSettingsAPI extends ApiClient {
+ constructor() {
+ super('saml_settings', { accountScoped: true });
+ }
+
+ get() {
+ return axios.get(this.url);
+ }
+
+ create(data) {
+ return axios.post(this.url, { saml_settings: data });
+ }
+
+ update(data) {
+ return axios.put(this.url, { saml_settings: data });
+ }
+
+ delete() {
+ return axios.delete(this.url);
+ }
+}
+
+export default new SamlSettingsAPI();
diff --git a/app/javascript/dashboard/components-next/AssignmentPolicy/components/AddDataDropdown.vue b/app/javascript/dashboard/components-next/AssignmentPolicy/components/AddDataDropdown.vue
index c664d8929..a078b9cc7 100644
--- a/app/javascript/dashboard/components-next/AssignmentPolicy/components/AddDataDropdown.vue
+++ b/app/javascript/dashboard/components-next/AssignmentPolicy/components/AddDataDropdown.vue
@@ -1,9 +1,10 @@
+
+
+
+
+
+ {{
+ t(
+ 'ASSIGNMENT_POLICY.AGENT_CAPACITY_POLICY.FORM.EXCLUSION_RULES.LABEL'
+ )
+ }}
+
+
+ {{
+ t(
+ 'ASSIGNMENT_POLICY.AGENT_CAPACITY_POLICY.FORM.EXCLUSION_RULES.DESCRIPTION'
+ )
+ }}
+
+
+
+
+
+ {{
+ t(
+ 'ASSIGNMENT_POLICY.AGENT_CAPACITY_POLICY.FORM.EXCLUSION_RULES.TAGS.LABEL'
+ )
+ }}
+
+
+
+
+
+
+ {{
+ t(
+ 'ASSIGNMENT_POLICY.AGENT_CAPACITY_POLICY.FORM.EXCLUSION_RULES.DURATION.LABEL'
+ )
+ }}
+
+
+
+
+
+
+
+
diff --git a/app/javascript/dashboard/components-next/AssignmentPolicy/components/InboxCapacityLimits.vue b/app/javascript/dashboard/components-next/AssignmentPolicy/components/InboxCapacityLimits.vue
new file mode 100644
index 000000000..b31248653
--- /dev/null
+++ b/app/javascript/dashboard/components-next/AssignmentPolicy/components/InboxCapacityLimits.vue
@@ -0,0 +1,177 @@
+
+
+
+
+
+
+ {{ t(`${BASE_KEY}.FORM.INBOX_CAPACITY_LIMIT.LABEL`) }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ t(`${BASE_KEY}.FORM.INBOX_CAPACITY_LIMIT.EMPTY_STATE`) }}
+
+
+
+
+
+
+
+ {{ getInboxName(limit.inboxId) }}
+
+
+
+
+
+
+ {{
+ t(
+ `${BASE_KEY}.FORM.INBOX_CAPACITY_LIMIT.FIELD.MAX_CONVERSATIONS`
+ )
+ }}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/javascript/dashboard/components-next/AssignmentPolicy/components/story/AddDataDropdown.story.vue b/app/javascript/dashboard/components-next/AssignmentPolicy/components/story/AddDataDropdown.story.vue
index 2ac4d8854..e69aa798f 100644
--- a/app/javascript/dashboard/components-next/AssignmentPolicy/components/story/AddDataDropdown.story.vue
+++ b/app/javascript/dashboard/components-next/AssignmentPolicy/components/story/AddDataDropdown.story.vue
@@ -34,6 +34,29 @@ const mockInboxes = [
},
];
+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);
};
@@ -42,9 +65,9 @@ const handleAdd = item => {
-
+
+
+
+
+
diff --git a/app/javascript/dashboard/components-next/AssignmentPolicy/components/story/DataTable.story.vue b/app/javascript/dashboard/components-next/AssignmentPolicy/components/story/DataTable.story.vue
index 912b1fdfc..a81a29976 100644
--- a/app/javascript/dashboard/components-next/AssignmentPolicy/components/story/DataTable.story.vue
+++ b/app/javascript/dashboard/components-next/AssignmentPolicy/components/story/DataTable.story.vue
@@ -22,6 +22,21 @@ const mockItems = [
},
];
+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);
};
@@ -30,7 +45,7 @@ const handleDelete = itemId => {
@@ -42,6 +57,16 @@ const handleDelete = itemId => {
+
+
+
+
+
+
diff --git a/app/javascript/dashboard/components-next/AssignmentPolicy/components/story/ExclusionRules.story.vue b/app/javascript/dashboard/components-next/AssignmentPolicy/components/story/ExclusionRules.story.vue
new file mode 100644
index 000000000..7e0dbd595
--- /dev/null
+++ b/app/javascript/dashboard/components-next/AssignmentPolicy/components/story/ExclusionRules.story.vue
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/javascript/dashboard/components-next/AssignmentPolicy/components/story/InboxCapacityLimits.story.vue b/app/javascript/dashboard/components-next/AssignmentPolicy/components/story/InboxCapacityLimits.story.vue
new file mode 100644
index 000000000..9d90112a1
--- /dev/null
+++ b/app/javascript/dashboard/components-next/AssignmentPolicy/components/story/InboxCapacityLimits.story.vue
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Current Limits:
+
{{
+ JSON.stringify(inboxCapacityLimitsEmpty, null, 2)
+ }}
+
+
+
+
+
diff --git a/app/javascript/dashboard/components-next/Contacts/ContactLabels/ContactLabels.vue b/app/javascript/dashboard/components-next/Contacts/ContactLabels/ContactLabels.vue
index af04de9a7..bc1370a0a 100644
--- a/app/javascript/dashboard/components-next/Contacts/ContactLabels/ContactLabels.vue
+++ b/app/javascript/dashboard/components-next/Contacts/ContactLabels/ContactLabels.vue
@@ -86,8 +86,8 @@ const handleLabelAction = async ({ value }) => {
}
};
-const handleRemoveLabel = labelId => {
- return handleLabelAction({ value: labelId });
+const handleRemoveLabel = label => {
+ return handleLabelAction({ value: label.id });
};
watch(
diff --git a/app/javascript/dashboard/components-next/HelpCenter/Pages/PortalSettingsPage/PortalBaseSettings.vue b/app/javascript/dashboard/components-next/HelpCenter/Pages/PortalSettingsPage/PortalBaseSettings.vue
index f74bf95e2..b99f08a29 100644
--- a/app/javascript/dashboard/components-next/HelpCenter/Pages/PortalSettingsPage/PortalBaseSettings.vue
+++ b/app/javascript/dashboard/components-next/HelpCenter/Pages/PortalSettingsPage/PortalBaseSettings.vue
@@ -51,12 +51,20 @@ const originalState = reactive({ ...state });
const liveChatWidgets = computed(() => {
const inboxes = store.getters['inboxes/getInboxes'];
- return inboxes
+ const widgetOptions = inboxes
.filter(inbox => inbox.channel_type === 'Channel::WebWidget')
.map(inbox => ({
value: inbox.id,
label: inbox.name,
}));
+
+ return [
+ {
+ value: '',
+ label: t('HELP_CENTER.PORTAL_SETTINGS.FORM.LIVE_CHAT_WIDGET.NONE_OPTION'),
+ },
+ ...widgetOptions,
+ ];
});
const rules = {
@@ -108,7 +116,7 @@ watch(
widgetColor: newVal.color,
homePageLink: newVal.homepage_link,
slug: newVal.slug,
- liveChatWidgetInboxId: newVal.inbox?.id,
+ liveChatWidgetInboxId: newVal.inbox?.id || '',
});
if (newVal.logo) {
const {
diff --git a/app/javascript/dashboard/components-next/Label/LabelItem.vue b/app/javascript/dashboard/components-next/Label/LabelItem.vue
index 65c2600b1..e0917f954 100644
--- a/app/javascript/dashboard/components-next/Label/LabelItem.vue
+++ b/app/javascript/dashboard/components-next/Label/LabelItem.vue
@@ -15,7 +15,7 @@ const props = defineProps({
const emit = defineEmits(['remove', 'hover']);
const handleRemoveLabel = () => {
- emit('remove', props.label?.id);
+ emit('remove', props.label);
};
const handleMouseEnter = () => {
@@ -45,6 +45,7 @@ const handleMouseEnter = () => {
{
);
});
+const inputFieldType = computed(() => {
+ if (inputType.value === 'date') return 'date';
+ if (inputType.value === 'number') return 'number';
+ return 'text';
+});
+
const resetModelOnAttributeKeyChange = newAttributeKey => {
/**
* Resets the filter values and operator when the attribute key changes. This ensures that
@@ -182,7 +188,7 @@ defineExpose({ validate });
diff --git a/app/javascript/dashboard/components-next/filter/provider.js b/app/javascript/dashboard/components-next/filter/provider.js
index f6d078d76..7fd600da9 100644
--- a/app/javascript/dashboard/components-next/filter/provider.js
+++ b/app/javascript/dashboard/components-next/filter/provider.js
@@ -164,8 +164,8 @@ export function useConversationFilterContext() {
value: CONVERSATION_ATTRIBUTES.DISPLAY_ID,
attributeName: t('FILTER.ATTRIBUTES.CONVERSATION_IDENTIFIER'),
label: t('FILTER.ATTRIBUTES.CONVERSATION_IDENTIFIER'),
- inputType: 'plainText',
- datatype: 'number',
+ inputType: 'number',
+ dataType: 'number',
filterOperators: containmentOperators.value,
attributeModel: 'standard',
},
@@ -179,7 +179,7 @@ export function useConversationFilterContext() {
id: campaign.id,
name: campaign.title,
})),
- datatype: 'number',
+ dataType: 'number',
filterOperators: presenceOperators.value,
attributeModel: 'standard',
},
diff --git a/app/javascript/dashboard/components-next/input/Input.vue b/app/javascript/dashboard/components-next/input/Input.vue
index f20c43449..f4bf5a94f 100644
--- a/app/javascript/dashboard/components-next/input/Input.vue
+++ b/app/javascript/dashboard/components-next/input/Input.vue
@@ -55,7 +55,12 @@ const inputOutlineClass = computed(() => {
});
const handleInput = event => {
- emit('update:modelValue', event.target.value);
+ let value = event.target.value;
+ // Convert to number if type is number and value is not empty
+ if (props.type === 'number' && value !== '') {
+ value = Number(value);
+ }
+ emit('update:modelValue', value);
emit('input', event);
};
@@ -114,7 +119,7 @@ onMounted(() => {
? 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"
+ class="block w-full reset-base text-sm h-10 !px-3 !py-2.5 !mb-0 outline outline-1 border-none border-0 outline-offset-[-1px] rounded-lg bg-n-alpha-black2 file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-n-slate-10 dark:placeholder:text-n-slate-10 disabled:cursor-not-allowed disabled:opacity-50 text-n-slate-12 transition-all duration-500 ease-in-out [appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none"
@input="handleInput"
@focus="handleFocus"
@blur="handleBlur"
diff --git a/app/javascript/dashboard/components-next/message/Message.vue b/app/javascript/dashboard/components-next/message/Message.vue
index 586a4b4cb..dd655d0cc 100644
--- a/app/javascript/dashboard/components-next/message/Message.vue
+++ b/app/javascript/dashboard/components-next/message/Message.vue
@@ -131,6 +131,8 @@ const props = defineProps({
sourceId: { type: String, default: '' }, // eslint-disable-line vue/no-unused-properties
});
+const emit = defineEmits(['retry']);
+
const contextMenuPosition = ref({});
const showBackgroundHighlight = ref(false);
const showContextMenu = ref(false);
@@ -524,6 +526,7 @@ provideMessageContext({
class="[grid-area:meta]"
:class="flexOrientationClass"
:error="contentAttributes.externalError"
+ @retry="emit('retry')"
/>
+
+
+
diff --git a/app/javascript/dashboard/components-next/message/MessageList.vue b/app/javascript/dashboard/components-next/message/MessageList.vue
index 44b317c56..4c4fe1a1d 100644
--- a/app/javascript/dashboard/components-next/message/MessageList.vue
+++ b/app/javascript/dashboard/components-next/message/MessageList.vue
@@ -37,6 +37,8 @@ const props = defineProps({
},
});
+const emit = defineEmits(['retry']);
+
const allMessages = computed(() => {
return useCamelCase(props.messages, { deep: true });
});
@@ -113,6 +115,7 @@ const getInReplyToMessage = parentMessage => {
:inbox-supports-reply-to="inboxSupportsReplyTo"
:current-user-id="currentUserId"
data-clarity-mask="True"
+ @retry="emit('retry', message)"
/>
diff --git a/app/javascript/dashboard/components-next/sidebar/Sidebar.vue b/app/javascript/dashboard/components-next/sidebar/Sidebar.vue
index 27736c3a2..ab6537031 100644
--- a/app/javascript/dashboard/components-next/sidebar/Sidebar.vue
+++ b/app/javascript/dashboard/components-next/sidebar/Sidebar.vue
@@ -494,6 +494,12 @@ const menuItems = computed(() => {
icon: 'i-lucide-clock-alert',
to: accountScopedRoute('sla_list'),
},
+ {
+ name: 'Settings Security',
+ label: t('SIDEBAR.SECURITY'),
+ icon: 'i-lucide-shield',
+ to: accountScopedRoute('security_settings_index'),
+ },
{
name: 'Settings Billing',
label: t('SIDEBAR.BILLING'),
diff --git a/app/javascript/dashboard/components/widgets/conversation/MessagesView.vue b/app/javascript/dashboard/components/widgets/conversation/MessagesView.vue
index 1f850cd74..3cb46c05f 100644
--- a/app/javascript/dashboard/components/widgets/conversation/MessagesView.vue
+++ b/app/javascript/dashboard/components/widgets/conversation/MessagesView.vue
@@ -4,6 +4,7 @@ import { ref, provide } from 'vue';
import { useConfig } from 'dashboard/composables/useConfig';
import { useKeyboardEvents } from 'dashboard/composables/useKeyboardEvents';
import { useAI } from 'dashboard/composables/useAI';
+import { useSnakeCase } from 'dashboard/composables/useTransformKeys';
// components
import ReplyBox from './ReplyBox.vue';
@@ -437,6 +438,11 @@ export default {
makeMessagesRead() {
this.$store.dispatch('markMessagesRead', { id: this.currentChat.id });
},
+ async handleMessageRetry(message) {
+ if (!message) return;
+ const payload = useSnakeCase(message);
+ await this.$store.dispatch('sendMessageWithData', payload);
+ },
},
};
@@ -465,6 +471,7 @@ export default {
:is-an-email-channel="isAnEmailChannel"
:inbox-supports-reply-to="inboxSupportsReplyTo"
:messages="getMessages"
+ @retry="handleMessageRetry"
>
diff --git a/app/javascript/dashboard/constants/globals.js b/app/javascript/dashboard/constants/globals.js
index 489070f38..85dab459c 100644
--- a/app/javascript/dashboard/constants/globals.js
+++ b/app/javascript/dashboard/constants/globals.js
@@ -35,6 +35,8 @@ export default {
HELP_CENTER_DOCS_URL:
'https://www.chatwoot.com/docs/product/others/help-center',
TESTIMONIAL_URL: 'https://testimonials.cdn.chatwoot.com/content.json',
+ WHATSAPP_EMBEDDED_SIGNUP_DOCS_URL:
+ 'https://developers.facebook.com/docs/whatsapp/embedded-signup/custom-flows/onboarding-business-app-users#limitations',
SMALL_SCREEN_BREAKPOINT: 768,
AVAILABILITY_STATUS_KEYS: ['online', 'busy', 'offline'],
SNOOZE_OPTIONS: {
diff --git a/app/javascript/dashboard/featureFlags.js b/app/javascript/dashboard/featureFlags.js
index 143094ae5..85c21365c 100644
--- a/app/javascript/dashboard/featureFlags.js
+++ b/app/javascript/dashboard/featureFlags.js
@@ -38,8 +38,8 @@ export const FEATURE_FLAGS = {
REPORT_V4: 'report_v4',
CHANNEL_INSTAGRAM: 'channel_instagram',
CONTACT_CHATWOOT_SUPPORT_TEAM: 'contact_chatwoot_support_team',
- WHATSAPP_EMBEDDED_SIGNUP: 'whatsapp_embedded_signup',
CAPTAIN_V2: 'captain_integration_v2',
+ SAML: 'saml',
};
export const PREMIUM_FEATURES = [
diff --git a/app/javascript/dashboard/helper/featureHelper.js b/app/javascript/dashboard/helper/featureHelper.js
index ee61b0656..910a6bed6 100644
--- a/app/javascript/dashboard/helper/featureHelper.js
+++ b/app/javascript/dashboard/helper/featureHelper.js
@@ -19,6 +19,7 @@ const FEATURE_HELP_URLS = {
team_management: 'https://chwt.app/hc/teams',
webhook: 'https://chwt.app/hc/webhooks',
billing: 'https://chwt.app/pricing',
+ saml: 'https://chwt.app/hc/saml',
};
export function getHelpUrlForFeature(featureName) {
diff --git a/app/javascript/dashboard/i18n/locale/am/conversation.json b/app/javascript/dashboard/i18n/locale/am/conversation.json
index 5814cac96..ecd318834 100644
--- a/app/javascript/dashboard/i18n/locale/am/conversation.json
+++ b/app/javascript/dashboard/i18n/locale/am/conversation.json
@@ -71,6 +71,17 @@
"SHOW_LABELS": "Show labels",
"HIDE_LABELS": "Hide labels"
},
+ "VOICE_CALL": {
+ "INCOMING_CALL": "Incoming call",
+ "OUTGOING_CALL": "Outgoing call",
+ "CALL_IN_PROGRESS": "Call in progress",
+ "NO_ANSWER": "No answer",
+ "MISSED_CALL": "Missed call",
+ "CALL_ENDED": "Call ended",
+ "NOT_ANSWERED_YET": "Not answered yet",
+ "THEY_ANSWERED": "They answered",
+ "YOU_ANSWERED": "You answered"
+ },
"HEADER": {
"RESOLVE_ACTION": "Resolve",
"REOPEN_ACTION": "Reopen",
diff --git a/app/javascript/dashboard/i18n/locale/am/settings.json b/app/javascript/dashboard/i18n/locale/am/settings.json
index d547538db..c95eada84 100644
--- a/app/javascript/dashboard/i18n/locale/am/settings.json
+++ b/app/javascript/dashboard/i18n/locale/am/settings.json
@@ -51,6 +51,13 @@
"LARGER": "Larger",
"EXTRA_LARGE": "Extra Large"
}
+ },
+ "LANGUAGE": {
+ "TITLE": "Preferred Language",
+ "NOTE": "Choose the language you want to use.",
+ "UPDATE_SUCCESS": "Your Language settings have been updated successfully",
+ "UPDATE_ERROR": "There is an error while updating the language settings, please try again",
+ "USE_ACCOUNT_DEFAULT": "Use account default"
}
},
"MESSAGE_SIGNATURE_SECTION": {
@@ -330,6 +337,7 @@
"REPORTS_LABEL": "Labels",
"REPORTS_INBOX": "Inbox",
"REPORTS_TEAM": "Team",
+ "AGENT_ASSIGNMENT": "Agent Assignment",
"SET_AVAILABILITY_TITLE": "Set yourself as",
"SET_YOUR_AVAILABILITY": "Set your availability",
"SLA": "SLA",
@@ -418,5 +426,255 @@
"SWITCH_TO_REPLY": "Switch to Reply",
"TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown"
}
+ },
+ "ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent assignment",
+ "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here"
+ },
+ "ASSIGNMENT_POLICY": {
+ "TITLE": "Assignment policy",
+ "DESCRIPTION": "Manage how conversations get assigned in inboxes.",
+ "FEATURES": [
+ "Assign by conversations evenly or by available capacity",
+ "Add fair distribution rules to avoid overloading any agent",
+ "Add inboxes to a policy - one policy per inbox"
+ ]
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "TITLE": "Agent capacity policy",
+ "DESCRIPTION": "Manage workload for agents.",
+ "FEATURES": [
+ "Define maximum conversations per inbox",
+ "Create exceptions based on labels and time",
+ "Add agents to a policy - one policy per agent"
+ ]
+ }
+ },
+ "AGENT_ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Assignment policy",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "ORDER": "Order",
+ "PRIORITY": "Priority",
+ "ACTIVE": "Active",
+ "INACTIVE": "Inactive",
+ "POPOVER": "Added inboxes",
+ "EDIT": "Edit"
+ },
+ "NO_RECORDS_FOUND": "No assignment policies found"
+ },
+ "CREATE": {
+ "HEADER": {
+ "TITLE": "Create assignment policy"
+ },
+ "CREATE_BUTTON": "Create policy",
+ "API": {
+ "SUCCESS_MESSAGE": "Assignment policy created successfully",
+ "ERROR_MESSAGE": "Failed to create assignment policy"
+ }
+ },
+ "EDIT": {
+ "HEADER": {
+ "TITLE": "Edit assignment policy"
+ },
+ "EDIT_BUTTON": "Update policy",
+ "CONFIRM_ADD_INBOX_DIALOG": {
+ "TITLE": "Add inbox",
+ "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.",
+ "CONFIRM_BUTTON_LABEL": "Continue",
+ "CANCEL_BUTTON_LABEL": "Cancel"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Assignment policy updated successfully",
+ "ERROR_MESSAGE": "Failed to update assignment policy"
+ },
+ "INBOX_API": {
+ "ADD": {
+ "SUCCESS_MESSAGE": "Inbox added to policy successfully",
+ "ERROR_MESSAGE": "Failed to add inbox to policy"
+ },
+ "REMOVE": {
+ "SUCCESS_MESSAGE": "Inbox removed from policy successfully",
+ "ERROR_MESSAGE": "Failed to remove inbox from policy"
+ }
+ }
+ },
+ "FORM": {
+ "NAME": {
+ "LABEL": "Policy name:",
+ "PLACEHOLDER": "Enter policy name"
+ },
+ "DESCRIPTION": {
+ "LABEL": "Description:",
+ "PLACEHOLDER": "Enter description"
+ },
+ "STATUS": {
+ "LABEL": "Status:",
+ "PLACEHOLDER": "Select status",
+ "ACTIVE": "Policy is active",
+ "INACTIVE": "Policy is inactive"
+ },
+ "ASSIGNMENT_ORDER": {
+ "LABEL": "Assignment order",
+ "ROUND_ROBIN": {
+ "LABEL": "Round robin",
+ "DESCRIPTION": "Assign conversations evenly among agents."
+ },
+ "BALANCED": {
+ "LABEL": "Balanced",
+ "DESCRIPTION": "Assign conversations based on available capacity."
+ }
+ },
+ "ASSIGNMENT_PRIORITY": {
+ "LABEL": "Assignment priority",
+ "EARLIEST_CREATED": {
+ "LABEL": "Earliest created",
+ "DESCRIPTION": "The conversation that was created first gets assigned first."
+ },
+ "LONGEST_WAITING": {
+ "LABEL": "Longest waiting",
+ "DESCRIPTION": "The conversation waiting the longest gets assigned first."
+ }
+ },
+ "FAIR_DISTRIBUTION": {
+ "LABEL": "Fair distribution policy",
+ "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.",
+ "INPUT_MAX": "Assign max",
+ "DURATION": "Conversations per agent in every"
+ },
+ "INBOXES": {
+ "LABEL": "Added inboxes",
+ "DESCRIPTION": "Add inboxes for which this policy will be applicable.",
+ "ADD_BUTTON": "Add inbox",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select inboxes to add",
+ "ADD_BUTTON": "Add"
+ },
+ "EMPTY_STATE": "No inboxes added to this policy, add an inbox to get started",
+ "API": {
+ "SUCCESS_MESSAGE": "Inbox successfully added to policy",
+ "ERROR_MESSAGE": "Failed to add inbox to policy"
+ }
+ }
+ },
+ "DELETE_POLICY": {
+ "SUCCESS_MESSAGE": "Assignment policy deleted successfully",
+ "ERROR_MESSAGE": "Failed to delete assignment policy"
+ }
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent capacity",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "POPOVER": "Added agents",
+ "EDIT": "Edit"
+ },
+ "NO_RECORDS_FOUND": "No agent capacity policies found"
+ },
+ "CREATE": {
+ "HEADER": {
+ "TITLE": "Create agent capacity policy"
+ },
+ "CREATE_BUTTON": "Create policy",
+ "API": {
+ "SUCCESS_MESSAGE": "Agent capacity policy created successfully",
+ "ERROR_MESSAGE": "Failed to create agent capacity policy"
+ }
+ },
+ "EDIT": {
+ "HEADER": {
+ "TITLE": "Edit agent capacity policy"
+ },
+ "EDIT_BUTTON": "Update policy",
+ "CONFIRM_ADD_AGENT_DIALOG": {
+ "TITLE": "Add agent",
+ "DESCRIPTION": "{agentName} is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.",
+ "CONFIRM_BUTTON_LABEL": "Continue",
+ "CANCEL_BUTTON_LABEL": "Cancel"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Agent capacity policy updated successfully",
+ "ERROR_MESSAGE": "Failed to update agent capacity policy"
+ },
+ "AGENT_API": {
+ "ADD": {
+ "SUCCESS_MESSAGE": "Agent added to policy successfully",
+ "ERROR_MESSAGE": "Failed to add agent to policy"
+ },
+ "REMOVE": {
+ "SUCCESS_MESSAGE": "Agent removed from policy successfully",
+ "ERROR_MESSAGE": "Failed to remove agent from policy"
+ }
+ }
+ },
+ "FORM": {
+ "NAME": {
+ "LABEL": "Policy name:",
+ "PLACEHOLDER": "Enter policy name"
+ },
+ "DESCRIPTION": {
+ "LABEL": "Description:",
+ "PLACEHOLDER": "Enter description"
+ },
+ "INBOX_CAPACITY_LIMIT": {
+ "LABEL": "Inbox capacity limits",
+ "ADD_BUTTON": "Add inbox",
+ "FIELD": {
+ "SELECT_INBOX": "Select inbox",
+ "MAX_CONVERSATIONS": "Max conversations",
+ "SET_LIMIT": "Set limit"
+ },
+ "EMPTY_STATE": "No inbox limit set"
+ },
+ "EXCLUSION_RULES": {
+ "LABEL": "Exclusion rules",
+ "DESCRIPTION": "Conversations that satisfy the following conditions would not count towards agent capacity",
+ "TAGS": {
+ "LABEL": "Exclude conversations tagged with specific labels",
+ "ADD_TAG": "add tag",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select tags to add"
+ },
+ "EMPTY_STATE": "No tags added to this policy."
+ },
+ "DURATION": {
+ "LABEL": "Exclude conversations older than a specified duration",
+ "PLACEHOLDER": "Set time"
+ }
+ },
+ "USERS": {
+ "LABEL": "Assigned agents",
+ "DESCRIPTION": "Add agents for which this policy will be applicable.",
+ "ADD_BUTTON": "Add agent",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select agents to add",
+ "ADD_BUTTON": "Add"
+ },
+ "EMPTY_STATE": "No agents added",
+ "API": {
+ "SUCCESS_MESSAGE": "Agent successfully added to policy",
+ "ERROR_MESSAGE": "Failed to add agent to policy"
+ }
+ }
+ },
+ "DELETE_POLICY": {
+ "SUCCESS_MESSAGE": "Agent capacity policy deleted successfully",
+ "ERROR_MESSAGE": "Failed to delete agent capacity policy"
+ }
+ },
+ "DELETE_POLICY": {
+ "TITLE": "Delete policy",
+ "DESCRIPTION": "Are you sure you want to delete this policy? This action cannot be undone.",
+ "CONFIRM_BUTTON_LABEL": "Delete",
+ "CANCEL_BUTTON_LABEL": "Cancel"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/ar/conversation.json b/app/javascript/dashboard/i18n/locale/ar/conversation.json
index 5271e58d0..a66530232 100644
--- a/app/javascript/dashboard/i18n/locale/ar/conversation.json
+++ b/app/javascript/dashboard/i18n/locale/ar/conversation.json
@@ -71,6 +71,17 @@
"SHOW_LABELS": "إظهار السمات",
"HIDE_LABELS": "إخفاء السمات"
},
+ "VOICE_CALL": {
+ "INCOMING_CALL": "Incoming call",
+ "OUTGOING_CALL": "Outgoing call",
+ "CALL_IN_PROGRESS": "Call in progress",
+ "NO_ANSWER": "No answer",
+ "MISSED_CALL": "Missed call",
+ "CALL_ENDED": "Call ended",
+ "NOT_ANSWERED_YET": "Not answered yet",
+ "THEY_ANSWERED": "They answered",
+ "YOU_ANSWERED": "You answered"
+ },
"HEADER": {
"RESOLVE_ACTION": "حل المحادثة",
"REOPEN_ACTION": "إعادة فتح",
diff --git a/app/javascript/dashboard/i18n/locale/ar/settings.json b/app/javascript/dashboard/i18n/locale/ar/settings.json
index f0990ffe6..779dcb8ee 100644
--- a/app/javascript/dashboard/i18n/locale/ar/settings.json
+++ b/app/javascript/dashboard/i18n/locale/ar/settings.json
@@ -51,6 +51,13 @@
"LARGER": "Larger",
"EXTRA_LARGE": "Extra Large"
}
+ },
+ "LANGUAGE": {
+ "TITLE": "Preferred Language",
+ "NOTE": "Choose the language you want to use.",
+ "UPDATE_SUCCESS": "Your Language settings have been updated successfully",
+ "UPDATE_ERROR": "There is an error while updating the language settings, please try again",
+ "USE_ACCOUNT_DEFAULT": "Use account default"
}
},
"MESSAGE_SIGNATURE_SECTION": {
@@ -330,6 +337,7 @@
"REPORTS_LABEL": "الوسوم",
"REPORTS_INBOX": "صندوق الوارد",
"REPORTS_TEAM": "الفريق",
+ "AGENT_ASSIGNMENT": "Agent Assignment",
"SET_AVAILABILITY_TITLE": "تعيين نفسك كـ",
"SET_YOUR_AVAILABILITY": "قم بتعيين توافرك",
"SLA": "SLA",
@@ -418,5 +426,255 @@
"SWITCH_TO_REPLY": "التبديل إلى الرد",
"TOGGLE_SNOOZE_DROPDOWN": "تبديل القائمة المنسدلة"
}
+ },
+ "ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent assignment",
+ "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here"
+ },
+ "ASSIGNMENT_POLICY": {
+ "TITLE": "Assignment policy",
+ "DESCRIPTION": "Manage how conversations get assigned in inboxes.",
+ "FEATURES": [
+ "Assign by conversations evenly or by available capacity",
+ "Add fair distribution rules to avoid overloading any agent",
+ "Add inboxes to a policy - one policy per inbox"
+ ]
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "TITLE": "Agent capacity policy",
+ "DESCRIPTION": "Manage workload for agents.",
+ "FEATURES": [
+ "Define maximum conversations per inbox",
+ "Create exceptions based on labels and time",
+ "Add agents to a policy - one policy per agent"
+ ]
+ }
+ },
+ "AGENT_ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Assignment policy",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "ORDER": "Order",
+ "PRIORITY": "الأولوية",
+ "ACTIVE": "مفعل",
+ "INACTIVE": "Inactive",
+ "POPOVER": "Added inboxes",
+ "EDIT": "تعديل"
+ },
+ "NO_RECORDS_FOUND": "No assignment policies found"
+ },
+ "CREATE": {
+ "HEADER": {
+ "TITLE": "Create assignment policy"
+ },
+ "CREATE_BUTTON": "Create policy",
+ "API": {
+ "SUCCESS_MESSAGE": "Assignment policy created successfully",
+ "ERROR_MESSAGE": "Failed to create assignment policy"
+ }
+ },
+ "EDIT": {
+ "HEADER": {
+ "TITLE": "Edit assignment policy"
+ },
+ "EDIT_BUTTON": "Update policy",
+ "CONFIRM_ADD_INBOX_DIALOG": {
+ "TITLE": "Add inbox",
+ "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.",
+ "CONFIRM_BUTTON_LABEL": "Continue",
+ "CANCEL_BUTTON_LABEL": "إلغاء"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Assignment policy updated successfully",
+ "ERROR_MESSAGE": "Failed to update assignment policy"
+ },
+ "INBOX_API": {
+ "ADD": {
+ "SUCCESS_MESSAGE": "Inbox added to policy successfully",
+ "ERROR_MESSAGE": "Failed to add inbox to policy"
+ },
+ "REMOVE": {
+ "SUCCESS_MESSAGE": "Inbox removed from policy successfully",
+ "ERROR_MESSAGE": "Failed to remove inbox from policy"
+ }
+ }
+ },
+ "FORM": {
+ "NAME": {
+ "LABEL": "Policy name:",
+ "PLACEHOLDER": "Enter policy name"
+ },
+ "DESCRIPTION": {
+ "LABEL": "الوصف:",
+ "PLACEHOLDER": "أدخل الوصف"
+ },
+ "STATUS": {
+ "LABEL": "الحالة:",
+ "PLACEHOLDER": "اختر الحالة",
+ "ACTIVE": "Policy is active",
+ "INACTIVE": "Policy is inactive"
+ },
+ "ASSIGNMENT_ORDER": {
+ "LABEL": "Assignment order",
+ "ROUND_ROBIN": {
+ "LABEL": "Round robin",
+ "DESCRIPTION": "Assign conversations evenly among agents."
+ },
+ "BALANCED": {
+ "LABEL": "Balanced",
+ "DESCRIPTION": "Assign conversations based on available capacity."
+ }
+ },
+ "ASSIGNMENT_PRIORITY": {
+ "LABEL": "Assignment priority",
+ "EARLIEST_CREATED": {
+ "LABEL": "Earliest created",
+ "DESCRIPTION": "The conversation that was created first gets assigned first."
+ },
+ "LONGEST_WAITING": {
+ "LABEL": "Longest waiting",
+ "DESCRIPTION": "The conversation waiting the longest gets assigned first."
+ }
+ },
+ "FAIR_DISTRIBUTION": {
+ "LABEL": "Fair distribution policy",
+ "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.",
+ "INPUT_MAX": "Assign max",
+ "DURATION": "Conversations per agent in every"
+ },
+ "INBOXES": {
+ "LABEL": "Added inboxes",
+ "DESCRIPTION": "Add inboxes for which this policy will be applicable.",
+ "ADD_BUTTON": "Add inbox",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select inboxes to add",
+ "ADD_BUTTON": "إضافة"
+ },
+ "EMPTY_STATE": "No inboxes added to this policy, add an inbox to get started",
+ "API": {
+ "SUCCESS_MESSAGE": "Inbox successfully added to policy",
+ "ERROR_MESSAGE": "Failed to add inbox to policy"
+ }
+ }
+ },
+ "DELETE_POLICY": {
+ "SUCCESS_MESSAGE": "Assignment policy deleted successfully",
+ "ERROR_MESSAGE": "Failed to delete assignment policy"
+ }
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent capacity",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "POPOVER": "Added agents",
+ "EDIT": "تعديل"
+ },
+ "NO_RECORDS_FOUND": "No agent capacity policies found"
+ },
+ "CREATE": {
+ "HEADER": {
+ "TITLE": "Create agent capacity policy"
+ },
+ "CREATE_BUTTON": "Create policy",
+ "API": {
+ "SUCCESS_MESSAGE": "Agent capacity policy created successfully",
+ "ERROR_MESSAGE": "Failed to create agent capacity policy"
+ }
+ },
+ "EDIT": {
+ "HEADER": {
+ "TITLE": "Edit agent capacity policy"
+ },
+ "EDIT_BUTTON": "Update policy",
+ "CONFIRM_ADD_AGENT_DIALOG": {
+ "TITLE": "Add agent",
+ "DESCRIPTION": "{agentName} is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.",
+ "CONFIRM_BUTTON_LABEL": "Continue",
+ "CANCEL_BUTTON_LABEL": "إلغاء"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Agent capacity policy updated successfully",
+ "ERROR_MESSAGE": "Failed to update agent capacity policy"
+ },
+ "AGENT_API": {
+ "ADD": {
+ "SUCCESS_MESSAGE": "Agent added to policy successfully",
+ "ERROR_MESSAGE": "Failed to add agent to policy"
+ },
+ "REMOVE": {
+ "SUCCESS_MESSAGE": "Agent removed from policy successfully",
+ "ERROR_MESSAGE": "Failed to remove agent from policy"
+ }
+ }
+ },
+ "FORM": {
+ "NAME": {
+ "LABEL": "Policy name:",
+ "PLACEHOLDER": "Enter policy name"
+ },
+ "DESCRIPTION": {
+ "LABEL": "الوصف:",
+ "PLACEHOLDER": "أدخل الوصف"
+ },
+ "INBOX_CAPACITY_LIMIT": {
+ "LABEL": "Inbox capacity limits",
+ "ADD_BUTTON": "Add inbox",
+ "FIELD": {
+ "SELECT_INBOX": "Select inbox",
+ "MAX_CONVERSATIONS": "Max conversations",
+ "SET_LIMIT": "Set limit"
+ },
+ "EMPTY_STATE": "No inbox limit set"
+ },
+ "EXCLUSION_RULES": {
+ "LABEL": "Exclusion rules",
+ "DESCRIPTION": "Conversations that satisfy the following conditions would not count towards agent capacity",
+ "TAGS": {
+ "LABEL": "Exclude conversations tagged with specific labels",
+ "ADD_TAG": "add tag",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select tags to add"
+ },
+ "EMPTY_STATE": "No tags added to this policy."
+ },
+ "DURATION": {
+ "LABEL": "Exclude conversations older than a specified duration",
+ "PLACEHOLDER": "Set time"
+ }
+ },
+ "USERS": {
+ "LABEL": "Assigned agents",
+ "DESCRIPTION": "Add agents for which this policy will be applicable.",
+ "ADD_BUTTON": "Add agent",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select agents to add",
+ "ADD_BUTTON": "إضافة"
+ },
+ "EMPTY_STATE": "No agents added",
+ "API": {
+ "SUCCESS_MESSAGE": "Agent successfully added to policy",
+ "ERROR_MESSAGE": "Failed to add agent to policy"
+ }
+ }
+ },
+ "DELETE_POLICY": {
+ "SUCCESS_MESSAGE": "Agent capacity policy deleted successfully",
+ "ERROR_MESSAGE": "Failed to delete agent capacity policy"
+ }
+ },
+ "DELETE_POLICY": {
+ "TITLE": "Delete policy",
+ "DESCRIPTION": "Are you sure you want to delete this policy? This action cannot be undone.",
+ "CONFIRM_BUTTON_LABEL": "حذف",
+ "CANCEL_BUTTON_LABEL": "إلغاء"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/az/conversation.json b/app/javascript/dashboard/i18n/locale/az/conversation.json
index 93f375e7f..9fd39b70f 100644
--- a/app/javascript/dashboard/i18n/locale/az/conversation.json
+++ b/app/javascript/dashboard/i18n/locale/az/conversation.json
@@ -71,6 +71,17 @@
"SHOW_LABELS": "Show labels",
"HIDE_LABELS": "Hide labels"
},
+ "VOICE_CALL": {
+ "INCOMING_CALL": "Incoming call",
+ "OUTGOING_CALL": "Outgoing call",
+ "CALL_IN_PROGRESS": "Call in progress",
+ "NO_ANSWER": "No answer",
+ "MISSED_CALL": "Missed call",
+ "CALL_ENDED": "Call ended",
+ "NOT_ANSWERED_YET": "Not answered yet",
+ "THEY_ANSWERED": "They answered",
+ "YOU_ANSWERED": "You answered"
+ },
"HEADER": {
"RESOLVE_ACTION": "Resolve",
"REOPEN_ACTION": "Reopen",
diff --git a/app/javascript/dashboard/i18n/locale/az/settings.json b/app/javascript/dashboard/i18n/locale/az/settings.json
index d547538db..c95eada84 100644
--- a/app/javascript/dashboard/i18n/locale/az/settings.json
+++ b/app/javascript/dashboard/i18n/locale/az/settings.json
@@ -51,6 +51,13 @@
"LARGER": "Larger",
"EXTRA_LARGE": "Extra Large"
}
+ },
+ "LANGUAGE": {
+ "TITLE": "Preferred Language",
+ "NOTE": "Choose the language you want to use.",
+ "UPDATE_SUCCESS": "Your Language settings have been updated successfully",
+ "UPDATE_ERROR": "There is an error while updating the language settings, please try again",
+ "USE_ACCOUNT_DEFAULT": "Use account default"
}
},
"MESSAGE_SIGNATURE_SECTION": {
@@ -330,6 +337,7 @@
"REPORTS_LABEL": "Labels",
"REPORTS_INBOX": "Inbox",
"REPORTS_TEAM": "Team",
+ "AGENT_ASSIGNMENT": "Agent Assignment",
"SET_AVAILABILITY_TITLE": "Set yourself as",
"SET_YOUR_AVAILABILITY": "Set your availability",
"SLA": "SLA",
@@ -418,5 +426,255 @@
"SWITCH_TO_REPLY": "Switch to Reply",
"TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown"
}
+ },
+ "ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent assignment",
+ "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here"
+ },
+ "ASSIGNMENT_POLICY": {
+ "TITLE": "Assignment policy",
+ "DESCRIPTION": "Manage how conversations get assigned in inboxes.",
+ "FEATURES": [
+ "Assign by conversations evenly or by available capacity",
+ "Add fair distribution rules to avoid overloading any agent",
+ "Add inboxes to a policy - one policy per inbox"
+ ]
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "TITLE": "Agent capacity policy",
+ "DESCRIPTION": "Manage workload for agents.",
+ "FEATURES": [
+ "Define maximum conversations per inbox",
+ "Create exceptions based on labels and time",
+ "Add agents to a policy - one policy per agent"
+ ]
+ }
+ },
+ "AGENT_ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Assignment policy",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "ORDER": "Order",
+ "PRIORITY": "Priority",
+ "ACTIVE": "Active",
+ "INACTIVE": "Inactive",
+ "POPOVER": "Added inboxes",
+ "EDIT": "Edit"
+ },
+ "NO_RECORDS_FOUND": "No assignment policies found"
+ },
+ "CREATE": {
+ "HEADER": {
+ "TITLE": "Create assignment policy"
+ },
+ "CREATE_BUTTON": "Create policy",
+ "API": {
+ "SUCCESS_MESSAGE": "Assignment policy created successfully",
+ "ERROR_MESSAGE": "Failed to create assignment policy"
+ }
+ },
+ "EDIT": {
+ "HEADER": {
+ "TITLE": "Edit assignment policy"
+ },
+ "EDIT_BUTTON": "Update policy",
+ "CONFIRM_ADD_INBOX_DIALOG": {
+ "TITLE": "Add inbox",
+ "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.",
+ "CONFIRM_BUTTON_LABEL": "Continue",
+ "CANCEL_BUTTON_LABEL": "Cancel"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Assignment policy updated successfully",
+ "ERROR_MESSAGE": "Failed to update assignment policy"
+ },
+ "INBOX_API": {
+ "ADD": {
+ "SUCCESS_MESSAGE": "Inbox added to policy successfully",
+ "ERROR_MESSAGE": "Failed to add inbox to policy"
+ },
+ "REMOVE": {
+ "SUCCESS_MESSAGE": "Inbox removed from policy successfully",
+ "ERROR_MESSAGE": "Failed to remove inbox from policy"
+ }
+ }
+ },
+ "FORM": {
+ "NAME": {
+ "LABEL": "Policy name:",
+ "PLACEHOLDER": "Enter policy name"
+ },
+ "DESCRIPTION": {
+ "LABEL": "Description:",
+ "PLACEHOLDER": "Enter description"
+ },
+ "STATUS": {
+ "LABEL": "Status:",
+ "PLACEHOLDER": "Select status",
+ "ACTIVE": "Policy is active",
+ "INACTIVE": "Policy is inactive"
+ },
+ "ASSIGNMENT_ORDER": {
+ "LABEL": "Assignment order",
+ "ROUND_ROBIN": {
+ "LABEL": "Round robin",
+ "DESCRIPTION": "Assign conversations evenly among agents."
+ },
+ "BALANCED": {
+ "LABEL": "Balanced",
+ "DESCRIPTION": "Assign conversations based on available capacity."
+ }
+ },
+ "ASSIGNMENT_PRIORITY": {
+ "LABEL": "Assignment priority",
+ "EARLIEST_CREATED": {
+ "LABEL": "Earliest created",
+ "DESCRIPTION": "The conversation that was created first gets assigned first."
+ },
+ "LONGEST_WAITING": {
+ "LABEL": "Longest waiting",
+ "DESCRIPTION": "The conversation waiting the longest gets assigned first."
+ }
+ },
+ "FAIR_DISTRIBUTION": {
+ "LABEL": "Fair distribution policy",
+ "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.",
+ "INPUT_MAX": "Assign max",
+ "DURATION": "Conversations per agent in every"
+ },
+ "INBOXES": {
+ "LABEL": "Added inboxes",
+ "DESCRIPTION": "Add inboxes for which this policy will be applicable.",
+ "ADD_BUTTON": "Add inbox",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select inboxes to add",
+ "ADD_BUTTON": "Add"
+ },
+ "EMPTY_STATE": "No inboxes added to this policy, add an inbox to get started",
+ "API": {
+ "SUCCESS_MESSAGE": "Inbox successfully added to policy",
+ "ERROR_MESSAGE": "Failed to add inbox to policy"
+ }
+ }
+ },
+ "DELETE_POLICY": {
+ "SUCCESS_MESSAGE": "Assignment policy deleted successfully",
+ "ERROR_MESSAGE": "Failed to delete assignment policy"
+ }
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent capacity",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "POPOVER": "Added agents",
+ "EDIT": "Edit"
+ },
+ "NO_RECORDS_FOUND": "No agent capacity policies found"
+ },
+ "CREATE": {
+ "HEADER": {
+ "TITLE": "Create agent capacity policy"
+ },
+ "CREATE_BUTTON": "Create policy",
+ "API": {
+ "SUCCESS_MESSAGE": "Agent capacity policy created successfully",
+ "ERROR_MESSAGE": "Failed to create agent capacity policy"
+ }
+ },
+ "EDIT": {
+ "HEADER": {
+ "TITLE": "Edit agent capacity policy"
+ },
+ "EDIT_BUTTON": "Update policy",
+ "CONFIRM_ADD_AGENT_DIALOG": {
+ "TITLE": "Add agent",
+ "DESCRIPTION": "{agentName} is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.",
+ "CONFIRM_BUTTON_LABEL": "Continue",
+ "CANCEL_BUTTON_LABEL": "Cancel"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Agent capacity policy updated successfully",
+ "ERROR_MESSAGE": "Failed to update agent capacity policy"
+ },
+ "AGENT_API": {
+ "ADD": {
+ "SUCCESS_MESSAGE": "Agent added to policy successfully",
+ "ERROR_MESSAGE": "Failed to add agent to policy"
+ },
+ "REMOVE": {
+ "SUCCESS_MESSAGE": "Agent removed from policy successfully",
+ "ERROR_MESSAGE": "Failed to remove agent from policy"
+ }
+ }
+ },
+ "FORM": {
+ "NAME": {
+ "LABEL": "Policy name:",
+ "PLACEHOLDER": "Enter policy name"
+ },
+ "DESCRIPTION": {
+ "LABEL": "Description:",
+ "PLACEHOLDER": "Enter description"
+ },
+ "INBOX_CAPACITY_LIMIT": {
+ "LABEL": "Inbox capacity limits",
+ "ADD_BUTTON": "Add inbox",
+ "FIELD": {
+ "SELECT_INBOX": "Select inbox",
+ "MAX_CONVERSATIONS": "Max conversations",
+ "SET_LIMIT": "Set limit"
+ },
+ "EMPTY_STATE": "No inbox limit set"
+ },
+ "EXCLUSION_RULES": {
+ "LABEL": "Exclusion rules",
+ "DESCRIPTION": "Conversations that satisfy the following conditions would not count towards agent capacity",
+ "TAGS": {
+ "LABEL": "Exclude conversations tagged with specific labels",
+ "ADD_TAG": "add tag",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select tags to add"
+ },
+ "EMPTY_STATE": "No tags added to this policy."
+ },
+ "DURATION": {
+ "LABEL": "Exclude conversations older than a specified duration",
+ "PLACEHOLDER": "Set time"
+ }
+ },
+ "USERS": {
+ "LABEL": "Assigned agents",
+ "DESCRIPTION": "Add agents for which this policy will be applicable.",
+ "ADD_BUTTON": "Add agent",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select agents to add",
+ "ADD_BUTTON": "Add"
+ },
+ "EMPTY_STATE": "No agents added",
+ "API": {
+ "SUCCESS_MESSAGE": "Agent successfully added to policy",
+ "ERROR_MESSAGE": "Failed to add agent to policy"
+ }
+ }
+ },
+ "DELETE_POLICY": {
+ "SUCCESS_MESSAGE": "Agent capacity policy deleted successfully",
+ "ERROR_MESSAGE": "Failed to delete agent capacity policy"
+ }
+ },
+ "DELETE_POLICY": {
+ "TITLE": "Delete policy",
+ "DESCRIPTION": "Are you sure you want to delete this policy? This action cannot be undone.",
+ "CONFIRM_BUTTON_LABEL": "Delete",
+ "CANCEL_BUTTON_LABEL": "Cancel"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/bg/conversation.json b/app/javascript/dashboard/i18n/locale/bg/conversation.json
index 5f18c37f3..b8d15ad41 100644
--- a/app/javascript/dashboard/i18n/locale/bg/conversation.json
+++ b/app/javascript/dashboard/i18n/locale/bg/conversation.json
@@ -71,6 +71,17 @@
"SHOW_LABELS": "Show labels",
"HIDE_LABELS": "Hide labels"
},
+ "VOICE_CALL": {
+ "INCOMING_CALL": "Incoming call",
+ "OUTGOING_CALL": "Outgoing call",
+ "CALL_IN_PROGRESS": "Call in progress",
+ "NO_ANSWER": "No answer",
+ "MISSED_CALL": "Missed call",
+ "CALL_ENDED": "Call ended",
+ "NOT_ANSWERED_YET": "Not answered yet",
+ "THEY_ANSWERED": "They answered",
+ "YOU_ANSWERED": "You answered"
+ },
"HEADER": {
"RESOLVE_ACTION": "Resolve",
"REOPEN_ACTION": "Reopen",
diff --git a/app/javascript/dashboard/i18n/locale/bg/settings.json b/app/javascript/dashboard/i18n/locale/bg/settings.json
index 1d0eae470..71195eab8 100644
--- a/app/javascript/dashboard/i18n/locale/bg/settings.json
+++ b/app/javascript/dashboard/i18n/locale/bg/settings.json
@@ -51,6 +51,13 @@
"LARGER": "Larger",
"EXTRA_LARGE": "Extra Large"
}
+ },
+ "LANGUAGE": {
+ "TITLE": "Preferred Language",
+ "NOTE": "Choose the language you want to use.",
+ "UPDATE_SUCCESS": "Your Language settings have been updated successfully",
+ "UPDATE_ERROR": "There is an error while updating the language settings, please try again",
+ "USE_ACCOUNT_DEFAULT": "Use account default"
}
},
"MESSAGE_SIGNATURE_SECTION": {
@@ -330,6 +337,7 @@
"REPORTS_LABEL": "Labels",
"REPORTS_INBOX": "Входяща кутия",
"REPORTS_TEAM": "Team",
+ "AGENT_ASSIGNMENT": "Agent Assignment",
"SET_AVAILABILITY_TITLE": "Set yourself as",
"SET_YOUR_AVAILABILITY": "Set your availability",
"SLA": "SLA",
@@ -418,5 +426,255 @@
"SWITCH_TO_REPLY": "Switch to Reply",
"TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown"
}
+ },
+ "ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent assignment",
+ "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here"
+ },
+ "ASSIGNMENT_POLICY": {
+ "TITLE": "Assignment policy",
+ "DESCRIPTION": "Manage how conversations get assigned in inboxes.",
+ "FEATURES": [
+ "Assign by conversations evenly or by available capacity",
+ "Add fair distribution rules to avoid overloading any agent",
+ "Add inboxes to a policy - one policy per inbox"
+ ]
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "TITLE": "Agent capacity policy",
+ "DESCRIPTION": "Manage workload for agents.",
+ "FEATURES": [
+ "Define maximum conversations per inbox",
+ "Create exceptions based on labels and time",
+ "Add agents to a policy - one policy per agent"
+ ]
+ }
+ },
+ "AGENT_ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Assignment policy",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "ORDER": "Order",
+ "PRIORITY": "Priority",
+ "ACTIVE": "Активен",
+ "INACTIVE": "Inactive",
+ "POPOVER": "Added inboxes",
+ "EDIT": "Редактирай"
+ },
+ "NO_RECORDS_FOUND": "No assignment policies found"
+ },
+ "CREATE": {
+ "HEADER": {
+ "TITLE": "Create assignment policy"
+ },
+ "CREATE_BUTTON": "Create policy",
+ "API": {
+ "SUCCESS_MESSAGE": "Assignment policy created successfully",
+ "ERROR_MESSAGE": "Failed to create assignment policy"
+ }
+ },
+ "EDIT": {
+ "HEADER": {
+ "TITLE": "Edit assignment policy"
+ },
+ "EDIT_BUTTON": "Update policy",
+ "CONFIRM_ADD_INBOX_DIALOG": {
+ "TITLE": "Add inbox",
+ "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.",
+ "CONFIRM_BUTTON_LABEL": "Continue",
+ "CANCEL_BUTTON_LABEL": "Отмени"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Assignment policy updated successfully",
+ "ERROR_MESSAGE": "Failed to update assignment policy"
+ },
+ "INBOX_API": {
+ "ADD": {
+ "SUCCESS_MESSAGE": "Inbox added to policy successfully",
+ "ERROR_MESSAGE": "Failed to add inbox to policy"
+ },
+ "REMOVE": {
+ "SUCCESS_MESSAGE": "Inbox removed from policy successfully",
+ "ERROR_MESSAGE": "Failed to remove inbox from policy"
+ }
+ }
+ },
+ "FORM": {
+ "NAME": {
+ "LABEL": "Policy name:",
+ "PLACEHOLDER": "Enter policy name"
+ },
+ "DESCRIPTION": {
+ "LABEL": "Описание:",
+ "PLACEHOLDER": "Enter description"
+ },
+ "STATUS": {
+ "LABEL": "Статус:",
+ "PLACEHOLDER": "Select status",
+ "ACTIVE": "Policy is active",
+ "INACTIVE": "Policy is inactive"
+ },
+ "ASSIGNMENT_ORDER": {
+ "LABEL": "Assignment order",
+ "ROUND_ROBIN": {
+ "LABEL": "Round robin",
+ "DESCRIPTION": "Assign conversations evenly among agents."
+ },
+ "BALANCED": {
+ "LABEL": "Balanced",
+ "DESCRIPTION": "Assign conversations based on available capacity."
+ }
+ },
+ "ASSIGNMENT_PRIORITY": {
+ "LABEL": "Assignment priority",
+ "EARLIEST_CREATED": {
+ "LABEL": "Earliest created",
+ "DESCRIPTION": "The conversation that was created first gets assigned first."
+ },
+ "LONGEST_WAITING": {
+ "LABEL": "Longest waiting",
+ "DESCRIPTION": "The conversation waiting the longest gets assigned first."
+ }
+ },
+ "FAIR_DISTRIBUTION": {
+ "LABEL": "Fair distribution policy",
+ "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.",
+ "INPUT_MAX": "Assign max",
+ "DURATION": "Conversations per agent in every"
+ },
+ "INBOXES": {
+ "LABEL": "Added inboxes",
+ "DESCRIPTION": "Add inboxes for which this policy will be applicable.",
+ "ADD_BUTTON": "Add inbox",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select inboxes to add",
+ "ADD_BUTTON": "Добавяне"
+ },
+ "EMPTY_STATE": "No inboxes added to this policy, add an inbox to get started",
+ "API": {
+ "SUCCESS_MESSAGE": "Inbox successfully added to policy",
+ "ERROR_MESSAGE": "Failed to add inbox to policy"
+ }
+ }
+ },
+ "DELETE_POLICY": {
+ "SUCCESS_MESSAGE": "Assignment policy deleted successfully",
+ "ERROR_MESSAGE": "Failed to delete assignment policy"
+ }
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent capacity",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "POPOVER": "Added agents",
+ "EDIT": "Редактирай"
+ },
+ "NO_RECORDS_FOUND": "No agent capacity policies found"
+ },
+ "CREATE": {
+ "HEADER": {
+ "TITLE": "Create agent capacity policy"
+ },
+ "CREATE_BUTTON": "Create policy",
+ "API": {
+ "SUCCESS_MESSAGE": "Agent capacity policy created successfully",
+ "ERROR_MESSAGE": "Failed to create agent capacity policy"
+ }
+ },
+ "EDIT": {
+ "HEADER": {
+ "TITLE": "Edit agent capacity policy"
+ },
+ "EDIT_BUTTON": "Update policy",
+ "CONFIRM_ADD_AGENT_DIALOG": {
+ "TITLE": "Add agent",
+ "DESCRIPTION": "{agentName} is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.",
+ "CONFIRM_BUTTON_LABEL": "Continue",
+ "CANCEL_BUTTON_LABEL": "Отмени"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Agent capacity policy updated successfully",
+ "ERROR_MESSAGE": "Failed to update agent capacity policy"
+ },
+ "AGENT_API": {
+ "ADD": {
+ "SUCCESS_MESSAGE": "Agent added to policy successfully",
+ "ERROR_MESSAGE": "Failed to add agent to policy"
+ },
+ "REMOVE": {
+ "SUCCESS_MESSAGE": "Agent removed from policy successfully",
+ "ERROR_MESSAGE": "Failed to remove agent from policy"
+ }
+ }
+ },
+ "FORM": {
+ "NAME": {
+ "LABEL": "Policy name:",
+ "PLACEHOLDER": "Enter policy name"
+ },
+ "DESCRIPTION": {
+ "LABEL": "Описание:",
+ "PLACEHOLDER": "Enter description"
+ },
+ "INBOX_CAPACITY_LIMIT": {
+ "LABEL": "Inbox capacity limits",
+ "ADD_BUTTON": "Add inbox",
+ "FIELD": {
+ "SELECT_INBOX": "Select inbox",
+ "MAX_CONVERSATIONS": "Max conversations",
+ "SET_LIMIT": "Set limit"
+ },
+ "EMPTY_STATE": "No inbox limit set"
+ },
+ "EXCLUSION_RULES": {
+ "LABEL": "Exclusion rules",
+ "DESCRIPTION": "Conversations that satisfy the following conditions would not count towards agent capacity",
+ "TAGS": {
+ "LABEL": "Exclude conversations tagged with specific labels",
+ "ADD_TAG": "add tag",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select tags to add"
+ },
+ "EMPTY_STATE": "No tags added to this policy."
+ },
+ "DURATION": {
+ "LABEL": "Exclude conversations older than a specified duration",
+ "PLACEHOLDER": "Set time"
+ }
+ },
+ "USERS": {
+ "LABEL": "Assigned agents",
+ "DESCRIPTION": "Add agents for which this policy will be applicable.",
+ "ADD_BUTTON": "Add agent",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select agents to add",
+ "ADD_BUTTON": "Добавяне"
+ },
+ "EMPTY_STATE": "No agents added",
+ "API": {
+ "SUCCESS_MESSAGE": "Agent successfully added to policy",
+ "ERROR_MESSAGE": "Failed to add agent to policy"
+ }
+ }
+ },
+ "DELETE_POLICY": {
+ "SUCCESS_MESSAGE": "Agent capacity policy deleted successfully",
+ "ERROR_MESSAGE": "Failed to delete agent capacity policy"
+ }
+ },
+ "DELETE_POLICY": {
+ "TITLE": "Delete policy",
+ "DESCRIPTION": "Are you sure you want to delete this policy? This action cannot be undone.",
+ "CONFIRM_BUTTON_LABEL": "Изтрий",
+ "CANCEL_BUTTON_LABEL": "Отмени"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/ca/conversation.json b/app/javascript/dashboard/i18n/locale/ca/conversation.json
index 93aef2f09..4c692c7c5 100644
--- a/app/javascript/dashboard/i18n/locale/ca/conversation.json
+++ b/app/javascript/dashboard/i18n/locale/ca/conversation.json
@@ -71,6 +71,17 @@
"SHOW_LABELS": "Mostra etiquetes",
"HIDE_LABELS": "Amaga etiquetes"
},
+ "VOICE_CALL": {
+ "INCOMING_CALL": "Incoming call",
+ "OUTGOING_CALL": "Outgoing call",
+ "CALL_IN_PROGRESS": "Call in progress",
+ "NO_ANSWER": "No answer",
+ "MISSED_CALL": "Missed call",
+ "CALL_ENDED": "Call ended",
+ "NOT_ANSWERED_YET": "Not answered yet",
+ "THEY_ANSWERED": "They answered",
+ "YOU_ANSWERED": "You answered"
+ },
"HEADER": {
"RESOLVE_ACTION": "Resoldre",
"REOPEN_ACTION": "Tornar a obrir",
diff --git a/app/javascript/dashboard/i18n/locale/ca/settings.json b/app/javascript/dashboard/i18n/locale/ca/settings.json
index dbd5f5cad..8c1585277 100644
--- a/app/javascript/dashboard/i18n/locale/ca/settings.json
+++ b/app/javascript/dashboard/i18n/locale/ca/settings.json
@@ -51,6 +51,13 @@
"LARGER": "Larger",
"EXTRA_LARGE": "Extra Large"
}
+ },
+ "LANGUAGE": {
+ "TITLE": "Preferred Language",
+ "NOTE": "Choose the language you want to use.",
+ "UPDATE_SUCCESS": "Your Language settings have been updated successfully",
+ "UPDATE_ERROR": "There is an error while updating the language settings, please try again",
+ "USE_ACCOUNT_DEFAULT": "Use account default"
}
},
"MESSAGE_SIGNATURE_SECTION": {
@@ -330,6 +337,7 @@
"REPORTS_LABEL": "Etiquetes",
"REPORTS_INBOX": "Safata d'entrada",
"REPORTS_TEAM": "Equip",
+ "AGENT_ASSIGNMENT": "Agent Assignment",
"SET_AVAILABILITY_TITLE": "Posa't com",
"SET_YOUR_AVAILABILITY": "Estableix la vostra disponibilitat",
"SLA": "SLA",
@@ -418,5 +426,255 @@
"SWITCH_TO_REPLY": "Canvia a Respon",
"TOGGLE_SNOOZE_DROPDOWN": "Commuta el menú desplegable de posposar"
}
+ },
+ "ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent assignment",
+ "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here"
+ },
+ "ASSIGNMENT_POLICY": {
+ "TITLE": "Assignment policy",
+ "DESCRIPTION": "Manage how conversations get assigned in inboxes.",
+ "FEATURES": [
+ "Assign by conversations evenly or by available capacity",
+ "Add fair distribution rules to avoid overloading any agent",
+ "Add inboxes to a policy - one policy per inbox"
+ ]
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "TITLE": "Agent capacity policy",
+ "DESCRIPTION": "Manage workload for agents.",
+ "FEATURES": [
+ "Define maximum conversations per inbox",
+ "Create exceptions based on labels and time",
+ "Add agents to a policy - one policy per agent"
+ ]
+ }
+ },
+ "AGENT_ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Assignment policy",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "ORDER": "Order",
+ "PRIORITY": "Prioritat",
+ "ACTIVE": "Actiu",
+ "INACTIVE": "Inactive",
+ "POPOVER": "Added inboxes",
+ "EDIT": "Edita"
+ },
+ "NO_RECORDS_FOUND": "No assignment policies found"
+ },
+ "CREATE": {
+ "HEADER": {
+ "TITLE": "Create assignment policy"
+ },
+ "CREATE_BUTTON": "Create policy",
+ "API": {
+ "SUCCESS_MESSAGE": "Assignment policy created successfully",
+ "ERROR_MESSAGE": "Failed to create assignment policy"
+ }
+ },
+ "EDIT": {
+ "HEADER": {
+ "TITLE": "Edit assignment policy"
+ },
+ "EDIT_BUTTON": "Update policy",
+ "CONFIRM_ADD_INBOX_DIALOG": {
+ "TITLE": "Add inbox",
+ "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.",
+ "CONFIRM_BUTTON_LABEL": "Continue",
+ "CANCEL_BUTTON_LABEL": "Cancel·la"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Assignment policy updated successfully",
+ "ERROR_MESSAGE": "Failed to update assignment policy"
+ },
+ "INBOX_API": {
+ "ADD": {
+ "SUCCESS_MESSAGE": "Inbox added to policy successfully",
+ "ERROR_MESSAGE": "Failed to add inbox to policy"
+ },
+ "REMOVE": {
+ "SUCCESS_MESSAGE": "Inbox removed from policy successfully",
+ "ERROR_MESSAGE": "Failed to remove inbox from policy"
+ }
+ }
+ },
+ "FORM": {
+ "NAME": {
+ "LABEL": "Policy name:",
+ "PLACEHOLDER": "Enter policy name"
+ },
+ "DESCRIPTION": {
+ "LABEL": "Descripció:",
+ "PLACEHOLDER": "Introdueix la descripció"
+ },
+ "STATUS": {
+ "LABEL": "Estat:",
+ "PLACEHOLDER": "Selecciona l'estat",
+ "ACTIVE": "Policy is active",
+ "INACTIVE": "Policy is inactive"
+ },
+ "ASSIGNMENT_ORDER": {
+ "LABEL": "Assignment order",
+ "ROUND_ROBIN": {
+ "LABEL": "Round robin",
+ "DESCRIPTION": "Assign conversations evenly among agents."
+ },
+ "BALANCED": {
+ "LABEL": "Balanced",
+ "DESCRIPTION": "Assign conversations based on available capacity."
+ }
+ },
+ "ASSIGNMENT_PRIORITY": {
+ "LABEL": "Assignment priority",
+ "EARLIEST_CREATED": {
+ "LABEL": "Earliest created",
+ "DESCRIPTION": "The conversation that was created first gets assigned first."
+ },
+ "LONGEST_WAITING": {
+ "LABEL": "Longest waiting",
+ "DESCRIPTION": "The conversation waiting the longest gets assigned first."
+ }
+ },
+ "FAIR_DISTRIBUTION": {
+ "LABEL": "Fair distribution policy",
+ "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.",
+ "INPUT_MAX": "Assign max",
+ "DURATION": "Conversations per agent in every"
+ },
+ "INBOXES": {
+ "LABEL": "Added inboxes",
+ "DESCRIPTION": "Add inboxes for which this policy will be applicable.",
+ "ADD_BUTTON": "Add inbox",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select inboxes to add",
+ "ADD_BUTTON": "Afegir"
+ },
+ "EMPTY_STATE": "No inboxes added to this policy, add an inbox to get started",
+ "API": {
+ "SUCCESS_MESSAGE": "Inbox successfully added to policy",
+ "ERROR_MESSAGE": "Failed to add inbox to policy"
+ }
+ }
+ },
+ "DELETE_POLICY": {
+ "SUCCESS_MESSAGE": "Assignment policy deleted successfully",
+ "ERROR_MESSAGE": "Failed to delete assignment policy"
+ }
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent capacity",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "POPOVER": "Added agents",
+ "EDIT": "Edita"
+ },
+ "NO_RECORDS_FOUND": "No agent capacity policies found"
+ },
+ "CREATE": {
+ "HEADER": {
+ "TITLE": "Create agent capacity policy"
+ },
+ "CREATE_BUTTON": "Create policy",
+ "API": {
+ "SUCCESS_MESSAGE": "Agent capacity policy created successfully",
+ "ERROR_MESSAGE": "Failed to create agent capacity policy"
+ }
+ },
+ "EDIT": {
+ "HEADER": {
+ "TITLE": "Edit agent capacity policy"
+ },
+ "EDIT_BUTTON": "Update policy",
+ "CONFIRM_ADD_AGENT_DIALOG": {
+ "TITLE": "Add agent",
+ "DESCRIPTION": "{agentName} is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.",
+ "CONFIRM_BUTTON_LABEL": "Continue",
+ "CANCEL_BUTTON_LABEL": "Cancel·la"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Agent capacity policy updated successfully",
+ "ERROR_MESSAGE": "Failed to update agent capacity policy"
+ },
+ "AGENT_API": {
+ "ADD": {
+ "SUCCESS_MESSAGE": "Agent added to policy successfully",
+ "ERROR_MESSAGE": "Failed to add agent to policy"
+ },
+ "REMOVE": {
+ "SUCCESS_MESSAGE": "Agent removed from policy successfully",
+ "ERROR_MESSAGE": "Failed to remove agent from policy"
+ }
+ }
+ },
+ "FORM": {
+ "NAME": {
+ "LABEL": "Policy name:",
+ "PLACEHOLDER": "Enter policy name"
+ },
+ "DESCRIPTION": {
+ "LABEL": "Descripció:",
+ "PLACEHOLDER": "Introdueix la descripció"
+ },
+ "INBOX_CAPACITY_LIMIT": {
+ "LABEL": "Inbox capacity limits",
+ "ADD_BUTTON": "Add inbox",
+ "FIELD": {
+ "SELECT_INBOX": "Select inbox",
+ "MAX_CONVERSATIONS": "Max conversations",
+ "SET_LIMIT": "Set limit"
+ },
+ "EMPTY_STATE": "No inbox limit set"
+ },
+ "EXCLUSION_RULES": {
+ "LABEL": "Exclusion rules",
+ "DESCRIPTION": "Conversations that satisfy the following conditions would not count towards agent capacity",
+ "TAGS": {
+ "LABEL": "Exclude conversations tagged with specific labels",
+ "ADD_TAG": "add tag",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select tags to add"
+ },
+ "EMPTY_STATE": "No tags added to this policy."
+ },
+ "DURATION": {
+ "LABEL": "Exclude conversations older than a specified duration",
+ "PLACEHOLDER": "Set time"
+ }
+ },
+ "USERS": {
+ "LABEL": "Assigned agents",
+ "DESCRIPTION": "Add agents for which this policy will be applicable.",
+ "ADD_BUTTON": "Add agent",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select agents to add",
+ "ADD_BUTTON": "Afegir"
+ },
+ "EMPTY_STATE": "No agents added",
+ "API": {
+ "SUCCESS_MESSAGE": "Agent successfully added to policy",
+ "ERROR_MESSAGE": "Failed to add agent to policy"
+ }
+ }
+ },
+ "DELETE_POLICY": {
+ "SUCCESS_MESSAGE": "Agent capacity policy deleted successfully",
+ "ERROR_MESSAGE": "Failed to delete agent capacity policy"
+ }
+ },
+ "DELETE_POLICY": {
+ "TITLE": "Delete policy",
+ "DESCRIPTION": "Are you sure you want to delete this policy? This action cannot be undone.",
+ "CONFIRM_BUTTON_LABEL": "Esborrar",
+ "CANCEL_BUTTON_LABEL": "Cancel·la"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/cs/conversation.json b/app/javascript/dashboard/i18n/locale/cs/conversation.json
index 91e8a12d8..12bea0321 100644
--- a/app/javascript/dashboard/i18n/locale/cs/conversation.json
+++ b/app/javascript/dashboard/i18n/locale/cs/conversation.json
@@ -71,6 +71,17 @@
"SHOW_LABELS": "Show labels",
"HIDE_LABELS": "Hide labels"
},
+ "VOICE_CALL": {
+ "INCOMING_CALL": "Incoming call",
+ "OUTGOING_CALL": "Outgoing call",
+ "CALL_IN_PROGRESS": "Call in progress",
+ "NO_ANSWER": "No answer",
+ "MISSED_CALL": "Missed call",
+ "CALL_ENDED": "Call ended",
+ "NOT_ANSWERED_YET": "Not answered yet",
+ "THEY_ANSWERED": "They answered",
+ "YOU_ANSWERED": "You answered"
+ },
"HEADER": {
"RESOLVE_ACTION": "Vyřešit",
"REOPEN_ACTION": "Znovu otevřít",
diff --git a/app/javascript/dashboard/i18n/locale/cs/settings.json b/app/javascript/dashboard/i18n/locale/cs/settings.json
index e143bc911..73a537544 100644
--- a/app/javascript/dashboard/i18n/locale/cs/settings.json
+++ b/app/javascript/dashboard/i18n/locale/cs/settings.json
@@ -51,6 +51,13 @@
"LARGER": "Larger",
"EXTRA_LARGE": "Extra Large"
}
+ },
+ "LANGUAGE": {
+ "TITLE": "Preferred Language",
+ "NOTE": "Choose the language you want to use.",
+ "UPDATE_SUCCESS": "Your Language settings have been updated successfully",
+ "UPDATE_ERROR": "There is an error while updating the language settings, please try again",
+ "USE_ACCOUNT_DEFAULT": "Use account default"
}
},
"MESSAGE_SIGNATURE_SECTION": {
@@ -330,6 +337,7 @@
"REPORTS_LABEL": "Štítky",
"REPORTS_INBOX": "Inbox",
"REPORTS_TEAM": "Team",
+ "AGENT_ASSIGNMENT": "Agent Assignment",
"SET_AVAILABILITY_TITLE": "Set yourself as",
"SET_YOUR_AVAILABILITY": "Nastavte svou dostupnost",
"SLA": "SLA",
@@ -418,5 +426,255 @@
"SWITCH_TO_REPLY": "Switch to Reply",
"TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown"
}
+ },
+ "ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent assignment",
+ "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here"
+ },
+ "ASSIGNMENT_POLICY": {
+ "TITLE": "Assignment policy",
+ "DESCRIPTION": "Manage how conversations get assigned in inboxes.",
+ "FEATURES": [
+ "Assign by conversations evenly or by available capacity",
+ "Add fair distribution rules to avoid overloading any agent",
+ "Add inboxes to a policy - one policy per inbox"
+ ]
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "TITLE": "Agent capacity policy",
+ "DESCRIPTION": "Manage workload for agents.",
+ "FEATURES": [
+ "Define maximum conversations per inbox",
+ "Create exceptions based on labels and time",
+ "Add agents to a policy - one policy per agent"
+ ]
+ }
+ },
+ "AGENT_ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Assignment policy",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "ORDER": "Order",
+ "PRIORITY": "Priority",
+ "ACTIVE": "Active",
+ "INACTIVE": "Inactive",
+ "POPOVER": "Added inboxes",
+ "EDIT": "Upravit"
+ },
+ "NO_RECORDS_FOUND": "No assignment policies found"
+ },
+ "CREATE": {
+ "HEADER": {
+ "TITLE": "Create assignment policy"
+ },
+ "CREATE_BUTTON": "Create policy",
+ "API": {
+ "SUCCESS_MESSAGE": "Assignment policy created successfully",
+ "ERROR_MESSAGE": "Failed to create assignment policy"
+ }
+ },
+ "EDIT": {
+ "HEADER": {
+ "TITLE": "Edit assignment policy"
+ },
+ "EDIT_BUTTON": "Update policy",
+ "CONFIRM_ADD_INBOX_DIALOG": {
+ "TITLE": "Add inbox",
+ "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.",
+ "CONFIRM_BUTTON_LABEL": "Continue",
+ "CANCEL_BUTTON_LABEL": "Zrušit"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Assignment policy updated successfully",
+ "ERROR_MESSAGE": "Failed to update assignment policy"
+ },
+ "INBOX_API": {
+ "ADD": {
+ "SUCCESS_MESSAGE": "Inbox added to policy successfully",
+ "ERROR_MESSAGE": "Failed to add inbox to policy"
+ },
+ "REMOVE": {
+ "SUCCESS_MESSAGE": "Inbox removed from policy successfully",
+ "ERROR_MESSAGE": "Failed to remove inbox from policy"
+ }
+ }
+ },
+ "FORM": {
+ "NAME": {
+ "LABEL": "Policy name:",
+ "PLACEHOLDER": "Enter policy name"
+ },
+ "DESCRIPTION": {
+ "LABEL": "Description:",
+ "PLACEHOLDER": "Enter description"
+ },
+ "STATUS": {
+ "LABEL": "Stav:",
+ "PLACEHOLDER": "Select status",
+ "ACTIVE": "Policy is active",
+ "INACTIVE": "Policy is inactive"
+ },
+ "ASSIGNMENT_ORDER": {
+ "LABEL": "Assignment order",
+ "ROUND_ROBIN": {
+ "LABEL": "Round robin",
+ "DESCRIPTION": "Assign conversations evenly among agents."
+ },
+ "BALANCED": {
+ "LABEL": "Balanced",
+ "DESCRIPTION": "Assign conversations based on available capacity."
+ }
+ },
+ "ASSIGNMENT_PRIORITY": {
+ "LABEL": "Assignment priority",
+ "EARLIEST_CREATED": {
+ "LABEL": "Earliest created",
+ "DESCRIPTION": "The conversation that was created first gets assigned first."
+ },
+ "LONGEST_WAITING": {
+ "LABEL": "Longest waiting",
+ "DESCRIPTION": "The conversation waiting the longest gets assigned first."
+ }
+ },
+ "FAIR_DISTRIBUTION": {
+ "LABEL": "Fair distribution policy",
+ "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.",
+ "INPUT_MAX": "Assign max",
+ "DURATION": "Conversations per agent in every"
+ },
+ "INBOXES": {
+ "LABEL": "Added inboxes",
+ "DESCRIPTION": "Add inboxes for which this policy will be applicable.",
+ "ADD_BUTTON": "Add inbox",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select inboxes to add",
+ "ADD_BUTTON": "Přidat"
+ },
+ "EMPTY_STATE": "No inboxes added to this policy, add an inbox to get started",
+ "API": {
+ "SUCCESS_MESSAGE": "Inbox successfully added to policy",
+ "ERROR_MESSAGE": "Failed to add inbox to policy"
+ }
+ }
+ },
+ "DELETE_POLICY": {
+ "SUCCESS_MESSAGE": "Assignment policy deleted successfully",
+ "ERROR_MESSAGE": "Failed to delete assignment policy"
+ }
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent capacity",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "POPOVER": "Added agents",
+ "EDIT": "Upravit"
+ },
+ "NO_RECORDS_FOUND": "No agent capacity policies found"
+ },
+ "CREATE": {
+ "HEADER": {
+ "TITLE": "Create agent capacity policy"
+ },
+ "CREATE_BUTTON": "Create policy",
+ "API": {
+ "SUCCESS_MESSAGE": "Agent capacity policy created successfully",
+ "ERROR_MESSAGE": "Failed to create agent capacity policy"
+ }
+ },
+ "EDIT": {
+ "HEADER": {
+ "TITLE": "Edit agent capacity policy"
+ },
+ "EDIT_BUTTON": "Update policy",
+ "CONFIRM_ADD_AGENT_DIALOG": {
+ "TITLE": "Add agent",
+ "DESCRIPTION": "{agentName} is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.",
+ "CONFIRM_BUTTON_LABEL": "Continue",
+ "CANCEL_BUTTON_LABEL": "Zrušit"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Agent capacity policy updated successfully",
+ "ERROR_MESSAGE": "Failed to update agent capacity policy"
+ },
+ "AGENT_API": {
+ "ADD": {
+ "SUCCESS_MESSAGE": "Agent added to policy successfully",
+ "ERROR_MESSAGE": "Failed to add agent to policy"
+ },
+ "REMOVE": {
+ "SUCCESS_MESSAGE": "Agent removed from policy successfully",
+ "ERROR_MESSAGE": "Failed to remove agent from policy"
+ }
+ }
+ },
+ "FORM": {
+ "NAME": {
+ "LABEL": "Policy name:",
+ "PLACEHOLDER": "Enter policy name"
+ },
+ "DESCRIPTION": {
+ "LABEL": "Description:",
+ "PLACEHOLDER": "Enter description"
+ },
+ "INBOX_CAPACITY_LIMIT": {
+ "LABEL": "Inbox capacity limits",
+ "ADD_BUTTON": "Add inbox",
+ "FIELD": {
+ "SELECT_INBOX": "Select inbox",
+ "MAX_CONVERSATIONS": "Max conversations",
+ "SET_LIMIT": "Set limit"
+ },
+ "EMPTY_STATE": "No inbox limit set"
+ },
+ "EXCLUSION_RULES": {
+ "LABEL": "Exclusion rules",
+ "DESCRIPTION": "Conversations that satisfy the following conditions would not count towards agent capacity",
+ "TAGS": {
+ "LABEL": "Exclude conversations tagged with specific labels",
+ "ADD_TAG": "add tag",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select tags to add"
+ },
+ "EMPTY_STATE": "No tags added to this policy."
+ },
+ "DURATION": {
+ "LABEL": "Exclude conversations older than a specified duration",
+ "PLACEHOLDER": "Set time"
+ }
+ },
+ "USERS": {
+ "LABEL": "Assigned agents",
+ "DESCRIPTION": "Add agents for which this policy will be applicable.",
+ "ADD_BUTTON": "Add agent",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select agents to add",
+ "ADD_BUTTON": "Přidat"
+ },
+ "EMPTY_STATE": "No agents added",
+ "API": {
+ "SUCCESS_MESSAGE": "Agent successfully added to policy",
+ "ERROR_MESSAGE": "Failed to add agent to policy"
+ }
+ }
+ },
+ "DELETE_POLICY": {
+ "SUCCESS_MESSAGE": "Agent capacity policy deleted successfully",
+ "ERROR_MESSAGE": "Failed to delete agent capacity policy"
+ }
+ },
+ "DELETE_POLICY": {
+ "TITLE": "Delete policy",
+ "DESCRIPTION": "Are you sure you want to delete this policy? This action cannot be undone.",
+ "CONFIRM_BUTTON_LABEL": "Vymazat",
+ "CANCEL_BUTTON_LABEL": "Zrušit"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/da/conversation.json b/app/javascript/dashboard/i18n/locale/da/conversation.json
index c0d707582..eb18255e7 100644
--- a/app/javascript/dashboard/i18n/locale/da/conversation.json
+++ b/app/javascript/dashboard/i18n/locale/da/conversation.json
@@ -71,6 +71,17 @@
"SHOW_LABELS": "Vis etiketter",
"HIDE_LABELS": "Skjul etiketter"
},
+ "VOICE_CALL": {
+ "INCOMING_CALL": "Incoming call",
+ "OUTGOING_CALL": "Outgoing call",
+ "CALL_IN_PROGRESS": "Call in progress",
+ "NO_ANSWER": "No answer",
+ "MISSED_CALL": "Missed call",
+ "CALL_ENDED": "Call ended",
+ "NOT_ANSWERED_YET": "Not answered yet",
+ "THEY_ANSWERED": "They answered",
+ "YOU_ANSWERED": "You answered"
+ },
"HEADER": {
"RESOLVE_ACTION": "Løs",
"REOPEN_ACTION": "Genåben",
diff --git a/app/javascript/dashboard/i18n/locale/da/settings.json b/app/javascript/dashboard/i18n/locale/da/settings.json
index e1a930e5b..4746c3ddd 100644
--- a/app/javascript/dashboard/i18n/locale/da/settings.json
+++ b/app/javascript/dashboard/i18n/locale/da/settings.json
@@ -51,6 +51,13 @@
"LARGER": "Larger",
"EXTRA_LARGE": "Extra Large"
}
+ },
+ "LANGUAGE": {
+ "TITLE": "Preferred Language",
+ "NOTE": "Choose the language you want to use.",
+ "UPDATE_SUCCESS": "Your Language settings have been updated successfully",
+ "UPDATE_ERROR": "There is an error while updating the language settings, please try again",
+ "USE_ACCOUNT_DEFAULT": "Use account default"
}
},
"MESSAGE_SIGNATURE_SECTION": {
@@ -330,6 +337,7 @@
"REPORTS_LABEL": "Etiketter",
"REPORTS_INBOX": "Indbakke",
"REPORTS_TEAM": "Team",
+ "AGENT_ASSIGNMENT": "Agent Assignment",
"SET_AVAILABILITY_TITLE": "Sæt dig selv som",
"SET_YOUR_AVAILABILITY": "Indstil din tilgængelighed",
"SLA": "SLA",
@@ -418,5 +426,255 @@
"SWITCH_TO_REPLY": "Skift til svar",
"TOGGLE_SNOOZE_DROPDOWN": "Skift snooze dropdown"
}
+ },
+ "ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent assignment",
+ "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here"
+ },
+ "ASSIGNMENT_POLICY": {
+ "TITLE": "Assignment policy",
+ "DESCRIPTION": "Manage how conversations get assigned in inboxes.",
+ "FEATURES": [
+ "Assign by conversations evenly or by available capacity",
+ "Add fair distribution rules to avoid overloading any agent",
+ "Add inboxes to a policy - one policy per inbox"
+ ]
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "TITLE": "Agent capacity policy",
+ "DESCRIPTION": "Manage workload for agents.",
+ "FEATURES": [
+ "Define maximum conversations per inbox",
+ "Create exceptions based on labels and time",
+ "Add agents to a policy - one policy per agent"
+ ]
+ }
+ },
+ "AGENT_ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Assignment policy",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "ORDER": "Order",
+ "PRIORITY": "Priority",
+ "ACTIVE": "Aktiv",
+ "INACTIVE": "Inactive",
+ "POPOVER": "Added inboxes",
+ "EDIT": "Rediger"
+ },
+ "NO_RECORDS_FOUND": "No assignment policies found"
+ },
+ "CREATE": {
+ "HEADER": {
+ "TITLE": "Create assignment policy"
+ },
+ "CREATE_BUTTON": "Create policy",
+ "API": {
+ "SUCCESS_MESSAGE": "Assignment policy created successfully",
+ "ERROR_MESSAGE": "Failed to create assignment policy"
+ }
+ },
+ "EDIT": {
+ "HEADER": {
+ "TITLE": "Edit assignment policy"
+ },
+ "EDIT_BUTTON": "Update policy",
+ "CONFIRM_ADD_INBOX_DIALOG": {
+ "TITLE": "Add inbox",
+ "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.",
+ "CONFIRM_BUTTON_LABEL": "Continue",
+ "CANCEL_BUTTON_LABEL": "Annuller"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Assignment policy updated successfully",
+ "ERROR_MESSAGE": "Failed to update assignment policy"
+ },
+ "INBOX_API": {
+ "ADD": {
+ "SUCCESS_MESSAGE": "Inbox added to policy successfully",
+ "ERROR_MESSAGE": "Failed to add inbox to policy"
+ },
+ "REMOVE": {
+ "SUCCESS_MESSAGE": "Inbox removed from policy successfully",
+ "ERROR_MESSAGE": "Failed to remove inbox from policy"
+ }
+ }
+ },
+ "FORM": {
+ "NAME": {
+ "LABEL": "Policy name:",
+ "PLACEHOLDER": "Enter policy name"
+ },
+ "DESCRIPTION": {
+ "LABEL": "Beskrivelse:",
+ "PLACEHOLDER": "Enter description"
+ },
+ "STATUS": {
+ "LABEL": "Status:",
+ "PLACEHOLDER": "Select status",
+ "ACTIVE": "Policy is active",
+ "INACTIVE": "Policy is inactive"
+ },
+ "ASSIGNMENT_ORDER": {
+ "LABEL": "Assignment order",
+ "ROUND_ROBIN": {
+ "LABEL": "Round robin",
+ "DESCRIPTION": "Assign conversations evenly among agents."
+ },
+ "BALANCED": {
+ "LABEL": "Balanced",
+ "DESCRIPTION": "Assign conversations based on available capacity."
+ }
+ },
+ "ASSIGNMENT_PRIORITY": {
+ "LABEL": "Assignment priority",
+ "EARLIEST_CREATED": {
+ "LABEL": "Earliest created",
+ "DESCRIPTION": "The conversation that was created first gets assigned first."
+ },
+ "LONGEST_WAITING": {
+ "LABEL": "Longest waiting",
+ "DESCRIPTION": "The conversation waiting the longest gets assigned first."
+ }
+ },
+ "FAIR_DISTRIBUTION": {
+ "LABEL": "Fair distribution policy",
+ "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.",
+ "INPUT_MAX": "Assign max",
+ "DURATION": "Conversations per agent in every"
+ },
+ "INBOXES": {
+ "LABEL": "Added inboxes",
+ "DESCRIPTION": "Add inboxes for which this policy will be applicable.",
+ "ADD_BUTTON": "Add inbox",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select inboxes to add",
+ "ADD_BUTTON": "Tilføj"
+ },
+ "EMPTY_STATE": "No inboxes added to this policy, add an inbox to get started",
+ "API": {
+ "SUCCESS_MESSAGE": "Inbox successfully added to policy",
+ "ERROR_MESSAGE": "Failed to add inbox to policy"
+ }
+ }
+ },
+ "DELETE_POLICY": {
+ "SUCCESS_MESSAGE": "Assignment policy deleted successfully",
+ "ERROR_MESSAGE": "Failed to delete assignment policy"
+ }
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent capacity",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "POPOVER": "Added agents",
+ "EDIT": "Rediger"
+ },
+ "NO_RECORDS_FOUND": "No agent capacity policies found"
+ },
+ "CREATE": {
+ "HEADER": {
+ "TITLE": "Create agent capacity policy"
+ },
+ "CREATE_BUTTON": "Create policy",
+ "API": {
+ "SUCCESS_MESSAGE": "Agent capacity policy created successfully",
+ "ERROR_MESSAGE": "Failed to create agent capacity policy"
+ }
+ },
+ "EDIT": {
+ "HEADER": {
+ "TITLE": "Edit agent capacity policy"
+ },
+ "EDIT_BUTTON": "Update policy",
+ "CONFIRM_ADD_AGENT_DIALOG": {
+ "TITLE": "Add agent",
+ "DESCRIPTION": "{agentName} is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.",
+ "CONFIRM_BUTTON_LABEL": "Continue",
+ "CANCEL_BUTTON_LABEL": "Annuller"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Agent capacity policy updated successfully",
+ "ERROR_MESSAGE": "Failed to update agent capacity policy"
+ },
+ "AGENT_API": {
+ "ADD": {
+ "SUCCESS_MESSAGE": "Agent added to policy successfully",
+ "ERROR_MESSAGE": "Failed to add agent to policy"
+ },
+ "REMOVE": {
+ "SUCCESS_MESSAGE": "Agent removed from policy successfully",
+ "ERROR_MESSAGE": "Failed to remove agent from policy"
+ }
+ }
+ },
+ "FORM": {
+ "NAME": {
+ "LABEL": "Policy name:",
+ "PLACEHOLDER": "Enter policy name"
+ },
+ "DESCRIPTION": {
+ "LABEL": "Beskrivelse:",
+ "PLACEHOLDER": "Enter description"
+ },
+ "INBOX_CAPACITY_LIMIT": {
+ "LABEL": "Inbox capacity limits",
+ "ADD_BUTTON": "Add inbox",
+ "FIELD": {
+ "SELECT_INBOX": "Select inbox",
+ "MAX_CONVERSATIONS": "Max conversations",
+ "SET_LIMIT": "Set limit"
+ },
+ "EMPTY_STATE": "No inbox limit set"
+ },
+ "EXCLUSION_RULES": {
+ "LABEL": "Exclusion rules",
+ "DESCRIPTION": "Conversations that satisfy the following conditions would not count towards agent capacity",
+ "TAGS": {
+ "LABEL": "Exclude conversations tagged with specific labels",
+ "ADD_TAG": "add tag",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select tags to add"
+ },
+ "EMPTY_STATE": "No tags added to this policy."
+ },
+ "DURATION": {
+ "LABEL": "Exclude conversations older than a specified duration",
+ "PLACEHOLDER": "Set time"
+ }
+ },
+ "USERS": {
+ "LABEL": "Assigned agents",
+ "DESCRIPTION": "Add agents for which this policy will be applicable.",
+ "ADD_BUTTON": "Add agent",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select agents to add",
+ "ADD_BUTTON": "Tilføj"
+ },
+ "EMPTY_STATE": "No agents added",
+ "API": {
+ "SUCCESS_MESSAGE": "Agent successfully added to policy",
+ "ERROR_MESSAGE": "Failed to add agent to policy"
+ }
+ }
+ },
+ "DELETE_POLICY": {
+ "SUCCESS_MESSAGE": "Agent capacity policy deleted successfully",
+ "ERROR_MESSAGE": "Failed to delete agent capacity policy"
+ }
+ },
+ "DELETE_POLICY": {
+ "TITLE": "Delete policy",
+ "DESCRIPTION": "Are you sure you want to delete this policy? This action cannot be undone.",
+ "CONFIRM_BUTTON_LABEL": "Slet",
+ "CANCEL_BUTTON_LABEL": "Annuller"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/de/conversation.json b/app/javascript/dashboard/i18n/locale/de/conversation.json
index 1a64e5820..719190eee 100644
--- a/app/javascript/dashboard/i18n/locale/de/conversation.json
+++ b/app/javascript/dashboard/i18n/locale/de/conversation.json
@@ -71,6 +71,17 @@
"SHOW_LABELS": "Labels anzeigen",
"HIDE_LABELS": "Labels ausblenden"
},
+ "VOICE_CALL": {
+ "INCOMING_CALL": "Incoming call",
+ "OUTGOING_CALL": "Outgoing call",
+ "CALL_IN_PROGRESS": "Call in progress",
+ "NO_ANSWER": "No answer",
+ "MISSED_CALL": "Missed call",
+ "CALL_ENDED": "Call ended",
+ "NOT_ANSWERED_YET": "Not answered yet",
+ "THEY_ANSWERED": "They answered",
+ "YOU_ANSWERED": "You answered"
+ },
"HEADER": {
"RESOLVE_ACTION": "Fall schließen",
"REOPEN_ACTION": "Wieder öffnen",
diff --git a/app/javascript/dashboard/i18n/locale/de/settings.json b/app/javascript/dashboard/i18n/locale/de/settings.json
index 71c12b477..e41038e16 100644
--- a/app/javascript/dashboard/i18n/locale/de/settings.json
+++ b/app/javascript/dashboard/i18n/locale/de/settings.json
@@ -51,6 +51,13 @@
"LARGER": "Larger",
"EXTRA_LARGE": "Extra Large"
}
+ },
+ "LANGUAGE": {
+ "TITLE": "Preferred Language",
+ "NOTE": "Choose the language you want to use.",
+ "UPDATE_SUCCESS": "Your Language settings have been updated successfully",
+ "UPDATE_ERROR": "There is an error while updating the language settings, please try again",
+ "USE_ACCOUNT_DEFAULT": "Use account default"
}
},
"MESSAGE_SIGNATURE_SECTION": {
@@ -330,6 +337,7 @@
"REPORTS_LABEL": "Labels",
"REPORTS_INBOX": "Posteingang",
"REPORTS_TEAM": "Team",
+ "AGENT_ASSIGNMENT": "Agent Assignment",
"SET_AVAILABILITY_TITLE": "Setzen Sie sich als",
"SET_YOUR_AVAILABILITY": "Legen Sie Ihre Verfügbarkeit fest",
"SLA": "SLA",
@@ -418,5 +426,255 @@
"SWITCH_TO_REPLY": "Zur Antwort wechseln",
"TOGGLE_SNOOZE_DROPDOWN": "Schlummer-Dropdown ein-/ausblenden"
}
+ },
+ "ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent assignment",
+ "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here"
+ },
+ "ASSIGNMENT_POLICY": {
+ "TITLE": "Assignment policy",
+ "DESCRIPTION": "Manage how conversations get assigned in inboxes.",
+ "FEATURES": [
+ "Assign by conversations evenly or by available capacity",
+ "Add fair distribution rules to avoid overloading any agent",
+ "Add inboxes to a policy - one policy per inbox"
+ ]
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "TITLE": "Agent capacity policy",
+ "DESCRIPTION": "Manage workload for agents.",
+ "FEATURES": [
+ "Define maximum conversations per inbox",
+ "Create exceptions based on labels and time",
+ "Add agents to a policy - one policy per agent"
+ ]
+ }
+ },
+ "AGENT_ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Assignment policy",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "ORDER": "Order",
+ "PRIORITY": "Priorität",
+ "ACTIVE": "Aktiv",
+ "INACTIVE": "Inactive",
+ "POPOVER": "Added inboxes",
+ "EDIT": "Bearbeiten"
+ },
+ "NO_RECORDS_FOUND": "No assignment policies found"
+ },
+ "CREATE": {
+ "HEADER": {
+ "TITLE": "Create assignment policy"
+ },
+ "CREATE_BUTTON": "Create policy",
+ "API": {
+ "SUCCESS_MESSAGE": "Assignment policy created successfully",
+ "ERROR_MESSAGE": "Failed to create assignment policy"
+ }
+ },
+ "EDIT": {
+ "HEADER": {
+ "TITLE": "Edit assignment policy"
+ },
+ "EDIT_BUTTON": "Update policy",
+ "CONFIRM_ADD_INBOX_DIALOG": {
+ "TITLE": "Add inbox",
+ "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.",
+ "CONFIRM_BUTTON_LABEL": "Continue",
+ "CANCEL_BUTTON_LABEL": "Stornieren"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Assignment policy updated successfully",
+ "ERROR_MESSAGE": "Failed to update assignment policy"
+ },
+ "INBOX_API": {
+ "ADD": {
+ "SUCCESS_MESSAGE": "Inbox added to policy successfully",
+ "ERROR_MESSAGE": "Failed to add inbox to policy"
+ },
+ "REMOVE": {
+ "SUCCESS_MESSAGE": "Inbox removed from policy successfully",
+ "ERROR_MESSAGE": "Failed to remove inbox from policy"
+ }
+ }
+ },
+ "FORM": {
+ "NAME": {
+ "LABEL": "Policy name:",
+ "PLACEHOLDER": "Enter policy name"
+ },
+ "DESCRIPTION": {
+ "LABEL": "Beschreibung:",
+ "PLACEHOLDER": "Beschreibung eingeben"
+ },
+ "STATUS": {
+ "LABEL": "Status:",
+ "PLACEHOLDER": "Status auswählen",
+ "ACTIVE": "Policy is active",
+ "INACTIVE": "Policy is inactive"
+ },
+ "ASSIGNMENT_ORDER": {
+ "LABEL": "Assignment order",
+ "ROUND_ROBIN": {
+ "LABEL": "Round robin",
+ "DESCRIPTION": "Assign conversations evenly among agents."
+ },
+ "BALANCED": {
+ "LABEL": "Balanced",
+ "DESCRIPTION": "Assign conversations based on available capacity."
+ }
+ },
+ "ASSIGNMENT_PRIORITY": {
+ "LABEL": "Assignment priority",
+ "EARLIEST_CREATED": {
+ "LABEL": "Earliest created",
+ "DESCRIPTION": "The conversation that was created first gets assigned first."
+ },
+ "LONGEST_WAITING": {
+ "LABEL": "Longest waiting",
+ "DESCRIPTION": "The conversation waiting the longest gets assigned first."
+ }
+ },
+ "FAIR_DISTRIBUTION": {
+ "LABEL": "Fair distribution policy",
+ "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.",
+ "INPUT_MAX": "Assign max",
+ "DURATION": "Conversations per agent in every"
+ },
+ "INBOXES": {
+ "LABEL": "Added inboxes",
+ "DESCRIPTION": "Add inboxes for which this policy will be applicable.",
+ "ADD_BUTTON": "Add inbox",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select inboxes to add",
+ "ADD_BUTTON": "Hinzufügen"
+ },
+ "EMPTY_STATE": "No inboxes added to this policy, add an inbox to get started",
+ "API": {
+ "SUCCESS_MESSAGE": "Inbox successfully added to policy",
+ "ERROR_MESSAGE": "Failed to add inbox to policy"
+ }
+ }
+ },
+ "DELETE_POLICY": {
+ "SUCCESS_MESSAGE": "Assignment policy deleted successfully",
+ "ERROR_MESSAGE": "Failed to delete assignment policy"
+ }
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent capacity",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "POPOVER": "Added agents",
+ "EDIT": "Bearbeiten"
+ },
+ "NO_RECORDS_FOUND": "No agent capacity policies found"
+ },
+ "CREATE": {
+ "HEADER": {
+ "TITLE": "Create agent capacity policy"
+ },
+ "CREATE_BUTTON": "Create policy",
+ "API": {
+ "SUCCESS_MESSAGE": "Agent capacity policy created successfully",
+ "ERROR_MESSAGE": "Failed to create agent capacity policy"
+ }
+ },
+ "EDIT": {
+ "HEADER": {
+ "TITLE": "Edit agent capacity policy"
+ },
+ "EDIT_BUTTON": "Update policy",
+ "CONFIRM_ADD_AGENT_DIALOG": {
+ "TITLE": "Add agent",
+ "DESCRIPTION": "{agentName} is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.",
+ "CONFIRM_BUTTON_LABEL": "Continue",
+ "CANCEL_BUTTON_LABEL": "Stornieren"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Agent capacity policy updated successfully",
+ "ERROR_MESSAGE": "Failed to update agent capacity policy"
+ },
+ "AGENT_API": {
+ "ADD": {
+ "SUCCESS_MESSAGE": "Agent added to policy successfully",
+ "ERROR_MESSAGE": "Failed to add agent to policy"
+ },
+ "REMOVE": {
+ "SUCCESS_MESSAGE": "Agent removed from policy successfully",
+ "ERROR_MESSAGE": "Failed to remove agent from policy"
+ }
+ }
+ },
+ "FORM": {
+ "NAME": {
+ "LABEL": "Policy name:",
+ "PLACEHOLDER": "Enter policy name"
+ },
+ "DESCRIPTION": {
+ "LABEL": "Beschreibung:",
+ "PLACEHOLDER": "Beschreibung eingeben"
+ },
+ "INBOX_CAPACITY_LIMIT": {
+ "LABEL": "Inbox capacity limits",
+ "ADD_BUTTON": "Add inbox",
+ "FIELD": {
+ "SELECT_INBOX": "Select inbox",
+ "MAX_CONVERSATIONS": "Max conversations",
+ "SET_LIMIT": "Set limit"
+ },
+ "EMPTY_STATE": "No inbox limit set"
+ },
+ "EXCLUSION_RULES": {
+ "LABEL": "Exclusion rules",
+ "DESCRIPTION": "Conversations that satisfy the following conditions would not count towards agent capacity",
+ "TAGS": {
+ "LABEL": "Exclude conversations tagged with specific labels",
+ "ADD_TAG": "add tag",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select tags to add"
+ },
+ "EMPTY_STATE": "No tags added to this policy."
+ },
+ "DURATION": {
+ "LABEL": "Exclude conversations older than a specified duration",
+ "PLACEHOLDER": "Set time"
+ }
+ },
+ "USERS": {
+ "LABEL": "Assigned agents",
+ "DESCRIPTION": "Add agents for which this policy will be applicable.",
+ "ADD_BUTTON": "Add agent",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select agents to add",
+ "ADD_BUTTON": "Hinzufügen"
+ },
+ "EMPTY_STATE": "No agents added",
+ "API": {
+ "SUCCESS_MESSAGE": "Agent successfully added to policy",
+ "ERROR_MESSAGE": "Failed to add agent to policy"
+ }
+ }
+ },
+ "DELETE_POLICY": {
+ "SUCCESS_MESSAGE": "Agent capacity policy deleted successfully",
+ "ERROR_MESSAGE": "Failed to delete agent capacity policy"
+ }
+ },
+ "DELETE_POLICY": {
+ "TITLE": "Delete policy",
+ "DESCRIPTION": "Are you sure you want to delete this policy? This action cannot be undone.",
+ "CONFIRM_BUTTON_LABEL": "Löschen",
+ "CANCEL_BUTTON_LABEL": "Stornieren"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/el/conversation.json b/app/javascript/dashboard/i18n/locale/el/conversation.json
index 148b038e6..94017c2c2 100644
--- a/app/javascript/dashboard/i18n/locale/el/conversation.json
+++ b/app/javascript/dashboard/i18n/locale/el/conversation.json
@@ -71,6 +71,17 @@
"SHOW_LABELS": "Προβολή ετικετών",
"HIDE_LABELS": "Απόκρυψη ετικετών"
},
+ "VOICE_CALL": {
+ "INCOMING_CALL": "Incoming call",
+ "OUTGOING_CALL": "Outgoing call",
+ "CALL_IN_PROGRESS": "Call in progress",
+ "NO_ANSWER": "No answer",
+ "MISSED_CALL": "Missed call",
+ "CALL_ENDED": "Call ended",
+ "NOT_ANSWERED_YET": "Not answered yet",
+ "THEY_ANSWERED": "They answered",
+ "YOU_ANSWERED": "You answered"
+ },
"HEADER": {
"RESOLVE_ACTION": "Επίλυση",
"REOPEN_ACTION": "Επαναφορά",
diff --git a/app/javascript/dashboard/i18n/locale/el/settings.json b/app/javascript/dashboard/i18n/locale/el/settings.json
index 336e96111..0e4dc5be7 100644
--- a/app/javascript/dashboard/i18n/locale/el/settings.json
+++ b/app/javascript/dashboard/i18n/locale/el/settings.json
@@ -51,6 +51,13 @@
"LARGER": "Larger",
"EXTRA_LARGE": "Extra Large"
}
+ },
+ "LANGUAGE": {
+ "TITLE": "Preferred Language",
+ "NOTE": "Choose the language you want to use.",
+ "UPDATE_SUCCESS": "Your Language settings have been updated successfully",
+ "UPDATE_ERROR": "There is an error while updating the language settings, please try again",
+ "USE_ACCOUNT_DEFAULT": "Use account default"
}
},
"MESSAGE_SIGNATURE_SECTION": {
@@ -330,6 +337,7 @@
"REPORTS_LABEL": "Ετικέτες",
"REPORTS_INBOX": "Εισερχόμενα",
"REPORTS_TEAM": "Ομάδα",
+ "AGENT_ASSIGNMENT": "Agent Assignment",
"SET_AVAILABILITY_TITLE": "Ορίστε τον εαυτό σας ως",
"SET_YOUR_AVAILABILITY": "Ορίστε τη διαθεσιμότητά σας",
"SLA": "SLA",
@@ -418,5 +426,255 @@
"SWITCH_TO_REPLY": "Εναλλαγή σε απάντηση",
"TOGGLE_SNOOZE_DROPDOWN": "Εναλλαγή αναβολής dropdown"
}
+ },
+ "ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent assignment",
+ "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here"
+ },
+ "ASSIGNMENT_POLICY": {
+ "TITLE": "Assignment policy",
+ "DESCRIPTION": "Manage how conversations get assigned in inboxes.",
+ "FEATURES": [
+ "Assign by conversations evenly or by available capacity",
+ "Add fair distribution rules to avoid overloading any agent",
+ "Add inboxes to a policy - one policy per inbox"
+ ]
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "TITLE": "Agent capacity policy",
+ "DESCRIPTION": "Manage workload for agents.",
+ "FEATURES": [
+ "Define maximum conversations per inbox",
+ "Create exceptions based on labels and time",
+ "Add agents to a policy - one policy per agent"
+ ]
+ }
+ },
+ "AGENT_ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Assignment policy",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "ORDER": "Order",
+ "PRIORITY": "Priority",
+ "ACTIVE": "Ενεργή",
+ "INACTIVE": "Inactive",
+ "POPOVER": "Added inboxes",
+ "EDIT": "Επεξεργασία"
+ },
+ "NO_RECORDS_FOUND": "No assignment policies found"
+ },
+ "CREATE": {
+ "HEADER": {
+ "TITLE": "Create assignment policy"
+ },
+ "CREATE_BUTTON": "Create policy",
+ "API": {
+ "SUCCESS_MESSAGE": "Assignment policy created successfully",
+ "ERROR_MESSAGE": "Failed to create assignment policy"
+ }
+ },
+ "EDIT": {
+ "HEADER": {
+ "TITLE": "Edit assignment policy"
+ },
+ "EDIT_BUTTON": "Update policy",
+ "CONFIRM_ADD_INBOX_DIALOG": {
+ "TITLE": "Add inbox",
+ "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.",
+ "CONFIRM_BUTTON_LABEL": "Continue",
+ "CANCEL_BUTTON_LABEL": "Άκυρο"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Assignment policy updated successfully",
+ "ERROR_MESSAGE": "Failed to update assignment policy"
+ },
+ "INBOX_API": {
+ "ADD": {
+ "SUCCESS_MESSAGE": "Inbox added to policy successfully",
+ "ERROR_MESSAGE": "Failed to add inbox to policy"
+ },
+ "REMOVE": {
+ "SUCCESS_MESSAGE": "Inbox removed from policy successfully",
+ "ERROR_MESSAGE": "Failed to remove inbox from policy"
+ }
+ }
+ },
+ "FORM": {
+ "NAME": {
+ "LABEL": "Policy name:",
+ "PLACEHOLDER": "Enter policy name"
+ },
+ "DESCRIPTION": {
+ "LABEL": "Περιγραφή:",
+ "PLACEHOLDER": "Enter description"
+ },
+ "STATUS": {
+ "LABEL": "Κατάσταση:",
+ "PLACEHOLDER": "Select status",
+ "ACTIVE": "Policy is active",
+ "INACTIVE": "Policy is inactive"
+ },
+ "ASSIGNMENT_ORDER": {
+ "LABEL": "Assignment order",
+ "ROUND_ROBIN": {
+ "LABEL": "Round robin",
+ "DESCRIPTION": "Assign conversations evenly among agents."
+ },
+ "BALANCED": {
+ "LABEL": "Balanced",
+ "DESCRIPTION": "Assign conversations based on available capacity."
+ }
+ },
+ "ASSIGNMENT_PRIORITY": {
+ "LABEL": "Assignment priority",
+ "EARLIEST_CREATED": {
+ "LABEL": "Earliest created",
+ "DESCRIPTION": "The conversation that was created first gets assigned first."
+ },
+ "LONGEST_WAITING": {
+ "LABEL": "Longest waiting",
+ "DESCRIPTION": "The conversation waiting the longest gets assigned first."
+ }
+ },
+ "FAIR_DISTRIBUTION": {
+ "LABEL": "Fair distribution policy",
+ "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.",
+ "INPUT_MAX": "Assign max",
+ "DURATION": "Conversations per agent in every"
+ },
+ "INBOXES": {
+ "LABEL": "Added inboxes",
+ "DESCRIPTION": "Add inboxes for which this policy will be applicable.",
+ "ADD_BUTTON": "Add inbox",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select inboxes to add",
+ "ADD_BUTTON": "Προσθήκη"
+ },
+ "EMPTY_STATE": "No inboxes added to this policy, add an inbox to get started",
+ "API": {
+ "SUCCESS_MESSAGE": "Inbox successfully added to policy",
+ "ERROR_MESSAGE": "Failed to add inbox to policy"
+ }
+ }
+ },
+ "DELETE_POLICY": {
+ "SUCCESS_MESSAGE": "Assignment policy deleted successfully",
+ "ERROR_MESSAGE": "Failed to delete assignment policy"
+ }
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent capacity",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "POPOVER": "Added agents",
+ "EDIT": "Επεξεργασία"
+ },
+ "NO_RECORDS_FOUND": "No agent capacity policies found"
+ },
+ "CREATE": {
+ "HEADER": {
+ "TITLE": "Create agent capacity policy"
+ },
+ "CREATE_BUTTON": "Create policy",
+ "API": {
+ "SUCCESS_MESSAGE": "Agent capacity policy created successfully",
+ "ERROR_MESSAGE": "Failed to create agent capacity policy"
+ }
+ },
+ "EDIT": {
+ "HEADER": {
+ "TITLE": "Edit agent capacity policy"
+ },
+ "EDIT_BUTTON": "Update policy",
+ "CONFIRM_ADD_AGENT_DIALOG": {
+ "TITLE": "Add agent",
+ "DESCRIPTION": "{agentName} is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.",
+ "CONFIRM_BUTTON_LABEL": "Continue",
+ "CANCEL_BUTTON_LABEL": "Άκυρο"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Agent capacity policy updated successfully",
+ "ERROR_MESSAGE": "Failed to update agent capacity policy"
+ },
+ "AGENT_API": {
+ "ADD": {
+ "SUCCESS_MESSAGE": "Agent added to policy successfully",
+ "ERROR_MESSAGE": "Failed to add agent to policy"
+ },
+ "REMOVE": {
+ "SUCCESS_MESSAGE": "Agent removed from policy successfully",
+ "ERROR_MESSAGE": "Failed to remove agent from policy"
+ }
+ }
+ },
+ "FORM": {
+ "NAME": {
+ "LABEL": "Policy name:",
+ "PLACEHOLDER": "Enter policy name"
+ },
+ "DESCRIPTION": {
+ "LABEL": "Περιγραφή:",
+ "PLACEHOLDER": "Enter description"
+ },
+ "INBOX_CAPACITY_LIMIT": {
+ "LABEL": "Inbox capacity limits",
+ "ADD_BUTTON": "Add inbox",
+ "FIELD": {
+ "SELECT_INBOX": "Select inbox",
+ "MAX_CONVERSATIONS": "Max conversations",
+ "SET_LIMIT": "Set limit"
+ },
+ "EMPTY_STATE": "No inbox limit set"
+ },
+ "EXCLUSION_RULES": {
+ "LABEL": "Exclusion rules",
+ "DESCRIPTION": "Conversations that satisfy the following conditions would not count towards agent capacity",
+ "TAGS": {
+ "LABEL": "Exclude conversations tagged with specific labels",
+ "ADD_TAG": "add tag",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select tags to add"
+ },
+ "EMPTY_STATE": "No tags added to this policy."
+ },
+ "DURATION": {
+ "LABEL": "Exclude conversations older than a specified duration",
+ "PLACEHOLDER": "Set time"
+ }
+ },
+ "USERS": {
+ "LABEL": "Assigned agents",
+ "DESCRIPTION": "Add agents for which this policy will be applicable.",
+ "ADD_BUTTON": "Add agent",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select agents to add",
+ "ADD_BUTTON": "Προσθήκη"
+ },
+ "EMPTY_STATE": "No agents added",
+ "API": {
+ "SUCCESS_MESSAGE": "Agent successfully added to policy",
+ "ERROR_MESSAGE": "Failed to add agent to policy"
+ }
+ }
+ },
+ "DELETE_POLICY": {
+ "SUCCESS_MESSAGE": "Agent capacity policy deleted successfully",
+ "ERROR_MESSAGE": "Failed to delete agent capacity policy"
+ }
+ },
+ "DELETE_POLICY": {
+ "TITLE": "Delete policy",
+ "DESCRIPTION": "Are you sure you want to delete this policy? This action cannot be undone.",
+ "CONFIRM_BUTTON_LABEL": "Διαγραφή",
+ "CANCEL_BUTTON_LABEL": "Άκυρο"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/en/helpCenter.json b/app/javascript/dashboard/i18n/locale/en/helpCenter.json
index 16f108c0e..b47af9181 100644
--- a/app/javascript/dashboard/i18n/locale/en/helpCenter.json
+++ b/app/javascript/dashboard/i18n/locale/en/helpCenter.json
@@ -741,7 +741,8 @@
"LIVE_CHAT_WIDGET": {
"LABEL": "Live chat widget",
"PLACEHOLDER": "Select live chat widget",
- "HELP_TEXT": "Select a live chat widget that will appear on your help center"
+ "HELP_TEXT": "Select a live chat widget that will appear on your help center",
+ "NONE_OPTION": "No widget"
},
"BRAND_COLOR": {
"LABEL": "Brand color"
diff --git a/app/javascript/dashboard/i18n/locale/en/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/en/inboxMgmt.json
index f171914db..a525921db 100644
--- a/app/javascript/dashboard/i18n/locale/en/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/en/inboxMgmt.json
@@ -272,8 +272,8 @@
},
"SUBMIT_BUTTON": "Create WhatsApp Channel",
"EMBEDDED_SIGNUP": {
- "TITLE": "Quick Setup with Meta",
- "DESC": "You will be redirected to Meta to log into your WhatsApp Business account. Having admin access will help make the setup smooth and easy.",
+ "TITLE": "Quick setup with Meta",
+ "DESC": "Use the WhatsApp Embedded Signup flow to quickly connect new numbers. You will be redirected to Meta to log into your WhatsApp Business account. Having admin access will help make the setup smooth and easy.",
"BENEFITS": {
"TITLE": "Benefits of Embedded Signup:",
"EASY_SETUP": "No manual configuration required",
@@ -281,9 +281,8 @@
"AUTO_CONFIG": "Automatic webhook and phone number configuration"
},
"LEARN_MORE": {
- "TEXT": "To learn more about integrated signup, pricing, and limitations, visit",
- "LINK_TEXT": "this link.",
- "LINK_URL": "https://developers.facebook.com/docs/whatsapp/embedded-signup/custom-flows/onboarding-business-app-users#limitations"
+ "TEXT": "To learn more about integrated signup, pricing, and limitations, visit {link}.",
+ "LINK_TEXT": "this link"
},
"SUBMIT_BUTTON": "Connect with WhatsApp Business",
"AUTH_PROCESSING": "Authenticating with Meta",
@@ -296,7 +295,9 @@
"INVALID_BUSINESS_DATA": "Invalid business data received from Facebook. Please try again.",
"SIGNUP_ERROR": "Signup error occurred",
"AUTH_NOT_COMPLETED": "Authentication not completed. Please restart the process.",
- "SUCCESS_FALLBACK": "WhatsApp Business Account has been successfully configured"
+ "SUCCESS_FALLBACK": "WhatsApp Business Account has been successfully configured",
+ "MANUAL_FALLBACK": "If your number is already connected to the WhatsApp Business Platform (API), or if you’re a tech provider onboarding your own number, please use the {link} flow",
+ "MANUAL_LINK_TEXT": "manual setup flow"
},
"API": {
"ERROR_MESSAGE": "We were not able to save the WhatsApp channel"
diff --git a/app/javascript/dashboard/i18n/locale/en/settings.json b/app/javascript/dashboard/i18n/locale/en/settings.json
index dd2fdc904..b81a47f4e 100644
--- a/app/javascript/dashboard/i18n/locale/en/settings.json
+++ b/app/javascript/dashboard/i18n/locale/en/settings.json
@@ -358,7 +358,8 @@
"INFO_TEXT": "Let the system automatically mark you offline when you aren't using the app or dashboard.",
"INFO_SHORT": "Automatically mark offline when you aren't using the app."
},
- "DOCS": "Read docs"
+ "DOCS": "Read docs",
+ "SECURITY": "Security"
},
"BILLING_SETTINGS": {
"TITLE": "Billing",
@@ -390,6 +391,77 @@
},
"NO_BILLING_USER": "Your billing account is being configured. Please refresh the page and try again."
},
+ "SECURITY_SETTINGS": {
+ "TITLE": "Security",
+ "DESCRIPTION": "Manage your account security settings.",
+ "LINK_TEXT": "Learn more about SAML SSO",
+ "SAML": {
+ "TITLE": "SAML SSO",
+ "NOTE": "Configure SAML single sign-on for your account. Users will authenticate through your identity provider instead of using email/password.",
+ "ACS_URL": {
+ "LABEL": "ACS URL",
+ "TOOLTIP": "Assertion Consumer Service URL - Configure this URL in your IdP as the destination for SAML responses"
+ },
+ "SSO_URL": {
+ "LABEL": "SSO URL",
+ "HELP": "The URL where SAML authentication requests will be sent",
+ "PLACEHOLDER": "https://your-idp.com/saml/sso"
+ },
+ "CERTIFICATE": {
+ "LABEL": "Signing certificate in PEM format",
+ "HELP": "The public certificate from your identity provider used to verify SAML responses",
+ "PLACEHOLDER": "-----BEGIN CERTIFICATE-----\nMIIC..."
+ },
+ "FINGERPRINT": {
+ "LABEL": "Fingerprint",
+ "TOOLTIP": "SHA-1 fingerprint of the certificate - Use this to verify the certificate in your IdP configuration"
+ },
+ "COPY_SUCCESS": "Copied to clipboard",
+ "SP_ENTITY_ID": {
+ "LABEL": "SP Entity ID",
+ "HELP": "Unique identifier for this application as a service provider (auto-generated).",
+ "TOOLTIP": "Unique identifier for Chatwoot as the Service Provider - Configure this in your IdP settings"
+ },
+ "IDP_ENTITY_ID": {
+ "LABEL": "Identity Provider Entity ID",
+ "HELP": "Unique identifier for your identity provider (usually found in IdP configuration)",
+ "PLACEHOLDER": "https://your-idp.com/saml"
+ },
+ "UPDATE_BUTTON": "Update SAML Settings",
+ "API": {
+ "SUCCESS": "SAML settings updated successfully",
+ "ERROR": "Failed to update SAML settings",
+ "ERROR_LOADING": "Failed to load SAML settings",
+ "DISABLED": "SAML settings disabled successfully"
+ },
+ "VALIDATION": {
+ "REQUIRED_FIELDS": "SSO URL, Identity Provider Entity ID, and Certificate are required fields",
+ "SSO_URL_ERROR": "Please enter a valid SSO URL",
+ "CERTIFICATE_ERROR": "Certificate is required",
+ "IDP_ENTITY_ID_ERROR": "Identity Provider Entity ID is required"
+ },
+ "ENTERPRISE_PAYWALL": {
+ "AVAILABLE_ON": "The SAML SSO feature is only available in the Enterprise plans.",
+ "UPGRADE_PROMPT": "Upgrade to an Enterprise plan to access SAML single sign-on and other advanced security features.",
+ "ASK_ADMIN": "Please reach out to your administrator for the upgrade."
+ },
+ "PAYWALL": {
+ "TITLE": "Upgrade to enable SAML SSO",
+ "AVAILABLE_ON": "The SAML SSO feature is only available in the Enterprise plans.",
+ "UPGRADE_PROMPT": "Upgrade your plan to get access to SAML single sign-on and other advanced features.",
+ "UPGRADE_NOW": "Upgrade now",
+ "CANCEL_ANYTIME": "You can change or cancel your plan anytime"
+ },
+ "ATTRIBUTE_MAPPING": {
+ "TITLE": "SAML Attribute Setup",
+ "DESCRIPTION": "The following attribute mappings must be configured in your identity provider"
+ },
+ "INFO_SECTION": {
+ "TITLE": "Service Provider Information",
+ "TOOLTIP": "Copy these values and configure them in your Identity Provider to establish the SAML connection"
+ }
+ }
+ },
"CREATE_ACCOUNT": {
"NO_ACCOUNT_WARNING": "Uh oh! We could not find any Chatwoot accounts. Please create a new account to continue.",
"NEW_ACCOUNT": "New Account",
@@ -579,6 +651,92 @@
},
"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"
diff --git a/app/javascript/dashboard/i18n/locale/es/campaign.json b/app/javascript/dashboard/i18n/locale/es/campaign.json
index bcbfec249..ff7bcce65 100644
--- a/app/javascript/dashboard/i18n/locale/es/campaign.json
+++ b/app/javascript/dashboard/i18n/locale/es/campaign.json
@@ -142,7 +142,7 @@
"NEW_CAMPAIGN": "Crear campaña",
"EMPTY_STATE": {
"TITLE": "No WhatsApp campaigns are available",
- "SUBTITLE": "Launch a WhatsApp campaign to reach your customers directly. Send offers or make announcements with ease. Click 'Create campaign' to get started."
+ "SUBTITLE": "Lanza una campaña de WhatsApp para conectar con tus clientes directamente. Envía ofertas o has anuncios fácilmente. Haz clic en 'Crear campaña' para comenzar."
},
"CARD": {
"STATUS": {
@@ -155,7 +155,7 @@
}
},
"CREATE": {
- "TITLE": "Create WhatsApp campaign",
+ "TITLE": "Crear campaña de WhatsApp",
"CANCEL_BUTTON_TEXT": "Cancelar",
"CREATE_BUTTON_TEXT": "Crear",
"FORM": {
diff --git a/app/javascript/dashboard/i18n/locale/es/contentTemplates.json b/app/javascript/dashboard/i18n/locale/es/contentTemplates.json
index 7f1ecd4c7..a9187b6dd 100644
--- a/app/javascript/dashboard/i18n/locale/es/contentTemplates.json
+++ b/app/javascript/dashboard/i18n/locale/es/contentTemplates.json
@@ -40,7 +40,7 @@
"SEND_MESSAGE_LABEL": "Enviar mensaje",
"FORM_ERROR_MESSAGE": "Por favor, rellene todas las variables antes de enviar",
"MEDIA_HEADER_LABEL": "{type} Header",
- "MEDIA_URL_LABEL": "Enter full media URL",
+ "MEDIA_URL_LABEL": "Ingrese la URL completa",
"MEDIA_URL_PLACEHOLDER": "https://example.com/image.jpg"
},
"FORM": {
diff --git a/app/javascript/dashboard/i18n/locale/es/conversation.json b/app/javascript/dashboard/i18n/locale/es/conversation.json
index d27f1e019..5b02ceaba 100644
--- a/app/javascript/dashboard/i18n/locale/es/conversation.json
+++ b/app/javascript/dashboard/i18n/locale/es/conversation.json
@@ -71,6 +71,17 @@
"SHOW_LABELS": "Mostrar etiquetas",
"HIDE_LABELS": "Ocultar etiquetas"
},
+ "VOICE_CALL": {
+ "INCOMING_CALL": "Incoming call",
+ "OUTGOING_CALL": "Outgoing call",
+ "CALL_IN_PROGRESS": "Call in progress",
+ "NO_ANSWER": "No answer",
+ "MISSED_CALL": "Missed call",
+ "CALL_ENDED": "Call ended",
+ "NOT_ANSWERED_YET": "Not answered yet",
+ "THEY_ANSWERED": "They answered",
+ "YOU_ANSWERED": "You answered"
+ },
"HEADER": {
"RESOLVE_ACTION": "Resolver",
"REOPEN_ACTION": "Reabrir",
diff --git a/app/javascript/dashboard/i18n/locale/es/settings.json b/app/javascript/dashboard/i18n/locale/es/settings.json
index f2662bc72..b3f4b4702 100644
--- a/app/javascript/dashboard/i18n/locale/es/settings.json
+++ b/app/javascript/dashboard/i18n/locale/es/settings.json
@@ -51,6 +51,13 @@
"LARGER": "Larger",
"EXTRA_LARGE": "Extra Large"
}
+ },
+ "LANGUAGE": {
+ "TITLE": "Preferred Language",
+ "NOTE": "Choose the language you want to use.",
+ "UPDATE_SUCCESS": "Your Language settings have been updated successfully",
+ "UPDATE_ERROR": "There is an error while updating the language settings, please try again",
+ "USE_ACCOUNT_DEFAULT": "Use account default"
}
},
"MESSAGE_SIGNATURE_SECTION": {
@@ -226,7 +233,7 @@
"APPEARANCE": "Cambiar apariencia",
"SUPER_ADMIN_CONSOLE": "Consola SuperAdmin",
"DOCS": "Leer la documentación",
- "CHANGELOG": "Changelog",
+ "CHANGELOG": "Notas de versión",
"LOGOUT": "Cerrar sesión"
},
"APP_GLOBAL": {
@@ -330,6 +337,7 @@
"REPORTS_LABEL": "Etiquetas",
"REPORTS_INBOX": "Bandeja de entrada",
"REPORTS_TEAM": "Equipo",
+ "AGENT_ASSIGNMENT": "Agent Assignment",
"SET_AVAILABILITY_TITLE": "Ponte como",
"SET_YOUR_AVAILABILITY": "Establecer su disponibilidad",
"SLA": "SLA",
@@ -418,5 +426,255 @@
"SWITCH_TO_REPLY": "Cambiar a respuesta",
"TOGGLE_SNOOZE_DROPDOWN": "Cambiar el menú desplegable"
}
+ },
+ "ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent assignment",
+ "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here"
+ },
+ "ASSIGNMENT_POLICY": {
+ "TITLE": "Assignment policy",
+ "DESCRIPTION": "Manage how conversations get assigned in inboxes.",
+ "FEATURES": [
+ "Assign by conversations evenly or by available capacity",
+ "Add fair distribution rules to avoid overloading any agent",
+ "Add inboxes to a policy - one policy per inbox"
+ ]
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "TITLE": "Agent capacity policy",
+ "DESCRIPTION": "Manage workload for agents.",
+ "FEATURES": [
+ "Define maximum conversations per inbox",
+ "Create exceptions based on labels and time",
+ "Add agents to a policy - one policy per agent"
+ ]
+ }
+ },
+ "AGENT_ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Assignment policy",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "ORDER": "Order",
+ "PRIORITY": "Prioridad",
+ "ACTIVE": "Activo",
+ "INACTIVE": "Inactive",
+ "POPOVER": "Added inboxes",
+ "EDIT": "Editar"
+ },
+ "NO_RECORDS_FOUND": "No assignment policies found"
+ },
+ "CREATE": {
+ "HEADER": {
+ "TITLE": "Create assignment policy"
+ },
+ "CREATE_BUTTON": "Create policy",
+ "API": {
+ "SUCCESS_MESSAGE": "Assignment policy created successfully",
+ "ERROR_MESSAGE": "Failed to create assignment policy"
+ }
+ },
+ "EDIT": {
+ "HEADER": {
+ "TITLE": "Edit assignment policy"
+ },
+ "EDIT_BUTTON": "Update policy",
+ "CONFIRM_ADD_INBOX_DIALOG": {
+ "TITLE": "Add inbox",
+ "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.",
+ "CONFIRM_BUTTON_LABEL": "Continue",
+ "CANCEL_BUTTON_LABEL": "Cancelar"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Assignment policy updated successfully",
+ "ERROR_MESSAGE": "Failed to update assignment policy"
+ },
+ "INBOX_API": {
+ "ADD": {
+ "SUCCESS_MESSAGE": "Inbox added to policy successfully",
+ "ERROR_MESSAGE": "Failed to add inbox to policy"
+ },
+ "REMOVE": {
+ "SUCCESS_MESSAGE": "Inbox removed from policy successfully",
+ "ERROR_MESSAGE": "Failed to remove inbox from policy"
+ }
+ }
+ },
+ "FORM": {
+ "NAME": {
+ "LABEL": "Policy name:",
+ "PLACEHOLDER": "Enter policy name"
+ },
+ "DESCRIPTION": {
+ "LABEL": "Descripción:",
+ "PLACEHOLDER": "Introducir descripción"
+ },
+ "STATUS": {
+ "LABEL": "Estado:",
+ "PLACEHOLDER": "Seleccionar estado",
+ "ACTIVE": "Policy is active",
+ "INACTIVE": "Policy is inactive"
+ },
+ "ASSIGNMENT_ORDER": {
+ "LABEL": "Assignment order",
+ "ROUND_ROBIN": {
+ "LABEL": "Round robin",
+ "DESCRIPTION": "Assign conversations evenly among agents."
+ },
+ "BALANCED": {
+ "LABEL": "Balanced",
+ "DESCRIPTION": "Assign conversations based on available capacity."
+ }
+ },
+ "ASSIGNMENT_PRIORITY": {
+ "LABEL": "Assignment priority",
+ "EARLIEST_CREATED": {
+ "LABEL": "Earliest created",
+ "DESCRIPTION": "The conversation that was created first gets assigned first."
+ },
+ "LONGEST_WAITING": {
+ "LABEL": "Longest waiting",
+ "DESCRIPTION": "The conversation waiting the longest gets assigned first."
+ }
+ },
+ "FAIR_DISTRIBUTION": {
+ "LABEL": "Fair distribution policy",
+ "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.",
+ "INPUT_MAX": "Assign max",
+ "DURATION": "Conversations per agent in every"
+ },
+ "INBOXES": {
+ "LABEL": "Added inboxes",
+ "DESCRIPTION": "Add inboxes for which this policy will be applicable.",
+ "ADD_BUTTON": "Add inbox",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select inboxes to add",
+ "ADD_BUTTON": "Añadir"
+ },
+ "EMPTY_STATE": "No inboxes added to this policy, add an inbox to get started",
+ "API": {
+ "SUCCESS_MESSAGE": "Inbox successfully added to policy",
+ "ERROR_MESSAGE": "Failed to add inbox to policy"
+ }
+ }
+ },
+ "DELETE_POLICY": {
+ "SUCCESS_MESSAGE": "Assignment policy deleted successfully",
+ "ERROR_MESSAGE": "Failed to delete assignment policy"
+ }
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent capacity",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "POPOVER": "Added agents",
+ "EDIT": "Editar"
+ },
+ "NO_RECORDS_FOUND": "No agent capacity policies found"
+ },
+ "CREATE": {
+ "HEADER": {
+ "TITLE": "Create agent capacity policy"
+ },
+ "CREATE_BUTTON": "Create policy",
+ "API": {
+ "SUCCESS_MESSAGE": "Agent capacity policy created successfully",
+ "ERROR_MESSAGE": "Failed to create agent capacity policy"
+ }
+ },
+ "EDIT": {
+ "HEADER": {
+ "TITLE": "Edit agent capacity policy"
+ },
+ "EDIT_BUTTON": "Update policy",
+ "CONFIRM_ADD_AGENT_DIALOG": {
+ "TITLE": "Add agent",
+ "DESCRIPTION": "{agentName} is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.",
+ "CONFIRM_BUTTON_LABEL": "Continue",
+ "CANCEL_BUTTON_LABEL": "Cancelar"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Agent capacity policy updated successfully",
+ "ERROR_MESSAGE": "Failed to update agent capacity policy"
+ },
+ "AGENT_API": {
+ "ADD": {
+ "SUCCESS_MESSAGE": "Agent added to policy successfully",
+ "ERROR_MESSAGE": "Failed to add agent to policy"
+ },
+ "REMOVE": {
+ "SUCCESS_MESSAGE": "Agent removed from policy successfully",
+ "ERROR_MESSAGE": "Failed to remove agent from policy"
+ }
+ }
+ },
+ "FORM": {
+ "NAME": {
+ "LABEL": "Policy name:",
+ "PLACEHOLDER": "Enter policy name"
+ },
+ "DESCRIPTION": {
+ "LABEL": "Descripción:",
+ "PLACEHOLDER": "Introducir descripción"
+ },
+ "INBOX_CAPACITY_LIMIT": {
+ "LABEL": "Inbox capacity limits",
+ "ADD_BUTTON": "Add inbox",
+ "FIELD": {
+ "SELECT_INBOX": "Select inbox",
+ "MAX_CONVERSATIONS": "Max conversations",
+ "SET_LIMIT": "Set limit"
+ },
+ "EMPTY_STATE": "No inbox limit set"
+ },
+ "EXCLUSION_RULES": {
+ "LABEL": "Exclusion rules",
+ "DESCRIPTION": "Conversations that satisfy the following conditions would not count towards agent capacity",
+ "TAGS": {
+ "LABEL": "Exclude conversations tagged with specific labels",
+ "ADD_TAG": "add tag",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select tags to add"
+ },
+ "EMPTY_STATE": "No tags added to this policy."
+ },
+ "DURATION": {
+ "LABEL": "Exclude conversations older than a specified duration",
+ "PLACEHOLDER": "Set time"
+ }
+ },
+ "USERS": {
+ "LABEL": "Assigned agents",
+ "DESCRIPTION": "Add agents for which this policy will be applicable.",
+ "ADD_BUTTON": "Add agent",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select agents to add",
+ "ADD_BUTTON": "Añadir"
+ },
+ "EMPTY_STATE": "No agents added",
+ "API": {
+ "SUCCESS_MESSAGE": "Agent successfully added to policy",
+ "ERROR_MESSAGE": "Failed to add agent to policy"
+ }
+ }
+ },
+ "DELETE_POLICY": {
+ "SUCCESS_MESSAGE": "Agent capacity policy deleted successfully",
+ "ERROR_MESSAGE": "Failed to delete agent capacity policy"
+ }
+ },
+ "DELETE_POLICY": {
+ "TITLE": "Delete policy",
+ "DESCRIPTION": "Are you sure you want to delete this policy? This action cannot be undone.",
+ "CONFIRM_BUTTON_LABEL": "Eliminar",
+ "CANCEL_BUTTON_LABEL": "Cancelar"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/fa/contact.json b/app/javascript/dashboard/i18n/locale/fa/contact.json
index 0f17989e5..d1affb9f3 100644
--- a/app/javascript/dashboard/i18n/locale/fa/contact.json
+++ b/app/javascript/dashboard/i18n/locale/fa/contact.json
@@ -17,7 +17,7 @@
"IP_ADDRESS": "آدرس آیپی",
"CREATED_AT_LABEL": "ایجاد شده",
"NEW_MESSAGE": "پیام جدید",
- "CALL": "Call",
+ "CALL": "تماس",
"CALL_UNDER_DEVELOPMENT": "Calling is under development",
"VOICE_INBOX_PICKER": {
"TITLE": "Choose a voice inbox"
diff --git a/app/javascript/dashboard/i18n/locale/fa/conversation.json b/app/javascript/dashboard/i18n/locale/fa/conversation.json
index a9ff16b7e..864674c88 100644
--- a/app/javascript/dashboard/i18n/locale/fa/conversation.json
+++ b/app/javascript/dashboard/i18n/locale/fa/conversation.json
@@ -71,6 +71,17 @@
"SHOW_LABELS": "مشاهده کردن برچسبها",
"HIDE_LABELS": "پنهان کردن برچسبها"
},
+ "VOICE_CALL": {
+ "INCOMING_CALL": "Incoming call",
+ "OUTGOING_CALL": "Outgoing call",
+ "CALL_IN_PROGRESS": "Call in progress",
+ "NO_ANSWER": "No answer",
+ "MISSED_CALL": "Missed call",
+ "CALL_ENDED": "Call ended",
+ "NOT_ANSWERED_YET": "Not answered yet",
+ "THEY_ANSWERED": "They answered",
+ "YOU_ANSWERED": "You answered"
+ },
"HEADER": {
"RESOLVE_ACTION": "حل شد",
"REOPEN_ACTION": "دوباره باز کنید",
diff --git a/app/javascript/dashboard/i18n/locale/fa/settings.json b/app/javascript/dashboard/i18n/locale/fa/settings.json
index 32f54fdfe..fc97e8e4e 100644
--- a/app/javascript/dashboard/i18n/locale/fa/settings.json
+++ b/app/javascript/dashboard/i18n/locale/fa/settings.json
@@ -51,6 +51,13 @@
"LARGER": "Larger",
"EXTRA_LARGE": "Extra Large"
}
+ },
+ "LANGUAGE": {
+ "TITLE": "Preferred Language",
+ "NOTE": "Choose the language you want to use.",
+ "UPDATE_SUCCESS": "Your Language settings have been updated successfully",
+ "UPDATE_ERROR": "There is an error while updating the language settings, please try again",
+ "USE_ACCOUNT_DEFAULT": "Use account default"
}
},
"MESSAGE_SIGNATURE_SECTION": {
@@ -330,6 +337,7 @@
"REPORTS_LABEL": "برچسبها",
"REPORTS_INBOX": "صندوق ورودی",
"REPORTS_TEAM": "تیم",
+ "AGENT_ASSIGNMENT": "Agent Assignment",
"SET_AVAILABILITY_TITLE": "خود را به عنوان",
"SET_YOUR_AVAILABILITY": "در دسترس بودن خود را تنظیم کنید",
"SLA": "SLA",
@@ -418,5 +426,255 @@
"SWITCH_TO_REPLY": "رفتن به پاسخ",
"TOGGLE_SNOOZE_DROPDOWN": "تغییر حالت بازکردن تعویق"
}
+ },
+ "ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent assignment",
+ "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here"
+ },
+ "ASSIGNMENT_POLICY": {
+ "TITLE": "Assignment policy",
+ "DESCRIPTION": "Manage how conversations get assigned in inboxes.",
+ "FEATURES": [
+ "Assign by conversations evenly or by available capacity",
+ "Add fair distribution rules to avoid overloading any agent",
+ "Add inboxes to a policy - one policy per inbox"
+ ]
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "TITLE": "Agent capacity policy",
+ "DESCRIPTION": "Manage workload for agents.",
+ "FEATURES": [
+ "Define maximum conversations per inbox",
+ "Create exceptions based on labels and time",
+ "Add agents to a policy - one policy per agent"
+ ]
+ }
+ },
+ "AGENT_ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Assignment policy",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "ORDER": "Order",
+ "PRIORITY": "اولویت",
+ "ACTIVE": "فعال",
+ "INACTIVE": "Inactive",
+ "POPOVER": "Added inboxes",
+ "EDIT": "ویرایش"
+ },
+ "NO_RECORDS_FOUND": "No assignment policies found"
+ },
+ "CREATE": {
+ "HEADER": {
+ "TITLE": "Create assignment policy"
+ },
+ "CREATE_BUTTON": "Create policy",
+ "API": {
+ "SUCCESS_MESSAGE": "Assignment policy created successfully",
+ "ERROR_MESSAGE": "Failed to create assignment policy"
+ }
+ },
+ "EDIT": {
+ "HEADER": {
+ "TITLE": "Edit assignment policy"
+ },
+ "EDIT_BUTTON": "Update policy",
+ "CONFIRM_ADD_INBOX_DIALOG": {
+ "TITLE": "Add inbox",
+ "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.",
+ "CONFIRM_BUTTON_LABEL": "Continue",
+ "CANCEL_BUTTON_LABEL": "انصراف"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Assignment policy updated successfully",
+ "ERROR_MESSAGE": "Failed to update assignment policy"
+ },
+ "INBOX_API": {
+ "ADD": {
+ "SUCCESS_MESSAGE": "Inbox added to policy successfully",
+ "ERROR_MESSAGE": "Failed to add inbox to policy"
+ },
+ "REMOVE": {
+ "SUCCESS_MESSAGE": "Inbox removed from policy successfully",
+ "ERROR_MESSAGE": "Failed to remove inbox from policy"
+ }
+ }
+ },
+ "FORM": {
+ "NAME": {
+ "LABEL": "Policy name:",
+ "PLACEHOLDER": "Enter policy name"
+ },
+ "DESCRIPTION": {
+ "LABEL": "توضیحات:",
+ "PLACEHOLDER": "Enter description"
+ },
+ "STATUS": {
+ "LABEL": "وضعیت:",
+ "PLACEHOLDER": "Select status",
+ "ACTIVE": "Policy is active",
+ "INACTIVE": "Policy is inactive"
+ },
+ "ASSIGNMENT_ORDER": {
+ "LABEL": "Assignment order",
+ "ROUND_ROBIN": {
+ "LABEL": "Round robin",
+ "DESCRIPTION": "Assign conversations evenly among agents."
+ },
+ "BALANCED": {
+ "LABEL": "Balanced",
+ "DESCRIPTION": "Assign conversations based on available capacity."
+ }
+ },
+ "ASSIGNMENT_PRIORITY": {
+ "LABEL": "Assignment priority",
+ "EARLIEST_CREATED": {
+ "LABEL": "Earliest created",
+ "DESCRIPTION": "The conversation that was created first gets assigned first."
+ },
+ "LONGEST_WAITING": {
+ "LABEL": "Longest waiting",
+ "DESCRIPTION": "The conversation waiting the longest gets assigned first."
+ }
+ },
+ "FAIR_DISTRIBUTION": {
+ "LABEL": "Fair distribution policy",
+ "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.",
+ "INPUT_MAX": "Assign max",
+ "DURATION": "Conversations per agent in every"
+ },
+ "INBOXES": {
+ "LABEL": "Added inboxes",
+ "DESCRIPTION": "Add inboxes for which this policy will be applicable.",
+ "ADD_BUTTON": "Add inbox",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select inboxes to add",
+ "ADD_BUTTON": "افزودن"
+ },
+ "EMPTY_STATE": "No inboxes added to this policy, add an inbox to get started",
+ "API": {
+ "SUCCESS_MESSAGE": "Inbox successfully added to policy",
+ "ERROR_MESSAGE": "Failed to add inbox to policy"
+ }
+ }
+ },
+ "DELETE_POLICY": {
+ "SUCCESS_MESSAGE": "Assignment policy deleted successfully",
+ "ERROR_MESSAGE": "Failed to delete assignment policy"
+ }
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent capacity",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "POPOVER": "Added agents",
+ "EDIT": "ویرایش"
+ },
+ "NO_RECORDS_FOUND": "No agent capacity policies found"
+ },
+ "CREATE": {
+ "HEADER": {
+ "TITLE": "Create agent capacity policy"
+ },
+ "CREATE_BUTTON": "Create policy",
+ "API": {
+ "SUCCESS_MESSAGE": "Agent capacity policy created successfully",
+ "ERROR_MESSAGE": "Failed to create agent capacity policy"
+ }
+ },
+ "EDIT": {
+ "HEADER": {
+ "TITLE": "Edit agent capacity policy"
+ },
+ "EDIT_BUTTON": "Update policy",
+ "CONFIRM_ADD_AGENT_DIALOG": {
+ "TITLE": "Add agent",
+ "DESCRIPTION": "{agentName} is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.",
+ "CONFIRM_BUTTON_LABEL": "Continue",
+ "CANCEL_BUTTON_LABEL": "انصراف"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Agent capacity policy updated successfully",
+ "ERROR_MESSAGE": "Failed to update agent capacity policy"
+ },
+ "AGENT_API": {
+ "ADD": {
+ "SUCCESS_MESSAGE": "Agent added to policy successfully",
+ "ERROR_MESSAGE": "Failed to add agent to policy"
+ },
+ "REMOVE": {
+ "SUCCESS_MESSAGE": "Agent removed from policy successfully",
+ "ERROR_MESSAGE": "Failed to remove agent from policy"
+ }
+ }
+ },
+ "FORM": {
+ "NAME": {
+ "LABEL": "Policy name:",
+ "PLACEHOLDER": "Enter policy name"
+ },
+ "DESCRIPTION": {
+ "LABEL": "توضیحات:",
+ "PLACEHOLDER": "Enter description"
+ },
+ "INBOX_CAPACITY_LIMIT": {
+ "LABEL": "Inbox capacity limits",
+ "ADD_BUTTON": "Add inbox",
+ "FIELD": {
+ "SELECT_INBOX": "Select inbox",
+ "MAX_CONVERSATIONS": "Max conversations",
+ "SET_LIMIT": "Set limit"
+ },
+ "EMPTY_STATE": "No inbox limit set"
+ },
+ "EXCLUSION_RULES": {
+ "LABEL": "Exclusion rules",
+ "DESCRIPTION": "Conversations that satisfy the following conditions would not count towards agent capacity",
+ "TAGS": {
+ "LABEL": "Exclude conversations tagged with specific labels",
+ "ADD_TAG": "add tag",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select tags to add"
+ },
+ "EMPTY_STATE": "No tags added to this policy."
+ },
+ "DURATION": {
+ "LABEL": "Exclude conversations older than a specified duration",
+ "PLACEHOLDER": "Set time"
+ }
+ },
+ "USERS": {
+ "LABEL": "Assigned agents",
+ "DESCRIPTION": "Add agents for which this policy will be applicable.",
+ "ADD_BUTTON": "Add agent",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select agents to add",
+ "ADD_BUTTON": "افزودن"
+ },
+ "EMPTY_STATE": "No agents added",
+ "API": {
+ "SUCCESS_MESSAGE": "Agent successfully added to policy",
+ "ERROR_MESSAGE": "Failed to add agent to policy"
+ }
+ }
+ },
+ "DELETE_POLICY": {
+ "SUCCESS_MESSAGE": "Agent capacity policy deleted successfully",
+ "ERROR_MESSAGE": "Failed to delete agent capacity policy"
+ }
+ },
+ "DELETE_POLICY": {
+ "TITLE": "Delete policy",
+ "DESCRIPTION": "Are you sure you want to delete this policy? This action cannot be undone.",
+ "CONFIRM_BUTTON_LABEL": "حذف",
+ "CANCEL_BUTTON_LABEL": "انصراف"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/fi/conversation.json b/app/javascript/dashboard/i18n/locale/fi/conversation.json
index cb581498b..929b96c41 100644
--- a/app/javascript/dashboard/i18n/locale/fi/conversation.json
+++ b/app/javascript/dashboard/i18n/locale/fi/conversation.json
@@ -71,6 +71,17 @@
"SHOW_LABELS": "Show labels",
"HIDE_LABELS": "Hide labels"
},
+ "VOICE_CALL": {
+ "INCOMING_CALL": "Incoming call",
+ "OUTGOING_CALL": "Outgoing call",
+ "CALL_IN_PROGRESS": "Call in progress",
+ "NO_ANSWER": "No answer",
+ "MISSED_CALL": "Missed call",
+ "CALL_ENDED": "Call ended",
+ "NOT_ANSWERED_YET": "Not answered yet",
+ "THEY_ANSWERED": "They answered",
+ "YOU_ANSWERED": "You answered"
+ },
"HEADER": {
"RESOLVE_ACTION": "Ratkaise",
"REOPEN_ACTION": "Uudelleenavaa",
diff --git a/app/javascript/dashboard/i18n/locale/fi/settings.json b/app/javascript/dashboard/i18n/locale/fi/settings.json
index 99faa10bd..74dd5ead3 100644
--- a/app/javascript/dashboard/i18n/locale/fi/settings.json
+++ b/app/javascript/dashboard/i18n/locale/fi/settings.json
@@ -51,6 +51,13 @@
"LARGER": "Larger",
"EXTRA_LARGE": "Extra Large"
}
+ },
+ "LANGUAGE": {
+ "TITLE": "Preferred Language",
+ "NOTE": "Choose the language you want to use.",
+ "UPDATE_SUCCESS": "Your Language settings have been updated successfully",
+ "UPDATE_ERROR": "There is an error while updating the language settings, please try again",
+ "USE_ACCOUNT_DEFAULT": "Use account default"
}
},
"MESSAGE_SIGNATURE_SECTION": {
@@ -330,6 +337,7 @@
"REPORTS_LABEL": "Tunnisteet",
"REPORTS_INBOX": "Inbox",
"REPORTS_TEAM": "Team",
+ "AGENT_ASSIGNMENT": "Agent Assignment",
"SET_AVAILABILITY_TITLE": "Set yourself as",
"SET_YOUR_AVAILABILITY": "Set your availability",
"SLA": "SLA",
@@ -418,5 +426,255 @@
"SWITCH_TO_REPLY": "Switch to Reply",
"TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown"
}
+ },
+ "ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent assignment",
+ "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here"
+ },
+ "ASSIGNMENT_POLICY": {
+ "TITLE": "Assignment policy",
+ "DESCRIPTION": "Manage how conversations get assigned in inboxes.",
+ "FEATURES": [
+ "Assign by conversations evenly or by available capacity",
+ "Add fair distribution rules to avoid overloading any agent",
+ "Add inboxes to a policy - one policy per inbox"
+ ]
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "TITLE": "Agent capacity policy",
+ "DESCRIPTION": "Manage workload for agents.",
+ "FEATURES": [
+ "Define maximum conversations per inbox",
+ "Create exceptions based on labels and time",
+ "Add agents to a policy - one policy per agent"
+ ]
+ }
+ },
+ "AGENT_ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Assignment policy",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "ORDER": "Order",
+ "PRIORITY": "Priority",
+ "ACTIVE": "Active",
+ "INACTIVE": "Inactive",
+ "POPOVER": "Added inboxes",
+ "EDIT": "Muokkaa"
+ },
+ "NO_RECORDS_FOUND": "No assignment policies found"
+ },
+ "CREATE": {
+ "HEADER": {
+ "TITLE": "Create assignment policy"
+ },
+ "CREATE_BUTTON": "Create policy",
+ "API": {
+ "SUCCESS_MESSAGE": "Assignment policy created successfully",
+ "ERROR_MESSAGE": "Failed to create assignment policy"
+ }
+ },
+ "EDIT": {
+ "HEADER": {
+ "TITLE": "Edit assignment policy"
+ },
+ "EDIT_BUTTON": "Update policy",
+ "CONFIRM_ADD_INBOX_DIALOG": {
+ "TITLE": "Add inbox",
+ "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.",
+ "CONFIRM_BUTTON_LABEL": "Continue",
+ "CANCEL_BUTTON_LABEL": "Peruuta"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Assignment policy updated successfully",
+ "ERROR_MESSAGE": "Failed to update assignment policy"
+ },
+ "INBOX_API": {
+ "ADD": {
+ "SUCCESS_MESSAGE": "Inbox added to policy successfully",
+ "ERROR_MESSAGE": "Failed to add inbox to policy"
+ },
+ "REMOVE": {
+ "SUCCESS_MESSAGE": "Inbox removed from policy successfully",
+ "ERROR_MESSAGE": "Failed to remove inbox from policy"
+ }
+ }
+ },
+ "FORM": {
+ "NAME": {
+ "LABEL": "Policy name:",
+ "PLACEHOLDER": "Enter policy name"
+ },
+ "DESCRIPTION": {
+ "LABEL": "Kuvaus:",
+ "PLACEHOLDER": "Enter description"
+ },
+ "STATUS": {
+ "LABEL": "Tila:",
+ "PLACEHOLDER": "Select status",
+ "ACTIVE": "Policy is active",
+ "INACTIVE": "Policy is inactive"
+ },
+ "ASSIGNMENT_ORDER": {
+ "LABEL": "Assignment order",
+ "ROUND_ROBIN": {
+ "LABEL": "Round robin",
+ "DESCRIPTION": "Assign conversations evenly among agents."
+ },
+ "BALANCED": {
+ "LABEL": "Balanced",
+ "DESCRIPTION": "Assign conversations based on available capacity."
+ }
+ },
+ "ASSIGNMENT_PRIORITY": {
+ "LABEL": "Assignment priority",
+ "EARLIEST_CREATED": {
+ "LABEL": "Earliest created",
+ "DESCRIPTION": "The conversation that was created first gets assigned first."
+ },
+ "LONGEST_WAITING": {
+ "LABEL": "Longest waiting",
+ "DESCRIPTION": "The conversation waiting the longest gets assigned first."
+ }
+ },
+ "FAIR_DISTRIBUTION": {
+ "LABEL": "Fair distribution policy",
+ "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.",
+ "INPUT_MAX": "Assign max",
+ "DURATION": "Conversations per agent in every"
+ },
+ "INBOXES": {
+ "LABEL": "Added inboxes",
+ "DESCRIPTION": "Add inboxes for which this policy will be applicable.",
+ "ADD_BUTTON": "Add inbox",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select inboxes to add",
+ "ADD_BUTTON": "Add"
+ },
+ "EMPTY_STATE": "No inboxes added to this policy, add an inbox to get started",
+ "API": {
+ "SUCCESS_MESSAGE": "Inbox successfully added to policy",
+ "ERROR_MESSAGE": "Failed to add inbox to policy"
+ }
+ }
+ },
+ "DELETE_POLICY": {
+ "SUCCESS_MESSAGE": "Assignment policy deleted successfully",
+ "ERROR_MESSAGE": "Failed to delete assignment policy"
+ }
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent capacity",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "POPOVER": "Added agents",
+ "EDIT": "Muokkaa"
+ },
+ "NO_RECORDS_FOUND": "No agent capacity policies found"
+ },
+ "CREATE": {
+ "HEADER": {
+ "TITLE": "Create agent capacity policy"
+ },
+ "CREATE_BUTTON": "Create policy",
+ "API": {
+ "SUCCESS_MESSAGE": "Agent capacity policy created successfully",
+ "ERROR_MESSAGE": "Failed to create agent capacity policy"
+ }
+ },
+ "EDIT": {
+ "HEADER": {
+ "TITLE": "Edit agent capacity policy"
+ },
+ "EDIT_BUTTON": "Update policy",
+ "CONFIRM_ADD_AGENT_DIALOG": {
+ "TITLE": "Add agent",
+ "DESCRIPTION": "{agentName} is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.",
+ "CONFIRM_BUTTON_LABEL": "Continue",
+ "CANCEL_BUTTON_LABEL": "Peruuta"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Agent capacity policy updated successfully",
+ "ERROR_MESSAGE": "Failed to update agent capacity policy"
+ },
+ "AGENT_API": {
+ "ADD": {
+ "SUCCESS_MESSAGE": "Agent added to policy successfully",
+ "ERROR_MESSAGE": "Failed to add agent to policy"
+ },
+ "REMOVE": {
+ "SUCCESS_MESSAGE": "Agent removed from policy successfully",
+ "ERROR_MESSAGE": "Failed to remove agent from policy"
+ }
+ }
+ },
+ "FORM": {
+ "NAME": {
+ "LABEL": "Policy name:",
+ "PLACEHOLDER": "Enter policy name"
+ },
+ "DESCRIPTION": {
+ "LABEL": "Kuvaus:",
+ "PLACEHOLDER": "Enter description"
+ },
+ "INBOX_CAPACITY_LIMIT": {
+ "LABEL": "Inbox capacity limits",
+ "ADD_BUTTON": "Add inbox",
+ "FIELD": {
+ "SELECT_INBOX": "Select inbox",
+ "MAX_CONVERSATIONS": "Max conversations",
+ "SET_LIMIT": "Set limit"
+ },
+ "EMPTY_STATE": "No inbox limit set"
+ },
+ "EXCLUSION_RULES": {
+ "LABEL": "Exclusion rules",
+ "DESCRIPTION": "Conversations that satisfy the following conditions would not count towards agent capacity",
+ "TAGS": {
+ "LABEL": "Exclude conversations tagged with specific labels",
+ "ADD_TAG": "add tag",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select tags to add"
+ },
+ "EMPTY_STATE": "No tags added to this policy."
+ },
+ "DURATION": {
+ "LABEL": "Exclude conversations older than a specified duration",
+ "PLACEHOLDER": "Set time"
+ }
+ },
+ "USERS": {
+ "LABEL": "Assigned agents",
+ "DESCRIPTION": "Add agents for which this policy will be applicable.",
+ "ADD_BUTTON": "Add agent",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select agents to add",
+ "ADD_BUTTON": "Add"
+ },
+ "EMPTY_STATE": "No agents added",
+ "API": {
+ "SUCCESS_MESSAGE": "Agent successfully added to policy",
+ "ERROR_MESSAGE": "Failed to add agent to policy"
+ }
+ }
+ },
+ "DELETE_POLICY": {
+ "SUCCESS_MESSAGE": "Agent capacity policy deleted successfully",
+ "ERROR_MESSAGE": "Failed to delete agent capacity policy"
+ }
+ },
+ "DELETE_POLICY": {
+ "TITLE": "Delete policy",
+ "DESCRIPTION": "Are you sure you want to delete this policy? This action cannot be undone.",
+ "CONFIRM_BUTTON_LABEL": "Poista",
+ "CANCEL_BUTTON_LABEL": "Peruuta"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/fr/auditLogs.json b/app/javascript/dashboard/i18n/locale/fr/auditLogs.json
index fde634766..8a4cd8c93 100644
--- a/app/javascript/dashboard/i18n/locale/fr/auditLogs.json
+++ b/app/javascript/dashboard/i18n/locale/fr/auditLogs.json
@@ -71,7 +71,7 @@
"EDIT": "{agentName} updated the account configuration (#{id})"
},
"CONVERSATION": {
- "DELETE": "{agentName} deleted conversation #{id}"
+ "DELETE": "{agentName} a supprimé la conversation #{id}"
}
}
}
diff --git a/app/javascript/dashboard/i18n/locale/fr/automation.json b/app/javascript/dashboard/i18n/locale/fr/automation.json
index 11a1ddfe6..bcaee4d2b 100644
--- a/app/javascript/dashboard/i18n/locale/fr/automation.json
+++ b/app/javascript/dashboard/i18n/locale/fr/automation.json
@@ -131,7 +131,7 @@
"CONVERSATION_CREATED": "Conversation créée",
"CONVERSATION_UPDATED": "Conversation mise à jour",
"MESSAGE_CREATED": "Message créé",
- "CONVERSATION_RESOLVED": "Conversation Resolved",
+ "CONVERSATION_RESOLVED": "Conversation terminée",
"CONVERSATION_OPENED": "Conversation ouverte"
},
"ACTIONS": {
@@ -153,8 +153,8 @@
"OPEN_CONVERSATION": "Ouvrir la conversation"
},
"MESSAGE_TYPES": {
- "INCOMING": "Incoming Message",
- "OUTGOING": "Outgoing Message"
+ "INCOMING": "Boite de réception",
+ "OUTGOING": "Message envoyé"
},
"PRIORITY_TYPES": {
"NONE": "Aucun",
diff --git a/app/javascript/dashboard/i18n/locale/fr/campaign.json b/app/javascript/dashboard/i18n/locale/fr/campaign.json
index 7b4da13fe..b2bbede32 100644
--- a/app/javascript/dashboard/i18n/locale/fr/campaign.json
+++ b/app/javascript/dashboard/i18n/locale/fr/campaign.json
@@ -138,11 +138,11 @@
}
},
"WHATSAPP": {
- "HEADER_TITLE": "WhatsApp campaigns",
+ "HEADER_TITLE": "Campagnes WhatsApp",
"NEW_CAMPAIGN": "Create campaign",
"EMPTY_STATE": {
- "TITLE": "No WhatsApp campaigns are available",
- "SUBTITLE": "Launch a WhatsApp campaign to reach your customers directly. Send offers or make announcements with ease. Click 'Create campaign' to get started."
+ "TITLE": "Aucune campagne WhatsApp n’est disponible",
+ "SUBTITLE": "Lancez une campagne WhatsApp pour toucher directement vos clients. Envoyez des offres ou faites des annonces en toute simplicité. Cliquez sur “Créer une campagne” pour commencer."
},
"CARD": {
"STATUS": {
@@ -155,7 +155,7 @@
}
},
"CREATE": {
- "TITLE": "Create WhatsApp campaign",
+ "TITLE": "Créer une campagne WhatsApp",
"CANCEL_BUTTON_TEXT": "Annuler",
"CREATE_BUTTON_TEXT": "Créer",
"FORM": {
@@ -170,15 +170,15 @@
"ERROR": "La boîte de réception est requise"
},
"TEMPLATE": {
- "LABEL": "WhatsApp Template",
- "PLACEHOLDER": "Select a template",
- "INFO": "Select a template to use for this campaign.",
- "ERROR": "Template is required",
+ "LABEL": "Modèle WhatsApp",
+ "PLACEHOLDER": "Sélectionner un modèle",
+ "INFO": "Sélectionnez un modèle pour cette campagne.",
+ "ERROR": "Un modèle est requis",
"PREVIEW_TITLE": "Traiter {templateName}",
"LANGUAGE": "Langue",
"CATEGORY": "Catégorie",
"VARIABLES_LABEL": "Variables",
- "VARIABLE_PLACEHOLDER": "Enter value for {variable}"
+ "VARIABLE_PLACEHOLDER": "Entrez une valeur pour {variable}"
},
"AUDIENCE": {
"LABEL": "Audience",
@@ -195,7 +195,7 @@
"CANCEL": "Annuler"
},
"API": {
- "SUCCESS_MESSAGE": "WhatsApp campaign created successfully",
+ "SUCCESS_MESSAGE": "Campagne WhatsApp créée avec succès",
"ERROR_MESSAGE": "Une erreur est survenue, veuillez réessayer."
}
}
diff --git a/app/javascript/dashboard/i18n/locale/fr/components.json b/app/javascript/dashboard/i18n/locale/fr/components.json
index 491f0d493..49535efce 100644
--- a/app/javascript/dashboard/i18n/locale/fr/components.json
+++ b/app/javascript/dashboard/i18n/locale/fr/components.json
@@ -51,6 +51,6 @@
"PLACEHOLDER": "Entrez la durée"
},
"CHANNEL_SELECTOR": {
- "COMING_SOON": "Coming Soon!"
+ "COMING_SOON": "Bientôt disponible !"
}
}
diff --git a/app/javascript/dashboard/i18n/locale/fr/contact.json b/app/javascript/dashboard/i18n/locale/fr/contact.json
index 41daa558d..723b90371 100644
--- a/app/javascript/dashboard/i18n/locale/fr/contact.json
+++ b/app/javascript/dashboard/i18n/locale/fr/contact.json
@@ -17,10 +17,10 @@
"IP_ADDRESS": "Adresse IP",
"CREATED_AT_LABEL": "Créé",
"NEW_MESSAGE": "Nouveau message",
- "CALL": "Call",
- "CALL_UNDER_DEVELOPMENT": "Calling is under development",
+ "CALL": "Appel",
+ "CALL_UNDER_DEVELOPMENT": "Appel en cours de développement",
"VOICE_INBOX_PICKER": {
- "TITLE": "Choose a voice inbox"
+ "TITLE": "Choisir une boîte de réception vocale"
},
"CONVERSATIONS": {
"NO_RECORDS_FOUND": "Il n'y a aucune conversation précédente associée à ce contact.",
@@ -290,7 +290,7 @@
"HEADER": {
"TITLE": "Contacts",
"SEARCH_TITLE": "Search contacts",
- "ACTIVE_TITLE": "Active contacts",
+ "ACTIVE_TITLE": "Contacts actifs",
"SEARCH_PLACEHOLDER": "Search...",
"MESSAGE_BUTTON": "Message",
"SEND_MESSAGE": "Envoyer un message",
@@ -465,8 +465,8 @@
}
},
"DELETE_CONTACT": {
- "MESSAGE": "This action is permanent and irreversible.",
- "BUTTON": "Delete now"
+ "MESSAGE": "Cette action est permanente et irréversible.",
+ "BUTTON": "Supprimer maintenant"
}
},
"DETAILS": {
@@ -476,7 +476,7 @@
"DELETE_CONTACT": "Supprimer le contact",
"DELETE_DIALOG": {
"TITLE": "Confirmer la suppression",
- "DESCRIPTION": "Are you sure you want to delete this contact?",
+ "DESCRIPTION": "Êtes-vous sûr de vouloir supprimer ce contact ?",
"CONFIRM": "Oui, supprimer",
"API": {
"SUCCESS_MESSAGE": "Contact supprimé avec succès",
@@ -566,7 +566,7 @@
"BUTTON_LABEL": "Add contact",
"SEARCH_EMPTY_STATE_TITLE": "Aucun contact ne correspond à votre recherche 🔍",
"LIST_EMPTY_STATE_TITLE": "No contacts available in this view 📋",
- "ACTIVE_EMPTY_STATE_TITLE": "No contacts are active at the moment 🌙"
+ "ACTIVE_EMPTY_STATE_TITLE": "Aucun contact n'est actif pour le moment 🌙"
}
},
"COMPOSE_NEW_CONVERSATION": {
diff --git a/app/javascript/dashboard/i18n/locale/fr/contentTemplates.json b/app/javascript/dashboard/i18n/locale/fr/contentTemplates.json
index 208e741ea..acd139f27 100644
--- a/app/javascript/dashboard/i18n/locale/fr/contentTemplates.json
+++ b/app/javascript/dashboard/i18n/locale/fr/contentTemplates.json
@@ -1,33 +1,33 @@
{
"CONTENT_TEMPLATES": {
"MODAL": {
- "TITLE": "Twilio Templates",
- "SUBTITLE": "Select the Twilio template you want to send",
- "TEMPLATE_SELECTED_SUBTITLE": "Configure template: {templateName}"
+ "TITLE": "Modèles Twilio",
+ "SUBTITLE": "Sélectionnez le modèle Twilio que vous souhaitez envoyer",
+ "TEMPLATE_SELECTED_SUBTITLE": "Configurer le modèle : {templateName}"
},
"PICKER": {
"SEARCH_PLACEHOLDER": "Rechercher des modèles",
"NO_TEMPLATES_FOUND": "Aucun modèle trouvé pour",
"NO_CONTENT": "No content",
- "HEADER": "Header",
- "BODY": "Body",
- "FOOTER": "Footer",
- "BUTTONS": "Buttons",
+ "HEADER": "En-tête",
+ "BODY": "Corps",
+ "FOOTER": "Pied de page",
+ "BUTTONS": "Boutons",
"CATEGORY": "Catégorie",
- "MEDIA_CONTENT": "Media Content",
- "MEDIA_CONTENT_FALLBACK": "media content",
- "NO_TEMPLATES_AVAILABLE": "No Twilio templates available. Click refresh to sync templates from Twilio.",
- "REFRESH_BUTTON": "Refresh templates",
- "REFRESH_SUCCESS": "Templates refresh initiated. It may take a couple of minutes to update.",
- "REFRESH_ERROR": "Failed to refresh templates. Please try again.",
+ "MEDIA_CONTENT": "Contenu média",
+ "MEDIA_CONTENT_FALLBACK": "contenu multimédia",
+ "NO_TEMPLATES_AVAILABLE": "Aucun modèle Twilio disponible. Cliquez sur Actualiser pour synchroniser les modèles de Twilio.",
+ "REFRESH_BUTTON": "Rafraîchir les modèles",
+ "REFRESH_SUCCESS": "Mise à jour des modèles. La mise à jour peut prendre quelques minutes.",
+ "REFRESH_ERROR": "Échec de la mise à jour des modèles. Veuillez réessayer.",
"LABELS": {
"LANGUAGE": "Langue",
"TEMPLATE_BODY": "Corps du modèle",
"CATEGORY": "Catégorie"
},
"TYPES": {
- "MEDIA": "Media",
- "QUICK_REPLY": "Quick Reply",
+ "MEDIA": "Média",
+ "QUICK_REPLY": "Réponse rapide",
"TEXT": "Texte"
}
},
@@ -39,8 +39,8 @@
"GO_BACK_LABEL": "Retour",
"SEND_MESSAGE_LABEL": "Envoyer un message",
"FORM_ERROR_MESSAGE": "Veuillez remplir toutes les variables avant d'envoyer",
- "MEDIA_HEADER_LABEL": "{type} Header",
- "MEDIA_URL_LABEL": "Enter full media URL",
+ "MEDIA_HEADER_LABEL": "En-tête {type}",
+ "MEDIA_URL_LABEL": "Saisissez l'URL complète du média",
"MEDIA_URL_PLACEHOLDER": "https://example.com/image.jpg"
},
"FORM": {
diff --git a/app/javascript/dashboard/i18n/locale/fr/conversation.json b/app/javascript/dashboard/i18n/locale/fr/conversation.json
index d478d3485..101a5f7f7 100644
--- a/app/javascript/dashboard/i18n/locale/fr/conversation.json
+++ b/app/javascript/dashboard/i18n/locale/fr/conversation.json
@@ -35,11 +35,11 @@
"API_HOURS_WINDOW": "Vous ne pouvez répondre à cette conversation que dans un délai de {hours} heures",
"NOT_ASSIGNED_TO_YOU": "Cette conversation ne vous est pas assignée. Voulez-vous vous assigner cette conversation ?",
"ASSIGN_TO_ME": "M’assigner la conversation",
- "BOT_HANDOFF_MESSAGE": "You are responding to a conversation which is currently handled by an assistant or a bot.",
- "BOT_HANDOFF_ACTION": "Mark open and assign to you",
- "BOT_HANDOFF_REOPEN_ACTION": "Mark conversation open",
- "BOT_HANDOFF_SUCCESS": "Conversation has been handed over to you",
- "BOT_HANDOFF_ERROR": "Failed to take over the conversation. Please try again.",
+ "BOT_HANDOFF_MESSAGE": "Vous répondez à une conversation actuellement gérée par un assistant ou un bot.",
+ "BOT_HANDOFF_ACTION": "Ouvrir et m’attribuer",
+ "BOT_HANDOFF_REOPEN_ACTION": "Marquer la conversation comme ouverte",
+ "BOT_HANDOFF_SUCCESS": "La conversation vous a été attribuée",
+ "BOT_HANDOFF_ERROR": "Impossible de reprendre la conversation. Veuillez réessayer.",
"TWILIO_WHATSAPP_CAN_REPLY": "Vous pouvez seulement répondre à cette conversation en utilisant un modèle de message en raison de",
"TWILIO_WHATSAPP_24_HOURS_WINDOW": "Restriction de fenêtre de message de 24 heures",
"OLD_INSTAGRAM_INBOX_REPLY_BANNER": "Ce compte Instagram a été migré vers la nouvelle boîte de réception du canal Instagram. Tous les nouveaux messages y apparaîtront. Vous ne pourrez plus envoyer de messages depuis cette conversation.",
@@ -71,11 +71,22 @@
"SHOW_LABELS": "Afficher les étiquettes",
"HIDE_LABELS": "Masquer les étiquettes"
},
+ "VOICE_CALL": {
+ "INCOMING_CALL": "Appel entrant",
+ "OUTGOING_CALL": "Appel sortant",
+ "CALL_IN_PROGRESS": "Appel en cours",
+ "NO_ANSWER": "Pas de réponse",
+ "MISSED_CALL": "Appel manqué",
+ "CALL_ENDED": "Appel terminé",
+ "NOT_ANSWERED_YET": "Pas encore répondu",
+ "THEY_ANSWERED": "Il a répondu",
+ "YOU_ANSWERED": "Vous avez répondu"
+ },
"HEADER": {
"RESOLVE_ACTION": "Résoudre",
"REOPEN_ACTION": "Ré-ouvrir",
"OPEN_ACTION": "Ouvert",
- "MORE_ACTIONS": "More actions",
+ "MORE_ACTIONS": "Plus d'actions",
"OPEN": "Plus",
"CLOSE": "Fermer",
"DETAILS": "détails",
@@ -128,8 +139,8 @@
}
},
"DELETE_CONVERSATION": {
- "TITLE": "Delete conversation #{conversationId}",
- "DESCRIPTION": "Are you sure you want to delete this conversation?",
+ "TITLE": "Supprimer la conversation #{conversationId}",
+ "DESCRIPTION": "Êtes-vous sûr de vouloir supprimer cette conversation ?",
"CONFIRM": "Supprimer"
},
"CARD_CONTEXT_MENU": {
@@ -148,10 +159,10 @@
"ASSIGN_LABEL": "Assigner une étiquette",
"AGENTS_LOADING": "Chargement des agents...",
"ASSIGN_TEAM": "Assigner une équipe",
- "DELETE": "Delete conversation",
- "OPEN_IN_NEW_TAB": "Open in new tab",
- "COPY_LINK": "Copy conversation link",
- "COPY_LINK_SUCCESS": "Conversation link copied to clipboard",
+ "DELETE": "Supprimer la conversation",
+ "OPEN_IN_NEW_TAB": "Ouvrir dans un nouvel onglet",
+ "COPY_LINK": "Copier le lien de la conversation",
+ "COPY_LINK_SUCCESS": "Le lien de conversation a été copié dans le presse-papiers",
"API": {
"AGENT_ASSIGNMENT": {
"SUCCESFUL": "Conversation id {conversationId} assignée à \"{agentName}\"",
@@ -226,8 +237,8 @@
"ASSIGN_LABEL_SUCCESFUL": "Étiquette attribuée avec succès",
"ASSIGN_LABEL_FAILED": "Échec de l'attribution de l'étiquette",
"CHANGE_TEAM": "L'équipe de conversation a été modifiée",
- "SUCCESS_DELETE_CONVERSATION": "Conversation deleted successfully",
- "FAIL_DELETE_CONVERSATION": "Couldn't delete conversation! Try again",
+ "SUCCESS_DELETE_CONVERSATION": "Conversation supprimée avec succès",
+ "FAIL_DELETE_CONVERSATION": "Impossible de supprimer la conversation ! Veuillez réessayer",
"FILE_SIZE_LIMIT": "Le fichier dépasse la limite de {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} pour les pièces jointes",
"MESSAGE_ERROR": "Impossible d'envoyer ce message, veuillez réessayer plus tard",
"SENT_BY": "Envoyé par:",
diff --git a/app/javascript/dashboard/i18n/locale/fr/settings.json b/app/javascript/dashboard/i18n/locale/fr/settings.json
index 96ac90636..a81df1aa1 100644
--- a/app/javascript/dashboard/i18n/locale/fr/settings.json
+++ b/app/javascript/dashboard/i18n/locale/fr/settings.json
@@ -51,6 +51,13 @@
"LARGER": "Larger",
"EXTRA_LARGE": "Extra Large"
}
+ },
+ "LANGUAGE": {
+ "TITLE": "Preferred Language",
+ "NOTE": "Choose the language you want to use.",
+ "UPDATE_SUCCESS": "Your Language settings have been updated successfully",
+ "UPDATE_ERROR": "There is an error while updating the language settings, please try again",
+ "USE_ACCOUNT_DEFAULT": "Use account default"
}
},
"MESSAGE_SIGNATURE_SECTION": {
@@ -330,6 +337,7 @@
"REPORTS_LABEL": "Étiquettes",
"REPORTS_INBOX": "Boîte de réception",
"REPORTS_TEAM": "Équipes",
+ "AGENT_ASSIGNMENT": "Agent Assignment",
"SET_AVAILABILITY_TITLE": "Se définir comme",
"SET_YOUR_AVAILABILITY": "Définissez votre disponibilité",
"SLA": "SLA",
@@ -418,5 +426,255 @@
"SWITCH_TO_REPLY": "Basculer vers la réponse",
"TOGGLE_SNOOZE_DROPDOWN": "Activer/désactiver la liste déroulante de répétition"
}
+ },
+ "ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent assignment",
+ "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here"
+ },
+ "ASSIGNMENT_POLICY": {
+ "TITLE": "Assignment policy",
+ "DESCRIPTION": "Manage how conversations get assigned in inboxes.",
+ "FEATURES": [
+ "Assign by conversations evenly or by available capacity",
+ "Add fair distribution rules to avoid overloading any agent",
+ "Add inboxes to a policy - one policy per inbox"
+ ]
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "TITLE": "Agent capacity policy",
+ "DESCRIPTION": "Manage workload for agents.",
+ "FEATURES": [
+ "Define maximum conversations per inbox",
+ "Create exceptions based on labels and time",
+ "Add agents to a policy - one policy per agent"
+ ]
+ }
+ },
+ "AGENT_ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Assignment policy",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "ORDER": "Order",
+ "PRIORITY": "Priorité",
+ "ACTIVE": "Actif",
+ "INACTIVE": "Inactive",
+ "POPOVER": "Added inboxes",
+ "EDIT": "Modifier"
+ },
+ "NO_RECORDS_FOUND": "No assignment policies found"
+ },
+ "CREATE": {
+ "HEADER": {
+ "TITLE": "Create assignment policy"
+ },
+ "CREATE_BUTTON": "Create policy",
+ "API": {
+ "SUCCESS_MESSAGE": "Assignment policy created successfully",
+ "ERROR_MESSAGE": "Failed to create assignment policy"
+ }
+ },
+ "EDIT": {
+ "HEADER": {
+ "TITLE": "Edit assignment policy"
+ },
+ "EDIT_BUTTON": "Update policy",
+ "CONFIRM_ADD_INBOX_DIALOG": {
+ "TITLE": "Add inbox",
+ "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.",
+ "CONFIRM_BUTTON_LABEL": "Continue",
+ "CANCEL_BUTTON_LABEL": "Annuler"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Assignment policy updated successfully",
+ "ERROR_MESSAGE": "Failed to update assignment policy"
+ },
+ "INBOX_API": {
+ "ADD": {
+ "SUCCESS_MESSAGE": "Inbox added to policy successfully",
+ "ERROR_MESSAGE": "Failed to add inbox to policy"
+ },
+ "REMOVE": {
+ "SUCCESS_MESSAGE": "Inbox removed from policy successfully",
+ "ERROR_MESSAGE": "Failed to remove inbox from policy"
+ }
+ }
+ },
+ "FORM": {
+ "NAME": {
+ "LABEL": "Policy name:",
+ "PLACEHOLDER": "Enter policy name"
+ },
+ "DESCRIPTION": {
+ "LABEL": "Description:",
+ "PLACEHOLDER": "Enter description"
+ },
+ "STATUS": {
+ "LABEL": "État:",
+ "PLACEHOLDER": "Select status",
+ "ACTIVE": "Policy is active",
+ "INACTIVE": "Policy is inactive"
+ },
+ "ASSIGNMENT_ORDER": {
+ "LABEL": "Assignment order",
+ "ROUND_ROBIN": {
+ "LABEL": "Round robin",
+ "DESCRIPTION": "Assign conversations evenly among agents."
+ },
+ "BALANCED": {
+ "LABEL": "Balanced",
+ "DESCRIPTION": "Assign conversations based on available capacity."
+ }
+ },
+ "ASSIGNMENT_PRIORITY": {
+ "LABEL": "Assignment priority",
+ "EARLIEST_CREATED": {
+ "LABEL": "Earliest created",
+ "DESCRIPTION": "The conversation that was created first gets assigned first."
+ },
+ "LONGEST_WAITING": {
+ "LABEL": "Longest waiting",
+ "DESCRIPTION": "The conversation waiting the longest gets assigned first."
+ }
+ },
+ "FAIR_DISTRIBUTION": {
+ "LABEL": "Fair distribution policy",
+ "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.",
+ "INPUT_MAX": "Assign max",
+ "DURATION": "Conversations per agent in every"
+ },
+ "INBOXES": {
+ "LABEL": "Added inboxes",
+ "DESCRIPTION": "Add inboxes for which this policy will be applicable.",
+ "ADD_BUTTON": "Add inbox",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select inboxes to add",
+ "ADD_BUTTON": "Ajouter"
+ },
+ "EMPTY_STATE": "No inboxes added to this policy, add an inbox to get started",
+ "API": {
+ "SUCCESS_MESSAGE": "Inbox successfully added to policy",
+ "ERROR_MESSAGE": "Failed to add inbox to policy"
+ }
+ }
+ },
+ "DELETE_POLICY": {
+ "SUCCESS_MESSAGE": "Assignment policy deleted successfully",
+ "ERROR_MESSAGE": "Failed to delete assignment policy"
+ }
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent capacity",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "POPOVER": "Added agents",
+ "EDIT": "Modifier"
+ },
+ "NO_RECORDS_FOUND": "No agent capacity policies found"
+ },
+ "CREATE": {
+ "HEADER": {
+ "TITLE": "Create agent capacity policy"
+ },
+ "CREATE_BUTTON": "Create policy",
+ "API": {
+ "SUCCESS_MESSAGE": "Agent capacity policy created successfully",
+ "ERROR_MESSAGE": "Failed to create agent capacity policy"
+ }
+ },
+ "EDIT": {
+ "HEADER": {
+ "TITLE": "Edit agent capacity policy"
+ },
+ "EDIT_BUTTON": "Update policy",
+ "CONFIRM_ADD_AGENT_DIALOG": {
+ "TITLE": "Add agent",
+ "DESCRIPTION": "{agentName} is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.",
+ "CONFIRM_BUTTON_LABEL": "Continue",
+ "CANCEL_BUTTON_LABEL": "Annuler"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Agent capacity policy updated successfully",
+ "ERROR_MESSAGE": "Failed to update agent capacity policy"
+ },
+ "AGENT_API": {
+ "ADD": {
+ "SUCCESS_MESSAGE": "Agent added to policy successfully",
+ "ERROR_MESSAGE": "Failed to add agent to policy"
+ },
+ "REMOVE": {
+ "SUCCESS_MESSAGE": "Agent removed from policy successfully",
+ "ERROR_MESSAGE": "Failed to remove agent from policy"
+ }
+ }
+ },
+ "FORM": {
+ "NAME": {
+ "LABEL": "Policy name:",
+ "PLACEHOLDER": "Enter policy name"
+ },
+ "DESCRIPTION": {
+ "LABEL": "Description:",
+ "PLACEHOLDER": "Enter description"
+ },
+ "INBOX_CAPACITY_LIMIT": {
+ "LABEL": "Inbox capacity limits",
+ "ADD_BUTTON": "Add inbox",
+ "FIELD": {
+ "SELECT_INBOX": "Select inbox",
+ "MAX_CONVERSATIONS": "Max conversations",
+ "SET_LIMIT": "Set limit"
+ },
+ "EMPTY_STATE": "No inbox limit set"
+ },
+ "EXCLUSION_RULES": {
+ "LABEL": "Exclusion rules",
+ "DESCRIPTION": "Conversations that satisfy the following conditions would not count towards agent capacity",
+ "TAGS": {
+ "LABEL": "Exclude conversations tagged with specific labels",
+ "ADD_TAG": "add tag",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select tags to add"
+ },
+ "EMPTY_STATE": "No tags added to this policy."
+ },
+ "DURATION": {
+ "LABEL": "Exclude conversations older than a specified duration",
+ "PLACEHOLDER": "Set time"
+ }
+ },
+ "USERS": {
+ "LABEL": "Assigned agents",
+ "DESCRIPTION": "Add agents for which this policy will be applicable.",
+ "ADD_BUTTON": "Add agent",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select agents to add",
+ "ADD_BUTTON": "Ajouter"
+ },
+ "EMPTY_STATE": "No agents added",
+ "API": {
+ "SUCCESS_MESSAGE": "Agent successfully added to policy",
+ "ERROR_MESSAGE": "Failed to add agent to policy"
+ }
+ }
+ },
+ "DELETE_POLICY": {
+ "SUCCESS_MESSAGE": "Agent capacity policy deleted successfully",
+ "ERROR_MESSAGE": "Failed to delete agent capacity policy"
+ }
+ },
+ "DELETE_POLICY": {
+ "TITLE": "Delete policy",
+ "DESCRIPTION": "Are you sure you want to delete this policy? This action cannot be undone.",
+ "CONFIRM_BUTTON_LABEL": "Supprimer",
+ "CANCEL_BUTTON_LABEL": "Annuler"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/he/conversation.json b/app/javascript/dashboard/i18n/locale/he/conversation.json
index 507d64074..55eb3e99f 100644
--- a/app/javascript/dashboard/i18n/locale/he/conversation.json
+++ b/app/javascript/dashboard/i18n/locale/he/conversation.json
@@ -71,6 +71,17 @@
"SHOW_LABELS": "הצג תויות",
"HIDE_LABELS": "הסתר תוויות"
},
+ "VOICE_CALL": {
+ "INCOMING_CALL": "Incoming call",
+ "OUTGOING_CALL": "Outgoing call",
+ "CALL_IN_PROGRESS": "Call in progress",
+ "NO_ANSWER": "No answer",
+ "MISSED_CALL": "Missed call",
+ "CALL_ENDED": "Call ended",
+ "NOT_ANSWERED_YET": "Not answered yet",
+ "THEY_ANSWERED": "They answered",
+ "YOU_ANSWERED": "You answered"
+ },
"HEADER": {
"RESOLVE_ACTION": "פתרון",
"REOPEN_ACTION": "פתח מחדש",
diff --git a/app/javascript/dashboard/i18n/locale/he/settings.json b/app/javascript/dashboard/i18n/locale/he/settings.json
index d6c5fe90f..918e84770 100644
--- a/app/javascript/dashboard/i18n/locale/he/settings.json
+++ b/app/javascript/dashboard/i18n/locale/he/settings.json
@@ -51,6 +51,13 @@
"LARGER": "Larger",
"EXTRA_LARGE": "Extra Large"
}
+ },
+ "LANGUAGE": {
+ "TITLE": "Preferred Language",
+ "NOTE": "Choose the language you want to use.",
+ "UPDATE_SUCCESS": "Your Language settings have been updated successfully",
+ "UPDATE_ERROR": "There is an error while updating the language settings, please try again",
+ "USE_ACCOUNT_DEFAULT": "Use account default"
}
},
"MESSAGE_SIGNATURE_SECTION": {
@@ -330,6 +337,7 @@
"REPORTS_LABEL": "תוויות",
"REPORTS_INBOX": "תיבת הדואר הנכנס",
"REPORTS_TEAM": "צוות",
+ "AGENT_ASSIGNMENT": "Agent Assignment",
"SET_AVAILABILITY_TITLE": "הגדר את עצמך בתור",
"SET_YOUR_AVAILABILITY": "הגדר את הזמינות שלך",
"SLA": "SLA",
@@ -418,5 +426,255 @@
"SWITCH_TO_REPLY": "עבור לתשובה",
"TOGGLE_SNOOZE_DROPDOWN": "החלפת תפריט נודניק"
}
+ },
+ "ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent assignment",
+ "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here"
+ },
+ "ASSIGNMENT_POLICY": {
+ "TITLE": "Assignment policy",
+ "DESCRIPTION": "Manage how conversations get assigned in inboxes.",
+ "FEATURES": [
+ "Assign by conversations evenly or by available capacity",
+ "Add fair distribution rules to avoid overloading any agent",
+ "Add inboxes to a policy - one policy per inbox"
+ ]
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "TITLE": "Agent capacity policy",
+ "DESCRIPTION": "Manage workload for agents.",
+ "FEATURES": [
+ "Define maximum conversations per inbox",
+ "Create exceptions based on labels and time",
+ "Add agents to a policy - one policy per agent"
+ ]
+ }
+ },
+ "AGENT_ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Assignment policy",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "ORDER": "Order",
+ "PRIORITY": "Priority",
+ "ACTIVE": "פעיל",
+ "INACTIVE": "Inactive",
+ "POPOVER": "Added inboxes",
+ "EDIT": "ערוך"
+ },
+ "NO_RECORDS_FOUND": "No assignment policies found"
+ },
+ "CREATE": {
+ "HEADER": {
+ "TITLE": "Create assignment policy"
+ },
+ "CREATE_BUTTON": "Create policy",
+ "API": {
+ "SUCCESS_MESSAGE": "Assignment policy created successfully",
+ "ERROR_MESSAGE": "Failed to create assignment policy"
+ }
+ },
+ "EDIT": {
+ "HEADER": {
+ "TITLE": "Edit assignment policy"
+ },
+ "EDIT_BUTTON": "Update policy",
+ "CONFIRM_ADD_INBOX_DIALOG": {
+ "TITLE": "Add inbox",
+ "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.",
+ "CONFIRM_BUTTON_LABEL": "Continue",
+ "CANCEL_BUTTON_LABEL": "ביטול"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Assignment policy updated successfully",
+ "ERROR_MESSAGE": "Failed to update assignment policy"
+ },
+ "INBOX_API": {
+ "ADD": {
+ "SUCCESS_MESSAGE": "Inbox added to policy successfully",
+ "ERROR_MESSAGE": "Failed to add inbox to policy"
+ },
+ "REMOVE": {
+ "SUCCESS_MESSAGE": "Inbox removed from policy successfully",
+ "ERROR_MESSAGE": "Failed to remove inbox from policy"
+ }
+ }
+ },
+ "FORM": {
+ "NAME": {
+ "LABEL": "Policy name:",
+ "PLACEHOLDER": "Enter policy name"
+ },
+ "DESCRIPTION": {
+ "LABEL": "תיאור:",
+ "PLACEHOLDER": "Enter description"
+ },
+ "STATUS": {
+ "LABEL": "מצב:",
+ "PLACEHOLDER": "Select status",
+ "ACTIVE": "Policy is active",
+ "INACTIVE": "Policy is inactive"
+ },
+ "ASSIGNMENT_ORDER": {
+ "LABEL": "Assignment order",
+ "ROUND_ROBIN": {
+ "LABEL": "Round robin",
+ "DESCRIPTION": "Assign conversations evenly among agents."
+ },
+ "BALANCED": {
+ "LABEL": "Balanced",
+ "DESCRIPTION": "Assign conversations based on available capacity."
+ }
+ },
+ "ASSIGNMENT_PRIORITY": {
+ "LABEL": "Assignment priority",
+ "EARLIEST_CREATED": {
+ "LABEL": "Earliest created",
+ "DESCRIPTION": "The conversation that was created first gets assigned first."
+ },
+ "LONGEST_WAITING": {
+ "LABEL": "Longest waiting",
+ "DESCRIPTION": "The conversation waiting the longest gets assigned first."
+ }
+ },
+ "FAIR_DISTRIBUTION": {
+ "LABEL": "Fair distribution policy",
+ "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.",
+ "INPUT_MAX": "Assign max",
+ "DURATION": "Conversations per agent in every"
+ },
+ "INBOXES": {
+ "LABEL": "Added inboxes",
+ "DESCRIPTION": "Add inboxes for which this policy will be applicable.",
+ "ADD_BUTTON": "Add inbox",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select inboxes to add",
+ "ADD_BUTTON": "הוסף"
+ },
+ "EMPTY_STATE": "No inboxes added to this policy, add an inbox to get started",
+ "API": {
+ "SUCCESS_MESSAGE": "Inbox successfully added to policy",
+ "ERROR_MESSAGE": "Failed to add inbox to policy"
+ }
+ }
+ },
+ "DELETE_POLICY": {
+ "SUCCESS_MESSAGE": "Assignment policy deleted successfully",
+ "ERROR_MESSAGE": "Failed to delete assignment policy"
+ }
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent capacity",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "POPOVER": "Added agents",
+ "EDIT": "ערוך"
+ },
+ "NO_RECORDS_FOUND": "No agent capacity policies found"
+ },
+ "CREATE": {
+ "HEADER": {
+ "TITLE": "Create agent capacity policy"
+ },
+ "CREATE_BUTTON": "Create policy",
+ "API": {
+ "SUCCESS_MESSAGE": "Agent capacity policy created successfully",
+ "ERROR_MESSAGE": "Failed to create agent capacity policy"
+ }
+ },
+ "EDIT": {
+ "HEADER": {
+ "TITLE": "Edit agent capacity policy"
+ },
+ "EDIT_BUTTON": "Update policy",
+ "CONFIRM_ADD_AGENT_DIALOG": {
+ "TITLE": "Add agent",
+ "DESCRIPTION": "{agentName} is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.",
+ "CONFIRM_BUTTON_LABEL": "Continue",
+ "CANCEL_BUTTON_LABEL": "ביטול"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Agent capacity policy updated successfully",
+ "ERROR_MESSAGE": "Failed to update agent capacity policy"
+ },
+ "AGENT_API": {
+ "ADD": {
+ "SUCCESS_MESSAGE": "Agent added to policy successfully",
+ "ERROR_MESSAGE": "Failed to add agent to policy"
+ },
+ "REMOVE": {
+ "SUCCESS_MESSAGE": "Agent removed from policy successfully",
+ "ERROR_MESSAGE": "Failed to remove agent from policy"
+ }
+ }
+ },
+ "FORM": {
+ "NAME": {
+ "LABEL": "Policy name:",
+ "PLACEHOLDER": "Enter policy name"
+ },
+ "DESCRIPTION": {
+ "LABEL": "תיאור:",
+ "PLACEHOLDER": "Enter description"
+ },
+ "INBOX_CAPACITY_LIMIT": {
+ "LABEL": "Inbox capacity limits",
+ "ADD_BUTTON": "Add inbox",
+ "FIELD": {
+ "SELECT_INBOX": "Select inbox",
+ "MAX_CONVERSATIONS": "Max conversations",
+ "SET_LIMIT": "Set limit"
+ },
+ "EMPTY_STATE": "No inbox limit set"
+ },
+ "EXCLUSION_RULES": {
+ "LABEL": "Exclusion rules",
+ "DESCRIPTION": "Conversations that satisfy the following conditions would not count towards agent capacity",
+ "TAGS": {
+ "LABEL": "Exclude conversations tagged with specific labels",
+ "ADD_TAG": "add tag",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select tags to add"
+ },
+ "EMPTY_STATE": "No tags added to this policy."
+ },
+ "DURATION": {
+ "LABEL": "Exclude conversations older than a specified duration",
+ "PLACEHOLDER": "Set time"
+ }
+ },
+ "USERS": {
+ "LABEL": "Assigned agents",
+ "DESCRIPTION": "Add agents for which this policy will be applicable.",
+ "ADD_BUTTON": "Add agent",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select agents to add",
+ "ADD_BUTTON": "הוסף"
+ },
+ "EMPTY_STATE": "No agents added",
+ "API": {
+ "SUCCESS_MESSAGE": "Agent successfully added to policy",
+ "ERROR_MESSAGE": "Failed to add agent to policy"
+ }
+ }
+ },
+ "DELETE_POLICY": {
+ "SUCCESS_MESSAGE": "Agent capacity policy deleted successfully",
+ "ERROR_MESSAGE": "Failed to delete agent capacity policy"
+ }
+ },
+ "DELETE_POLICY": {
+ "TITLE": "Delete policy",
+ "DESCRIPTION": "Are you sure you want to delete this policy? This action cannot be undone.",
+ "CONFIRM_BUTTON_LABEL": "מחק",
+ "CANCEL_BUTTON_LABEL": "ביטול"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/hi/conversation.json b/app/javascript/dashboard/i18n/locale/hi/conversation.json
index 93f375e7f..9fd39b70f 100644
--- a/app/javascript/dashboard/i18n/locale/hi/conversation.json
+++ b/app/javascript/dashboard/i18n/locale/hi/conversation.json
@@ -71,6 +71,17 @@
"SHOW_LABELS": "Show labels",
"HIDE_LABELS": "Hide labels"
},
+ "VOICE_CALL": {
+ "INCOMING_CALL": "Incoming call",
+ "OUTGOING_CALL": "Outgoing call",
+ "CALL_IN_PROGRESS": "Call in progress",
+ "NO_ANSWER": "No answer",
+ "MISSED_CALL": "Missed call",
+ "CALL_ENDED": "Call ended",
+ "NOT_ANSWERED_YET": "Not answered yet",
+ "THEY_ANSWERED": "They answered",
+ "YOU_ANSWERED": "You answered"
+ },
"HEADER": {
"RESOLVE_ACTION": "Resolve",
"REOPEN_ACTION": "Reopen",
diff --git a/app/javascript/dashboard/i18n/locale/hi/settings.json b/app/javascript/dashboard/i18n/locale/hi/settings.json
index 98c3f559b..7c10f417b 100644
--- a/app/javascript/dashboard/i18n/locale/hi/settings.json
+++ b/app/javascript/dashboard/i18n/locale/hi/settings.json
@@ -51,6 +51,13 @@
"LARGER": "Larger",
"EXTRA_LARGE": "Extra Large"
}
+ },
+ "LANGUAGE": {
+ "TITLE": "Preferred Language",
+ "NOTE": "Choose the language you want to use.",
+ "UPDATE_SUCCESS": "Your Language settings have been updated successfully",
+ "UPDATE_ERROR": "There is an error while updating the language settings, please try again",
+ "USE_ACCOUNT_DEFAULT": "Use account default"
}
},
"MESSAGE_SIGNATURE_SECTION": {
@@ -330,6 +337,7 @@
"REPORTS_LABEL": "Labels",
"REPORTS_INBOX": "Inbox",
"REPORTS_TEAM": "Team",
+ "AGENT_ASSIGNMENT": "Agent Assignment",
"SET_AVAILABILITY_TITLE": "Set yourself as",
"SET_YOUR_AVAILABILITY": "Set your availability",
"SLA": "SLA",
@@ -418,5 +426,255 @@
"SWITCH_TO_REPLY": "Switch to Reply",
"TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown"
}
+ },
+ "ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent assignment",
+ "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here"
+ },
+ "ASSIGNMENT_POLICY": {
+ "TITLE": "Assignment policy",
+ "DESCRIPTION": "Manage how conversations get assigned in inboxes.",
+ "FEATURES": [
+ "Assign by conversations evenly or by available capacity",
+ "Add fair distribution rules to avoid overloading any agent",
+ "Add inboxes to a policy - one policy per inbox"
+ ]
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "TITLE": "Agent capacity policy",
+ "DESCRIPTION": "Manage workload for agents.",
+ "FEATURES": [
+ "Define maximum conversations per inbox",
+ "Create exceptions based on labels and time",
+ "Add agents to a policy - one policy per agent"
+ ]
+ }
+ },
+ "AGENT_ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Assignment policy",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "ORDER": "Order",
+ "PRIORITY": "Priority",
+ "ACTIVE": "Active",
+ "INACTIVE": "Inactive",
+ "POPOVER": "Added inboxes",
+ "EDIT": "Edit"
+ },
+ "NO_RECORDS_FOUND": "No assignment policies found"
+ },
+ "CREATE": {
+ "HEADER": {
+ "TITLE": "Create assignment policy"
+ },
+ "CREATE_BUTTON": "Create policy",
+ "API": {
+ "SUCCESS_MESSAGE": "Assignment policy created successfully",
+ "ERROR_MESSAGE": "Failed to create assignment policy"
+ }
+ },
+ "EDIT": {
+ "HEADER": {
+ "TITLE": "Edit assignment policy"
+ },
+ "EDIT_BUTTON": "Update policy",
+ "CONFIRM_ADD_INBOX_DIALOG": {
+ "TITLE": "Add inbox",
+ "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.",
+ "CONFIRM_BUTTON_LABEL": "Continue",
+ "CANCEL_BUTTON_LABEL": "Cancel"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Assignment policy updated successfully",
+ "ERROR_MESSAGE": "Failed to update assignment policy"
+ },
+ "INBOX_API": {
+ "ADD": {
+ "SUCCESS_MESSAGE": "Inbox added to policy successfully",
+ "ERROR_MESSAGE": "Failed to add inbox to policy"
+ },
+ "REMOVE": {
+ "SUCCESS_MESSAGE": "Inbox removed from policy successfully",
+ "ERROR_MESSAGE": "Failed to remove inbox from policy"
+ }
+ }
+ },
+ "FORM": {
+ "NAME": {
+ "LABEL": "Policy name:",
+ "PLACEHOLDER": "Enter policy name"
+ },
+ "DESCRIPTION": {
+ "LABEL": "Description:",
+ "PLACEHOLDER": "Enter description"
+ },
+ "STATUS": {
+ "LABEL": "Status:",
+ "PLACEHOLDER": "Select status",
+ "ACTIVE": "Policy is active",
+ "INACTIVE": "Policy is inactive"
+ },
+ "ASSIGNMENT_ORDER": {
+ "LABEL": "Assignment order",
+ "ROUND_ROBIN": {
+ "LABEL": "Round robin",
+ "DESCRIPTION": "Assign conversations evenly among agents."
+ },
+ "BALANCED": {
+ "LABEL": "Balanced",
+ "DESCRIPTION": "Assign conversations based on available capacity."
+ }
+ },
+ "ASSIGNMENT_PRIORITY": {
+ "LABEL": "Assignment priority",
+ "EARLIEST_CREATED": {
+ "LABEL": "Earliest created",
+ "DESCRIPTION": "The conversation that was created first gets assigned first."
+ },
+ "LONGEST_WAITING": {
+ "LABEL": "Longest waiting",
+ "DESCRIPTION": "The conversation waiting the longest gets assigned first."
+ }
+ },
+ "FAIR_DISTRIBUTION": {
+ "LABEL": "Fair distribution policy",
+ "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.",
+ "INPUT_MAX": "Assign max",
+ "DURATION": "Conversations per agent in every"
+ },
+ "INBOXES": {
+ "LABEL": "Added inboxes",
+ "DESCRIPTION": "Add inboxes for which this policy will be applicable.",
+ "ADD_BUTTON": "Add inbox",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select inboxes to add",
+ "ADD_BUTTON": "Add"
+ },
+ "EMPTY_STATE": "No inboxes added to this policy, add an inbox to get started",
+ "API": {
+ "SUCCESS_MESSAGE": "Inbox successfully added to policy",
+ "ERROR_MESSAGE": "Failed to add inbox to policy"
+ }
+ }
+ },
+ "DELETE_POLICY": {
+ "SUCCESS_MESSAGE": "Assignment policy deleted successfully",
+ "ERROR_MESSAGE": "Failed to delete assignment policy"
+ }
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent capacity",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "POPOVER": "Added agents",
+ "EDIT": "Edit"
+ },
+ "NO_RECORDS_FOUND": "No agent capacity policies found"
+ },
+ "CREATE": {
+ "HEADER": {
+ "TITLE": "Create agent capacity policy"
+ },
+ "CREATE_BUTTON": "Create policy",
+ "API": {
+ "SUCCESS_MESSAGE": "Agent capacity policy created successfully",
+ "ERROR_MESSAGE": "Failed to create agent capacity policy"
+ }
+ },
+ "EDIT": {
+ "HEADER": {
+ "TITLE": "Edit agent capacity policy"
+ },
+ "EDIT_BUTTON": "Update policy",
+ "CONFIRM_ADD_AGENT_DIALOG": {
+ "TITLE": "Add agent",
+ "DESCRIPTION": "{agentName} is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.",
+ "CONFIRM_BUTTON_LABEL": "Continue",
+ "CANCEL_BUTTON_LABEL": "Cancel"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Agent capacity policy updated successfully",
+ "ERROR_MESSAGE": "Failed to update agent capacity policy"
+ },
+ "AGENT_API": {
+ "ADD": {
+ "SUCCESS_MESSAGE": "Agent added to policy successfully",
+ "ERROR_MESSAGE": "Failed to add agent to policy"
+ },
+ "REMOVE": {
+ "SUCCESS_MESSAGE": "Agent removed from policy successfully",
+ "ERROR_MESSAGE": "Failed to remove agent from policy"
+ }
+ }
+ },
+ "FORM": {
+ "NAME": {
+ "LABEL": "Policy name:",
+ "PLACEHOLDER": "Enter policy name"
+ },
+ "DESCRIPTION": {
+ "LABEL": "Description:",
+ "PLACEHOLDER": "Enter description"
+ },
+ "INBOX_CAPACITY_LIMIT": {
+ "LABEL": "Inbox capacity limits",
+ "ADD_BUTTON": "Add inbox",
+ "FIELD": {
+ "SELECT_INBOX": "Select inbox",
+ "MAX_CONVERSATIONS": "Max conversations",
+ "SET_LIMIT": "Set limit"
+ },
+ "EMPTY_STATE": "No inbox limit set"
+ },
+ "EXCLUSION_RULES": {
+ "LABEL": "Exclusion rules",
+ "DESCRIPTION": "Conversations that satisfy the following conditions would not count towards agent capacity",
+ "TAGS": {
+ "LABEL": "Exclude conversations tagged with specific labels",
+ "ADD_TAG": "add tag",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select tags to add"
+ },
+ "EMPTY_STATE": "No tags added to this policy."
+ },
+ "DURATION": {
+ "LABEL": "Exclude conversations older than a specified duration",
+ "PLACEHOLDER": "Set time"
+ }
+ },
+ "USERS": {
+ "LABEL": "Assigned agents",
+ "DESCRIPTION": "Add agents for which this policy will be applicable.",
+ "ADD_BUTTON": "Add agent",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select agents to add",
+ "ADD_BUTTON": "Add"
+ },
+ "EMPTY_STATE": "No agents added",
+ "API": {
+ "SUCCESS_MESSAGE": "Agent successfully added to policy",
+ "ERROR_MESSAGE": "Failed to add agent to policy"
+ }
+ }
+ },
+ "DELETE_POLICY": {
+ "SUCCESS_MESSAGE": "Agent capacity policy deleted successfully",
+ "ERROR_MESSAGE": "Failed to delete agent capacity policy"
+ }
+ },
+ "DELETE_POLICY": {
+ "TITLE": "Delete policy",
+ "DESCRIPTION": "Are you sure you want to delete this policy? This action cannot be undone.",
+ "CONFIRM_BUTTON_LABEL": "Delete",
+ "CANCEL_BUTTON_LABEL": "Cancel"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/hr/conversation.json b/app/javascript/dashboard/i18n/locale/hr/conversation.json
index fcbf5637b..e20527813 100644
--- a/app/javascript/dashboard/i18n/locale/hr/conversation.json
+++ b/app/javascript/dashboard/i18n/locale/hr/conversation.json
@@ -71,6 +71,17 @@
"SHOW_LABELS": "Show labels",
"HIDE_LABELS": "Hide labels"
},
+ "VOICE_CALL": {
+ "INCOMING_CALL": "Incoming call",
+ "OUTGOING_CALL": "Outgoing call",
+ "CALL_IN_PROGRESS": "Call in progress",
+ "NO_ANSWER": "No answer",
+ "MISSED_CALL": "Missed call",
+ "CALL_ENDED": "Call ended",
+ "NOT_ANSWERED_YET": "Not answered yet",
+ "THEY_ANSWERED": "They answered",
+ "YOU_ANSWERED": "You answered"
+ },
"HEADER": {
"RESOLVE_ACTION": "Resolve",
"REOPEN_ACTION": "Reopen",
diff --git a/app/javascript/dashboard/i18n/locale/hr/settings.json b/app/javascript/dashboard/i18n/locale/hr/settings.json
index 03ff834ba..893227a2b 100644
--- a/app/javascript/dashboard/i18n/locale/hr/settings.json
+++ b/app/javascript/dashboard/i18n/locale/hr/settings.json
@@ -51,6 +51,13 @@
"LARGER": "Larger",
"EXTRA_LARGE": "Extra Large"
}
+ },
+ "LANGUAGE": {
+ "TITLE": "Preferred Language",
+ "NOTE": "Choose the language you want to use.",
+ "UPDATE_SUCCESS": "Your Language settings have been updated successfully",
+ "UPDATE_ERROR": "There is an error while updating the language settings, please try again",
+ "USE_ACCOUNT_DEFAULT": "Use account default"
}
},
"MESSAGE_SIGNATURE_SECTION": {
@@ -330,6 +337,7 @@
"REPORTS_LABEL": "Labels",
"REPORTS_INBOX": "Inbox",
"REPORTS_TEAM": "Tim",
+ "AGENT_ASSIGNMENT": "Agent Assignment",
"SET_AVAILABILITY_TITLE": "Postavi sebe kao",
"SET_YOUR_AVAILABILITY": "Set your availability",
"SLA": "SLA",
@@ -418,5 +426,255 @@
"SWITCH_TO_REPLY": "Switch to Reply",
"TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown"
}
+ },
+ "ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent assignment",
+ "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here"
+ },
+ "ASSIGNMENT_POLICY": {
+ "TITLE": "Assignment policy",
+ "DESCRIPTION": "Manage how conversations get assigned in inboxes.",
+ "FEATURES": [
+ "Assign by conversations evenly or by available capacity",
+ "Add fair distribution rules to avoid overloading any agent",
+ "Add inboxes to a policy - one policy per inbox"
+ ]
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "TITLE": "Agent capacity policy",
+ "DESCRIPTION": "Manage workload for agents.",
+ "FEATURES": [
+ "Define maximum conversations per inbox",
+ "Create exceptions based on labels and time",
+ "Add agents to a policy - one policy per agent"
+ ]
+ }
+ },
+ "AGENT_ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Assignment policy",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "ORDER": "Order",
+ "PRIORITY": "Prioritet",
+ "ACTIVE": "Active",
+ "INACTIVE": "Inactive",
+ "POPOVER": "Added inboxes",
+ "EDIT": "Uredi"
+ },
+ "NO_RECORDS_FOUND": "No assignment policies found"
+ },
+ "CREATE": {
+ "HEADER": {
+ "TITLE": "Create assignment policy"
+ },
+ "CREATE_BUTTON": "Create policy",
+ "API": {
+ "SUCCESS_MESSAGE": "Assignment policy created successfully",
+ "ERROR_MESSAGE": "Failed to create assignment policy"
+ }
+ },
+ "EDIT": {
+ "HEADER": {
+ "TITLE": "Edit assignment policy"
+ },
+ "EDIT_BUTTON": "Update policy",
+ "CONFIRM_ADD_INBOX_DIALOG": {
+ "TITLE": "Add inbox",
+ "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.",
+ "CONFIRM_BUTTON_LABEL": "Continue",
+ "CANCEL_BUTTON_LABEL": "Odustani"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Assignment policy updated successfully",
+ "ERROR_MESSAGE": "Failed to update assignment policy"
+ },
+ "INBOX_API": {
+ "ADD": {
+ "SUCCESS_MESSAGE": "Inbox added to policy successfully",
+ "ERROR_MESSAGE": "Failed to add inbox to policy"
+ },
+ "REMOVE": {
+ "SUCCESS_MESSAGE": "Inbox removed from policy successfully",
+ "ERROR_MESSAGE": "Failed to remove inbox from policy"
+ }
+ }
+ },
+ "FORM": {
+ "NAME": {
+ "LABEL": "Policy name:",
+ "PLACEHOLDER": "Enter policy name"
+ },
+ "DESCRIPTION": {
+ "LABEL": "Description:",
+ "PLACEHOLDER": "Enter description"
+ },
+ "STATUS": {
+ "LABEL": "Status:",
+ "PLACEHOLDER": "Select status",
+ "ACTIVE": "Policy is active",
+ "INACTIVE": "Policy is inactive"
+ },
+ "ASSIGNMENT_ORDER": {
+ "LABEL": "Assignment order",
+ "ROUND_ROBIN": {
+ "LABEL": "Round robin",
+ "DESCRIPTION": "Assign conversations evenly among agents."
+ },
+ "BALANCED": {
+ "LABEL": "Balanced",
+ "DESCRIPTION": "Assign conversations based on available capacity."
+ }
+ },
+ "ASSIGNMENT_PRIORITY": {
+ "LABEL": "Assignment priority",
+ "EARLIEST_CREATED": {
+ "LABEL": "Earliest created",
+ "DESCRIPTION": "The conversation that was created first gets assigned first."
+ },
+ "LONGEST_WAITING": {
+ "LABEL": "Longest waiting",
+ "DESCRIPTION": "The conversation waiting the longest gets assigned first."
+ }
+ },
+ "FAIR_DISTRIBUTION": {
+ "LABEL": "Fair distribution policy",
+ "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.",
+ "INPUT_MAX": "Assign max",
+ "DURATION": "Conversations per agent in every"
+ },
+ "INBOXES": {
+ "LABEL": "Added inboxes",
+ "DESCRIPTION": "Add inboxes for which this policy will be applicable.",
+ "ADD_BUTTON": "Add inbox",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select inboxes to add",
+ "ADD_BUTTON": "Add"
+ },
+ "EMPTY_STATE": "No inboxes added to this policy, add an inbox to get started",
+ "API": {
+ "SUCCESS_MESSAGE": "Inbox successfully added to policy",
+ "ERROR_MESSAGE": "Failed to add inbox to policy"
+ }
+ }
+ },
+ "DELETE_POLICY": {
+ "SUCCESS_MESSAGE": "Assignment policy deleted successfully",
+ "ERROR_MESSAGE": "Failed to delete assignment policy"
+ }
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent capacity",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "POPOVER": "Added agents",
+ "EDIT": "Uredi"
+ },
+ "NO_RECORDS_FOUND": "No agent capacity policies found"
+ },
+ "CREATE": {
+ "HEADER": {
+ "TITLE": "Create agent capacity policy"
+ },
+ "CREATE_BUTTON": "Create policy",
+ "API": {
+ "SUCCESS_MESSAGE": "Agent capacity policy created successfully",
+ "ERROR_MESSAGE": "Failed to create agent capacity policy"
+ }
+ },
+ "EDIT": {
+ "HEADER": {
+ "TITLE": "Edit agent capacity policy"
+ },
+ "EDIT_BUTTON": "Update policy",
+ "CONFIRM_ADD_AGENT_DIALOG": {
+ "TITLE": "Add agent",
+ "DESCRIPTION": "{agentName} is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.",
+ "CONFIRM_BUTTON_LABEL": "Continue",
+ "CANCEL_BUTTON_LABEL": "Odustani"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Agent capacity policy updated successfully",
+ "ERROR_MESSAGE": "Failed to update agent capacity policy"
+ },
+ "AGENT_API": {
+ "ADD": {
+ "SUCCESS_MESSAGE": "Agent added to policy successfully",
+ "ERROR_MESSAGE": "Failed to add agent to policy"
+ },
+ "REMOVE": {
+ "SUCCESS_MESSAGE": "Agent removed from policy successfully",
+ "ERROR_MESSAGE": "Failed to remove agent from policy"
+ }
+ }
+ },
+ "FORM": {
+ "NAME": {
+ "LABEL": "Policy name:",
+ "PLACEHOLDER": "Enter policy name"
+ },
+ "DESCRIPTION": {
+ "LABEL": "Description:",
+ "PLACEHOLDER": "Enter description"
+ },
+ "INBOX_CAPACITY_LIMIT": {
+ "LABEL": "Inbox capacity limits",
+ "ADD_BUTTON": "Add inbox",
+ "FIELD": {
+ "SELECT_INBOX": "Select inbox",
+ "MAX_CONVERSATIONS": "Max conversations",
+ "SET_LIMIT": "Set limit"
+ },
+ "EMPTY_STATE": "No inbox limit set"
+ },
+ "EXCLUSION_RULES": {
+ "LABEL": "Exclusion rules",
+ "DESCRIPTION": "Conversations that satisfy the following conditions would not count towards agent capacity",
+ "TAGS": {
+ "LABEL": "Exclude conversations tagged with specific labels",
+ "ADD_TAG": "add tag",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select tags to add"
+ },
+ "EMPTY_STATE": "No tags added to this policy."
+ },
+ "DURATION": {
+ "LABEL": "Exclude conversations older than a specified duration",
+ "PLACEHOLDER": "Set time"
+ }
+ },
+ "USERS": {
+ "LABEL": "Assigned agents",
+ "DESCRIPTION": "Add agents for which this policy will be applicable.",
+ "ADD_BUTTON": "Add agent",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select agents to add",
+ "ADD_BUTTON": "Add"
+ },
+ "EMPTY_STATE": "No agents added",
+ "API": {
+ "SUCCESS_MESSAGE": "Agent successfully added to policy",
+ "ERROR_MESSAGE": "Failed to add agent to policy"
+ }
+ }
+ },
+ "DELETE_POLICY": {
+ "SUCCESS_MESSAGE": "Agent capacity policy deleted successfully",
+ "ERROR_MESSAGE": "Failed to delete agent capacity policy"
+ }
+ },
+ "DELETE_POLICY": {
+ "TITLE": "Delete policy",
+ "DESCRIPTION": "Are you sure you want to delete this policy? This action cannot be undone.",
+ "CONFIRM_BUTTON_LABEL": "Izbriši",
+ "CANCEL_BUTTON_LABEL": "Odustani"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/hu/conversation.json b/app/javascript/dashboard/i18n/locale/hu/conversation.json
index a4bd4ce42..49220702e 100644
--- a/app/javascript/dashboard/i18n/locale/hu/conversation.json
+++ b/app/javascript/dashboard/i18n/locale/hu/conversation.json
@@ -71,6 +71,17 @@
"SHOW_LABELS": "Cimkék mutatása",
"HIDE_LABELS": "Cimkék elrejtése"
},
+ "VOICE_CALL": {
+ "INCOMING_CALL": "Incoming call",
+ "OUTGOING_CALL": "Outgoing call",
+ "CALL_IN_PROGRESS": "Call in progress",
+ "NO_ANSWER": "No answer",
+ "MISSED_CALL": "Missed call",
+ "CALL_ENDED": "Call ended",
+ "NOT_ANSWERED_YET": "Not answered yet",
+ "THEY_ANSWERED": "They answered",
+ "YOU_ANSWERED": "You answered"
+ },
"HEADER": {
"RESOLVE_ACTION": "Megoldva",
"REOPEN_ACTION": "Újranyitás",
diff --git a/app/javascript/dashboard/i18n/locale/hu/settings.json b/app/javascript/dashboard/i18n/locale/hu/settings.json
index 41dd9b73e..db7777c2a 100644
--- a/app/javascript/dashboard/i18n/locale/hu/settings.json
+++ b/app/javascript/dashboard/i18n/locale/hu/settings.json
@@ -51,6 +51,13 @@
"LARGER": "Larger",
"EXTRA_LARGE": "Extra Large"
}
+ },
+ "LANGUAGE": {
+ "TITLE": "Preferred Language",
+ "NOTE": "Choose the language you want to use.",
+ "UPDATE_SUCCESS": "Your Language settings have been updated successfully",
+ "UPDATE_ERROR": "There is an error while updating the language settings, please try again",
+ "USE_ACCOUNT_DEFAULT": "Use account default"
}
},
"MESSAGE_SIGNATURE_SECTION": {
@@ -330,6 +337,7 @@
"REPORTS_LABEL": "Cimkék",
"REPORTS_INBOX": "Fiók",
"REPORTS_TEAM": "Csapat",
+ "AGENT_ASSIGNMENT": "Agent Assignment",
"SET_AVAILABILITY_TITLE": "Ugrás a Beszélgetések Irányítópultjához",
"SET_YOUR_AVAILABILITY": "Elérhetőség beállítása",
"SLA": "SLA",
@@ -418,5 +426,255 @@
"SWITCH_TO_REPLY": "Válts a válasz fülre",
"TOGGLE_SNOOZE_DROPDOWN": "Alvómód bekapcsolása a legördülő menüben"
}
+ },
+ "ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent assignment",
+ "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here"
+ },
+ "ASSIGNMENT_POLICY": {
+ "TITLE": "Assignment policy",
+ "DESCRIPTION": "Manage how conversations get assigned in inboxes.",
+ "FEATURES": [
+ "Assign by conversations evenly or by available capacity",
+ "Add fair distribution rules to avoid overloading any agent",
+ "Add inboxes to a policy - one policy per inbox"
+ ]
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "TITLE": "Agent capacity policy",
+ "DESCRIPTION": "Manage workload for agents.",
+ "FEATURES": [
+ "Define maximum conversations per inbox",
+ "Create exceptions based on labels and time",
+ "Add agents to a policy - one policy per agent"
+ ]
+ }
+ },
+ "AGENT_ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Assignment policy",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "ORDER": "Order",
+ "PRIORITY": "Prioritás",
+ "ACTIVE": "Aktív",
+ "INACTIVE": "Inactive",
+ "POPOVER": "Added inboxes",
+ "EDIT": "Szerkesztés"
+ },
+ "NO_RECORDS_FOUND": "No assignment policies found"
+ },
+ "CREATE": {
+ "HEADER": {
+ "TITLE": "Create assignment policy"
+ },
+ "CREATE_BUTTON": "Create policy",
+ "API": {
+ "SUCCESS_MESSAGE": "Assignment policy created successfully",
+ "ERROR_MESSAGE": "Failed to create assignment policy"
+ }
+ },
+ "EDIT": {
+ "HEADER": {
+ "TITLE": "Edit assignment policy"
+ },
+ "EDIT_BUTTON": "Update policy",
+ "CONFIRM_ADD_INBOX_DIALOG": {
+ "TITLE": "Add inbox",
+ "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.",
+ "CONFIRM_BUTTON_LABEL": "Continue",
+ "CANCEL_BUTTON_LABEL": "Mégse"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Assignment policy updated successfully",
+ "ERROR_MESSAGE": "Failed to update assignment policy"
+ },
+ "INBOX_API": {
+ "ADD": {
+ "SUCCESS_MESSAGE": "Inbox added to policy successfully",
+ "ERROR_MESSAGE": "Failed to add inbox to policy"
+ },
+ "REMOVE": {
+ "SUCCESS_MESSAGE": "Inbox removed from policy successfully",
+ "ERROR_MESSAGE": "Failed to remove inbox from policy"
+ }
+ }
+ },
+ "FORM": {
+ "NAME": {
+ "LABEL": "Policy name:",
+ "PLACEHOLDER": "Enter policy name"
+ },
+ "DESCRIPTION": {
+ "LABEL": "Leírás:",
+ "PLACEHOLDER": "Enter description"
+ },
+ "STATUS": {
+ "LABEL": "Státusz:",
+ "PLACEHOLDER": "Select status",
+ "ACTIVE": "Policy is active",
+ "INACTIVE": "Policy is inactive"
+ },
+ "ASSIGNMENT_ORDER": {
+ "LABEL": "Assignment order",
+ "ROUND_ROBIN": {
+ "LABEL": "Round robin",
+ "DESCRIPTION": "Assign conversations evenly among agents."
+ },
+ "BALANCED": {
+ "LABEL": "Balanced",
+ "DESCRIPTION": "Assign conversations based on available capacity."
+ }
+ },
+ "ASSIGNMENT_PRIORITY": {
+ "LABEL": "Assignment priority",
+ "EARLIEST_CREATED": {
+ "LABEL": "Earliest created",
+ "DESCRIPTION": "The conversation that was created first gets assigned first."
+ },
+ "LONGEST_WAITING": {
+ "LABEL": "Longest waiting",
+ "DESCRIPTION": "The conversation waiting the longest gets assigned first."
+ }
+ },
+ "FAIR_DISTRIBUTION": {
+ "LABEL": "Fair distribution policy",
+ "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.",
+ "INPUT_MAX": "Assign max",
+ "DURATION": "Conversations per agent in every"
+ },
+ "INBOXES": {
+ "LABEL": "Added inboxes",
+ "DESCRIPTION": "Add inboxes for which this policy will be applicable.",
+ "ADD_BUTTON": "Add inbox",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select inboxes to add",
+ "ADD_BUTTON": "Hozzáadás"
+ },
+ "EMPTY_STATE": "No inboxes added to this policy, add an inbox to get started",
+ "API": {
+ "SUCCESS_MESSAGE": "Inbox successfully added to policy",
+ "ERROR_MESSAGE": "Failed to add inbox to policy"
+ }
+ }
+ },
+ "DELETE_POLICY": {
+ "SUCCESS_MESSAGE": "Assignment policy deleted successfully",
+ "ERROR_MESSAGE": "Failed to delete assignment policy"
+ }
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent capacity",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "POPOVER": "Added agents",
+ "EDIT": "Szerkesztés"
+ },
+ "NO_RECORDS_FOUND": "No agent capacity policies found"
+ },
+ "CREATE": {
+ "HEADER": {
+ "TITLE": "Create agent capacity policy"
+ },
+ "CREATE_BUTTON": "Create policy",
+ "API": {
+ "SUCCESS_MESSAGE": "Agent capacity policy created successfully",
+ "ERROR_MESSAGE": "Failed to create agent capacity policy"
+ }
+ },
+ "EDIT": {
+ "HEADER": {
+ "TITLE": "Edit agent capacity policy"
+ },
+ "EDIT_BUTTON": "Update policy",
+ "CONFIRM_ADD_AGENT_DIALOG": {
+ "TITLE": "Add agent",
+ "DESCRIPTION": "{agentName} is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.",
+ "CONFIRM_BUTTON_LABEL": "Continue",
+ "CANCEL_BUTTON_LABEL": "Mégse"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Agent capacity policy updated successfully",
+ "ERROR_MESSAGE": "Failed to update agent capacity policy"
+ },
+ "AGENT_API": {
+ "ADD": {
+ "SUCCESS_MESSAGE": "Agent added to policy successfully",
+ "ERROR_MESSAGE": "Failed to add agent to policy"
+ },
+ "REMOVE": {
+ "SUCCESS_MESSAGE": "Agent removed from policy successfully",
+ "ERROR_MESSAGE": "Failed to remove agent from policy"
+ }
+ }
+ },
+ "FORM": {
+ "NAME": {
+ "LABEL": "Policy name:",
+ "PLACEHOLDER": "Enter policy name"
+ },
+ "DESCRIPTION": {
+ "LABEL": "Leírás:",
+ "PLACEHOLDER": "Enter description"
+ },
+ "INBOX_CAPACITY_LIMIT": {
+ "LABEL": "Inbox capacity limits",
+ "ADD_BUTTON": "Add inbox",
+ "FIELD": {
+ "SELECT_INBOX": "Select inbox",
+ "MAX_CONVERSATIONS": "Max conversations",
+ "SET_LIMIT": "Set limit"
+ },
+ "EMPTY_STATE": "No inbox limit set"
+ },
+ "EXCLUSION_RULES": {
+ "LABEL": "Exclusion rules",
+ "DESCRIPTION": "Conversations that satisfy the following conditions would not count towards agent capacity",
+ "TAGS": {
+ "LABEL": "Exclude conversations tagged with specific labels",
+ "ADD_TAG": "add tag",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select tags to add"
+ },
+ "EMPTY_STATE": "No tags added to this policy."
+ },
+ "DURATION": {
+ "LABEL": "Exclude conversations older than a specified duration",
+ "PLACEHOLDER": "Set time"
+ }
+ },
+ "USERS": {
+ "LABEL": "Assigned agents",
+ "DESCRIPTION": "Add agents for which this policy will be applicable.",
+ "ADD_BUTTON": "Add agent",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select agents to add",
+ "ADD_BUTTON": "Hozzáadás"
+ },
+ "EMPTY_STATE": "No agents added",
+ "API": {
+ "SUCCESS_MESSAGE": "Agent successfully added to policy",
+ "ERROR_MESSAGE": "Failed to add agent to policy"
+ }
+ }
+ },
+ "DELETE_POLICY": {
+ "SUCCESS_MESSAGE": "Agent capacity policy deleted successfully",
+ "ERROR_MESSAGE": "Failed to delete agent capacity policy"
+ }
+ },
+ "DELETE_POLICY": {
+ "TITLE": "Delete policy",
+ "DESCRIPTION": "Are you sure you want to delete this policy? This action cannot be undone.",
+ "CONFIRM_BUTTON_LABEL": "Törlés",
+ "CANCEL_BUTTON_LABEL": "Mégse"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/hy/conversation.json b/app/javascript/dashboard/i18n/locale/hy/conversation.json
index 93f375e7f..9fd39b70f 100644
--- a/app/javascript/dashboard/i18n/locale/hy/conversation.json
+++ b/app/javascript/dashboard/i18n/locale/hy/conversation.json
@@ -71,6 +71,17 @@
"SHOW_LABELS": "Show labels",
"HIDE_LABELS": "Hide labels"
},
+ "VOICE_CALL": {
+ "INCOMING_CALL": "Incoming call",
+ "OUTGOING_CALL": "Outgoing call",
+ "CALL_IN_PROGRESS": "Call in progress",
+ "NO_ANSWER": "No answer",
+ "MISSED_CALL": "Missed call",
+ "CALL_ENDED": "Call ended",
+ "NOT_ANSWERED_YET": "Not answered yet",
+ "THEY_ANSWERED": "They answered",
+ "YOU_ANSWERED": "You answered"
+ },
"HEADER": {
"RESOLVE_ACTION": "Resolve",
"REOPEN_ACTION": "Reopen",
diff --git a/app/javascript/dashboard/i18n/locale/hy/settings.json b/app/javascript/dashboard/i18n/locale/hy/settings.json
index d547538db..c95eada84 100644
--- a/app/javascript/dashboard/i18n/locale/hy/settings.json
+++ b/app/javascript/dashboard/i18n/locale/hy/settings.json
@@ -51,6 +51,13 @@
"LARGER": "Larger",
"EXTRA_LARGE": "Extra Large"
}
+ },
+ "LANGUAGE": {
+ "TITLE": "Preferred Language",
+ "NOTE": "Choose the language you want to use.",
+ "UPDATE_SUCCESS": "Your Language settings have been updated successfully",
+ "UPDATE_ERROR": "There is an error while updating the language settings, please try again",
+ "USE_ACCOUNT_DEFAULT": "Use account default"
}
},
"MESSAGE_SIGNATURE_SECTION": {
@@ -330,6 +337,7 @@
"REPORTS_LABEL": "Labels",
"REPORTS_INBOX": "Inbox",
"REPORTS_TEAM": "Team",
+ "AGENT_ASSIGNMENT": "Agent Assignment",
"SET_AVAILABILITY_TITLE": "Set yourself as",
"SET_YOUR_AVAILABILITY": "Set your availability",
"SLA": "SLA",
@@ -418,5 +426,255 @@
"SWITCH_TO_REPLY": "Switch to Reply",
"TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown"
}
+ },
+ "ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent assignment",
+ "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here"
+ },
+ "ASSIGNMENT_POLICY": {
+ "TITLE": "Assignment policy",
+ "DESCRIPTION": "Manage how conversations get assigned in inboxes.",
+ "FEATURES": [
+ "Assign by conversations evenly or by available capacity",
+ "Add fair distribution rules to avoid overloading any agent",
+ "Add inboxes to a policy - one policy per inbox"
+ ]
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "TITLE": "Agent capacity policy",
+ "DESCRIPTION": "Manage workload for agents.",
+ "FEATURES": [
+ "Define maximum conversations per inbox",
+ "Create exceptions based on labels and time",
+ "Add agents to a policy - one policy per agent"
+ ]
+ }
+ },
+ "AGENT_ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Assignment policy",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "ORDER": "Order",
+ "PRIORITY": "Priority",
+ "ACTIVE": "Active",
+ "INACTIVE": "Inactive",
+ "POPOVER": "Added inboxes",
+ "EDIT": "Edit"
+ },
+ "NO_RECORDS_FOUND": "No assignment policies found"
+ },
+ "CREATE": {
+ "HEADER": {
+ "TITLE": "Create assignment policy"
+ },
+ "CREATE_BUTTON": "Create policy",
+ "API": {
+ "SUCCESS_MESSAGE": "Assignment policy created successfully",
+ "ERROR_MESSAGE": "Failed to create assignment policy"
+ }
+ },
+ "EDIT": {
+ "HEADER": {
+ "TITLE": "Edit assignment policy"
+ },
+ "EDIT_BUTTON": "Update policy",
+ "CONFIRM_ADD_INBOX_DIALOG": {
+ "TITLE": "Add inbox",
+ "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.",
+ "CONFIRM_BUTTON_LABEL": "Continue",
+ "CANCEL_BUTTON_LABEL": "Cancel"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Assignment policy updated successfully",
+ "ERROR_MESSAGE": "Failed to update assignment policy"
+ },
+ "INBOX_API": {
+ "ADD": {
+ "SUCCESS_MESSAGE": "Inbox added to policy successfully",
+ "ERROR_MESSAGE": "Failed to add inbox to policy"
+ },
+ "REMOVE": {
+ "SUCCESS_MESSAGE": "Inbox removed from policy successfully",
+ "ERROR_MESSAGE": "Failed to remove inbox from policy"
+ }
+ }
+ },
+ "FORM": {
+ "NAME": {
+ "LABEL": "Policy name:",
+ "PLACEHOLDER": "Enter policy name"
+ },
+ "DESCRIPTION": {
+ "LABEL": "Description:",
+ "PLACEHOLDER": "Enter description"
+ },
+ "STATUS": {
+ "LABEL": "Status:",
+ "PLACEHOLDER": "Select status",
+ "ACTIVE": "Policy is active",
+ "INACTIVE": "Policy is inactive"
+ },
+ "ASSIGNMENT_ORDER": {
+ "LABEL": "Assignment order",
+ "ROUND_ROBIN": {
+ "LABEL": "Round robin",
+ "DESCRIPTION": "Assign conversations evenly among agents."
+ },
+ "BALANCED": {
+ "LABEL": "Balanced",
+ "DESCRIPTION": "Assign conversations based on available capacity."
+ }
+ },
+ "ASSIGNMENT_PRIORITY": {
+ "LABEL": "Assignment priority",
+ "EARLIEST_CREATED": {
+ "LABEL": "Earliest created",
+ "DESCRIPTION": "The conversation that was created first gets assigned first."
+ },
+ "LONGEST_WAITING": {
+ "LABEL": "Longest waiting",
+ "DESCRIPTION": "The conversation waiting the longest gets assigned first."
+ }
+ },
+ "FAIR_DISTRIBUTION": {
+ "LABEL": "Fair distribution policy",
+ "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.",
+ "INPUT_MAX": "Assign max",
+ "DURATION": "Conversations per agent in every"
+ },
+ "INBOXES": {
+ "LABEL": "Added inboxes",
+ "DESCRIPTION": "Add inboxes for which this policy will be applicable.",
+ "ADD_BUTTON": "Add inbox",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select inboxes to add",
+ "ADD_BUTTON": "Add"
+ },
+ "EMPTY_STATE": "No inboxes added to this policy, add an inbox to get started",
+ "API": {
+ "SUCCESS_MESSAGE": "Inbox successfully added to policy",
+ "ERROR_MESSAGE": "Failed to add inbox to policy"
+ }
+ }
+ },
+ "DELETE_POLICY": {
+ "SUCCESS_MESSAGE": "Assignment policy deleted successfully",
+ "ERROR_MESSAGE": "Failed to delete assignment policy"
+ }
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent capacity",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "POPOVER": "Added agents",
+ "EDIT": "Edit"
+ },
+ "NO_RECORDS_FOUND": "No agent capacity policies found"
+ },
+ "CREATE": {
+ "HEADER": {
+ "TITLE": "Create agent capacity policy"
+ },
+ "CREATE_BUTTON": "Create policy",
+ "API": {
+ "SUCCESS_MESSAGE": "Agent capacity policy created successfully",
+ "ERROR_MESSAGE": "Failed to create agent capacity policy"
+ }
+ },
+ "EDIT": {
+ "HEADER": {
+ "TITLE": "Edit agent capacity policy"
+ },
+ "EDIT_BUTTON": "Update policy",
+ "CONFIRM_ADD_AGENT_DIALOG": {
+ "TITLE": "Add agent",
+ "DESCRIPTION": "{agentName} is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.",
+ "CONFIRM_BUTTON_LABEL": "Continue",
+ "CANCEL_BUTTON_LABEL": "Cancel"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Agent capacity policy updated successfully",
+ "ERROR_MESSAGE": "Failed to update agent capacity policy"
+ },
+ "AGENT_API": {
+ "ADD": {
+ "SUCCESS_MESSAGE": "Agent added to policy successfully",
+ "ERROR_MESSAGE": "Failed to add agent to policy"
+ },
+ "REMOVE": {
+ "SUCCESS_MESSAGE": "Agent removed from policy successfully",
+ "ERROR_MESSAGE": "Failed to remove agent from policy"
+ }
+ }
+ },
+ "FORM": {
+ "NAME": {
+ "LABEL": "Policy name:",
+ "PLACEHOLDER": "Enter policy name"
+ },
+ "DESCRIPTION": {
+ "LABEL": "Description:",
+ "PLACEHOLDER": "Enter description"
+ },
+ "INBOX_CAPACITY_LIMIT": {
+ "LABEL": "Inbox capacity limits",
+ "ADD_BUTTON": "Add inbox",
+ "FIELD": {
+ "SELECT_INBOX": "Select inbox",
+ "MAX_CONVERSATIONS": "Max conversations",
+ "SET_LIMIT": "Set limit"
+ },
+ "EMPTY_STATE": "No inbox limit set"
+ },
+ "EXCLUSION_RULES": {
+ "LABEL": "Exclusion rules",
+ "DESCRIPTION": "Conversations that satisfy the following conditions would not count towards agent capacity",
+ "TAGS": {
+ "LABEL": "Exclude conversations tagged with specific labels",
+ "ADD_TAG": "add tag",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select tags to add"
+ },
+ "EMPTY_STATE": "No tags added to this policy."
+ },
+ "DURATION": {
+ "LABEL": "Exclude conversations older than a specified duration",
+ "PLACEHOLDER": "Set time"
+ }
+ },
+ "USERS": {
+ "LABEL": "Assigned agents",
+ "DESCRIPTION": "Add agents for which this policy will be applicable.",
+ "ADD_BUTTON": "Add agent",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select agents to add",
+ "ADD_BUTTON": "Add"
+ },
+ "EMPTY_STATE": "No agents added",
+ "API": {
+ "SUCCESS_MESSAGE": "Agent successfully added to policy",
+ "ERROR_MESSAGE": "Failed to add agent to policy"
+ }
+ }
+ },
+ "DELETE_POLICY": {
+ "SUCCESS_MESSAGE": "Agent capacity policy deleted successfully",
+ "ERROR_MESSAGE": "Failed to delete agent capacity policy"
+ }
+ },
+ "DELETE_POLICY": {
+ "TITLE": "Delete policy",
+ "DESCRIPTION": "Are you sure you want to delete this policy? This action cannot be undone.",
+ "CONFIRM_BUTTON_LABEL": "Delete",
+ "CANCEL_BUTTON_LABEL": "Cancel"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/id/conversation.json b/app/javascript/dashboard/i18n/locale/id/conversation.json
index c5ea0097e..e9197b164 100644
--- a/app/javascript/dashboard/i18n/locale/id/conversation.json
+++ b/app/javascript/dashboard/i18n/locale/id/conversation.json
@@ -71,6 +71,17 @@
"SHOW_LABELS": "Tampilkan label",
"HIDE_LABELS": "Sembunyikan label"
},
+ "VOICE_CALL": {
+ "INCOMING_CALL": "Incoming call",
+ "OUTGOING_CALL": "Outgoing call",
+ "CALL_IN_PROGRESS": "Call in progress",
+ "NO_ANSWER": "No answer",
+ "MISSED_CALL": "Missed call",
+ "CALL_ENDED": "Call ended",
+ "NOT_ANSWERED_YET": "Not answered yet",
+ "THEY_ANSWERED": "They answered",
+ "YOU_ANSWERED": "You answered"
+ },
"HEADER": {
"RESOLVE_ACTION": "Menyelesaikan",
"REOPEN_ACTION": "Buka Kembali",
diff --git a/app/javascript/dashboard/i18n/locale/id/settings.json b/app/javascript/dashboard/i18n/locale/id/settings.json
index 916b9cc6e..7ec0eb569 100644
--- a/app/javascript/dashboard/i18n/locale/id/settings.json
+++ b/app/javascript/dashboard/i18n/locale/id/settings.json
@@ -51,6 +51,13 @@
"LARGER": "Larger",
"EXTRA_LARGE": "Extra Large"
}
+ },
+ "LANGUAGE": {
+ "TITLE": "Preferred Language",
+ "NOTE": "Choose the language you want to use.",
+ "UPDATE_SUCCESS": "Your Language settings have been updated successfully",
+ "UPDATE_ERROR": "There is an error while updating the language settings, please try again",
+ "USE_ACCOUNT_DEFAULT": "Use account default"
}
},
"MESSAGE_SIGNATURE_SECTION": {
@@ -330,6 +337,7 @@
"REPORTS_LABEL": "Label",
"REPORTS_INBOX": "Kotak Masuk",
"REPORTS_TEAM": "Tim",
+ "AGENT_ASSIGNMENT": "Agent Assignment",
"SET_AVAILABILITY_TITLE": "Atur diri anda sebagai",
"SET_YOUR_AVAILABILITY": "Atur ketersediaan Anda",
"SLA": "SLA",
@@ -418,5 +426,255 @@
"SWITCH_TO_REPLY": "Beralih ke Balasan",
"TOGGLE_SNOOZE_DROPDOWN": "Buka/Tutup dropdown penundaan"
}
+ },
+ "ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent assignment",
+ "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here"
+ },
+ "ASSIGNMENT_POLICY": {
+ "TITLE": "Assignment policy",
+ "DESCRIPTION": "Manage how conversations get assigned in inboxes.",
+ "FEATURES": [
+ "Assign by conversations evenly or by available capacity",
+ "Add fair distribution rules to avoid overloading any agent",
+ "Add inboxes to a policy - one policy per inbox"
+ ]
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "TITLE": "Agent capacity policy",
+ "DESCRIPTION": "Manage workload for agents.",
+ "FEATURES": [
+ "Define maximum conversations per inbox",
+ "Create exceptions based on labels and time",
+ "Add agents to a policy - one policy per agent"
+ ]
+ }
+ },
+ "AGENT_ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Assignment policy",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "ORDER": "Order",
+ "PRIORITY": "Prioritas",
+ "ACTIVE": "Aktif",
+ "INACTIVE": "Inactive",
+ "POPOVER": "Added inboxes",
+ "EDIT": "Edit"
+ },
+ "NO_RECORDS_FOUND": "No assignment policies found"
+ },
+ "CREATE": {
+ "HEADER": {
+ "TITLE": "Create assignment policy"
+ },
+ "CREATE_BUTTON": "Create policy",
+ "API": {
+ "SUCCESS_MESSAGE": "Assignment policy created successfully",
+ "ERROR_MESSAGE": "Failed to create assignment policy"
+ }
+ },
+ "EDIT": {
+ "HEADER": {
+ "TITLE": "Edit assignment policy"
+ },
+ "EDIT_BUTTON": "Update policy",
+ "CONFIRM_ADD_INBOX_DIALOG": {
+ "TITLE": "Add inbox",
+ "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.",
+ "CONFIRM_BUTTON_LABEL": "Continue",
+ "CANCEL_BUTTON_LABEL": "Batalkan"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Assignment policy updated successfully",
+ "ERROR_MESSAGE": "Failed to update assignment policy"
+ },
+ "INBOX_API": {
+ "ADD": {
+ "SUCCESS_MESSAGE": "Inbox added to policy successfully",
+ "ERROR_MESSAGE": "Failed to add inbox to policy"
+ },
+ "REMOVE": {
+ "SUCCESS_MESSAGE": "Inbox removed from policy successfully",
+ "ERROR_MESSAGE": "Failed to remove inbox from policy"
+ }
+ }
+ },
+ "FORM": {
+ "NAME": {
+ "LABEL": "Policy name:",
+ "PLACEHOLDER": "Enter policy name"
+ },
+ "DESCRIPTION": {
+ "LABEL": "Deskripsi:",
+ "PLACEHOLDER": "Enter description"
+ },
+ "STATUS": {
+ "LABEL": "Status:",
+ "PLACEHOLDER": "Select status",
+ "ACTIVE": "Policy is active",
+ "INACTIVE": "Policy is inactive"
+ },
+ "ASSIGNMENT_ORDER": {
+ "LABEL": "Assignment order",
+ "ROUND_ROBIN": {
+ "LABEL": "Round robin",
+ "DESCRIPTION": "Assign conversations evenly among agents."
+ },
+ "BALANCED": {
+ "LABEL": "Balanced",
+ "DESCRIPTION": "Assign conversations based on available capacity."
+ }
+ },
+ "ASSIGNMENT_PRIORITY": {
+ "LABEL": "Assignment priority",
+ "EARLIEST_CREATED": {
+ "LABEL": "Earliest created",
+ "DESCRIPTION": "The conversation that was created first gets assigned first."
+ },
+ "LONGEST_WAITING": {
+ "LABEL": "Longest waiting",
+ "DESCRIPTION": "The conversation waiting the longest gets assigned first."
+ }
+ },
+ "FAIR_DISTRIBUTION": {
+ "LABEL": "Fair distribution policy",
+ "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.",
+ "INPUT_MAX": "Assign max",
+ "DURATION": "Conversations per agent in every"
+ },
+ "INBOXES": {
+ "LABEL": "Added inboxes",
+ "DESCRIPTION": "Add inboxes for which this policy will be applicable.",
+ "ADD_BUTTON": "Add inbox",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select inboxes to add",
+ "ADD_BUTTON": "Tambahkan"
+ },
+ "EMPTY_STATE": "No inboxes added to this policy, add an inbox to get started",
+ "API": {
+ "SUCCESS_MESSAGE": "Inbox successfully added to policy",
+ "ERROR_MESSAGE": "Failed to add inbox to policy"
+ }
+ }
+ },
+ "DELETE_POLICY": {
+ "SUCCESS_MESSAGE": "Assignment policy deleted successfully",
+ "ERROR_MESSAGE": "Failed to delete assignment policy"
+ }
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent capacity",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "POPOVER": "Added agents",
+ "EDIT": "Edit"
+ },
+ "NO_RECORDS_FOUND": "No agent capacity policies found"
+ },
+ "CREATE": {
+ "HEADER": {
+ "TITLE": "Create agent capacity policy"
+ },
+ "CREATE_BUTTON": "Create policy",
+ "API": {
+ "SUCCESS_MESSAGE": "Agent capacity policy created successfully",
+ "ERROR_MESSAGE": "Failed to create agent capacity policy"
+ }
+ },
+ "EDIT": {
+ "HEADER": {
+ "TITLE": "Edit agent capacity policy"
+ },
+ "EDIT_BUTTON": "Update policy",
+ "CONFIRM_ADD_AGENT_DIALOG": {
+ "TITLE": "Add agent",
+ "DESCRIPTION": "{agentName} is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.",
+ "CONFIRM_BUTTON_LABEL": "Continue",
+ "CANCEL_BUTTON_LABEL": "Batalkan"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Agent capacity policy updated successfully",
+ "ERROR_MESSAGE": "Failed to update agent capacity policy"
+ },
+ "AGENT_API": {
+ "ADD": {
+ "SUCCESS_MESSAGE": "Agent added to policy successfully",
+ "ERROR_MESSAGE": "Failed to add agent to policy"
+ },
+ "REMOVE": {
+ "SUCCESS_MESSAGE": "Agent removed from policy successfully",
+ "ERROR_MESSAGE": "Failed to remove agent from policy"
+ }
+ }
+ },
+ "FORM": {
+ "NAME": {
+ "LABEL": "Policy name:",
+ "PLACEHOLDER": "Enter policy name"
+ },
+ "DESCRIPTION": {
+ "LABEL": "Deskripsi:",
+ "PLACEHOLDER": "Enter description"
+ },
+ "INBOX_CAPACITY_LIMIT": {
+ "LABEL": "Inbox capacity limits",
+ "ADD_BUTTON": "Add inbox",
+ "FIELD": {
+ "SELECT_INBOX": "Select inbox",
+ "MAX_CONVERSATIONS": "Max conversations",
+ "SET_LIMIT": "Set limit"
+ },
+ "EMPTY_STATE": "No inbox limit set"
+ },
+ "EXCLUSION_RULES": {
+ "LABEL": "Exclusion rules",
+ "DESCRIPTION": "Conversations that satisfy the following conditions would not count towards agent capacity",
+ "TAGS": {
+ "LABEL": "Exclude conversations tagged with specific labels",
+ "ADD_TAG": "add tag",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select tags to add"
+ },
+ "EMPTY_STATE": "No tags added to this policy."
+ },
+ "DURATION": {
+ "LABEL": "Exclude conversations older than a specified duration",
+ "PLACEHOLDER": "Set time"
+ }
+ },
+ "USERS": {
+ "LABEL": "Assigned agents",
+ "DESCRIPTION": "Add agents for which this policy will be applicable.",
+ "ADD_BUTTON": "Add agent",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select agents to add",
+ "ADD_BUTTON": "Tambahkan"
+ },
+ "EMPTY_STATE": "No agents added",
+ "API": {
+ "SUCCESS_MESSAGE": "Agent successfully added to policy",
+ "ERROR_MESSAGE": "Failed to add agent to policy"
+ }
+ }
+ },
+ "DELETE_POLICY": {
+ "SUCCESS_MESSAGE": "Agent capacity policy deleted successfully",
+ "ERROR_MESSAGE": "Failed to delete agent capacity policy"
+ }
+ },
+ "DELETE_POLICY": {
+ "TITLE": "Delete policy",
+ "DESCRIPTION": "Are you sure you want to delete this policy? This action cannot be undone.",
+ "CONFIRM_BUTTON_LABEL": "Hapus",
+ "CANCEL_BUTTON_LABEL": "Batalkan"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/is/conversation.json b/app/javascript/dashboard/i18n/locale/is/conversation.json
index fddb11d67..91f0421db 100644
--- a/app/javascript/dashboard/i18n/locale/is/conversation.json
+++ b/app/javascript/dashboard/i18n/locale/is/conversation.json
@@ -71,6 +71,17 @@
"SHOW_LABELS": "Show labels",
"HIDE_LABELS": "Hide labels"
},
+ "VOICE_CALL": {
+ "INCOMING_CALL": "Incoming call",
+ "OUTGOING_CALL": "Outgoing call",
+ "CALL_IN_PROGRESS": "Call in progress",
+ "NO_ANSWER": "No answer",
+ "MISSED_CALL": "Missed call",
+ "CALL_ENDED": "Call ended",
+ "NOT_ANSWERED_YET": "Not answered yet",
+ "THEY_ANSWERED": "They answered",
+ "YOU_ANSWERED": "You answered"
+ },
"HEADER": {
"RESOLVE_ACTION": "Resolve",
"REOPEN_ACTION": "Reopen",
diff --git a/app/javascript/dashboard/i18n/locale/is/settings.json b/app/javascript/dashboard/i18n/locale/is/settings.json
index 380695607..8c21fd840 100644
--- a/app/javascript/dashboard/i18n/locale/is/settings.json
+++ b/app/javascript/dashboard/i18n/locale/is/settings.json
@@ -51,6 +51,13 @@
"LARGER": "Larger",
"EXTRA_LARGE": "Extra Large"
}
+ },
+ "LANGUAGE": {
+ "TITLE": "Preferred Language",
+ "NOTE": "Choose the language you want to use.",
+ "UPDATE_SUCCESS": "Your Language settings have been updated successfully",
+ "UPDATE_ERROR": "There is an error while updating the language settings, please try again",
+ "USE_ACCOUNT_DEFAULT": "Use account default"
}
},
"MESSAGE_SIGNATURE_SECTION": {
@@ -330,6 +337,7 @@
"REPORTS_LABEL": "Labels",
"REPORTS_INBOX": "Innhólf",
"REPORTS_TEAM": "Team",
+ "AGENT_ASSIGNMENT": "Agent Assignment",
"SET_AVAILABILITY_TITLE": "Set yourself as",
"SET_YOUR_AVAILABILITY": "Set your availability",
"SLA": "SLA",
@@ -418,5 +426,255 @@
"SWITCH_TO_REPLY": "Switch to Reply",
"TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown"
}
+ },
+ "ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent assignment",
+ "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here"
+ },
+ "ASSIGNMENT_POLICY": {
+ "TITLE": "Assignment policy",
+ "DESCRIPTION": "Manage how conversations get assigned in inboxes.",
+ "FEATURES": [
+ "Assign by conversations evenly or by available capacity",
+ "Add fair distribution rules to avoid overloading any agent",
+ "Add inboxes to a policy - one policy per inbox"
+ ]
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "TITLE": "Agent capacity policy",
+ "DESCRIPTION": "Manage workload for agents.",
+ "FEATURES": [
+ "Define maximum conversations per inbox",
+ "Create exceptions based on labels and time",
+ "Add agents to a policy - one policy per agent"
+ ]
+ }
+ },
+ "AGENT_ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Assignment policy",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "ORDER": "Order",
+ "PRIORITY": "Priority",
+ "ACTIVE": "Active",
+ "INACTIVE": "Inactive",
+ "POPOVER": "Added inboxes",
+ "EDIT": "Breyta"
+ },
+ "NO_RECORDS_FOUND": "No assignment policies found"
+ },
+ "CREATE": {
+ "HEADER": {
+ "TITLE": "Create assignment policy"
+ },
+ "CREATE_BUTTON": "Create policy",
+ "API": {
+ "SUCCESS_MESSAGE": "Assignment policy created successfully",
+ "ERROR_MESSAGE": "Failed to create assignment policy"
+ }
+ },
+ "EDIT": {
+ "HEADER": {
+ "TITLE": "Edit assignment policy"
+ },
+ "EDIT_BUTTON": "Update policy",
+ "CONFIRM_ADD_INBOX_DIALOG": {
+ "TITLE": "Add inbox",
+ "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.",
+ "CONFIRM_BUTTON_LABEL": "Continue",
+ "CANCEL_BUTTON_LABEL": "Hætta við"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Assignment policy updated successfully",
+ "ERROR_MESSAGE": "Failed to update assignment policy"
+ },
+ "INBOX_API": {
+ "ADD": {
+ "SUCCESS_MESSAGE": "Inbox added to policy successfully",
+ "ERROR_MESSAGE": "Failed to add inbox to policy"
+ },
+ "REMOVE": {
+ "SUCCESS_MESSAGE": "Inbox removed from policy successfully",
+ "ERROR_MESSAGE": "Failed to remove inbox from policy"
+ }
+ }
+ },
+ "FORM": {
+ "NAME": {
+ "LABEL": "Policy name:",
+ "PLACEHOLDER": "Enter policy name"
+ },
+ "DESCRIPTION": {
+ "LABEL": "Description:",
+ "PLACEHOLDER": "Enter description"
+ },
+ "STATUS": {
+ "LABEL": "Staða:",
+ "PLACEHOLDER": "Select status",
+ "ACTIVE": "Policy is active",
+ "INACTIVE": "Policy is inactive"
+ },
+ "ASSIGNMENT_ORDER": {
+ "LABEL": "Assignment order",
+ "ROUND_ROBIN": {
+ "LABEL": "Round robin",
+ "DESCRIPTION": "Assign conversations evenly among agents."
+ },
+ "BALANCED": {
+ "LABEL": "Balanced",
+ "DESCRIPTION": "Assign conversations based on available capacity."
+ }
+ },
+ "ASSIGNMENT_PRIORITY": {
+ "LABEL": "Assignment priority",
+ "EARLIEST_CREATED": {
+ "LABEL": "Earliest created",
+ "DESCRIPTION": "The conversation that was created first gets assigned first."
+ },
+ "LONGEST_WAITING": {
+ "LABEL": "Longest waiting",
+ "DESCRIPTION": "The conversation waiting the longest gets assigned first."
+ }
+ },
+ "FAIR_DISTRIBUTION": {
+ "LABEL": "Fair distribution policy",
+ "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.",
+ "INPUT_MAX": "Assign max",
+ "DURATION": "Conversations per agent in every"
+ },
+ "INBOXES": {
+ "LABEL": "Added inboxes",
+ "DESCRIPTION": "Add inboxes for which this policy will be applicable.",
+ "ADD_BUTTON": "Add inbox",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select inboxes to add",
+ "ADD_BUTTON": "Bæta við"
+ },
+ "EMPTY_STATE": "No inboxes added to this policy, add an inbox to get started",
+ "API": {
+ "SUCCESS_MESSAGE": "Inbox successfully added to policy",
+ "ERROR_MESSAGE": "Failed to add inbox to policy"
+ }
+ }
+ },
+ "DELETE_POLICY": {
+ "SUCCESS_MESSAGE": "Assignment policy deleted successfully",
+ "ERROR_MESSAGE": "Failed to delete assignment policy"
+ }
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent capacity",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "POPOVER": "Added agents",
+ "EDIT": "Breyta"
+ },
+ "NO_RECORDS_FOUND": "No agent capacity policies found"
+ },
+ "CREATE": {
+ "HEADER": {
+ "TITLE": "Create agent capacity policy"
+ },
+ "CREATE_BUTTON": "Create policy",
+ "API": {
+ "SUCCESS_MESSAGE": "Agent capacity policy created successfully",
+ "ERROR_MESSAGE": "Failed to create agent capacity policy"
+ }
+ },
+ "EDIT": {
+ "HEADER": {
+ "TITLE": "Edit agent capacity policy"
+ },
+ "EDIT_BUTTON": "Update policy",
+ "CONFIRM_ADD_AGENT_DIALOG": {
+ "TITLE": "Add agent",
+ "DESCRIPTION": "{agentName} is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.",
+ "CONFIRM_BUTTON_LABEL": "Continue",
+ "CANCEL_BUTTON_LABEL": "Hætta við"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Agent capacity policy updated successfully",
+ "ERROR_MESSAGE": "Failed to update agent capacity policy"
+ },
+ "AGENT_API": {
+ "ADD": {
+ "SUCCESS_MESSAGE": "Agent added to policy successfully",
+ "ERROR_MESSAGE": "Failed to add agent to policy"
+ },
+ "REMOVE": {
+ "SUCCESS_MESSAGE": "Agent removed from policy successfully",
+ "ERROR_MESSAGE": "Failed to remove agent from policy"
+ }
+ }
+ },
+ "FORM": {
+ "NAME": {
+ "LABEL": "Policy name:",
+ "PLACEHOLDER": "Enter policy name"
+ },
+ "DESCRIPTION": {
+ "LABEL": "Description:",
+ "PLACEHOLDER": "Enter description"
+ },
+ "INBOX_CAPACITY_LIMIT": {
+ "LABEL": "Inbox capacity limits",
+ "ADD_BUTTON": "Add inbox",
+ "FIELD": {
+ "SELECT_INBOX": "Select inbox",
+ "MAX_CONVERSATIONS": "Max conversations",
+ "SET_LIMIT": "Set limit"
+ },
+ "EMPTY_STATE": "No inbox limit set"
+ },
+ "EXCLUSION_RULES": {
+ "LABEL": "Exclusion rules",
+ "DESCRIPTION": "Conversations that satisfy the following conditions would not count towards agent capacity",
+ "TAGS": {
+ "LABEL": "Exclude conversations tagged with specific labels",
+ "ADD_TAG": "add tag",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select tags to add"
+ },
+ "EMPTY_STATE": "No tags added to this policy."
+ },
+ "DURATION": {
+ "LABEL": "Exclude conversations older than a specified duration",
+ "PLACEHOLDER": "Set time"
+ }
+ },
+ "USERS": {
+ "LABEL": "Assigned agents",
+ "DESCRIPTION": "Add agents for which this policy will be applicable.",
+ "ADD_BUTTON": "Add agent",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select agents to add",
+ "ADD_BUTTON": "Bæta við"
+ },
+ "EMPTY_STATE": "No agents added",
+ "API": {
+ "SUCCESS_MESSAGE": "Agent successfully added to policy",
+ "ERROR_MESSAGE": "Failed to add agent to policy"
+ }
+ }
+ },
+ "DELETE_POLICY": {
+ "SUCCESS_MESSAGE": "Agent capacity policy deleted successfully",
+ "ERROR_MESSAGE": "Failed to delete agent capacity policy"
+ }
+ },
+ "DELETE_POLICY": {
+ "TITLE": "Delete policy",
+ "DESCRIPTION": "Are you sure you want to delete this policy? This action cannot be undone.",
+ "CONFIRM_BUTTON_LABEL": "Eyða",
+ "CANCEL_BUTTON_LABEL": "Hætta við"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/it/conversation.json b/app/javascript/dashboard/i18n/locale/it/conversation.json
index 14f51f7d8..5eccb170e 100644
--- a/app/javascript/dashboard/i18n/locale/it/conversation.json
+++ b/app/javascript/dashboard/i18n/locale/it/conversation.json
@@ -71,6 +71,17 @@
"SHOW_LABELS": "Show labels",
"HIDE_LABELS": "Hide labels"
},
+ "VOICE_CALL": {
+ "INCOMING_CALL": "Incoming call",
+ "OUTGOING_CALL": "Outgoing call",
+ "CALL_IN_PROGRESS": "Call in progress",
+ "NO_ANSWER": "No answer",
+ "MISSED_CALL": "Missed call",
+ "CALL_ENDED": "Call ended",
+ "NOT_ANSWERED_YET": "Not answered yet",
+ "THEY_ANSWERED": "They answered",
+ "YOU_ANSWERED": "You answered"
+ },
"HEADER": {
"RESOLVE_ACTION": "Risolvi",
"REOPEN_ACTION": "Riapri",
diff --git a/app/javascript/dashboard/i18n/locale/it/settings.json b/app/javascript/dashboard/i18n/locale/it/settings.json
index 443bf1c47..d71268e0a 100644
--- a/app/javascript/dashboard/i18n/locale/it/settings.json
+++ b/app/javascript/dashboard/i18n/locale/it/settings.json
@@ -51,6 +51,13 @@
"LARGER": "Larger",
"EXTRA_LARGE": "Extra Large"
}
+ },
+ "LANGUAGE": {
+ "TITLE": "Preferred Language",
+ "NOTE": "Choose the language you want to use.",
+ "UPDATE_SUCCESS": "Your Language settings have been updated successfully",
+ "UPDATE_ERROR": "There is an error while updating the language settings, please try again",
+ "USE_ACCOUNT_DEFAULT": "Use account default"
}
},
"MESSAGE_SIGNATURE_SECTION": {
@@ -330,6 +337,7 @@
"REPORTS_LABEL": "Etichette",
"REPORTS_INBOX": "Posta",
"REPORTS_TEAM": "Team",
+ "AGENT_ASSIGNMENT": "Agent Assignment",
"SET_AVAILABILITY_TITLE": "Imposta te stesso come",
"SET_YOUR_AVAILABILITY": "Imposta la tua disponibilità",
"SLA": "SLA",
@@ -418,5 +426,255 @@
"SWITCH_TO_REPLY": "Passa a Risposta",
"TOGGLE_SNOOZE_DROPDOWN": "Attiva/Disattiva sospensione a discesa"
}
+ },
+ "ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent assignment",
+ "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here"
+ },
+ "ASSIGNMENT_POLICY": {
+ "TITLE": "Assignment policy",
+ "DESCRIPTION": "Manage how conversations get assigned in inboxes.",
+ "FEATURES": [
+ "Assign by conversations evenly or by available capacity",
+ "Add fair distribution rules to avoid overloading any agent",
+ "Add inboxes to a policy - one policy per inbox"
+ ]
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "TITLE": "Agent capacity policy",
+ "DESCRIPTION": "Manage workload for agents.",
+ "FEATURES": [
+ "Define maximum conversations per inbox",
+ "Create exceptions based on labels and time",
+ "Add agents to a policy - one policy per agent"
+ ]
+ }
+ },
+ "AGENT_ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Assignment policy",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "ORDER": "Order",
+ "PRIORITY": "Priorità",
+ "ACTIVE": "Attivo",
+ "INACTIVE": "Inactive",
+ "POPOVER": "Added inboxes",
+ "EDIT": "Modifica"
+ },
+ "NO_RECORDS_FOUND": "No assignment policies found"
+ },
+ "CREATE": {
+ "HEADER": {
+ "TITLE": "Create assignment policy"
+ },
+ "CREATE_BUTTON": "Create policy",
+ "API": {
+ "SUCCESS_MESSAGE": "Assignment policy created successfully",
+ "ERROR_MESSAGE": "Failed to create assignment policy"
+ }
+ },
+ "EDIT": {
+ "HEADER": {
+ "TITLE": "Edit assignment policy"
+ },
+ "EDIT_BUTTON": "Update policy",
+ "CONFIRM_ADD_INBOX_DIALOG": {
+ "TITLE": "Add inbox",
+ "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.",
+ "CONFIRM_BUTTON_LABEL": "Continue",
+ "CANCEL_BUTTON_LABEL": "annulla"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Assignment policy updated successfully",
+ "ERROR_MESSAGE": "Failed to update assignment policy"
+ },
+ "INBOX_API": {
+ "ADD": {
+ "SUCCESS_MESSAGE": "Inbox added to policy successfully",
+ "ERROR_MESSAGE": "Failed to add inbox to policy"
+ },
+ "REMOVE": {
+ "SUCCESS_MESSAGE": "Inbox removed from policy successfully",
+ "ERROR_MESSAGE": "Failed to remove inbox from policy"
+ }
+ }
+ },
+ "FORM": {
+ "NAME": {
+ "LABEL": "Policy name:",
+ "PLACEHOLDER": "Enter policy name"
+ },
+ "DESCRIPTION": {
+ "LABEL": "Descrizione:",
+ "PLACEHOLDER": "Enter description"
+ },
+ "STATUS": {
+ "LABEL": "Stato:",
+ "PLACEHOLDER": "Select status",
+ "ACTIVE": "Policy is active",
+ "INACTIVE": "Policy is inactive"
+ },
+ "ASSIGNMENT_ORDER": {
+ "LABEL": "Assignment order",
+ "ROUND_ROBIN": {
+ "LABEL": "Round robin",
+ "DESCRIPTION": "Assign conversations evenly among agents."
+ },
+ "BALANCED": {
+ "LABEL": "Balanced",
+ "DESCRIPTION": "Assign conversations based on available capacity."
+ }
+ },
+ "ASSIGNMENT_PRIORITY": {
+ "LABEL": "Assignment priority",
+ "EARLIEST_CREATED": {
+ "LABEL": "Earliest created",
+ "DESCRIPTION": "The conversation that was created first gets assigned first."
+ },
+ "LONGEST_WAITING": {
+ "LABEL": "Longest waiting",
+ "DESCRIPTION": "The conversation waiting the longest gets assigned first."
+ }
+ },
+ "FAIR_DISTRIBUTION": {
+ "LABEL": "Fair distribution policy",
+ "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.",
+ "INPUT_MAX": "Assign max",
+ "DURATION": "Conversations per agent in every"
+ },
+ "INBOXES": {
+ "LABEL": "Added inboxes",
+ "DESCRIPTION": "Add inboxes for which this policy will be applicable.",
+ "ADD_BUTTON": "Add inbox",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select inboxes to add",
+ "ADD_BUTTON": "Aggiungi"
+ },
+ "EMPTY_STATE": "No inboxes added to this policy, add an inbox to get started",
+ "API": {
+ "SUCCESS_MESSAGE": "Inbox successfully added to policy",
+ "ERROR_MESSAGE": "Failed to add inbox to policy"
+ }
+ }
+ },
+ "DELETE_POLICY": {
+ "SUCCESS_MESSAGE": "Assignment policy deleted successfully",
+ "ERROR_MESSAGE": "Failed to delete assignment policy"
+ }
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent capacity",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "POPOVER": "Added agents",
+ "EDIT": "Modifica"
+ },
+ "NO_RECORDS_FOUND": "No agent capacity policies found"
+ },
+ "CREATE": {
+ "HEADER": {
+ "TITLE": "Create agent capacity policy"
+ },
+ "CREATE_BUTTON": "Create policy",
+ "API": {
+ "SUCCESS_MESSAGE": "Agent capacity policy created successfully",
+ "ERROR_MESSAGE": "Failed to create agent capacity policy"
+ }
+ },
+ "EDIT": {
+ "HEADER": {
+ "TITLE": "Edit agent capacity policy"
+ },
+ "EDIT_BUTTON": "Update policy",
+ "CONFIRM_ADD_AGENT_DIALOG": {
+ "TITLE": "Add agent",
+ "DESCRIPTION": "{agentName} is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.",
+ "CONFIRM_BUTTON_LABEL": "Continue",
+ "CANCEL_BUTTON_LABEL": "annulla"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Agent capacity policy updated successfully",
+ "ERROR_MESSAGE": "Failed to update agent capacity policy"
+ },
+ "AGENT_API": {
+ "ADD": {
+ "SUCCESS_MESSAGE": "Agent added to policy successfully",
+ "ERROR_MESSAGE": "Failed to add agent to policy"
+ },
+ "REMOVE": {
+ "SUCCESS_MESSAGE": "Agent removed from policy successfully",
+ "ERROR_MESSAGE": "Failed to remove agent from policy"
+ }
+ }
+ },
+ "FORM": {
+ "NAME": {
+ "LABEL": "Policy name:",
+ "PLACEHOLDER": "Enter policy name"
+ },
+ "DESCRIPTION": {
+ "LABEL": "Descrizione:",
+ "PLACEHOLDER": "Enter description"
+ },
+ "INBOX_CAPACITY_LIMIT": {
+ "LABEL": "Inbox capacity limits",
+ "ADD_BUTTON": "Add inbox",
+ "FIELD": {
+ "SELECT_INBOX": "Select inbox",
+ "MAX_CONVERSATIONS": "Max conversations",
+ "SET_LIMIT": "Set limit"
+ },
+ "EMPTY_STATE": "No inbox limit set"
+ },
+ "EXCLUSION_RULES": {
+ "LABEL": "Exclusion rules",
+ "DESCRIPTION": "Conversations that satisfy the following conditions would not count towards agent capacity",
+ "TAGS": {
+ "LABEL": "Exclude conversations tagged with specific labels",
+ "ADD_TAG": "add tag",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select tags to add"
+ },
+ "EMPTY_STATE": "No tags added to this policy."
+ },
+ "DURATION": {
+ "LABEL": "Exclude conversations older than a specified duration",
+ "PLACEHOLDER": "Set time"
+ }
+ },
+ "USERS": {
+ "LABEL": "Assigned agents",
+ "DESCRIPTION": "Add agents for which this policy will be applicable.",
+ "ADD_BUTTON": "Add agent",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select agents to add",
+ "ADD_BUTTON": "Aggiungi"
+ },
+ "EMPTY_STATE": "No agents added",
+ "API": {
+ "SUCCESS_MESSAGE": "Agent successfully added to policy",
+ "ERROR_MESSAGE": "Failed to add agent to policy"
+ }
+ }
+ },
+ "DELETE_POLICY": {
+ "SUCCESS_MESSAGE": "Agent capacity policy deleted successfully",
+ "ERROR_MESSAGE": "Failed to delete agent capacity policy"
+ }
+ },
+ "DELETE_POLICY": {
+ "TITLE": "Delete policy",
+ "DESCRIPTION": "Are you sure you want to delete this policy? This action cannot be undone.",
+ "CONFIRM_BUTTON_LABEL": "Elimina",
+ "CANCEL_BUTTON_LABEL": "annulla"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/ja/conversation.json b/app/javascript/dashboard/i18n/locale/ja/conversation.json
index c6b250858..99dde2a7a 100644
--- a/app/javascript/dashboard/i18n/locale/ja/conversation.json
+++ b/app/javascript/dashboard/i18n/locale/ja/conversation.json
@@ -71,6 +71,17 @@
"SHOW_LABELS": "ラベルを表示",
"HIDE_LABELS": "ラベルを隠す"
},
+ "VOICE_CALL": {
+ "INCOMING_CALL": "Incoming call",
+ "OUTGOING_CALL": "Outgoing call",
+ "CALL_IN_PROGRESS": "Call in progress",
+ "NO_ANSWER": "No answer",
+ "MISSED_CALL": "Missed call",
+ "CALL_ENDED": "Call ended",
+ "NOT_ANSWERED_YET": "Not answered yet",
+ "THEY_ANSWERED": "They answered",
+ "YOU_ANSWERED": "You answered"
+ },
"HEADER": {
"RESOLVE_ACTION": "解決する",
"REOPEN_ACTION": "再開する",
diff --git a/app/javascript/dashboard/i18n/locale/ja/settings.json b/app/javascript/dashboard/i18n/locale/ja/settings.json
index c938f7793..0e236a7ed 100644
--- a/app/javascript/dashboard/i18n/locale/ja/settings.json
+++ b/app/javascript/dashboard/i18n/locale/ja/settings.json
@@ -51,6 +51,13 @@
"LARGER": "Larger",
"EXTRA_LARGE": "Extra Large"
}
+ },
+ "LANGUAGE": {
+ "TITLE": "Preferred Language",
+ "NOTE": "Choose the language you want to use.",
+ "UPDATE_SUCCESS": "Your Language settings have been updated successfully",
+ "UPDATE_ERROR": "There is an error while updating the language settings, please try again",
+ "USE_ACCOUNT_DEFAULT": "Use account default"
}
},
"MESSAGE_SIGNATURE_SECTION": {
@@ -330,6 +337,7 @@
"REPORTS_LABEL": "ラベル",
"REPORTS_INBOX": "受信トレイ",
"REPORTS_TEAM": "チーム",
+ "AGENT_ASSIGNMENT": "Agent Assignment",
"SET_AVAILABILITY_TITLE": "ステータスを設定",
"SET_YOUR_AVAILABILITY": "利用可能ステータスを設定",
"SLA": "SLA",
@@ -418,5 +426,255 @@
"SWITCH_TO_REPLY": "返信に切り替え",
"TOGGLE_SNOOZE_DROPDOWN": "スヌーズドロップダウンを切り替え"
}
+ },
+ "ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent assignment",
+ "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here"
+ },
+ "ASSIGNMENT_POLICY": {
+ "TITLE": "Assignment policy",
+ "DESCRIPTION": "Manage how conversations get assigned in inboxes.",
+ "FEATURES": [
+ "Assign by conversations evenly or by available capacity",
+ "Add fair distribution rules to avoid overloading any agent",
+ "Add inboxes to a policy - one policy per inbox"
+ ]
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "TITLE": "Agent capacity policy",
+ "DESCRIPTION": "Manage workload for agents.",
+ "FEATURES": [
+ "Define maximum conversations per inbox",
+ "Create exceptions based on labels and time",
+ "Add agents to a policy - one policy per agent"
+ ]
+ }
+ },
+ "AGENT_ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Assignment policy",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "ORDER": "Order",
+ "PRIORITY": "優先度",
+ "ACTIVE": "有効",
+ "INACTIVE": "Inactive",
+ "POPOVER": "Added inboxes",
+ "EDIT": "編集"
+ },
+ "NO_RECORDS_FOUND": "No assignment policies found"
+ },
+ "CREATE": {
+ "HEADER": {
+ "TITLE": "Create assignment policy"
+ },
+ "CREATE_BUTTON": "Create policy",
+ "API": {
+ "SUCCESS_MESSAGE": "Assignment policy created successfully",
+ "ERROR_MESSAGE": "Failed to create assignment policy"
+ }
+ },
+ "EDIT": {
+ "HEADER": {
+ "TITLE": "Edit assignment policy"
+ },
+ "EDIT_BUTTON": "Update policy",
+ "CONFIRM_ADD_INBOX_DIALOG": {
+ "TITLE": "Add inbox",
+ "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.",
+ "CONFIRM_BUTTON_LABEL": "Continue",
+ "CANCEL_BUTTON_LABEL": "キャンセル"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Assignment policy updated successfully",
+ "ERROR_MESSAGE": "Failed to update assignment policy"
+ },
+ "INBOX_API": {
+ "ADD": {
+ "SUCCESS_MESSAGE": "Inbox added to policy successfully",
+ "ERROR_MESSAGE": "Failed to add inbox to policy"
+ },
+ "REMOVE": {
+ "SUCCESS_MESSAGE": "Inbox removed from policy successfully",
+ "ERROR_MESSAGE": "Failed to remove inbox from policy"
+ }
+ }
+ },
+ "FORM": {
+ "NAME": {
+ "LABEL": "Policy name:",
+ "PLACEHOLDER": "Enter policy name"
+ },
+ "DESCRIPTION": {
+ "LABEL": "説明:",
+ "PLACEHOLDER": "説明を入力"
+ },
+ "STATUS": {
+ "LABEL": "ステータス:",
+ "PLACEHOLDER": "状況を選択",
+ "ACTIVE": "Policy is active",
+ "INACTIVE": "Policy is inactive"
+ },
+ "ASSIGNMENT_ORDER": {
+ "LABEL": "Assignment order",
+ "ROUND_ROBIN": {
+ "LABEL": "Round robin",
+ "DESCRIPTION": "Assign conversations evenly among agents."
+ },
+ "BALANCED": {
+ "LABEL": "Balanced",
+ "DESCRIPTION": "Assign conversations based on available capacity."
+ }
+ },
+ "ASSIGNMENT_PRIORITY": {
+ "LABEL": "Assignment priority",
+ "EARLIEST_CREATED": {
+ "LABEL": "Earliest created",
+ "DESCRIPTION": "The conversation that was created first gets assigned first."
+ },
+ "LONGEST_WAITING": {
+ "LABEL": "Longest waiting",
+ "DESCRIPTION": "The conversation waiting the longest gets assigned first."
+ }
+ },
+ "FAIR_DISTRIBUTION": {
+ "LABEL": "Fair distribution policy",
+ "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.",
+ "INPUT_MAX": "Assign max",
+ "DURATION": "Conversations per agent in every"
+ },
+ "INBOXES": {
+ "LABEL": "Added inboxes",
+ "DESCRIPTION": "Add inboxes for which this policy will be applicable.",
+ "ADD_BUTTON": "Add inbox",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select inboxes to add",
+ "ADD_BUTTON": "追加"
+ },
+ "EMPTY_STATE": "No inboxes added to this policy, add an inbox to get started",
+ "API": {
+ "SUCCESS_MESSAGE": "Inbox successfully added to policy",
+ "ERROR_MESSAGE": "Failed to add inbox to policy"
+ }
+ }
+ },
+ "DELETE_POLICY": {
+ "SUCCESS_MESSAGE": "Assignment policy deleted successfully",
+ "ERROR_MESSAGE": "Failed to delete assignment policy"
+ }
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent capacity",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "POPOVER": "Added agents",
+ "EDIT": "編集"
+ },
+ "NO_RECORDS_FOUND": "No agent capacity policies found"
+ },
+ "CREATE": {
+ "HEADER": {
+ "TITLE": "Create agent capacity policy"
+ },
+ "CREATE_BUTTON": "Create policy",
+ "API": {
+ "SUCCESS_MESSAGE": "Agent capacity policy created successfully",
+ "ERROR_MESSAGE": "Failed to create agent capacity policy"
+ }
+ },
+ "EDIT": {
+ "HEADER": {
+ "TITLE": "Edit agent capacity policy"
+ },
+ "EDIT_BUTTON": "Update policy",
+ "CONFIRM_ADD_AGENT_DIALOG": {
+ "TITLE": "Add agent",
+ "DESCRIPTION": "{agentName} is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.",
+ "CONFIRM_BUTTON_LABEL": "Continue",
+ "CANCEL_BUTTON_LABEL": "キャンセル"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Agent capacity policy updated successfully",
+ "ERROR_MESSAGE": "Failed to update agent capacity policy"
+ },
+ "AGENT_API": {
+ "ADD": {
+ "SUCCESS_MESSAGE": "Agent added to policy successfully",
+ "ERROR_MESSAGE": "Failed to add agent to policy"
+ },
+ "REMOVE": {
+ "SUCCESS_MESSAGE": "Agent removed from policy successfully",
+ "ERROR_MESSAGE": "Failed to remove agent from policy"
+ }
+ }
+ },
+ "FORM": {
+ "NAME": {
+ "LABEL": "Policy name:",
+ "PLACEHOLDER": "Enter policy name"
+ },
+ "DESCRIPTION": {
+ "LABEL": "説明:",
+ "PLACEHOLDER": "説明を入力"
+ },
+ "INBOX_CAPACITY_LIMIT": {
+ "LABEL": "Inbox capacity limits",
+ "ADD_BUTTON": "Add inbox",
+ "FIELD": {
+ "SELECT_INBOX": "Select inbox",
+ "MAX_CONVERSATIONS": "Max conversations",
+ "SET_LIMIT": "Set limit"
+ },
+ "EMPTY_STATE": "No inbox limit set"
+ },
+ "EXCLUSION_RULES": {
+ "LABEL": "Exclusion rules",
+ "DESCRIPTION": "Conversations that satisfy the following conditions would not count towards agent capacity",
+ "TAGS": {
+ "LABEL": "Exclude conversations tagged with specific labels",
+ "ADD_TAG": "add tag",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select tags to add"
+ },
+ "EMPTY_STATE": "No tags added to this policy."
+ },
+ "DURATION": {
+ "LABEL": "Exclude conversations older than a specified duration",
+ "PLACEHOLDER": "Set time"
+ }
+ },
+ "USERS": {
+ "LABEL": "Assigned agents",
+ "DESCRIPTION": "Add agents for which this policy will be applicable.",
+ "ADD_BUTTON": "Add agent",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select agents to add",
+ "ADD_BUTTON": "追加"
+ },
+ "EMPTY_STATE": "No agents added",
+ "API": {
+ "SUCCESS_MESSAGE": "Agent successfully added to policy",
+ "ERROR_MESSAGE": "Failed to add agent to policy"
+ }
+ }
+ },
+ "DELETE_POLICY": {
+ "SUCCESS_MESSAGE": "Agent capacity policy deleted successfully",
+ "ERROR_MESSAGE": "Failed to delete agent capacity policy"
+ }
+ },
+ "DELETE_POLICY": {
+ "TITLE": "Delete policy",
+ "DESCRIPTION": "Are you sure you want to delete this policy? This action cannot be undone.",
+ "CONFIRM_BUTTON_LABEL": "削除",
+ "CANCEL_BUTTON_LABEL": "キャンセル"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/ka/conversation.json b/app/javascript/dashboard/i18n/locale/ka/conversation.json
index 93f375e7f..9fd39b70f 100644
--- a/app/javascript/dashboard/i18n/locale/ka/conversation.json
+++ b/app/javascript/dashboard/i18n/locale/ka/conversation.json
@@ -71,6 +71,17 @@
"SHOW_LABELS": "Show labels",
"HIDE_LABELS": "Hide labels"
},
+ "VOICE_CALL": {
+ "INCOMING_CALL": "Incoming call",
+ "OUTGOING_CALL": "Outgoing call",
+ "CALL_IN_PROGRESS": "Call in progress",
+ "NO_ANSWER": "No answer",
+ "MISSED_CALL": "Missed call",
+ "CALL_ENDED": "Call ended",
+ "NOT_ANSWERED_YET": "Not answered yet",
+ "THEY_ANSWERED": "They answered",
+ "YOU_ANSWERED": "You answered"
+ },
"HEADER": {
"RESOLVE_ACTION": "Resolve",
"REOPEN_ACTION": "Reopen",
diff --git a/app/javascript/dashboard/i18n/locale/ka/settings.json b/app/javascript/dashboard/i18n/locale/ka/settings.json
index 98c3f559b..7c10f417b 100644
--- a/app/javascript/dashboard/i18n/locale/ka/settings.json
+++ b/app/javascript/dashboard/i18n/locale/ka/settings.json
@@ -51,6 +51,13 @@
"LARGER": "Larger",
"EXTRA_LARGE": "Extra Large"
}
+ },
+ "LANGUAGE": {
+ "TITLE": "Preferred Language",
+ "NOTE": "Choose the language you want to use.",
+ "UPDATE_SUCCESS": "Your Language settings have been updated successfully",
+ "UPDATE_ERROR": "There is an error while updating the language settings, please try again",
+ "USE_ACCOUNT_DEFAULT": "Use account default"
}
},
"MESSAGE_SIGNATURE_SECTION": {
@@ -330,6 +337,7 @@
"REPORTS_LABEL": "Labels",
"REPORTS_INBOX": "Inbox",
"REPORTS_TEAM": "Team",
+ "AGENT_ASSIGNMENT": "Agent Assignment",
"SET_AVAILABILITY_TITLE": "Set yourself as",
"SET_YOUR_AVAILABILITY": "Set your availability",
"SLA": "SLA",
@@ -418,5 +426,255 @@
"SWITCH_TO_REPLY": "Switch to Reply",
"TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown"
}
+ },
+ "ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent assignment",
+ "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here"
+ },
+ "ASSIGNMENT_POLICY": {
+ "TITLE": "Assignment policy",
+ "DESCRIPTION": "Manage how conversations get assigned in inboxes.",
+ "FEATURES": [
+ "Assign by conversations evenly or by available capacity",
+ "Add fair distribution rules to avoid overloading any agent",
+ "Add inboxes to a policy - one policy per inbox"
+ ]
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "TITLE": "Agent capacity policy",
+ "DESCRIPTION": "Manage workload for agents.",
+ "FEATURES": [
+ "Define maximum conversations per inbox",
+ "Create exceptions based on labels and time",
+ "Add agents to a policy - one policy per agent"
+ ]
+ }
+ },
+ "AGENT_ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Assignment policy",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "ORDER": "Order",
+ "PRIORITY": "Priority",
+ "ACTIVE": "Active",
+ "INACTIVE": "Inactive",
+ "POPOVER": "Added inboxes",
+ "EDIT": "Edit"
+ },
+ "NO_RECORDS_FOUND": "No assignment policies found"
+ },
+ "CREATE": {
+ "HEADER": {
+ "TITLE": "Create assignment policy"
+ },
+ "CREATE_BUTTON": "Create policy",
+ "API": {
+ "SUCCESS_MESSAGE": "Assignment policy created successfully",
+ "ERROR_MESSAGE": "Failed to create assignment policy"
+ }
+ },
+ "EDIT": {
+ "HEADER": {
+ "TITLE": "Edit assignment policy"
+ },
+ "EDIT_BUTTON": "Update policy",
+ "CONFIRM_ADD_INBOX_DIALOG": {
+ "TITLE": "Add inbox",
+ "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.",
+ "CONFIRM_BUTTON_LABEL": "Continue",
+ "CANCEL_BUTTON_LABEL": "Cancel"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Assignment policy updated successfully",
+ "ERROR_MESSAGE": "Failed to update assignment policy"
+ },
+ "INBOX_API": {
+ "ADD": {
+ "SUCCESS_MESSAGE": "Inbox added to policy successfully",
+ "ERROR_MESSAGE": "Failed to add inbox to policy"
+ },
+ "REMOVE": {
+ "SUCCESS_MESSAGE": "Inbox removed from policy successfully",
+ "ERROR_MESSAGE": "Failed to remove inbox from policy"
+ }
+ }
+ },
+ "FORM": {
+ "NAME": {
+ "LABEL": "Policy name:",
+ "PLACEHOLDER": "Enter policy name"
+ },
+ "DESCRIPTION": {
+ "LABEL": "Description:",
+ "PLACEHOLDER": "Enter description"
+ },
+ "STATUS": {
+ "LABEL": "Status:",
+ "PLACEHOLDER": "Select status",
+ "ACTIVE": "Policy is active",
+ "INACTIVE": "Policy is inactive"
+ },
+ "ASSIGNMENT_ORDER": {
+ "LABEL": "Assignment order",
+ "ROUND_ROBIN": {
+ "LABEL": "Round robin",
+ "DESCRIPTION": "Assign conversations evenly among agents."
+ },
+ "BALANCED": {
+ "LABEL": "Balanced",
+ "DESCRIPTION": "Assign conversations based on available capacity."
+ }
+ },
+ "ASSIGNMENT_PRIORITY": {
+ "LABEL": "Assignment priority",
+ "EARLIEST_CREATED": {
+ "LABEL": "Earliest created",
+ "DESCRIPTION": "The conversation that was created first gets assigned first."
+ },
+ "LONGEST_WAITING": {
+ "LABEL": "Longest waiting",
+ "DESCRIPTION": "The conversation waiting the longest gets assigned first."
+ }
+ },
+ "FAIR_DISTRIBUTION": {
+ "LABEL": "Fair distribution policy",
+ "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.",
+ "INPUT_MAX": "Assign max",
+ "DURATION": "Conversations per agent in every"
+ },
+ "INBOXES": {
+ "LABEL": "Added inboxes",
+ "DESCRIPTION": "Add inboxes for which this policy will be applicable.",
+ "ADD_BUTTON": "Add inbox",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select inboxes to add",
+ "ADD_BUTTON": "Add"
+ },
+ "EMPTY_STATE": "No inboxes added to this policy, add an inbox to get started",
+ "API": {
+ "SUCCESS_MESSAGE": "Inbox successfully added to policy",
+ "ERROR_MESSAGE": "Failed to add inbox to policy"
+ }
+ }
+ },
+ "DELETE_POLICY": {
+ "SUCCESS_MESSAGE": "Assignment policy deleted successfully",
+ "ERROR_MESSAGE": "Failed to delete assignment policy"
+ }
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent capacity",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "POPOVER": "Added agents",
+ "EDIT": "Edit"
+ },
+ "NO_RECORDS_FOUND": "No agent capacity policies found"
+ },
+ "CREATE": {
+ "HEADER": {
+ "TITLE": "Create agent capacity policy"
+ },
+ "CREATE_BUTTON": "Create policy",
+ "API": {
+ "SUCCESS_MESSAGE": "Agent capacity policy created successfully",
+ "ERROR_MESSAGE": "Failed to create agent capacity policy"
+ }
+ },
+ "EDIT": {
+ "HEADER": {
+ "TITLE": "Edit agent capacity policy"
+ },
+ "EDIT_BUTTON": "Update policy",
+ "CONFIRM_ADD_AGENT_DIALOG": {
+ "TITLE": "Add agent",
+ "DESCRIPTION": "{agentName} is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.",
+ "CONFIRM_BUTTON_LABEL": "Continue",
+ "CANCEL_BUTTON_LABEL": "Cancel"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Agent capacity policy updated successfully",
+ "ERROR_MESSAGE": "Failed to update agent capacity policy"
+ },
+ "AGENT_API": {
+ "ADD": {
+ "SUCCESS_MESSAGE": "Agent added to policy successfully",
+ "ERROR_MESSAGE": "Failed to add agent to policy"
+ },
+ "REMOVE": {
+ "SUCCESS_MESSAGE": "Agent removed from policy successfully",
+ "ERROR_MESSAGE": "Failed to remove agent from policy"
+ }
+ }
+ },
+ "FORM": {
+ "NAME": {
+ "LABEL": "Policy name:",
+ "PLACEHOLDER": "Enter policy name"
+ },
+ "DESCRIPTION": {
+ "LABEL": "Description:",
+ "PLACEHOLDER": "Enter description"
+ },
+ "INBOX_CAPACITY_LIMIT": {
+ "LABEL": "Inbox capacity limits",
+ "ADD_BUTTON": "Add inbox",
+ "FIELD": {
+ "SELECT_INBOX": "Select inbox",
+ "MAX_CONVERSATIONS": "Max conversations",
+ "SET_LIMIT": "Set limit"
+ },
+ "EMPTY_STATE": "No inbox limit set"
+ },
+ "EXCLUSION_RULES": {
+ "LABEL": "Exclusion rules",
+ "DESCRIPTION": "Conversations that satisfy the following conditions would not count towards agent capacity",
+ "TAGS": {
+ "LABEL": "Exclude conversations tagged with specific labels",
+ "ADD_TAG": "add tag",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select tags to add"
+ },
+ "EMPTY_STATE": "No tags added to this policy."
+ },
+ "DURATION": {
+ "LABEL": "Exclude conversations older than a specified duration",
+ "PLACEHOLDER": "Set time"
+ }
+ },
+ "USERS": {
+ "LABEL": "Assigned agents",
+ "DESCRIPTION": "Add agents for which this policy will be applicable.",
+ "ADD_BUTTON": "Add agent",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select agents to add",
+ "ADD_BUTTON": "Add"
+ },
+ "EMPTY_STATE": "No agents added",
+ "API": {
+ "SUCCESS_MESSAGE": "Agent successfully added to policy",
+ "ERROR_MESSAGE": "Failed to add agent to policy"
+ }
+ }
+ },
+ "DELETE_POLICY": {
+ "SUCCESS_MESSAGE": "Agent capacity policy deleted successfully",
+ "ERROR_MESSAGE": "Failed to delete agent capacity policy"
+ }
+ },
+ "DELETE_POLICY": {
+ "TITLE": "Delete policy",
+ "DESCRIPTION": "Are you sure you want to delete this policy? This action cannot be undone.",
+ "CONFIRM_BUTTON_LABEL": "Delete",
+ "CANCEL_BUTTON_LABEL": "Cancel"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/ko/conversation.json b/app/javascript/dashboard/i18n/locale/ko/conversation.json
index 83e102572..1278ad79e 100644
--- a/app/javascript/dashboard/i18n/locale/ko/conversation.json
+++ b/app/javascript/dashboard/i18n/locale/ko/conversation.json
@@ -71,6 +71,17 @@
"SHOW_LABELS": "Show labels",
"HIDE_LABELS": "Hide labels"
},
+ "VOICE_CALL": {
+ "INCOMING_CALL": "Incoming call",
+ "OUTGOING_CALL": "Outgoing call",
+ "CALL_IN_PROGRESS": "Call in progress",
+ "NO_ANSWER": "No answer",
+ "MISSED_CALL": "Missed call",
+ "CALL_ENDED": "Call ended",
+ "NOT_ANSWERED_YET": "Not answered yet",
+ "THEY_ANSWERED": "They answered",
+ "YOU_ANSWERED": "You answered"
+ },
"HEADER": {
"RESOLVE_ACTION": "해결함",
"REOPEN_ACTION": "다시 열기",
diff --git a/app/javascript/dashboard/i18n/locale/ko/settings.json b/app/javascript/dashboard/i18n/locale/ko/settings.json
index 2dcbcd532..980e64262 100644
--- a/app/javascript/dashboard/i18n/locale/ko/settings.json
+++ b/app/javascript/dashboard/i18n/locale/ko/settings.json
@@ -51,6 +51,13 @@
"LARGER": "Larger",
"EXTRA_LARGE": "Extra Large"
}
+ },
+ "LANGUAGE": {
+ "TITLE": "Preferred Language",
+ "NOTE": "Choose the language you want to use.",
+ "UPDATE_SUCCESS": "Your Language settings have been updated successfully",
+ "UPDATE_ERROR": "There is an error while updating the language settings, please try again",
+ "USE_ACCOUNT_DEFAULT": "Use account default"
}
},
"MESSAGE_SIGNATURE_SECTION": {
@@ -330,6 +337,7 @@
"REPORTS_LABEL": "라벨",
"REPORTS_INBOX": "받은 메시지함",
"REPORTS_TEAM": "Team",
+ "AGENT_ASSIGNMENT": "Agent Assignment",
"SET_AVAILABILITY_TITLE": "Set yourself as",
"SET_YOUR_AVAILABILITY": "영업시간 설정",
"SLA": "SLA",
@@ -418,5 +426,255 @@
"SWITCH_TO_REPLY": "Switch to Reply",
"TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown"
}
+ },
+ "ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent assignment",
+ "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here"
+ },
+ "ASSIGNMENT_POLICY": {
+ "TITLE": "Assignment policy",
+ "DESCRIPTION": "Manage how conversations get assigned in inboxes.",
+ "FEATURES": [
+ "Assign by conversations evenly or by available capacity",
+ "Add fair distribution rules to avoid overloading any agent",
+ "Add inboxes to a policy - one policy per inbox"
+ ]
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "TITLE": "Agent capacity policy",
+ "DESCRIPTION": "Manage workload for agents.",
+ "FEATURES": [
+ "Define maximum conversations per inbox",
+ "Create exceptions based on labels and time",
+ "Add agents to a policy - one policy per agent"
+ ]
+ }
+ },
+ "AGENT_ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Assignment policy",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "ORDER": "Order",
+ "PRIORITY": "Priority",
+ "ACTIVE": "Active",
+ "INACTIVE": "Inactive",
+ "POPOVER": "Added inboxes",
+ "EDIT": "수정"
+ },
+ "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": "취소"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/lt/conversation.json b/app/javascript/dashboard/i18n/locale/lt/conversation.json
index cd3d7451d..eb8a0d144 100644
--- a/app/javascript/dashboard/i18n/locale/lt/conversation.json
+++ b/app/javascript/dashboard/i18n/locale/lt/conversation.json
@@ -71,6 +71,17 @@
"SHOW_LABELS": "Rodyti etiketes",
"HIDE_LABELS": "Slėpti etiketes"
},
+ "VOICE_CALL": {
+ "INCOMING_CALL": "Incoming call",
+ "OUTGOING_CALL": "Outgoing call",
+ "CALL_IN_PROGRESS": "Call in progress",
+ "NO_ANSWER": "No answer",
+ "MISSED_CALL": "Missed call",
+ "CALL_ENDED": "Call ended",
+ "NOT_ANSWERED_YET": "Not answered yet",
+ "THEY_ANSWERED": "They answered",
+ "YOU_ANSWERED": "You answered"
+ },
"HEADER": {
"RESOLVE_ACTION": "Išspręsti",
"REOPEN_ACTION": "Atidarykite iš naujo",
diff --git a/app/javascript/dashboard/i18n/locale/lt/settings.json b/app/javascript/dashboard/i18n/locale/lt/settings.json
index b80a711de..e1867468b 100644
--- a/app/javascript/dashboard/i18n/locale/lt/settings.json
+++ b/app/javascript/dashboard/i18n/locale/lt/settings.json
@@ -51,6 +51,13 @@
"LARGER": "Larger",
"EXTRA_LARGE": "Extra Large"
}
+ },
+ "LANGUAGE": {
+ "TITLE": "Preferred Language",
+ "NOTE": "Choose the language you want to use.",
+ "UPDATE_SUCCESS": "Your Language settings have been updated successfully",
+ "UPDATE_ERROR": "There is an error while updating the language settings, please try again",
+ "USE_ACCOUNT_DEFAULT": "Use account default"
}
},
"MESSAGE_SIGNATURE_SECTION": {
@@ -330,6 +337,7 @@
"REPORTS_LABEL": "Etiketės",
"REPORTS_INBOX": "Gautų laiškų aplankas",
"REPORTS_TEAM": "Komanda",
+ "AGENT_ASSIGNMENT": "Agent Assignment",
"SET_AVAILABILITY_TITLE": "Nustatykite save kaip",
"SET_YOUR_AVAILABILITY": "Nustatykite savo pasiekiamumą",
"SLA": "SLA",
@@ -418,5 +426,255 @@
"SWITCH_TO_REPLY": "Perjungti į Atsakyti",
"TOGGLE_SNOOZE_DROPDOWN": "Perjungti snooze išskleidžiamąjį meniu"
}
+ },
+ "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": "Prioritetas",
+ "ACTIVE": "Aktyvus",
+ "INACTIVE": "Inactive",
+ "POPOVER": "Added inboxes",
+ "EDIT": "Redaguoti"
+ },
+ "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": "Atšaukti"
+ },
+ "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": "Aprašymas:",
+ "PLACEHOLDER": "Enter description"
+ },
+ "STATUS": {
+ "LABEL": "Būsena:",
+ "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": "Pridėti"
+ },
+ "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": "Redaguoti"
+ },
+ "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": "Atšaukti"
+ },
+ "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": "Aprašymas:",
+ "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": "Pridėti"
+ },
+ "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": "Ištrinti",
+ "CANCEL_BUTTON_LABEL": "Atšaukti"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/lv/conversation.json b/app/javascript/dashboard/i18n/locale/lv/conversation.json
index 819402e5a..e8bf5e497 100644
--- a/app/javascript/dashboard/i18n/locale/lv/conversation.json
+++ b/app/javascript/dashboard/i18n/locale/lv/conversation.json
@@ -71,6 +71,17 @@
"SHOW_LABELS": "Rādīt etiķetes",
"HIDE_LABELS": "Slēpt etiķetes"
},
+ "VOICE_CALL": {
+ "INCOMING_CALL": "Incoming call",
+ "OUTGOING_CALL": "Outgoing call",
+ "CALL_IN_PROGRESS": "Call in progress",
+ "NO_ANSWER": "No answer",
+ "MISSED_CALL": "Missed call",
+ "CALL_ENDED": "Call ended",
+ "NOT_ANSWERED_YET": "Not answered yet",
+ "THEY_ANSWERED": "They answered",
+ "YOU_ANSWERED": "You answered"
+ },
"HEADER": {
"RESOLVE_ACTION": "Atrisināt",
"REOPEN_ACTION": "Atkārtoti atvērt",
diff --git a/app/javascript/dashboard/i18n/locale/lv/settings.json b/app/javascript/dashboard/i18n/locale/lv/settings.json
index 9caf8de0b..1aed96f2c 100644
--- a/app/javascript/dashboard/i18n/locale/lv/settings.json
+++ b/app/javascript/dashboard/i18n/locale/lv/settings.json
@@ -51,6 +51,13 @@
"LARGER": "Lielāks",
"EXTRA_LARGE": "Īpaši Liels"
}
+ },
+ "LANGUAGE": {
+ "TITLE": "Preferred Language",
+ "NOTE": "Choose the language you want to use.",
+ "UPDATE_SUCCESS": "Your Language settings have been updated successfully",
+ "UPDATE_ERROR": "There is an error while updating the language settings, please try again",
+ "USE_ACCOUNT_DEFAULT": "Use account default"
}
},
"MESSAGE_SIGNATURE_SECTION": {
@@ -330,6 +337,7 @@
"REPORTS_LABEL": "Etiķetes",
"REPORTS_INBOX": "Iesūtne",
"REPORTS_TEAM": "Komanda",
+ "AGENT_ASSIGNMENT": "Agent Assignment",
"SET_AVAILABILITY_TITLE": "Iestatīt sevi kā",
"SET_YOUR_AVAILABILITY": "Iestatīt savu pieejamību",
"SLA": "SLA",
@@ -418,5 +426,255 @@
"SWITCH_TO_REPLY": "Pārslēgties uz Atbildi",
"TOGGLE_SNOOZE_DROPDOWN": "Pārslēgt atlikšanas nolaižamo izvēlni"
}
+ },
+ "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āte",
+ "ACTIVE": "Aktīvs",
+ "INACTIVE": "Inactive",
+ "POPOVER": "Added inboxes",
+ "EDIT": "Rediģēt"
+ },
+ "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": "Atcelt"
+ },
+ "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": "Apraksts:",
+ "PLACEHOLDER": "Ievadiet aprakstu"
+ },
+ "STATUS": {
+ "LABEL": "Statuss:",
+ "PLACEHOLDER": "Izvēlēties statusu",
+ "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": "Pievienot"
+ },
+ "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": "Rediģēt"
+ },
+ "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": "Atcelt"
+ },
+ "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": "Apraksts:",
+ "PLACEHOLDER": "Ievadiet aprakstu"
+ },
+ "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": "Pievienot"
+ },
+ "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": "Dzēst",
+ "CANCEL_BUTTON_LABEL": "Atcelt"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/ml/conversation.json b/app/javascript/dashboard/i18n/locale/ml/conversation.json
index b224ba14b..0680bf250 100644
--- a/app/javascript/dashboard/i18n/locale/ml/conversation.json
+++ b/app/javascript/dashboard/i18n/locale/ml/conversation.json
@@ -71,6 +71,17 @@
"SHOW_LABELS": "Show labels",
"HIDE_LABELS": "Hide labels"
},
+ "VOICE_CALL": {
+ "INCOMING_CALL": "Incoming call",
+ "OUTGOING_CALL": "Outgoing call",
+ "CALL_IN_PROGRESS": "Call in progress",
+ "NO_ANSWER": "No answer",
+ "MISSED_CALL": "Missed call",
+ "CALL_ENDED": "Call ended",
+ "NOT_ANSWERED_YET": "Not answered yet",
+ "THEY_ANSWERED": "They answered",
+ "YOU_ANSWERED": "You answered"
+ },
"HEADER": {
"RESOLVE_ACTION": "പരിഹരിക്കുക",
"REOPEN_ACTION": "വീണ്ടും തുറക്കുക",
diff --git a/app/javascript/dashboard/i18n/locale/ml/settings.json b/app/javascript/dashboard/i18n/locale/ml/settings.json
index cd7eaaa4b..b6bb108b6 100644
--- a/app/javascript/dashboard/i18n/locale/ml/settings.json
+++ b/app/javascript/dashboard/i18n/locale/ml/settings.json
@@ -51,6 +51,13 @@
"LARGER": "Larger",
"EXTRA_LARGE": "Extra Large"
}
+ },
+ "LANGUAGE": {
+ "TITLE": "Preferred Language",
+ "NOTE": "Choose the language you want to use.",
+ "UPDATE_SUCCESS": "Your Language settings have been updated successfully",
+ "UPDATE_ERROR": "There is an error while updating the language settings, please try again",
+ "USE_ACCOUNT_DEFAULT": "Use account default"
}
},
"MESSAGE_SIGNATURE_SECTION": {
@@ -330,6 +337,7 @@
"REPORTS_LABEL": "ലേബലുകൾ",
"REPORTS_INBOX": "ഇൻബോക്സ്",
"REPORTS_TEAM": "Team",
+ "AGENT_ASSIGNMENT": "Agent Assignment",
"SET_AVAILABILITY_TITLE": "Set yourself as",
"SET_YOUR_AVAILABILITY": "Set your availability",
"SLA": "SLA",
@@ -418,5 +426,255 @@
"SWITCH_TO_REPLY": "Switch to Reply",
"TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown"
}
+ },
+ "ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent assignment",
+ "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here"
+ },
+ "ASSIGNMENT_POLICY": {
+ "TITLE": "Assignment policy",
+ "DESCRIPTION": "Manage how conversations get assigned in inboxes.",
+ "FEATURES": [
+ "Assign by conversations evenly or by available capacity",
+ "Add fair distribution rules to avoid overloading any agent",
+ "Add inboxes to a policy - one policy per inbox"
+ ]
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "TITLE": "Agent capacity policy",
+ "DESCRIPTION": "Manage workload for agents.",
+ "FEATURES": [
+ "Define maximum conversations per inbox",
+ "Create exceptions based on labels and time",
+ "Add agents to a policy - one policy per agent"
+ ]
+ }
+ },
+ "AGENT_ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Assignment policy",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "ORDER": "Order",
+ "PRIORITY": "Priority",
+ "ACTIVE": "സജീവമാണ്",
+ "INACTIVE": "Inactive",
+ "POPOVER": "Added inboxes",
+ "EDIT": "എഡിറ്റുചെയ്യുക"
+ },
+ "NO_RECORDS_FOUND": "No assignment policies found"
+ },
+ "CREATE": {
+ "HEADER": {
+ "TITLE": "Create assignment policy"
+ },
+ "CREATE_BUTTON": "Create policy",
+ "API": {
+ "SUCCESS_MESSAGE": "Assignment policy created successfully",
+ "ERROR_MESSAGE": "Failed to create assignment policy"
+ }
+ },
+ "EDIT": {
+ "HEADER": {
+ "TITLE": "Edit assignment policy"
+ },
+ "EDIT_BUTTON": "Update policy",
+ "CONFIRM_ADD_INBOX_DIALOG": {
+ "TITLE": "Add inbox",
+ "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.",
+ "CONFIRM_BUTTON_LABEL": "Continue",
+ "CANCEL_BUTTON_LABEL": "റദ്ദാക്കുക"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Assignment policy updated successfully",
+ "ERROR_MESSAGE": "Failed to update assignment policy"
+ },
+ "INBOX_API": {
+ "ADD": {
+ "SUCCESS_MESSAGE": "Inbox added to policy successfully",
+ "ERROR_MESSAGE": "Failed to add inbox to policy"
+ },
+ "REMOVE": {
+ "SUCCESS_MESSAGE": "Inbox removed from policy successfully",
+ "ERROR_MESSAGE": "Failed to remove inbox from policy"
+ }
+ }
+ },
+ "FORM": {
+ "NAME": {
+ "LABEL": "Policy name:",
+ "PLACEHOLDER": "Enter policy name"
+ },
+ "DESCRIPTION": {
+ "LABEL": "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": "ചേർക്കുക"
+ },
+ "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": "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": "ചേർക്കുക"
+ },
+ "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": "റദ്ദാക്കുക"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/ms/conversation.json b/app/javascript/dashboard/i18n/locale/ms/conversation.json
index e8d7d8bab..062782330 100644
--- a/app/javascript/dashboard/i18n/locale/ms/conversation.json
+++ b/app/javascript/dashboard/i18n/locale/ms/conversation.json
@@ -71,6 +71,17 @@
"SHOW_LABELS": "Show labels",
"HIDE_LABELS": "Hide labels"
},
+ "VOICE_CALL": {
+ "INCOMING_CALL": "Incoming call",
+ "OUTGOING_CALL": "Outgoing call",
+ "CALL_IN_PROGRESS": "Call in progress",
+ "NO_ANSWER": "No answer",
+ "MISSED_CALL": "Missed call",
+ "CALL_ENDED": "Call ended",
+ "NOT_ANSWERED_YET": "Not answered yet",
+ "THEY_ANSWERED": "They answered",
+ "YOU_ANSWERED": "You answered"
+ },
"HEADER": {
"RESOLVE_ACTION": "Resolve",
"REOPEN_ACTION": "Reopen",
diff --git a/app/javascript/dashboard/i18n/locale/ms/settings.json b/app/javascript/dashboard/i18n/locale/ms/settings.json
index 386fddf66..73117b0bb 100644
--- a/app/javascript/dashboard/i18n/locale/ms/settings.json
+++ b/app/javascript/dashboard/i18n/locale/ms/settings.json
@@ -51,6 +51,13 @@
"LARGER": "Larger",
"EXTRA_LARGE": "Extra Large"
}
+ },
+ "LANGUAGE": {
+ "TITLE": "Preferred Language",
+ "NOTE": "Choose the language you want to use.",
+ "UPDATE_SUCCESS": "Your Language settings have been updated successfully",
+ "UPDATE_ERROR": "There is an error while updating the language settings, please try again",
+ "USE_ACCOUNT_DEFAULT": "Use account default"
}
},
"MESSAGE_SIGNATURE_SECTION": {
@@ -330,6 +337,7 @@
"REPORTS_LABEL": "Labels",
"REPORTS_INBOX": "Inbox",
"REPORTS_TEAM": "Team",
+ "AGENT_ASSIGNMENT": "Agent Assignment",
"SET_AVAILABILITY_TITLE": "Set yourself as",
"SET_YOUR_AVAILABILITY": "Set your availability",
"SLA": "SLA",
@@ -418,5 +426,255 @@
"SWITCH_TO_REPLY": "Switch to Reply",
"TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown"
}
+ },
+ "ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent assignment",
+ "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here"
+ },
+ "ASSIGNMENT_POLICY": {
+ "TITLE": "Assignment policy",
+ "DESCRIPTION": "Manage how conversations get assigned in inboxes.",
+ "FEATURES": [
+ "Assign by conversations evenly or by available capacity",
+ "Add fair distribution rules to avoid overloading any agent",
+ "Add inboxes to a policy - one policy per inbox"
+ ]
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "TITLE": "Agent capacity policy",
+ "DESCRIPTION": "Manage workload for agents.",
+ "FEATURES": [
+ "Define maximum conversations per inbox",
+ "Create exceptions based on labels and time",
+ "Add agents to a policy - one policy per agent"
+ ]
+ }
+ },
+ "AGENT_ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Assignment policy",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "ORDER": "Order",
+ "PRIORITY": "Priority",
+ "ACTIVE": "Active",
+ "INACTIVE": "Inactive",
+ "POPOVER": "Added inboxes",
+ "EDIT": "Edit"
+ },
+ "NO_RECORDS_FOUND": "No assignment policies found"
+ },
+ "CREATE": {
+ "HEADER": {
+ "TITLE": "Create assignment policy"
+ },
+ "CREATE_BUTTON": "Create policy",
+ "API": {
+ "SUCCESS_MESSAGE": "Assignment policy created successfully",
+ "ERROR_MESSAGE": "Failed to create assignment policy"
+ }
+ },
+ "EDIT": {
+ "HEADER": {
+ "TITLE": "Edit assignment policy"
+ },
+ "EDIT_BUTTON": "Update policy",
+ "CONFIRM_ADD_INBOX_DIALOG": {
+ "TITLE": "Add inbox",
+ "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.",
+ "CONFIRM_BUTTON_LABEL": "Continue",
+ "CANCEL_BUTTON_LABEL": "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": "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": "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": "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": "Padamkan",
+ "CANCEL_BUTTON_LABEL": "Batalkan"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/ne/conversation.json b/app/javascript/dashboard/i18n/locale/ne/conversation.json
index 19601f8f3..d4f3d5f66 100644
--- a/app/javascript/dashboard/i18n/locale/ne/conversation.json
+++ b/app/javascript/dashboard/i18n/locale/ne/conversation.json
@@ -71,6 +71,17 @@
"SHOW_LABELS": "Show labels",
"HIDE_LABELS": "Hide labels"
},
+ "VOICE_CALL": {
+ "INCOMING_CALL": "Incoming call",
+ "OUTGOING_CALL": "Outgoing call",
+ "CALL_IN_PROGRESS": "Call in progress",
+ "NO_ANSWER": "No answer",
+ "MISSED_CALL": "Missed call",
+ "CALL_ENDED": "Call ended",
+ "NOT_ANSWERED_YET": "Not answered yet",
+ "THEY_ANSWERED": "They answered",
+ "YOU_ANSWERED": "You answered"
+ },
"HEADER": {
"RESOLVE_ACTION": "Resolve",
"REOPEN_ACTION": "Reopen",
diff --git a/app/javascript/dashboard/i18n/locale/ne/settings.json b/app/javascript/dashboard/i18n/locale/ne/settings.json
index 22ea8edd8..3822910f8 100644
--- a/app/javascript/dashboard/i18n/locale/ne/settings.json
+++ b/app/javascript/dashboard/i18n/locale/ne/settings.json
@@ -51,6 +51,13 @@
"LARGER": "Larger",
"EXTRA_LARGE": "Extra Large"
}
+ },
+ "LANGUAGE": {
+ "TITLE": "Preferred Language",
+ "NOTE": "Choose the language you want to use.",
+ "UPDATE_SUCCESS": "Your Language settings have been updated successfully",
+ "UPDATE_ERROR": "There is an error while updating the language settings, please try again",
+ "USE_ACCOUNT_DEFAULT": "Use account default"
}
},
"MESSAGE_SIGNATURE_SECTION": {
@@ -330,6 +337,7 @@
"REPORTS_LABEL": "Labels",
"REPORTS_INBOX": "Inbox",
"REPORTS_TEAM": "Team",
+ "AGENT_ASSIGNMENT": "Agent Assignment",
"SET_AVAILABILITY_TITLE": "Set yourself as",
"SET_YOUR_AVAILABILITY": "Set your availability",
"SLA": "SLA",
@@ -418,5 +426,255 @@
"SWITCH_TO_REPLY": "Switch to Reply",
"TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown"
}
+ },
+ "ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent assignment",
+ "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here"
+ },
+ "ASSIGNMENT_POLICY": {
+ "TITLE": "Assignment policy",
+ "DESCRIPTION": "Manage how conversations get assigned in inboxes.",
+ "FEATURES": [
+ "Assign by conversations evenly or by available capacity",
+ "Add fair distribution rules to avoid overloading any agent",
+ "Add inboxes to a policy - one policy per inbox"
+ ]
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "TITLE": "Agent capacity policy",
+ "DESCRIPTION": "Manage workload for agents.",
+ "FEATURES": [
+ "Define maximum conversations per inbox",
+ "Create exceptions based on labels and time",
+ "Add agents to a policy - one policy per agent"
+ ]
+ }
+ },
+ "AGENT_ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Assignment policy",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "ORDER": "Order",
+ "PRIORITY": "Priority",
+ "ACTIVE": "Active",
+ "INACTIVE": "Inactive",
+ "POPOVER": "Added inboxes",
+ "EDIT": "Edit"
+ },
+ "NO_RECORDS_FOUND": "No assignment policies found"
+ },
+ "CREATE": {
+ "HEADER": {
+ "TITLE": "Create assignment policy"
+ },
+ "CREATE_BUTTON": "Create policy",
+ "API": {
+ "SUCCESS_MESSAGE": "Assignment policy created successfully",
+ "ERROR_MESSAGE": "Failed to create assignment policy"
+ }
+ },
+ "EDIT": {
+ "HEADER": {
+ "TITLE": "Edit assignment policy"
+ },
+ "EDIT_BUTTON": "Update policy",
+ "CONFIRM_ADD_INBOX_DIALOG": {
+ "TITLE": "Add inbox",
+ "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.",
+ "CONFIRM_BUTTON_LABEL": "Continue",
+ "CANCEL_BUTTON_LABEL": "Cancel"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Assignment policy updated successfully",
+ "ERROR_MESSAGE": "Failed to update assignment policy"
+ },
+ "INBOX_API": {
+ "ADD": {
+ "SUCCESS_MESSAGE": "Inbox added to policy successfully",
+ "ERROR_MESSAGE": "Failed to add inbox to policy"
+ },
+ "REMOVE": {
+ "SUCCESS_MESSAGE": "Inbox removed from policy successfully",
+ "ERROR_MESSAGE": "Failed to remove inbox from policy"
+ }
+ }
+ },
+ "FORM": {
+ "NAME": {
+ "LABEL": "Policy name:",
+ "PLACEHOLDER": "Enter policy name"
+ },
+ "DESCRIPTION": {
+ "LABEL": "Description:",
+ "PLACEHOLDER": "Enter description"
+ },
+ "STATUS": {
+ "LABEL": "Status:",
+ "PLACEHOLDER": "Select status",
+ "ACTIVE": "Policy is active",
+ "INACTIVE": "Policy is inactive"
+ },
+ "ASSIGNMENT_ORDER": {
+ "LABEL": "Assignment order",
+ "ROUND_ROBIN": {
+ "LABEL": "Round robin",
+ "DESCRIPTION": "Assign conversations evenly among agents."
+ },
+ "BALANCED": {
+ "LABEL": "Balanced",
+ "DESCRIPTION": "Assign conversations based on available capacity."
+ }
+ },
+ "ASSIGNMENT_PRIORITY": {
+ "LABEL": "Assignment priority",
+ "EARLIEST_CREATED": {
+ "LABEL": "Earliest created",
+ "DESCRIPTION": "The conversation that was created first gets assigned first."
+ },
+ "LONGEST_WAITING": {
+ "LABEL": "Longest waiting",
+ "DESCRIPTION": "The conversation waiting the longest gets assigned first."
+ }
+ },
+ "FAIR_DISTRIBUTION": {
+ "LABEL": "Fair distribution policy",
+ "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.",
+ "INPUT_MAX": "Assign max",
+ "DURATION": "Conversations per agent in every"
+ },
+ "INBOXES": {
+ "LABEL": "Added inboxes",
+ "DESCRIPTION": "Add inboxes for which this policy will be applicable.",
+ "ADD_BUTTON": "Add inbox",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select inboxes to add",
+ "ADD_BUTTON": "Add"
+ },
+ "EMPTY_STATE": "No inboxes added to this policy, add an inbox to get started",
+ "API": {
+ "SUCCESS_MESSAGE": "Inbox successfully added to policy",
+ "ERROR_MESSAGE": "Failed to add inbox to policy"
+ }
+ }
+ },
+ "DELETE_POLICY": {
+ "SUCCESS_MESSAGE": "Assignment policy deleted successfully",
+ "ERROR_MESSAGE": "Failed to delete assignment policy"
+ }
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent capacity",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "POPOVER": "Added agents",
+ "EDIT": "Edit"
+ },
+ "NO_RECORDS_FOUND": "No agent capacity policies found"
+ },
+ "CREATE": {
+ "HEADER": {
+ "TITLE": "Create agent capacity policy"
+ },
+ "CREATE_BUTTON": "Create policy",
+ "API": {
+ "SUCCESS_MESSAGE": "Agent capacity policy created successfully",
+ "ERROR_MESSAGE": "Failed to create agent capacity policy"
+ }
+ },
+ "EDIT": {
+ "HEADER": {
+ "TITLE": "Edit agent capacity policy"
+ },
+ "EDIT_BUTTON": "Update policy",
+ "CONFIRM_ADD_AGENT_DIALOG": {
+ "TITLE": "Add agent",
+ "DESCRIPTION": "{agentName} is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.",
+ "CONFIRM_BUTTON_LABEL": "Continue",
+ "CANCEL_BUTTON_LABEL": "Cancel"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Agent capacity policy updated successfully",
+ "ERROR_MESSAGE": "Failed to update agent capacity policy"
+ },
+ "AGENT_API": {
+ "ADD": {
+ "SUCCESS_MESSAGE": "Agent added to policy successfully",
+ "ERROR_MESSAGE": "Failed to add agent to policy"
+ },
+ "REMOVE": {
+ "SUCCESS_MESSAGE": "Agent removed from policy successfully",
+ "ERROR_MESSAGE": "Failed to remove agent from policy"
+ }
+ }
+ },
+ "FORM": {
+ "NAME": {
+ "LABEL": "Policy name:",
+ "PLACEHOLDER": "Enter policy name"
+ },
+ "DESCRIPTION": {
+ "LABEL": "Description:",
+ "PLACEHOLDER": "Enter description"
+ },
+ "INBOX_CAPACITY_LIMIT": {
+ "LABEL": "Inbox capacity limits",
+ "ADD_BUTTON": "Add inbox",
+ "FIELD": {
+ "SELECT_INBOX": "Select inbox",
+ "MAX_CONVERSATIONS": "Max conversations",
+ "SET_LIMIT": "Set limit"
+ },
+ "EMPTY_STATE": "No inbox limit set"
+ },
+ "EXCLUSION_RULES": {
+ "LABEL": "Exclusion rules",
+ "DESCRIPTION": "Conversations that satisfy the following conditions would not count towards agent capacity",
+ "TAGS": {
+ "LABEL": "Exclude conversations tagged with specific labels",
+ "ADD_TAG": "add tag",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select tags to add"
+ },
+ "EMPTY_STATE": "No tags added to this policy."
+ },
+ "DURATION": {
+ "LABEL": "Exclude conversations older than a specified duration",
+ "PLACEHOLDER": "Set time"
+ }
+ },
+ "USERS": {
+ "LABEL": "Assigned agents",
+ "DESCRIPTION": "Add agents for which this policy will be applicable.",
+ "ADD_BUTTON": "Add agent",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select agents to add",
+ "ADD_BUTTON": "Add"
+ },
+ "EMPTY_STATE": "No agents added",
+ "API": {
+ "SUCCESS_MESSAGE": "Agent successfully added to policy",
+ "ERROR_MESSAGE": "Failed to add agent to policy"
+ }
+ }
+ },
+ "DELETE_POLICY": {
+ "SUCCESS_MESSAGE": "Agent capacity policy deleted successfully",
+ "ERROR_MESSAGE": "Failed to delete agent capacity policy"
+ }
+ },
+ "DELETE_POLICY": {
+ "TITLE": "Delete policy",
+ "DESCRIPTION": "Are you sure you want to delete this policy? This action cannot be undone.",
+ "CONFIRM_BUTTON_LABEL": "Delete",
+ "CANCEL_BUTTON_LABEL": "Cancel"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/nl/conversation.json b/app/javascript/dashboard/i18n/locale/nl/conversation.json
index b4c9f07d1..aee364321 100644
--- a/app/javascript/dashboard/i18n/locale/nl/conversation.json
+++ b/app/javascript/dashboard/i18n/locale/nl/conversation.json
@@ -71,6 +71,17 @@
"SHOW_LABELS": "Labels weergeven",
"HIDE_LABELS": "Labels verbergen"
},
+ "VOICE_CALL": {
+ "INCOMING_CALL": "Incoming call",
+ "OUTGOING_CALL": "Outgoing call",
+ "CALL_IN_PROGRESS": "Call in progress",
+ "NO_ANSWER": "No answer",
+ "MISSED_CALL": "Missed call",
+ "CALL_ENDED": "Call ended",
+ "NOT_ANSWERED_YET": "Not answered yet",
+ "THEY_ANSWERED": "They answered",
+ "YOU_ANSWERED": "You answered"
+ },
"HEADER": {
"RESOLVE_ACTION": "Oplossen",
"REOPEN_ACTION": "Heropenen",
diff --git a/app/javascript/dashboard/i18n/locale/nl/settings.json b/app/javascript/dashboard/i18n/locale/nl/settings.json
index 98ac5535b..b124172ad 100644
--- a/app/javascript/dashboard/i18n/locale/nl/settings.json
+++ b/app/javascript/dashboard/i18n/locale/nl/settings.json
@@ -51,6 +51,13 @@
"LARGER": "Larger",
"EXTRA_LARGE": "Extra Large"
}
+ },
+ "LANGUAGE": {
+ "TITLE": "Preferred Language",
+ "NOTE": "Choose the language you want to use.",
+ "UPDATE_SUCCESS": "Your Language settings have been updated successfully",
+ "UPDATE_ERROR": "There is an error while updating the language settings, please try again",
+ "USE_ACCOUNT_DEFAULT": "Use account default"
}
},
"MESSAGE_SIGNATURE_SECTION": {
@@ -330,6 +337,7 @@
"REPORTS_LABEL": "Labelen",
"REPORTS_INBOX": "Postvak In",
"REPORTS_TEAM": "Team",
+ "AGENT_ASSIGNMENT": "Agent Assignment",
"SET_AVAILABILITY_TITLE": "Set yourself as",
"SET_YOUR_AVAILABILITY": "Set your availability",
"SLA": "SLA",
@@ -418,5 +426,255 @@
"SWITCH_TO_REPLY": "Switch to Reply",
"TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown"
}
+ },
+ "ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent assignment",
+ "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here"
+ },
+ "ASSIGNMENT_POLICY": {
+ "TITLE": "Assignment policy",
+ "DESCRIPTION": "Manage how conversations get assigned in inboxes.",
+ "FEATURES": [
+ "Assign by conversations evenly or by available capacity",
+ "Add fair distribution rules to avoid overloading any agent",
+ "Add inboxes to a policy - one policy per inbox"
+ ]
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "TITLE": "Agent capacity policy",
+ "DESCRIPTION": "Manage workload for agents.",
+ "FEATURES": [
+ "Define maximum conversations per inbox",
+ "Create exceptions based on labels and time",
+ "Add agents to a policy - one policy per agent"
+ ]
+ }
+ },
+ "AGENT_ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Assignment policy",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "ORDER": "Order",
+ "PRIORITY": "Prioriteit",
+ "ACTIVE": "Actief",
+ "INACTIVE": "Inactive",
+ "POPOVER": "Added inboxes",
+ "EDIT": "Bewerken"
+ },
+ "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": "Annuleren"
+ },
+ "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": "Beschrijving:",
+ "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": "Toevoegen"
+ },
+ "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": "Bewerken"
+ },
+ "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": "Annuleren"
+ },
+ "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": "Beschrijving:",
+ "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": "Toevoegen"
+ },
+ "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": "Verwijderen",
+ "CANCEL_BUTTON_LABEL": "Annuleren"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/no/conversation.json b/app/javascript/dashboard/i18n/locale/no/conversation.json
index a4a46a90b..094adf7a4 100644
--- a/app/javascript/dashboard/i18n/locale/no/conversation.json
+++ b/app/javascript/dashboard/i18n/locale/no/conversation.json
@@ -71,6 +71,17 @@
"SHOW_LABELS": "Show labels",
"HIDE_LABELS": "Hide labels"
},
+ "VOICE_CALL": {
+ "INCOMING_CALL": "Incoming call",
+ "OUTGOING_CALL": "Outgoing call",
+ "CALL_IN_PROGRESS": "Call in progress",
+ "NO_ANSWER": "No answer",
+ "MISSED_CALL": "Missed call",
+ "CALL_ENDED": "Call ended",
+ "NOT_ANSWERED_YET": "Not answered yet",
+ "THEY_ANSWERED": "They answered",
+ "YOU_ANSWERED": "You answered"
+ },
"HEADER": {
"RESOLVE_ACTION": "Løs",
"REOPEN_ACTION": "Gjenåpne",
diff --git a/app/javascript/dashboard/i18n/locale/no/settings.json b/app/javascript/dashboard/i18n/locale/no/settings.json
index e2bffacc6..6b2774acf 100644
--- a/app/javascript/dashboard/i18n/locale/no/settings.json
+++ b/app/javascript/dashboard/i18n/locale/no/settings.json
@@ -51,6 +51,13 @@
"LARGER": "Larger",
"EXTRA_LARGE": "Extra Large"
}
+ },
+ "LANGUAGE": {
+ "TITLE": "Preferred Language",
+ "NOTE": "Choose the language you want to use.",
+ "UPDATE_SUCCESS": "Your Language settings have been updated successfully",
+ "UPDATE_ERROR": "There is an error while updating the language settings, please try again",
+ "USE_ACCOUNT_DEFAULT": "Use account default"
}
},
"MESSAGE_SIGNATURE_SECTION": {
@@ -330,6 +337,7 @@
"REPORTS_LABEL": "Etiketter",
"REPORTS_INBOX": "Inbox",
"REPORTS_TEAM": "Team",
+ "AGENT_ASSIGNMENT": "Agent Assignment",
"SET_AVAILABILITY_TITLE": "Set yourself as",
"SET_YOUR_AVAILABILITY": "Set your availability",
"SLA": "SLA",
@@ -418,5 +426,255 @@
"SWITCH_TO_REPLY": "Switch to Reply",
"TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown"
}
+ },
+ "ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent assignment",
+ "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here"
+ },
+ "ASSIGNMENT_POLICY": {
+ "TITLE": "Assignment policy",
+ "DESCRIPTION": "Manage how conversations get assigned in inboxes.",
+ "FEATURES": [
+ "Assign by conversations evenly or by available capacity",
+ "Add fair distribution rules to avoid overloading any agent",
+ "Add inboxes to a policy - one policy per inbox"
+ ]
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "TITLE": "Agent capacity policy",
+ "DESCRIPTION": "Manage workload for agents.",
+ "FEATURES": [
+ "Define maximum conversations per inbox",
+ "Create exceptions based on labels and time",
+ "Add agents to a policy - one policy per agent"
+ ]
+ }
+ },
+ "AGENT_ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Assignment policy",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "ORDER": "Order",
+ "PRIORITY": "Priority",
+ "ACTIVE": "Active",
+ "INACTIVE": "Inactive",
+ "POPOVER": "Added inboxes",
+ "EDIT": "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": "Avbryt"
+ },
+ "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": "Satus:",
+ "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": "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": "Avbryt"
+ },
+ "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": "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": "Slett",
+ "CANCEL_BUTTON_LABEL": "Avbryt"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/pl/conversation.json b/app/javascript/dashboard/i18n/locale/pl/conversation.json
index b3295ef79..2ffea2fee 100644
--- a/app/javascript/dashboard/i18n/locale/pl/conversation.json
+++ b/app/javascript/dashboard/i18n/locale/pl/conversation.json
@@ -71,6 +71,17 @@
"SHOW_LABELS": "Pokaż etykiety",
"HIDE_LABELS": "Ukryj etykiety"
},
+ "VOICE_CALL": {
+ "INCOMING_CALL": "Incoming call",
+ "OUTGOING_CALL": "Outgoing call",
+ "CALL_IN_PROGRESS": "Call in progress",
+ "NO_ANSWER": "No answer",
+ "MISSED_CALL": "Missed call",
+ "CALL_ENDED": "Call ended",
+ "NOT_ANSWERED_YET": "Not answered yet",
+ "THEY_ANSWERED": "They answered",
+ "YOU_ANSWERED": "You answered"
+ },
"HEADER": {
"RESOLVE_ACTION": "Rozwiąż",
"REOPEN_ACTION": "Otwórz ponownie",
diff --git a/app/javascript/dashboard/i18n/locale/pl/settings.json b/app/javascript/dashboard/i18n/locale/pl/settings.json
index 5c6d7312b..5c688452e 100644
--- a/app/javascript/dashboard/i18n/locale/pl/settings.json
+++ b/app/javascript/dashboard/i18n/locale/pl/settings.json
@@ -51,6 +51,13 @@
"LARGER": "Larger",
"EXTRA_LARGE": "Extra Large"
}
+ },
+ "LANGUAGE": {
+ "TITLE": "Preferred Language",
+ "NOTE": "Choose the language you want to use.",
+ "UPDATE_SUCCESS": "Your Language settings have been updated successfully",
+ "UPDATE_ERROR": "There is an error while updating the language settings, please try again",
+ "USE_ACCOUNT_DEFAULT": "Use account default"
}
},
"MESSAGE_SIGNATURE_SECTION": {
@@ -330,6 +337,7 @@
"REPORTS_LABEL": "Etykiety",
"REPORTS_INBOX": "Skrzynka odbiorcza",
"REPORTS_TEAM": "Zespół",
+ "AGENT_ASSIGNMENT": "Agent Assignment",
"SET_AVAILABILITY_TITLE": "Ustaw dostępność jako",
"SET_YOUR_AVAILABILITY": "Ustaw swoją dostępność",
"SLA": "SLA",
@@ -418,5 +426,255 @@
"SWITCH_TO_REPLY": "Przełącz do odpowiedzi",
"TOGGLE_SNOOZE_DROPDOWN": "Przełącz menu rozwijane drzemki"
}
+ },
+ "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": "Priorytet",
+ "ACTIVE": "Aktywne",
+ "INACTIVE": "Inactive",
+ "POPOVER": "Added inboxes",
+ "EDIT": "Edytuj"
+ },
+ "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": "Anuluj"
+ },
+ "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": "Opis:",
+ "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": "Dodaj"
+ },
+ "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": "Edytuj"
+ },
+ "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": "Anuluj"
+ },
+ "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": "Opis:",
+ "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": "Dodaj"
+ },
+ "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": "Usuń",
+ "CANCEL_BUTTON_LABEL": "Anuluj"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/pt/conversation.json b/app/javascript/dashboard/i18n/locale/pt/conversation.json
index 6a3047cbb..447c0e243 100644
--- a/app/javascript/dashboard/i18n/locale/pt/conversation.json
+++ b/app/javascript/dashboard/i18n/locale/pt/conversation.json
@@ -71,6 +71,17 @@
"SHOW_LABELS": "Mostrar etiquetas",
"HIDE_LABELS": "Ocultar etiquetas"
},
+ "VOICE_CALL": {
+ "INCOMING_CALL": "Incoming call",
+ "OUTGOING_CALL": "Outgoing call",
+ "CALL_IN_PROGRESS": "Call in progress",
+ "NO_ANSWER": "No answer",
+ "MISSED_CALL": "Missed call",
+ "CALL_ENDED": "Call ended",
+ "NOT_ANSWERED_YET": "Not answered yet",
+ "THEY_ANSWERED": "They answered",
+ "YOU_ANSWERED": "You answered"
+ },
"HEADER": {
"RESOLVE_ACTION": "Resolver",
"REOPEN_ACTION": "Reabrir",
diff --git a/app/javascript/dashboard/i18n/locale/pt/settings.json b/app/javascript/dashboard/i18n/locale/pt/settings.json
index 0f78e6469..295afe360 100644
--- a/app/javascript/dashboard/i18n/locale/pt/settings.json
+++ b/app/javascript/dashboard/i18n/locale/pt/settings.json
@@ -51,6 +51,13 @@
"LARGER": "Larger",
"EXTRA_LARGE": "Extra Large"
}
+ },
+ "LANGUAGE": {
+ "TITLE": "Preferred Language",
+ "NOTE": "Choose the language you want to use.",
+ "UPDATE_SUCCESS": "Your Language settings have been updated successfully",
+ "UPDATE_ERROR": "There is an error while updating the language settings, please try again",
+ "USE_ACCOUNT_DEFAULT": "Use account default"
}
},
"MESSAGE_SIGNATURE_SECTION": {
@@ -330,6 +337,7 @@
"REPORTS_LABEL": "Etiquetas",
"REPORTS_INBOX": "Caixa de Entrada",
"REPORTS_TEAM": "Equipa",
+ "AGENT_ASSIGNMENT": "Agent Assignment",
"SET_AVAILABILITY_TITLE": "Defina-se como",
"SET_YOUR_AVAILABILITY": "Definir disponibilidade",
"SLA": "SLA",
@@ -418,5 +426,255 @@
"SWITCH_TO_REPLY": "Mudar para resposta",
"TOGGLE_SNOOZE_DROPDOWN": "Ativar/desativar suspensos"
}
+ },
+ "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": "Prioridade",
+ "ACTIVE": "Ativa",
+ "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": "Descrição:",
+ "PLACEHOLDER": "Inserir descrição"
+ },
+ "STATUS": {
+ "LABEL": "Estado:",
+ "PLACEHOLDER": "Selecionar 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": "Adicionar"
+ },
+ "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": "Descrição:",
+ "PLACEHOLDER": "Inserir descrição"
+ },
+ "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": "Adicionar"
+ },
+ "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": "Excluir",
+ "CANCEL_BUTTON_LABEL": "Cancelar"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/pt_BR/attributesMgmt.json b/app/javascript/dashboard/i18n/locale/pt_BR/attributesMgmt.json
index 5011e70b9..799639ebc 100644
--- a/app/javascript/dashboard/i18n/locale/pt_BR/attributesMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/pt_BR/attributesMgmt.json
@@ -15,7 +15,7 @@
"LINK": "Link",
"DATE": "Data",
"LIST": "Lista",
- "CHECKBOX": "Checkbox"
+ "CHECKBOX": "Caixa de seleção"
},
"ADD": {
"TITLE": "Adicionar atributo personalizado",
diff --git a/app/javascript/dashboard/i18n/locale/pt_BR/conversation.json b/app/javascript/dashboard/i18n/locale/pt_BR/conversation.json
index aef3211fb..466c962c4 100644
--- a/app/javascript/dashboard/i18n/locale/pt_BR/conversation.json
+++ b/app/javascript/dashboard/i18n/locale/pt_BR/conversation.json
@@ -71,6 +71,17 @@
"SHOW_LABELS": "Mostrar etiquetas",
"HIDE_LABELS": "Ocultar as etiquetas"
},
+ "VOICE_CALL": {
+ "INCOMING_CALL": "Incoming call",
+ "OUTGOING_CALL": "Outgoing call",
+ "CALL_IN_PROGRESS": "Call in progress",
+ "NO_ANSWER": "No answer",
+ "MISSED_CALL": "Missed call",
+ "CALL_ENDED": "Call ended",
+ "NOT_ANSWERED_YET": "Not answered yet",
+ "THEY_ANSWERED": "They answered",
+ "YOU_ANSWERED": "You answered"
+ },
"HEADER": {
"RESOLVE_ACTION": "Resolver",
"REOPEN_ACTION": "Reabrir",
diff --git a/app/javascript/dashboard/i18n/locale/pt_BR/settings.json b/app/javascript/dashboard/i18n/locale/pt_BR/settings.json
index 29f75b325..042123a48 100644
--- a/app/javascript/dashboard/i18n/locale/pt_BR/settings.json
+++ b/app/javascript/dashboard/i18n/locale/pt_BR/settings.json
@@ -51,6 +51,13 @@
"LARGER": "Maior",
"EXTRA_LARGE": "Muito Grande"
}
+ },
+ "LANGUAGE": {
+ "TITLE": "Preferred Language",
+ "NOTE": "Choose the language you want to use.",
+ "UPDATE_SUCCESS": "Your Language settings have been updated successfully",
+ "UPDATE_ERROR": "There is an error while updating the language settings, please try again",
+ "USE_ACCOUNT_DEFAULT": "Use account default"
}
},
"MESSAGE_SIGNATURE_SECTION": {
@@ -226,7 +233,7 @@
"APPEARANCE": "Alterar Tema",
"SUPER_ADMIN_CONSOLE": "Console de Super Admin",
"DOCS": "Ler documentação",
- "CHANGELOG": "Changelog",
+ "CHANGELOG": "Notas de versão",
"LOGOUT": "Encerrar sessão"
},
"APP_GLOBAL": {
@@ -330,6 +337,7 @@
"REPORTS_LABEL": "Etiquetas",
"REPORTS_INBOX": "Caixa de Entrada",
"REPORTS_TEAM": "Time",
+ "AGENT_ASSIGNMENT": "Agent Assignment",
"SET_AVAILABILITY_TITLE": "Defina como",
"SET_YOUR_AVAILABILITY": "Disponibilidade",
"SLA": "SLA",
@@ -418,5 +426,255 @@
"SWITCH_TO_REPLY": "Mudar para resposta",
"TOGGLE_SNOOZE_DROPDOWN": "Ativar/desativar soneca"
}
+ },
+ "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": "Prioridade",
+ "ACTIVE": "Ativo",
+ "INACTIVE": "Inactive",
+ "POPOVER": "Added inboxes",
+ "EDIT": "Alterar"
+ },
+ "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": "Descrição:",
+ "PLACEHOLDER": "Insira a descrição"
+ },
+ "STATUS": {
+ "LABEL": "Status:",
+ "PLACEHOLDER": "Selecione 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": "Adicionar"
+ },
+ "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": "Alterar"
+ },
+ "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": "Descrição:",
+ "PLACEHOLDER": "Insira a descrição"
+ },
+ "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": "Adicionar"
+ },
+ "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": "Excluir",
+ "CANCEL_BUTTON_LABEL": "Cancelar"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/ro/conversation.json b/app/javascript/dashboard/i18n/locale/ro/conversation.json
index 539d61ba5..c0ae01bb2 100644
--- a/app/javascript/dashboard/i18n/locale/ro/conversation.json
+++ b/app/javascript/dashboard/i18n/locale/ro/conversation.json
@@ -71,6 +71,17 @@
"SHOW_LABELS": "Afișare etichete",
"HIDE_LABELS": "Ascunderea etichetelor"
},
+ "VOICE_CALL": {
+ "INCOMING_CALL": "Incoming call",
+ "OUTGOING_CALL": "Outgoing call",
+ "CALL_IN_PROGRESS": "Call in progress",
+ "NO_ANSWER": "No answer",
+ "MISSED_CALL": "Missed call",
+ "CALL_ENDED": "Call ended",
+ "NOT_ANSWERED_YET": "Not answered yet",
+ "THEY_ANSWERED": "They answered",
+ "YOU_ANSWERED": "You answered"
+ },
"HEADER": {
"RESOLVE_ACTION": "Rezolvă",
"REOPEN_ACTION": "Redeschide",
diff --git a/app/javascript/dashboard/i18n/locale/ro/settings.json b/app/javascript/dashboard/i18n/locale/ro/settings.json
index 570740b7c..dd8854b72 100644
--- a/app/javascript/dashboard/i18n/locale/ro/settings.json
+++ b/app/javascript/dashboard/i18n/locale/ro/settings.json
@@ -51,6 +51,13 @@
"LARGER": "Larger",
"EXTRA_LARGE": "Extra Large"
}
+ },
+ "LANGUAGE": {
+ "TITLE": "Preferred Language",
+ "NOTE": "Choose the language you want to use.",
+ "UPDATE_SUCCESS": "Your Language settings have been updated successfully",
+ "UPDATE_ERROR": "There is an error while updating the language settings, please try again",
+ "USE_ACCOUNT_DEFAULT": "Use account default"
}
},
"MESSAGE_SIGNATURE_SECTION": {
@@ -330,6 +337,7 @@
"REPORTS_LABEL": "Etichete",
"REPORTS_INBOX": "Inbox",
"REPORTS_TEAM": "Echipa",
+ "AGENT_ASSIGNMENT": "Agent Assignment",
"SET_AVAILABILITY_TITLE": "Setați-vă ca",
"SET_YOUR_AVAILABILITY": "Setați-vă disponibilitatea",
"SLA": "SLA",
@@ -418,5 +426,255 @@
"SWITCH_TO_REPLY": "Comutarea la Răspuns",
"TOGGLE_SNOOZE_DROPDOWN": "Comutați 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": "Prioritate",
+ "ACTIVE": "Activ",
+ "INACTIVE": "Inactive",
+ "POPOVER": "Added inboxes",
+ "EDIT": "Editare"
+ },
+ "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": "Renunță"
+ },
+ "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": "Descriere:",
+ "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": "Adaugă"
+ },
+ "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": "Editare"
+ },
+ "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": "Renunță"
+ },
+ "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": "Descriere:",
+ "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": "Adaugă"
+ },
+ "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": "Şterge",
+ "CANCEL_BUTTON_LABEL": "Renunță"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/ru/conversation.json b/app/javascript/dashboard/i18n/locale/ru/conversation.json
index 40eeef6b5..b4b4c1f3f 100644
--- a/app/javascript/dashboard/i18n/locale/ru/conversation.json
+++ b/app/javascript/dashboard/i18n/locale/ru/conversation.json
@@ -71,6 +71,17 @@
"SHOW_LABELS": "Показать метки",
"HIDE_LABELS": "Скрыть метки"
},
+ "VOICE_CALL": {
+ "INCOMING_CALL": "Incoming call",
+ "OUTGOING_CALL": "Outgoing call",
+ "CALL_IN_PROGRESS": "Call in progress",
+ "NO_ANSWER": "No answer",
+ "MISSED_CALL": "Missed call",
+ "CALL_ENDED": "Call ended",
+ "NOT_ANSWERED_YET": "Not answered yet",
+ "THEY_ANSWERED": "They answered",
+ "YOU_ANSWERED": "You answered"
+ },
"HEADER": {
"RESOLVE_ACTION": "Завершить",
"REOPEN_ACTION": "Открыть заново",
diff --git a/app/javascript/dashboard/i18n/locale/ru/settings.json b/app/javascript/dashboard/i18n/locale/ru/settings.json
index 749f11492..ae2e4f5cf 100644
--- a/app/javascript/dashboard/i18n/locale/ru/settings.json
+++ b/app/javascript/dashboard/i18n/locale/ru/settings.json
@@ -51,6 +51,13 @@
"LARGER": "Крупнее",
"EXTRA_LARGE": "Очень большой"
}
+ },
+ "LANGUAGE": {
+ "TITLE": "Preferred Language",
+ "NOTE": "Choose the language you want to use.",
+ "UPDATE_SUCCESS": "Your Language settings have been updated successfully",
+ "UPDATE_ERROR": "There is an error while updating the language settings, please try again",
+ "USE_ACCOUNT_DEFAULT": "Use account default"
}
},
"MESSAGE_SIGNATURE_SECTION": {
@@ -330,6 +337,7 @@
"REPORTS_LABEL": "Категории",
"REPORTS_INBOX": "Электронная почта",
"REPORTS_TEAM": "Команда",
+ "AGENT_ASSIGNMENT": "Agent Assignment",
"SET_AVAILABILITY_TITLE": "Установить себя",
"SET_YOUR_AVAILABILITY": "Настройте ваши рабочие часы",
"SLA": "SLA",
@@ -418,5 +426,255 @@
"SWITCH_TO_REPLY": "Переключиться на ответ",
"TOGGLE_SNOOZE_DROPDOWN": "Вкл/выкл повтор"
}
+ },
+ "ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent assignment",
+ "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here"
+ },
+ "ASSIGNMENT_POLICY": {
+ "TITLE": "Assignment policy",
+ "DESCRIPTION": "Manage how conversations get assigned in inboxes.",
+ "FEATURES": [
+ "Assign by conversations evenly or by available capacity",
+ "Add fair distribution rules to avoid overloading any agent",
+ "Add inboxes to a policy - one policy per inbox"
+ ]
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "TITLE": "Agent capacity policy",
+ "DESCRIPTION": "Manage workload for agents.",
+ "FEATURES": [
+ "Define maximum conversations per inbox",
+ "Create exceptions based on labels and time",
+ "Add agents to a policy - one policy per agent"
+ ]
+ }
+ },
+ "AGENT_ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Assignment policy",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "ORDER": "Order",
+ "PRIORITY": "Приоритет",
+ "ACTIVE": "Активно",
+ "INACTIVE": "Inactive",
+ "POPOVER": "Added inboxes",
+ "EDIT": "Редактировать"
+ },
+ "NO_RECORDS_FOUND": "No assignment policies found"
+ },
+ "CREATE": {
+ "HEADER": {
+ "TITLE": "Create assignment policy"
+ },
+ "CREATE_BUTTON": "Create policy",
+ "API": {
+ "SUCCESS_MESSAGE": "Assignment policy created successfully",
+ "ERROR_MESSAGE": "Failed to create assignment policy"
+ }
+ },
+ "EDIT": {
+ "HEADER": {
+ "TITLE": "Edit assignment policy"
+ },
+ "EDIT_BUTTON": "Update policy",
+ "CONFIRM_ADD_INBOX_DIALOG": {
+ "TITLE": "Add inbox",
+ "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.",
+ "CONFIRM_BUTTON_LABEL": "Continue",
+ "CANCEL_BUTTON_LABEL": "Отменить"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Assignment policy updated successfully",
+ "ERROR_MESSAGE": "Failed to update assignment policy"
+ },
+ "INBOX_API": {
+ "ADD": {
+ "SUCCESS_MESSAGE": "Inbox added to policy successfully",
+ "ERROR_MESSAGE": "Failed to add inbox to policy"
+ },
+ "REMOVE": {
+ "SUCCESS_MESSAGE": "Inbox removed from policy successfully",
+ "ERROR_MESSAGE": "Failed to remove inbox from policy"
+ }
+ }
+ },
+ "FORM": {
+ "NAME": {
+ "LABEL": "Policy name:",
+ "PLACEHOLDER": "Enter policy name"
+ },
+ "DESCRIPTION": {
+ "LABEL": "Описание:",
+ "PLACEHOLDER": "Введите описание"
+ },
+ "STATUS": {
+ "LABEL": "Статус:",
+ "PLACEHOLDER": "Выбрать статус",
+ "ACTIVE": "Policy is active",
+ "INACTIVE": "Policy is inactive"
+ },
+ "ASSIGNMENT_ORDER": {
+ "LABEL": "Assignment order",
+ "ROUND_ROBIN": {
+ "LABEL": "Round robin",
+ "DESCRIPTION": "Assign conversations evenly among agents."
+ },
+ "BALANCED": {
+ "LABEL": "Balanced",
+ "DESCRIPTION": "Assign conversations based on available capacity."
+ }
+ },
+ "ASSIGNMENT_PRIORITY": {
+ "LABEL": "Assignment priority",
+ "EARLIEST_CREATED": {
+ "LABEL": "Earliest created",
+ "DESCRIPTION": "The conversation that was created first gets assigned first."
+ },
+ "LONGEST_WAITING": {
+ "LABEL": "Longest waiting",
+ "DESCRIPTION": "The conversation waiting the longest gets assigned first."
+ }
+ },
+ "FAIR_DISTRIBUTION": {
+ "LABEL": "Fair distribution policy",
+ "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.",
+ "INPUT_MAX": "Assign max",
+ "DURATION": "Conversations per agent in every"
+ },
+ "INBOXES": {
+ "LABEL": "Added inboxes",
+ "DESCRIPTION": "Add inboxes for which this policy will be applicable.",
+ "ADD_BUTTON": "Add inbox",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select inboxes to add",
+ "ADD_BUTTON": "Добавить"
+ },
+ "EMPTY_STATE": "No inboxes added to this policy, add an inbox to get started",
+ "API": {
+ "SUCCESS_MESSAGE": "Inbox successfully added to policy",
+ "ERROR_MESSAGE": "Failed to add inbox to policy"
+ }
+ }
+ },
+ "DELETE_POLICY": {
+ "SUCCESS_MESSAGE": "Assignment policy deleted successfully",
+ "ERROR_MESSAGE": "Failed to delete assignment policy"
+ }
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent capacity",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "POPOVER": "Added agents",
+ "EDIT": "Редактировать"
+ },
+ "NO_RECORDS_FOUND": "No agent capacity policies found"
+ },
+ "CREATE": {
+ "HEADER": {
+ "TITLE": "Create agent capacity policy"
+ },
+ "CREATE_BUTTON": "Create policy",
+ "API": {
+ "SUCCESS_MESSAGE": "Agent capacity policy created successfully",
+ "ERROR_MESSAGE": "Failed to create agent capacity policy"
+ }
+ },
+ "EDIT": {
+ "HEADER": {
+ "TITLE": "Edit agent capacity policy"
+ },
+ "EDIT_BUTTON": "Update policy",
+ "CONFIRM_ADD_AGENT_DIALOG": {
+ "TITLE": "Add agent",
+ "DESCRIPTION": "{agentName} is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.",
+ "CONFIRM_BUTTON_LABEL": "Continue",
+ "CANCEL_BUTTON_LABEL": "Отменить"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Agent capacity policy updated successfully",
+ "ERROR_MESSAGE": "Failed to update agent capacity policy"
+ },
+ "AGENT_API": {
+ "ADD": {
+ "SUCCESS_MESSAGE": "Agent added to policy successfully",
+ "ERROR_MESSAGE": "Failed to add agent to policy"
+ },
+ "REMOVE": {
+ "SUCCESS_MESSAGE": "Agent removed from policy successfully",
+ "ERROR_MESSAGE": "Failed to remove agent from policy"
+ }
+ }
+ },
+ "FORM": {
+ "NAME": {
+ "LABEL": "Policy name:",
+ "PLACEHOLDER": "Enter policy name"
+ },
+ "DESCRIPTION": {
+ "LABEL": "Описание:",
+ "PLACEHOLDER": "Введите описание"
+ },
+ "INBOX_CAPACITY_LIMIT": {
+ "LABEL": "Inbox capacity limits",
+ "ADD_BUTTON": "Add inbox",
+ "FIELD": {
+ "SELECT_INBOX": "Select inbox",
+ "MAX_CONVERSATIONS": "Max conversations",
+ "SET_LIMIT": "Set limit"
+ },
+ "EMPTY_STATE": "No inbox limit set"
+ },
+ "EXCLUSION_RULES": {
+ "LABEL": "Exclusion rules",
+ "DESCRIPTION": "Conversations that satisfy the following conditions would not count towards agent capacity",
+ "TAGS": {
+ "LABEL": "Exclude conversations tagged with specific labels",
+ "ADD_TAG": "add tag",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select tags to add"
+ },
+ "EMPTY_STATE": "No tags added to this policy."
+ },
+ "DURATION": {
+ "LABEL": "Exclude conversations older than a specified duration",
+ "PLACEHOLDER": "Set time"
+ }
+ },
+ "USERS": {
+ "LABEL": "Assigned agents",
+ "DESCRIPTION": "Add agents for which this policy will be applicable.",
+ "ADD_BUTTON": "Add agent",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select agents to add",
+ "ADD_BUTTON": "Добавить"
+ },
+ "EMPTY_STATE": "No agents added",
+ "API": {
+ "SUCCESS_MESSAGE": "Agent successfully added to policy",
+ "ERROR_MESSAGE": "Failed to add agent to policy"
+ }
+ }
+ },
+ "DELETE_POLICY": {
+ "SUCCESS_MESSAGE": "Agent capacity policy deleted successfully",
+ "ERROR_MESSAGE": "Failed to delete agent capacity policy"
+ }
+ },
+ "DELETE_POLICY": {
+ "TITLE": "Delete policy",
+ "DESCRIPTION": "Are you sure you want to delete this policy? This action cannot be undone.",
+ "CONFIRM_BUTTON_LABEL": "Удалить",
+ "CANCEL_BUTTON_LABEL": "Отменить"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/sh/conversation.json b/app/javascript/dashboard/i18n/locale/sh/conversation.json
index 93f375e7f..9fd39b70f 100644
--- a/app/javascript/dashboard/i18n/locale/sh/conversation.json
+++ b/app/javascript/dashboard/i18n/locale/sh/conversation.json
@@ -71,6 +71,17 @@
"SHOW_LABELS": "Show labels",
"HIDE_LABELS": "Hide labels"
},
+ "VOICE_CALL": {
+ "INCOMING_CALL": "Incoming call",
+ "OUTGOING_CALL": "Outgoing call",
+ "CALL_IN_PROGRESS": "Call in progress",
+ "NO_ANSWER": "No answer",
+ "MISSED_CALL": "Missed call",
+ "CALL_ENDED": "Call ended",
+ "NOT_ANSWERED_YET": "Not answered yet",
+ "THEY_ANSWERED": "They answered",
+ "YOU_ANSWERED": "You answered"
+ },
"HEADER": {
"RESOLVE_ACTION": "Resolve",
"REOPEN_ACTION": "Reopen",
diff --git a/app/javascript/dashboard/i18n/locale/sh/settings.json b/app/javascript/dashboard/i18n/locale/sh/settings.json
index d547538db..c95eada84 100644
--- a/app/javascript/dashboard/i18n/locale/sh/settings.json
+++ b/app/javascript/dashboard/i18n/locale/sh/settings.json
@@ -51,6 +51,13 @@
"LARGER": "Larger",
"EXTRA_LARGE": "Extra Large"
}
+ },
+ "LANGUAGE": {
+ "TITLE": "Preferred Language",
+ "NOTE": "Choose the language you want to use.",
+ "UPDATE_SUCCESS": "Your Language settings have been updated successfully",
+ "UPDATE_ERROR": "There is an error while updating the language settings, please try again",
+ "USE_ACCOUNT_DEFAULT": "Use account default"
}
},
"MESSAGE_SIGNATURE_SECTION": {
@@ -330,6 +337,7 @@
"REPORTS_LABEL": "Labels",
"REPORTS_INBOX": "Inbox",
"REPORTS_TEAM": "Team",
+ "AGENT_ASSIGNMENT": "Agent Assignment",
"SET_AVAILABILITY_TITLE": "Set yourself as",
"SET_YOUR_AVAILABILITY": "Set your availability",
"SLA": "SLA",
@@ -418,5 +426,255 @@
"SWITCH_TO_REPLY": "Switch to Reply",
"TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown"
}
+ },
+ "ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent assignment",
+ "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here"
+ },
+ "ASSIGNMENT_POLICY": {
+ "TITLE": "Assignment policy",
+ "DESCRIPTION": "Manage how conversations get assigned in inboxes.",
+ "FEATURES": [
+ "Assign by conversations evenly or by available capacity",
+ "Add fair distribution rules to avoid overloading any agent",
+ "Add inboxes to a policy - one policy per inbox"
+ ]
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "TITLE": "Agent capacity policy",
+ "DESCRIPTION": "Manage workload for agents.",
+ "FEATURES": [
+ "Define maximum conversations per inbox",
+ "Create exceptions based on labels and time",
+ "Add agents to a policy - one policy per agent"
+ ]
+ }
+ },
+ "AGENT_ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Assignment policy",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "ORDER": "Order",
+ "PRIORITY": "Priority",
+ "ACTIVE": "Active",
+ "INACTIVE": "Inactive",
+ "POPOVER": "Added inboxes",
+ "EDIT": "Edit"
+ },
+ "NO_RECORDS_FOUND": "No assignment policies found"
+ },
+ "CREATE": {
+ "HEADER": {
+ "TITLE": "Create assignment policy"
+ },
+ "CREATE_BUTTON": "Create policy",
+ "API": {
+ "SUCCESS_MESSAGE": "Assignment policy created successfully",
+ "ERROR_MESSAGE": "Failed to create assignment policy"
+ }
+ },
+ "EDIT": {
+ "HEADER": {
+ "TITLE": "Edit assignment policy"
+ },
+ "EDIT_BUTTON": "Update policy",
+ "CONFIRM_ADD_INBOX_DIALOG": {
+ "TITLE": "Add inbox",
+ "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.",
+ "CONFIRM_BUTTON_LABEL": "Continue",
+ "CANCEL_BUTTON_LABEL": "Cancel"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Assignment policy updated successfully",
+ "ERROR_MESSAGE": "Failed to update assignment policy"
+ },
+ "INBOX_API": {
+ "ADD": {
+ "SUCCESS_MESSAGE": "Inbox added to policy successfully",
+ "ERROR_MESSAGE": "Failed to add inbox to policy"
+ },
+ "REMOVE": {
+ "SUCCESS_MESSAGE": "Inbox removed from policy successfully",
+ "ERROR_MESSAGE": "Failed to remove inbox from policy"
+ }
+ }
+ },
+ "FORM": {
+ "NAME": {
+ "LABEL": "Policy name:",
+ "PLACEHOLDER": "Enter policy name"
+ },
+ "DESCRIPTION": {
+ "LABEL": "Description:",
+ "PLACEHOLDER": "Enter description"
+ },
+ "STATUS": {
+ "LABEL": "Status:",
+ "PLACEHOLDER": "Select status",
+ "ACTIVE": "Policy is active",
+ "INACTIVE": "Policy is inactive"
+ },
+ "ASSIGNMENT_ORDER": {
+ "LABEL": "Assignment order",
+ "ROUND_ROBIN": {
+ "LABEL": "Round robin",
+ "DESCRIPTION": "Assign conversations evenly among agents."
+ },
+ "BALANCED": {
+ "LABEL": "Balanced",
+ "DESCRIPTION": "Assign conversations based on available capacity."
+ }
+ },
+ "ASSIGNMENT_PRIORITY": {
+ "LABEL": "Assignment priority",
+ "EARLIEST_CREATED": {
+ "LABEL": "Earliest created",
+ "DESCRIPTION": "The conversation that was created first gets assigned first."
+ },
+ "LONGEST_WAITING": {
+ "LABEL": "Longest waiting",
+ "DESCRIPTION": "The conversation waiting the longest gets assigned first."
+ }
+ },
+ "FAIR_DISTRIBUTION": {
+ "LABEL": "Fair distribution policy",
+ "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.",
+ "INPUT_MAX": "Assign max",
+ "DURATION": "Conversations per agent in every"
+ },
+ "INBOXES": {
+ "LABEL": "Added inboxes",
+ "DESCRIPTION": "Add inboxes for which this policy will be applicable.",
+ "ADD_BUTTON": "Add inbox",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select inboxes to add",
+ "ADD_BUTTON": "Add"
+ },
+ "EMPTY_STATE": "No inboxes added to this policy, add an inbox to get started",
+ "API": {
+ "SUCCESS_MESSAGE": "Inbox successfully added to policy",
+ "ERROR_MESSAGE": "Failed to add inbox to policy"
+ }
+ }
+ },
+ "DELETE_POLICY": {
+ "SUCCESS_MESSAGE": "Assignment policy deleted successfully",
+ "ERROR_MESSAGE": "Failed to delete assignment policy"
+ }
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent capacity",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "POPOVER": "Added agents",
+ "EDIT": "Edit"
+ },
+ "NO_RECORDS_FOUND": "No agent capacity policies found"
+ },
+ "CREATE": {
+ "HEADER": {
+ "TITLE": "Create agent capacity policy"
+ },
+ "CREATE_BUTTON": "Create policy",
+ "API": {
+ "SUCCESS_MESSAGE": "Agent capacity policy created successfully",
+ "ERROR_MESSAGE": "Failed to create agent capacity policy"
+ }
+ },
+ "EDIT": {
+ "HEADER": {
+ "TITLE": "Edit agent capacity policy"
+ },
+ "EDIT_BUTTON": "Update policy",
+ "CONFIRM_ADD_AGENT_DIALOG": {
+ "TITLE": "Add agent",
+ "DESCRIPTION": "{agentName} is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.",
+ "CONFIRM_BUTTON_LABEL": "Continue",
+ "CANCEL_BUTTON_LABEL": "Cancel"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Agent capacity policy updated successfully",
+ "ERROR_MESSAGE": "Failed to update agent capacity policy"
+ },
+ "AGENT_API": {
+ "ADD": {
+ "SUCCESS_MESSAGE": "Agent added to policy successfully",
+ "ERROR_MESSAGE": "Failed to add agent to policy"
+ },
+ "REMOVE": {
+ "SUCCESS_MESSAGE": "Agent removed from policy successfully",
+ "ERROR_MESSAGE": "Failed to remove agent from policy"
+ }
+ }
+ },
+ "FORM": {
+ "NAME": {
+ "LABEL": "Policy name:",
+ "PLACEHOLDER": "Enter policy name"
+ },
+ "DESCRIPTION": {
+ "LABEL": "Description:",
+ "PLACEHOLDER": "Enter description"
+ },
+ "INBOX_CAPACITY_LIMIT": {
+ "LABEL": "Inbox capacity limits",
+ "ADD_BUTTON": "Add inbox",
+ "FIELD": {
+ "SELECT_INBOX": "Select inbox",
+ "MAX_CONVERSATIONS": "Max conversations",
+ "SET_LIMIT": "Set limit"
+ },
+ "EMPTY_STATE": "No inbox limit set"
+ },
+ "EXCLUSION_RULES": {
+ "LABEL": "Exclusion rules",
+ "DESCRIPTION": "Conversations that satisfy the following conditions would not count towards agent capacity",
+ "TAGS": {
+ "LABEL": "Exclude conversations tagged with specific labels",
+ "ADD_TAG": "add tag",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select tags to add"
+ },
+ "EMPTY_STATE": "No tags added to this policy."
+ },
+ "DURATION": {
+ "LABEL": "Exclude conversations older than a specified duration",
+ "PLACEHOLDER": "Set time"
+ }
+ },
+ "USERS": {
+ "LABEL": "Assigned agents",
+ "DESCRIPTION": "Add agents for which this policy will be applicable.",
+ "ADD_BUTTON": "Add agent",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select agents to add",
+ "ADD_BUTTON": "Add"
+ },
+ "EMPTY_STATE": "No agents added",
+ "API": {
+ "SUCCESS_MESSAGE": "Agent successfully added to policy",
+ "ERROR_MESSAGE": "Failed to add agent to policy"
+ }
+ }
+ },
+ "DELETE_POLICY": {
+ "SUCCESS_MESSAGE": "Agent capacity policy deleted successfully",
+ "ERROR_MESSAGE": "Failed to delete agent capacity policy"
+ }
+ },
+ "DELETE_POLICY": {
+ "TITLE": "Delete policy",
+ "DESCRIPTION": "Are you sure you want to delete this policy? This action cannot be undone.",
+ "CONFIRM_BUTTON_LABEL": "Delete",
+ "CANCEL_BUTTON_LABEL": "Cancel"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/sk/conversation.json b/app/javascript/dashboard/i18n/locale/sk/conversation.json
index 0af78c50f..99dde6c92 100644
--- a/app/javascript/dashboard/i18n/locale/sk/conversation.json
+++ b/app/javascript/dashboard/i18n/locale/sk/conversation.json
@@ -71,6 +71,17 @@
"SHOW_LABELS": "Show labels",
"HIDE_LABELS": "Hide labels"
},
+ "VOICE_CALL": {
+ "INCOMING_CALL": "Incoming call",
+ "OUTGOING_CALL": "Outgoing call",
+ "CALL_IN_PROGRESS": "Call in progress",
+ "NO_ANSWER": "No answer",
+ "MISSED_CALL": "Missed call",
+ "CALL_ENDED": "Call ended",
+ "NOT_ANSWERED_YET": "Not answered yet",
+ "THEY_ANSWERED": "They answered",
+ "YOU_ANSWERED": "You answered"
+ },
"HEADER": {
"RESOLVE_ACTION": "Vyriešiť",
"REOPEN_ACTION": "Znovu otvoriť",
diff --git a/app/javascript/dashboard/i18n/locale/sk/settings.json b/app/javascript/dashboard/i18n/locale/sk/settings.json
index 9f452890d..777926e42 100644
--- a/app/javascript/dashboard/i18n/locale/sk/settings.json
+++ b/app/javascript/dashboard/i18n/locale/sk/settings.json
@@ -51,6 +51,13 @@
"LARGER": "Larger",
"EXTRA_LARGE": "Extra Large"
}
+ },
+ "LANGUAGE": {
+ "TITLE": "Preferred Language",
+ "NOTE": "Choose the language you want to use.",
+ "UPDATE_SUCCESS": "Your Language settings have been updated successfully",
+ "UPDATE_ERROR": "There is an error while updating the language settings, please try again",
+ "USE_ACCOUNT_DEFAULT": "Use account default"
}
},
"MESSAGE_SIGNATURE_SECTION": {
@@ -330,6 +337,7 @@
"REPORTS_LABEL": "Labels",
"REPORTS_INBOX": "Schránka",
"REPORTS_TEAM": "Team",
+ "AGENT_ASSIGNMENT": "Agent Assignment",
"SET_AVAILABILITY_TITLE": "Set yourself as",
"SET_YOUR_AVAILABILITY": "Nastavte svoju dostupnosť",
"SLA": "SLA",
@@ -418,5 +426,255 @@
"SWITCH_TO_REPLY": "Prepnúť na odpoveď",
"TOGGLE_SNOOZE_DROPDOWN": "Prepínanie módu \"snooze\""
}
+ },
+ "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": "Upraviť"
+ },
+ "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šiť"
+ },
+ "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": "Pridať"
+ },
+ "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": "Upraviť"
+ },
+ "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šiť"
+ },
+ "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": "Pridať"
+ },
+ "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": "Vymazať",
+ "CANCEL_BUTTON_LABEL": "Zrušiť"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/sl/conversation.json b/app/javascript/dashboard/i18n/locale/sl/conversation.json
index 9bfbd7180..24bf95f58 100644
--- a/app/javascript/dashboard/i18n/locale/sl/conversation.json
+++ b/app/javascript/dashboard/i18n/locale/sl/conversation.json
@@ -71,6 +71,17 @@
"SHOW_LABELS": "Show labels",
"HIDE_LABELS": "Hide labels"
},
+ "VOICE_CALL": {
+ "INCOMING_CALL": "Incoming call",
+ "OUTGOING_CALL": "Outgoing call",
+ "CALL_IN_PROGRESS": "Call in progress",
+ "NO_ANSWER": "No answer",
+ "MISSED_CALL": "Missed call",
+ "CALL_ENDED": "Call ended",
+ "NOT_ANSWERED_YET": "Not answered yet",
+ "THEY_ANSWERED": "They answered",
+ "YOU_ANSWERED": "You answered"
+ },
"HEADER": {
"RESOLVE_ACTION": "Resolve",
"REOPEN_ACTION": "Reopen",
diff --git a/app/javascript/dashboard/i18n/locale/sl/settings.json b/app/javascript/dashboard/i18n/locale/sl/settings.json
index 4948a016c..7b4f7019a 100644
--- a/app/javascript/dashboard/i18n/locale/sl/settings.json
+++ b/app/javascript/dashboard/i18n/locale/sl/settings.json
@@ -51,6 +51,13 @@
"LARGER": "Larger",
"EXTRA_LARGE": "Extra Large"
}
+ },
+ "LANGUAGE": {
+ "TITLE": "Preferred Language",
+ "NOTE": "Choose the language you want to use.",
+ "UPDATE_SUCCESS": "Your Language settings have been updated successfully",
+ "UPDATE_ERROR": "There is an error while updating the language settings, please try again",
+ "USE_ACCOUNT_DEFAULT": "Use account default"
}
},
"MESSAGE_SIGNATURE_SECTION": {
@@ -330,6 +337,7 @@
"REPORTS_LABEL": "Labels",
"REPORTS_INBOX": "Inbox",
"REPORTS_TEAM": "Team",
+ "AGENT_ASSIGNMENT": "Agent Assignment",
"SET_AVAILABILITY_TITLE": "Set yourself as",
"SET_YOUR_AVAILABILITY": "Set your availability",
"SLA": "SLA",
@@ -418,5 +426,255 @@
"SWITCH_TO_REPLY": "Switch to Reply",
"TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown"
}
+ },
+ "ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent assignment",
+ "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here"
+ },
+ "ASSIGNMENT_POLICY": {
+ "TITLE": "Assignment policy",
+ "DESCRIPTION": "Manage how conversations get assigned in inboxes.",
+ "FEATURES": [
+ "Assign by conversations evenly or by available capacity",
+ "Add fair distribution rules to avoid overloading any agent",
+ "Add inboxes to a policy - one policy per inbox"
+ ]
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "TITLE": "Agent capacity policy",
+ "DESCRIPTION": "Manage workload for agents.",
+ "FEATURES": [
+ "Define maximum conversations per inbox",
+ "Create exceptions based on labels and time",
+ "Add agents to a policy - one policy per agent"
+ ]
+ }
+ },
+ "AGENT_ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Assignment policy",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "ORDER": "Order",
+ "PRIORITY": "Prioriteta",
+ "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"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/sq/conversation.json b/app/javascript/dashboard/i18n/locale/sq/conversation.json
index 5f74260fd..4089631cf 100644
--- a/app/javascript/dashboard/i18n/locale/sq/conversation.json
+++ b/app/javascript/dashboard/i18n/locale/sq/conversation.json
@@ -71,6 +71,17 @@
"SHOW_LABELS": "Show labels",
"HIDE_LABELS": "Hide labels"
},
+ "VOICE_CALL": {
+ "INCOMING_CALL": "Incoming call",
+ "OUTGOING_CALL": "Outgoing call",
+ "CALL_IN_PROGRESS": "Call in progress",
+ "NO_ANSWER": "No answer",
+ "MISSED_CALL": "Missed call",
+ "CALL_ENDED": "Call ended",
+ "NOT_ANSWERED_YET": "Not answered yet",
+ "THEY_ANSWERED": "They answered",
+ "YOU_ANSWERED": "You answered"
+ },
"HEADER": {
"RESOLVE_ACTION": "Resolve",
"REOPEN_ACTION": "Reopen",
diff --git a/app/javascript/dashboard/i18n/locale/sq/settings.json b/app/javascript/dashboard/i18n/locale/sq/settings.json
index 705e75d37..75cddb565 100644
--- a/app/javascript/dashboard/i18n/locale/sq/settings.json
+++ b/app/javascript/dashboard/i18n/locale/sq/settings.json
@@ -51,6 +51,13 @@
"LARGER": "Larger",
"EXTRA_LARGE": "Extra Large"
}
+ },
+ "LANGUAGE": {
+ "TITLE": "Preferred Language",
+ "NOTE": "Choose the language you want to use.",
+ "UPDATE_SUCCESS": "Your Language settings have been updated successfully",
+ "UPDATE_ERROR": "There is an error while updating the language settings, please try again",
+ "USE_ACCOUNT_DEFAULT": "Use account default"
}
},
"MESSAGE_SIGNATURE_SECTION": {
@@ -330,6 +337,7 @@
"REPORTS_LABEL": "Labels",
"REPORTS_INBOX": "Inbox",
"REPORTS_TEAM": "Team",
+ "AGENT_ASSIGNMENT": "Agent Assignment",
"SET_AVAILABILITY_TITLE": "Set yourself as",
"SET_YOUR_AVAILABILITY": "Set your availability",
"SLA": "SLA",
@@ -418,5 +426,255 @@
"SWITCH_TO_REPLY": "Switch to Reply",
"TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown"
}
+ },
+ "ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent assignment",
+ "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here"
+ },
+ "ASSIGNMENT_POLICY": {
+ "TITLE": "Assignment policy",
+ "DESCRIPTION": "Manage how conversations get assigned in inboxes.",
+ "FEATURES": [
+ "Assign by conversations evenly or by available capacity",
+ "Add fair distribution rules to avoid overloading any agent",
+ "Add inboxes to a policy - one policy per inbox"
+ ]
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "TITLE": "Agent capacity policy",
+ "DESCRIPTION": "Manage workload for agents.",
+ "FEATURES": [
+ "Define maximum conversations per inbox",
+ "Create exceptions based on labels and time",
+ "Add agents to a policy - one policy per agent"
+ ]
+ }
+ },
+ "AGENT_ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Assignment policy",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "ORDER": "Order",
+ "PRIORITY": "Priority",
+ "ACTIVE": "Active",
+ "INACTIVE": "Inactive",
+ "POPOVER": "Added inboxes",
+ "EDIT": "Edit"
+ },
+ "NO_RECORDS_FOUND": "No assignment policies found"
+ },
+ "CREATE": {
+ "HEADER": {
+ "TITLE": "Create assignment policy"
+ },
+ "CREATE_BUTTON": "Create policy",
+ "API": {
+ "SUCCESS_MESSAGE": "Assignment policy created successfully",
+ "ERROR_MESSAGE": "Failed to create assignment policy"
+ }
+ },
+ "EDIT": {
+ "HEADER": {
+ "TITLE": "Edit assignment policy"
+ },
+ "EDIT_BUTTON": "Update policy",
+ "CONFIRM_ADD_INBOX_DIALOG": {
+ "TITLE": "Add inbox",
+ "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.",
+ "CONFIRM_BUTTON_LABEL": "Continue",
+ "CANCEL_BUTTON_LABEL": "Cancel"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Assignment policy updated successfully",
+ "ERROR_MESSAGE": "Failed to update assignment policy"
+ },
+ "INBOX_API": {
+ "ADD": {
+ "SUCCESS_MESSAGE": "Inbox added to policy successfully",
+ "ERROR_MESSAGE": "Failed to add inbox to policy"
+ },
+ "REMOVE": {
+ "SUCCESS_MESSAGE": "Inbox removed from policy successfully",
+ "ERROR_MESSAGE": "Failed to remove inbox from policy"
+ }
+ }
+ },
+ "FORM": {
+ "NAME": {
+ "LABEL": "Policy name:",
+ "PLACEHOLDER": "Enter policy name"
+ },
+ "DESCRIPTION": {
+ "LABEL": "Description:",
+ "PLACEHOLDER": "Enter description"
+ },
+ "STATUS": {
+ "LABEL": "Status:",
+ "PLACEHOLDER": "Select status",
+ "ACTIVE": "Policy is active",
+ "INACTIVE": "Policy is inactive"
+ },
+ "ASSIGNMENT_ORDER": {
+ "LABEL": "Assignment order",
+ "ROUND_ROBIN": {
+ "LABEL": "Round robin",
+ "DESCRIPTION": "Assign conversations evenly among agents."
+ },
+ "BALANCED": {
+ "LABEL": "Balanced",
+ "DESCRIPTION": "Assign conversations based on available capacity."
+ }
+ },
+ "ASSIGNMENT_PRIORITY": {
+ "LABEL": "Assignment priority",
+ "EARLIEST_CREATED": {
+ "LABEL": "Earliest created",
+ "DESCRIPTION": "The conversation that was created first gets assigned first."
+ },
+ "LONGEST_WAITING": {
+ "LABEL": "Longest waiting",
+ "DESCRIPTION": "The conversation waiting the longest gets assigned first."
+ }
+ },
+ "FAIR_DISTRIBUTION": {
+ "LABEL": "Fair distribution policy",
+ "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.",
+ "INPUT_MAX": "Assign max",
+ "DURATION": "Conversations per agent in every"
+ },
+ "INBOXES": {
+ "LABEL": "Added inboxes",
+ "DESCRIPTION": "Add inboxes for which this policy will be applicable.",
+ "ADD_BUTTON": "Add inbox",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select inboxes to add",
+ "ADD_BUTTON": "Add"
+ },
+ "EMPTY_STATE": "No inboxes added to this policy, add an inbox to get started",
+ "API": {
+ "SUCCESS_MESSAGE": "Inbox successfully added to policy",
+ "ERROR_MESSAGE": "Failed to add inbox to policy"
+ }
+ }
+ },
+ "DELETE_POLICY": {
+ "SUCCESS_MESSAGE": "Assignment policy deleted successfully",
+ "ERROR_MESSAGE": "Failed to delete assignment policy"
+ }
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent capacity",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "POPOVER": "Added agents",
+ "EDIT": "Edit"
+ },
+ "NO_RECORDS_FOUND": "No agent capacity policies found"
+ },
+ "CREATE": {
+ "HEADER": {
+ "TITLE": "Create agent capacity policy"
+ },
+ "CREATE_BUTTON": "Create policy",
+ "API": {
+ "SUCCESS_MESSAGE": "Agent capacity policy created successfully",
+ "ERROR_MESSAGE": "Failed to create agent capacity policy"
+ }
+ },
+ "EDIT": {
+ "HEADER": {
+ "TITLE": "Edit agent capacity policy"
+ },
+ "EDIT_BUTTON": "Update policy",
+ "CONFIRM_ADD_AGENT_DIALOG": {
+ "TITLE": "Add agent",
+ "DESCRIPTION": "{agentName} is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.",
+ "CONFIRM_BUTTON_LABEL": "Continue",
+ "CANCEL_BUTTON_LABEL": "Cancel"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Agent capacity policy updated successfully",
+ "ERROR_MESSAGE": "Failed to update agent capacity policy"
+ },
+ "AGENT_API": {
+ "ADD": {
+ "SUCCESS_MESSAGE": "Agent added to policy successfully",
+ "ERROR_MESSAGE": "Failed to add agent to policy"
+ },
+ "REMOVE": {
+ "SUCCESS_MESSAGE": "Agent removed from policy successfully",
+ "ERROR_MESSAGE": "Failed to remove agent from policy"
+ }
+ }
+ },
+ "FORM": {
+ "NAME": {
+ "LABEL": "Policy name:",
+ "PLACEHOLDER": "Enter policy name"
+ },
+ "DESCRIPTION": {
+ "LABEL": "Description:",
+ "PLACEHOLDER": "Enter description"
+ },
+ "INBOX_CAPACITY_LIMIT": {
+ "LABEL": "Inbox capacity limits",
+ "ADD_BUTTON": "Add inbox",
+ "FIELD": {
+ "SELECT_INBOX": "Select inbox",
+ "MAX_CONVERSATIONS": "Max conversations",
+ "SET_LIMIT": "Set limit"
+ },
+ "EMPTY_STATE": "No inbox limit set"
+ },
+ "EXCLUSION_RULES": {
+ "LABEL": "Exclusion rules",
+ "DESCRIPTION": "Conversations that satisfy the following conditions would not count towards agent capacity",
+ "TAGS": {
+ "LABEL": "Exclude conversations tagged with specific labels",
+ "ADD_TAG": "add tag",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select tags to add"
+ },
+ "EMPTY_STATE": "No tags added to this policy."
+ },
+ "DURATION": {
+ "LABEL": "Exclude conversations older than a specified duration",
+ "PLACEHOLDER": "Set time"
+ }
+ },
+ "USERS": {
+ "LABEL": "Assigned agents",
+ "DESCRIPTION": "Add agents for which this policy will be applicable.",
+ "ADD_BUTTON": "Add agent",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select agents to add",
+ "ADD_BUTTON": "Add"
+ },
+ "EMPTY_STATE": "No agents added",
+ "API": {
+ "SUCCESS_MESSAGE": "Agent successfully added to policy",
+ "ERROR_MESSAGE": "Failed to add agent to policy"
+ }
+ }
+ },
+ "DELETE_POLICY": {
+ "SUCCESS_MESSAGE": "Agent capacity policy deleted successfully",
+ "ERROR_MESSAGE": "Failed to delete agent capacity policy"
+ }
+ },
+ "DELETE_POLICY": {
+ "TITLE": "Delete policy",
+ "DESCRIPTION": "Are you sure you want to delete this policy? This action cannot be undone.",
+ "CONFIRM_BUTTON_LABEL": "Delete",
+ "CANCEL_BUTTON_LABEL": "Cancel"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/sr/conversation.json b/app/javascript/dashboard/i18n/locale/sr/conversation.json
index bbba3ba94..1ac190668 100644
--- a/app/javascript/dashboard/i18n/locale/sr/conversation.json
+++ b/app/javascript/dashboard/i18n/locale/sr/conversation.json
@@ -71,6 +71,17 @@
"SHOW_LABELS": "Show labels",
"HIDE_LABELS": "Hide labels"
},
+ "VOICE_CALL": {
+ "INCOMING_CALL": "Incoming call",
+ "OUTGOING_CALL": "Outgoing call",
+ "CALL_IN_PROGRESS": "Call in progress",
+ "NO_ANSWER": "No answer",
+ "MISSED_CALL": "Missed call",
+ "CALL_ENDED": "Call ended",
+ "NOT_ANSWERED_YET": "Not answered yet",
+ "THEY_ANSWERED": "They answered",
+ "YOU_ANSWERED": "You answered"
+ },
"HEADER": {
"RESOLVE_ACTION": "Reši",
"REOPEN_ACTION": "Ponovo otvori",
diff --git a/app/javascript/dashboard/i18n/locale/sr/settings.json b/app/javascript/dashboard/i18n/locale/sr/settings.json
index d83baf157..0f50d594b 100644
--- a/app/javascript/dashboard/i18n/locale/sr/settings.json
+++ b/app/javascript/dashboard/i18n/locale/sr/settings.json
@@ -51,6 +51,13 @@
"LARGER": "Larger",
"EXTRA_LARGE": "Extra Large"
}
+ },
+ "LANGUAGE": {
+ "TITLE": "Preferred Language",
+ "NOTE": "Choose the language you want to use.",
+ "UPDATE_SUCCESS": "Your Language settings have been updated successfully",
+ "UPDATE_ERROR": "There is an error while updating the language settings, please try again",
+ "USE_ACCOUNT_DEFAULT": "Use account default"
}
},
"MESSAGE_SIGNATURE_SECTION": {
@@ -330,6 +337,7 @@
"REPORTS_LABEL": "Oznake",
"REPORTS_INBOX": "Prijemno sanduče",
"REPORTS_TEAM": "Tim",
+ "AGENT_ASSIGNMENT": "Agent Assignment",
"SET_AVAILABILITY_TITLE": "Postavite da ste",
"SET_YOUR_AVAILABILITY": "Podesite vašu dostupnost",
"SLA": "SLA",
@@ -418,5 +426,255 @@
"SWITCH_TO_REPLY": "Prebaci se na odgovor",
"TOGGLE_SNOOZE_DROPDOWN": "Uključite padajućim menijom odlaganja"
}
+ },
+ "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": "Aktivno",
+ "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": "Otkaži"
+ },
+ "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": "Opis:",
+ "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": "Dodaj"
+ },
+ "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": "Otkaži"
+ },
+ "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": "Opis:",
+ "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": "Dodaj"
+ },
+ "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": "Otkaži"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/sv/conversation.json b/app/javascript/dashboard/i18n/locale/sv/conversation.json
index 31de39d1a..a919575ce 100644
--- a/app/javascript/dashboard/i18n/locale/sv/conversation.json
+++ b/app/javascript/dashboard/i18n/locale/sv/conversation.json
@@ -71,6 +71,17 @@
"SHOW_LABELS": "Visa etiketter",
"HIDE_LABELS": "Dölj etiketter"
},
+ "VOICE_CALL": {
+ "INCOMING_CALL": "Incoming call",
+ "OUTGOING_CALL": "Outgoing call",
+ "CALL_IN_PROGRESS": "Call in progress",
+ "NO_ANSWER": "No answer",
+ "MISSED_CALL": "Missed call",
+ "CALL_ENDED": "Call ended",
+ "NOT_ANSWERED_YET": "Not answered yet",
+ "THEY_ANSWERED": "They answered",
+ "YOU_ANSWERED": "You answered"
+ },
"HEADER": {
"RESOLVE_ACTION": "Lös",
"REOPEN_ACTION": "Återöppna",
diff --git a/app/javascript/dashboard/i18n/locale/sv/settings.json b/app/javascript/dashboard/i18n/locale/sv/settings.json
index e80207056..4240aece2 100644
--- a/app/javascript/dashboard/i18n/locale/sv/settings.json
+++ b/app/javascript/dashboard/i18n/locale/sv/settings.json
@@ -51,6 +51,13 @@
"LARGER": "Larger",
"EXTRA_LARGE": "Extra Large"
}
+ },
+ "LANGUAGE": {
+ "TITLE": "Preferred Language",
+ "NOTE": "Choose the language you want to use.",
+ "UPDATE_SUCCESS": "Your Language settings have been updated successfully",
+ "UPDATE_ERROR": "There is an error while updating the language settings, please try again",
+ "USE_ACCOUNT_DEFAULT": "Use account default"
}
},
"MESSAGE_SIGNATURE_SECTION": {
@@ -330,6 +337,7 @@
"REPORTS_LABEL": "Etiketter",
"REPORTS_INBOX": "Inkorg",
"REPORTS_TEAM": "Team",
+ "AGENT_ASSIGNMENT": "Agent Assignment",
"SET_AVAILABILITY_TITLE": "Set yourself as",
"SET_YOUR_AVAILABILITY": "Ställ in din tillgänglighet",
"SLA": "SLA",
@@ -418,5 +426,255 @@
"SWITCH_TO_REPLY": "Switch to Reply",
"TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown"
}
+ },
+ "ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent assignment",
+ "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here"
+ },
+ "ASSIGNMENT_POLICY": {
+ "TITLE": "Assignment policy",
+ "DESCRIPTION": "Manage how conversations get assigned in inboxes.",
+ "FEATURES": [
+ "Assign by conversations evenly or by available capacity",
+ "Add fair distribution rules to avoid overloading any agent",
+ "Add inboxes to a policy - one policy per inbox"
+ ]
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "TITLE": "Agent capacity policy",
+ "DESCRIPTION": "Manage workload for agents.",
+ "FEATURES": [
+ "Define maximum conversations per inbox",
+ "Create exceptions based on labels and time",
+ "Add agents to a policy - one policy per agent"
+ ]
+ }
+ },
+ "AGENT_ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Assignment policy",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "ORDER": "Order",
+ "PRIORITY": "Priority",
+ "ACTIVE": "Active",
+ "INACTIVE": "Inactive",
+ "POPOVER": "Added inboxes",
+ "EDIT": "Redigera"
+ },
+ "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": "Avbryt"
+ },
+ "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": "Beskrivning:",
+ "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": "Redigera"
+ },
+ "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": "Avbryt"
+ },
+ "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": "Beskrivning:",
+ "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": "Radera",
+ "CANCEL_BUTTON_LABEL": "Avbryt"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/ta/conversation.json b/app/javascript/dashboard/i18n/locale/ta/conversation.json
index f31a3a878..0771e5063 100644
--- a/app/javascript/dashboard/i18n/locale/ta/conversation.json
+++ b/app/javascript/dashboard/i18n/locale/ta/conversation.json
@@ -71,6 +71,17 @@
"SHOW_LABELS": "Show labels",
"HIDE_LABELS": "Hide labels"
},
+ "VOICE_CALL": {
+ "INCOMING_CALL": "Incoming call",
+ "OUTGOING_CALL": "Outgoing call",
+ "CALL_IN_PROGRESS": "Call in progress",
+ "NO_ANSWER": "No answer",
+ "MISSED_CALL": "Missed call",
+ "CALL_ENDED": "Call ended",
+ "NOT_ANSWERED_YET": "Not answered yet",
+ "THEY_ANSWERED": "They answered",
+ "YOU_ANSWERED": "You answered"
+ },
"HEADER": {
"RESOLVE_ACTION": "தீர்",
"REOPEN_ACTION": "மீண்டும் திற",
diff --git a/app/javascript/dashboard/i18n/locale/ta/settings.json b/app/javascript/dashboard/i18n/locale/ta/settings.json
index fa1caa4e3..d961845f2 100644
--- a/app/javascript/dashboard/i18n/locale/ta/settings.json
+++ b/app/javascript/dashboard/i18n/locale/ta/settings.json
@@ -51,6 +51,13 @@
"LARGER": "Larger",
"EXTRA_LARGE": "Extra Large"
}
+ },
+ "LANGUAGE": {
+ "TITLE": "Preferred Language",
+ "NOTE": "Choose the language you want to use.",
+ "UPDATE_SUCCESS": "Your Language settings have been updated successfully",
+ "UPDATE_ERROR": "There is an error while updating the language settings, please try again",
+ "USE_ACCOUNT_DEFAULT": "Use account default"
}
},
"MESSAGE_SIGNATURE_SECTION": {
@@ -330,6 +337,7 @@
"REPORTS_LABEL": "Labels",
"REPORTS_INBOX": "Inbox",
"REPORTS_TEAM": "Team",
+ "AGENT_ASSIGNMENT": "Agent Assignment",
"SET_AVAILABILITY_TITLE": "Set yourself as",
"SET_YOUR_AVAILABILITY": "Set your availability",
"SLA": "SLA",
@@ -418,5 +426,255 @@
"SWITCH_TO_REPLY": "Switch to Reply",
"TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown"
}
+ },
+ "ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent assignment",
+ "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here"
+ },
+ "ASSIGNMENT_POLICY": {
+ "TITLE": "Assignment policy",
+ "DESCRIPTION": "Manage how conversations get assigned in inboxes.",
+ "FEATURES": [
+ "Assign by conversations evenly or by available capacity",
+ "Add fair distribution rules to avoid overloading any agent",
+ "Add inboxes to a policy - one policy per inbox"
+ ]
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "TITLE": "Agent capacity policy",
+ "DESCRIPTION": "Manage workload for agents.",
+ "FEATURES": [
+ "Define maximum conversations per inbox",
+ "Create exceptions based on labels and time",
+ "Add agents to a policy - one policy per agent"
+ ]
+ }
+ },
+ "AGENT_ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Assignment policy",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "ORDER": "Order",
+ "PRIORITY": "Priority",
+ "ACTIVE": "Active",
+ "INACTIVE": "Inactive",
+ "POPOVER": "Added inboxes",
+ "EDIT": "திருத்து"
+ },
+ "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": "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": "திருத்து"
+ },
+ "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": "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": "ரத்துசெய்"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/th/conversation.json b/app/javascript/dashboard/i18n/locale/th/conversation.json
index b8374d0da..9b3cc2aba 100644
--- a/app/javascript/dashboard/i18n/locale/th/conversation.json
+++ b/app/javascript/dashboard/i18n/locale/th/conversation.json
@@ -71,6 +71,17 @@
"SHOW_LABELS": "แสดงป้ายกำกับ",
"HIDE_LABELS": "ซ่อนป้ายกำกับ"
},
+ "VOICE_CALL": {
+ "INCOMING_CALL": "Incoming call",
+ "OUTGOING_CALL": "Outgoing call",
+ "CALL_IN_PROGRESS": "Call in progress",
+ "NO_ANSWER": "No answer",
+ "MISSED_CALL": "Missed call",
+ "CALL_ENDED": "Call ended",
+ "NOT_ANSWERED_YET": "Not answered yet",
+ "THEY_ANSWERED": "They answered",
+ "YOU_ANSWERED": "You answered"
+ },
"HEADER": {
"RESOLVE_ACTION": "เสร็จสิ้น",
"REOPEN_ACTION": "เปิดใหม่อีกครั้ง",
diff --git a/app/javascript/dashboard/i18n/locale/th/settings.json b/app/javascript/dashboard/i18n/locale/th/settings.json
index 67004d623..1e54f2b51 100644
--- a/app/javascript/dashboard/i18n/locale/th/settings.json
+++ b/app/javascript/dashboard/i18n/locale/th/settings.json
@@ -51,6 +51,13 @@
"LARGER": "Larger",
"EXTRA_LARGE": "Extra Large"
}
+ },
+ "LANGUAGE": {
+ "TITLE": "Preferred Language",
+ "NOTE": "Choose the language you want to use.",
+ "UPDATE_SUCCESS": "Your Language settings have been updated successfully",
+ "UPDATE_ERROR": "There is an error while updating the language settings, please try again",
+ "USE_ACCOUNT_DEFAULT": "Use account default"
}
},
"MESSAGE_SIGNATURE_SECTION": {
@@ -330,6 +337,7 @@
"REPORTS_LABEL": "ป้ายกำกับ",
"REPORTS_INBOX": "กล่องข้อความ",
"REPORTS_TEAM": "ทีม",
+ "AGENT_ASSIGNMENT": "Agent Assignment",
"SET_AVAILABILITY_TITLE": "ตั้งสถานะเป็น...",
"SET_YOUR_AVAILABILITY": "ตั้งค่าความพร้อมในการให้บริการ",
"SLA": "SLA",
@@ -418,5 +426,255 @@
"SWITCH_TO_REPLY": "สลับเป็นการตอบกลับ",
"TOGGLE_SNOOZE_DROPDOWN": "เปิดหรือปิดเมนูพักการสนทนา"
}
+ },
+ "ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent assignment",
+ "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here"
+ },
+ "ASSIGNMENT_POLICY": {
+ "TITLE": "Assignment policy",
+ "DESCRIPTION": "Manage how conversations get assigned in inboxes.",
+ "FEATURES": [
+ "Assign by conversations evenly or by available capacity",
+ "Add fair distribution rules to avoid overloading any agent",
+ "Add inboxes to a policy - one policy per inbox"
+ ]
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "TITLE": "Agent capacity policy",
+ "DESCRIPTION": "Manage workload for agents.",
+ "FEATURES": [
+ "Define maximum conversations per inbox",
+ "Create exceptions based on labels and time",
+ "Add agents to a policy - one policy per agent"
+ ]
+ }
+ },
+ "AGENT_ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Assignment policy",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "ORDER": "Order",
+ "PRIORITY": "Priority",
+ "ACTIVE": "ใช้งานอยู่",
+ "INACTIVE": "Inactive",
+ "POPOVER": "Added inboxes",
+ "EDIT": "เเก้ไข"
+ },
+ "NO_RECORDS_FOUND": "No assignment policies found"
+ },
+ "CREATE": {
+ "HEADER": {
+ "TITLE": "Create assignment policy"
+ },
+ "CREATE_BUTTON": "Create policy",
+ "API": {
+ "SUCCESS_MESSAGE": "Assignment policy created successfully",
+ "ERROR_MESSAGE": "Failed to create assignment policy"
+ }
+ },
+ "EDIT": {
+ "HEADER": {
+ "TITLE": "Edit assignment policy"
+ },
+ "EDIT_BUTTON": "Update policy",
+ "CONFIRM_ADD_INBOX_DIALOG": {
+ "TITLE": "Add inbox",
+ "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.",
+ "CONFIRM_BUTTON_LABEL": "Continue",
+ "CANCEL_BUTTON_LABEL": "ยกเลิก"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Assignment policy updated successfully",
+ "ERROR_MESSAGE": "Failed to update assignment policy"
+ },
+ "INBOX_API": {
+ "ADD": {
+ "SUCCESS_MESSAGE": "Inbox added to policy successfully",
+ "ERROR_MESSAGE": "Failed to add inbox to policy"
+ },
+ "REMOVE": {
+ "SUCCESS_MESSAGE": "Inbox removed from policy successfully",
+ "ERROR_MESSAGE": "Failed to remove inbox from policy"
+ }
+ }
+ },
+ "FORM": {
+ "NAME": {
+ "LABEL": "Policy name:",
+ "PLACEHOLDER": "Enter policy name"
+ },
+ "DESCRIPTION": {
+ "LABEL": "คำอธิบาย:",
+ "PLACEHOLDER": "Enter description"
+ },
+ "STATUS": {
+ "LABEL": "สถานะ:",
+ "PLACEHOLDER": "Select status",
+ "ACTIVE": "Policy is active",
+ "INACTIVE": "Policy is inactive"
+ },
+ "ASSIGNMENT_ORDER": {
+ "LABEL": "Assignment order",
+ "ROUND_ROBIN": {
+ "LABEL": "Round robin",
+ "DESCRIPTION": "Assign conversations evenly among agents."
+ },
+ "BALANCED": {
+ "LABEL": "Balanced",
+ "DESCRIPTION": "Assign conversations based on available capacity."
+ }
+ },
+ "ASSIGNMENT_PRIORITY": {
+ "LABEL": "Assignment priority",
+ "EARLIEST_CREATED": {
+ "LABEL": "Earliest created",
+ "DESCRIPTION": "The conversation that was created first gets assigned first."
+ },
+ "LONGEST_WAITING": {
+ "LABEL": "Longest waiting",
+ "DESCRIPTION": "The conversation waiting the longest gets assigned first."
+ }
+ },
+ "FAIR_DISTRIBUTION": {
+ "LABEL": "Fair distribution policy",
+ "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.",
+ "INPUT_MAX": "Assign max",
+ "DURATION": "Conversations per agent in every"
+ },
+ "INBOXES": {
+ "LABEL": "Added inboxes",
+ "DESCRIPTION": "Add inboxes for which this policy will be applicable.",
+ "ADD_BUTTON": "Add inbox",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select inboxes to add",
+ "ADD_BUTTON": "เพิ่ม"
+ },
+ "EMPTY_STATE": "No inboxes added to this policy, add an inbox to get started",
+ "API": {
+ "SUCCESS_MESSAGE": "Inbox successfully added to policy",
+ "ERROR_MESSAGE": "Failed to add inbox to policy"
+ }
+ }
+ },
+ "DELETE_POLICY": {
+ "SUCCESS_MESSAGE": "Assignment policy deleted successfully",
+ "ERROR_MESSAGE": "Failed to delete assignment policy"
+ }
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent capacity",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "POPOVER": "Added agents",
+ "EDIT": "เเก้ไข"
+ },
+ "NO_RECORDS_FOUND": "No agent capacity policies found"
+ },
+ "CREATE": {
+ "HEADER": {
+ "TITLE": "Create agent capacity policy"
+ },
+ "CREATE_BUTTON": "Create policy",
+ "API": {
+ "SUCCESS_MESSAGE": "Agent capacity policy created successfully",
+ "ERROR_MESSAGE": "Failed to create agent capacity policy"
+ }
+ },
+ "EDIT": {
+ "HEADER": {
+ "TITLE": "Edit agent capacity policy"
+ },
+ "EDIT_BUTTON": "Update policy",
+ "CONFIRM_ADD_AGENT_DIALOG": {
+ "TITLE": "Add agent",
+ "DESCRIPTION": "{agentName} is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.",
+ "CONFIRM_BUTTON_LABEL": "Continue",
+ "CANCEL_BUTTON_LABEL": "ยกเลิก"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Agent capacity policy updated successfully",
+ "ERROR_MESSAGE": "Failed to update agent capacity policy"
+ },
+ "AGENT_API": {
+ "ADD": {
+ "SUCCESS_MESSAGE": "Agent added to policy successfully",
+ "ERROR_MESSAGE": "Failed to add agent to policy"
+ },
+ "REMOVE": {
+ "SUCCESS_MESSAGE": "Agent removed from policy successfully",
+ "ERROR_MESSAGE": "Failed to remove agent from policy"
+ }
+ }
+ },
+ "FORM": {
+ "NAME": {
+ "LABEL": "Policy name:",
+ "PLACEHOLDER": "Enter policy name"
+ },
+ "DESCRIPTION": {
+ "LABEL": "คำอธิบาย:",
+ "PLACEHOLDER": "Enter description"
+ },
+ "INBOX_CAPACITY_LIMIT": {
+ "LABEL": "Inbox capacity limits",
+ "ADD_BUTTON": "Add inbox",
+ "FIELD": {
+ "SELECT_INBOX": "Select inbox",
+ "MAX_CONVERSATIONS": "Max conversations",
+ "SET_LIMIT": "Set limit"
+ },
+ "EMPTY_STATE": "No inbox limit set"
+ },
+ "EXCLUSION_RULES": {
+ "LABEL": "Exclusion rules",
+ "DESCRIPTION": "Conversations that satisfy the following conditions would not count towards agent capacity",
+ "TAGS": {
+ "LABEL": "Exclude conversations tagged with specific labels",
+ "ADD_TAG": "add tag",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select tags to add"
+ },
+ "EMPTY_STATE": "No tags added to this policy."
+ },
+ "DURATION": {
+ "LABEL": "Exclude conversations older than a specified duration",
+ "PLACEHOLDER": "Set time"
+ }
+ },
+ "USERS": {
+ "LABEL": "Assigned agents",
+ "DESCRIPTION": "Add agents for which this policy will be applicable.",
+ "ADD_BUTTON": "Add agent",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select agents to add",
+ "ADD_BUTTON": "เพิ่ม"
+ },
+ "EMPTY_STATE": "No agents added",
+ "API": {
+ "SUCCESS_MESSAGE": "Agent successfully added to policy",
+ "ERROR_MESSAGE": "Failed to add agent to policy"
+ }
+ }
+ },
+ "DELETE_POLICY": {
+ "SUCCESS_MESSAGE": "Agent capacity policy deleted successfully",
+ "ERROR_MESSAGE": "Failed to delete agent capacity policy"
+ }
+ },
+ "DELETE_POLICY": {
+ "TITLE": "Delete policy",
+ "DESCRIPTION": "Are you sure you want to delete this policy? This action cannot be undone.",
+ "CONFIRM_BUTTON_LABEL": "ลบ",
+ "CANCEL_BUTTON_LABEL": "ยกเลิก"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/tl/conversation.json b/app/javascript/dashboard/i18n/locale/tl/conversation.json
index 93f375e7f..9fd39b70f 100644
--- a/app/javascript/dashboard/i18n/locale/tl/conversation.json
+++ b/app/javascript/dashboard/i18n/locale/tl/conversation.json
@@ -71,6 +71,17 @@
"SHOW_LABELS": "Show labels",
"HIDE_LABELS": "Hide labels"
},
+ "VOICE_CALL": {
+ "INCOMING_CALL": "Incoming call",
+ "OUTGOING_CALL": "Outgoing call",
+ "CALL_IN_PROGRESS": "Call in progress",
+ "NO_ANSWER": "No answer",
+ "MISSED_CALL": "Missed call",
+ "CALL_ENDED": "Call ended",
+ "NOT_ANSWERED_YET": "Not answered yet",
+ "THEY_ANSWERED": "They answered",
+ "YOU_ANSWERED": "You answered"
+ },
"HEADER": {
"RESOLVE_ACTION": "Resolve",
"REOPEN_ACTION": "Reopen",
diff --git a/app/javascript/dashboard/i18n/locale/tl/settings.json b/app/javascript/dashboard/i18n/locale/tl/settings.json
index d547538db..c95eada84 100644
--- a/app/javascript/dashboard/i18n/locale/tl/settings.json
+++ b/app/javascript/dashboard/i18n/locale/tl/settings.json
@@ -51,6 +51,13 @@
"LARGER": "Larger",
"EXTRA_LARGE": "Extra Large"
}
+ },
+ "LANGUAGE": {
+ "TITLE": "Preferred Language",
+ "NOTE": "Choose the language you want to use.",
+ "UPDATE_SUCCESS": "Your Language settings have been updated successfully",
+ "UPDATE_ERROR": "There is an error while updating the language settings, please try again",
+ "USE_ACCOUNT_DEFAULT": "Use account default"
}
},
"MESSAGE_SIGNATURE_SECTION": {
@@ -330,6 +337,7 @@
"REPORTS_LABEL": "Labels",
"REPORTS_INBOX": "Inbox",
"REPORTS_TEAM": "Team",
+ "AGENT_ASSIGNMENT": "Agent Assignment",
"SET_AVAILABILITY_TITLE": "Set yourself as",
"SET_YOUR_AVAILABILITY": "Set your availability",
"SLA": "SLA",
@@ -418,5 +426,255 @@
"SWITCH_TO_REPLY": "Switch to Reply",
"TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown"
}
+ },
+ "ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent assignment",
+ "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here"
+ },
+ "ASSIGNMENT_POLICY": {
+ "TITLE": "Assignment policy",
+ "DESCRIPTION": "Manage how conversations get assigned in inboxes.",
+ "FEATURES": [
+ "Assign by conversations evenly or by available capacity",
+ "Add fair distribution rules to avoid overloading any agent",
+ "Add inboxes to a policy - one policy per inbox"
+ ]
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "TITLE": "Agent capacity policy",
+ "DESCRIPTION": "Manage workload for agents.",
+ "FEATURES": [
+ "Define maximum conversations per inbox",
+ "Create exceptions based on labels and time",
+ "Add agents to a policy - one policy per agent"
+ ]
+ }
+ },
+ "AGENT_ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Assignment policy",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "ORDER": "Order",
+ "PRIORITY": "Priority",
+ "ACTIVE": "Active",
+ "INACTIVE": "Inactive",
+ "POPOVER": "Added inboxes",
+ "EDIT": "Edit"
+ },
+ "NO_RECORDS_FOUND": "No assignment policies found"
+ },
+ "CREATE": {
+ "HEADER": {
+ "TITLE": "Create assignment policy"
+ },
+ "CREATE_BUTTON": "Create policy",
+ "API": {
+ "SUCCESS_MESSAGE": "Assignment policy created successfully",
+ "ERROR_MESSAGE": "Failed to create assignment policy"
+ }
+ },
+ "EDIT": {
+ "HEADER": {
+ "TITLE": "Edit assignment policy"
+ },
+ "EDIT_BUTTON": "Update policy",
+ "CONFIRM_ADD_INBOX_DIALOG": {
+ "TITLE": "Add inbox",
+ "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.",
+ "CONFIRM_BUTTON_LABEL": "Continue",
+ "CANCEL_BUTTON_LABEL": "Cancel"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Assignment policy updated successfully",
+ "ERROR_MESSAGE": "Failed to update assignment policy"
+ },
+ "INBOX_API": {
+ "ADD": {
+ "SUCCESS_MESSAGE": "Inbox added to policy successfully",
+ "ERROR_MESSAGE": "Failed to add inbox to policy"
+ },
+ "REMOVE": {
+ "SUCCESS_MESSAGE": "Inbox removed from policy successfully",
+ "ERROR_MESSAGE": "Failed to remove inbox from policy"
+ }
+ }
+ },
+ "FORM": {
+ "NAME": {
+ "LABEL": "Policy name:",
+ "PLACEHOLDER": "Enter policy name"
+ },
+ "DESCRIPTION": {
+ "LABEL": "Description:",
+ "PLACEHOLDER": "Enter description"
+ },
+ "STATUS": {
+ "LABEL": "Status:",
+ "PLACEHOLDER": "Select status",
+ "ACTIVE": "Policy is active",
+ "INACTIVE": "Policy is inactive"
+ },
+ "ASSIGNMENT_ORDER": {
+ "LABEL": "Assignment order",
+ "ROUND_ROBIN": {
+ "LABEL": "Round robin",
+ "DESCRIPTION": "Assign conversations evenly among agents."
+ },
+ "BALANCED": {
+ "LABEL": "Balanced",
+ "DESCRIPTION": "Assign conversations based on available capacity."
+ }
+ },
+ "ASSIGNMENT_PRIORITY": {
+ "LABEL": "Assignment priority",
+ "EARLIEST_CREATED": {
+ "LABEL": "Earliest created",
+ "DESCRIPTION": "The conversation that was created first gets assigned first."
+ },
+ "LONGEST_WAITING": {
+ "LABEL": "Longest waiting",
+ "DESCRIPTION": "The conversation waiting the longest gets assigned first."
+ }
+ },
+ "FAIR_DISTRIBUTION": {
+ "LABEL": "Fair distribution policy",
+ "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.",
+ "INPUT_MAX": "Assign max",
+ "DURATION": "Conversations per agent in every"
+ },
+ "INBOXES": {
+ "LABEL": "Added inboxes",
+ "DESCRIPTION": "Add inboxes for which this policy will be applicable.",
+ "ADD_BUTTON": "Add inbox",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select inboxes to add",
+ "ADD_BUTTON": "Add"
+ },
+ "EMPTY_STATE": "No inboxes added to this policy, add an inbox to get started",
+ "API": {
+ "SUCCESS_MESSAGE": "Inbox successfully added to policy",
+ "ERROR_MESSAGE": "Failed to add inbox to policy"
+ }
+ }
+ },
+ "DELETE_POLICY": {
+ "SUCCESS_MESSAGE": "Assignment policy deleted successfully",
+ "ERROR_MESSAGE": "Failed to delete assignment policy"
+ }
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent capacity",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "POPOVER": "Added agents",
+ "EDIT": "Edit"
+ },
+ "NO_RECORDS_FOUND": "No agent capacity policies found"
+ },
+ "CREATE": {
+ "HEADER": {
+ "TITLE": "Create agent capacity policy"
+ },
+ "CREATE_BUTTON": "Create policy",
+ "API": {
+ "SUCCESS_MESSAGE": "Agent capacity policy created successfully",
+ "ERROR_MESSAGE": "Failed to create agent capacity policy"
+ }
+ },
+ "EDIT": {
+ "HEADER": {
+ "TITLE": "Edit agent capacity policy"
+ },
+ "EDIT_BUTTON": "Update policy",
+ "CONFIRM_ADD_AGENT_DIALOG": {
+ "TITLE": "Add agent",
+ "DESCRIPTION": "{agentName} is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.",
+ "CONFIRM_BUTTON_LABEL": "Continue",
+ "CANCEL_BUTTON_LABEL": "Cancel"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Agent capacity policy updated successfully",
+ "ERROR_MESSAGE": "Failed to update agent capacity policy"
+ },
+ "AGENT_API": {
+ "ADD": {
+ "SUCCESS_MESSAGE": "Agent added to policy successfully",
+ "ERROR_MESSAGE": "Failed to add agent to policy"
+ },
+ "REMOVE": {
+ "SUCCESS_MESSAGE": "Agent removed from policy successfully",
+ "ERROR_MESSAGE": "Failed to remove agent from policy"
+ }
+ }
+ },
+ "FORM": {
+ "NAME": {
+ "LABEL": "Policy name:",
+ "PLACEHOLDER": "Enter policy name"
+ },
+ "DESCRIPTION": {
+ "LABEL": "Description:",
+ "PLACEHOLDER": "Enter description"
+ },
+ "INBOX_CAPACITY_LIMIT": {
+ "LABEL": "Inbox capacity limits",
+ "ADD_BUTTON": "Add inbox",
+ "FIELD": {
+ "SELECT_INBOX": "Select inbox",
+ "MAX_CONVERSATIONS": "Max conversations",
+ "SET_LIMIT": "Set limit"
+ },
+ "EMPTY_STATE": "No inbox limit set"
+ },
+ "EXCLUSION_RULES": {
+ "LABEL": "Exclusion rules",
+ "DESCRIPTION": "Conversations that satisfy the following conditions would not count towards agent capacity",
+ "TAGS": {
+ "LABEL": "Exclude conversations tagged with specific labels",
+ "ADD_TAG": "add tag",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select tags to add"
+ },
+ "EMPTY_STATE": "No tags added to this policy."
+ },
+ "DURATION": {
+ "LABEL": "Exclude conversations older than a specified duration",
+ "PLACEHOLDER": "Set time"
+ }
+ },
+ "USERS": {
+ "LABEL": "Assigned agents",
+ "DESCRIPTION": "Add agents for which this policy will be applicable.",
+ "ADD_BUTTON": "Add agent",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select agents to add",
+ "ADD_BUTTON": "Add"
+ },
+ "EMPTY_STATE": "No agents added",
+ "API": {
+ "SUCCESS_MESSAGE": "Agent successfully added to policy",
+ "ERROR_MESSAGE": "Failed to add agent to policy"
+ }
+ }
+ },
+ "DELETE_POLICY": {
+ "SUCCESS_MESSAGE": "Agent capacity policy deleted successfully",
+ "ERROR_MESSAGE": "Failed to delete agent capacity policy"
+ }
+ },
+ "DELETE_POLICY": {
+ "TITLE": "Delete policy",
+ "DESCRIPTION": "Are you sure you want to delete this policy? This action cannot be undone.",
+ "CONFIRM_BUTTON_LABEL": "Delete",
+ "CANCEL_BUTTON_LABEL": "Cancel"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/tr/conversation.json b/app/javascript/dashboard/i18n/locale/tr/conversation.json
index fe72960d0..f80e4c33c 100644
--- a/app/javascript/dashboard/i18n/locale/tr/conversation.json
+++ b/app/javascript/dashboard/i18n/locale/tr/conversation.json
@@ -71,6 +71,17 @@
"SHOW_LABELS": "Etiketleri Göster",
"HIDE_LABELS": "Etiketleri Gizle"
},
+ "VOICE_CALL": {
+ "INCOMING_CALL": "Incoming call",
+ "OUTGOING_CALL": "Outgoing call",
+ "CALL_IN_PROGRESS": "Call in progress",
+ "NO_ANSWER": "No answer",
+ "MISSED_CALL": "Missed call",
+ "CALL_ENDED": "Call ended",
+ "NOT_ANSWERED_YET": "Not answered yet",
+ "THEY_ANSWERED": "They answered",
+ "YOU_ANSWERED": "You answered"
+ },
"HEADER": {
"RESOLVE_ACTION": "Çözüldü",
"REOPEN_ACTION": "Yeniden aç",
diff --git a/app/javascript/dashboard/i18n/locale/tr/settings.json b/app/javascript/dashboard/i18n/locale/tr/settings.json
index 535a59849..ce9f4656a 100644
--- a/app/javascript/dashboard/i18n/locale/tr/settings.json
+++ b/app/javascript/dashboard/i18n/locale/tr/settings.json
@@ -51,6 +51,13 @@
"LARGER": "Larger",
"EXTRA_LARGE": "Extra Large"
}
+ },
+ "LANGUAGE": {
+ "TITLE": "Preferred Language",
+ "NOTE": "Choose the language you want to use.",
+ "UPDATE_SUCCESS": "Your Language settings have been updated successfully",
+ "UPDATE_ERROR": "There is an error while updating the language settings, please try again",
+ "USE_ACCOUNT_DEFAULT": "Use account default"
}
},
"MESSAGE_SIGNATURE_SECTION": {
@@ -330,6 +337,7 @@
"REPORTS_LABEL": "Etiketler",
"REPORTS_INBOX": "Gelen kutusu",
"REPORTS_TEAM": "Ekip",
+ "AGENT_ASSIGNMENT": "Agent Assignment",
"SET_AVAILABILITY_TITLE": "Kendini şu şekilde ayarla",
"SET_YOUR_AVAILABILITY": "Uygunluk Durumunuzu Ayarlayın",
"SLA": "SLA",
@@ -418,5 +426,255 @@
"SWITCH_TO_REPLY": "Yanıt'a geç",
"TOGGLE_SNOOZE_DROPDOWN": "Snooze açılır menüsünü aç/kapat"
}
+ },
+ "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": "Öncelik",
+ "ACTIVE": "Aktif",
+ "INACTIVE": "Inactive",
+ "POPOVER": "Added inboxes",
+ "EDIT": "Düzenle"
+ },
+ "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": "İptal Et"
+ },
+ "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": "Açıklama:",
+ "PLACEHOLDER": "Enter description"
+ },
+ "STATUS": {
+ "LABEL": "Durum:",
+ "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": "Ekle"
+ },
+ "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": "Düzenle"
+ },
+ "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": "İptal Et"
+ },
+ "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": "Açıklama:",
+ "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": "Ekle"
+ },
+ "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": "Sil",
+ "CANCEL_BUTTON_LABEL": "İptal Et"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/uk/attributesMgmt.json b/app/javascript/dashboard/i18n/locale/uk/attributesMgmt.json
index a89b19361..946c661ff 100644
--- a/app/javascript/dashboard/i18n/locale/uk/attributesMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/uk/attributesMgmt.json
@@ -6,7 +6,7 @@
"DESCRIPTION": "A custom attribute tracks additional details about your contacts or conversations—such as the subscription plan or the date of their first purchase. You can add different types of custom attributes, such as text, lists, or numbers, to capture the specific information you need.",
"LEARN_MORE": "Learn more about custom attributes",
"ATTRIBUTE_MODELS": {
- "CONVERSATION": "Діалог",
+ "CONVERSATION": "Розмови",
"CONTACT": "Контакт"
},
"ATTRIBUTE_TYPES": {
diff --git a/app/javascript/dashboard/i18n/locale/uk/contact.json b/app/javascript/dashboard/i18n/locale/uk/contact.json
index 7bde4be38..ca2fb1448 100644
--- a/app/javascript/dashboard/i18n/locale/uk/contact.json
+++ b/app/javascript/dashboard/i18n/locale/uk/contact.json
@@ -17,7 +17,7 @@
"IP_ADDRESS": "IP-адреса",
"CREATED_AT_LABEL": "Створено",
"NEW_MESSAGE": "Нове повідомлення",
- "CALL": "Call",
+ "CALL": "Дзвінок",
"CALL_UNDER_DEVELOPMENT": "Calling is under development",
"VOICE_INBOX_PICKER": {
"TITLE": "Choose a voice inbox"
@@ -556,7 +556,7 @@
"SAVE": "Save note",
"EXPAND": "Розширити",
"COLLAPSE": "Collapse",
- "NO_NOTES": "No notes, you can add notes from the contact details page.",
+ "NO_NOTES": "Немає нотаток, ви можете додати їх на сторінці контакту.",
"EMPTY_STATE": "There are no notes associated to this contact. You can add a note by typing in the box above."
}
},
diff --git a/app/javascript/dashboard/i18n/locale/uk/conversation.json b/app/javascript/dashboard/i18n/locale/uk/conversation.json
index b3c3f2f7b..c581f3e52 100644
--- a/app/javascript/dashboard/i18n/locale/uk/conversation.json
+++ b/app/javascript/dashboard/i18n/locale/uk/conversation.json
@@ -71,6 +71,17 @@
"SHOW_LABELS": "Показати мітки",
"HIDE_LABELS": "Сховати мітки"
},
+ "VOICE_CALL": {
+ "INCOMING_CALL": "Incoming call",
+ "OUTGOING_CALL": "Outgoing call",
+ "CALL_IN_PROGRESS": "Call in progress",
+ "NO_ANSWER": "No answer",
+ "MISSED_CALL": "Missed call",
+ "CALL_ENDED": "Call ended",
+ "NOT_ANSWERED_YET": "Not answered yet",
+ "THEY_ANSWERED": "They answered",
+ "YOU_ANSWERED": "You answered"
+ },
"HEADER": {
"RESOLVE_ACTION": "Вирішити",
"REOPEN_ACTION": "Відкрити знову",
@@ -316,7 +327,7 @@
"CONVERSATION_ACTIONS": "Дії при бесіді",
"CONVERSATION_LABELS": "Мітки бесіди",
"CONVERSATION_INFO": "Інформація про бесіду",
- "CONTACT_NOTES": "Contact Notes",
+ "CONTACT_NOTES": "Нотатки контакту",
"CONTACT_ATTRIBUTES": "Атрибути контакту",
"PREVIOUS_CONVERSATION": "Попередні бесіди",
"MACROS": "Макрос",
diff --git a/app/javascript/dashboard/i18n/locale/uk/integrations.json b/app/javascript/dashboard/i18n/locale/uk/integrations.json
index 057727049..235b9ad19 100644
--- a/app/javascript/dashboard/i18n/locale/uk/integrations.json
+++ b/app/javascript/dashboard/i18n/locale/uk/integrations.json
@@ -555,7 +555,7 @@
}
},
"LIST": {
- "SEARCH_PLACEHOLDER": "Search..."
+ "SEARCH_PLACEHOLDER": "Пошук..."
},
"EMPTY_MESSAGE": "No guardrails found. Create or add examples to begin.",
"SEARCH_EMPTY_MESSAGE": "No guardrails found for this search.",
@@ -603,7 +603,7 @@
}
},
"LIST": {
- "SEARCH_PLACEHOLDER": "Search..."
+ "SEARCH_PLACEHOLDER": "Пошук..."
},
"EMPTY_MESSAGE": "No response guidelines found. Create or add examples to begin.",
"SEARCH_EMPTY_MESSAGE": "No response guidelines found for this search.",
@@ -670,7 +670,7 @@
"UPDATE": "Update changes"
},
"LIST": {
- "SEARCH_PLACEHOLDER": "Search..."
+ "SEARCH_PLACEHOLDER": "Пошук..."
},
"EMPTY_MESSAGE": "No scenarios found. Create or add examples to begin.",
"SEARCH_EMPTY_MESSAGE": "No scenarios found for this search.",
diff --git a/app/javascript/dashboard/i18n/locale/uk/settings.json b/app/javascript/dashboard/i18n/locale/uk/settings.json
index 6d311258a..a414db457 100644
--- a/app/javascript/dashboard/i18n/locale/uk/settings.json
+++ b/app/javascript/dashboard/i18n/locale/uk/settings.json
@@ -51,6 +51,13 @@
"LARGER": "Larger",
"EXTRA_LARGE": "Extra Large"
}
+ },
+ "LANGUAGE": {
+ "TITLE": "Preferred Language",
+ "NOTE": "Choose the language you want to use.",
+ "UPDATE_SUCCESS": "Your Language settings have been updated successfully",
+ "UPDATE_ERROR": "There is an error while updating the language settings, please try again",
+ "USE_ACCOUNT_DEFAULT": "Use account default"
}
},
"MESSAGE_SIGNATURE_SECTION": {
@@ -330,6 +337,7 @@
"REPORTS_LABEL": "Мітки",
"REPORTS_INBOX": "Канал",
"REPORTS_TEAM": "Команда",
+ "AGENT_ASSIGNMENT": "Agent Assignment",
"SET_AVAILABILITY_TITLE": "Позначити себе як",
"SET_YOUR_AVAILABILITY": "Встановіть доступність",
"SLA": "SLA",
@@ -418,5 +426,255 @@
"SWITCH_TO_REPLY": "Перейти до відповіді",
"TOGGLE_SNOOZE_DROPDOWN": "Перемкнути випадаючий список відкладення"
}
+ },
+ "ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent assignment",
+ "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here"
+ },
+ "ASSIGNMENT_POLICY": {
+ "TITLE": "Assignment policy",
+ "DESCRIPTION": "Manage how conversations get assigned in inboxes.",
+ "FEATURES": [
+ "Assign by conversations evenly or by available capacity",
+ "Add fair distribution rules to avoid overloading any agent",
+ "Add inboxes to a policy - one policy per inbox"
+ ]
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "TITLE": "Agent capacity policy",
+ "DESCRIPTION": "Manage workload for agents.",
+ "FEATURES": [
+ "Define maximum conversations per inbox",
+ "Create exceptions based on labels and time",
+ "Add agents to a policy - one policy per agent"
+ ]
+ }
+ },
+ "AGENT_ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Assignment policy",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "ORDER": "Order",
+ "PRIORITY": "Пріоритет",
+ "ACTIVE": "Активний",
+ "INACTIVE": "Inactive",
+ "POPOVER": "Added inboxes",
+ "EDIT": "Редагувати"
+ },
+ "NO_RECORDS_FOUND": "No assignment policies found"
+ },
+ "CREATE": {
+ "HEADER": {
+ "TITLE": "Create assignment policy"
+ },
+ "CREATE_BUTTON": "Create policy",
+ "API": {
+ "SUCCESS_MESSAGE": "Assignment policy created successfully",
+ "ERROR_MESSAGE": "Failed to create assignment policy"
+ }
+ },
+ "EDIT": {
+ "HEADER": {
+ "TITLE": "Edit assignment policy"
+ },
+ "EDIT_BUTTON": "Update policy",
+ "CONFIRM_ADD_INBOX_DIALOG": {
+ "TITLE": "Add inbox",
+ "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.",
+ "CONFIRM_BUTTON_LABEL": "Continue",
+ "CANCEL_BUTTON_LABEL": "Скасувати"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Assignment policy updated successfully",
+ "ERROR_MESSAGE": "Failed to update assignment policy"
+ },
+ "INBOX_API": {
+ "ADD": {
+ "SUCCESS_MESSAGE": "Inbox added to policy successfully",
+ "ERROR_MESSAGE": "Failed to add inbox to policy"
+ },
+ "REMOVE": {
+ "SUCCESS_MESSAGE": "Inbox removed from policy successfully",
+ "ERROR_MESSAGE": "Failed to remove inbox from policy"
+ }
+ }
+ },
+ "FORM": {
+ "NAME": {
+ "LABEL": "Policy name:",
+ "PLACEHOLDER": "Enter policy name"
+ },
+ "DESCRIPTION": {
+ "LABEL": "Опис:",
+ "PLACEHOLDER": "Enter description"
+ },
+ "STATUS": {
+ "LABEL": "Статус:",
+ "PLACEHOLDER": "Select status",
+ "ACTIVE": "Policy is active",
+ "INACTIVE": "Policy is inactive"
+ },
+ "ASSIGNMENT_ORDER": {
+ "LABEL": "Assignment order",
+ "ROUND_ROBIN": {
+ "LABEL": "Round robin",
+ "DESCRIPTION": "Assign conversations evenly among agents."
+ },
+ "BALANCED": {
+ "LABEL": "Balanced",
+ "DESCRIPTION": "Assign conversations based on available capacity."
+ }
+ },
+ "ASSIGNMENT_PRIORITY": {
+ "LABEL": "Assignment priority",
+ "EARLIEST_CREATED": {
+ "LABEL": "Earliest created",
+ "DESCRIPTION": "The conversation that was created first gets assigned first."
+ },
+ "LONGEST_WAITING": {
+ "LABEL": "Longest waiting",
+ "DESCRIPTION": "The conversation waiting the longest gets assigned first."
+ }
+ },
+ "FAIR_DISTRIBUTION": {
+ "LABEL": "Fair distribution policy",
+ "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.",
+ "INPUT_MAX": "Assign max",
+ "DURATION": "Conversations per agent in every"
+ },
+ "INBOXES": {
+ "LABEL": "Added inboxes",
+ "DESCRIPTION": "Add inboxes for which this policy will be applicable.",
+ "ADD_BUTTON": "Add inbox",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Виберіть канали для додавання",
+ "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": "Виберіть мітки для додавання"
+ },
+ "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": "Виберіть агентів для додавання",
+ "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": "Скасувати"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/ur/conversation.json b/app/javascript/dashboard/i18n/locale/ur/conversation.json
index 1926fb2a7..fc03fbc7c 100644
--- a/app/javascript/dashboard/i18n/locale/ur/conversation.json
+++ b/app/javascript/dashboard/i18n/locale/ur/conversation.json
@@ -71,6 +71,17 @@
"SHOW_LABELS": "Show labels",
"HIDE_LABELS": "Hide labels"
},
+ "VOICE_CALL": {
+ "INCOMING_CALL": "Incoming call",
+ "OUTGOING_CALL": "Outgoing call",
+ "CALL_IN_PROGRESS": "Call in progress",
+ "NO_ANSWER": "No answer",
+ "MISSED_CALL": "Missed call",
+ "CALL_ENDED": "Call ended",
+ "NOT_ANSWERED_YET": "Not answered yet",
+ "THEY_ANSWERED": "They answered",
+ "YOU_ANSWERED": "You answered"
+ },
"HEADER": {
"RESOLVE_ACTION": "حل کریں۔",
"REOPEN_ACTION": "دوبارہ کھولیں۔",
diff --git a/app/javascript/dashboard/i18n/locale/ur/settings.json b/app/javascript/dashboard/i18n/locale/ur/settings.json
index 326f39c98..f7d053a20 100644
--- a/app/javascript/dashboard/i18n/locale/ur/settings.json
+++ b/app/javascript/dashboard/i18n/locale/ur/settings.json
@@ -51,6 +51,13 @@
"LARGER": "Larger",
"EXTRA_LARGE": "Extra Large"
}
+ },
+ "LANGUAGE": {
+ "TITLE": "Preferred Language",
+ "NOTE": "Choose the language you want to use.",
+ "UPDATE_SUCCESS": "Your Language settings have been updated successfully",
+ "UPDATE_ERROR": "There is an error while updating the language settings, please try again",
+ "USE_ACCOUNT_DEFAULT": "Use account default"
}
},
"MESSAGE_SIGNATURE_SECTION": {
@@ -330,6 +337,7 @@
"REPORTS_LABEL": "Labels",
"REPORTS_INBOX": "ان باکس",
"REPORTS_TEAM": "Team",
+ "AGENT_ASSIGNMENT": "Agent Assignment",
"SET_AVAILABILITY_TITLE": "Set yourself as",
"SET_YOUR_AVAILABILITY": "Set your availability",
"SLA": "SLA",
@@ -418,5 +426,255 @@
"SWITCH_TO_REPLY": "Switch to Reply",
"TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown"
}
+ },
+ "ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent assignment",
+ "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here"
+ },
+ "ASSIGNMENT_POLICY": {
+ "TITLE": "Assignment policy",
+ "DESCRIPTION": "Manage how conversations get assigned in inboxes.",
+ "FEATURES": [
+ "Assign by conversations evenly or by available capacity",
+ "Add fair distribution rules to avoid overloading any agent",
+ "Add inboxes to a policy - one policy per inbox"
+ ]
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "TITLE": "Agent capacity policy",
+ "DESCRIPTION": "Manage workload for agents.",
+ "FEATURES": [
+ "Define maximum conversations per inbox",
+ "Create exceptions based on labels and time",
+ "Add agents to a policy - one policy per agent"
+ ]
+ }
+ },
+ "AGENT_ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Assignment policy",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "ORDER": "Order",
+ "PRIORITY": "Priority",
+ "ACTIVE": "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": "Description:",
+ "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": "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": "شامل کریں۔"
+ },
+ "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": "منسوخ کریں۔"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/ur_IN/conversation.json b/app/javascript/dashboard/i18n/locale/ur_IN/conversation.json
index 93f375e7f..9fd39b70f 100644
--- a/app/javascript/dashboard/i18n/locale/ur_IN/conversation.json
+++ b/app/javascript/dashboard/i18n/locale/ur_IN/conversation.json
@@ -71,6 +71,17 @@
"SHOW_LABELS": "Show labels",
"HIDE_LABELS": "Hide labels"
},
+ "VOICE_CALL": {
+ "INCOMING_CALL": "Incoming call",
+ "OUTGOING_CALL": "Outgoing call",
+ "CALL_IN_PROGRESS": "Call in progress",
+ "NO_ANSWER": "No answer",
+ "MISSED_CALL": "Missed call",
+ "CALL_ENDED": "Call ended",
+ "NOT_ANSWERED_YET": "Not answered yet",
+ "THEY_ANSWERED": "They answered",
+ "YOU_ANSWERED": "You answered"
+ },
"HEADER": {
"RESOLVE_ACTION": "Resolve",
"REOPEN_ACTION": "Reopen",
diff --git a/app/javascript/dashboard/i18n/locale/ur_IN/settings.json b/app/javascript/dashboard/i18n/locale/ur_IN/settings.json
index 98c3f559b..7c10f417b 100644
--- a/app/javascript/dashboard/i18n/locale/ur_IN/settings.json
+++ b/app/javascript/dashboard/i18n/locale/ur_IN/settings.json
@@ -51,6 +51,13 @@
"LARGER": "Larger",
"EXTRA_LARGE": "Extra Large"
}
+ },
+ "LANGUAGE": {
+ "TITLE": "Preferred Language",
+ "NOTE": "Choose the language you want to use.",
+ "UPDATE_SUCCESS": "Your Language settings have been updated successfully",
+ "UPDATE_ERROR": "There is an error while updating the language settings, please try again",
+ "USE_ACCOUNT_DEFAULT": "Use account default"
}
},
"MESSAGE_SIGNATURE_SECTION": {
@@ -330,6 +337,7 @@
"REPORTS_LABEL": "Labels",
"REPORTS_INBOX": "Inbox",
"REPORTS_TEAM": "Team",
+ "AGENT_ASSIGNMENT": "Agent Assignment",
"SET_AVAILABILITY_TITLE": "Set yourself as",
"SET_YOUR_AVAILABILITY": "Set your availability",
"SLA": "SLA",
@@ -418,5 +426,255 @@
"SWITCH_TO_REPLY": "Switch to Reply",
"TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown"
}
+ },
+ "ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent assignment",
+ "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here"
+ },
+ "ASSIGNMENT_POLICY": {
+ "TITLE": "Assignment policy",
+ "DESCRIPTION": "Manage how conversations get assigned in inboxes.",
+ "FEATURES": [
+ "Assign by conversations evenly or by available capacity",
+ "Add fair distribution rules to avoid overloading any agent",
+ "Add inboxes to a policy - one policy per inbox"
+ ]
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "TITLE": "Agent capacity policy",
+ "DESCRIPTION": "Manage workload for agents.",
+ "FEATURES": [
+ "Define maximum conversations per inbox",
+ "Create exceptions based on labels and time",
+ "Add agents to a policy - one policy per agent"
+ ]
+ }
+ },
+ "AGENT_ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Assignment policy",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "ORDER": "Order",
+ "PRIORITY": "Priority",
+ "ACTIVE": "Active",
+ "INACTIVE": "Inactive",
+ "POPOVER": "Added inboxes",
+ "EDIT": "Edit"
+ },
+ "NO_RECORDS_FOUND": "No assignment policies found"
+ },
+ "CREATE": {
+ "HEADER": {
+ "TITLE": "Create assignment policy"
+ },
+ "CREATE_BUTTON": "Create policy",
+ "API": {
+ "SUCCESS_MESSAGE": "Assignment policy created successfully",
+ "ERROR_MESSAGE": "Failed to create assignment policy"
+ }
+ },
+ "EDIT": {
+ "HEADER": {
+ "TITLE": "Edit assignment policy"
+ },
+ "EDIT_BUTTON": "Update policy",
+ "CONFIRM_ADD_INBOX_DIALOG": {
+ "TITLE": "Add inbox",
+ "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.",
+ "CONFIRM_BUTTON_LABEL": "Continue",
+ "CANCEL_BUTTON_LABEL": "Cancel"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Assignment policy updated successfully",
+ "ERROR_MESSAGE": "Failed to update assignment policy"
+ },
+ "INBOX_API": {
+ "ADD": {
+ "SUCCESS_MESSAGE": "Inbox added to policy successfully",
+ "ERROR_MESSAGE": "Failed to add inbox to policy"
+ },
+ "REMOVE": {
+ "SUCCESS_MESSAGE": "Inbox removed from policy successfully",
+ "ERROR_MESSAGE": "Failed to remove inbox from policy"
+ }
+ }
+ },
+ "FORM": {
+ "NAME": {
+ "LABEL": "Policy name:",
+ "PLACEHOLDER": "Enter policy name"
+ },
+ "DESCRIPTION": {
+ "LABEL": "Description:",
+ "PLACEHOLDER": "Enter description"
+ },
+ "STATUS": {
+ "LABEL": "Status:",
+ "PLACEHOLDER": "Select status",
+ "ACTIVE": "Policy is active",
+ "INACTIVE": "Policy is inactive"
+ },
+ "ASSIGNMENT_ORDER": {
+ "LABEL": "Assignment order",
+ "ROUND_ROBIN": {
+ "LABEL": "Round robin",
+ "DESCRIPTION": "Assign conversations evenly among agents."
+ },
+ "BALANCED": {
+ "LABEL": "Balanced",
+ "DESCRIPTION": "Assign conversations based on available capacity."
+ }
+ },
+ "ASSIGNMENT_PRIORITY": {
+ "LABEL": "Assignment priority",
+ "EARLIEST_CREATED": {
+ "LABEL": "Earliest created",
+ "DESCRIPTION": "The conversation that was created first gets assigned first."
+ },
+ "LONGEST_WAITING": {
+ "LABEL": "Longest waiting",
+ "DESCRIPTION": "The conversation waiting the longest gets assigned first."
+ }
+ },
+ "FAIR_DISTRIBUTION": {
+ "LABEL": "Fair distribution policy",
+ "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.",
+ "INPUT_MAX": "Assign max",
+ "DURATION": "Conversations per agent in every"
+ },
+ "INBOXES": {
+ "LABEL": "Added inboxes",
+ "DESCRIPTION": "Add inboxes for which this policy will be applicable.",
+ "ADD_BUTTON": "Add inbox",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select inboxes to add",
+ "ADD_BUTTON": "Add"
+ },
+ "EMPTY_STATE": "No inboxes added to this policy, add an inbox to get started",
+ "API": {
+ "SUCCESS_MESSAGE": "Inbox successfully added to policy",
+ "ERROR_MESSAGE": "Failed to add inbox to policy"
+ }
+ }
+ },
+ "DELETE_POLICY": {
+ "SUCCESS_MESSAGE": "Assignment policy deleted successfully",
+ "ERROR_MESSAGE": "Failed to delete assignment policy"
+ }
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent capacity",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "POPOVER": "Added agents",
+ "EDIT": "Edit"
+ },
+ "NO_RECORDS_FOUND": "No agent capacity policies found"
+ },
+ "CREATE": {
+ "HEADER": {
+ "TITLE": "Create agent capacity policy"
+ },
+ "CREATE_BUTTON": "Create policy",
+ "API": {
+ "SUCCESS_MESSAGE": "Agent capacity policy created successfully",
+ "ERROR_MESSAGE": "Failed to create agent capacity policy"
+ }
+ },
+ "EDIT": {
+ "HEADER": {
+ "TITLE": "Edit agent capacity policy"
+ },
+ "EDIT_BUTTON": "Update policy",
+ "CONFIRM_ADD_AGENT_DIALOG": {
+ "TITLE": "Add agent",
+ "DESCRIPTION": "{agentName} is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.",
+ "CONFIRM_BUTTON_LABEL": "Continue",
+ "CANCEL_BUTTON_LABEL": "Cancel"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Agent capacity policy updated successfully",
+ "ERROR_MESSAGE": "Failed to update agent capacity policy"
+ },
+ "AGENT_API": {
+ "ADD": {
+ "SUCCESS_MESSAGE": "Agent added to policy successfully",
+ "ERROR_MESSAGE": "Failed to add agent to policy"
+ },
+ "REMOVE": {
+ "SUCCESS_MESSAGE": "Agent removed from policy successfully",
+ "ERROR_MESSAGE": "Failed to remove agent from policy"
+ }
+ }
+ },
+ "FORM": {
+ "NAME": {
+ "LABEL": "Policy name:",
+ "PLACEHOLDER": "Enter policy name"
+ },
+ "DESCRIPTION": {
+ "LABEL": "Description:",
+ "PLACEHOLDER": "Enter description"
+ },
+ "INBOX_CAPACITY_LIMIT": {
+ "LABEL": "Inbox capacity limits",
+ "ADD_BUTTON": "Add inbox",
+ "FIELD": {
+ "SELECT_INBOX": "Select inbox",
+ "MAX_CONVERSATIONS": "Max conversations",
+ "SET_LIMIT": "Set limit"
+ },
+ "EMPTY_STATE": "No inbox limit set"
+ },
+ "EXCLUSION_RULES": {
+ "LABEL": "Exclusion rules",
+ "DESCRIPTION": "Conversations that satisfy the following conditions would not count towards agent capacity",
+ "TAGS": {
+ "LABEL": "Exclude conversations tagged with specific labels",
+ "ADD_TAG": "add tag",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select tags to add"
+ },
+ "EMPTY_STATE": "No tags added to this policy."
+ },
+ "DURATION": {
+ "LABEL": "Exclude conversations older than a specified duration",
+ "PLACEHOLDER": "Set time"
+ }
+ },
+ "USERS": {
+ "LABEL": "Assigned agents",
+ "DESCRIPTION": "Add agents for which this policy will be applicable.",
+ "ADD_BUTTON": "Add agent",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select agents to add",
+ "ADD_BUTTON": "Add"
+ },
+ "EMPTY_STATE": "No agents added",
+ "API": {
+ "SUCCESS_MESSAGE": "Agent successfully added to policy",
+ "ERROR_MESSAGE": "Failed to add agent to policy"
+ }
+ }
+ },
+ "DELETE_POLICY": {
+ "SUCCESS_MESSAGE": "Agent capacity policy deleted successfully",
+ "ERROR_MESSAGE": "Failed to delete agent capacity policy"
+ }
+ },
+ "DELETE_POLICY": {
+ "TITLE": "Delete policy",
+ "DESCRIPTION": "Are you sure you want to delete this policy? This action cannot be undone.",
+ "CONFIRM_BUTTON_LABEL": "Delete",
+ "CANCEL_BUTTON_LABEL": "Cancel"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/vi/conversation.json b/app/javascript/dashboard/i18n/locale/vi/conversation.json
index 84484850a..58eadd9e0 100644
--- a/app/javascript/dashboard/i18n/locale/vi/conversation.json
+++ b/app/javascript/dashboard/i18n/locale/vi/conversation.json
@@ -71,6 +71,17 @@
"SHOW_LABELS": "Hiển thị nhãn",
"HIDE_LABELS": "Ẩn nhãn"
},
+ "VOICE_CALL": {
+ "INCOMING_CALL": "Incoming call",
+ "OUTGOING_CALL": "Outgoing call",
+ "CALL_IN_PROGRESS": "Call in progress",
+ "NO_ANSWER": "No answer",
+ "MISSED_CALL": "Missed call",
+ "CALL_ENDED": "Call ended",
+ "NOT_ANSWERED_YET": "Not answered yet",
+ "THEY_ANSWERED": "They answered",
+ "YOU_ANSWERED": "You answered"
+ },
"HEADER": {
"RESOLVE_ACTION": "Giải quyết",
"REOPEN_ACTION": "Mở lại",
diff --git a/app/javascript/dashboard/i18n/locale/vi/settings.json b/app/javascript/dashboard/i18n/locale/vi/settings.json
index 6a3f631c7..7cdde68d2 100644
--- a/app/javascript/dashboard/i18n/locale/vi/settings.json
+++ b/app/javascript/dashboard/i18n/locale/vi/settings.json
@@ -51,6 +51,13 @@
"LARGER": "Larger",
"EXTRA_LARGE": "Extra Large"
}
+ },
+ "LANGUAGE": {
+ "TITLE": "Preferred Language",
+ "NOTE": "Choose the language you want to use.",
+ "UPDATE_SUCCESS": "Your Language settings have been updated successfully",
+ "UPDATE_ERROR": "There is an error while updating the language settings, please try again",
+ "USE_ACCOUNT_DEFAULT": "Use account default"
}
},
"MESSAGE_SIGNATURE_SECTION": {
@@ -330,6 +337,7 @@
"REPORTS_LABEL": "Nhãn",
"REPORTS_INBOX": "Kênh",
"REPORTS_TEAM": "Nhóm",
+ "AGENT_ASSIGNMENT": "Agent Assignment",
"SET_AVAILABILITY_TITLE": "Đặt chính mình như",
"SET_YOUR_AVAILABILITY": "Đặt tính khả dụng của bạn",
"SLA": "SLA",
@@ -418,5 +426,255 @@
"SWITCH_TO_REPLY": "Chuyển sang phản hồi",
"TOGGLE_SNOOZE_DROPDOWN": "Chuyển đổi thả xuống tạm dừng"
}
+ },
+ "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": "Mức độ ưu tiên",
+ "ACTIVE": "Có hiệu lực",
+ "INACTIVE": "Inactive",
+ "POPOVER": "Added inboxes",
+ "EDIT": "Chỉnh sửa"
+ },
+ "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": "Huỷ"
+ },
+ "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": "Mô tả:",
+ "PLACEHOLDER": "Enter description"
+ },
+ "STATUS": {
+ "LABEL": "Trạng thái:",
+ "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": "Thêm"
+ },
+ "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": "Chỉnh sửa"
+ },
+ "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": "Huỷ"
+ },
+ "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": "Mô tả:",
+ "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": "Thêm"
+ },
+ "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": "Xoá",
+ "CANCEL_BUTTON_LABEL": "Huỷ"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/zh_CN/conversation.json b/app/javascript/dashboard/i18n/locale/zh_CN/conversation.json
index d05bc3f1d..7f01e32a8 100644
--- a/app/javascript/dashboard/i18n/locale/zh_CN/conversation.json
+++ b/app/javascript/dashboard/i18n/locale/zh_CN/conversation.json
@@ -71,6 +71,17 @@
"SHOW_LABELS": "显示标签",
"HIDE_LABELS": "隐藏标签"
},
+ "VOICE_CALL": {
+ "INCOMING_CALL": "Incoming call",
+ "OUTGOING_CALL": "Outgoing call",
+ "CALL_IN_PROGRESS": "Call in progress",
+ "NO_ANSWER": "No answer",
+ "MISSED_CALL": "Missed call",
+ "CALL_ENDED": "Call ended",
+ "NOT_ANSWERED_YET": "Not answered yet",
+ "THEY_ANSWERED": "They answered",
+ "YOU_ANSWERED": "You answered"
+ },
"HEADER": {
"RESOLVE_ACTION": "已解决",
"REOPEN_ACTION": "重新打开",
diff --git a/app/javascript/dashboard/i18n/locale/zh_CN/settings.json b/app/javascript/dashboard/i18n/locale/zh_CN/settings.json
index 843f2f7a2..2b5712a90 100644
--- a/app/javascript/dashboard/i18n/locale/zh_CN/settings.json
+++ b/app/javascript/dashboard/i18n/locale/zh_CN/settings.json
@@ -51,6 +51,13 @@
"LARGER": "较大",
"EXTRA_LARGE": "特大"
}
+ },
+ "LANGUAGE": {
+ "TITLE": "Preferred Language",
+ "NOTE": "Choose the language you want to use.",
+ "UPDATE_SUCCESS": "Your Language settings have been updated successfully",
+ "UPDATE_ERROR": "There is an error while updating the language settings, please try again",
+ "USE_ACCOUNT_DEFAULT": "Use account default"
}
},
"MESSAGE_SIGNATURE_SECTION": {
@@ -330,6 +337,7 @@
"REPORTS_LABEL": "标签",
"REPORTS_INBOX": "收件箱",
"REPORTS_TEAM": "团队",
+ "AGENT_ASSIGNMENT": "Agent Assignment",
"SET_AVAILABILITY_TITLE": "将自己设置为",
"SET_YOUR_AVAILABILITY": "设置您的可用性",
"SLA": "SLA",
@@ -418,5 +426,255 @@
"SWITCH_TO_REPLY": "切换到回复",
"TOGGLE_SNOOZE_DROPDOWN": "切换暂停下拉菜单"
}
+ },
+ "ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent assignment",
+ "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here"
+ },
+ "ASSIGNMENT_POLICY": {
+ "TITLE": "Assignment policy",
+ "DESCRIPTION": "Manage how conversations get assigned in inboxes.",
+ "FEATURES": [
+ "Assign by conversations evenly or by available capacity",
+ "Add fair distribution rules to avoid overloading any agent",
+ "Add inboxes to a policy - one policy per inbox"
+ ]
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "TITLE": "Agent capacity policy",
+ "DESCRIPTION": "Manage workload for agents.",
+ "FEATURES": [
+ "Define maximum conversations per inbox",
+ "Create exceptions based on labels and time",
+ "Add agents to a policy - one policy per agent"
+ ]
+ }
+ },
+ "AGENT_ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Assignment policy",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "ORDER": "Order",
+ "PRIORITY": "优先级",
+ "ACTIVE": "状态",
+ "INACTIVE": "Inactive",
+ "POPOVER": "Added inboxes",
+ "EDIT": "编辑"
+ },
+ "NO_RECORDS_FOUND": "No assignment policies found"
+ },
+ "CREATE": {
+ "HEADER": {
+ "TITLE": "Create assignment policy"
+ },
+ "CREATE_BUTTON": "Create policy",
+ "API": {
+ "SUCCESS_MESSAGE": "Assignment policy created successfully",
+ "ERROR_MESSAGE": "Failed to create assignment policy"
+ }
+ },
+ "EDIT": {
+ "HEADER": {
+ "TITLE": "Edit assignment policy"
+ },
+ "EDIT_BUTTON": "Update policy",
+ "CONFIRM_ADD_INBOX_DIALOG": {
+ "TITLE": "Add inbox",
+ "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.",
+ "CONFIRM_BUTTON_LABEL": "Continue",
+ "CANCEL_BUTTON_LABEL": "取消"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Assignment policy updated successfully",
+ "ERROR_MESSAGE": "Failed to update assignment policy"
+ },
+ "INBOX_API": {
+ "ADD": {
+ "SUCCESS_MESSAGE": "Inbox added to policy successfully",
+ "ERROR_MESSAGE": "Failed to add inbox to policy"
+ },
+ "REMOVE": {
+ "SUCCESS_MESSAGE": "Inbox removed from policy successfully",
+ "ERROR_MESSAGE": "Failed to remove inbox from policy"
+ }
+ }
+ },
+ "FORM": {
+ "NAME": {
+ "LABEL": "Policy name:",
+ "PLACEHOLDER": "Enter policy name"
+ },
+ "DESCRIPTION": {
+ "LABEL": "描述:",
+ "PLACEHOLDER": "输入描述"
+ },
+ "STATUS": {
+ "LABEL": "状态:",
+ "PLACEHOLDER": "选择状态",
+ "ACTIVE": "Policy is active",
+ "INACTIVE": "Policy is inactive"
+ },
+ "ASSIGNMENT_ORDER": {
+ "LABEL": "Assignment order",
+ "ROUND_ROBIN": {
+ "LABEL": "Round robin",
+ "DESCRIPTION": "Assign conversations evenly among agents."
+ },
+ "BALANCED": {
+ "LABEL": "Balanced",
+ "DESCRIPTION": "Assign conversations based on available capacity."
+ }
+ },
+ "ASSIGNMENT_PRIORITY": {
+ "LABEL": "Assignment priority",
+ "EARLIEST_CREATED": {
+ "LABEL": "Earliest created",
+ "DESCRIPTION": "The conversation that was created first gets assigned first."
+ },
+ "LONGEST_WAITING": {
+ "LABEL": "Longest waiting",
+ "DESCRIPTION": "The conversation waiting the longest gets assigned first."
+ }
+ },
+ "FAIR_DISTRIBUTION": {
+ "LABEL": "Fair distribution policy",
+ "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.",
+ "INPUT_MAX": "Assign max",
+ "DURATION": "Conversations per agent in every"
+ },
+ "INBOXES": {
+ "LABEL": "Added inboxes",
+ "DESCRIPTION": "Add inboxes for which this policy will be applicable.",
+ "ADD_BUTTON": "Add inbox",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select inboxes to add",
+ "ADD_BUTTON": "添加"
+ },
+ "EMPTY_STATE": "No inboxes added to this policy, add an inbox to get started",
+ "API": {
+ "SUCCESS_MESSAGE": "Inbox successfully added to policy",
+ "ERROR_MESSAGE": "Failed to add inbox to policy"
+ }
+ }
+ },
+ "DELETE_POLICY": {
+ "SUCCESS_MESSAGE": "Assignment policy deleted successfully",
+ "ERROR_MESSAGE": "Failed to delete assignment policy"
+ }
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent capacity",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "POPOVER": "Added agents",
+ "EDIT": "编辑"
+ },
+ "NO_RECORDS_FOUND": "No agent capacity policies found"
+ },
+ "CREATE": {
+ "HEADER": {
+ "TITLE": "Create agent capacity policy"
+ },
+ "CREATE_BUTTON": "Create policy",
+ "API": {
+ "SUCCESS_MESSAGE": "Agent capacity policy created successfully",
+ "ERROR_MESSAGE": "Failed to create agent capacity policy"
+ }
+ },
+ "EDIT": {
+ "HEADER": {
+ "TITLE": "Edit agent capacity policy"
+ },
+ "EDIT_BUTTON": "Update policy",
+ "CONFIRM_ADD_AGENT_DIALOG": {
+ "TITLE": "Add agent",
+ "DESCRIPTION": "{agentName} is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.",
+ "CONFIRM_BUTTON_LABEL": "Continue",
+ "CANCEL_BUTTON_LABEL": "取消"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Agent capacity policy updated successfully",
+ "ERROR_MESSAGE": "Failed to update agent capacity policy"
+ },
+ "AGENT_API": {
+ "ADD": {
+ "SUCCESS_MESSAGE": "Agent added to policy successfully",
+ "ERROR_MESSAGE": "Failed to add agent to policy"
+ },
+ "REMOVE": {
+ "SUCCESS_MESSAGE": "Agent removed from policy successfully",
+ "ERROR_MESSAGE": "Failed to remove agent from policy"
+ }
+ }
+ },
+ "FORM": {
+ "NAME": {
+ "LABEL": "Policy name:",
+ "PLACEHOLDER": "Enter policy name"
+ },
+ "DESCRIPTION": {
+ "LABEL": "描述:",
+ "PLACEHOLDER": "输入描述"
+ },
+ "INBOX_CAPACITY_LIMIT": {
+ "LABEL": "Inbox capacity limits",
+ "ADD_BUTTON": "Add inbox",
+ "FIELD": {
+ "SELECT_INBOX": "Select inbox",
+ "MAX_CONVERSATIONS": "Max conversations",
+ "SET_LIMIT": "Set limit"
+ },
+ "EMPTY_STATE": "No inbox limit set"
+ },
+ "EXCLUSION_RULES": {
+ "LABEL": "Exclusion rules",
+ "DESCRIPTION": "Conversations that satisfy the following conditions would not count towards agent capacity",
+ "TAGS": {
+ "LABEL": "Exclude conversations tagged with specific labels",
+ "ADD_TAG": "add tag",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select tags to add"
+ },
+ "EMPTY_STATE": "No tags added to this policy."
+ },
+ "DURATION": {
+ "LABEL": "Exclude conversations older than a specified duration",
+ "PLACEHOLDER": "Set time"
+ }
+ },
+ "USERS": {
+ "LABEL": "Assigned agents",
+ "DESCRIPTION": "Add agents for which this policy will be applicable.",
+ "ADD_BUTTON": "Add agent",
+ "DROPDOWN": {
+ "SEARCH_PLACEHOLDER": "Search and select agents to add",
+ "ADD_BUTTON": "添加"
+ },
+ "EMPTY_STATE": "No agents added",
+ "API": {
+ "SUCCESS_MESSAGE": "Agent successfully added to policy",
+ "ERROR_MESSAGE": "Failed to add agent to policy"
+ }
+ }
+ },
+ "DELETE_POLICY": {
+ "SUCCESS_MESSAGE": "Agent capacity policy deleted successfully",
+ "ERROR_MESSAGE": "Failed to delete agent capacity policy"
+ }
+ },
+ "DELETE_POLICY": {
+ "TITLE": "Delete policy",
+ "DESCRIPTION": "Are you sure you want to delete this policy? This action cannot be undone.",
+ "CONFIRM_BUTTON_LABEL": "删除",
+ "CANCEL_BUTTON_LABEL": "取消"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/zh_TW/conversation.json b/app/javascript/dashboard/i18n/locale/zh_TW/conversation.json
index 75e09926d..333a13a0f 100644
--- a/app/javascript/dashboard/i18n/locale/zh_TW/conversation.json
+++ b/app/javascript/dashboard/i18n/locale/zh_TW/conversation.json
@@ -71,6 +71,17 @@
"SHOW_LABELS": "Show labels",
"HIDE_LABELS": "Hide labels"
},
+ "VOICE_CALL": {
+ "INCOMING_CALL": "Incoming call",
+ "OUTGOING_CALL": "Outgoing call",
+ "CALL_IN_PROGRESS": "Call in progress",
+ "NO_ANSWER": "No answer",
+ "MISSED_CALL": "Missed call",
+ "CALL_ENDED": "Call ended",
+ "NOT_ANSWERED_YET": "Not answered yet",
+ "THEY_ANSWERED": "They answered",
+ "YOU_ANSWERED": "You answered"
+ },
"HEADER": {
"RESOLVE_ACTION": "已解決",
"REOPEN_ACTION": "重新打開",
diff --git a/app/javascript/dashboard/i18n/locale/zh_TW/settings.json b/app/javascript/dashboard/i18n/locale/zh_TW/settings.json
index 094af1d7c..a49dae5f0 100644
--- a/app/javascript/dashboard/i18n/locale/zh_TW/settings.json
+++ b/app/javascript/dashboard/i18n/locale/zh_TW/settings.json
@@ -51,6 +51,13 @@
"LARGER": "Larger",
"EXTRA_LARGE": "Extra Large"
}
+ },
+ "LANGUAGE": {
+ "TITLE": "Preferred Language",
+ "NOTE": "Choose the language you want to use.",
+ "UPDATE_SUCCESS": "Your Language settings have been updated successfully",
+ "UPDATE_ERROR": "There is an error while updating the language settings, please try again",
+ "USE_ACCOUNT_DEFAULT": "Use account default"
}
},
"MESSAGE_SIGNATURE_SECTION": {
@@ -330,6 +337,7 @@
"REPORTS_LABEL": "標籤",
"REPORTS_INBOX": "收件匣",
"REPORTS_TEAM": "Team",
+ "AGENT_ASSIGNMENT": "Agent Assignment",
"SET_AVAILABILITY_TITLE": "我的狀態",
"SET_YOUR_AVAILABILITY": "設定你的服務時間",
"SLA": "服務水準協議(SLA)",
@@ -418,5 +426,255 @@
"SWITCH_TO_REPLY": "Switch to Reply",
"TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown"
}
+ },
+ "ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Agent assignment",
+ "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here"
+ },
+ "ASSIGNMENT_POLICY": {
+ "TITLE": "Assignment policy",
+ "DESCRIPTION": "Manage how conversations get assigned in inboxes.",
+ "FEATURES": [
+ "Assign by conversations evenly or by available capacity",
+ "Add fair distribution rules to avoid overloading any agent",
+ "Add inboxes to a policy - one policy per inbox"
+ ]
+ },
+ "AGENT_CAPACITY_POLICY": {
+ "TITLE": "Agent capacity policy",
+ "DESCRIPTION": "Manage workload for agents.",
+ "FEATURES": [
+ "Define maximum conversations per inbox",
+ "Create exceptions based on labels and time",
+ "Add agents to a policy - one policy per agent"
+ ]
+ }
+ },
+ "AGENT_ASSIGNMENT_POLICY": {
+ "INDEX": {
+ "HEADER": {
+ "TITLE": "Assignment policy",
+ "CREATE_POLICY": "New policy"
+ },
+ "CARD": {
+ "ORDER": "Order",
+ "PRIORITY": "優先程度",
+ "ACTIVE": "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": "取消"
+ }
}
}
diff --git a/app/javascript/dashboard/routes/dashboard/settings/assignmentPolicy/assignmentPolicy.routes.js b/app/javascript/dashboard/routes/dashboard/settings/assignmentPolicy/assignmentPolicy.routes.js
index f09cc1485..d09871674 100644
--- a/app/javascript/dashboard/routes/dashboard/settings/assignmentPolicy/assignmentPolicy.routes.js
+++ b/app/javascript/dashboard/routes/dashboard/settings/assignmentPolicy/assignmentPolicy.routes.js
@@ -6,6 +6,8 @@ import AgentAssignmentIndex from './pages/AgentAssignmentIndexPage.vue';
import AgentAssignmentCreate from './pages/AgentAssignmentCreatePage.vue';
import AgentAssignmentEdit from './pages/AgentAssignmentEditPage.vue';
import AgentCapacityIndex from './pages/AgentCapacityIndexPage.vue';
+import AgentCapacityCreate from './pages/AgentCapacityCreatePage.vue';
+import AgentCapacityEdit from './pages/AgentCapacityEditPage.vue';
export default {
routes: [
@@ -64,6 +66,24 @@ export default {
permissions: ['administrator'],
},
},
+ {
+ path: 'capacity/create',
+ name: 'agent_capacity_policy_create',
+ component: AgentCapacityCreate,
+ meta: {
+ featureFlag: FEATURE_FLAGS.ASSIGNMENT_V2,
+ permissions: ['administrator'],
+ },
+ },
+ {
+ path: 'capacity/edit/:id',
+ name: 'agent_capacity_policy_edit',
+ component: AgentCapacityEdit,
+ meta: {
+ featureFlag: FEATURE_FLAGS.ASSIGNMENT_V2,
+ permissions: ['administrator'],
+ },
+ },
],
},
],
diff --git a/app/javascript/dashboard/routes/dashboard/settings/assignmentPolicy/pages/AgentCapacityCreatePage.vue b/app/javascript/dashboard/routes/dashboard/settings/assignmentPolicy/pages/AgentCapacityCreatePage.vue
new file mode 100644
index 000000000..db184b4ee
--- /dev/null
+++ b/app/javascript/dashboard/routes/dashboard/settings/assignmentPolicy/pages/AgentCapacityCreatePage.vue
@@ -0,0 +1,87 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/javascript/dashboard/routes/dashboard/settings/assignmentPolicy/pages/AgentCapacityEditPage.vue b/app/javascript/dashboard/routes/dashboard/settings/assignmentPolicy/pages/AgentCapacityEditPage.vue
new file mode 100644
index 000000000..41e277c2d
--- /dev/null
+++ b/app/javascript/dashboard/routes/dashboard/settings/assignmentPolicy/pages/AgentCapacityEditPage.vue
@@ -0,0 +1,192 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/javascript/dashboard/routes/dashboard/settings/assignmentPolicy/pages/components/AgentAssignmentPolicyForm.vue b/app/javascript/dashboard/routes/dashboard/settings/assignmentPolicy/pages/components/AgentAssignmentPolicyForm.vue
index d00ead2a8..84a19f749 100644
--- a/app/javascript/dashboard/routes/dashboard/settings/assignmentPolicy/pages/components/AgentAssignmentPolicyForm.vue
+++ b/app/javascript/dashboard/routes/dashboard/settings/assignmentPolicy/pages/components/AgentAssignmentPolicyForm.vue
@@ -215,33 +215,6 @@ defineExpose({
v-model:window-unit="state.windowUnit"
/>
-
-
-
-
-
- {{ t(`${BASE_KEY}.FORM.INBOXES.LABEL`) }}
-
-
- {{ t(`${BASE_KEY}.FORM.INBOXES.DESCRIPTION`) }}
-
-
-
-
-
-
+
+
+
+
+
+ {{ t(`${BASE_KEY}.FORM.INBOXES.LABEL`) }}
+
+
+ {{ t(`${BASE_KEY}.FORM.INBOXES.DESCRIPTION`) }}
+
+
+
+
+
+
diff --git a/app/javascript/dashboard/routes/dashboard/settings/assignmentPolicy/pages/components/AgentCapacityPolicyForm.vue b/app/javascript/dashboard/routes/dashboard/settings/assignmentPolicy/pages/components/AgentCapacityPolicyForm.vue
new file mode 100644
index 000000000..24c4f0a38
--- /dev/null
+++ b/app/javascript/dashboard/routes/dashboard/settings/assignmentPolicy/pages/components/AgentCapacityPolicyForm.vue
@@ -0,0 +1,214 @@
+
+
+
+
+
diff --git a/app/javascript/dashboard/routes/dashboard/settings/inbox/Settings.vue b/app/javascript/dashboard/routes/dashboard/settings/inbox/Settings.vue
index 609fd3fd4..1f455f112 100644
--- a/app/javascript/dashboard/routes/dashboard/settings/inbox/Settings.vue
+++ b/app/javascript/dashboard/routes/dashboard/settings/inbox/Settings.vue
@@ -328,7 +328,7 @@ export default {
this.continuityViaEmail = this.inbox.continuity_via_email;
this.channelWebsiteUrl = this.inbox.website_url;
this.channelWelcomeTitle = this.inbox.welcome_title;
- this.channelWelcomeTagline = this.inbox.welcome_tagline;
+ this.channelWelcomeTagline = this.inbox.welcome_tagline || '';
this.selectedFeatureFlags = this.inbox.selected_feature_flags || [];
this.replyTime = this.inbox.reply_time;
this.locktoSingleConversation = this.inbox.lock_to_single_conversation;
diff --git a/app/javascript/dashboard/routes/dashboard/settings/inbox/channels/Whatsapp.vue b/app/javascript/dashboard/routes/dashboard/settings/inbox/channels/Whatsapp.vue
index 0691c4b4f..c6c021a45 100644
--- a/app/javascript/dashboard/routes/dashboard/settings/inbox/channels/Whatsapp.vue
+++ b/app/javascript/dashboard/routes/dashboard/settings/inbox/channels/Whatsapp.vue
@@ -1,25 +1,23 @@
@@ -117,18 +94,52 @@ const shouldShowCloudWhatsapp = provider => {
diff --git a/app/javascript/dashboard/routes/dashboard/settings/inbox/channels/WhatsappEmbeddedSignup.vue b/app/javascript/dashboard/routes/dashboard/settings/inbox/channels/WhatsappEmbeddedSignup.vue
index 583ca2413..cf5c1310e 100644
--- a/app/javascript/dashboard/routes/dashboard/settings/inbox/channels/WhatsappEmbeddedSignup.vue
+++ b/app/javascript/dashboard/routes/dashboard/settings/inbox/channels/WhatsappEmbeddedSignup.vue
@@ -2,12 +2,13 @@
import { ref, computed, onMounted, onBeforeUnmount } from 'vue';
import { useStore } from 'vuex';
import { useRouter } from 'vue-router';
-import { useI18n } from 'vue-i18n';
+import { useI18n, I18nT } from 'vue-i18n';
import { useAlert } from 'dashboard/composables';
import Icon from 'next/icon/Icon.vue';
import NextButton from 'next/button/Button.vue';
import LoadingState from 'dashboard/components/widgets/LoadingState.vue';
import { parseAPIErrorResponse } from 'dashboard/store/utils/api';
+import globalConstants from 'dashboard/constants/globals.js';
import {
setupFacebookSdk,
initWhatsAppEmbeddedSignup,
@@ -28,9 +29,6 @@ const authCode = ref(null);
const businessData = ref(null);
const isAuthenticating = ref(false);
-// Computed
-const whatsappIconPath = '/assets/images/dashboard/channels/whatsapp.png';
-
const benefits = computed(() => [
{
key: 'EASY_SETUP',
@@ -235,14 +233,9 @@ onBeforeUnmount(() => {
-
+
@@ -266,22 +259,26 @@ onBeforeUnmount(() => {
diff --git a/app/javascript/dashboard/routes/dashboard/settings/inbox/helpers/timezones.json b/app/javascript/dashboard/routes/dashboard/settings/inbox/helpers/timezones.json
index b238add21..810415ffb 100644
--- a/app/javascript/dashboard/routes/dashboard/settings/inbox/helpers/timezones.json
+++ b/app/javascript/dashboard/routes/dashboard/settings/inbox/helpers/timezones.json
@@ -86,7 +86,7 @@
"Riyadh (GMT+03:00)": "Asia/Riyadh",
"Nairobi (GMT+03:00)": "Africa/Nairobi",
"Baghdad (GMT+03:00)": "Asia/Baghdad",
- "Tehran (GMT+04:30)": "Asia/Tehran",
+ "Tehran (GMT+03:30)": "Asia/Tehran",
"Abu Dhabi (GMT+04:00)": "Asia/Muscat",
"Muscat (GMT+04:00)": "Asia/Muscat",
"Baku (GMT+04:00)": "Asia/Baku",
diff --git a/app/javascript/dashboard/routes/dashboard/settings/security/Index.vue b/app/javascript/dashboard/routes/dashboard/settings/security/Index.vue
new file mode 100644
index 000000000..0ac35c9e2
--- /dev/null
+++ b/app/javascript/dashboard/routes/dashboard/settings/security/Index.vue
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/javascript/dashboard/routes/dashboard/settings/security/components/SamlAttributeMap.vue b/app/javascript/dashboard/routes/dashboard/settings/security/components/SamlAttributeMap.vue
new file mode 100644
index 000000000..442b426df
--- /dev/null
+++ b/app/javascript/dashboard/routes/dashboard/settings/security/components/SamlAttributeMap.vue
@@ -0,0 +1,50 @@
+
+
+
+
+
+
+ {{ t('SECURITY_SETTINGS.SAML.ATTRIBUTE_MAPPING.TITLE') }}
+
+
+
+
+
+
+
+ {{ t('SECURITY_SETTINGS.SAML.ATTRIBUTE_MAPPING.DESCRIPTION') }}
+
+
+
+ email
+ first_name
+ last_name
+
+
+
+
+
diff --git a/app/javascript/dashboard/routes/dashboard/settings/security/components/SamlInfoSection.vue b/app/javascript/dashboard/routes/dashboard/settings/security/components/SamlInfoSection.vue
new file mode 100644
index 000000000..66820cafa
--- /dev/null
+++ b/app/javascript/dashboard/routes/dashboard/settings/security/components/SamlInfoSection.vue
@@ -0,0 +1,102 @@
+
+
+
+
+
+
+ {{ t('SECURITY_SETTINGS.SAML.INFO_SECTION.TITLE') }}
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+ {{ item.value }}
+
+
+
+
+
+
diff --git a/app/javascript/dashboard/routes/dashboard/settings/security/components/SamlPaywall.vue b/app/javascript/dashboard/routes/dashboard/settings/security/components/SamlPaywall.vue
new file mode 100644
index 000000000..a08cce9e0
--- /dev/null
+++ b/app/javascript/dashboard/routes/dashboard/settings/security/components/SamlPaywall.vue
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
diff --git a/app/javascript/dashboard/routes/dashboard/settings/security/components/SamlSettings.vue b/app/javascript/dashboard/routes/dashboard/settings/security/components/SamlSettings.vue
new file mode 100644
index 000000000..dca12200b
--- /dev/null
+++ b/app/javascript/dashboard/routes/dashboard/settings/security/components/SamlSettings.vue
@@ -0,0 +1,251 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/javascript/dashboard/routes/dashboard/settings/security/security.routes.js b/app/javascript/dashboard/routes/dashboard/settings/security/security.routes.js
new file mode 100644
index 000000000..f9058d6bc
--- /dev/null
+++ b/app/javascript/dashboard/routes/dashboard/settings/security/security.routes.js
@@ -0,0 +1,41 @@
+import { frontendURL } from '../../../../helper/URLHelper';
+import { INSTALLATION_TYPES } from 'dashboard/constants/installationTypes';
+import { FEATURE_FLAGS } from 'dashboard/featureFlags';
+import SettingsWrapper from '../SettingsWrapper.vue';
+import Index from './Index.vue';
+
+export default {
+ routes: [
+ {
+ path: frontendURL('accounts/:accountId/settings/security'),
+ meta: {
+ permissions: ['administrator'],
+ installationTypes: [
+ INSTALLATION_TYPES.CLOUD,
+ INSTALLATION_TYPES.ENTERPRISE,
+ ],
+ },
+ component: SettingsWrapper,
+ props: {
+ headerTitle: 'SECURITY_SETTINGS.TITLE',
+ icon: 'i-lucide-shield',
+ showNewButton: false,
+ },
+ children: [
+ {
+ path: '',
+ name: 'security_settings_index',
+ component: Index,
+ meta: {
+ permissions: ['administrator'],
+ featureFlag: FEATURE_FLAGS.SAML,
+ installationTypes: [
+ INSTALLATION_TYPES.CLOUD,
+ INSTALLATION_TYPES.ENTERPRISE,
+ ],
+ },
+ },
+ ],
+ },
+ ],
+};
diff --git a/app/javascript/dashboard/routes/dashboard/settings/settings.routes.js b/app/javascript/dashboard/routes/dashboard/settings/settings.routes.js
index 967c6cd55..22173f66d 100644
--- a/app/javascript/dashboard/routes/dashboard/settings/settings.routes.js
+++ b/app/javascript/dashboard/routes/dashboard/settings/settings.routes.js
@@ -23,6 +23,7 @@ import sla from './sla/sla.routes';
import teams from './teams/teams.routes';
import customRoles from './customRoles/customRole.routes';
import profile from './profile/profile.routes';
+import security from './security/security.routes';
export default {
routes: [
@@ -61,5 +62,6 @@ export default {
...teams.routes,
...customRoles.routes,
...profile.routes,
+ ...security.routes,
],
};
diff --git a/app/javascript/dashboard/store/modules/agentCapacityPolicies.js b/app/javascript/dashboard/store/modules/agentCapacityPolicies.js
index e1e766f2c..ea554448f 100644
--- a/app/javascript/dashboard/store/modules/agentCapacityPolicies.js
+++ b/app/javascript/dashboard/store/modules/agentCapacityPolicies.js
@@ -40,7 +40,10 @@ export const actions = {
commit(types.SET_AGENT_CAPACITY_POLICIES_UI_FLAG, { isFetching: true });
try {
const response = await AgentCapacityPoliciesAPI.get();
- commit(types.SET_AGENT_CAPACITY_POLICIES, camelcaseKeys(response.data));
+ commit(
+ types.SET_AGENT_CAPACITY_POLICIES,
+ camelcaseKeys(response.data, { deep: true })
+ );
} catch (error) {
throwErrorMessage(error);
} finally {
@@ -52,7 +55,7 @@ export const actions = {
commit(types.SET_AGENT_CAPACITY_POLICIES_UI_FLAG, { isFetchingItem: true });
try {
const response = await AgentCapacityPoliciesAPI.show(policyId);
- const policy = camelcaseKeys(response.data);
+ const policy = camelcaseKeys(response.data, { deep: true });
commit(types.SET_AGENT_CAPACITY_POLICY, policy);
} catch (error) {
throwErrorMessage(error);
@@ -69,7 +72,10 @@ export const actions = {
const response = await AgentCapacityPoliciesAPI.create(
snakecaseKeys(policyObj)
);
- commit(types.ADD_AGENT_CAPACITY_POLICY, camelcaseKeys(response.data));
+ commit(
+ types.ADD_AGENT_CAPACITY_POLICY,
+ camelcaseKeys(response.data, { deep: true })
+ );
return response.data;
} catch (error) {
throwErrorMessage(error);
@@ -86,7 +92,10 @@ export const actions = {
id,
snakecaseKeys(policyParams)
);
- commit(types.EDIT_AGENT_CAPACITY_POLICY, camelcaseKeys(response.data));
+ commit(
+ types.EDIT_AGENT_CAPACITY_POLICY,
+ camelcaseKeys(response.data, { deep: true })
+ );
return response.data;
} catch (error) {
throwErrorMessage(error);
@@ -129,6 +138,97 @@ export const actions = {
});
}
},
+
+ addUser: async function addUser({ commit }, { policyId, userData }) {
+ try {
+ const response = await AgentCapacityPoliciesAPI.addUser(
+ policyId,
+ userData
+ );
+ commit(types.ADD_AGENT_CAPACITY_POLICIES_USERS, {
+ policyId,
+ user: camelcaseKeys(response.data),
+ });
+ return response.data;
+ } catch (error) {
+ throwErrorMessage(error);
+ throw error;
+ }
+ },
+
+ removeUser: async function removeUser({ commit }, { policyId, userId }) {
+ commit(types.SET_AGENT_CAPACITY_POLICIES_USERS_UI_FLAG, {
+ isDeleting: true,
+ });
+ try {
+ await AgentCapacityPoliciesAPI.removeUser(policyId, userId);
+ commit(types.DELETE_AGENT_CAPACITY_POLICIES_USERS, { policyId, userId });
+ } catch (error) {
+ throwErrorMessage(error);
+ throw error;
+ } finally {
+ commit(types.SET_AGENT_CAPACITY_POLICIES_USERS_UI_FLAG, {
+ isDeleting: false,
+ });
+ }
+ },
+
+ createInboxLimit: async function createInboxLimit(
+ { commit },
+ { policyId, limitData }
+ ) {
+ try {
+ const response = await AgentCapacityPoliciesAPI.createInboxLimit(
+ policyId,
+ limitData
+ );
+ commit(
+ types.SET_AGENT_CAPACITY_POLICIES_INBOXES,
+ camelcaseKeys(response.data)
+ );
+ return response.data;
+ } catch (error) {
+ throwErrorMessage(error);
+ throw error;
+ }
+ },
+
+ updateInboxLimit: async function updateInboxLimit(
+ { commit },
+ { policyId, limitId, limitData }
+ ) {
+ try {
+ const response = await AgentCapacityPoliciesAPI.updateInboxLimit(
+ policyId,
+ limitId,
+ limitData
+ );
+ commit(
+ types.EDIT_AGENT_CAPACITY_POLICIES_INBOXES,
+ camelcaseKeys(response.data)
+ );
+ return response.data;
+ } catch (error) {
+ throwErrorMessage(error);
+ throw error;
+ }
+ },
+
+ deleteInboxLimit: async function deleteInboxLimit(
+ { commit },
+ { policyId, limitId }
+ ) {
+ try {
+ await AgentCapacityPoliciesAPI.deleteInboxLimit(policyId, limitId);
+ commit(types.DELETE_AGENT_CAPACITY_POLICIES_INBOXES, {
+ policyId,
+ limitId,
+ });
+ } catch (error) {
+ throwErrorMessage(error);
+ throw error;
+ }
+ },
};
export const mutations = {
@@ -157,6 +257,54 @@ export const mutations = {
policy.users = users;
}
},
+ [types.ADD_AGENT_CAPACITY_POLICIES_USERS](_state, { policyId, user }) {
+ const policy = _state.records.find(p => p.id === policyId);
+ if (policy) {
+ policy.users = policy.users || [];
+ policy.users.push(user);
+ policy.assignedAgentCount = policy.users.length;
+ }
+ },
+ [types.DELETE_AGENT_CAPACITY_POLICIES_USERS](_state, { policyId, userId }) {
+ const policy = _state.records.find(p => p.id === policyId);
+ if (policy) {
+ policy.users = (policy.users || []).filter(user => user.id !== userId);
+ policy.assignedAgentCount = policy.users.length;
+ }
+ },
+
+ [types.SET_AGENT_CAPACITY_POLICIES_INBOXES](_state, data) {
+ const policy = _state.records.find(
+ p => p.id === data.agentCapacityPolicyId
+ );
+ policy?.inboxCapacityLimits.push({
+ id: data.id,
+ inboxId: data.inboxId,
+ conversationLimit: data.conversationLimit,
+ });
+ },
+ [types.EDIT_AGENT_CAPACITY_POLICIES_INBOXES](_state, data) {
+ const policy = _state.records.find(
+ p => p.id === data.agentCapacityPolicyId
+ );
+ const limit = policy?.inboxCapacityLimits.find(l => l.id === data.id);
+ if (limit) {
+ Object.assign(limit, {
+ conversationLimit: data.conversationLimit,
+ });
+ }
+ },
+ [types.DELETE_AGENT_CAPACITY_POLICIES_INBOXES](
+ _state,
+ { policyId, limitId }
+ ) {
+ const policy = _state.records.find(p => p.id === policyId);
+ if (policy) {
+ policy.inboxCapacityLimits = policy.inboxCapacityLimits.filter(
+ limit => limit.id !== limitId
+ );
+ }
+ },
};
export default {
diff --git a/app/javascript/dashboard/store/modules/conversations/helpers/filterHelpers.js b/app/javascript/dashboard/store/modules/conversations/helpers/filterHelpers.js
index 3f1c32059..3d627e3ef 100644
--- a/app/javascript/dashboard/store/modules/conversations/helpers/filterHelpers.js
+++ b/app/javascript/dashboard/store/modules/conversations/helpers/filterHelpers.js
@@ -64,11 +64,13 @@ const getValueFromConversation = (conversation, attributeKey) => {
switch (attributeKey) {
case 'status':
case 'priority':
- case 'display_id':
case 'labels':
case 'created_at':
case 'last_activity_at':
return conversation[attributeKey];
+ case 'display_id':
+ // Frontend uses 'id' but backend expects 'display_id'
+ return conversation.display_id || conversation.id;
case 'assignee_id':
return conversation.meta?.assignee?.id;
case 'inbox_id':
diff --git a/app/javascript/dashboard/store/modules/conversations/helpers/specs/filterHelpers.spec.js b/app/javascript/dashboard/store/modules/conversations/helpers/specs/filterHelpers.spec.js
index b36128819..096481c69 100644
--- a/app/javascript/dashboard/store/modules/conversations/helpers/specs/filterHelpers.spec.js
+++ b/app/javascript/dashboard/store/modules/conversations/helpers/specs/filterHelpers.spec.js
@@ -247,7 +247,7 @@ describe('filterHelpers', () => {
// Text search tests - display_id
it('should match conversation with equal_to operator for display_id', () => {
- const conversation = { display_id: '12345' };
+ const conversation = { id: '12345' };
const filters = [
{
attribute_key: 'display_id',
@@ -260,7 +260,7 @@ describe('filterHelpers', () => {
});
it('should match conversation with contains operator for display_id', () => {
- const conversation = { display_id: '12345' };
+ const conversation = { id: '12345' };
const filters = [
{
attribute_key: 'display_id',
@@ -273,7 +273,7 @@ describe('filterHelpers', () => {
});
it('should not match conversation with does_not_contain operator for display_id', () => {
- const conversation = { display_id: '12345' };
+ const conversation = { id: '12345' };
const filters = [
{
attribute_key: 'display_id',
@@ -286,7 +286,7 @@ describe('filterHelpers', () => {
});
it('should match conversation with does_not_contain operator when value is not present', () => {
- const conversation = { display_id: '12345' };
+ const conversation = { id: '12345' };
const filters = [
{
attribute_key: 'display_id',
@@ -989,7 +989,7 @@ describe('filterHelpers', () => {
it('should handle empty string values in conversation', () => {
const conversation = {
- display_id: '',
+ id: '',
};
const filters = [
{
diff --git a/app/javascript/dashboard/store/modules/specs/agentCapacityPolicies/actions.spec.js b/app/javascript/dashboard/store/modules/specs/agentCapacityPolicies/actions.spec.js
index 0b5ece591..3414a2086 100644
--- a/app/javascript/dashboard/store/modules/specs/agentCapacityPolicies/actions.spec.js
+++ b/app/javascript/dashboard/store/modules/specs/agentCapacityPolicies/actions.spec.js
@@ -1,7 +1,12 @@
import axios from 'axios';
import { actions } from '../../agentCapacityPolicies';
import types from '../../../mutation-types';
-import agentCapacityPoliciesList, { camelCaseFixtures } from './fixtures';
+import agentCapacityPoliciesList, {
+ camelCaseFixtures,
+ mockUsers,
+ mockInboxLimits,
+ camelCaseMockInboxLimits,
+} from './fixtures';
import camelcaseKeys from 'camelcase-keys';
import snakecaseKeys from 'snakecase-keys';
@@ -25,7 +30,9 @@ describe('#actions', () => {
await actions.get({ commit });
- expect(camelcaseKeys).toHaveBeenCalledWith(agentCapacityPoliciesList);
+ expect(camelcaseKeys).toHaveBeenCalledWith(agentCapacityPoliciesList, {
+ deep: true,
+ });
expect(commit.mock.calls).toEqual([
[types.SET_AGENT_CAPACITY_POLICIES_UI_FLAG, { isFetching: true }],
[types.SET_AGENT_CAPACITY_POLICIES, camelCaseFixtures],
@@ -55,7 +62,9 @@ describe('#actions', () => {
await actions.show({ commit }, 1);
- expect(camelcaseKeys).toHaveBeenCalledWith(policyData);
+ expect(camelcaseKeys).toHaveBeenCalledWith(policyData, {
+ deep: true,
+ });
expect(commit.mock.calls).toEqual([
[types.SET_AGENT_CAPACITY_POLICIES_UI_FLAG, { isFetchingItem: true }],
[types.SET_AGENT_CAPACITY_POLICY, camelCasedPolicy],
@@ -88,7 +97,9 @@ describe('#actions', () => {
const result = await actions.create({ commit }, newPolicy);
expect(snakecaseKeys).toHaveBeenCalledWith(newPolicy);
- expect(camelcaseKeys).toHaveBeenCalledWith(newPolicy);
+ expect(camelcaseKeys).toHaveBeenCalledWith(newPolicy, {
+ deep: true,
+ });
expect(commit.mock.calls).toEqual([
[types.SET_AGENT_CAPACITY_POLICIES_UI_FLAG, { isCreating: true }],
[types.ADD_AGENT_CAPACITY_POLICY, camelCasedData],
@@ -129,7 +140,9 @@ describe('#actions', () => {
const result = await actions.update({ commit }, updateParams);
expect(snakecaseKeys).toHaveBeenCalledWith({ name: 'Updated Policy' });
- expect(camelcaseKeys).toHaveBeenCalledWith(responseData);
+ expect(camelcaseKeys).toHaveBeenCalledWith(responseData, {
+ deep: true,
+ });
expect(commit.mock.calls).toEqual([
[types.SET_AGENT_CAPACITY_POLICIES_UI_FLAG, { isUpdating: true }],
[types.EDIT_AGENT_CAPACITY_POLICY, camelCasedData],
@@ -224,4 +237,172 @@ describe('#actions', () => {
]);
});
});
+
+ describe('#addUser', () => {
+ it('sends correct actions if API is success', async () => {
+ const policyId = 1;
+ const userData = { user_id: 3, capacity: 12 };
+ const responseData = mockUsers[2];
+ const camelCasedUser = mockUsers[2];
+
+ axios.post.mockResolvedValue({ data: responseData });
+ camelcaseKeys.mockReturnValue(camelCasedUser);
+
+ const result = await actions.addUser({ commit }, { policyId, userData });
+
+ expect(camelcaseKeys).toHaveBeenCalledWith(responseData);
+ expect(commit.mock.calls).toEqual([
+ [
+ types.ADD_AGENT_CAPACITY_POLICIES_USERS,
+ { policyId, user: camelCasedUser },
+ ],
+ ]);
+ expect(result).toEqual(responseData);
+ });
+
+ it('sends correct actions if API is error', async () => {
+ axios.post.mockRejectedValue(new Error('Validation error'));
+
+ await expect(
+ actions.addUser({ commit }, { policyId: 1, userData: {} })
+ ).rejects.toThrow(Error);
+
+ expect(commit).not.toHaveBeenCalled();
+ });
+ });
+
+ describe('#removeUser', () => {
+ it('sends correct actions if API is success', async () => {
+ const policyId = 1;
+ const userId = 2;
+ axios.delete.mockResolvedValue({});
+
+ await actions.removeUser({ commit }, { policyId, userId });
+
+ expect(commit.mock.calls).toEqual([
+ [types.SET_AGENT_CAPACITY_POLICIES_USERS_UI_FLAG, { isDeleting: true }],
+ [types.DELETE_AGENT_CAPACITY_POLICIES_USERS, { policyId, userId }],
+ [
+ types.SET_AGENT_CAPACITY_POLICIES_USERS_UI_FLAG,
+ { isDeleting: false },
+ ],
+ ]);
+ });
+
+ it('sends correct actions if API is error', async () => {
+ axios.delete.mockRejectedValue(new Error('Not found'));
+
+ await expect(
+ actions.removeUser({ commit }, { policyId: 1, userId: 2 })
+ ).rejects.toThrow(Error);
+
+ expect(commit.mock.calls).toEqual([
+ [types.SET_AGENT_CAPACITY_POLICIES_USERS_UI_FLAG, { isDeleting: true }],
+ [
+ types.SET_AGENT_CAPACITY_POLICIES_USERS_UI_FLAG,
+ { isDeleting: false },
+ ],
+ ]);
+ });
+ });
+
+ describe('#createInboxLimit', () => {
+ it('sends correct actions if API is success', async () => {
+ const policyId = 1;
+ const limitData = { inbox_id: 3, conversation_limit: 20 };
+ const responseData = mockInboxLimits[2];
+ const camelCasedData = camelCaseMockInboxLimits[2];
+
+ axios.post.mockResolvedValue({ data: responseData });
+ camelcaseKeys.mockReturnValue(camelCasedData);
+
+ const result = await actions.createInboxLimit(
+ { commit },
+ { policyId, limitData }
+ );
+
+ expect(camelcaseKeys).toHaveBeenCalledWith(responseData);
+ expect(commit.mock.calls).toEqual([
+ [types.SET_AGENT_CAPACITY_POLICIES_INBOXES, camelCasedData],
+ ]);
+ expect(result).toEqual(responseData);
+ });
+
+ it('sends correct actions if API is error', async () => {
+ axios.post.mockRejectedValue(new Error('Validation error'));
+
+ await expect(
+ actions.createInboxLimit({ commit }, { policyId: 1, limitData: {} })
+ ).rejects.toThrow(Error);
+
+ expect(commit).not.toHaveBeenCalled();
+ });
+ });
+
+ describe('#updateInboxLimit', () => {
+ it('sends correct actions if API is success', async () => {
+ const policyId = 1;
+ const limitId = 1;
+ const limitData = { conversation_limit: 25 };
+ const responseData = {
+ ...mockInboxLimits[0],
+ conversation_limit: 25,
+ };
+ const camelCasedData = {
+ ...camelCaseMockInboxLimits[0],
+ conversationLimit: 25,
+ };
+
+ axios.put.mockResolvedValue({ data: responseData });
+ camelcaseKeys.mockReturnValue(camelCasedData);
+
+ const result = await actions.updateInboxLimit(
+ { commit },
+ { policyId, limitId, limitData }
+ );
+
+ expect(camelcaseKeys).toHaveBeenCalledWith(responseData);
+ expect(commit.mock.calls).toEqual([
+ [types.EDIT_AGENT_CAPACITY_POLICIES_INBOXES, camelCasedData],
+ ]);
+ expect(result).toEqual(responseData);
+ });
+
+ it('sends correct actions if API is error', async () => {
+ axios.put.mockRejectedValue(new Error('Validation error'));
+
+ await expect(
+ actions.updateInboxLimit(
+ { commit },
+ { policyId: 1, limitId: 1, limitData: {} }
+ )
+ ).rejects.toThrow(Error);
+
+ expect(commit).not.toHaveBeenCalled();
+ });
+ });
+
+ describe('#deleteInboxLimit', () => {
+ it('sends correct actions if API is success', async () => {
+ const policyId = 1;
+ const limitId = 1;
+ axios.delete.mockResolvedValue({});
+
+ await actions.deleteInboxLimit({ commit }, { policyId, limitId });
+
+ expect(commit.mock.calls).toEqual([
+ [types.DELETE_AGENT_CAPACITY_POLICIES_INBOXES, { policyId, limitId }],
+ ]);
+ });
+
+ it('sends correct actions if API is error', async () => {
+ axios.delete.mockRejectedValue(new Error('Not found'));
+
+ await expect(
+ actions.deleteInboxLimit({ commit }, { policyId: 1, limitId: 1 })
+ ).rejects.toThrow(Error);
+
+ expect(commit).not.toHaveBeenCalled();
+ });
+ });
});
diff --git a/app/javascript/dashboard/store/modules/specs/agentCapacityPolicies/fixtures.js b/app/javascript/dashboard/store/modules/specs/agentCapacityPolicies/fixtures.js
index 594d5848c..c79597919 100644
--- a/app/javascript/dashboard/store/modules/specs/agentCapacityPolicies/fixtures.js
+++ b/app/javascript/dashboard/store/modules/specs/agentCapacityPolicies/fixtures.js
@@ -10,6 +10,20 @@ export default [
created_at: '2024-01-01T10:00:00.000Z',
updated_at: '2024-01-01T10:00:00.000Z',
users: [],
+ inbox_capacity_limits: [
+ {
+ id: 1,
+ inbox_id: 1,
+ conversation_limit: 15,
+ agent_capacity_policy_id: 1,
+ },
+ {
+ id: 2,
+ inbox_id: 2,
+ conversation_limit: 8,
+ agent_capacity_policy_id: 1,
+ },
+ ],
},
{
id: 2,
@@ -21,7 +35,21 @@ export default [
assigned_agent_count: 5,
created_at: '2024-01-01T11:00:00.000Z',
updated_at: '2024-01-01T11:00:00.000Z',
- users: [],
+ users: [
+ {
+ id: 1,
+ name: 'Agent Smith',
+ email: 'agent.smith@example.com',
+ capacity: 25,
+ },
+ {
+ id: 2,
+ name: 'Agent Johnson',
+ email: 'agent.johnson@example.com',
+ capacity: 18,
+ },
+ ],
+ inbox_capacity_limits: [],
},
{
id: 3,
@@ -34,6 +62,7 @@ export default [
created_at: '2024-01-01T12:00:00.000Z',
updated_at: '2024-01-01T12:00:00.000Z',
users: [],
+ inbox_capacity_limits: [],
},
];
@@ -49,6 +78,20 @@ export const camelCaseFixtures = [
createdAt: '2024-01-01T10:00:00.000Z',
updatedAt: '2024-01-01T10:00:00.000Z',
users: [],
+ inboxCapacityLimits: [
+ {
+ id: 1,
+ inboxId: 1,
+ conversationLimit: 15,
+ agentCapacityPolicyId: 1,
+ },
+ {
+ id: 2,
+ inboxId: 2,
+ conversationLimit: 8,
+ agentCapacityPolicyId: 1,
+ },
+ ],
},
{
id: 2,
@@ -60,7 +103,21 @@ export const camelCaseFixtures = [
assignedAgentCount: 5,
createdAt: '2024-01-01T11:00:00.000Z',
updatedAt: '2024-01-01T11:00:00.000Z',
- users: [],
+ users: [
+ {
+ id: 1,
+ name: 'Agent Smith',
+ email: 'agent.smith@example.com',
+ capacity: 25,
+ },
+ {
+ id: 2,
+ name: 'Agent Johnson',
+ email: 'agent.johnson@example.com',
+ capacity: 18,
+ },
+ ],
+ inboxCapacityLimits: [],
},
{
id: 3,
@@ -73,5 +130,70 @@ export const camelCaseFixtures = [
createdAt: '2024-01-01T12:00:00.000Z',
updatedAt: '2024-01-01T12:00:00.000Z',
users: [],
+ inboxCapacityLimits: [],
+ },
+];
+
+// Additional test data for user and inbox limit operations
+export const mockUsers = [
+ {
+ id: 1,
+ name: 'Agent Smith',
+ email: 'agent.smith@example.com',
+ capacity: 25,
+ },
+ {
+ id: 2,
+ name: 'Agent Johnson',
+ email: 'agent.johnson@example.com',
+ capacity: 18,
+ },
+ {
+ id: 3,
+ name: 'Agent Brown',
+ email: 'agent.brown@example.com',
+ capacity: 12,
+ },
+];
+
+export const mockInboxLimits = [
+ {
+ id: 1,
+ inbox_id: 1,
+ conversation_limit: 15,
+ agent_capacity_policy_id: 1,
+ },
+ {
+ id: 2,
+ inbox_id: 2,
+ conversation_limit: 8,
+ agent_capacity_policy_id: 1,
+ },
+ {
+ id: 3,
+ inbox_id: 3,
+ conversation_limit: 20,
+ agent_capacity_policy_id: 2,
+ },
+];
+
+export const camelCaseMockInboxLimits = [
+ {
+ id: 1,
+ inboxId: 1,
+ conversationLimit: 15,
+ agentCapacityPolicyId: 1,
+ },
+ {
+ id: 2,
+ inboxId: 2,
+ conversationLimit: 8,
+ agentCapacityPolicyId: 1,
+ },
+ {
+ id: 3,
+ inboxId: 3,
+ conversationLimit: 20,
+ agentCapacityPolicyId: 2,
},
];
diff --git a/app/javascript/dashboard/store/modules/specs/agentCapacityPolicies/mutations.spec.js b/app/javascript/dashboard/store/modules/specs/agentCapacityPolicies/mutations.spec.js
index 0ab033953..f6cfba80d 100644
--- a/app/javascript/dashboard/store/modules/specs/agentCapacityPolicies/mutations.spec.js
+++ b/app/javascript/dashboard/store/modules/specs/agentCapacityPolicies/mutations.spec.js
@@ -1,6 +1,6 @@
import { mutations } from '../../agentCapacityPolicies';
import types from '../../../mutation-types';
-import agentCapacityPoliciesList from './fixtures';
+import agentCapacityPoliciesList, { mockUsers } from './fixtures';
describe('#mutations', () => {
describe('#SET_AGENT_CAPACITY_POLICIES_UI_FLAG', () => {
@@ -248,7 +248,7 @@ describe('#mutations', () => {
describe('#SET_AGENT_CAPACITY_POLICIES_USERS', () => {
it('sets users for existing policy', () => {
- const mockUsers = [
+ const testUsers = [
{ id: 1, name: 'Agent 1', email: 'agent1@example.com', capacity: 15 },
{ id: 2, name: 'Agent 2', email: 'agent2@example.com', capacity: 20 },
];
@@ -262,10 +262,10 @@ describe('#mutations', () => {
mutations[types.SET_AGENT_CAPACITY_POLICIES_USERS](state, {
policyId: 1,
- users: mockUsers,
+ users: testUsers,
});
- expect(state.records[0].users).toEqual(mockUsers);
+ expect(state.records[0].users).toEqual(testUsers);
expect(state.records[1].users).toEqual([]);
});
@@ -300,4 +300,320 @@ describe('#mutations', () => {
expect(state).toEqual(originalState);
});
});
+
+ describe('#ADD_AGENT_CAPACITY_POLICIES_USERS', () => {
+ it('adds user to existing policy', () => {
+ const state = {
+ records: [
+ { id: 1, name: 'Policy 1', users: [] },
+ { id: 2, name: 'Policy 2', users: [] },
+ ],
+ };
+
+ mutations[types.ADD_AGENT_CAPACITY_POLICIES_USERS](state, {
+ policyId: 1,
+ user: mockUsers[0],
+ });
+
+ expect(state.records[0].users).toEqual([mockUsers[0]]);
+ expect(state.records[1].users).toEqual([]);
+ });
+
+ it('adds user to policy with existing users', () => {
+ const state = {
+ records: [{ id: 1, name: 'Policy 1', users: [mockUsers[0]] }],
+ };
+
+ mutations[types.ADD_AGENT_CAPACITY_POLICIES_USERS](state, {
+ policyId: 1,
+ user: mockUsers[1],
+ });
+
+ expect(state.records[0].users).toEqual([mockUsers[0], mockUsers[1]]);
+ });
+
+ it('initializes users array if undefined', () => {
+ const state = {
+ records: [{ id: 1, name: 'Policy 1' }],
+ };
+
+ mutations[types.ADD_AGENT_CAPACITY_POLICIES_USERS](state, {
+ policyId: 1,
+ user: mockUsers[0],
+ });
+
+ expect(state.records[0].users).toEqual([mockUsers[0]]);
+ });
+
+ it('updates assigned agent count', () => {
+ const state = {
+ records: [{ id: 1, name: 'Policy 1', users: [] }],
+ };
+
+ mutations[types.ADD_AGENT_CAPACITY_POLICIES_USERS](state, {
+ policyId: 1,
+ user: mockUsers[0],
+ });
+
+ expect(state.records[0].assignedAgentCount).toEqual(1);
+ });
+ });
+
+ describe('#DELETE_AGENT_CAPACITY_POLICIES_USERS', () => {
+ it('removes user from policy', () => {
+ const state = {
+ records: [
+ {
+ id: 1,
+ name: 'Policy 1',
+ users: [mockUsers[0], mockUsers[1], mockUsers[2]],
+ },
+ ],
+ };
+
+ mutations[types.DELETE_AGENT_CAPACITY_POLICIES_USERS](state, {
+ policyId: 1,
+ userId: 2,
+ });
+
+ expect(state.records[0].users).toEqual([mockUsers[0], mockUsers[2]]);
+ });
+
+ it('handles removing non-existent user', () => {
+ const state = {
+ records: [
+ {
+ id: 1,
+ name: 'Policy 1',
+ users: [mockUsers[0]],
+ },
+ ],
+ };
+
+ mutations[types.DELETE_AGENT_CAPACITY_POLICIES_USERS](state, {
+ policyId: 1,
+ userId: 999,
+ });
+
+ expect(state.records[0].users).toEqual([mockUsers[0]]);
+ });
+
+ it('updates assigned agent count', () => {
+ const state = {
+ records: [{ id: 1, name: 'Policy 1', users: [mockUsers[0]] }],
+ };
+
+ mutations[types.DELETE_AGENT_CAPACITY_POLICIES_USERS](state, {
+ policyId: 1,
+ userId: 1,
+ });
+
+ expect(state.records[0].assignedAgentCount).toEqual(0);
+ });
+ });
+
+ describe('#SET_AGENT_CAPACITY_POLICIES_INBOXES', () => {
+ it('adds inbox limit to policy', () => {
+ const state = {
+ records: [
+ {
+ id: 1,
+ name: 'Policy 1',
+ inboxCapacityLimits: [],
+ },
+ ],
+ };
+
+ const inboxLimitData = {
+ id: 1,
+ inboxId: 1,
+ conversationLimit: 15,
+ agentCapacityPolicyId: 1,
+ };
+
+ mutations[types.SET_AGENT_CAPACITY_POLICIES_INBOXES](
+ state,
+ inboxLimitData
+ );
+
+ expect(state.records[0].inboxCapacityLimits).toEqual([
+ {
+ id: 1,
+ inboxId: 1,
+ conversationLimit: 15,
+ },
+ ]);
+ });
+
+ it('does nothing if policy not found', () => {
+ const state = {
+ records: [{ id: 1, name: 'Policy 1', inboxCapacityLimits: [] }],
+ };
+
+ const originalState = JSON.parse(JSON.stringify(state));
+
+ mutations[types.SET_AGENT_CAPACITY_POLICIES_INBOXES](state, {
+ id: 1,
+ inboxId: 1,
+ conversationLimit: 15,
+ agentCapacityPolicyId: 999,
+ });
+
+ expect(state).toEqual(originalState);
+ });
+ });
+
+ describe('#EDIT_AGENT_CAPACITY_POLICIES_INBOXES', () => {
+ it('updates existing inbox limit', () => {
+ const state = {
+ records: [
+ {
+ id: 1,
+ name: 'Policy 1',
+ inboxCapacityLimits: [
+ {
+ id: 1,
+ inboxId: 1,
+ conversationLimit: 15,
+ },
+ {
+ id: 2,
+ inboxId: 2,
+ conversationLimit: 8,
+ },
+ ],
+ },
+ ],
+ };
+
+ mutations[types.EDIT_AGENT_CAPACITY_POLICIES_INBOXES](state, {
+ id: 1,
+ inboxId: 1,
+ conversationLimit: 25,
+ agentCapacityPolicyId: 1,
+ });
+
+ expect(state.records[0].inboxCapacityLimits[0]).toEqual({
+ id: 1,
+ inboxId: 1,
+ conversationLimit: 25,
+ });
+ expect(state.records[0].inboxCapacityLimits[1]).toEqual({
+ id: 2,
+ inboxId: 2,
+ conversationLimit: 8,
+ });
+ });
+
+ it('does nothing if limit not found', () => {
+ const state = {
+ records: [
+ {
+ id: 1,
+ name: 'Policy 1',
+ inboxCapacityLimits: [
+ {
+ id: 1,
+ inboxId: 1,
+ conversationLimit: 15,
+ },
+ ],
+ },
+ ],
+ };
+
+ const originalLimits = [...state.records[0].inboxCapacityLimits];
+
+ mutations[types.EDIT_AGENT_CAPACITY_POLICIES_INBOXES](state, {
+ id: 999,
+ inboxId: 1,
+ conversationLimit: 25,
+ agentCapacityPolicyId: 1,
+ });
+
+ expect(state.records[0].inboxCapacityLimits).toEqual(originalLimits);
+ });
+
+ it('does nothing if policy not found', () => {
+ const state = {
+ records: [{ id: 1, name: 'Policy 1', inboxCapacityLimits: [] }],
+ };
+
+ const originalState = JSON.parse(JSON.stringify(state));
+
+ mutations[types.EDIT_AGENT_CAPACITY_POLICIES_INBOXES](state, {
+ id: 1,
+ inboxId: 1,
+ conversationLimit: 25,
+ agentCapacityPolicyId: 999,
+ });
+
+ expect(state).toEqual(originalState);
+ });
+ });
+
+ describe('#DELETE_AGENT_CAPACITY_POLICIES_INBOXES', () => {
+ it('removes inbox limit from policy', () => {
+ const state = {
+ records: [
+ {
+ id: 1,
+ name: 'Policy 1',
+ inboxCapacityLimits: [
+ {
+ id: 1,
+ inboxId: 1,
+ conversationLimit: 15,
+ },
+ {
+ id: 2,
+ inboxId: 2,
+ conversationLimit: 8,
+ },
+ ],
+ },
+ ],
+ };
+
+ mutations[types.DELETE_AGENT_CAPACITY_POLICIES_INBOXES](state, {
+ policyId: 1,
+ limitId: 1,
+ });
+
+ expect(state.records[0].inboxCapacityLimits).toEqual([
+ {
+ id: 2,
+ inboxId: 2,
+ conversationLimit: 8,
+ },
+ ]);
+ });
+
+ it('handles removing non-existent limit', () => {
+ const state = {
+ records: [
+ {
+ id: 1,
+ name: 'Policy 1',
+ inboxCapacityLimits: [
+ {
+ id: 1,
+ inboxId: 1,
+ conversationLimit: 15,
+ },
+ ],
+ },
+ ],
+ };
+
+ const originalLimits = [...state.records[0].inboxCapacityLimits];
+
+ mutations[types.DELETE_AGENT_CAPACITY_POLICIES_INBOXES](state, {
+ policyId: 1,
+ limitId: 999,
+ });
+
+ expect(state.records[0].inboxCapacityLimits).toEqual(originalLimits);
+ });
+ });
});
diff --git a/app/javascript/dashboard/store/mutation-types.js b/app/javascript/dashboard/store/mutation-types.js
index 2a5948d14..4f361e140 100644
--- a/app/javascript/dashboard/store/mutation-types.js
+++ b/app/javascript/dashboard/store/mutation-types.js
@@ -372,4 +372,10 @@ export default {
SET_AGENT_CAPACITY_POLICIES_USERS: 'SET_AGENT_CAPACITY_POLICIES_USERS',
SET_AGENT_CAPACITY_POLICIES_USERS_UI_FLAG:
'SET_AGENT_CAPACITY_POLICIES_USERS_UI_FLAG',
+ ADD_AGENT_CAPACITY_POLICIES_USERS: 'ADD_AGENT_CAPACITY_POLICIES_USERS',
+ DELETE_AGENT_CAPACITY_POLICIES_USERS: 'DELETE_AGENT_CAPACITY_POLICIES_USERS',
+ SET_AGENT_CAPACITY_POLICIES_INBOXES: 'SET_AGENT_CAPACITY_POLICIES_INBOXES',
+ EDIT_AGENT_CAPACITY_POLICIES_INBOXES: 'EDIT_AGENT_CAPACITY_POLICIES_INBOXES',
+ DELETE_AGENT_CAPACITY_POLICIES_INBOXES:
+ 'DELETE_AGENT_CAPACITY_POLICIES_INBOXES',
};
diff --git a/app/javascript/shared/helpers/specs/timeHelper.spec.js b/app/javascript/shared/helpers/specs/timeHelper.spec.js
index 13d04568f..e7a4e025f 100644
--- a/app/javascript/shared/helpers/specs/timeHelper.spec.js
+++ b/app/javascript/shared/helpers/specs/timeHelper.spec.js
@@ -4,6 +4,8 @@ import {
dynamicTime,
dateFormat,
shortTimestamp,
+ getDayDifferenceFromNow,
+ hasOneDayPassed,
} from 'shared/helpers/timeHelper';
beforeEach(() => {
@@ -90,3 +92,148 @@ describe('#shortTimestamp', () => {
expect(shortTimestamp('4 years ago', true)).toEqual('4y ago');
});
});
+
+describe('#getDayDifferenceFromNow', () => {
+ it('returns 0 for timestamps from today', () => {
+ // Mock current date: May 5, 2023
+ const now = new Date(Date.UTC(2023, 4, 5, 12, 0, 0)); // 12:00 PM
+ const todayTimestamp = Math.floor(now.getTime() / 1000); // Same day
+
+ expect(getDayDifferenceFromNow(now, todayTimestamp)).toEqual(0);
+ });
+
+ it('returns 2 for timestamps from 2 days ago', () => {
+ const now = new Date(Date.UTC(2023, 4, 5, 12, 0, 0)); // May 5, 2023
+ const twoDaysAgoTimestamp = Math.floor(
+ new Date(Date.UTC(2023, 4, 3, 10, 0, 0)).getTime() / 1000
+ ); // May 3, 2023
+
+ expect(getDayDifferenceFromNow(now, twoDaysAgoTimestamp)).toEqual(2);
+ });
+
+ it('returns 7 for timestamps from a week ago', () => {
+ const now = new Date(Date.UTC(2023, 4, 5, 12, 0, 0)); // May 5, 2023
+ const weekAgoTimestamp = Math.floor(
+ new Date(Date.UTC(2023, 3, 28, 8, 0, 0)).getTime() / 1000
+ ); // April 28, 2023
+
+ expect(getDayDifferenceFromNow(now, weekAgoTimestamp)).toEqual(7);
+ });
+
+ it('returns 30 for timestamps from a month ago', () => {
+ const now = new Date(Date.UTC(2023, 4, 5, 12, 0, 0)); // May 5, 2023
+ const monthAgoTimestamp = Math.floor(
+ new Date(Date.UTC(2023, 3, 5, 12, 0, 0)).getTime() / 1000
+ ); // April 5, 2023
+
+ expect(getDayDifferenceFromNow(now, monthAgoTimestamp)).toEqual(30);
+ });
+
+ it('handles edge case with different times on same day', () => {
+ const now = new Date(Date.UTC(2023, 4, 5, 23, 59, 59)); // May 5, 2023 11:59:59 PM
+ const morningTimestamp = Math.floor(
+ new Date(Date.UTC(2023, 4, 5, 0, 0, 1)).getTime() / 1000
+ ); // May 5, 2023 12:00:01 AM
+
+ expect(getDayDifferenceFromNow(now, morningTimestamp)).toEqual(0);
+ });
+
+ it('handles cross-month boundaries correctly', () => {
+ const now = new Date(Date.UTC(2023, 4, 1, 12, 0, 0)); // May 1, 2023
+ const lastMonthTimestamp = Math.floor(
+ new Date(Date.UTC(2023, 3, 30, 12, 0, 0)).getTime() / 1000
+ ); // April 30, 2023
+
+ expect(getDayDifferenceFromNow(now, lastMonthTimestamp)).toEqual(1);
+ });
+
+ it('handles cross-year boundaries correctly', () => {
+ const now = new Date(Date.UTC(2023, 0, 2, 12, 0, 0)); // January 2, 2023
+ const lastYearTimestamp = Math.floor(
+ new Date(Date.UTC(2022, 11, 31, 12, 0, 0)).getTime() / 1000
+ ); // December 31, 2022
+
+ expect(getDayDifferenceFromNow(now, lastYearTimestamp)).toEqual(2);
+ });
+});
+
+describe('#hasOneDayPassed', () => {
+ beforeEach(() => {
+ // Mock current date: May 5, 2023, 12:00 PM UTC (1683288000)
+ const mockDate = new Date(1683288000 * 1000);
+ vi.setSystemTime(mockDate);
+ });
+
+ it('returns false for timestamps from today', () => {
+ // Same day, different time - May 5, 2023 8:00 AM UTC
+ const todayTimestamp = 1683273600;
+
+ expect(hasOneDayPassed(todayTimestamp)).toBe(false);
+ });
+
+ it('returns false for timestamps from yesterday (less than 24 hours)', () => {
+ // Yesterday but less than 24 hours ago - May 4, 2023 6:00 PM UTC (18 hours ago)
+ const yesterdayTimestamp = 1683230400;
+
+ expect(hasOneDayPassed(yesterdayTimestamp)).toBe(false);
+ });
+
+ it('returns true for timestamps from exactly 1 day ago', () => {
+ // Exactly 24 hours ago - May 4, 2023 12:00 PM UTC
+ const oneDayAgoTimestamp = 1683201600;
+
+ expect(hasOneDayPassed(oneDayAgoTimestamp)).toBe(true);
+ });
+
+ it('returns true for timestamps from more than 1 day ago', () => {
+ // 2 days ago - May 3, 2023 10:00 AM UTC
+ const twoDaysAgoTimestamp = 1683108000;
+
+ expect(hasOneDayPassed(twoDaysAgoTimestamp)).toBe(true);
+ });
+
+ it('returns true for timestamps from a week ago', () => {
+ // 7 days ago - April 28, 2023 8:00 AM UTC
+ const weekAgoTimestamp = 1682668800;
+
+ expect(hasOneDayPassed(weekAgoTimestamp)).toBe(true);
+ });
+
+ it('returns true for null timestamp (defensive check)', () => {
+ expect(hasOneDayPassed(null)).toBe(true);
+ });
+
+ it('returns true for undefined timestamp (defensive check)', () => {
+ expect(hasOneDayPassed(undefined)).toBe(true);
+ });
+
+ it('returns true for zero timestamp (defensive check)', () => {
+ expect(hasOneDayPassed(0)).toBe(true);
+ });
+
+ it('returns true for empty string timestamp (defensive check)', () => {
+ expect(hasOneDayPassed('')).toBe(true);
+ });
+
+ it('handles cross-month boundaries correctly', () => {
+ // Set current time to May 1, 2023 12:00 PM UTC (1682942400)
+ const mayFirst = new Date(1682942400 * 1000);
+ vi.setSystemTime(mayFirst);
+
+ // April 29, 2023 12:00 PM UTC (1682769600) - 2 days ago, crossing month boundary
+ const crossMonthTimestamp = 1682769600;
+
+ expect(hasOneDayPassed(crossMonthTimestamp)).toBe(true);
+ });
+
+ it('handles cross-year boundaries correctly', () => {
+ // Set current time to January 2, 2023 12:00 PM UTC (1672660800)
+ const newYear = new Date(1672660800 * 1000);
+ vi.setSystemTime(newYear);
+
+ // December 30, 2022 12:00 PM UTC (1672401600) - 3 days ago, crossing year boundary
+ const crossYearTimestamp = 1672401600;
+
+ expect(hasOneDayPassed(crossYearTimestamp)).toBe(true);
+ });
+});
diff --git a/app/javascript/shared/helpers/timeHelper.js b/app/javascript/shared/helpers/timeHelper.js
index 6e041c7ec..5347d2410 100644
--- a/app/javascript/shared/helpers/timeHelper.js
+++ b/app/javascript/shared/helpers/timeHelper.js
@@ -3,6 +3,7 @@ import {
isSameYear,
fromUnixTime,
formatDistanceToNow,
+ differenceInDays,
} from 'date-fns';
/**
@@ -91,3 +92,25 @@ export const shortTimestamp = (time, withAgo = false) => {
.replace(' years ago', `y${suffix}`);
return convertToShortTime;
};
+
+/**
+ * Calculates the difference in days between now and a given timestamp.
+ * @param {Date} now - Current date/time.
+ * @param {number} timestampInSeconds - Unix timestamp in seconds.
+ * @returns {number} Number of days difference.
+ */
+export const getDayDifferenceFromNow = (now, timestampInSeconds) => {
+ const date = new Date(timestampInSeconds * 1000);
+ return differenceInDays(now, date);
+};
+
+/**
+ * Checks if more than 24 hours have passed since a given timestamp.
+ * Useful for determining if retry/refresh actions should be disabled.
+ * @param {number} timestamp - Unix timestamp.
+ * @returns {boolean} True if more than 24 hours have passed.
+ */
+export const hasOneDayPassed = timestamp => {
+ if (!timestamp) return true; // Defensive check
+ return getDayDifferenceFromNow(new Date(), timestamp) >= 1;
+};
diff --git a/app/javascript/widget/i18n/locale/fr.json b/app/javascript/widget/i18n/locale/fr.json
index 578d0217f..90275e02a 100644
--- a/app/javascript/widget/i18n/locale/fr.json
+++ b/app/javascript/widget/i18n/locale/fr.json
@@ -14,24 +14,24 @@
},
"THUMBNAIL": {
"AUTHOR": {
- "NOT_AVAILABLE": "Not available"
+ "NOT_AVAILABLE": "Non disponible"
}
},
"TEAM_AVAILABILITY": {
"ONLINE": "Nous sommes en ligne",
"OFFLINE": "Nous sommes absents pour le moment",
- "BACK_AS_SOON_AS_POSSIBLE": "We will be back as soon as possible"
+ "BACK_AS_SOON_AS_POSSIBLE": "Nous serons de retour dès que possible"
},
"REPLY_TIME": {
"IN_A_FEW_MINUTES": "Répond généralement en quelques minutes",
"IN_A_FEW_HOURS": "Répond généralement en quelques heures",
"IN_A_DAY": "Répond généralement dans la journée",
- "BACK_IN_HOURS": "We will be back online in {n} hour | We will be back online in {n} hours",
- "BACK_IN_MINUTES": "We will be back online in {time} minutes",
- "BACK_AT_TIME": "We will be back online at {time}",
- "BACK_ON_DAY": "We will be back online on {day}",
- "BACK_TOMORROW": "We will be back online tomorrow",
- "BACK_IN_SOME_TIME": "We will be back online in some time"
+ "BACK_IN_HOURS": "Nous serons de retour en ligne dans {n} heure | Nous serons de retour en ligne dans {n} heures",
+ "BACK_IN_MINUTES": "Nous serons de retour en ligne dans {time} minutes",
+ "BACK_AT_TIME": "Nous serons de retour en ligne à {time}",
+ "BACK_ON_DAY": "Nous serons de retour en ligne {day}",
+ "BACK_TOMORROW": "Nous serons de retour en ligne demain",
+ "BACK_IN_SOME_TIME": "Nous serons de retours en ligne dans quelques instants"
},
"DAY_NAMES": {
"SUNDAY": "Dimanche",
diff --git a/app/javascript/widget/i18n/locale/pt_BR.json b/app/javascript/widget/i18n/locale/pt_BR.json
index eda0f796c..124e9f8a9 100644
--- a/app/javascript/widget/i18n/locale/pt_BR.json
+++ b/app/javascript/widget/i18n/locale/pt_BR.json
@@ -20,13 +20,13 @@
"TEAM_AVAILABILITY": {
"ONLINE": "Estamos conectados",
"OFFLINE": "Estamos ausentes no momento",
- "BACK_AS_SOON_AS_POSSIBLE": "We will be back as soon as possible"
+ "BACK_AS_SOON_AS_POSSIBLE": "Estaremos de volta em breve"
},
"REPLY_TIME": {
"IN_A_FEW_MINUTES": "Normalmente responde em alguns minutos",
"IN_A_FEW_HOURS": "Normalmente responde em algumas horas",
"IN_A_DAY": "Normalmente responde em um dia",
- "BACK_IN_HOURS": "We will be back online in {n} hour | We will be back online in {n} hours",
+ "BACK_IN_HOURS": "Estaremos de volta em {n} hora | Estaremos de volta em {n} horas",
"BACK_IN_MINUTES": "We will be back online in {time} minutes",
"BACK_AT_TIME": "We will be back online at {time}",
"BACK_ON_DAY": "We will be back online on {day}",
diff --git a/app/models/channel/web_widget.rb b/app/models/channel/web_widget.rb
index 9e3016eac..d4e9989c1 100644
--- a/app/models/channel/web_widget.rb
+++ b/app/models/channel/web_widget.rb
@@ -3,6 +3,7 @@
# Table name: channel_web_widgets
#
# id :integer not null, primary key
+# allowed_domains :text default("")
# continuity_via_email :boolean default(TRUE), not null
# feature_flags :integer default(7), not null
# hmac_mandatory :boolean default(FALSE)
@@ -31,7 +32,7 @@ class Channel::WebWidget < ApplicationRecord
self.table_name = 'channel_web_widgets'
EDITABLE_ATTRS = [:website_url, :widget_color, :welcome_title, :welcome_tagline, :reply_time, :pre_chat_form_enabled,
- :continuity_via_email, :hmac_mandatory,
+ :continuity_via_email, :hmac_mandatory, :allowed_domains,
{ pre_chat_form_options: [:pre_chat_message, :require_email,
{ pre_chat_fields:
[:field_type, :label, :placeholder, :name, :enabled, :type, :enabled, :required,
diff --git a/app/services/widget/token_service.rb b/app/services/widget/token_service.rb
index 5fb719e7b..4eebaab9e 100644
--- a/app/services/widget/token_service.rb
+++ b/app/services/widget/token_service.rb
@@ -1,8 +1,10 @@
class Widget::TokenService
+ DEFAULT_EXPIRY_DAYS = 180
+
pattr_initialize [:payload, :token]
def generate_token
- JWT.encode payload, secret_key, 'HS256'
+ JWT.encode payload_with_expiry, secret_key, 'HS256'
end
def decode_token
@@ -15,6 +17,24 @@ class Widget::TokenService
private
+ def payload_with_expiry
+ payload.merge(exp: exp, iat: iat)
+ end
+
+ def iat
+ Time.zone.now.to_i
+ end
+
+ def exp
+ iat + expire_in.days.to_i
+ end
+
+ def expire_in
+ # Value is stored in days, defaulting to 6 months (180 days)
+ token_expiry_value = InstallationConfig.find_by(name: 'WIDGET_TOKEN_EXPIRY')&.value
+ (token_expiry_value.presence || DEFAULT_EXPIRY_DAYS).to_i
+ end
+
def secret_key
Rails.application.secret_key_base
end
diff --git a/app/views/api/v1/models/_inbox.json.jbuilder b/app/views/api/v1/models/_inbox.json.jbuilder
index 1b2ab177b..d9134d563 100644
--- a/app/views/api/v1/models/_inbox.json.jbuilder
+++ b/app/views/api/v1/models/_inbox.json.jbuilder
@@ -33,6 +33,7 @@ end
json.tweets_enabled resource.channel.try(:tweets_enabled) if resource.twitter?
## WebWidget Attributes
+json.allowed_domains resource.channel.try(:allowed_domains)
json.widget_color resource.channel.try(:widget_color)
json.website_url resource.channel.try(:website_url)
json.hmac_mandatory resource.channel.try(:hmac_mandatory)
diff --git a/config/features.yml b/config/features.yml
index 9b2fc33c5..181284784 100644
--- a/config/features.yml
+++ b/config/features.yml
@@ -184,6 +184,7 @@
- name: whatsapp_embedded_signup
display_name: WhatsApp Embedded Signup
enabled: false
+ deprecated: true
- name: whatsapp_campaign
display_name: WhatsApp Campaign
enabled: false
diff --git a/config/installation_config.yml b/config/installation_config.yml
index caba80533..db907b7ad 100644
--- a/config/installation_config.yml
+++ b/config/installation_config.yml
@@ -439,3 +439,11 @@
locked: false
description: 'Zone ID for the Cloudflare domain'
## ------ End of Configs added for Cloudflare ------ ##
+
+## ------ Customizations for Customers ------ ##
+- name: WIDGET_TOKEN_EXPIRY
+ display_title: 'Widget Token Expiry'
+ value: 180
+ locked: false
+ description: 'Token expiry in days'
+## ------ End of Customizations for Customers ------ ##
diff --git a/config/locales/am.yml b/config/locales/am.yml
index 3d5f20cda..cf9c1b339 100644
--- a/config/locales/am.yml
+++ b/config/locales/am.yml
@@ -26,6 +26,9 @@ am:
messages:
reset_password_success: Woot! Request for password reset is successful. Check your mail for instructions.
reset_password_failure: Uh ho! We could not find any user with the specified email.
+ reset_password_saml_user: This account uses SAML authentication. Password reset is not available. Please contact your administrator.
+ login_saml_user: This account uses SAML authentication. Please sign in through your organization's SAML provider.
+ saml_not_available: SAML authentication is not available in this installation.
inbox_deletetion_response: Your inbox deletion request will be processed in some time.
errors:
validations:
@@ -41,6 +44,8 @@ am:
failed: Signup failed
assignment_policy:
not_found: Assignment policy not found
+ saml:
+ feature_not_enabled: SAML feature not enabled for this account
data_import:
data_type:
invalid: Invalid data type
@@ -209,6 +214,7 @@ am:
reply:
email:
header:
+ notifications: 'Notifications'
from_with_name: '%{assignee_name} from %{inbox_name} <%{from_email}>'
reply_with_name: '%{assignee_name} from %{inbox_name}
'
friendly_name: '%{sender_name} from %{business_name} <%{from_email}>'
diff --git a/config/locales/ar.yml b/config/locales/ar.yml
index 82f06c370..f8455f918 100644
--- a/config/locales/ar.yml
+++ b/config/locales/ar.yml
@@ -26,6 +26,9 @@ ar:
messages:
reset_password_success: تم إرسال طلب إعادة تعيين كلمة المرور. يرجى مراجعة بريدك الإلكتروني للحصول على التعليمات.
reset_password_failure: المعذرة! لم نتمكن من العثور على أي مستخدم بعنوان البريد الإلكتروني المحدد.
+ reset_password_saml_user: This account uses SAML authentication. Password reset is not available. Please contact your administrator.
+ login_saml_user: This account uses SAML authentication. Please sign in through your organization's SAML provider.
+ saml_not_available: SAML authentication is not available in this installation.
inbox_deletetion_response: سيتم معالجة طلب حذف صندوق الوارد الخاص بك في بعض الوقت.
errors:
validations:
@@ -41,6 +44,8 @@ ar:
failed: فشلت عملية التسجيل
assignment_policy:
not_found: Assignment policy not found
+ saml:
+ feature_not_enabled: SAML feature not enabled for this account
data_import:
data_type:
invalid: نوع البيانات غير صالح
@@ -209,6 +214,7 @@ ar:
reply:
email:
header:
+ notifications: 'الإشعارات'
from_with_name: '%{assignee_name} من %{inbox_name} <%{from_email}>'
reply_with_name: '%{assignee_name} من %{inbox_name} <%{reply_email}>'
friendly_name: '%{sender_name} من %{business_name} <%{from_email}>'
diff --git a/config/locales/az.yml b/config/locales/az.yml
index 92f3d187e..e5a4cd524 100644
--- a/config/locales/az.yml
+++ b/config/locales/az.yml
@@ -26,6 +26,9 @@ az:
messages:
reset_password_success: Woot! Request for password reset is successful. Check your mail for instructions.
reset_password_failure: Uh ho! We could not find any user with the specified email.
+ reset_password_saml_user: This account uses SAML authentication. Password reset is not available. Please contact your administrator.
+ login_saml_user: This account uses SAML authentication. Please sign in through your organization's SAML provider.
+ saml_not_available: SAML authentication is not available in this installation.
inbox_deletetion_response: Your inbox deletion request will be processed in some time.
errors:
validations:
@@ -41,6 +44,8 @@ az:
failed: Signup failed
assignment_policy:
not_found: Assignment policy not found
+ saml:
+ feature_not_enabled: SAML feature not enabled for this account
data_import:
data_type:
invalid: Invalid data type
@@ -209,6 +214,7 @@ az:
reply:
email:
header:
+ notifications: 'Notifications'
from_with_name: '%{assignee_name} from %{inbox_name} <%{from_email}>'
reply_with_name: '%{assignee_name} from %{inbox_name} '
friendly_name: '%{sender_name} from %{business_name} <%{from_email}>'
diff --git a/config/locales/bg.yml b/config/locales/bg.yml
index 689ca289e..b93a1ac98 100644
--- a/config/locales/bg.yml
+++ b/config/locales/bg.yml
@@ -26,6 +26,9 @@ bg:
messages:
reset_password_success: Woot! Request for password reset is successful. Check your mail for instructions.
reset_password_failure: Uh ho! We could not find any user with the specified email.
+ reset_password_saml_user: This account uses SAML authentication. Password reset is not available. Please contact your administrator.
+ login_saml_user: This account uses SAML authentication. Please sign in through your organization's SAML provider.
+ saml_not_available: SAML authentication is not available in this installation.
inbox_deletetion_response: Your inbox deletion request will be processed in some time.
errors:
validations:
@@ -41,6 +44,8 @@ bg:
failed: Signup failed
assignment_policy:
not_found: Assignment policy not found
+ saml:
+ feature_not_enabled: SAML feature not enabled for this account
data_import:
data_type:
invalid: Invalid data type
@@ -209,6 +214,7 @@ bg:
reply:
email:
header:
+ notifications: 'Notifications'
from_with_name: '%{assignee_name} from %{inbox_name} <%{from_email}>'
reply_with_name: '%{assignee_name} from %{inbox_name} '
friendly_name: '%{sender_name} from %{business_name} <%{from_email}>'
diff --git a/config/locales/ca.yml b/config/locales/ca.yml
index 9e3c47978..20d654e10 100644
--- a/config/locales/ca.yml
+++ b/config/locales/ca.yml
@@ -26,6 +26,9 @@ ca:
messages:
reset_password_success: Woot! S'ha restablert la contrasenya amb èxit. Revisa el correu per més instruccions.
reset_password_failure: Uh ho! No s'ha trobat cap compte amb aquest correu electrònic.
+ reset_password_saml_user: This account uses SAML authentication. Password reset is not available. Please contact your administrator.
+ login_saml_user: This account uses SAML authentication. Please sign in through your organization's SAML provider.
+ saml_not_available: SAML authentication is not available in this installation.
inbox_deletetion_response: La teva sol·licitud d'eliminació de la safata d'entrada es processarà d'aquí a un temps.
errors:
validations:
@@ -41,6 +44,8 @@ ca:
failed: El registre ha fallat
assignment_policy:
not_found: Assignment policy not found
+ saml:
+ feature_not_enabled: SAML feature not enabled for this account
data_import:
data_type:
invalid: Tipus de dades no vàlid
@@ -209,6 +214,7 @@ ca:
reply:
email:
header:
+ notifications: 'Notificacions'
from_with_name: '%{assignee_name} des de %{inbox_name} <%{from_email}>'
reply_with_name: '%{assignee_name} des de %{inbox_name} '
friendly_name: '%{sender_name} des de %{business_name} <%{from_email}>'
diff --git a/config/locales/cs.yml b/config/locales/cs.yml
index 5a43d179c..ec6d727dd 100644
--- a/config/locales/cs.yml
+++ b/config/locales/cs.yml
@@ -26,6 +26,9 @@ cs:
messages:
reset_password_success: Woot! Žádost o obnovení hesla byla úspěšná. Zkontrolujte svůj e-mail pro pokyny.
reset_password_failure: Jejda! Nenašli jsme žádného uživatele se zadaným e-mailem.
+ reset_password_saml_user: This account uses SAML authentication. Password reset is not available. Please contact your administrator.
+ login_saml_user: This account uses SAML authentication. Please sign in through your organization's SAML provider.
+ saml_not_available: SAML authentication is not available in this installation.
inbox_deletetion_response: Your inbox deletion request will be processed in some time.
errors:
validations:
@@ -41,6 +44,8 @@ cs:
failed: Registrace se nezdařila
assignment_policy:
not_found: Assignment policy not found
+ saml:
+ feature_not_enabled: SAML feature not enabled for this account
data_import:
data_type:
invalid: Invalid data type
@@ -209,6 +214,7 @@ cs:
reply:
email:
header:
+ notifications: 'Oznámení'
from_with_name: '%{assignee_name} from %{inbox_name} <%{from_email}>'
reply_with_name: '%{assignee_name} from %{inbox_name} '
friendly_name: '%{sender_name} from %{business_name} <%{from_email}>'
diff --git a/config/locales/da.yml b/config/locales/da.yml
index 21df04d44..e1bfeed77 100644
--- a/config/locales/da.yml
+++ b/config/locales/da.yml
@@ -26,6 +26,9 @@ da:
messages:
reset_password_success: Woot! Anmodning om nulstilling af adgangskode er vellykket. Tjek din mail for instruktioner.
reset_password_failure: Åh nej! Vi kunne ikke finde nogen bruger med den angivne e-mail.
+ reset_password_saml_user: This account uses SAML authentication. Password reset is not available. Please contact your administrator.
+ login_saml_user: This account uses SAML authentication. Please sign in through your organization's SAML provider.
+ saml_not_available: SAML authentication is not available in this installation.
inbox_deletetion_response: Your inbox deletion request will be processed in some time.
errors:
validations:
@@ -41,6 +44,8 @@ da:
failed: Tilmelding mislykkedes
assignment_policy:
not_found: Assignment policy not found
+ saml:
+ feature_not_enabled: SAML feature not enabled for this account
data_import:
data_type:
invalid: Ugyldig datatype
@@ -209,6 +214,7 @@ da:
reply:
email:
header:
+ notifications: 'Notifikationer'
from_with_name: '%{assignee_name} fra %{inbox_name} <%{from_email}>'
reply_with_name: '%{assignee_name} fra %{inbox_name} '
friendly_name: '%{sender_name} fra %{business_name} <%{from_email}>'
diff --git a/config/locales/de.yml b/config/locales/de.yml
index b9a930cd1..81ac38a98 100644
--- a/config/locales/de.yml
+++ b/config/locales/de.yml
@@ -26,6 +26,9 @@ de:
messages:
reset_password_success: Woot! Die Anforderung zum Zurücksetzen des Passworts ist erfolgreich. Überprüfen Sie Ihre E-Mails auf Anweisungen.
reset_password_failure: Uh ho! Wir konnten keinen Benutzer mit der angegebenen E-Mail-Adresse finden.
+ reset_password_saml_user: This account uses SAML authentication. Password reset is not available. Please contact your administrator.
+ login_saml_user: This account uses SAML authentication. Please sign in through your organization's SAML provider.
+ saml_not_available: SAML authentication is not available in this installation.
inbox_deletetion_response: Die Löschanfrage Ihres Posteingangs wird in Kürze bearbeitet.
errors:
validations:
@@ -41,6 +44,8 @@ de:
failed: Anmeldung gescheitert
assignment_policy:
not_found: Assignment policy not found
+ saml:
+ feature_not_enabled: SAML feature not enabled for this account
data_import:
data_type:
invalid: Ungültiger Datentyp
@@ -209,6 +214,7 @@ de:
reply:
email:
header:
+ notifications: 'Push-Benachrichtigungen'
from_with_name: '%{assignee_name} von %{inbox_name} <%{from_email}>'
reply_with_name: '%{assignee_name} von %{inbox_name} '
friendly_name: '%{sender_name} von %{business_name} <%{from_email}>'
diff --git a/config/locales/el.yml b/config/locales/el.yml
index 74dd457d5..0c4486581 100644
--- a/config/locales/el.yml
+++ b/config/locales/el.yml
@@ -26,6 +26,9 @@ el:
messages:
reset_password_success: Woot! Το αίτημά σας για επαναφορά κωδικού ενεργοποιήθηκε. Ελέξτε το email σας για οδηγίες.
reset_password_failure: Ωχ όχι! Δεν υπάρχει κάποιος χρήστης με το συγκεκριμένο email.
+ reset_password_saml_user: This account uses SAML authentication. Password reset is not available. Please contact your administrator.
+ login_saml_user: This account uses SAML authentication. Please sign in through your organization's SAML provider.
+ saml_not_available: SAML authentication is not available in this installation.
inbox_deletetion_response: Your inbox deletion request will be processed in some time.
errors:
validations:
@@ -41,6 +44,8 @@ el:
failed: Η εγγραφή απέτυχε
assignment_policy:
not_found: Assignment policy not found
+ saml:
+ feature_not_enabled: SAML feature not enabled for this account
data_import:
data_type:
invalid: Μη έγκυρος τύπος δεδομένων
@@ -209,6 +214,7 @@ el:
reply:
email:
header:
+ notifications: 'Ειδοποιήσεις'
from_with_name: '%{assignee_name} από %{inbox_name} <%{from_email}>'
reply_with_name: '%{assignee_name} από %{inbox_name} '
friendly_name: '%{sender_name} από %{business_name} <%{from_email}>'
diff --git a/config/locales/en.yml b/config/locales/en.yml
index e958c63b9..d5345a411 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -103,6 +103,8 @@ en:
invalid_value: Invalid value. The values provided for %{attribute_name} are invalid
custom_attribute_definition:
key_conflict: The provided key is not allowed as it might conflict with default attributes.
+ account_saml_settings:
+ invalid_certificate: must be a valid X.509 certificate in PEM format
reports:
period: Reporting period %{since} to %{until}
utc_warning: The report generated is in UTC timezone
diff --git a/config/locales/es.yml b/config/locales/es.yml
index 435f49f72..975cd8abe 100644
--- a/config/locales/es.yml
+++ b/config/locales/es.yml
@@ -26,6 +26,9 @@ es:
messages:
reset_password_success: '¡Genial! La solicitud de restablecimiento de contraseña ha sido exitosa. Revisa tu correo para ver las instrucciones.'
reset_password_failure: '¡Uh ho! No hemos podido encontrar ningún usuario con el correo electrónico especificado.'
+ reset_password_saml_user: This account uses SAML authentication. Password reset is not available. Please contact your administrator.
+ login_saml_user: This account uses SAML authentication. Please sign in through your organization's SAML provider.
+ saml_not_available: SAML authentication is not available in this installation.
inbox_deletetion_response: Su solicitud de eliminación de la bandeja de entrada será procesada en algún tiempo.
errors:
validations:
@@ -41,6 +44,8 @@ es:
failed: Registro fallido
assignment_policy:
not_found: Assignment policy not found
+ saml:
+ feature_not_enabled: SAML feature not enabled for this account
data_import:
data_type:
invalid: Tipo de datos no válido
@@ -209,6 +214,7 @@ es:
reply:
email:
header:
+ notifications: 'Notificaciones'
from_with_name: '%{assignee_name} de %{inbox_name} <%{from_email}>'
reply_with_name: '%{assignee_name} de %{inbox_name} '
friendly_name: '%{sender_name} de %{business_name} <%{from_email}>'
diff --git a/config/locales/fa.yml b/config/locales/fa.yml
index a8fb95447..d1eff63bc 100644
--- a/config/locales/fa.yml
+++ b/config/locales/fa.yml
@@ -26,6 +26,9 @@ fa:
messages:
reset_password_success: سوت! درخواست ریست شدن رمز عبور با موفقیت ارسال شد. ایمیل خود را چک کنید
reset_password_failure: اوه نه! کاربری با چنین ایمیلی وجود ندارد
+ reset_password_saml_user: This account uses SAML authentication. Password reset is not available. Please contact your administrator.
+ login_saml_user: This account uses SAML authentication. Please sign in through your organization's SAML provider.
+ saml_not_available: SAML authentication is not available in this installation.
inbox_deletetion_response: درخواست حذف صندوق ورودی شما پس از مدتی پردازش خواهد شد.
errors:
validations:
@@ -41,6 +44,8 @@ fa:
failed: ثبت نام ناموفق بود
assignment_policy:
not_found: Assignment policy not found
+ saml:
+ feature_not_enabled: SAML feature not enabled for this account
data_import:
data_type:
invalid: نوع داده نامعتبر است
@@ -209,6 +214,7 @@ fa:
reply:
email:
header:
+ notifications: 'اعلان ها'
from_with_name: '%{assignee_name} از %{inbox_name} «%{from_email}»'
reply_with_name: '%{assignee_name} از %{inbox_name} '
friendly_name: '%{sender_name} از %{business_name} «%{from_email}»'
diff --git a/config/locales/fi.yml b/config/locales/fi.yml
index 0f9b6941b..c3849159a 100644
--- a/config/locales/fi.yml
+++ b/config/locales/fi.yml
@@ -26,6 +26,9 @@ fi:
messages:
reset_password_success: Woot! Salasanan nollauspyyntö onnistui. Tarkista sähköpostisi saadaksesi ohjeita.
reset_password_failure: Hö! Emme löytäneet yhtään käyttäjää määritellyllä sähköpostilla.
+ reset_password_saml_user: This account uses SAML authentication. Password reset is not available. Please contact your administrator.
+ login_saml_user: This account uses SAML authentication. Please sign in through your organization's SAML provider.
+ saml_not_available: SAML authentication is not available in this installation.
inbox_deletetion_response: Your inbox deletion request will be processed in some time.
errors:
validations:
@@ -41,6 +44,8 @@ fi:
failed: Rekisteröityminen epäonnistui
assignment_policy:
not_found: Assignment policy not found
+ saml:
+ feature_not_enabled: SAML feature not enabled for this account
data_import:
data_type:
invalid: Invalid data type
@@ -209,6 +214,7 @@ fi:
reply:
email:
header:
+ notifications: 'Ilmoitukset'
from_with_name: '%{assignee_name} from %{inbox_name} <%{from_email}>'
reply_with_name: '%{assignee_name} from %{inbox_name} '
friendly_name: '%{sender_name} from %{business_name} <%{from_email}>'
diff --git a/config/locales/fr.yml b/config/locales/fr.yml
index 25d8cbf39..ad66cff99 100644
--- a/config/locales/fr.yml
+++ b/config/locales/fr.yml
@@ -26,6 +26,9 @@ fr:
messages:
reset_password_success: Super ! La demande de réinitialisation du mot de passe a réussi. Consultez vos e-mails pour obtenir des instructions.
reset_password_failure: Oh oh ! Nous n'avons trouvé aucun utilisateur avec le courriel spécifié.
+ reset_password_saml_user: This account uses SAML authentication. Password reset is not available. Please contact your administrator.
+ login_saml_user: This account uses SAML authentication. Please sign in through your organization's SAML provider.
+ saml_not_available: SAML authentication is not available in this installation.
inbox_deletetion_response: Votre demande de suppression de la boîte de réception sera traitée dans un certain délai.
errors:
validations:
@@ -41,6 +44,8 @@ fr:
failed: L'inscription a échoué
assignment_policy:
not_found: Assignment policy not found
+ saml:
+ feature_not_enabled: SAML feature not enabled for this account
data_import:
data_type:
invalid: Type de données incorrect
@@ -209,6 +214,7 @@ fr:
reply:
email:
header:
+ notifications: 'Notifications'
from_with_name: '%{assignee_name} de %{inbox_name} <%{from_email}>'
reply_with_name: '%{assignee_name} de %{inbox_name} '
friendly_name: '%{sender_name} de %{business_name} <%{from_email}>'
diff --git a/config/locales/he.yml b/config/locales/he.yml
index c79d541c2..5d3ef2570 100644
--- a/config/locales/he.yml
+++ b/config/locales/he.yml
@@ -26,6 +26,9 @@ he:
messages:
reset_password_success: יאס! בקשה לאיפוס ססמה נשלחה בהצלחה. בדוק תיבת מייל להוראות.
reset_password_failure: אופס! לא מצאנו משתמש עם המייל שצוין.
+ reset_password_saml_user: This account uses SAML authentication. Password reset is not available. Please contact your administrator.
+ login_saml_user: This account uses SAML authentication. Please sign in through your organization's SAML provider.
+ saml_not_available: SAML authentication is not available in this installation.
inbox_deletetion_response: Your inbox deletion request will be processed in some time.
errors:
validations:
@@ -41,6 +44,8 @@ he:
failed: הרשמה נכשלה
assignment_policy:
not_found: Assignment policy not found
+ saml:
+ feature_not_enabled: SAML feature not enabled for this account
data_import:
data_type:
invalid: Invalid data type
@@ -209,6 +214,7 @@ he:
reply:
email:
header:
+ notifications: 'התראות'
from_with_name: '%{assignee_name} from %{inbox_name} <%{from_email}>'
reply_with_name: '%{assignee_name} from %{inbox_name} '
friendly_name: '%{sender_name} from %{business_name} <%{from_email}>'
diff --git a/config/locales/hi.yml b/config/locales/hi.yml
index d1a691607..a1edd3152 100644
--- a/config/locales/hi.yml
+++ b/config/locales/hi.yml
@@ -26,6 +26,9 @@ hi:
messages:
reset_password_success: Woot! Request for password reset is successful. Check your mail for instructions.
reset_password_failure: Uh ho! We could not find any user with the specified email.
+ reset_password_saml_user: This account uses SAML authentication. Password reset is not available. Please contact your administrator.
+ login_saml_user: This account uses SAML authentication. Please sign in through your organization's SAML provider.
+ saml_not_available: SAML authentication is not available in this installation.
inbox_deletetion_response: Your inbox deletion request will be processed in some time.
errors:
validations:
@@ -41,6 +44,8 @@ hi:
failed: Signup failed
assignment_policy:
not_found: Assignment policy not found
+ saml:
+ feature_not_enabled: SAML feature not enabled for this account
data_import:
data_type:
invalid: Invalid data type
@@ -209,6 +214,7 @@ hi:
reply:
email:
header:
+ notifications: 'Notifications'
from_with_name: '%{assignee_name} from %{inbox_name} <%{from_email}>'
reply_with_name: '%{assignee_name} from %{inbox_name} '
friendly_name: '%{sender_name} from %{business_name} <%{from_email}>'
diff --git a/config/locales/hr.yml b/config/locales/hr.yml
index d9d46eab6..2c8387045 100644
--- a/config/locales/hr.yml
+++ b/config/locales/hr.yml
@@ -26,6 +26,9 @@ hr:
messages:
reset_password_success: Woot! Request for password reset is successful. Check your mail for instructions.
reset_password_failure: Uh ho! We could not find any user with the specified email.
+ reset_password_saml_user: This account uses SAML authentication. Password reset is not available. Please contact your administrator.
+ login_saml_user: This account uses SAML authentication. Please sign in through your organization's SAML provider.
+ saml_not_available: SAML authentication is not available in this installation.
inbox_deletetion_response: Your inbox deletion request will be processed in some time.
errors:
validations:
@@ -41,6 +44,8 @@ hr:
failed: Signup failed
assignment_policy:
not_found: Assignment policy not found
+ saml:
+ feature_not_enabled: SAML feature not enabled for this account
data_import:
data_type:
invalid: Invalid data type
@@ -209,6 +214,7 @@ hr:
reply:
email:
header:
+ notifications: 'Notifications'
from_with_name: '%{assignee_name} from %{inbox_name} <%{from_email}>'
reply_with_name: '%{assignee_name} from %{inbox_name} '
friendly_name: '%{sender_name} iz %{business_name} <%{from_email}>'
diff --git a/config/locales/hu.yml b/config/locales/hu.yml
index 160c47c81..2e6c10162 100644
--- a/config/locales/hu.yml
+++ b/config/locales/hu.yml
@@ -26,6 +26,9 @@ hu:
messages:
reset_password_success: Mi?! A jelszóvisszaállítási kérésed sikeres volt. Nézd meg az e-mailed a részletekért.
reset_password_failure: Jajj ne! Nem találtunk felhasználót ezzel az e-mailcímmel.
+ reset_password_saml_user: This account uses SAML authentication. Password reset is not available. Please contact your administrator.
+ login_saml_user: This account uses SAML authentication. Please sign in through your organization's SAML provider.
+ saml_not_available: SAML authentication is not available in this installation.
inbox_deletetion_response: A beérkező üzeneteid törlésére vonatkozó kérésed nem sokára feldolgozásra kerül.
errors:
validations:
@@ -41,6 +44,8 @@ hu:
failed: Feliratkozás sikertelen
assignment_policy:
not_found: Assignment policy not found
+ saml:
+ feature_not_enabled: SAML feature not enabled for this account
data_import:
data_type:
invalid: Hibás adattípus
@@ -209,6 +214,7 @@ hu:
reply:
email:
header:
+ notifications: 'Értesítések'
from_with_name: '%{assignee_name} innen %{inbox_name} <%{from_email}>'
reply_with_name: '%{assignee_name} innen %{inbox_name} '
friendly_name: '%{sender_name} innen %{business_name} <%{from_email}>'
diff --git a/config/locales/hy.yml b/config/locales/hy.yml
index c366c0e20..9963a2d41 100644
--- a/config/locales/hy.yml
+++ b/config/locales/hy.yml
@@ -26,6 +26,9 @@ hy:
messages:
reset_password_success: Woot! Request for password reset is successful. Check your mail for instructions.
reset_password_failure: Uh ho! We could not find any user with the specified email.
+ reset_password_saml_user: This account uses SAML authentication. Password reset is not available. Please contact your administrator.
+ login_saml_user: This account uses SAML authentication. Please sign in through your organization's SAML provider.
+ saml_not_available: SAML authentication is not available in this installation.
inbox_deletetion_response: Your inbox deletion request will be processed in some time.
errors:
validations:
@@ -41,6 +44,8 @@ hy:
failed: Signup failed
assignment_policy:
not_found: Assignment policy not found
+ saml:
+ feature_not_enabled: SAML feature not enabled for this account
data_import:
data_type:
invalid: Invalid data type
@@ -209,6 +214,7 @@ hy:
reply:
email:
header:
+ notifications: 'Notifications'
from_with_name: '%{assignee_name} from %{inbox_name} <%{from_email}>'
reply_with_name: '%{assignee_name} from %{inbox_name} '
friendly_name: '%{sender_name} from %{business_name} <%{from_email}>'
diff --git a/config/locales/id.yml b/config/locales/id.yml
index 09930bebb..b316c9841 100644
--- a/config/locales/id.yml
+++ b/config/locales/id.yml
@@ -26,6 +26,9 @@ id:
messages:
reset_password_success: Woot! Permintaan pengaturan ulang kata sandi berhasil. Periksa email Anda untuk mendapatkan petunjuk.
reset_password_failure: Aduh! Kami tidak dapat menemukan pengguna dengan email yang dimasukkan.
+ reset_password_saml_user: This account uses SAML authentication. Password reset is not available. Please contact your administrator.
+ login_saml_user: This account uses SAML authentication. Please sign in through your organization's SAML provider.
+ saml_not_available: SAML authentication is not available in this installation.
inbox_deletetion_response: Permintaan penghapusan kotak masuk Anda akan diproses dalam beberapa waktu.
errors:
validations:
@@ -41,6 +44,8 @@ id:
failed: Pendaftaran gagal
assignment_policy:
not_found: Assignment policy not found
+ saml:
+ feature_not_enabled: SAML feature not enabled for this account
data_import:
data_type:
invalid: Jenis data tidak valid
@@ -209,6 +214,7 @@ id:
reply:
email:
header:
+ notifications: 'Notifikasi'
from_with_name: '%{assignee_name} dari %{inbox_name} <%{from_email}>'
reply_with_name: '%{assignee_name} dari %{inbox_name} '
friendly_name: '%{sender_name} dari %{business_name} <%{from_email}>'
diff --git a/config/locales/is.yml b/config/locales/is.yml
index c225123f6..f411abfeb 100644
--- a/config/locales/is.yml
+++ b/config/locales/is.yml
@@ -26,6 +26,9 @@ is:
messages:
reset_password_success: Woot! Beiðni um endurstillingu lykilorðs tókst. Skoðaðu póstinn þinn til að fá leiðbeiningar.
reset_password_failure: Uh ó! Við fundum engan notanda með tilgreint netfang.
+ reset_password_saml_user: This account uses SAML authentication. Password reset is not available. Please contact your administrator.
+ login_saml_user: This account uses SAML authentication. Please sign in through your organization's SAML provider.
+ saml_not_available: SAML authentication is not available in this installation.
inbox_deletetion_response: Your inbox deletion request will be processed in some time.
errors:
validations:
@@ -41,6 +44,8 @@ is:
failed: Signup failed
assignment_policy:
not_found: Assignment policy not found
+ saml:
+ feature_not_enabled: SAML feature not enabled for this account
data_import:
data_type:
invalid: Invalid data type
@@ -209,6 +214,7 @@ is:
reply:
email:
header:
+ notifications: 'Skilaboð'
from_with_name: '%{assignee_name} frá %{inbox_name} <%{from_email}>'
reply_with_name: '%{assignee_name} frá %{inbox_name} '
friendly_name: '%{sender_name} frá %{business_name} <%{from_email}>'
diff --git a/config/locales/it.yml b/config/locales/it.yml
index 86b74c8f1..cb07d9d11 100644
--- a/config/locales/it.yml
+++ b/config/locales/it.yml
@@ -26,6 +26,9 @@ it:
messages:
reset_password_success: Woot! Richiesta di reimpostazione della password riuscita. Controlla la tua mail per le istruzioni.
reset_password_failure: Uh ho! Non siamo riusciti a trovare alcun utente con l'email specificata.
+ reset_password_saml_user: This account uses SAML authentication. Password reset is not available. Please contact your administrator.
+ login_saml_user: This account uses SAML authentication. Please sign in through your organization's SAML provider.
+ saml_not_available: SAML authentication is not available in this installation.
inbox_deletetion_response: Your inbox deletion request will be processed in some time.
errors:
validations:
@@ -41,6 +44,8 @@ it:
failed: Registrazione non riuscita
assignment_policy:
not_found: Assignment policy not found
+ saml:
+ feature_not_enabled: SAML feature not enabled for this account
data_import:
data_type:
invalid: Tipo di dato non valido
@@ -209,6 +214,7 @@ it:
reply:
email:
header:
+ notifications: 'Notifiche'
from_with_name: '%{assignee_name} da %{inbox_name} <%{from_email}>'
reply_with_name: '%{assignee_name} da %{inbox_name} '
friendly_name: '%{sender_name} da %{business_name} <%{from_email}>'
diff --git a/config/locales/ja.yml b/config/locales/ja.yml
index 3f297acac..42cb77d8f 100644
--- a/config/locales/ja.yml
+++ b/config/locales/ja.yml
@@ -26,6 +26,9 @@ ja:
messages:
reset_password_success: やりましたね! パスワードのリセットリクエストが成功しました。手順についてはメールを確認してください。
reset_password_failure: メールアドレスが見つかりませんでした。
+ reset_password_saml_user: This account uses SAML authentication. Password reset is not available. Please contact your administrator.
+ login_saml_user: This account uses SAML authentication. Please sign in through your organization's SAML provider.
+ saml_not_available: SAML authentication is not available in this installation.
inbox_deletetion_response: 受信トレイの削除リクエストは、しばらくしてから処理されます。
errors:
validations:
@@ -41,6 +44,8 @@ ja:
failed: サインアップに失敗しました
assignment_policy:
not_found: Assignment policy not found
+ saml:
+ feature_not_enabled: SAML feature not enabled for this account
data_import:
data_type:
invalid: 無効なデータ型。
@@ -209,6 +214,7 @@ ja:
reply:
email:
header:
+ notifications: '通知'
from_with_name: '%{assignee_name} from %{inbox_name} <%{from_email}>'
reply_with_name: '%{assignee_name} from %{inbox_name} '
friendly_name: '%{sender_name} from %{business_name} <%{from_email}>'
diff --git a/config/locales/ka.yml b/config/locales/ka.yml
index a8a3334c6..f96ddb9c4 100644
--- a/config/locales/ka.yml
+++ b/config/locales/ka.yml
@@ -26,6 +26,9 @@ ka:
messages:
reset_password_success: Woot! Request for password reset is successful. Check your mail for instructions.
reset_password_failure: Uh ho! We could not find any user with the specified email.
+ reset_password_saml_user: This account uses SAML authentication. Password reset is not available. Please contact your administrator.
+ login_saml_user: This account uses SAML authentication. Please sign in through your organization's SAML provider.
+ saml_not_available: SAML authentication is not available in this installation.
inbox_deletetion_response: Your inbox deletion request will be processed in some time.
errors:
validations:
@@ -41,6 +44,8 @@ ka:
failed: Signup failed
assignment_policy:
not_found: Assignment policy not found
+ saml:
+ feature_not_enabled: SAML feature not enabled for this account
data_import:
data_type:
invalid: Invalid data type
@@ -209,6 +214,7 @@ ka:
reply:
email:
header:
+ notifications: 'Notifications'
from_with_name: '%{assignee_name} from %{inbox_name} <%{from_email}>'
reply_with_name: '%{assignee_name} from %{inbox_name} '
friendly_name: '%{sender_name} from %{business_name} <%{from_email}>'
diff --git a/config/locales/ko.yml b/config/locales/ko.yml
index 913a381d3..efe46dad5 100644
--- a/config/locales/ko.yml
+++ b/config/locales/ko.yml
@@ -26,6 +26,9 @@ ko:
messages:
reset_password_success: Woot! Request for password reset is successful. Check your mail for instructions.
reset_password_failure: Uh ho! We could not find any user with the specified email.
+ reset_password_saml_user: This account uses SAML authentication. Password reset is not available. Please contact your administrator.
+ login_saml_user: This account uses SAML authentication. Please sign in through your organization's SAML provider.
+ saml_not_available: SAML authentication is not available in this installation.
inbox_deletetion_response: Your inbox deletion request will be processed in some time.
errors:
validations:
@@ -41,6 +44,8 @@ ko:
failed: Signup failed
assignment_policy:
not_found: Assignment policy not found
+ saml:
+ feature_not_enabled: SAML feature not enabled for this account
data_import:
data_type:
invalid: Invalid data type
@@ -209,6 +214,7 @@ ko:
reply:
email:
header:
+ notifications: '알림'
from_with_name: '%{assignee_name} from %{inbox_name} <%{from_email}>'
reply_with_name: '%{assignee_name} from %{inbox_name} '
friendly_name: '%{sender_name} from %{business_name} <%{from_email}>'
diff --git a/config/locales/lt.yml b/config/locales/lt.yml
index a2b58cbd4..e7abb2965 100644
--- a/config/locales/lt.yml
+++ b/config/locales/lt.yml
@@ -26,6 +26,9 @@ lt:
messages:
reset_password_success: Kietai! Slaptažodžio nustatymo iš naujo užklausa įvykdyta. Instrukcijų ieškokite savo pašte.
reset_password_failure: Oho! Nepavyko rasti vartotojo su nurodytu el. pašto adresu.
+ reset_password_saml_user: This account uses SAML authentication. Password reset is not available. Please contact your administrator.
+ login_saml_user: This account uses SAML authentication. Please sign in through your organization's SAML provider.
+ saml_not_available: SAML authentication is not available in this installation.
inbox_deletetion_response: Jūsų gautųj laiškų aplanko ištrynimo užklausa bus apdorota po kurio laiko.
errors:
validations:
@@ -41,6 +44,8 @@ lt:
failed: Prisijungimas nesėkmingas
assignment_policy:
not_found: Assignment policy not found
+ saml:
+ feature_not_enabled: SAML feature not enabled for this account
data_import:
data_type:
invalid: Neteisingas duomenų tipas
@@ -209,6 +214,7 @@ lt:
reply:
email:
header:
+ notifications: 'Perspėjimai'
from_with_name: '%{assignee_name} nuo %{inbox_name} <%{from_email}>'
reply_with_name: '%{assignee_name} nuo %{inbox_name} '
friendly_name: '%{sender_name} nuo %{business_name} <%{from_email}>'
diff --git a/config/locales/lv.yml b/config/locales/lv.yml
index 8068359ee..cacbf8632 100644
--- a/config/locales/lv.yml
+++ b/config/locales/lv.yml
@@ -26,6 +26,9 @@ lv:
messages:
reset_password_success: Urā! Paroles atiestatīšanas pieprasījums ir veiksmīgs. Pārbaudiet savu e-pastu, lai iegūtu norādījumus.
reset_password_failure: Ak, vai! Mēs nevarējām atrast nevienu lietotāju ar norādīto e -pastu.
+ reset_password_saml_user: This account uses SAML authentication. Password reset is not available. Please contact your administrator.
+ login_saml_user: This account uses SAML authentication. Please sign in through your organization's SAML provider.
+ saml_not_available: SAML authentication is not available in this installation.
inbox_deletetion_response: Jūsu iesūtnes dzēšanas pieprasījums pēc kāda laika tiks apstrādāts.
errors:
validations:
@@ -41,6 +44,8 @@ lv:
failed: Reģistrēšanās neizdevās
assignment_policy:
not_found: Assignment policy not found
+ saml:
+ feature_not_enabled: SAML feature not enabled for this account
data_import:
data_type:
invalid: Nederīgs datu tips
@@ -209,6 +214,7 @@ lv:
reply:
email:
header:
+ notifications: 'Paziņojumi'
from_with_name: '%{assignee_name} no %{inbox_name} <%{from_email}>'
reply_with_name: '%{assignee_name} no %{inbox_name} '
friendly_name: '%{sender_name} no %{business_name} <%{from_email}>'
diff --git a/config/locales/ml.yml b/config/locales/ml.yml
index e9bd0c29a..f78201f22 100644
--- a/config/locales/ml.yml
+++ b/config/locales/ml.yml
@@ -26,6 +26,9 @@ ml:
messages:
reset_password_success: Woot! പാസ്വേഡ് പുനസജ്ജീകരണത്തിനുള്ള അഭ്യർത്ഥന വിജയകരമാണ്. നിർദ്ദേശങ്ങൾക്കായി നിങ്ങളുടെ മെയിൽ പരിശോധിക്കുക.
reset_password_failure: ക്ഷമിക്കണം! നിർദ്ദിഷ്ട ഇമെയിൽ ഉള്ള ഒരു ഉപയോക്താവിനെയും ഞങ്ങൾക്ക് കണ്ടെത്താൻ കഴിഞ്ഞില്ല.
+ reset_password_saml_user: This account uses SAML authentication. Password reset is not available. Please contact your administrator.
+ login_saml_user: This account uses SAML authentication. Please sign in through your organization's SAML provider.
+ saml_not_available: SAML authentication is not available in this installation.
inbox_deletetion_response: Your inbox deletion request will be processed in some time.
errors:
validations:
@@ -41,6 +44,8 @@ ml:
failed: സൈനപ്പ് പരാജയപ്പെട്ടു
assignment_policy:
not_found: Assignment policy not found
+ saml:
+ feature_not_enabled: SAML feature not enabled for this account
data_import:
data_type:
invalid: Invalid data type
@@ -209,6 +214,7 @@ ml:
reply:
email:
header:
+ notifications: 'Notifications'
from_with_name: '%{assignee_name} from %{inbox_name} <%{from_email}>'
reply_with_name: '%{assignee_name} from %{inbox_name} '
friendly_name: '%{sender_name} from %{business_name} <%{from_email}>'
diff --git a/config/locales/ms.yml b/config/locales/ms.yml
index 886bf0a16..76a8cb2f2 100644
--- a/config/locales/ms.yml
+++ b/config/locales/ms.yml
@@ -26,6 +26,9 @@ ms:
messages:
reset_password_success: Woot! Request for password reset is successful. Check your mail for instructions.
reset_password_failure: Uh ho! We could not find any user with the specified email.
+ reset_password_saml_user: This account uses SAML authentication. Password reset is not available. Please contact your administrator.
+ login_saml_user: This account uses SAML authentication. Please sign in through your organization's SAML provider.
+ saml_not_available: SAML authentication is not available in this installation.
inbox_deletetion_response: Your inbox deletion request will be processed in some time.
errors:
validations:
@@ -41,6 +44,8 @@ ms:
failed: Signup failed
assignment_policy:
not_found: Assignment policy not found
+ saml:
+ feature_not_enabled: SAML feature not enabled for this account
data_import:
data_type:
invalid: Invalid data type
@@ -209,6 +214,7 @@ ms:
reply:
email:
header:
+ notifications: 'Notifications'
from_with_name: '%{assignee_name} from %{inbox_name} <%{from_email}>'
reply_with_name: '%{assignee_name} from %{inbox_name} '
friendly_name: '%{sender_name} from %{business_name} <%{from_email}>'
diff --git a/config/locales/ne.yml b/config/locales/ne.yml
index b3e62a14f..fe079fb3a 100644
--- a/config/locales/ne.yml
+++ b/config/locales/ne.yml
@@ -26,6 +26,9 @@ ne:
messages:
reset_password_success: Woot! Request for password reset is successful. Check your mail for instructions.
reset_password_failure: Uh ho! We could not find any user with the specified email.
+ reset_password_saml_user: This account uses SAML authentication. Password reset is not available. Please contact your administrator.
+ login_saml_user: This account uses SAML authentication. Please sign in through your organization's SAML provider.
+ saml_not_available: SAML authentication is not available in this installation.
inbox_deletetion_response: Your inbox deletion request will be processed in some time.
errors:
validations:
@@ -41,6 +44,8 @@ ne:
failed: Signup failed
assignment_policy:
not_found: Assignment policy not found
+ saml:
+ feature_not_enabled: SAML feature not enabled for this account
data_import:
data_type:
invalid: Invalid data type
@@ -209,6 +214,7 @@ ne:
reply:
email:
header:
+ notifications: 'Notifications'
from_with_name: '%{assignee_name} from %{inbox_name} <%{from_email}>'
reply_with_name: '%{assignee_name} from %{inbox_name} '
friendly_name: '%{sender_name} from %{business_name} <%{from_email}>'
diff --git a/config/locales/nl.yml b/config/locales/nl.yml
index 0df3d02ca..b25a2acba 100644
--- a/config/locales/nl.yml
+++ b/config/locales/nl.yml
@@ -26,6 +26,9 @@ nl:
messages:
reset_password_success: Woot! Verzoek om wachtwoord te resetten is gelukt. Controleer je e-mail voor instructies.
reset_password_failure: Oh ho! We konden geen gebruiker vinden met het opgegeven e-mailadres.
+ reset_password_saml_user: This account uses SAML authentication. Password reset is not available. Please contact your administrator.
+ login_saml_user: This account uses SAML authentication. Please sign in through your organization's SAML provider.
+ saml_not_available: SAML authentication is not available in this installation.
inbox_deletetion_response: Uw verzoek tot verwijdering binnen de inbox zal binnen enige tijd worden verwerkt.
errors:
validations:
@@ -41,6 +44,8 @@ nl:
failed: Aanmelden mislukt
assignment_policy:
not_found: Assignment policy not found
+ saml:
+ feature_not_enabled: SAML feature not enabled for this account
data_import:
data_type:
invalid: Ongeldig datatype
@@ -209,6 +214,7 @@ nl:
reply:
email:
header:
+ notifications: 'Notifications'
from_with_name: '%{assignee_name} from %{inbox_name} <%{from_email}>'
reply_with_name: '%{assignee_name} from %{inbox_name} '
friendly_name: '%{sender_name} from %{business_name} <%{from_email}>'
diff --git a/config/locales/no.yml b/config/locales/no.yml
index 2f3b003a1..3e61be54e 100644
--- a/config/locales/no.yml
+++ b/config/locales/no.yml
@@ -26,6 +26,9 @@
messages:
reset_password_success: Woot! Forespørsel om tilbakestilling av passord er vellykket. Sjekk innboksen for instruksjoner.
reset_password_failure: Uff da! Vi fant ingen bruker med den angitte eposten.
+ reset_password_saml_user: This account uses SAML authentication. Password reset is not available. Please contact your administrator.
+ login_saml_user: This account uses SAML authentication. Please sign in through your organization's SAML provider.
+ saml_not_available: SAML authentication is not available in this installation.
inbox_deletetion_response: Innboksen din slettingsforespørsel vil bli behandlet i løpet av en periode.
errors:
validations:
@@ -41,6 +44,8 @@
failed: Registrering mislyktes
assignment_policy:
not_found: Assignment policy not found
+ saml:
+ feature_not_enabled: SAML feature not enabled for this account
data_import:
data_type:
invalid: Ugyldig datatype
@@ -209,6 +214,7 @@
reply:
email:
header:
+ notifications: 'Varsler'
from_with_name: '%{assignee_name} from %{inbox_name} <%{from_email}>'
reply_with_name: '%{assignee_name} from %{inbox_name} '
friendly_name: '%{sender_name} from %{business_name} <%{from_email}>'
diff --git a/config/locales/pl.yml b/config/locales/pl.yml
index 6080e1cd6..ead5d7bfd 100644
--- a/config/locales/pl.yml
+++ b/config/locales/pl.yml
@@ -26,6 +26,9 @@ pl:
messages:
reset_password_success: Woot! Prośba o zresetowanie hasła zakończona pomyślnie. Sprawdź swoją pocztę, aby uzyskać instrukcje.
reset_password_failure: Ups! Nie mogliśmy znaleźć żadnego użytkownika z podanym adresem e-mail.
+ reset_password_saml_user: This account uses SAML authentication. Password reset is not available. Please contact your administrator.
+ login_saml_user: This account uses SAML authentication. Please sign in through your organization's SAML provider.
+ saml_not_available: SAML authentication is not available in this installation.
inbox_deletetion_response: Żądanie usunięcia skrzynki odbiorczej zostanie rozpatrzone za jakiś czas.
errors:
validations:
@@ -41,6 +44,8 @@ pl:
failed: Rejestracja nie powiodła się
assignment_policy:
not_found: Assignment policy not found
+ saml:
+ feature_not_enabled: SAML feature not enabled for this account
data_import:
data_type:
invalid: Nieprawidłowy typ danych
@@ -209,6 +214,7 @@ pl:
reply:
email:
header:
+ notifications: 'Powiadomienia'
from_with_name: '%{assignee_name} z %{inbox_name} <%{from_email}>'
reply_with_name: '%{assignee_name} z %{inbox_name} '
friendly_name: '%{sender_name} z %{business_name} <%{from_email}>'
diff --git a/config/locales/pt.yml b/config/locales/pt.yml
index aae43f973..d020a35d2 100644
--- a/config/locales/pt.yml
+++ b/config/locales/pt.yml
@@ -26,6 +26,9 @@ pt:
messages:
reset_password_success: Legal! Pedido de redefinição de senha bem sucedido. Verifique o seu e-mail para obter instruções.
reset_password_failure: Uh ho! Não conseguimos encontrar nenhum uutilizador com o e-mail especificado.
+ reset_password_saml_user: This account uses SAML authentication. Password reset is not available. Please contact your administrator.
+ login_saml_user: This account uses SAML authentication. Please sign in through your organization's SAML provider.
+ saml_not_available: SAML authentication is not available in this installation.
inbox_deletetion_response: O seu pedido de eliminação de caixa de entrada será processado mais tarde.
errors:
validations:
@@ -41,6 +44,8 @@ pt:
failed: Falha na inscrição
assignment_policy:
not_found: Assignment policy not found
+ saml:
+ feature_not_enabled: SAML feature not enabled for this account
data_import:
data_type:
invalid: Tipo de dados inválido
@@ -209,6 +214,7 @@ pt:
reply:
email:
header:
+ notifications: 'Notificações'
from_with_name: '%{assignee_name} de %{inbox_name} <%{from_email}>'
reply_with_name: '%{assignee_name} de %{inbox_name} '
friendly_name: '%{sender_name} de %{business_name} <%{from_email}>'
diff --git a/config/locales/pt_BR.yml b/config/locales/pt_BR.yml
index e75d40e5d..2f5c5db13 100644
--- a/config/locales/pt_BR.yml
+++ b/config/locales/pt_BR.yml
@@ -26,6 +26,9 @@ pt_BR:
messages:
reset_password_success: Legal! A solicitação de alteração de senha foi bem sucedida. Verifique seu e-mail para obter instruções.
reset_password_failure: Uh ho! Não conseguimos encontrar nenhum usuário com o e-mail especificado.
+ reset_password_saml_user: This account uses SAML authentication. Password reset is not available. Please contact your administrator.
+ login_saml_user: This account uses SAML authentication. Please sign in through your organization's SAML provider.
+ saml_not_available: SAML authentication is not available in this installation.
inbox_deletetion_response: Seu pedido de exclusão da caixa de entrada será processado dentro de algum tempo.
errors:
validations:
@@ -41,6 +44,8 @@ pt_BR:
failed: Registro falhou
assignment_policy:
not_found: Assignment policy not found
+ saml:
+ feature_not_enabled: SAML feature not enabled for this account
data_import:
data_type:
invalid: Tipo de dado inválido
@@ -209,6 +214,7 @@ pt_BR:
reply:
email:
header:
+ notifications: 'Notificações'
from_with_name: '%{assignee_name} de %{inbox_name} <%{from_email}>'
reply_with_name: '%{assignee_name} de %{inbox_name} '
friendly_name: '%{sender_name} de %{business_name} <%{from_email}>'
diff --git a/config/locales/ro.yml b/config/locales/ro.yml
index 954898ba1..c1333508d 100644
--- a/config/locales/ro.yml
+++ b/config/locales/ro.yml
@@ -26,6 +26,9 @@ ro:
messages:
reset_password_success: Woot! Cererea de resetare a parolei a reusit. Verifica emailul pentru instructiuni.
reset_password_failure: Nu am putut găsi niciun utilizator cu e-mailul specificat.
+ reset_password_saml_user: This account uses SAML authentication. Password reset is not available. Please contact your administrator.
+ login_saml_user: This account uses SAML authentication. Please sign in through your organization's SAML provider.
+ saml_not_available: SAML authentication is not available in this installation.
inbox_deletetion_response: Solicitarea de ștergere a inboxului va fi procesată într-un anumit timp.
errors:
validations:
@@ -41,6 +44,8 @@ ro:
failed: Înregistrare eșuată
assignment_policy:
not_found: Assignment policy not found
+ saml:
+ feature_not_enabled: SAML feature not enabled for this account
data_import:
data_type:
invalid: Tip de date nevalid
@@ -209,6 +214,7 @@ ro:
reply:
email:
header:
+ notifications: 'Notificări'
from_with_name: '%{assignee_name} din %{inbox_name} <%{from_email}>'
reply_with_name: '%{assignee_name} din %{inbox_name} '
friendly_name: '%{sender_name} din %{business_name} <%{from_email}>'
diff --git a/config/locales/ru.yml b/config/locales/ru.yml
index ffb2e706c..f313fd987 100644
--- a/config/locales/ru.yml
+++ b/config/locales/ru.yml
@@ -26,6 +26,9 @@ ru:
messages:
reset_password_success: Круто! Запрос на сброс пароля удался. Проверьте почту для получения инструкций.
reset_password_failure: Ой! Мы не смогли найти пользователя с указанным email.
+ reset_password_saml_user: This account uses SAML authentication. Password reset is not available. Please contact your administrator.
+ login_saml_user: This account uses SAML authentication. Please sign in through your organization's SAML provider.
+ saml_not_available: SAML authentication is not available in this installation.
inbox_deletetion_response: Ваш запрос на удаление входящих сообщений будет обработан через некоторое время.
errors:
validations:
@@ -41,6 +44,8 @@ ru:
failed: Ошибка регистрации
assignment_policy:
not_found: Assignment policy not found
+ saml:
+ feature_not_enabled: SAML feature not enabled for this account
data_import:
data_type:
invalid: Недопустимый тип данных
@@ -209,6 +214,7 @@ ru:
reply:
email:
header:
+ notifications: 'Уведомления'
from_with_name: '%{assignee_name} от %{inbox_name} <%{from_email}>'
reply_with_name: '%{assignee_name} от %{inbox_name} <%{reply_email}>'
friendly_name: '%{sender_name} из %{business_name} <%{from_email}>'
diff --git a/config/locales/sh.yml b/config/locales/sh.yml
index 0fdcc16ec..6e24bab5f 100644
--- a/config/locales/sh.yml
+++ b/config/locales/sh.yml
@@ -26,6 +26,9 @@ sh:
messages:
reset_password_success: Woot! Request for password reset is successful. Check your mail for instructions.
reset_password_failure: Uh ho! We could not find any user with the specified email.
+ reset_password_saml_user: This account uses SAML authentication. Password reset is not available. Please contact your administrator.
+ login_saml_user: This account uses SAML authentication. Please sign in through your organization's SAML provider.
+ saml_not_available: SAML authentication is not available in this installation.
inbox_deletetion_response: Your inbox deletion request will be processed in some time.
errors:
validations:
@@ -41,6 +44,8 @@ sh:
failed: Signup failed
assignment_policy:
not_found: Assignment policy not found
+ saml:
+ feature_not_enabled: SAML feature not enabled for this account
data_import:
data_type:
invalid: Invalid data type
@@ -209,6 +214,7 @@ sh:
reply:
email:
header:
+ notifications: 'Notifications'
from_with_name: '%{assignee_name} from %{inbox_name} <%{from_email}>'
reply_with_name: '%{assignee_name} from %{inbox_name} '
friendly_name: '%{sender_name} from %{business_name} <%{from_email}>'
diff --git a/config/locales/sk.yml b/config/locales/sk.yml
index dd237792d..7733bc83a 100644
--- a/config/locales/sk.yml
+++ b/config/locales/sk.yml
@@ -26,6 +26,9 @@ sk:
messages:
reset_password_success: Woot! Request for password reset is successful. Check your mail for instructions.
reset_password_failure: Uh ho! We could not find any user with the specified email.
+ reset_password_saml_user: This account uses SAML authentication. Password reset is not available. Please contact your administrator.
+ login_saml_user: This account uses SAML authentication. Please sign in through your organization's SAML provider.
+ saml_not_available: SAML authentication is not available in this installation.
inbox_deletetion_response: Your inbox deletion request will be processed in some time.
errors:
validations:
@@ -41,6 +44,8 @@ sk:
failed: Signup failed
assignment_policy:
not_found: Assignment policy not found
+ saml:
+ feature_not_enabled: SAML feature not enabled for this account
data_import:
data_type:
invalid: Invalid data type
@@ -209,6 +214,7 @@ sk:
reply:
email:
header:
+ notifications: 'Upozornenia'
from_with_name: '%{assignee_name} z %{inbox_name} '
reply_with_name: '%{assignee_name} z %{inbox_name} '
friendly_name: '%{sender_name} z %{business_name} '
diff --git a/config/locales/sl.yml b/config/locales/sl.yml
index b855ec0e0..a05f4b0a0 100644
--- a/config/locales/sl.yml
+++ b/config/locales/sl.yml
@@ -26,6 +26,9 @@ sl:
messages:
reset_password_success: Juhu! Zahteva za ponastavitev gesla je bila uspešna. Preverite svojo e-pošto za navodila.
reset_password_failure: O ne! Nismo mogli najti nobenega uporabnika z navedenim e-poštnim naslovom.
+ reset_password_saml_user: This account uses SAML authentication. Password reset is not available. Please contact your administrator.
+ login_saml_user: This account uses SAML authentication. Please sign in through your organization's SAML provider.
+ saml_not_available: SAML authentication is not available in this installation.
inbox_deletetion_response: Vaša zahteva za izbris predala bo obdelana čez nekaj časa.
errors:
validations:
@@ -41,6 +44,8 @@ sl:
failed: Registracija neuspešna
assignment_policy:
not_found: Assignment policy not found
+ saml:
+ feature_not_enabled: SAML feature not enabled for this account
data_import:
data_type:
invalid: Nepravilen podatkovni tip
@@ -209,6 +214,7 @@ sl:
reply:
email:
header:
+ notifications: 'Notifications'
from_with_name: '%{assignee_name} iz %{inbox_name} <%{from_email}>'
reply_with_name: '%{assignee_name} iz %{inbox_name} '
friendly_name: '%{sender_name} iz %{business_name} <%{from_email}>'
diff --git a/config/locales/sq.yml b/config/locales/sq.yml
index 51e5c946f..6d460febc 100644
--- a/config/locales/sq.yml
+++ b/config/locales/sq.yml
@@ -26,6 +26,9 @@ sq:
messages:
reset_password_success: Woot! Request for password reset is successful. Check your mail for instructions.
reset_password_failure: Uh ho! We could not find any user with the specified email.
+ reset_password_saml_user: This account uses SAML authentication. Password reset is not available. Please contact your administrator.
+ login_saml_user: This account uses SAML authentication. Please sign in through your organization's SAML provider.
+ saml_not_available: SAML authentication is not available in this installation.
inbox_deletetion_response: Your inbox deletion request will be processed in some time.
errors:
validations:
@@ -41,6 +44,8 @@ sq:
failed: Signup failed
assignment_policy:
not_found: Nuk u gjet politika e caktimit
+ saml:
+ feature_not_enabled: SAML feature not enabled for this account
data_import:
data_type:
invalid: Invalid data type
@@ -209,6 +214,7 @@ sq:
reply:
email:
header:
+ notifications: 'Notifications'
from_with_name: '%{assignee_name} from %{inbox_name} <%{from_email}>'
reply_with_name: '%{assignee_name} from %{inbox_name} '
friendly_name: '%{sender_name} from %{business_name} <%{from_email}>'
diff --git a/config/locales/sr.yml b/config/locales/sr.yml
index 7bd84f3ff..ce2f15c61 100644
--- a/config/locales/sr.yml
+++ b/config/locales/sr.yml
@@ -26,6 +26,9 @@ sr-Latn:
messages:
reset_password_success: Opa! Zahtev za resetovanjem lozinke je uspešan. Proverite vašu e-poštu za uputstvo.
reset_password_failure: O ne! Nismo mogli da pronađemo nijednog korisnika sa navedenom e-poštom.
+ reset_password_saml_user: This account uses SAML authentication. Password reset is not available. Please contact your administrator.
+ login_saml_user: This account uses SAML authentication. Please sign in through your organization's SAML provider.
+ saml_not_available: SAML authentication is not available in this installation.
inbox_deletetion_response: Your inbox deletion request will be processed in some time.
errors:
validations:
@@ -41,6 +44,8 @@ sr-Latn:
failed: Registracija nije uspela
assignment_policy:
not_found: Assignment policy not found
+ saml:
+ feature_not_enabled: SAML feature not enabled for this account
data_import:
data_type:
invalid: Neispravan tip podatka
@@ -209,6 +214,7 @@ sr-Latn:
reply:
email:
header:
+ notifications: 'Obaveštenja'
from_with_name: '%{assignee_name} iz %{inbox_name} <%{from_email}>'
reply_with_name: '%{assignee_name} iz %{inbox_name} '
friendly_name: '%{sender_name} iz %{business_name} <%{from_email}>'
diff --git a/config/locales/sv.yml b/config/locales/sv.yml
index 73a5d6d55..c17071f5e 100644
--- a/config/locales/sv.yml
+++ b/config/locales/sv.yml
@@ -26,6 +26,9 @@ sv:
messages:
reset_password_success: Woot! Begäran om återställning av lösenord lyckades. Kontrollera din e-post för instruktioner.
reset_password_failure: Oj då! Vi kunde inte hitta någon användare med den angivna e-postadressen.
+ reset_password_saml_user: This account uses SAML authentication. Password reset is not available. Please contact your administrator.
+ login_saml_user: This account uses SAML authentication. Please sign in through your organization's SAML provider.
+ saml_not_available: SAML authentication is not available in this installation.
inbox_deletetion_response: Your inbox deletion request will be processed in some time.
errors:
validations:
@@ -41,6 +44,8 @@ sv:
failed: Registrering misslyckades
assignment_policy:
not_found: Assignment policy not found
+ saml:
+ feature_not_enabled: SAML feature not enabled for this account
data_import:
data_type:
invalid: Invalid data type
@@ -209,6 +214,7 @@ sv:
reply:
email:
header:
+ notifications: 'Aviseringar'
from_with_name: '%{assignee_name} from %{inbox_name} <%{from_email}>'
reply_with_name: '%{assignee_name} from %{inbox_name} '
friendly_name: '%{sender_name} from %{business_name} <%{from_email}>'
diff --git a/config/locales/ta.yml b/config/locales/ta.yml
index 4ffbef1e7..19641b16c 100644
--- a/config/locales/ta.yml
+++ b/config/locales/ta.yml
@@ -26,6 +26,9 @@ ta:
messages:
reset_password_success: வூட்! பாஸ்வேர்டை மீட்டமைப்பிற்கான கோரிக்கை வெற்றிகரமாக அனுப்பப்பட்டுள்ளது. வழிமுறைகளுக்கு உங்கள் ஈ-மெயிலைப் பார்க்கவும்.
reset_password_failure: மன்னிக்கவும்! குறிப்பிட்ட ஈ-மெயிலுடன் எந்த பயனரையும் எங்களால் கண்டுபிடிக்க முடியவில்லை.
+ reset_password_saml_user: This account uses SAML authentication. Password reset is not available. Please contact your administrator.
+ login_saml_user: This account uses SAML authentication. Please sign in through your organization's SAML provider.
+ saml_not_available: SAML authentication is not available in this installation.
inbox_deletetion_response: Your inbox deletion request will be processed in some time.
errors:
validations:
@@ -41,6 +44,8 @@ ta:
failed: உள்நுழையும் முயறிசி தோல்வி அடைந்துள்ளது
assignment_policy:
not_found: Assignment policy not found
+ saml:
+ feature_not_enabled: SAML feature not enabled for this account
data_import:
data_type:
invalid: Invalid data type
@@ -209,6 +214,7 @@ ta:
reply:
email:
header:
+ notifications: 'Notifications'
from_with_name: '%{assignee_name} from %{inbox_name} <%{from_email}>'
reply_with_name: '%{assignee_name} from %{inbox_name} '
friendly_name: '%{sender_name} from %{business_name} <%{from_email}>'
diff --git a/config/locales/th.yml b/config/locales/th.yml
index 1d468302a..9f19f5ce9 100644
--- a/config/locales/th.yml
+++ b/config/locales/th.yml
@@ -26,6 +26,9 @@ th:
messages:
reset_password_success: Woot! Request for password reset is successful. Check your mail for instructions.
reset_password_failure: Uh ho! We could not find any user with the specified email.
+ reset_password_saml_user: This account uses SAML authentication. Password reset is not available. Please contact your administrator.
+ login_saml_user: This account uses SAML authentication. Please sign in through your organization's SAML provider.
+ saml_not_available: SAML authentication is not available in this installation.
inbox_deletetion_response: Your inbox deletion request will be processed in some time.
errors:
validations:
@@ -41,6 +44,8 @@ th:
failed: Signup failed
assignment_policy:
not_found: Assignment policy not found
+ saml:
+ feature_not_enabled: SAML feature not enabled for this account
data_import:
data_type:
invalid: Invalid data type
@@ -209,6 +214,7 @@ th:
reply:
email:
header:
+ notifications: 'การแจ้งเตือน'
from_with_name: '%{assignee_name} from %{inbox_name} <%{from_email}>'
reply_with_name: '%{assignee_name} from %{inbox_name} '
friendly_name: '%{sender_name} from %{business_name} <%{from_email}>'
diff --git a/config/locales/tl.yml b/config/locales/tl.yml
index cfbbc1d0a..12895d79d 100644
--- a/config/locales/tl.yml
+++ b/config/locales/tl.yml
@@ -26,6 +26,9 @@ tl:
messages:
reset_password_success: Woot! Request for password reset is successful. Check your mail for instructions.
reset_password_failure: Uh ho! We could not find any user with the specified email.
+ reset_password_saml_user: This account uses SAML authentication. Password reset is not available. Please contact your administrator.
+ login_saml_user: This account uses SAML authentication. Please sign in through your organization's SAML provider.
+ saml_not_available: SAML authentication is not available in this installation.
inbox_deletetion_response: Your inbox deletion request will be processed in some time.
errors:
validations:
@@ -41,6 +44,8 @@ tl:
failed: Signup failed
assignment_policy:
not_found: Assignment policy not found
+ saml:
+ feature_not_enabled: SAML feature not enabled for this account
data_import:
data_type:
invalid: Invalid data type
@@ -209,6 +214,7 @@ tl:
reply:
email:
header:
+ notifications: 'Notifications'
from_with_name: '%{assignee_name} from %{inbox_name} <%{from_email}>'
reply_with_name: '%{assignee_name} from %{inbox_name} '
friendly_name: '%{sender_name} from %{business_name} <%{from_email}>'
diff --git a/config/locales/tr.yml b/config/locales/tr.yml
index fb67279bc..def97adec 100644
--- a/config/locales/tr.yml
+++ b/config/locales/tr.yml
@@ -26,6 +26,9 @@ tr:
messages:
reset_password_success: Parola sıfırlama isteği başarılı. Talimatlar için postanızı kontrol edin.
reset_password_failure: Belirtilen e-postaya sahip herhangi bir kullanıcı bulamadık.
+ reset_password_saml_user: This account uses SAML authentication. Password reset is not available. Please contact your administrator.
+ login_saml_user: This account uses SAML authentication. Please sign in through your organization's SAML provider.
+ saml_not_available: SAML authentication is not available in this installation.
inbox_deletetion_response: Gelen kutusu silme isteğiniz bir süre sonra işleme alınacaktır.
errors:
validations:
@@ -41,6 +44,8 @@ tr:
failed: Kayıt başarısız oldu
assignment_policy:
not_found: Assignment policy not found
+ saml:
+ feature_not_enabled: SAML feature not enabled for this account
data_import:
data_type:
invalid: Hatalı veri türü
@@ -209,6 +214,7 @@ tr:
reply:
email:
header:
+ notifications: 'Bildirimler'
from_with_name: '"%{inbox_name} <%{from_email}> adresinden %{assignee_name}''e gönderildi,'
reply_with_name: '%{assignee_name} tarafından %{inbox_name} '
friendly_name: '%{sender_name} tarafından %{business_name} <%{from_email}>'
diff --git a/config/locales/uk.yml b/config/locales/uk.yml
index 4f38c4e05..b81ad0117 100644
--- a/config/locales/uk.yml
+++ b/config/locales/uk.yml
@@ -26,6 +26,9 @@ uk:
messages:
reset_password_success: Круто! Запит на скидання пароля виконано успішно. Перевірте вашу пошту за подальшими інструкціями.
reset_password_failure: Ой-ой! Ми не змогли знайти жодного користувача з цією адресою електронної пошти.
+ reset_password_saml_user: This account uses SAML authentication. Password reset is not available. Please contact your administrator.
+ login_saml_user: This account uses SAML authentication. Please sign in through your organization's SAML provider.
+ saml_not_available: SAML authentication is not available in this installation.
inbox_deletetion_response: Ваш запит на видалення буде оброблений протягом деякого часу.
errors:
validations:
@@ -41,6 +44,8 @@ uk:
failed: Помилка реєстрації
assignment_policy:
not_found: Assignment policy not found
+ saml:
+ feature_not_enabled: SAML feature not enabled for this account
data_import:
data_type:
invalid: Некоректний тип даних
@@ -209,6 +214,7 @@ uk:
reply:
email:
header:
+ notifications: 'Сповіщення'
from_with_name: '%{assignee_name} з %{inbox_name} <%{from_email}>'
reply_with_name: '%{assignee_name} від %{inbox_name} '
friendly_name: '%{sender_name} з %{business_name} <%{from_email}>'
diff --git a/config/locales/ur.yml b/config/locales/ur.yml
index cb46599db..989147236 100644
--- a/config/locales/ur.yml
+++ b/config/locales/ur.yml
@@ -26,6 +26,9 @@ ur:
messages:
reset_password_success: Woot! Request for password reset is successful. Check your mail for instructions.
reset_password_failure: Uh ho! We could not find any user with the specified email.
+ reset_password_saml_user: This account uses SAML authentication. Password reset is not available. Please contact your administrator.
+ login_saml_user: This account uses SAML authentication. Please sign in through your organization's SAML provider.
+ saml_not_available: SAML authentication is not available in this installation.
inbox_deletetion_response: Your inbox deletion request will be processed in some time.
errors:
validations:
@@ -41,6 +44,8 @@ ur:
failed: Signup failed
assignment_policy:
not_found: Assignment policy not found
+ saml:
+ feature_not_enabled: SAML feature not enabled for this account
data_import:
data_type:
invalid: Invalid data type
@@ -209,6 +214,7 @@ ur:
reply:
email:
header:
+ notifications: 'Notifications'
from_with_name: '%{assignee_name} from %{inbox_name} <%{from_email}>'
reply_with_name: '%{assignee_name} from %{inbox_name} '
friendly_name: '%{sender_name} from %{business_name} <%{from_email}>'
diff --git a/config/locales/ur_IN.yml b/config/locales/ur_IN.yml
index 7a376dbf7..6b6f03c42 100644
--- a/config/locales/ur_IN.yml
+++ b/config/locales/ur_IN.yml
@@ -26,6 +26,9 @@ ur:
messages:
reset_password_success: Woot! Request for password reset is successful. Check your mail for instructions.
reset_password_failure: Uh ho! We could not find any user with the specified email.
+ reset_password_saml_user: This account uses SAML authentication. Password reset is not available. Please contact your administrator.
+ login_saml_user: This account uses SAML authentication. Please sign in through your organization's SAML provider.
+ saml_not_available: SAML authentication is not available in this installation.
inbox_deletetion_response: Your inbox deletion request will be processed in some time.
errors:
validations:
@@ -41,6 +44,8 @@ ur:
failed: Signup failed
assignment_policy:
not_found: Assignment policy not found
+ saml:
+ feature_not_enabled: SAML feature not enabled for this account
data_import:
data_type:
invalid: Invalid data type
@@ -209,6 +214,7 @@ ur:
reply:
email:
header:
+ notifications: 'Notifications'
from_with_name: '%{assignee_name} from %{inbox_name} <%{from_email}>'
reply_with_name: '%{assignee_name} from %{inbox_name} '
friendly_name: '%{sender_name} from %{business_name} <%{from_email}>'
diff --git a/config/locales/vi.yml b/config/locales/vi.yml
index 81475add3..d2a55b176 100644
--- a/config/locales/vi.yml
+++ b/config/locales/vi.yml
@@ -26,6 +26,9 @@ vi:
messages:
reset_password_success: Chà! Yêu cầu đặt lại mật khẩu thành công. Kiểm tra thư của bạn để biết hướng dẫn.
reset_password_failure: Uh ho! Chúng tôi không thể tìm thấy bất kỳ người dùng nào có email được chỉ định.
+ reset_password_saml_user: This account uses SAML authentication. Password reset is not available. Please contact your administrator.
+ login_saml_user: This account uses SAML authentication. Please sign in through your organization's SAML provider.
+ saml_not_available: SAML authentication is not available in this installation.
inbox_deletetion_response: Yêu cầu xoá hộp thư của bạn sẽ được xử lý.
errors:
validations:
@@ -41,6 +44,8 @@ vi:
failed: Đăng ký thât bại
assignment_policy:
not_found: Assignment policy not found
+ saml:
+ feature_not_enabled: SAML feature not enabled for this account
data_import:
data_type:
invalid: Kiểu dữ liệu không hợp lệ
@@ -209,6 +214,7 @@ vi:
reply:
email:
header:
+ notifications: 'Thông báo'
from_with_name: '%{assignee_name} từ %{inbox_name} <%{from_email}>'
reply_with_name: '%{assignee_name} từ %{inbox_name} '
friendly_name: '%{sender_name} từ %{business_name} <%{from_email}>'
diff --git a/config/locales/zh_CN.yml b/config/locales/zh_CN.yml
index 915ec3eae..3c2dfe351 100644
--- a/config/locales/zh_CN.yml
+++ b/config/locales/zh_CN.yml
@@ -26,6 +26,9 @@ zh_CN:
messages:
reset_password_success: 哇!密码重置请求成功。请检查您的邮件获取说明。
reset_password_failure: 哎呀!我们找不到指定电子邮件的任何用户。
+ reset_password_saml_user: This account uses SAML authentication. Password reset is not available. Please contact your administrator.
+ login_saml_user: This account uses SAML authentication. Please sign in through your organization's SAML provider.
+ saml_not_available: SAML authentication is not available in this installation.
inbox_deletetion_response: 您的收件箱删除请求将在一段时间内处理。
errors:
validations:
@@ -41,6 +44,8 @@ zh_CN:
failed: 注册失败
assignment_policy:
not_found: Assignment policy not found
+ saml:
+ feature_not_enabled: SAML feature not enabled for this account
data_import:
data_type:
invalid: 错误的数据类型
@@ -209,6 +214,7 @@ zh_CN:
reply:
email:
header:
+ notifications: '消息通知'
from_with_name: '%{assignee_name} 来自 %{inbox_name} <%{from_email}>'
reply_with_name: '%{assignee_name} 来自 %{inbox_name} '
friendly_name: '%{sender_name} 来自 %{business_name} <%{from_email}>'
diff --git a/config/locales/zh_TW.yml b/config/locales/zh_TW.yml
index 5ef823b2b..951eb57fc 100644
--- a/config/locales/zh_TW.yml
+++ b/config/locales/zh_TW.yml
@@ -26,6 +26,9 @@ zh_TW:
messages:
reset_password_success: 密碼重設成功,請確認您的信箱有收到重設信件。
reset_password_failure: 我們找不到用戶指定的電子郵件。
+ reset_password_saml_user: This account uses SAML authentication. Password reset is not available. Please contact your administrator.
+ login_saml_user: This account uses SAML authentication. Please sign in through your organization's SAML provider.
+ saml_not_available: SAML authentication is not available in this installation.
inbox_deletetion_response: 您的收件匣刪除請求將在一段時間後處理。
errors:
validations:
@@ -41,6 +44,8 @@ zh_TW:
failed: 註冊失敗。
assignment_policy:
not_found: Assignment policy not found
+ saml:
+ feature_not_enabled: SAML feature not enabled for this account
data_import:
data_type:
invalid: Invalid data type
@@ -209,6 +214,7 @@ zh_TW:
reply:
email:
header:
+ notifications: '通知'
from_with_name: '%{assignee_name} from %{inbox_name} <%{from_email}>'
reply_with_name: '%{assignee_name} from %{inbox_name} '
friendly_name: '%{sender_name} from %{business_name} <%{from_email}>'
diff --git a/db/migrate/20250916024703_add_allowed_domains_to_channel_widgets.rb b/db/migrate/20250916024703_add_allowed_domains_to_channel_widgets.rb
new file mode 100644
index 000000000..b0df78df6
--- /dev/null
+++ b/db/migrate/20250916024703_add_allowed_domains_to_channel_widgets.rb
@@ -0,0 +1,5 @@
+class AddAllowedDomainsToChannelWidgets < ActiveRecord::Migration[7.1]
+ def change
+ add_column :channel_web_widgets, :allowed_domains, :text, default: ''
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index b762891a3..36a532e86 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.
-ActiveRecord::Schema[7.1].define(version: 2025_08_26_000000) do
+ActiveRecord::Schema[7.1].define(version: 2025_09_16_024703) do
# These extensions should be enabled to support this database
enable_extension "pg_stat_statements"
enable_extension "pg_trgm"
@@ -533,6 +533,7 @@ ActiveRecord::Schema[7.1].define(version: 2025_08_26_000000) do
t.jsonb "pre_chat_form_options", default: {}
t.boolean "hmac_mandatory", default: false
t.boolean "continuity_via_email", default: true, null: false
+ t.text "allowed_domains", default: ""
t.index ["hmac_token"], name: "index_channel_web_widgets_on_hmac_token", unique: true
t.index ["website_token"], name: "index_channel_web_widgets_on_website_token", unique: true
end
diff --git a/enterprise/app/builders/enterprise/agent_builder.rb b/enterprise/app/builders/enterprise/agent_builder.rb
new file mode 100644
index 000000000..3007dbb61
--- /dev/null
+++ b/enterprise/app/builders/enterprise/agent_builder.rb
@@ -0,0 +1,13 @@
+module Enterprise::AgentBuilder
+ def perform
+ super.tap do |user|
+ convert_to_saml_provider(user) if user.persisted? && account.saml_enabled?
+ end
+ end
+
+ private
+
+ def convert_to_saml_provider(user)
+ user.update!(provider: 'saml') unless user.provider == 'saml'
+ end
+end
diff --git a/enterprise/app/builders/saml_user_builder.rb b/enterprise/app/builders/saml_user_builder.rb
index bd0059d07..97a287462 100644
--- a/enterprise/app/builders/saml_user_builder.rb
+++ b/enterprise/app/builders/saml_user_builder.rb
@@ -17,6 +17,7 @@ class SamlUserBuilder
user = User.from_email(auth_attribute('email'))
if user
+ confirm_user_if_required(user)
convert_existing_user_to_saml(user)
return user
end
@@ -24,6 +25,13 @@ class SamlUserBuilder
create_user
end
+ def confirm_user_if_required(user)
+ return if user.confirmed?
+
+ user.skip_confirmation!
+ user.save!
+ end
+
def convert_existing_user_to_saml(user)
return if user.provider == 'saml'
diff --git a/enterprise/app/controllers/api/v1/accounts/saml_settings_controller.rb b/enterprise/app/controllers/api/v1/accounts/saml_settings_controller.rb
index efeb61a2f..9f00138cb 100644
--- a/enterprise/app/controllers/api/v1/accounts/saml_settings_controller.rb
+++ b/enterprise/app/controllers/api/v1/accounts/saml_settings_controller.rb
@@ -7,11 +7,19 @@ class Api::V1::Accounts::SamlSettingsController < Api::V1::Accounts::BaseControl
def create
@saml_settings = Current.account.build_saml_settings(saml_settings_params)
- @saml_settings.save!
+ if @saml_settings.save
+ render :show
+ else
+ render json: { errors: @saml_settings.errors.full_messages }, status: :unprocessable_entity
+ end
end
def update
- @saml_settings.update!(saml_settings_params)
+ if @saml_settings.update(saml_settings_params)
+ render :show
+ else
+ render json: { errors: @saml_settings.errors.full_messages }, status: :unprocessable_entity
+ end
end
def destroy
diff --git a/enterprise/app/controllers/enterprise/devise_overrides/passwords_controller.rb b/enterprise/app/controllers/enterprise/devise_overrides/passwords_controller.rb
index bd4daee2a..3a20e0d71 100644
--- a/enterprise/app/controllers/enterprise/devise_overrides/passwords_controller.rb
+++ b/enterprise/app/controllers/enterprise/devise_overrides/passwords_controller.rb
@@ -5,6 +5,7 @@ module Enterprise::DeviseOverrides::PasswordsController
if saml_user_attempting_password_auth?(params[:email])
render json: {
success: false,
+ message: I18n.t('messages.reset_password_saml_user'),
errors: [I18n.t('messages.reset_password_saml_user')]
}, status: :forbidden
return
diff --git a/enterprise/app/controllers/enterprise/devise_overrides/sessions_controller.rb b/enterprise/app/controllers/enterprise/devise_overrides/sessions_controller.rb
index ea456bdd1..adfc0413e 100644
--- a/enterprise/app/controllers/enterprise/devise_overrides/sessions_controller.rb
+++ b/enterprise/app/controllers/enterprise/devise_overrides/sessions_controller.rb
@@ -5,6 +5,7 @@ module Enterprise::DeviseOverrides::SessionsController
if saml_user_attempting_password_auth?(params[:email], sso_auth_token: params[:sso_auth_token])
render json: {
success: false,
+ message: I18n.t('messages.login_saml_user'),
errors: [I18n.t('messages.login_saml_user')]
}, status: :unauthorized
return
diff --git a/enterprise/app/controllers/enterprise/super_admin/app_configs_controller.rb b/enterprise/app/controllers/enterprise/super_admin/app_configs_controller.rb
index 5466c86a4..5e70d2d79 100644
--- a/enterprise/app/controllers/enterprise/super_admin/app_configs_controller.rb
+++ b/enterprise/app/controllers/enterprise/super_admin/app_configs_controller.rb
@@ -10,7 +10,7 @@ module Enterprise::SuperAdmin::AppConfigsController
when 'internal'
@allowed_configs = internal_config_options
when 'captain'
- @allowed_configs = %w[CAPTAIN_OPEN_AI_API_KEY CAPTAIN_OPEN_AI_MODEL CAPTAIN_OPEN_AI_ENDPOINT CAPTAIN_FIRECRAWL_API_KEY]
+ @allowed_configs = captain_config_options
else
super
end
@@ -36,4 +36,14 @@ module Enterprise::SuperAdmin::AppConfigsController
CAPTAIN_CLOUD_PLAN_LIMITS ACCOUNT_SECURITY_NOTIFICATION_WEBHOOK_URL CHATWOOT_INSTANCE_ADMIN_EMAIL
OG_IMAGE_CDN_URL OG_IMAGE_CLIENT_REF CLOUDFLARE_API_KEY CLOUDFLARE_ZONE_ID]
end
+
+ def captain_config_options
+ %w[
+ CAPTAIN_OPEN_AI_API_KEY
+ CAPTAIN_OPEN_AI_MODEL
+ CAPTAIN_OPEN_AI_ENDPOINT
+ CAPTAIN_EMBEDDING_MODEL
+ CAPTAIN_FIRECRAWL_API_KEY
+ ]
+ end
end
diff --git a/enterprise/app/jobs/saml/update_account_users_provider_job.rb b/enterprise/app/jobs/saml/update_account_users_provider_job.rb
new file mode 100644
index 000000000..46f47829d
--- /dev/null
+++ b/enterprise/app/jobs/saml/update_account_users_provider_job.rb
@@ -0,0 +1,33 @@
+class Saml::UpdateAccountUsersProviderJob < ApplicationJob
+ queue_as :default
+
+ # Updates the authentication provider for users in an account
+ # This job is triggered when SAML settings are created or destroyed
+ def perform(account_id, provider)
+ account = Account.find(account_id)
+ account.users.find_each(batch_size: 1000) do |user|
+ next unless should_update_user_provider?(user, provider)
+
+ # rubocop:disable Rails/SkipsModelValidations
+ user.update_column(:provider, provider)
+ # rubocop:enable Rails/SkipsModelValidations
+ end
+ end
+
+ private
+
+ # Determines if a user's provider should be updated based on their multi-account status
+ # When resetting to 'email', only update users who don't have SAML enabled on other accounts
+ # This prevents breaking SAML authentication for users who belong to multiple accounts
+ def should_update_user_provider?(user, provider)
+ return !user_has_other_saml_accounts?(user) if provider == 'email'
+
+ true
+ end
+
+ # Checks if the user belongs to any other accounts that have SAML configured
+ # Used to preserve SAML authentication when one account disables SAML but others still use it
+ def user_has_other_saml_accounts?(user)
+ user.accounts.joins(:saml_settings).exists?
+ end
+end
diff --git a/enterprise/app/models/account_saml_settings.rb b/enterprise/app/models/account_saml_settings.rb
index 25e8aeffe..9e37f1c82 100644
--- a/enterprise/app/models/account_saml_settings.rb
+++ b/enterprise/app/models/account_saml_settings.rb
@@ -23,9 +23,13 @@ class AccountSamlSettings < ApplicationRecord
validates :sso_url, presence: true
validates :certificate, presence: true
validates :idp_entity_id, presence: true
+ validate :certificate_must_be_valid_x509
before_validation :set_sp_entity_id, if: :sp_entity_id_needs_generation?
+ after_create_commit :update_account_users_provider
+ after_destroy_commit :reset_account_users_provider
+
def saml_enabled?
sso_url.present? && certificate.present?
end
@@ -56,4 +60,20 @@ class AccountSamlSettings < ApplicationRecord
def installation_name
GlobalConfigService.load('INSTALLATION_NAME', 'Chatwoot')
end
+
+ def update_account_users_provider
+ Saml::UpdateAccountUsersProviderJob.perform_later(account_id, 'saml')
+ end
+
+ def reset_account_users_provider
+ Saml::UpdateAccountUsersProviderJob.perform_later(account_id, 'email')
+ end
+
+ def certificate_must_be_valid_x509
+ return if certificate.blank?
+
+ OpenSSL::X509::Certificate.new(certificate)
+ rescue OpenSSL::X509::CertificateError
+ errors.add(:certificate, I18n.t('errors.account_saml_settings.invalid_certificate'))
+ end
end
diff --git a/enterprise/app/views/devise/mailer/confirmation_instructions.html.erb b/enterprise/app/views/devise/mailer/confirmation_instructions.html.erb
new file mode 100644
index 000000000..91837f980
--- /dev/null
+++ b/enterprise/app/views/devise/mailer/confirmation_instructions.html.erb
@@ -0,0 +1,45 @@
+Hi <%= @resource.name %>,
+
+<% account_user = @resource&.account_users&.first %>
+<% is_saml_account = account_user&.account&.saml_enabled? %>
+
+<% if account_user&.inviter.present? && @resource.unconfirmed_email.blank? %>
+ <% if is_saml_account %>
+ <%= account_user.inviter.name %>, with <%= account_user.account.name %>, has invited you to access <%= global_config['BRAND_NAME'] || 'Chatwoot' %> via Single Sign-On (SSO).
+ Your organization uses SSO for secure authentication. You will not need a password to access your account.
+ <% else %>
+ <%= account_user.inviter.name %>, with <%= account_user.account.name %>, has invited you to try out <%= global_config['BRAND_NAME'] || 'Chatwoot' %>.
+ <% end %>
+<% end %>
+
+<% if @resource.confirmed? %>
+ You can login to your <%= global_config['BRAND_NAME'] || 'Chatwoot' %> account through the link below:
+<% else %>
+ <% if account_user&.inviter.blank? %>
+
+ Welcome to <%= global_config['BRAND_NAME'] || 'Chatwoot' %>! We have a suite of powerful tools ready for you to explore. Before that we quickly need to verify your email address to know it's really you.
+
+ <% end %>
+ <% unless is_saml_account %>
+ Please take a moment and click the link below and activate your account.
+ <% end %>
+<% end %>
+
+
+<% if @resource.unconfirmed_email.present? %>
+ <%= link_to 'Confirm my account', frontend_url('auth/confirmation', confirmation_token: @token) %>
+<% elsif @resource.confirmed? %>
+ <% if is_saml_account %>
+ You can now access your account by logging in through your organization's SSO portal.
+ <% else %>
+ <%= link_to 'Login to my account', frontend_url('auth/sign_in') %>
+ <% end %>
+<% elsif account_user&.inviter.present? %>
+ <% if is_saml_account %>
+ You can access your account by logging in through your organization's SSO portal.
+ <% else %>
+ <%= link_to 'Confirm my account', frontend_url('auth/password/edit', reset_password_token: @resource.send(:set_reset_password_token)) %>
+ <% end %>
+<% else %>
+ <%= link_to 'Confirm my account', frontend_url('auth/confirmation', confirmation_token: @token) %>
+<% end %>
diff --git a/enterprise/lib/tasks.rb b/enterprise/lib/tasks.rb
deleted file mode 100644
index 139819bbb..000000000
--- a/enterprise/lib/tasks.rb
+++ /dev/null
@@ -1,4 +0,0 @@
-# Load all rake tasks from the enterprise/lib/tasks directory
-module Tasks
- Dir.glob(File.join(File.dirname(__FILE__), 'tasks', '*.rake')).each { |r| load r }
-end
diff --git a/enterprise/lib/tasks/search.rake b/enterprise/lib/tasks/search.rake
index 03bad2c1b..4ec137434 100644
--- a/enterprise/lib/tasks/search.rake
+++ b/enterprise/lib/tasks/search.rake
@@ -1,22 +1,4 @@
-module Tasks::SearchTaskHelpers
- def check_opensearch_config
- if ENV['OPENSEARCH_URL'].blank?
- puts 'Skipping reindex as OPENSEARCH_URL is not configured'
- return false
- end
- true
- end
-
- def reindex_account(account)
- Messages::ReindexService.new(account: account).perform
- puts "Reindex task queued for account #{account.id}"
- end
-end
-
namespace :search do
- desc 'Reindex messages using searchkick'
- include Tasks::SearchTaskHelpers
-
desc 'Reindex messages for all accounts'
task all: :environment do
next unless check_opensearch_config
@@ -47,3 +29,16 @@ namespace :search do
reindex_account(account)
end
end
+
+def check_opensearch_config
+ if ENV['OPENSEARCH_URL'].blank?
+ puts 'Skipping reindex as OPENSEARCH_URL is not configured'
+ return false
+ end
+ true
+end
+
+def reindex_account(account)
+ Messages::ReindexService.new(account: account).perform
+ puts "Reindex task queued for account #{account.id}"
+end
diff --git a/enterprise/tasks_railtie.rb b/enterprise/tasks_railtie.rb
new file mode 100644
index 000000000..9a7d09360
--- /dev/null
+++ b/enterprise/tasks_railtie.rb
@@ -0,0 +1,8 @@
+# frozen_string_literal: true
+
+class TasksRailtie < Rails::Railtie
+ rake_tasks do
+ # Load all rake tasks from enterprise/lib/tasks
+ Dir.glob(Rails.root.join('enterprise/lib/tasks/**/*.rake')).each { |f| load f }
+ end
+end
diff --git a/lib/integrations/openai_base_service.rb b/lib/integrations/openai_base_service.rb
index f06baf5b5..7b4a93f95 100644
--- a/lib/integrations/openai_base_service.rb
+++ b/lib/integrations/openai_base_service.rb
@@ -81,7 +81,7 @@ class Integrations::OpenaiBaseService
end
def api_url
- endpoint = InstallationConfig.find_by(name: 'CAPTAIN_OPEN_AI_ENDPOINT')&.value || 'https://api.openai.com/'
+ endpoint = InstallationConfig.find_by(name: 'CAPTAIN_OPEN_AI_ENDPOINT')&.value.presence || 'https://api.openai.com/'
endpoint = endpoint.chomp('/')
"#{endpoint}/v1/chat/completions"
end
diff --git a/spec/controllers/api/v1/accounts/portals_controller_spec.rb b/spec/controllers/api/v1/accounts/portals_controller_spec.rb
index d0ea13e2b..f38660706 100644
--- a/spec/controllers/api/v1/accounts/portals_controller_spec.rb
+++ b/spec/controllers/api/v1/accounts/portals_controller_spec.rb
@@ -154,6 +154,25 @@ RSpec.describe 'Api::V1::Accounts::Portals', type: :request do
portal.reload
expect(portal.archived).to be_truthy
end
+
+ it 'clears associated web widget when inbox selection is blank' do
+ web_widget_inbox = create(:inbox, account: account)
+ portal.update!(channel_web_widget: web_widget_inbox.channel)
+
+ expect(portal.channel_web_widget_id).to eq(web_widget_inbox.channel.id)
+
+ put "/api/v1/accounts/#{account.id}/portals/#{portal.slug}",
+ params: {
+ portal: { name: portal.name },
+ inbox_id: ''
+ },
+ headers: admin.create_new_auth_token
+
+ expect(response).to have_http_status(:success)
+ portal.reload
+ expect(portal.channel_web_widget_id).to be_nil
+ expect(response.parsed_body['inbox']).to be_nil
+ end
end
end
diff --git a/spec/controllers/api/v1/accounts/whatsapp/authorizations_controller_spec.rb b/spec/controllers/api/v1/accounts/whatsapp/authorizations_controller_spec.rb
index 2e74817a7..7beafb47b 100644
--- a/spec/controllers/api/v1/accounts/whatsapp/authorizations_controller_spec.rb
+++ b/spec/controllers/api/v1/accounts/whatsapp/authorizations_controller_spec.rb
@@ -16,31 +16,7 @@ RSpec.describe 'WhatsApp Authorization API', type: :request do
let(:agent) { create(:user, account: account, role: :agent) }
let(:administrator) { create(:user, account: account, role: :administrator) }
- context 'when feature is not enabled' do
- before do
- account.disable_features!(:whatsapp_embedded_signup)
- end
-
- it 'returns forbidden' do
- post "/api/v1/accounts/#{account.id}/whatsapp/authorization",
- params: {
- code: 'test_code',
- business_id: 'test_business_id',
- waba_id: 'test_waba_id'
- },
- headers: agent.create_new_auth_token,
- as: :json
-
- expect(response).to have_http_status(:forbidden)
- expect(response.parsed_body['error']).to eq('WhatsApp embedded signup is not enabled for this account')
- end
- end
-
- context 'when feature is enabled' do
- before do
- account.enable_features!(:whatsapp_embedded_signup)
- end
-
+ context 'when authenticated user makes request' do
it 'returns unprocessable entity when code is missing' do
post "/api/v1/accounts/#{account.id}/whatsapp/authorization",
params: {
@@ -246,10 +222,6 @@ RSpec.describe 'WhatsApp Authorization API', type: :request do
context 'when user is not authorized for the account' do
let(:other_account) { create(:account) }
- before do
- account.enable_features!(:whatsapp_embedded_signup)
- end
-
it 'returns unauthorized' do
post "/api/v1/accounts/#{other_account.id}/whatsapp/authorization",
params: {
@@ -265,10 +237,6 @@ RSpec.describe 'WhatsApp Authorization API', type: :request do
end
context 'when user is an administrator' do
- before do
- account.enable_features!(:whatsapp_embedded_signup)
- end
-
it 'allows channel creation' do
embedded_signup_service = instance_double(Whatsapp::EmbeddedSignupService)
whatsapp_channel = create(:channel_whatsapp, account: account, validate_provider_config: false, sync_templates: false)
@@ -321,10 +289,6 @@ RSpec.describe 'WhatsApp Authorization API', type: :request do
context 'when user is an administrator' do
let(:administrator) { create(:user, account: account, role: :administrator) }
- before do
- account.enable_features!(:whatsapp_embedded_signup)
- end
-
context 'with valid parameters' do
let(:valid_params) do
{
@@ -489,7 +453,6 @@ RSpec.describe 'WhatsApp Authorization API', type: :request do
let(:agent) { create(:user, account: account, role: :agent) }
before do
- account.enable_features!(:whatsapp_embedded_signup)
create(:inbox_member, inbox: whatsapp_inbox, user: agent)
end
diff --git a/spec/enterprise/builders/agent_builder_spec.rb b/spec/enterprise/builders/agent_builder_spec.rb
new file mode 100644
index 000000000..8f0ae4c17
--- /dev/null
+++ b/spec/enterprise/builders/agent_builder_spec.rb
@@ -0,0 +1,139 @@
+require 'rails_helper'
+
+RSpec.describe AgentBuilder do
+ let(:email) { 'agent@example.com' }
+ let(:name) { 'Test Agent' }
+ let(:account) { create(:account) }
+ let!(:inviter) { create(:user, account: account, role: 'administrator') }
+ let(:builder) do
+ described_class.new(
+ email: email,
+ name: name,
+ account: account,
+ inviter: inviter
+ )
+ end
+
+ describe '#perform with SAML enabled' do
+ let(:saml_settings) do
+ create(:account_saml_settings, account: account)
+ end
+
+ before { saml_settings }
+
+ context 'when user does not exist' do
+ it 'creates a new user with SAML provider' do
+ expect { builder.perform }.to change(User, :count).by(1)
+
+ user = User.from_email(email)
+ expect(user.provider).to eq('saml')
+ end
+
+ it 'creates user with correct attributes' do
+ user = builder.perform
+
+ expect(user.email).to eq(email)
+ expect(user.name).to eq(name)
+ expect(user.provider).to eq('saml')
+ expect(user.encrypted_password).to be_present
+ end
+
+ it 'adds user to the account with correct role' do
+ user = builder.perform
+ account_user = AccountUser.find_by(user: user, account: account)
+
+ expect(account_user).to be_present
+ expect(account_user.role).to eq('agent')
+ expect(account_user.inviter).to eq(inviter)
+ end
+ end
+
+ context 'when user already exists with email provider' do
+ let!(:existing_user) { create(:user, email: email, provider: 'email') }
+
+ it 'does not create a new user' do
+ expect { builder.perform }.not_to change(User, :count)
+ end
+
+ it 'converts existing user to SAML provider' do
+ expect(existing_user.provider).to eq('email')
+
+ builder.perform
+
+ expect(existing_user.reload.provider).to eq('saml')
+ end
+
+ it 'adds existing user to the account' do
+ user = builder.perform
+ account_user = AccountUser.find_by(user: user, account: account)
+
+ expect(account_user).to be_present
+ expect(account_user.inviter).to eq(inviter)
+ end
+ end
+
+ context 'when user already exists with SAML provider' do
+ let!(:existing_user) { create(:user, email: email, provider: 'saml') }
+
+ it 'does not change the provider' do
+ expect { builder.perform }.not_to(change { existing_user.reload.provider })
+ end
+
+ it 'still adds user to the account' do
+ user = builder.perform
+ account_user = AccountUser.find_by(user: user, account: account)
+
+ expect(account_user).to be_present
+ end
+ end
+ end
+
+ describe '#perform without SAML' do
+ context 'when user does not exist' do
+ it 'creates a new user with email provider (default behavior)' do
+ expect { builder.perform }.to change(User, :count).by(1)
+
+ user = User.from_email(email)
+ expect(user.provider).to eq('email')
+ end
+ end
+
+ context 'when user already exists' do
+ let!(:existing_user) { create(:user, email: email, provider: 'email') }
+
+ it 'does not change the existing user provider' do
+ expect { builder.perform }.not_to(change { existing_user.reload.provider })
+ end
+ end
+ end
+
+ describe '#perform with different account configurations' do
+ context 'when account has no SAML settings' do
+ # No saml_settings created for this account
+
+ it 'treats account as non-SAML enabled' do
+ user = builder.perform
+ expect(user.provider).to eq('email')
+ end
+ end
+
+ context 'when SAML settings are deleted after user creation' do
+ let(:saml_settings) do
+ create(:account_saml_settings, account: account)
+ end
+ let(:existing_user) { create(:user, email: email, provider: 'saml') }
+
+ before do
+ saml_settings
+ existing_user
+ end
+
+ it 'does not affect existing SAML users when adding to account' do
+ saml_settings.destroy!
+
+ user = builder.perform
+ expect(user.provider).to eq('saml') # Unchanged
+ end
+ end
+ end
+end
diff --git a/spec/enterprise/builders/saml_user_builder_spec.rb b/spec/enterprise/builders/saml_user_builder_spec.rb
index 63fd65fd3..434beda16 100644
--- a/spec/enterprise/builders/saml_user_builder_spec.rb
+++ b/spec/enterprise/builders/saml_user_builder_spec.rb
@@ -109,6 +109,56 @@ RSpec.describe SamlUserBuilder do
expect { builder.perform }.not_to change(AccountUser, :count)
end
+
+ context 'when user is not confirmed' do
+ let(:unconfirmed_email) { 'unconfirmed_saml_user@example.com' }
+ let(:unconfirmed_auth_hash) do
+ {
+ 'provider' => 'saml',
+ 'uid' => 'saml-uid-123',
+ 'info' => {
+ 'email' => unconfirmed_email,
+ 'name' => 'SAML User',
+ 'first_name' => 'SAML',
+ 'last_name' => 'User'
+ },
+ 'extra' => {
+ 'raw_info' => {
+ 'groups' => %w[Administrators Users]
+ }
+ }
+ }
+ end
+ let(:unconfirmed_builder) { described_class.new(unconfirmed_auth_hash, account.id) }
+ let!(:existing_user) do
+ user = build(:user, email: unconfirmed_email)
+ user.confirmed_at = nil
+ user.save!(validate: false)
+ user
+ end
+
+ it 'confirms unconfirmed user after SAML authentication' do
+ expect(existing_user.confirmed?).to be false
+
+ unconfirmed_builder.perform
+
+ expect(existing_user.reload.confirmed?).to be true
+ end
+ end
+
+ context 'when user is already confirmed' do
+ let!(:existing_user) { create(:user, email: email, confirmed_at: Time.current) }
+
+ it 'keeps already confirmed user confirmed' do
+ expect(existing_user.confirmed?).to be true
+ original_confirmed_at = existing_user.confirmed_at
+
+ builder.perform
+
+ expect(existing_user.reload.confirmed?).to be true
+ expect(existing_user.reload.confirmed_at).to be_within(2.seconds).of(original_confirmed_at)
+ end
+ end
end
context 'with role mappings' do
diff --git a/spec/enterprise/jobs/saml/update_account_users_provider_job_spec.rb b/spec/enterprise/jobs/saml/update_account_users_provider_job_spec.rb
new file mode 100644
index 000000000..82bb6b015
--- /dev/null
+++ b/spec/enterprise/jobs/saml/update_account_users_provider_job_spec.rb
@@ -0,0 +1,65 @@
+require 'rails_helper'
+
+RSpec.describe Saml::UpdateAccountUsersProviderJob, type: :job do
+ let(:account) { create(:account) }
+ let!(:user1) { create(:user, accounts: [account], provider: 'email') }
+ let!(:user2) { create(:user, accounts: [account], provider: 'email') }
+ let!(:user3) { create(:user, accounts: [account], provider: 'google') }
+
+ describe '#perform' do
+ context 'when setting provider to saml' do
+ it 'updates all account users to saml provider' do
+ described_class.new.perform(account.id, 'saml')
+
+ expect(user1.reload.provider).to eq('saml')
+ expect(user2.reload.provider).to eq('saml')
+ expect(user3.reload.provider).to eq('saml')
+ end
+ end
+
+ context 'when resetting provider to email' do
+ before do
+ # rubocop:disable Rails/SkipsModelValidations
+ user1.update_column(:provider, 'saml')
+ user2.update_column(:provider, 'saml')
+ user3.update_column(:provider, 'saml')
+ # rubocop:enable Rails/SkipsModelValidations
+ end
+
+ context 'when users have no other SAML accounts' do
+ it 'updates all account users to email provider' do
+ described_class.new.perform(account.id, 'email')
+
+ expect(user1.reload.provider).to eq('email')
+ expect(user2.reload.provider).to eq('email')
+ expect(user3.reload.provider).to eq('email')
+ end
+ end
+
+ context 'when users belong to other accounts with SAML enabled' do
+ let(:other_account) { create(:account) }
+
+ before do
+ create(:account_saml_settings, account: other_account)
+ user1.account_users.create!(account: other_account, role: :agent)
+ end
+
+ it 'preserves SAML provider for users with other SAML accounts' do
+ described_class.new.perform(account.id, 'email')
+
+ expect(user1.reload.provider).to eq('saml')
+ expect(user2.reload.provider).to eq('email')
+ expect(user3.reload.provider).to eq('email')
+ end
+ end
+ end
+
+ context 'when account does not exist' do
+ it 'raises ActiveRecord::RecordNotFound' do
+ expect do
+ described_class.new.perform(999_999, 'saml')
+ end.to raise_error(ActiveRecord::RecordNotFound)
+ end
+ end
+ end
+end
diff --git a/spec/enterprise/mailers/devise_mailer_spec.rb b/spec/enterprise/mailers/devise_mailer_spec.rb
new file mode 100644
index 000000000..286e863f7
--- /dev/null
+++ b/spec/enterprise/mailers/devise_mailer_spec.rb
@@ -0,0 +1,150 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe 'Devise::Mailer' do
+ describe 'confirmation_instructions with Enterprise features' do
+ let(:account) { create(:account) }
+ let!(:confirmable_user) { create(:user, inviter: inviter_val, account: account) }
+ let(:inviter_val) { nil }
+ let(:mail) { Devise::Mailer.confirmation_instructions(confirmable_user.reload, nil, {}) }
+
+ before do
+ confirmable_user.update!(confirmed_at: nil)
+ confirmable_user.send(:generate_confirmation_token)
+ end
+
+ context 'with SAML enabled account' do
+ let(:saml_settings) { create(:account_saml_settings, account: account) }
+
+ before { saml_settings }
+
+ context 'when user has no inviter' do
+ it 'shows standard welcome message without SSO references' do
+ expect(mail.body).to match('We have a suite of powerful tools ready for you to explore.')
+ expect(mail.body).not_to match('via Single Sign-On')
+ end
+
+ it 'does not show activation instructions for SAML accounts' do
+ expect(mail.body).not_to match('Please take a moment and click the link below and activate your account')
+ end
+
+ it 'shows confirmation link' do
+ expect(mail.body).to include("app/auth/confirmation?confirmation_token=#{confirmable_user.confirmation_token}")
+ end
+ end
+
+ context 'when user has inviter and SAML is enabled' do
+ let(:inviter_val) { create(:user, :administrator, skip_confirmation: true, account: account) }
+
+ it 'mentions SSO invitation' do
+ expect(mail.body).to match(
+ "#{CGI.escapeHTML(inviter_val.name)}, with #{CGI.escapeHTML(account.name)}, has invited you to access.*via Single Sign-On \\(SSO\\)"
+ )
+ end
+
+ it 'explains SSO authentication' do
+ expect(mail.body).to match('Your organization uses SSO for secure authentication')
+ expect(mail.body).to match('You will not need a password to access your account')
+ end
+
+ it 'does not show standard invitation message' do
+ expect(mail.body).not_to match('has invited you to try out')
+ end
+
+ it 'directs to SSO portal instead of password reset' do
+ expect(mail.body).to match('You can access your account by logging in through your organization\'s SSO portal')
+ expect(mail.body).not_to include('app/auth/password/edit')
+ end
+ end
+
+ context 'when user is already confirmed and has inviter' do
+ let(:inviter_val) { create(:user, :administrator, skip_confirmation: true, account: account) }
+
+ before do
+ confirmable_user.confirm
+ end
+
+ it 'shows SSO login instructions' do
+ expect(mail.body).to match('You can now access your account by logging in through your organization\'s SSO portal')
+ expect(mail.body).not_to include('/auth/sign_in')
+ end
+ end
+
+ context 'when user updates email on SAML account' do
+ let(:inviter_val) { create(:user, :administrator, skip_confirmation: true, account: account) }
+
+ before do
+ confirmable_user.update!(email: 'updated@example.com')
+ end
+
+ it 'still shows confirmation link for email verification' do
+ expect(mail.body).to include('app/auth/confirmation?confirmation_token')
+ expect(confirmable_user.unconfirmed_email.blank?).to be false
+ end
+ end
+
+ context 'when user is already confirmed with no inviter' do
+ before do
+ confirmable_user.confirm
+ end
+
+ it 'shows SSO login instructions instead of regular login' do
+ expect(mail.body).to match('You can now access your account by logging in through your organization\'s SSO portal')
+ expect(mail.body).not_to include('/auth/sign_in')
+ end
+ end
+ end
+
+ context 'when account does not have SAML enabled' do
+ context 'when user has inviter' do
+ let(:inviter_val) { create(:user, :administrator, skip_confirmation: true, account: account) }
+
+ it 'shows standard invitation without SSO references' do
+ expect(mail.body).to match('has invited you to try out Chatwoot')
+ expect(mail.body).not_to match('via Single Sign-On')
+ expect(mail.body).not_to match('SSO portal')
+ end
+
+ it 'shows password reset link' do
+ expect(mail.body).to include('app/auth/password/edit')
+ end
+ end
+
+ context 'when user has no inviter' do
+ it 'shows standard welcome message and activation instructions' do
+ expect(mail.body).to match('We have a suite of powerful tools ready for you to explore')
+ expect(mail.body).to match('Please take a moment and click the link below and activate your account')
+ end
+
+ it 'shows confirmation link' do
+ expect(mail.body).to include("app/auth/confirmation?confirmation_token=#{confirmable_user.confirmation_token}")
+ end
+ end
+
+ context 'when user is already confirmed' do
+ let(:inviter_val) { create(:user, :administrator, skip_confirmation: true, account: account) }
+
+ before do
+ confirmable_user.confirm
+ end
+
+ it 'shows regular login link' do
+ expect(mail.body).to include('/auth/sign_in')
+ expect(mail.body).not_to match('SSO portal')
+ end
+ end
+
+ context 'when user updates email' do
+ before do
+ confirmable_user.update!(email: 'updated@example.com')
+ end
+
+ it 'shows confirmation link for email verification' do
+ expect(mail.body).to include('app/auth/confirmation?confirmation_token')
+ expect(confirmable_user.unconfirmed_email.blank?).to be false
+ end
+ end
+ end
+ end
+end
diff --git a/spec/enterprise/models/account_saml_settings_spec.rb b/spec/enterprise/models/account_saml_settings_spec.rb
index 65d5119d7..ac35eb486 100644
--- a/spec/enterprise/models/account_saml_settings_spec.rb
+++ b/spec/enterprise/models/account_saml_settings_spec.rb
@@ -114,4 +114,21 @@ RSpec.describe AccountSamlSettings, type: :model do
expect(fingerprint.count(':')).to eq(19) # 20 bytes = 19 colons
end
end
+
+ describe 'callbacks' do
+ describe 'after_create_commit' do
+ it 'queues job to set account users to saml provider' do
+ expect(Saml::UpdateAccountUsersProviderJob).to receive(:perform_later).with(account.id, 'saml')
+ create(:account_saml_settings, account: account)
+ end
+ end
+
+ describe 'after_destroy_commit' do
+ it 'queues job to reset account users provider' do
+ settings = create(:account_saml_settings, account: account)
+ expect(Saml::UpdateAccountUsersProviderJob).to receive(:perform_later).with(account.id, 'email')
+ settings.destroy
+ end
+ end
+ end
end
diff --git a/spec/enterprise/models/inbox_spec.rb b/spec/enterprise/models/inbox_spec.rb
index b0e063600..6b0130c28 100644
--- a/spec/enterprise/models/inbox_spec.rb
+++ b/spec/enterprise/models/inbox_spec.rb
@@ -29,7 +29,7 @@ RSpec.describe Inbox do
it 'returns member ids with assignment capacity with inbox max_assignment_limit is configured' do
# agent 1 has 1 conversations, agent 2 has 2 conversations, agent 3 has 3 conversations and agent 4 with none
inbox.update(auto_assignment_config: { max_assignment_limit: 2 })
- expect(inbox.member_ids_with_assignment_capacity).to eq([inbox_member_1.user_id, inbox_member_4.user_id])
+ expect(inbox.member_ids_with_assignment_capacity).to contain_exactly(inbox_member_1.user_id, inbox_member_4.user_id)
end
it 'returns all member ids when inbox max_assignment_limit is not configured' do
diff --git a/spec/models/concerns/featurable_spec.rb b/spec/models/concerns/featurable_spec.rb
deleted file mode 100644
index 1cf0b87f2..000000000
--- a/spec/models/concerns/featurable_spec.rb
+++ /dev/null
@@ -1,57 +0,0 @@
-require 'rails_helper'
-
-RSpec.describe Featurable do
- let(:account) { create(:account) }
-
- describe 'WhatsApp embedded signup feature' do
- it 'is disabled by default' do
- expect(account.feature_whatsapp_embedded_signup?).to be false
- expect(account.feature_enabled?('whatsapp_embedded_signup')).to be false
- end
-
- describe '#enable_features!' do
- it 'enables the whatsapp embedded signup feature' do
- account.enable_features!(:whatsapp_embedded_signup)
- expect(account.feature_whatsapp_embedded_signup?).to be true
- expect(account.feature_enabled?('whatsapp_embedded_signup')).to be true
- end
-
- it 'enables multiple features at once' do
- account.enable_features!(:whatsapp_embedded_signup, :help_center)
- expect(account.feature_whatsapp_embedded_signup?).to be true
- expect(account.feature_help_center?).to be true
- end
- end
-
- describe '#disable_features!' do
- before do
- account.enable_features!(:whatsapp_embedded_signup)
- end
-
- it 'disables the whatsapp embedded signup feature' do
- expect(account.feature_whatsapp_embedded_signup?).to be true
-
- account.disable_features!(:whatsapp_embedded_signup)
- expect(account.feature_whatsapp_embedded_signup?).to be false
- end
- end
-
- describe '#enabled_features' do
- it 'includes whatsapp_embedded_signup when enabled' do
- account.enable_features!(:whatsapp_embedded_signup)
- expect(account.enabled_features).to include('whatsapp_embedded_signup' => true)
- end
-
- it 'does not include whatsapp_embedded_signup when disabled' do
- account.disable_features!(:whatsapp_embedded_signup)
- expect(account.enabled_features).not_to include('whatsapp_embedded_signup' => true)
- end
- end
-
- describe '#all_features' do
- it 'includes whatsapp_embedded_signup in all features list' do
- expect(account.all_features).to have_key('whatsapp_embedded_signup')
- end
- end
- end
-end
diff --git a/spec/services/widget/token_service_expiry_spec.rb b/spec/services/widget/token_service_expiry_spec.rb
new file mode 100644
index 000000000..051a757a5
--- /dev/null
+++ b/spec/services/widget/token_service_expiry_spec.rb
@@ -0,0 +1,42 @@
+require 'rails_helper'
+
+RSpec.describe Widget::TokenService, type: :service do
+ describe 'token expiry configuration' do
+ let(:service) { described_class.new(payload: {}) }
+
+ before do
+ # Clear any existing configs to ensure test isolation
+ InstallationConfig.where(name: 'WIDGET_TOKEN_EXPIRY').destroy_all
+ end
+
+ context 'with valid configuration' do
+ before do
+ create(:installation_config, name: 'WIDGET_TOKEN_EXPIRY', value: '30')
+ end
+
+ it 'uses the configured value for token expiry' do
+ freeze_time do
+ token = service.generate_token
+ decoded = JWT.decode(token, Rails.application.secret_key_base, true, algorithm: 'HS256').first
+ expect(decoded['iat']).to eq(Time.now.to_i)
+ expect(decoded['exp']).to eq(30.days.from_now.to_i)
+ end
+ end
+ end
+
+ context 'with empty configuration' do
+ before do
+ create(:installation_config, name: 'WIDGET_TOKEN_EXPIRY', value: '')
+ end
+
+ it 'uses the default expiry' do
+ freeze_time do
+ token = service.generate_token
+ decoded = JWT.decode(token, Rails.application.secret_key_base, true, algorithm: 'HS256').first
+ expect(decoded['iat']).to eq(Time.now.to_i)
+ expect(decoded['exp']).to eq(180.days.from_now.to_i)
+ end
+ end
+ end
+ end
+end