Compare commits
9
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
661f3065fc | ||
|
|
11fb464501 | ||
|
|
02a4fc9e54 | ||
|
|
43395be4d4 | ||
|
|
7b237372b0 | ||
|
|
aba68158bb | ||
|
|
883d80b144 | ||
|
|
43367d57a8 | ||
|
|
250558c2f6 |
@@ -256,8 +256,6 @@ AZURE_APP_SECRET=
|
|||||||
## Change these values to fine tune performance
|
## Change these values to fine tune performance
|
||||||
# control the concurrency setting of sidekiq
|
# control the concurrency setting of sidekiq
|
||||||
# SIDEKIQ_CONCURRENCY=10
|
# SIDEKIQ_CONCURRENCY=10
|
||||||
# Enable verbose logging each time a job is dequeued in Sidekiq
|
|
||||||
# ENABLE_SIDEKIQ_DEQUEUE_LOGGER=false
|
|
||||||
|
|
||||||
|
|
||||||
# AI powered features
|
# AI powered features
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ gem 'telephone_number'
|
|||||||
gem 'time_diff'
|
gem 'time_diff'
|
||||||
gem 'tzinfo-data'
|
gem 'tzinfo-data'
|
||||||
gem 'valid_email2'
|
gem 'valid_email2'
|
||||||
gem 'email-provider-info'
|
|
||||||
# compress javascript config.assets.js_compressor
|
# compress javascript config.assets.js_compressor
|
||||||
gem 'uglifier'
|
gem 'uglifier'
|
||||||
##-- used for single column multiple binary flags in notification settings/feature flagging --##
|
##-- used for single column multiple binary flags in notification settings/feature flagging --##
|
||||||
|
|||||||
+2
-4
@@ -270,7 +270,6 @@ GEM
|
|||||||
concurrent-ruby (~> 1.0)
|
concurrent-ruby (~> 1.0)
|
||||||
http (>= 3.0)
|
http (>= 3.0)
|
||||||
ruby2_keywords
|
ruby2_keywords
|
||||||
email-provider-info (0.0.1)
|
|
||||||
email_reply_trimmer (0.1.13)
|
email_reply_trimmer (0.1.13)
|
||||||
erubi (1.13.0)
|
erubi (1.13.0)
|
||||||
et-orbi (1.2.11)
|
et-orbi (1.2.11)
|
||||||
@@ -595,7 +594,7 @@ GEM
|
|||||||
oj (3.16.10)
|
oj (3.16.10)
|
||||||
bigdecimal (>= 3.0)
|
bigdecimal (>= 3.0)
|
||||||
ostruct (>= 0.2)
|
ostruct (>= 0.2)
|
||||||
omniauth (2.1.4)
|
omniauth (2.1.3)
|
||||||
hashie (>= 3.4.6)
|
hashie (>= 3.4.6)
|
||||||
logger
|
logger
|
||||||
rack (>= 2.2.3)
|
rack (>= 2.2.3)
|
||||||
@@ -654,7 +653,7 @@ GEM
|
|||||||
rack (>= 2.0.0)
|
rack (>= 2.0.0)
|
||||||
rack-mini-profiler (3.2.0)
|
rack-mini-profiler (3.2.0)
|
||||||
rack (>= 1.2.0)
|
rack (>= 1.2.0)
|
||||||
rack-protection (4.2.1)
|
rack-protection (4.1.1)
|
||||||
base64 (>= 0.1.0)
|
base64 (>= 0.1.0)
|
||||||
logger (>= 1.6.0)
|
logger (>= 1.6.0)
|
||||||
rack (>= 3.0.0, < 4)
|
rack (>= 3.0.0, < 4)
|
||||||
@@ -1017,7 +1016,6 @@ DEPENDENCIES
|
|||||||
dotenv-rails (>= 3.0.0)
|
dotenv-rails (>= 3.0.0)
|
||||||
down
|
down
|
||||||
elastic-apm
|
elastic-apm
|
||||||
email-provider-info
|
|
||||||
email_reply_trimmer
|
email_reply_trimmer
|
||||||
facebook-messenger
|
facebook-messenger
|
||||||
factory_bot_rails (>= 6.4.3)
|
factory_bot_rails (>= 6.4.3)
|
||||||
|
|||||||
@@ -36,10 +36,6 @@
|
|||||||
"REDIS_OPENSSL_VERIFY_MODE":{
|
"REDIS_OPENSSL_VERIFY_MODE":{
|
||||||
"description": "OpenSSL verification mode for Redis connections. ref https://help.heroku.com/HC0F8CUS/redis-connection-issues",
|
"description": "OpenSSL verification mode for Redis connections. ref https://help.heroku.com/HC0F8CUS/redis-connection-issues",
|
||||||
"value": "none"
|
"value": "none"
|
||||||
},
|
|
||||||
"NODE_OPTIONS": {
|
|
||||||
"description": "Increase V8 heap for Vite build to avoid OOM",
|
|
||||||
"value": "--max-old-space-size=4096"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"formation": {
|
"formation": {
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ class Messages::MessageBuilder
|
|||||||
process_emails
|
process_emails
|
||||||
# When the message has no quoted content, it will just be rendered as a regular message
|
# When the message has no quoted content, it will just be rendered as a regular message
|
||||||
# The frontend is equipped to handle this case
|
# The frontend is equipped to handle this case
|
||||||
process_email_content
|
process_email_content if @account.feature_enabled?(:quoted_email_reply)
|
||||||
@message.save!
|
@message.save!
|
||||||
@message
|
@message
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,12 +1,13 @@
|
|||||||
class Api::V1::Accounts::BulkActionsController < Api::V1::Accounts::BaseController
|
class Api::V1::Accounts::BulkActionsController < Api::V1::Accounts::BaseController
|
||||||
|
before_action :type_matches?
|
||||||
|
|
||||||
def create
|
def create
|
||||||
case normalized_type
|
if type_matches?
|
||||||
when 'Conversation'
|
::BulkActionsJob.perform_later(
|
||||||
enqueue_conversation_job
|
account: @current_account,
|
||||||
head :ok
|
user: current_user,
|
||||||
when 'Contact'
|
params: permitted_params
|
||||||
check_authorization_for_contact_action
|
)
|
||||||
enqueue_contact_job
|
|
||||||
head :ok
|
head :ok
|
||||||
else
|
else
|
||||||
render json: { success: false }, status: :unprocessable_entity
|
render json: { success: false }, status: :unprocessable_entity
|
||||||
@@ -15,54 +16,11 @@ class Api::V1::Accounts::BulkActionsController < Api::V1::Accounts::BaseControll
|
|||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def normalized_type
|
def type_matches?
|
||||||
params[:type].to_s.camelize
|
['Conversation'].include?(params[:type])
|
||||||
end
|
end
|
||||||
|
|
||||||
def enqueue_conversation_job
|
def permitted_params
|
||||||
::BulkActionsJob.perform_later(
|
params.permit(:type, :snoozed_until, ids: [], fields: [:status, :assignee_id, :team_id], labels: [add: [], remove: []])
|
||||||
account: @current_account,
|
|
||||||
user: current_user,
|
|
||||||
params: conversation_params
|
|
||||||
)
|
|
||||||
end
|
|
||||||
|
|
||||||
def enqueue_contact_job
|
|
||||||
Contacts::BulkActionJob.perform_later(
|
|
||||||
@current_account.id,
|
|
||||||
current_user.id,
|
|
||||||
contact_params
|
|
||||||
)
|
|
||||||
end
|
|
||||||
|
|
||||||
def delete_contact_action?
|
|
||||||
params[:action_name] == 'delete'
|
|
||||||
end
|
|
||||||
|
|
||||||
def check_authorization_for_contact_action
|
|
||||||
authorize(Contact, :destroy?) if delete_contact_action?
|
|
||||||
end
|
|
||||||
|
|
||||||
def conversation_params
|
|
||||||
# TODO: Align conversation payloads with the `{ action_name, action_attributes }`
|
|
||||||
# and then remove this method in favor of a common params method.
|
|
||||||
base = params.permit(
|
|
||||||
:snoozed_until,
|
|
||||||
fields: [:status, :assignee_id, :team_id]
|
|
||||||
)
|
|
||||||
append_common_bulk_attributes(base)
|
|
||||||
end
|
|
||||||
|
|
||||||
def contact_params
|
|
||||||
# TODO: remove this method in favor of a common params method.
|
|
||||||
# once legacy conversation payloads are migrated.
|
|
||||||
append_common_bulk_attributes({})
|
|
||||||
end
|
|
||||||
|
|
||||||
def append_common_bulk_attributes(base_params)
|
|
||||||
# NOTE: Conversation payloads historically diverged per action. Going forward we
|
|
||||||
# want all objects to share a common contract: `{ action_name, action_attributes }`
|
|
||||||
common = params.permit(:type, :action_name, ids: [], labels: [add: [], remove: []])
|
|
||||||
base_params.merge(common)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
-3
@@ -5,7 +5,6 @@ import { useToggle } from '@vueuse/core';
|
|||||||
|
|
||||||
import Button from 'dashboard/components-next/button/Button.vue';
|
import Button from 'dashboard/components-next/button/Button.vue';
|
||||||
import ConfirmContactDeleteDialog from 'dashboard/components-next/Contacts/ContactsForm/ConfirmContactDeleteDialog.vue';
|
import ConfirmContactDeleteDialog from 'dashboard/components-next/Contacts/ContactsForm/ConfirmContactDeleteDialog.vue';
|
||||||
import Policy from 'dashboard/components/policy.vue';
|
|
||||||
|
|
||||||
defineProps({
|
defineProps({
|
||||||
selectedContact: {
|
selectedContact: {
|
||||||
@@ -25,7 +24,6 @@ const openConfirmDeleteContactDialog = () => {
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<Policy :permissions="['administrator']">
|
|
||||||
<div class="flex flex-col items-start border-t border-n-strong px-6 py-5">
|
<div class="flex flex-col items-start border-t border-n-strong px-6 py-5">
|
||||||
<Button
|
<Button
|
||||||
:label="t('CONTACTS_LAYOUT.DETAILS.DELETE_CONTACT')"
|
:label="t('CONTACTS_LAYOUT.DETAILS.DELETE_CONTACT')"
|
||||||
@@ -64,5 +62,4 @@ const openConfirmDeleteContactDialog = () => {
|
|||||||
ref="confirmDeleteContactDialogRef"
|
ref="confirmDeleteContactDialogRef"
|
||||||
:selected-contact="selectedContact"
|
:selected-contact="selectedContact"
|
||||||
/>
|
/>
|
||||||
</Policy>
|
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ import Button from 'dashboard/components-next/button/Button.vue';
|
|||||||
import Avatar from 'dashboard/components-next/avatar/Avatar.vue';
|
import Avatar from 'dashboard/components-next/avatar/Avatar.vue';
|
||||||
import Flag from 'dashboard/components-next/flag/Flag.vue';
|
import Flag from 'dashboard/components-next/flag/Flag.vue';
|
||||||
import ContactDeleteSection from 'dashboard/components-next/Contacts/ContactsCard/ContactDeleteSection.vue';
|
import ContactDeleteSection from 'dashboard/components-next/Contacts/ContactsCard/ContactDeleteSection.vue';
|
||||||
import Checkbox from 'dashboard/components-next/checkbox/Checkbox.vue';
|
|
||||||
import countries from 'shared/constants/countries';
|
import countries from 'shared/constants/countries';
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
@@ -21,17 +20,9 @@ const props = defineProps({
|
|||||||
availabilityStatus: { type: String, default: null },
|
availabilityStatus: { type: String, default: null },
|
||||||
isExpanded: { type: Boolean, default: false },
|
isExpanded: { type: Boolean, default: false },
|
||||||
isUpdating: { type: Boolean, default: false },
|
isUpdating: { type: Boolean, default: false },
|
||||||
selectable: { type: Boolean, default: false },
|
|
||||||
isSelected: { type: Boolean, default: false },
|
|
||||||
});
|
});
|
||||||
|
|
||||||
const emit = defineEmits([
|
const emit = defineEmits(['toggle', 'updateContact', 'showContact']);
|
||||||
'toggle',
|
|
||||||
'updateContact',
|
|
||||||
'showContact',
|
|
||||||
'select',
|
|
||||||
'avatarHover',
|
|
||||||
]);
|
|
||||||
|
|
||||||
const { t } = useI18n();
|
const { t } = useI18n();
|
||||||
|
|
||||||
@@ -97,31 +88,11 @@ const onClickExpand = () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const onClickViewDetails = () => emit('showContact', props.id);
|
const onClickViewDetails = () => emit('showContact', props.id);
|
||||||
|
|
||||||
const toggleSelect = checked => {
|
|
||||||
emit('select', checked);
|
|
||||||
};
|
|
||||||
|
|
||||||
const handleAvatarHover = isHovered => {
|
|
||||||
emit('avatarHover', isHovered);
|
|
||||||
};
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div class="relative">
|
<CardLayout :key="id" layout="row">
|
||||||
<CardLayout
|
|
||||||
:key="id"
|
|
||||||
layout="row"
|
|
||||||
:class="{
|
|
||||||
'outline-n-weak !bg-n-slate-3 dark:!bg-n-solid-3': isSelected,
|
|
||||||
}"
|
|
||||||
>
|
|
||||||
<div class="flex items-center justify-start flex-1 gap-4">
|
<div class="flex items-center justify-start flex-1 gap-4">
|
||||||
<div
|
|
||||||
class="relative"
|
|
||||||
@mouseenter="handleAvatarHover(true)"
|
|
||||||
@mouseleave="handleAvatarHover(false)"
|
|
||||||
>
|
|
||||||
<Avatar
|
<Avatar
|
||||||
:name="name"
|
:name="name"
|
||||||
:src="thumbnail"
|
:src="thumbnail"
|
||||||
@@ -129,21 +100,7 @@ const handleAvatarHover = isHovered => {
|
|||||||
:status="availabilityStatus"
|
:status="availabilityStatus"
|
||||||
hide-offline-status
|
hide-offline-status
|
||||||
rounded-full
|
rounded-full
|
||||||
>
|
|
||||||
<template v-if="selectable" #overlay="{ size }">
|
|
||||||
<label
|
|
||||||
class="flex items-center justify-center rounded-full cursor-pointer absolute inset-0 z-10 backdrop-blur-[2px] border border-n-weak"
|
|
||||||
:style="{ width: `${size}px`, height: `${size}px` }"
|
|
||||||
@click.stop
|
|
||||||
>
|
|
||||||
<Checkbox
|
|
||||||
:model-value="isSelected"
|
|
||||||
@change="event => toggleSelect(event.target.checked)"
|
|
||||||
/>
|
/>
|
||||||
</label>
|
|
||||||
</template>
|
|
||||||
</Avatar>
|
|
||||||
</div>
|
|
||||||
<div class="flex flex-col gap-0.5 flex-1">
|
<div class="flex flex-col gap-0.5 flex-1">
|
||||||
<div class="flex flex-wrap items-center gap-x-4 gap-y-1">
|
<div class="flex flex-wrap items-center gap-x-4 gap-y-1">
|
||||||
<span class="text-base font-medium truncate text-n-slate-12">
|
<span class="text-base font-medium truncate text-n-slate-12">
|
||||||
@@ -162,9 +119,7 @@ const handleAvatarHover = isHovered => {
|
|||||||
</span>
|
</span>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div class="flex flex-wrap items-center justify-start gap-x-3 gap-y-1">
|
||||||
class="flex flex-wrap items-center justify-start gap-x-3 gap-y-1"
|
|
||||||
>
|
|
||||||
<div v-if="email" class="truncate max-w-72" :title="email">
|
<div v-if="email" class="truncate max-w-72" :title="email">
|
||||||
<span class="text-sm text-n-slate-11">
|
<span class="text-sm text-n-slate-11">
|
||||||
{{ email }}
|
{{ email }}
|
||||||
@@ -240,5 +195,4 @@ const handleAvatarHover = isHovered => {
|
|||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</CardLayout>
|
</CardLayout>
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -10,7 +10,6 @@ import Button from 'dashboard/components-next/button/Button.vue';
|
|||||||
import ContactLabels from 'dashboard/components-next/Contacts/ContactLabels/ContactLabels.vue';
|
import ContactLabels from 'dashboard/components-next/Contacts/ContactLabels/ContactLabels.vue';
|
||||||
import ContactsForm from 'dashboard/components-next/Contacts/ContactsForm/ContactsForm.vue';
|
import ContactsForm from 'dashboard/components-next/Contacts/ContactsForm/ContactsForm.vue';
|
||||||
import ConfirmContactDeleteDialog from 'dashboard/components-next/Contacts/ContactsForm/ConfirmContactDeleteDialog.vue';
|
import ConfirmContactDeleteDialog from 'dashboard/components-next/Contacts/ContactsForm/ConfirmContactDeleteDialog.vue';
|
||||||
import Policy from 'dashboard/components/policy.vue';
|
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
selectedContact: {
|
selectedContact: {
|
||||||
@@ -175,7 +174,6 @@ const handleAvatarDelete = async () => {
|
|||||||
@click="updateContact"
|
@click="updateContact"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<Policy :permissions="['administrator']">
|
|
||||||
<div
|
<div
|
||||||
class="flex flex-col items-start w-full gap-4 pt-6 border-t border-n-strong"
|
class="flex flex-col items-start w-full gap-4 pt-6 border-t border-n-strong"
|
||||||
>
|
>
|
||||||
@@ -198,6 +196,5 @@ const handleAvatarDelete = async () => {
|
|||||||
:selected-contact="selectedContact"
|
:selected-contact="selectedContact"
|
||||||
@go-to-contacts-list="emit('goToContactsList')"
|
@go-to-contacts-list="emit('goToContactsList')"
|
||||||
/>
|
/>
|
||||||
</Policy>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -10,15 +10,7 @@ import {
|
|||||||
} from 'shared/helpers/CustomErrors';
|
} from 'shared/helpers/CustomErrors';
|
||||||
import ContactsCard from 'dashboard/components-next/Contacts/ContactsCard/ContactsCard.vue';
|
import ContactsCard from 'dashboard/components-next/Contacts/ContactsCard/ContactsCard.vue';
|
||||||
|
|
||||||
const props = defineProps({
|
defineProps({ contacts: { type: Array, required: true } });
|
||||||
contacts: { type: Array, required: true },
|
|
||||||
selectedContactIds: {
|
|
||||||
type: Array,
|
|
||||||
default: () => [],
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
const emit = defineEmits(['toggleContact']);
|
|
||||||
|
|
||||||
const { t } = useI18n();
|
const { t } = useI18n();
|
||||||
const store = useStore();
|
const store = useStore();
|
||||||
@@ -28,9 +20,6 @@ const route = useRoute();
|
|||||||
const uiFlags = useMapGetter('contacts/getUIFlags');
|
const uiFlags = useMapGetter('contacts/getUIFlags');
|
||||||
const isUpdating = computed(() => uiFlags.value.isUpdating);
|
const isUpdating = computed(() => uiFlags.value.isUpdating);
|
||||||
const expandedCardId = ref(null);
|
const expandedCardId = ref(null);
|
||||||
const hoveredAvatarId = ref(null);
|
|
||||||
|
|
||||||
const selectedIdsSet = computed(() => new Set(props.selectedContactIds || []));
|
|
||||||
|
|
||||||
const updateContact = async updatedData => {
|
const updateContact = async updatedData => {
|
||||||
try {
|
try {
|
||||||
@@ -69,27 +58,14 @@ const onClickViewDetails = async id => {
|
|||||||
const toggleExpanded = id => {
|
const toggleExpanded = id => {
|
||||||
expandedCardId.value = expandedCardId.value === id ? null : id;
|
expandedCardId.value = expandedCardId.value === id ? null : id;
|
||||||
};
|
};
|
||||||
|
|
||||||
const isSelected = id => selectedIdsSet.value.has(id);
|
|
||||||
|
|
||||||
const shouldShowSelection = id => {
|
|
||||||
return hoveredAvatarId.value === id || isSelected(id);
|
|
||||||
};
|
|
||||||
|
|
||||||
const handleSelect = (id, value) => {
|
|
||||||
emit('toggleContact', { id, value });
|
|
||||||
};
|
|
||||||
|
|
||||||
const handleAvatarHover = (id, isHovered) => {
|
|
||||||
hoveredAvatarId.value = isHovered ? id : null;
|
|
||||||
};
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div class="flex flex-col gap-4">
|
<div class="flex flex-col gap-4 px-6 pt-4 pb-6">
|
||||||
<div v-for="contact in contacts" :key="contact.id" class="relative">
|
|
||||||
<ContactsCard
|
<ContactsCard
|
||||||
|
v-for="contact in contacts"
|
||||||
:id="contact.id"
|
:id="contact.id"
|
||||||
|
:key="contact.id"
|
||||||
:name="contact.name"
|
:name="contact.name"
|
||||||
:email="contact.email"
|
:email="contact.email"
|
||||||
:thumbnail="contact.thumbnail"
|
:thumbnail="contact.thumbnail"
|
||||||
@@ -98,14 +74,9 @@ const handleAvatarHover = (id, isHovered) => {
|
|||||||
:availability-status="contact.availabilityStatus"
|
:availability-status="contact.availabilityStatus"
|
||||||
:is-expanded="expandedCardId === contact.id"
|
:is-expanded="expandedCardId === contact.id"
|
||||||
:is-updating="isUpdating"
|
:is-updating="isUpdating"
|
||||||
:selectable="shouldShowSelection(contact.id)"
|
|
||||||
:is-selected="isSelected(contact.id)"
|
|
||||||
@toggle="toggleExpanded(contact.id)"
|
@toggle="toggleExpanded(contact.id)"
|
||||||
@update-contact="updateContact"
|
@update-contact="updateContact"
|
||||||
@show-contact="onClickViewDetails"
|
@show-contact="onClickViewDetails"
|
||||||
@select="value => handleSelect(contact.id, value)"
|
|
||||||
@avatar-hover="value => handleAvatarHover(contact.id, value)"
|
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -14,10 +14,6 @@ defineProps({
|
|||||||
type: Array,
|
type: Array,
|
||||||
default: () => [],
|
default: () => [],
|
||||||
},
|
},
|
||||||
showBackdrop: {
|
|
||||||
type: Boolean,
|
|
||||||
default: true,
|
|
||||||
},
|
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
@@ -29,24 +25,14 @@ defineProps({
|
|||||||
class="relative w-full max-w-[60rem] mx-auto overflow-hidden h-full max-h-[28rem]"
|
class="relative w-full max-w-[60rem] mx-auto overflow-hidden h-full max-h-[28rem]"
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
v-if="showBackdrop"
|
|
||||||
class="w-full h-full space-y-4 overflow-y-hidden opacity-50 pointer-events-none"
|
class="w-full h-full space-y-4 overflow-y-hidden opacity-50 pointer-events-none"
|
||||||
>
|
>
|
||||||
<slot name="empty-state-item" />
|
<slot name="empty-state-item" />
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
class="flex flex-col items-center justify-end w-full h-full pb-20"
|
class="absolute inset-x-0 bottom-0 flex flex-col items-center justify-end w-full h-full pb-20 bg-gradient-to-t from-n-background from-25% dark:from-n-background to-transparent"
|
||||||
:class="{
|
|
||||||
'absolute inset-x-0 bottom-0 bg-gradient-to-t from-n-background from-25% dark:from-n-background to-transparent':
|
|
||||||
showBackdrop,
|
|
||||||
}"
|
|
||||||
>
|
|
||||||
<div
|
|
||||||
class="flex flex-col items-center justify-center gap-6"
|
|
||||||
:class="{
|
|
||||||
'mt-48': !showBackdrop,
|
|
||||||
}"
|
|
||||||
>
|
>
|
||||||
|
<div class="flex flex-col items-center justify-center gap-6">
|
||||||
<div class="flex flex-col items-center justify-center gap-3">
|
<div class="flex flex-col items-center justify-center gap-3">
|
||||||
<h2
|
<h2
|
||||||
class="text-3xl font-medium text-center text-n-slate-12 font-interDisplay"
|
class="text-3xl font-medium text-center text-n-slate-12 font-interDisplay"
|
||||||
@@ -54,7 +40,6 @@ defineProps({
|
|||||||
{{ title }}
|
{{ title }}
|
||||||
</h2>
|
</h2>
|
||||||
<p
|
<p
|
||||||
v-if="subtitle"
|
|
||||||
class="max-w-xl text-base text-center text-n-slate-11 font-interDisplay tracking-[0.3px]"
|
class="max-w-xl text-base text-center text-n-slate-11 font-interDisplay tracking-[0.3px]"
|
||||||
>
|
>
|
||||||
{{ subtitle }}
|
{{ subtitle }}
|
||||||
|
|||||||
@@ -114,7 +114,6 @@ const handlePageChange = event => {
|
|||||||
<slot name="action" />
|
<slot name="action" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<slot name="subHeader" />
|
|
||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
<main class="flex-1 px-6 overflow-y-auto">
|
<main class="flex-1 px-6 overflow-y-auto">
|
||||||
|
|||||||
@@ -64,23 +64,20 @@ const bulkCheckboxState = computed({
|
|||||||
class="flex items-center gap-3 py-1 ltr:pl-3 rtl:pr-3 ltr:pr-4 rtl:pl-4 rounded-lg bg-n-solid-2 outline outline-1 outline-n-container shadow"
|
class="flex items-center gap-3 py-1 ltr:pl-3 rtl:pr-3 ltr:pr-4 rtl:pl-4 rounded-lg bg-n-solid-2 outline outline-1 outline-n-container shadow"
|
||||||
>
|
>
|
||||||
<div class="flex items-center gap-3">
|
<div class="flex items-center gap-3">
|
||||||
<div class="flex items-center gap-1.5 min-w-0">
|
<div class="flex items-center gap-1.5">
|
||||||
<Checkbox
|
<Checkbox
|
||||||
v-model="bulkCheckboxState"
|
v-model="bulkCheckboxState"
|
||||||
:indeterminate="isIndeterminate"
|
:indeterminate="isIndeterminate"
|
||||||
/>
|
/>
|
||||||
<span
|
<span class="text-sm font-medium text-n-slate-12 tabular-nums">
|
||||||
class="text-sm font-medium truncate text-n-slate-12 tabular-nums"
|
|
||||||
>
|
|
||||||
{{ selectAllLabel }}
|
{{ selectAllLabel }}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<span class="text-sm text-n-slate-10 truncate tabular-nums">
|
<span class="text-sm text-n-slate-10 tabular-nums">
|
||||||
{{ selectedCountLabel }}
|
{{ selectedCountLabel }}
|
||||||
</span>
|
</span>
|
||||||
<div class="h-4 w-px bg-n-strong" />
|
|
||||||
<slot name="secondary-actions" />
|
|
||||||
</div>
|
</div>
|
||||||
|
<div class="h-4 w-px bg-n-strong" />
|
||||||
<div class="flex items-center gap-3">
|
<div class="flex items-center gap-3">
|
||||||
<slot name="actions" :selected-count="selectedCount">
|
<slot name="actions" :selected-count="selectedCount">
|
||||||
<Button
|
<Button
|
||||||
|
|||||||
+4
-42
@@ -6,39 +6,16 @@ import ResponseCard from 'dashboard/components-next/captain/assistant/ResponseCa
|
|||||||
import FeatureSpotlight from 'dashboard/components-next/feature-spotlight/FeatureSpotlight.vue';
|
import FeatureSpotlight from 'dashboard/components-next/feature-spotlight/FeatureSpotlight.vue';
|
||||||
import { responsesList } from 'dashboard/components-next/captain/pageComponents/emptyStates/captainEmptyStateContent.js';
|
import { responsesList } from 'dashboard/components-next/captain/pageComponents/emptyStates/captainEmptyStateContent.js';
|
||||||
|
|
||||||
import { computed } from 'vue';
|
const emit = defineEmits(['click']);
|
||||||
|
|
||||||
const props = defineProps({
|
|
||||||
variant: {
|
|
||||||
type: String,
|
|
||||||
default: 'approved',
|
|
||||||
validator: value => ['approved', 'pending'].includes(value),
|
|
||||||
},
|
|
||||||
hasActiveFilters: {
|
|
||||||
type: Boolean,
|
|
||||||
default: false,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
const emit = defineEmits(['click', 'clearFilters']);
|
|
||||||
|
|
||||||
const isApproved = computed(() => props.variant === 'approved');
|
|
||||||
const isPending = computed(() => props.variant === 'pending');
|
|
||||||
|
|
||||||
const { isOnChatwootCloud } = useAccount();
|
const { isOnChatwootCloud } = useAccount();
|
||||||
|
|
||||||
const onClick = () => {
|
const onClick = () => {
|
||||||
emit('click');
|
emit('click');
|
||||||
};
|
};
|
||||||
|
|
||||||
const onClearFilters = () => {
|
|
||||||
emit('clearFilters');
|
|
||||||
};
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<FeatureSpotlight
|
<FeatureSpotlight
|
||||||
v-if="isApproved"
|
|
||||||
:title="$t('CAPTAIN.RESPONSES.EMPTY_STATE.FEATURE_SPOTLIGHT.TITLE')"
|
:title="$t('CAPTAIN.RESPONSES.EMPTY_STATE.FEATURE_SPOTLIGHT.TITLE')"
|
||||||
:note="$t('CAPTAIN.RESPONSES.EMPTY_STATE.FEATURE_SPOTLIGHT.NOTE')"
|
:note="$t('CAPTAIN.RESPONSES.EMPTY_STATE.FEATURE_SPOTLIGHT.NOTE')"
|
||||||
fallback-thumbnail="/assets/images/dashboard/captain/faqs-light.svg"
|
fallback-thumbnail="/assets/images/dashboard/captain/faqs-light.svg"
|
||||||
@@ -48,16 +25,11 @@ const onClearFilters = () => {
|
|||||||
class="mb-8"
|
class="mb-8"
|
||||||
/>
|
/>
|
||||||
<EmptyStateLayout
|
<EmptyStateLayout
|
||||||
:title="
|
:title="$t('CAPTAIN.RESPONSES.EMPTY_STATE.TITLE')"
|
||||||
isPending
|
:subtitle="$t('CAPTAIN.RESPONSES.EMPTY_STATE.SUBTITLE')"
|
||||||
? $t('CAPTAIN.RESPONSES.EMPTY_STATE.NO_PENDING_TITLE')
|
|
||||||
: $t('CAPTAIN.RESPONSES.EMPTY_STATE.TITLE')
|
|
||||||
"
|
|
||||||
:subtitle="isApproved ? $t('CAPTAIN.RESPONSES.EMPTY_STATE.SUBTITLE') : ''"
|
|
||||||
:action-perms="['administrator']"
|
:action-perms="['administrator']"
|
||||||
:show-backdrop="isApproved"
|
|
||||||
>
|
>
|
||||||
<template v-if="isApproved" #empty-state-item>
|
<template #empty-state-item>
|
||||||
<div class="grid grid-cols-1 gap-4 p-px overflow-hidden">
|
<div class="grid grid-cols-1 gap-4 p-px overflow-hidden">
|
||||||
<ResponseCard
|
<ResponseCard
|
||||||
v-for="(response, index) in responsesList.slice(0, 5)"
|
v-for="(response, index) in responsesList.slice(0, 5)"
|
||||||
@@ -73,21 +45,11 @@ const onClearFilters = () => {
|
|||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<template #actions>
|
<template #actions>
|
||||||
<div class="flex flex-col items-center gap-3">
|
|
||||||
<Button
|
<Button
|
||||||
v-if="isApproved"
|
|
||||||
:label="$t('CAPTAIN.RESPONSES.ADD_NEW')"
|
:label="$t('CAPTAIN.RESPONSES.ADD_NEW')"
|
||||||
icon="i-lucide-plus"
|
icon="i-lucide-plus"
|
||||||
@click="onClick"
|
@click="onClick"
|
||||||
/>
|
/>
|
||||||
<Button
|
|
||||||
v-else-if="isPending && hasActiveFilters"
|
|
||||||
:label="$t('CAPTAIN.RESPONSES.EMPTY_STATE.CLEAR_SEARCH')"
|
|
||||||
variant="link"
|
|
||||||
size="sm"
|
|
||||||
@click="onClearFilters"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
</EmptyStateLayout>
|
</EmptyStateLayout>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -47,7 +47,6 @@ const isReel = computed(() => {
|
|||||||
'max-w-48': isReel,
|
'max-w-48': isReel,
|
||||||
'max-w-full': !isReel,
|
'max-w-full': !isReel,
|
||||||
}"
|
}"
|
||||||
@click.stop
|
|
||||||
@error="handleError"
|
@error="handleError"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
+33
@@ -0,0 +1,33 @@
|
|||||||
|
<script setup>
|
||||||
|
import Button from 'dashboard/components-next/button/Button.vue';
|
||||||
|
|
||||||
|
defineProps({
|
||||||
|
message: {
|
||||||
|
type: Object,
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div class="flex flex-col gap-2.5 text-n-slate-12 max-w-80">
|
||||||
|
<div class="p-3 rounded-xl bg-n-alpha-2">
|
||||||
|
<span
|
||||||
|
v-dompurify-html="message.content"
|
||||||
|
class="text-sm font-medium prose prose-bubble"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
v-if="message.buttons && message.buttons.length > 0"
|
||||||
|
class="flex flex-col gap-2"
|
||||||
|
>
|
||||||
|
<Button
|
||||||
|
v-for="(button, index) in message.buttons"
|
||||||
|
:key="index"
|
||||||
|
:label="button.text || 'Button'"
|
||||||
|
slate
|
||||||
|
class="!text-n-blue-text w-full"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
@@ -0,0 +1,77 @@
|
|||||||
|
<script setup>
|
||||||
|
import { computed } from 'vue';
|
||||||
|
import FileIcon from 'dashboard/components-next/icon/FileIcon.vue';
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
message: {
|
||||||
|
type: Object,
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
// Determine media type based on URL or template data
|
||||||
|
const getMediaType = () => {
|
||||||
|
if (props.message.originalTemplate?.header?.format) {
|
||||||
|
return props.message.originalTemplate.header.format.toLowerCase();
|
||||||
|
}
|
||||||
|
|
||||||
|
const url = props.message.image_url;
|
||||||
|
if (!url) return 'document';
|
||||||
|
|
||||||
|
if (url.includes('.pdf') || url.includes('pdf')) return 'document';
|
||||||
|
if (url.includes('.mp4') || url.includes('.mov') || url.includes('video'))
|
||||||
|
return 'video';
|
||||||
|
return 'image';
|
||||||
|
};
|
||||||
|
|
||||||
|
const mediaType = getMediaType();
|
||||||
|
|
||||||
|
// Get file type from URL for proper icon
|
||||||
|
const fileType = computed(() => {
|
||||||
|
const url = props.message.image_url;
|
||||||
|
if (!url) return 'pdf';
|
||||||
|
|
||||||
|
if (url.includes('.pdf') || url.includes('pdf')) return 'pdf';
|
||||||
|
if (url.includes('.doc')) return 'doc';
|
||||||
|
return 'pdf'; // Default to PDF for documents
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div
|
||||||
|
class="flex flex-col gap-2.5 p-3 rounded-xl bg-n-alpha-2 text-n-slate-12 max-w-80"
|
||||||
|
>
|
||||||
|
<!-- Image Media -->
|
||||||
|
<img
|
||||||
|
v-if="mediaType === 'image'"
|
||||||
|
:src="message.image_url"
|
||||||
|
class="object-cover w-full max-h-44 rounded-lg"
|
||||||
|
alt="Template media"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<!-- Video Media -->
|
||||||
|
<div
|
||||||
|
v-else-if="mediaType === 'video'"
|
||||||
|
class="overflow-hidden relative bg-gray-100 rounded-lg"
|
||||||
|
>
|
||||||
|
<video
|
||||||
|
:src="message.image_url"
|
||||||
|
class="object-cover w-full max-h-44"
|
||||||
|
controls
|
||||||
|
preload="metadata"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Document Media -->
|
||||||
|
<div v-else-if="mediaType === 'document'" class="flex items-center">
|
||||||
|
<FileIcon :file-type="fileType" class="text-2xl text-n-slate-12" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Content Text -->
|
||||||
|
<span
|
||||||
|
v-if="message.content"
|
||||||
|
v-dompurify-html="message.content"
|
||||||
|
class="text-sm font-medium prose prose-bubble"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
+52
@@ -0,0 +1,52 @@
|
|||||||
|
<script setup>
|
||||||
|
import Button from 'dashboard/components-next/button/Button.vue';
|
||||||
|
|
||||||
|
defineProps({
|
||||||
|
message: {
|
||||||
|
type: Object,
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div
|
||||||
|
class="bg-n-alpha-2 divide-y divide-n-strong text-n-slate-12 rounded-xl max-w-80"
|
||||||
|
>
|
||||||
|
<div class="p-3">
|
||||||
|
<span
|
||||||
|
v-dompurify-html="message.content"
|
||||||
|
class="prose prose-bubble font-medium text-sm"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
v-for="(action, index) in message.actions"
|
||||||
|
:key="index"
|
||||||
|
class="p-3 flex items-center justify-center"
|
||||||
|
>
|
||||||
|
<Button
|
||||||
|
:label="action.title || action.text || 'Button'"
|
||||||
|
link
|
||||||
|
class="hover:!no-underline"
|
||||||
|
>
|
||||||
|
<template #icon>
|
||||||
|
<svg
|
||||||
|
width="15"
|
||||||
|
height="15"
|
||||||
|
viewBox="0 0 15 15"
|
||||||
|
fill="none"
|
||||||
|
class="stroke-n-blue-text"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
>
|
||||||
|
<path
|
||||||
|
d="M.667 6.654 5.315.667v3.326c7.968 0 8.878 6.46 8.656 10.007l-.005-.027c-.334-1.79-.474-4.658-8.65-4.658v3.327z"
|
||||||
|
stroke-width="1.333"
|
||||||
|
stroke-linecap="round"
|
||||||
|
stroke-linejoin="round"
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
|
</template>
|
||||||
|
</Button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
@@ -0,0 +1,322 @@
|
|||||||
|
<script setup>
|
||||||
|
import TemplatePreview from './TemplatePreview.vue';
|
||||||
|
|
||||||
|
// Sample template data from the JSON files
|
||||||
|
const whatsAppTemplates = {
|
||||||
|
greet: {
|
||||||
|
id: '997298832221901',
|
||||||
|
name: 'greet',
|
||||||
|
status: 'APPROVED',
|
||||||
|
category: 'MARKETING',
|
||||||
|
language: 'en',
|
||||||
|
components: [
|
||||||
|
{
|
||||||
|
text: 'Hey {{customer_name}} how may I help you?',
|
||||||
|
type: 'BODY',
|
||||||
|
example: {
|
||||||
|
body_text_named_params: [
|
||||||
|
{
|
||||||
|
example: 'John',
|
||||||
|
param_name: 'customer_name',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
sub_category: 'CUSTOM',
|
||||||
|
parameter_format: 'NAMED',
|
||||||
|
},
|
||||||
|
|
||||||
|
eventInvitation: {
|
||||||
|
id: '1381151706284063',
|
||||||
|
name: 'event_invitation_static',
|
||||||
|
status: 'APPROVED',
|
||||||
|
category: 'MARKETING',
|
||||||
|
language: 'en',
|
||||||
|
components: [
|
||||||
|
{
|
||||||
|
text: "You're invited to {{event_name}} at {{location}}, Join us for an amazing experience!",
|
||||||
|
type: 'BODY',
|
||||||
|
example: {
|
||||||
|
body_text_named_params: [
|
||||||
|
{
|
||||||
|
example: 'F1',
|
||||||
|
param_name: 'event_name',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
example: 'Dubai',
|
||||||
|
param_name: 'location',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'BUTTONS',
|
||||||
|
buttons: [
|
||||||
|
{
|
||||||
|
url: 'https://events.example.com/register',
|
||||||
|
text: 'Visit website',
|
||||||
|
type: 'URL',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
url: 'https://maps.app.goo.gl/YoWAzRj1GDuxs6qz8',
|
||||||
|
text: 'Get Directions',
|
||||||
|
type: 'URL',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
sub_category: 'CUSTOM',
|
||||||
|
parameter_format: 'NAMED',
|
||||||
|
},
|
||||||
|
|
||||||
|
orderConfirmation: {
|
||||||
|
id: '1106685194739985',
|
||||||
|
name: 'order_confirmation',
|
||||||
|
status: 'APPROVED',
|
||||||
|
category: 'MARKETING',
|
||||||
|
language: 'en',
|
||||||
|
components: [
|
||||||
|
{
|
||||||
|
type: 'HEADER',
|
||||||
|
format: 'IMAGE',
|
||||||
|
example: {
|
||||||
|
header_handle: [
|
||||||
|
'https://scontent.whatsapp.net/v/t61.29466-34/518466505_1106685198073318_3569250580697484416_n.jpg',
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: 'Hi your order {{1}} is confirmed. Please wait for further updates',
|
||||||
|
type: 'BODY',
|
||||||
|
example: {
|
||||||
|
body_text: [['blue canvas shoes']],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
sub_category: 'CUSTOM',
|
||||||
|
parameter_format: 'POSITIONAL',
|
||||||
|
},
|
||||||
|
|
||||||
|
discountCoupon: {
|
||||||
|
id: '1469258364071127',
|
||||||
|
name: 'discount_coupon',
|
||||||
|
status: 'APPROVED',
|
||||||
|
category: 'MARKETING',
|
||||||
|
language: 'en',
|
||||||
|
components: [
|
||||||
|
{
|
||||||
|
text: '🎉 Special offer for you! Get {{discount_percentage}}% off your next purchase. Use the code below at checkout',
|
||||||
|
type: 'BODY',
|
||||||
|
example: {
|
||||||
|
body_text_named_params: [
|
||||||
|
{
|
||||||
|
example: '30',
|
||||||
|
param_name: 'discount_percentage',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'BUTTONS',
|
||||||
|
buttons: [
|
||||||
|
{
|
||||||
|
text: 'Copy offer code',
|
||||||
|
type: 'COPY_CODE',
|
||||||
|
example: ['SAVE30OFF'],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
sub_category: 'CUSTOM',
|
||||||
|
parameter_format: 'NAMED',
|
||||||
|
},
|
||||||
|
|
||||||
|
trainingVideo: {
|
||||||
|
id: '1023596726651144',
|
||||||
|
name: 'training_video',
|
||||||
|
status: 'APPROVED',
|
||||||
|
category: 'MARKETING',
|
||||||
|
language: 'en',
|
||||||
|
components: [
|
||||||
|
{
|
||||||
|
type: 'HEADER',
|
||||||
|
format: 'VIDEO',
|
||||||
|
example: {
|
||||||
|
header_handle: [
|
||||||
|
'https://scontent.whatsapp.net/v/t61.29466-34/521582686_1023596729984477_1872358575355618432_n.mp4',
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: "Hi {{name}}, here's your training video. Please watch by {{date}}.",
|
||||||
|
type: 'BODY',
|
||||||
|
example: {
|
||||||
|
body_text_named_params: [
|
||||||
|
{
|
||||||
|
example: 'john',
|
||||||
|
param_name: 'name',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
example: 'July 31',
|
||||||
|
param_name: 'date',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
sub_category: 'CUSTOM',
|
||||||
|
parameter_format: 'NAMED',
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
const twilioTemplates = {
|
||||||
|
greet: {
|
||||||
|
body: 'Hey {{1}}, how may I help you?',
|
||||||
|
types: {
|
||||||
|
'twilio/text': {
|
||||||
|
body: 'Hey {{1}}, how may I help you?',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
status: 'approved',
|
||||||
|
category: 'utility',
|
||||||
|
language: 'en',
|
||||||
|
variables: {
|
||||||
|
1: 'John',
|
||||||
|
},
|
||||||
|
content_sid: 'HXee240fd3a8b5045dba057feda5173e55',
|
||||||
|
friendly_name: 'greet',
|
||||||
|
template_type: 'text',
|
||||||
|
},
|
||||||
|
|
||||||
|
shoeLaunch: {
|
||||||
|
body: '👟 Introducing our latest release — the {{1}}! Available now for just {{2}}. Be among the first to own this style. Limited stock available!',
|
||||||
|
types: {
|
||||||
|
'twilio/media': {
|
||||||
|
body: '👟 Introducing our latest release — the {{1}}! Available now for just {{2}}. Be among the first to own this style. Limited stock available!',
|
||||||
|
media: ['https://vite-five-phi.vercel.app/jordan-shoes.jpg'],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
status: 'approved',
|
||||||
|
category: 'utility',
|
||||||
|
language: 'en',
|
||||||
|
variables: {
|
||||||
|
1: 'Jordan',
|
||||||
|
2: '100$',
|
||||||
|
},
|
||||||
|
content_sid: 'HX4b1ff075f097ccdf7f274b6af4d7be02',
|
||||||
|
friendly_name: 'shoe_launch',
|
||||||
|
template_type: 'media',
|
||||||
|
},
|
||||||
|
|
||||||
|
welcomeMessage: {
|
||||||
|
body: 'Thanks for reaching out to us. Before we proceed, we would like to get some information from you to assist you better. To whom would you like to connect?',
|
||||||
|
types: {
|
||||||
|
'twilio/quick-reply': {
|
||||||
|
body: 'Thanks for reaching out to us. Before we proceed, we would like to get some information from you to assist you better. To whom would you like to connect?',
|
||||||
|
actions: [
|
||||||
|
{
|
||||||
|
id: 'Sales_payload',
|
||||||
|
title: 'Sales',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'Support_payload',
|
||||||
|
title: 'Support',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
status: 'approved',
|
||||||
|
category: 'utility',
|
||||||
|
language: 'en_US',
|
||||||
|
variables: {},
|
||||||
|
content_sid: 'HX778677f5867f96175ab4b7efb9a5bee6',
|
||||||
|
friendly_name: 'welcome_message_new',
|
||||||
|
template_type: 'quick_reply',
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<Story
|
||||||
|
title="Components/TemplatePreview"
|
||||||
|
:layout="{ type: 'grid', width: 400 }"
|
||||||
|
>
|
||||||
|
<!-- WhatsApp Text Templates -->
|
||||||
|
<Variant title="WhatsApp - Simple Text">
|
||||||
|
<TemplatePreview
|
||||||
|
:template="whatsAppTemplates.greet"
|
||||||
|
:variables="{ customer_name: 'John' }"
|
||||||
|
platform="whatsapp"
|
||||||
|
/>
|
||||||
|
</Variant>
|
||||||
|
|
||||||
|
<Variant title="WhatsApp - Simple Text (No Variables)">
|
||||||
|
<TemplatePreview
|
||||||
|
:template="whatsAppTemplates.greet"
|
||||||
|
:variables="{}"
|
||||||
|
platform="whatsapp"
|
||||||
|
/>
|
||||||
|
</Variant>
|
||||||
|
|
||||||
|
<!-- WhatsApp Button Templates -->
|
||||||
|
<Variant title="WhatsApp - Call to Action Buttons">
|
||||||
|
<TemplatePreview
|
||||||
|
:template="whatsAppTemplates.eventInvitation"
|
||||||
|
:variables="{ event_name: 'F1 Grand Prix', location: 'Dubai' }"
|
||||||
|
platform="whatsapp"
|
||||||
|
/>
|
||||||
|
</Variant>
|
||||||
|
|
||||||
|
<!-- WhatsApp Media Templates -->
|
||||||
|
<Variant title="WhatsApp - Image Media">
|
||||||
|
<TemplatePreview
|
||||||
|
:template="whatsAppTemplates.orderConfirmation"
|
||||||
|
:variables="{ '1': 'Blue Canvas Shoes' }"
|
||||||
|
platform="whatsapp"
|
||||||
|
/>
|
||||||
|
</Variant>
|
||||||
|
|
||||||
|
<Variant title="WhatsApp - Video Media">
|
||||||
|
<TemplatePreview
|
||||||
|
:template="whatsAppTemplates.trainingVideo"
|
||||||
|
:variables="{ name: 'John', date: 'July 31st' }"
|
||||||
|
platform="whatsapp"
|
||||||
|
/>
|
||||||
|
</Variant>
|
||||||
|
|
||||||
|
<!-- WhatsApp Copy Code Templates -->
|
||||||
|
<Variant title="WhatsApp - Copy Code">
|
||||||
|
<TemplatePreview
|
||||||
|
:template="whatsAppTemplates.discountCoupon"
|
||||||
|
:variables="{ discount_percentage: '30' }"
|
||||||
|
platform="whatsapp"
|
||||||
|
/>
|
||||||
|
</Variant>
|
||||||
|
|
||||||
|
<!-- Twilio Templates -->
|
||||||
|
<Variant title="Twilio - Text">
|
||||||
|
<TemplatePreview
|
||||||
|
:template="twilioTemplates.greet"
|
||||||
|
:variables="{ '1': 'John' }"
|
||||||
|
platform="twilio"
|
||||||
|
/>
|
||||||
|
</Variant>
|
||||||
|
|
||||||
|
<Variant title="Twilio - Media">
|
||||||
|
<TemplatePreview
|
||||||
|
:template="twilioTemplates.shoeLaunch"
|
||||||
|
:variables="{ '1': 'Air Jordan', '2': '$150' }"
|
||||||
|
platform="twilio"
|
||||||
|
/>
|
||||||
|
</Variant>
|
||||||
|
|
||||||
|
<Variant title="Twilio - Quick Reply">
|
||||||
|
<TemplatePreview
|
||||||
|
:template="twilioTemplates.welcomeMessage"
|
||||||
|
:variables="{}"
|
||||||
|
platform="twilio"
|
||||||
|
/>
|
||||||
|
</Variant>
|
||||||
|
</Story>
|
||||||
|
</template>
|
||||||
@@ -0,0 +1,120 @@
|
|||||||
|
<script setup>
|
||||||
|
import { computed } from 'vue';
|
||||||
|
import { TemplateNormalizer } from 'dashboard/services/TemplateNormalizer';
|
||||||
|
|
||||||
|
import TextTemplate from 'dashboard/components-next/message/bubbles/Template/Text.vue';
|
||||||
|
import CardTemplate from 'dashboard/components-next/message/bubbles/Template/Card.vue';
|
||||||
|
import DynamicCallToActionTemplate from './DynamicCallToActionTemplate.vue';
|
||||||
|
import DynamicMediaTemplate from './DynamicMediaTemplate.vue';
|
||||||
|
import WhatsAppTextTemplate from './WhatsAppTextTemplate.vue';
|
||||||
|
import DynamicQuickReplyTemplate from './DynamicQuickReplyTemplate.vue';
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
template: {
|
||||||
|
type: Object,
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
variables: {
|
||||||
|
type: Object,
|
||||||
|
default: () => ({}),
|
||||||
|
},
|
||||||
|
platform: {
|
||||||
|
type: String,
|
||||||
|
required: true,
|
||||||
|
validator: value => ['whatsapp', 'twilio'].includes(value),
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
// Normalize template data and apply variables
|
||||||
|
const processedTemplate = computed(() => {
|
||||||
|
const normalized =
|
||||||
|
props.platform === 'whatsapp'
|
||||||
|
? TemplateNormalizer.normalizeWhatsApp(props.template)
|
||||||
|
: TemplateNormalizer.normalizeTwilio(props.template);
|
||||||
|
|
||||||
|
// Apply variable substitution to content
|
||||||
|
const processText = text => {
|
||||||
|
if (!text) return '';
|
||||||
|
return text.replace(/\{\{([^}]+)\}\}/g, (match, variable) => {
|
||||||
|
const value = props.variables[variable];
|
||||||
|
return value !== undefined && value !== '' ? value : `[${variable}]`;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
// Extract content based on platform
|
||||||
|
let content = '';
|
||||||
|
let imageUrl = '';
|
||||||
|
let title = '';
|
||||||
|
let footer = '';
|
||||||
|
|
||||||
|
if (props.platform === 'whatsapp') {
|
||||||
|
// WhatsApp: get text from body component
|
||||||
|
content = normalized.body?.text || '';
|
||||||
|
|
||||||
|
// Get header content for media templates
|
||||||
|
if (normalized.header) {
|
||||||
|
if (
|
||||||
|
normalized.header.format === 'IMAGE' ||
|
||||||
|
normalized.header.format === 'VIDEO' ||
|
||||||
|
normalized.header.format === 'DOCUMENT'
|
||||||
|
) {
|
||||||
|
imageUrl = normalized.header.example?.header_handle?.[0] || '';
|
||||||
|
}
|
||||||
|
if (normalized.header.format === 'TEXT') {
|
||||||
|
title = normalized.header.text || '';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get footer content
|
||||||
|
footer = normalized.footer?.text || '';
|
||||||
|
} else {
|
||||||
|
// Twilio: get body directly
|
||||||
|
content = normalized.body || '';
|
||||||
|
|
||||||
|
// Get media URL if available
|
||||||
|
if (normalized.media && normalized.media.length > 0) {
|
||||||
|
imageUrl = normalized.media[0];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
...normalized,
|
||||||
|
content: processText(content),
|
||||||
|
title: processText(title),
|
||||||
|
footer: processText(footer),
|
||||||
|
image_url: imageUrl,
|
||||||
|
buttons: normalized.buttons || [],
|
||||||
|
actions: normalized.actions || [],
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
|
// Component selection based on template type
|
||||||
|
const previewComponent = computed(() => {
|
||||||
|
const type = processedTemplate.value.type;
|
||||||
|
|
||||||
|
const componentMap = {
|
||||||
|
// WhatsApp components
|
||||||
|
'whatsapp-text': WhatsAppTextTemplate,
|
||||||
|
'whatsapp-text-header': WhatsAppTextTemplate,
|
||||||
|
'whatsapp-media-image': DynamicMediaTemplate,
|
||||||
|
'whatsapp-media-video': DynamicMediaTemplate,
|
||||||
|
'whatsapp-media-document': DynamicMediaTemplate,
|
||||||
|
'whatsapp-interactive': DynamicCallToActionTemplate,
|
||||||
|
'whatsapp-copy-code': DynamicCallToActionTemplate,
|
||||||
|
|
||||||
|
// Twilio components
|
||||||
|
'twilio-text': TextTemplate,
|
||||||
|
'twilio-media': DynamicMediaTemplate,
|
||||||
|
'twilio-quick-reply': DynamicQuickReplyTemplate,
|
||||||
|
'twilio-card': CardTemplate,
|
||||||
|
};
|
||||||
|
|
||||||
|
return componentMap[type] || TextTemplate;
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div class="template-preview">
|
||||||
|
<component :is="previewComponent" :message="processedTemplate" />
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
+193
@@ -0,0 +1,193 @@
|
|||||||
|
<script setup>
|
||||||
|
import TemplatePreview from './TemplatePreview.vue';
|
||||||
|
import {
|
||||||
|
whatsAppTemplates,
|
||||||
|
getWhatsAppVariables,
|
||||||
|
} from './templates/whatsapp-templates.js';
|
||||||
|
import { twilioTemplates } from './templates/twillio-templates.js';
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<Story
|
||||||
|
title="Components/TemplatePreviewExamples"
|
||||||
|
:layout="{ type: 'grid', width: 400 }"
|
||||||
|
>
|
||||||
|
<!-- WhatsApp Templates -->
|
||||||
|
<Variant title="WA: Event Invitation (Buttons)">
|
||||||
|
<TemplatePreview
|
||||||
|
:template="whatsAppTemplates[0]"
|
||||||
|
:variables="getWhatsAppVariables(whatsAppTemplates[0])"
|
||||||
|
platform="whatsapp"
|
||||||
|
/>
|
||||||
|
</Variant>
|
||||||
|
|
||||||
|
<Variant title="WA: Purchase Receipt (Document)">
|
||||||
|
<TemplatePreview
|
||||||
|
:template="whatsAppTemplates[1]"
|
||||||
|
:variables="getWhatsAppVariables(whatsAppTemplates[1])"
|
||||||
|
platform="whatsapp"
|
||||||
|
/>
|
||||||
|
</Variant>
|
||||||
|
|
||||||
|
<Variant title="WA: Discount Coupon (Copy Code)">
|
||||||
|
<TemplatePreview
|
||||||
|
:template="whatsAppTemplates[2]"
|
||||||
|
:variables="getWhatsAppVariables(whatsAppTemplates[2])"
|
||||||
|
platform="whatsapp"
|
||||||
|
/>
|
||||||
|
</Variant>
|
||||||
|
|
||||||
|
<Variant title="WA: Support Callback (Phone)">
|
||||||
|
<TemplatePreview
|
||||||
|
:template="whatsAppTemplates[3]"
|
||||||
|
:variables="getWhatsAppVariables(whatsAppTemplates[3])"
|
||||||
|
platform="whatsapp"
|
||||||
|
/>
|
||||||
|
</Variant>
|
||||||
|
|
||||||
|
<Variant title="WA: Training Video (Video)">
|
||||||
|
<TemplatePreview
|
||||||
|
:template="whatsAppTemplates[4]"
|
||||||
|
:variables="getWhatsAppVariables(whatsAppTemplates[4])"
|
||||||
|
platform="whatsapp"
|
||||||
|
/>
|
||||||
|
</Variant>
|
||||||
|
|
||||||
|
<Variant title="WA: Order Confirmation (Image)">
|
||||||
|
<TemplatePreview
|
||||||
|
:template="whatsAppTemplates[5]"
|
||||||
|
:variables="getWhatsAppVariables(whatsAppTemplates[5])"
|
||||||
|
platform="whatsapp"
|
||||||
|
/>
|
||||||
|
</Variant>
|
||||||
|
|
||||||
|
<Variant title="WA: Product Launch (Image + Footer)">
|
||||||
|
<TemplatePreview
|
||||||
|
:template="whatsAppTemplates[6]"
|
||||||
|
:variables="getWhatsAppVariables(whatsAppTemplates[6])"
|
||||||
|
platform="whatsapp"
|
||||||
|
/>
|
||||||
|
</Variant>
|
||||||
|
|
||||||
|
<Variant title="WA: Technician Visit (Header + Buttons)">
|
||||||
|
<TemplatePreview
|
||||||
|
:template="whatsAppTemplates[7]"
|
||||||
|
:variables="getWhatsAppVariables(whatsAppTemplates[7])"
|
||||||
|
platform="whatsapp"
|
||||||
|
/>
|
||||||
|
</Variant>
|
||||||
|
|
||||||
|
<Variant title="WA: Greet (Simple Text)">
|
||||||
|
<TemplatePreview
|
||||||
|
:template="whatsAppTemplates[8]"
|
||||||
|
:variables="getWhatsAppVariables(whatsAppTemplates[8])"
|
||||||
|
platform="whatsapp"
|
||||||
|
/>
|
||||||
|
</Variant>
|
||||||
|
|
||||||
|
<Variant title="WA: Hello World (Header + Footer)">
|
||||||
|
<TemplatePreview
|
||||||
|
:template="whatsAppTemplates[9]"
|
||||||
|
:variables="getWhatsAppVariables(whatsAppTemplates[9])"
|
||||||
|
platform="whatsapp"
|
||||||
|
/>
|
||||||
|
</Variant>
|
||||||
|
|
||||||
|
<Variant title="WA: Feedback Request (Button)">
|
||||||
|
<TemplatePreview
|
||||||
|
:template="whatsAppTemplates[10]"
|
||||||
|
:variables="getWhatsAppVariables(whatsAppTemplates[10])"
|
||||||
|
platform="whatsapp"
|
||||||
|
/>
|
||||||
|
</Variant>
|
||||||
|
|
||||||
|
<Variant title="WA: Address Update (Header)">
|
||||||
|
<TemplatePreview
|
||||||
|
:template="whatsAppTemplates[11]"
|
||||||
|
:variables="getWhatsAppVariables(whatsAppTemplates[11])"
|
||||||
|
platform="whatsapp"
|
||||||
|
/>
|
||||||
|
</Variant>
|
||||||
|
|
||||||
|
<Variant title="WA: Delivery Confirmation">
|
||||||
|
<TemplatePreview
|
||||||
|
:template="whatsAppTemplates[12]"
|
||||||
|
:variables="getWhatsAppVariables(whatsAppTemplates[12])"
|
||||||
|
platform="whatsapp"
|
||||||
|
/>
|
||||||
|
</Variant>
|
||||||
|
|
||||||
|
<!-- Twilio Templates -->
|
||||||
|
<Variant title="Twilio: Shoe Launch (Media)">
|
||||||
|
<TemplatePreview
|
||||||
|
:template="twilioTemplates[0]"
|
||||||
|
:variables="twilioTemplates[0].variables"
|
||||||
|
platform="twilio"
|
||||||
|
/>
|
||||||
|
</Variant>
|
||||||
|
|
||||||
|
<Variant title="Twilio: Product Launch Custom Price (Media)">
|
||||||
|
<TemplatePreview
|
||||||
|
:template="twilioTemplates[1]"
|
||||||
|
:variables="twilioTemplates[1].variables"
|
||||||
|
platform="twilio"
|
||||||
|
/>
|
||||||
|
</Variant>
|
||||||
|
|
||||||
|
<Variant title="Twilio: Product Launch (Media)">
|
||||||
|
<TemplatePreview
|
||||||
|
:template="twilioTemplates[2]"
|
||||||
|
:variables="twilioTemplates[2].variables"
|
||||||
|
platform="twilio"
|
||||||
|
/>
|
||||||
|
</Variant>
|
||||||
|
|
||||||
|
<Variant title="Twilio: Greet (Text)">
|
||||||
|
<TemplatePreview
|
||||||
|
:template="twilioTemplates[3]"
|
||||||
|
:variables="twilioTemplates[3].variables"
|
||||||
|
platform="twilio"
|
||||||
|
/>
|
||||||
|
</Variant>
|
||||||
|
|
||||||
|
<Variant title="Twilio: Order Status (Text)">
|
||||||
|
<TemplatePreview
|
||||||
|
:template="twilioTemplates[4]"
|
||||||
|
:variables="twilioTemplates[4].variables"
|
||||||
|
platform="twilio"
|
||||||
|
/>
|
||||||
|
</Variant>
|
||||||
|
|
||||||
|
<Variant title="Twilio: Hello World (Text)">
|
||||||
|
<TemplatePreview
|
||||||
|
:template="twilioTemplates[5]"
|
||||||
|
:variables="twilioTemplates[5].variables"
|
||||||
|
platform="twilio"
|
||||||
|
/>
|
||||||
|
</Variant>
|
||||||
|
|
||||||
|
<Variant title="Twilio: Welcome Message New (Quick Reply)">
|
||||||
|
<TemplatePreview
|
||||||
|
:template="twilioTemplates[6]"
|
||||||
|
:variables="twilioTemplates[6].variables"
|
||||||
|
platform="twilio"
|
||||||
|
/>
|
||||||
|
</Variant>
|
||||||
|
|
||||||
|
<Variant title="Twilio: SaaS WhatsApp Question (Quick Reply)">
|
||||||
|
<TemplatePreview
|
||||||
|
:template="twilioTemplates[7]"
|
||||||
|
:variables="twilioTemplates[7].variables"
|
||||||
|
platform="twilio"
|
||||||
|
/>
|
||||||
|
</Variant>
|
||||||
|
|
||||||
|
<Variant title="Twilio: Welcome Message (Quick Reply)">
|
||||||
|
<TemplatePreview
|
||||||
|
:template="twilioTemplates[8]"
|
||||||
|
:variables="twilioTemplates[8].variables"
|
||||||
|
platform="twilio"
|
||||||
|
/>
|
||||||
|
</Variant>
|
||||||
|
</Story>
|
||||||
|
</template>
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
<script setup>
|
||||||
|
defineProps({
|
||||||
|
message: {
|
||||||
|
type: Object,
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div
|
||||||
|
class="bg-n-alpha-2 text-n-slate-12 rounded-xl p-3 max-w-80 flex flex-col gap-2"
|
||||||
|
>
|
||||||
|
<!-- Header Text -->
|
||||||
|
<div v-if="message.title" class="font-bold text-base">
|
||||||
|
{{ message.title }}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Body Content -->
|
||||||
|
<div v-if="message.content" class="prose prose-bubble font-medium text-sm">
|
||||||
|
<span v-dompurify-html="message.content" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Footer Text -->
|
||||||
|
<div v-if="message.footer" class="text-xs text-n-slate-11 opacity-70">
|
||||||
|
{{ message.footer }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
// Main Template Preview Component
|
||||||
|
export { default as TemplatePreview } from './TemplatePreview.vue';
|
||||||
|
|
||||||
|
// Core Services
|
||||||
|
export { TemplateTypeDetector } from 'dashboard/services/TemplateTypeDetector';
|
||||||
|
export { TemplateNormalizer } from 'dashboard/services/TemplateNormalizer';
|
||||||
+185
@@ -0,0 +1,185 @@
|
|||||||
|
export const twilioTemplates = [
|
||||||
|
{
|
||||||
|
body: '=_ Introducing our latest release the {{1}}! Available now for just {{2}}. Be among the first to own this style. Limited stock available!',
|
||||||
|
types: {
|
||||||
|
'twilio/media': {
|
||||||
|
body: '=_ Introducing our latest release the {{1}}! Available now for just {{2}}. Be among the first to own this style. Limited stock available!',
|
||||||
|
media: ['https://vite-five-phi.vercel.app/jordan-shoes.jpg'],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
status: 'approved',
|
||||||
|
category: 'utility',
|
||||||
|
language: 'en',
|
||||||
|
variables: {
|
||||||
|
1: 'Jordan',
|
||||||
|
2: '100$',
|
||||||
|
},
|
||||||
|
content_sid: 'HX4b1ff075f097ccdf7f274b6af4d7be02',
|
||||||
|
friendly_name: 'shoe_launch',
|
||||||
|
template_type: 'media',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
body: '=_ Introducing our latest release the {{1}}! Available now for just {{2}}. Be among the first to own this style. Limited stock available!',
|
||||||
|
types: {
|
||||||
|
'twilio/media': {
|
||||||
|
body: '=_ Introducing our latest release the {{1}}! Available now for just {{2}}. Be among the first to own this style. Limited stock available!',
|
||||||
|
media: ['https://vite-five-phi.vercel.app/jordan-shoes.jpg'],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
status: 'approved',
|
||||||
|
category: 'utility',
|
||||||
|
language: 'en',
|
||||||
|
variables: {
|
||||||
|
1: 'Jordan',
|
||||||
|
2: '400$',
|
||||||
|
},
|
||||||
|
content_sid: 'HXd5c1f8f8d68976f841c440d5e4b46c2e',
|
||||||
|
friendly_name: 'product_launch_custom_price',
|
||||||
|
template_type: 'media',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
body: '=_ Introducing our latest release the Nike Air Force! Available now for just $129.99',
|
||||||
|
types: {
|
||||||
|
'twilio/media': {
|
||||||
|
body: '=_ Introducing our latest release the Nike Air Force! Available now for just $129.99',
|
||||||
|
media: ['https://vite-five-phi.vercel.app/jordan-shoes.jpg'],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
status: 'approved',
|
||||||
|
category: 'utility',
|
||||||
|
language: 'en',
|
||||||
|
variables: {},
|
||||||
|
content_sid: 'HX25f6e823f2416ca4b34254d98e916fae',
|
||||||
|
friendly_name: 'product_launch',
|
||||||
|
template_type: 'media',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
body: 'Hey {{1}}, how may I help you?',
|
||||||
|
types: {
|
||||||
|
'twilio/text': {
|
||||||
|
body: 'Hey {{1}}, how may I help you?',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
status: 'approved',
|
||||||
|
category: 'utility',
|
||||||
|
language: 'en',
|
||||||
|
variables: {
|
||||||
|
1: 'John',
|
||||||
|
},
|
||||||
|
content_sid: 'HXee240fd3a8b5045dba057feda5173e55',
|
||||||
|
friendly_name: 'greet',
|
||||||
|
template_type: 'text',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
body: "Hi {{1}} Thanks for placing an order with us. We'll let you know once your order has been processed and delivered. Your order number is {{3}}. Thanks",
|
||||||
|
types: {
|
||||||
|
'twilio/text': {
|
||||||
|
body: "Hi {{1}} Thanks for placing an order with us. We'll let you know once your order has been processed and delivered. Your order number is {{3}}. Thanks",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
status: 'approved',
|
||||||
|
category: 'utility',
|
||||||
|
language: 'en',
|
||||||
|
variables: {
|
||||||
|
1: 'John',
|
||||||
|
3: '12345',
|
||||||
|
},
|
||||||
|
content_sid: 'HX88291ef8d30d7dcd436cbb9b21c236f4',
|
||||||
|
friendly_name: 'order_status',
|
||||||
|
template_type: 'text',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
body: 'Welcome and congratulations!! This message demonstrates your ability to send a WhatsApp message notification from the Cloud API, hosted by Meta. Thank you for taking the time to test with us.',
|
||||||
|
types: {
|
||||||
|
'twilio/text': {
|
||||||
|
body: 'Welcome and congratulations!! This message demonstrates your ability to send a WhatsApp message notification from the Cloud API, hosted by Meta. Thank you for taking the time to test with us.',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
status: 'approved',
|
||||||
|
category: 'utility',
|
||||||
|
language: 'en',
|
||||||
|
variables: {},
|
||||||
|
content_sid: 'HXdc6da32d489ee80f67c07d5bb0e7e390',
|
||||||
|
friendly_name: 'hello_world',
|
||||||
|
template_type: 'text',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
body: 'Thanks for reaching out to us. Before we proceed, we would like to get some information from you to assist you better. To whom would you like to connect?',
|
||||||
|
types: {
|
||||||
|
'twilio/quick-reply': {
|
||||||
|
body: 'Thanks for reaching out to us. Before we proceed, we would like to get some information from you to assist you better. To whom would you like to connect?',
|
||||||
|
actions: [
|
||||||
|
{
|
||||||
|
id: 'Sales_payload',
|
||||||
|
title: 'Sales',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'Support_payload',
|
||||||
|
title: 'Support',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
status: 'approved',
|
||||||
|
category: 'utility',
|
||||||
|
language: 'en_US',
|
||||||
|
variables: {},
|
||||||
|
content_sid: 'HX778677f5867f96175ab4b7efb9a5bee6',
|
||||||
|
friendly_name: 'welcome_message_new',
|
||||||
|
template_type: 'quick_reply',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
body: 'What type of Chatwoot installation are you using? Select "Chatwoot Cloud" if you are using app.chatwoot.com, otherwise select "Self-hosted Chatwoot".',
|
||||||
|
types: {
|
||||||
|
'twilio/quick-reply': {
|
||||||
|
body: 'What type of Chatwoot installation are you using? Select "Chatwoot Cloud" if you are using app.chatwoot.com, otherwise select "Self-hosted Chatwoot".',
|
||||||
|
actions: [
|
||||||
|
{
|
||||||
|
id: 'Chatwoot Cloud_payload',
|
||||||
|
title: 'Chatwoot Cloud',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'Self-hosted Chatwoot_payload',
|
||||||
|
title: 'Self-hosted Chatwoot',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
status: 'approved',
|
||||||
|
category: 'utility',
|
||||||
|
language: 'en_US',
|
||||||
|
variables: {},
|
||||||
|
content_sid: 'HX3a35e5cd76529fd91d19341deb4ef685',
|
||||||
|
friendly_name: 'saas_whatsapp_question',
|
||||||
|
template_type: 'quick_reply',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
body: 'Thanks for reaching out to us. Happy to help. What are you looking for?',
|
||||||
|
types: {
|
||||||
|
'twilio/quick-reply': {
|
||||||
|
body: 'Thanks for reaching out to us. Happy to help. What are you looking for?',
|
||||||
|
actions: [
|
||||||
|
{
|
||||||
|
id: 'Support_payload',
|
||||||
|
title: 'Support',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'Sales_payload',
|
||||||
|
title: 'Sales',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'Demo_payload',
|
||||||
|
title: 'Demo',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
status: 'approved',
|
||||||
|
category: 'utility',
|
||||||
|
language: 'en_US',
|
||||||
|
variables: {},
|
||||||
|
content_sid: 'HX5d8e09f96cee2f7fb7bab223c03cb0a1',
|
||||||
|
friendly_name: 'welcome_message',
|
||||||
|
template_type: 'quick_reply',
|
||||||
|
},
|
||||||
|
];
|
||||||
+408
@@ -0,0 +1,408 @@
|
|||||||
|
export const whatsAppTemplates = [
|
||||||
|
{
|
||||||
|
id: '1381151706284063',
|
||||||
|
name: 'event_invitation_static',
|
||||||
|
status: 'APPROVED',
|
||||||
|
category: 'MARKETING',
|
||||||
|
language: 'en',
|
||||||
|
components: [
|
||||||
|
{
|
||||||
|
text: "You're invited to {{event_name}} at {{location}}, Join us for an amazing experience!",
|
||||||
|
type: 'BODY',
|
||||||
|
example: {
|
||||||
|
body_text_named_params: [
|
||||||
|
{
|
||||||
|
example: 'F1',
|
||||||
|
param_name: 'event_name',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
example: 'Dubai',
|
||||||
|
param_name: 'location',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'BUTTONS',
|
||||||
|
buttons: [
|
||||||
|
{
|
||||||
|
url: 'https://events.example.com/register',
|
||||||
|
text: 'Visit website',
|
||||||
|
type: 'URL',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
url: 'https://maps.app.goo.gl/YoWAzRj1GDuxs6qz8',
|
||||||
|
text: 'Get Directions',
|
||||||
|
type: 'URL',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
sub_category: 'CUSTOM',
|
||||||
|
parameter_format: 'NAMED',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: '767076159336759',
|
||||||
|
name: 'purchase_receipt',
|
||||||
|
status: 'APPROVED',
|
||||||
|
category: 'UTILITY',
|
||||||
|
language: 'en_US',
|
||||||
|
components: [
|
||||||
|
{
|
||||||
|
type: 'HEADER',
|
||||||
|
format: 'DOCUMENT',
|
||||||
|
example: {
|
||||||
|
header_handle: [
|
||||||
|
'https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf',
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: 'Thank you for using your {{1}} card at {{2}}. Your {{3}} is attached as a PDF.',
|
||||||
|
type: 'BODY',
|
||||||
|
example: {
|
||||||
|
body_text: [['credit', 'CS Mutual', 'receipt']],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
parameter_format: 'POSITIONAL',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: '1469258364071127',
|
||||||
|
name: 'discount_coupon',
|
||||||
|
status: 'APPROVED',
|
||||||
|
category: 'MARKETING',
|
||||||
|
language: 'en',
|
||||||
|
components: [
|
||||||
|
{
|
||||||
|
text: '<� Special offer for you! Get {{discount_percentage}}% off your next purchase. Use the code below at checkout',
|
||||||
|
type: 'BODY',
|
||||||
|
example: {
|
||||||
|
body_text_named_params: [
|
||||||
|
{
|
||||||
|
example: '30',
|
||||||
|
param_name: 'discount_percentage',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'BUTTONS',
|
||||||
|
buttons: [
|
||||||
|
{
|
||||||
|
text: 'Copy offer code',
|
||||||
|
type: 'COPY_CODE',
|
||||||
|
example: ['SAVE1OFF'],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
sub_category: 'CUSTOM',
|
||||||
|
parameter_format: 'NAMED',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: '1075221534579807',
|
||||||
|
name: 'support_callback',
|
||||||
|
status: 'APPROVED',
|
||||||
|
category: 'UTILITY',
|
||||||
|
language: 'en',
|
||||||
|
components: [
|
||||||
|
{
|
||||||
|
text: 'Hello {{name}}, our support team will call you regarding ticket # {{ticket_id}}.',
|
||||||
|
type: 'BODY',
|
||||||
|
example: {
|
||||||
|
body_text_named_params: [
|
||||||
|
{
|
||||||
|
example: 'muhsin',
|
||||||
|
param_name: 'name',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
example: '232323',
|
||||||
|
param_name: 'ticket_id',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'BUTTONS',
|
||||||
|
buttons: [
|
||||||
|
{
|
||||||
|
text: 'Call Support',
|
||||||
|
type: 'PHONE_NUMBER',
|
||||||
|
phone_number: '+16506677566',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
sub_category: 'CUSTOM',
|
||||||
|
parameter_format: 'NAMED',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: '1023596726651144',
|
||||||
|
name: 'training_video',
|
||||||
|
status: 'APPROVED',
|
||||||
|
category: 'MARKETING',
|
||||||
|
language: 'en',
|
||||||
|
components: [
|
||||||
|
{
|
||||||
|
type: 'HEADER',
|
||||||
|
format: 'VIDEO',
|
||||||
|
example: {
|
||||||
|
header_handle: [
|
||||||
|
'https://scontent.whatsapp.net/v/t61.29466-34/521582686_1023596729984477_1872358575355618432_n.mp4',
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: "Hi {{name}}, here's your training video. Please watch by{{date}}.",
|
||||||
|
type: 'BODY',
|
||||||
|
example: {
|
||||||
|
body_text_named_params: [
|
||||||
|
{
|
||||||
|
example: 'john',
|
||||||
|
param_name: 'name',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
example: 'July 31',
|
||||||
|
param_name: 'date',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
sub_category: 'CUSTOM',
|
||||||
|
parameter_format: 'NAMED',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: '1106685194739985',
|
||||||
|
name: 'order_confirmation',
|
||||||
|
status: 'APPROVED',
|
||||||
|
category: 'MARKETING',
|
||||||
|
language: 'en',
|
||||||
|
components: [
|
||||||
|
{
|
||||||
|
type: 'HEADER',
|
||||||
|
format: 'IMAGE',
|
||||||
|
example: {
|
||||||
|
header_handle: ['https://vite-five-phi.vercel.app/vaporfly.png'],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: 'Hi your order {{1}} is confirmed. Please wait for further updates',
|
||||||
|
type: 'BODY',
|
||||||
|
example: {
|
||||||
|
body_text: [['blue canvas shoes']],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
sub_category: 'CUSTOM',
|
||||||
|
parameter_format: 'POSITIONAL',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: '1242180011253003',
|
||||||
|
name: 'product_launch',
|
||||||
|
status: 'APPROVED',
|
||||||
|
category: 'MARKETING',
|
||||||
|
language: 'en',
|
||||||
|
components: [
|
||||||
|
{
|
||||||
|
type: 'HEADER',
|
||||||
|
format: 'IMAGE',
|
||||||
|
example: {
|
||||||
|
header_handle: ['https://vite-five-phi.vercel.app/coat.png'],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: 'New arrival! Our stunning coat now available in {{color}} color.',
|
||||||
|
type: 'BODY',
|
||||||
|
example: {
|
||||||
|
body_text_named_params: [
|
||||||
|
{
|
||||||
|
example: 'blue',
|
||||||
|
param_name: 'color',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: 'Free shipping on orders over $100. Limited time offer.',
|
||||||
|
type: 'FOOTER',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
sub_category: 'CUSTOM',
|
||||||
|
parameter_format: 'NAMED',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: '1449876326175680',
|
||||||
|
name: 'technician_visit',
|
||||||
|
status: 'APPROVED',
|
||||||
|
category: 'UTILITY',
|
||||||
|
language: 'en_US',
|
||||||
|
components: [
|
||||||
|
{
|
||||||
|
text: 'Technician visit',
|
||||||
|
type: 'HEADER',
|
||||||
|
format: 'TEXT',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: "Hi {{1}}, we're scheduling a technician visit to {{2}} on {{3}} between {{4}} and {{5}}. Please confirm if this time slot works for you.",
|
||||||
|
type: 'BODY',
|
||||||
|
example: {
|
||||||
|
body_text: [
|
||||||
|
['John', '123 Maple St', '2025-12-31', '10:00 AM', '2:00 PM'],
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'BUTTONS',
|
||||||
|
buttons: [
|
||||||
|
{
|
||||||
|
text: 'Confirm',
|
||||||
|
type: 'QUICK_REPLY',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: 'Reschedule',
|
||||||
|
type: 'QUICK_REPLY',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
parameter_format: 'POSITIONAL',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: '997298832221901',
|
||||||
|
name: 'greet',
|
||||||
|
status: 'APPROVED',
|
||||||
|
category: 'MARKETING',
|
||||||
|
language: 'en',
|
||||||
|
components: [
|
||||||
|
{
|
||||||
|
text: 'Hey {{customer_name}} how may I help you?',
|
||||||
|
type: 'BODY',
|
||||||
|
example: {
|
||||||
|
body_text_named_params: [
|
||||||
|
{
|
||||||
|
example: 'John',
|
||||||
|
param_name: 'customer_name',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
sub_category: 'CUSTOM',
|
||||||
|
parameter_format: 'NAMED',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: '632315222954611',
|
||||||
|
name: 'hello_world',
|
||||||
|
status: 'APPROVED',
|
||||||
|
category: 'UTILITY',
|
||||||
|
language: 'en_US',
|
||||||
|
components: [
|
||||||
|
{
|
||||||
|
text: 'Hello World',
|
||||||
|
type: 'HEADER',
|
||||||
|
format: 'TEXT',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: 'Welcome and congratulations!! This message demonstrates your ability to send a WhatsApp message notification from the Cloud API, hosted by Meta. Thank you for taking the time to test with us.',
|
||||||
|
type: 'BODY',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: 'WhatsApp Business Platform sample message',
|
||||||
|
type: 'FOOTER',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
parameter_format: 'POSITIONAL',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: '787864066907971',
|
||||||
|
name: 'feedback_request',
|
||||||
|
status: 'APPROVED',
|
||||||
|
category: 'MARKETING',
|
||||||
|
language: 'en',
|
||||||
|
components: [
|
||||||
|
{
|
||||||
|
text: "Hey {{name}}, how was your experience with Puma? We'd love your feedback!",
|
||||||
|
type: 'BODY',
|
||||||
|
example: {
|
||||||
|
body_text_named_params: [
|
||||||
|
{
|
||||||
|
example: 'muhsin',
|
||||||
|
param_name: 'name',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'BUTTONS',
|
||||||
|
buttons: [
|
||||||
|
{
|
||||||
|
url: 'https://feedback.example.com/survey',
|
||||||
|
text: 'Leave Feedback',
|
||||||
|
type: 'URL',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
sub_category: 'CUSTOM',
|
||||||
|
parameter_format: 'NAMED',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: '1938057163677205',
|
||||||
|
name: 'address_update',
|
||||||
|
status: 'APPROVED',
|
||||||
|
category: 'UTILITY',
|
||||||
|
language: 'en_US',
|
||||||
|
components: [
|
||||||
|
{
|
||||||
|
text: 'Address update',
|
||||||
|
type: 'HEADER',
|
||||||
|
format: 'TEXT',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: 'Hi {{1}}, your delivery address has been successfully updated to {{2}}. Contact {{3}} for any inquiries.',
|
||||||
|
type: 'BODY',
|
||||||
|
example: {
|
||||||
|
body_text: [['John', '123 Main St', 'support@telco.com']],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
parameter_format: 'POSITIONAL',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: '1644094842949394',
|
||||||
|
name: 'delivery_confirmation',
|
||||||
|
status: 'APPROVED',
|
||||||
|
category: 'UTILITY',
|
||||||
|
language: 'en_US',
|
||||||
|
components: [
|
||||||
|
{
|
||||||
|
text: '{{1}}, your order was successfully delivered on {{2}}.\\n\\nThank you for your purchase.\\n',
|
||||||
|
type: 'BODY',
|
||||||
|
example: {
|
||||||
|
body_text: [['John', 'Jan 1, 2024']],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
parameter_format: 'POSITIONAL',
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
// Helper function to get variable values from examples
|
||||||
|
export const getWhatsAppVariables = template => {
|
||||||
|
const variables = {};
|
||||||
|
template.components?.forEach(component => {
|
||||||
|
if (component.example?.body_text_named_params) {
|
||||||
|
component.example.body_text_named_params.forEach(param => {
|
||||||
|
variables[param.param_name] = param.example;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (component.example?.body_text) {
|
||||||
|
component.example.body_text[0]?.forEach((value, index) => {
|
||||||
|
variables[(index + 1).toString()] = value;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return variables;
|
||||||
|
};
|
||||||
+150
-83
@@ -1,129 +1,100 @@
|
|||||||
<script setup>
|
<script>
|
||||||
import { ref, computed } from 'vue';
|
import { mapGetters } from 'vuex';
|
||||||
import { useI18n } from 'vue-i18n';
|
|
||||||
import { useMapGetter } from 'dashboard/composables/store';
|
|
||||||
import { vOnClickOutside } from '@vueuse/components';
|
|
||||||
|
|
||||||
import NextButton from 'dashboard/components-next/button/Button.vue';
|
import NextButton from 'dashboard/components-next/button/Button.vue';
|
||||||
import Input from 'dashboard/components-next/input/Input.vue';
|
|
||||||
|
|
||||||
const emit = defineEmits(['close', 'assign']);
|
export default {
|
||||||
|
components: {
|
||||||
const { t } = useI18n();
|
NextButton,
|
||||||
|
},
|
||||||
const labels = useMapGetter('labels/getLabels');
|
emits: ['update', 'close', 'assign'],
|
||||||
|
data() {
|
||||||
const query = ref('');
|
return {
|
||||||
const selectedLabels = ref([]);
|
query: '',
|
||||||
|
selectedLabels: [],
|
||||||
const filteredLabels = computed(() => {
|
};
|
||||||
if (!query.value) return labels.value;
|
},
|
||||||
return labels.value.filter(label =>
|
computed: {
|
||||||
label.title.toLowerCase().includes(query.value.toLowerCase())
|
...mapGetters({ labels: 'labels/getLabels' }),
|
||||||
|
filteredLabels() {
|
||||||
|
return this.labels.filter(label =>
|
||||||
|
label.title.toLowerCase().includes(this.query.toLowerCase())
|
||||||
);
|
);
|
||||||
});
|
},
|
||||||
|
},
|
||||||
const hasLabels = computed(() => labels.value.length > 0);
|
methods: {
|
||||||
const hasFilteredLabels = computed(() => filteredLabels.value.length > 0);
|
isLabelSelected(label) {
|
||||||
|
return this.selectedLabels.includes(label);
|
||||||
const isLabelSelected = label => {
|
},
|
||||||
return selectedLabels.value.includes(label);
|
assignLabels(key) {
|
||||||
};
|
this.$emit('update', key);
|
||||||
|
},
|
||||||
const onClose = () => {
|
onClose() {
|
||||||
emit('close');
|
this.$emit('close');
|
||||||
};
|
},
|
||||||
|
},
|
||||||
const handleAssign = () => {
|
|
||||||
if (selectedLabels.value.length > 0) {
|
|
||||||
emit('assign', selectedLabels.value);
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div
|
<div v-on-clickaway="onClose" class="labels-container">
|
||||||
v-on-click-outside="onClose"
|
|
||||||
class="absolute ltr:right-2 rtl:left-2 top-12 origin-top-right z-20 w-60 bg-n-alpha-3 backdrop-blur-[100px] border-n-weak rounded-lg border border-solid shadow-md"
|
|
||||||
role="dialog"
|
|
||||||
aria-labelledby="label-dialog-title"
|
|
||||||
>
|
|
||||||
<div class="triangle">
|
<div class="triangle">
|
||||||
<svg height="12" viewBox="0 0 24 12" width="24">
|
<svg height="12" viewBox="0 0 24 12" width="24">
|
||||||
<path d="M20 12l-8-8-12 12" fill-rule="evenodd" stroke-width="1px" />
|
<path d="M20 12l-8-8-12 12" fill-rule="evenodd" stroke-width="1px" />
|
||||||
</svg>
|
</svg>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex items-center justify-between p-2.5">
|
<div class="flex items-center justify-between header">
|
||||||
<span class="text-sm font-medium">{{
|
<span>{{ $t('BULK_ACTION.LABELS.ASSIGN_LABELS') }}</span>
|
||||||
t('BULK_ACTION.LABELS.ASSIGN_LABELS')
|
|
||||||
}}</span>
|
|
||||||
<NextButton ghost xs slate icon="i-lucide-x" @click="onClose" />
|
<NextButton ghost xs slate icon="i-lucide-x" @click="onClose" />
|
||||||
</div>
|
</div>
|
||||||
<div class="flex flex-col max-h-60 min-h-0">
|
<div class="labels-list">
|
||||||
<header class="py-2 px-2.5">
|
<header class="labels-list__header">
|
||||||
<Input
|
<div
|
||||||
|
class="flex items-center justify-between h-8 gap-2 label-list-search"
|
||||||
|
>
|
||||||
|
<fluent-icon icon="search" class="search-icon" size="16" />
|
||||||
|
<input
|
||||||
v-model="query"
|
v-model="query"
|
||||||
type="search"
|
type="search"
|
||||||
:placeholder="t('BULK_ACTION.SEARCH_INPUT_PLACEHOLDER')"
|
:placeholder="$t('BULK_ACTION.SEARCH_INPUT_PLACEHOLDER')"
|
||||||
icon-left="i-lucide-search"
|
class="reset-base !outline-0 !text-sm label--search_input"
|
||||||
size="sm"
|
|
||||||
class="w-full"
|
|
||||||
:aria-label="t('BULK_ACTION.SEARCH_INPUT_PLACEHOLDER')"
|
|
||||||
/>
|
/>
|
||||||
|
</div>
|
||||||
</header>
|
</header>
|
||||||
<ul
|
<ul class="labels-list__body">
|
||||||
v-if="hasLabels"
|
|
||||||
class="flex-1 overflow-y-auto m-0 list-none"
|
|
||||||
role="listbox"
|
|
||||||
:aria-label="t('BULK_ACTION.LABELS.ASSIGN_LABELS')"
|
|
||||||
>
|
|
||||||
<li v-if="!hasFilteredLabels" class="p-2 text-center">
|
|
||||||
<span class="text-sm text-n-slate-11">{{
|
|
||||||
t('BULK_ACTION.LABELS.NO_LABELS_FOUND')
|
|
||||||
}}</span>
|
|
||||||
</li>
|
|
||||||
<li
|
<li
|
||||||
v-for="label in filteredLabels"
|
v-for="label in filteredLabels"
|
||||||
:key="label.id"
|
:key="label.id"
|
||||||
class="my-1 mx-0 py-0 px-2.5"
|
class="label__list-item"
|
||||||
role="option"
|
|
||||||
:aria-selected="isLabelSelected(label.title)"
|
|
||||||
>
|
>
|
||||||
<label
|
<label
|
||||||
class="items-center rounded-md cursor-pointer flex py-1 px-2.5 hover:bg-n-slate-3 dark:hover:bg-n-solid-3 has-[:checked]:bg-n-slate-2"
|
class="item"
|
||||||
|
:class="{ 'label-selected': isLabelSelected(label.title) }"
|
||||||
>
|
>
|
||||||
<input
|
<input
|
||||||
v-model="selectedLabels"
|
v-model="selectedLabels"
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
:value="label.title"
|
:value="label.title"
|
||||||
class="my-0 ltr:mr-2.5 rtl:ml-2.5"
|
class="label-checkbox"
|
||||||
:aria-label="label.title"
|
|
||||||
/>
|
/>
|
||||||
<span
|
<span
|
||||||
class="overflow-hidden flex-grow w-full text-sm whitespace-nowrap text-ellipsis"
|
class="overflow-hidden label-title whitespace-nowrap text-ellipsis"
|
||||||
>
|
>
|
||||||
{{ label.title }}
|
{{ label.title }}
|
||||||
</span>
|
</span>
|
||||||
<span
|
<span
|
||||||
class="rounded-md h-3 w-3 flex-shrink-0 border border-solid border-n-weak"
|
class="label-pill"
|
||||||
:style="{ backgroundColor: label.color }"
|
:style="{ backgroundColor: label.color }"
|
||||||
/>
|
/>
|
||||||
</label>
|
</label>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<div v-else class="p-2 text-center">
|
<footer class="labels-list__footer">
|
||||||
<span class="text-sm text-n-slate-11">{{
|
|
||||||
t('CONTACTS_BULK_ACTIONS.NO_LABELS_FOUND')
|
|
||||||
}}</span>
|
|
||||||
</div>
|
|
||||||
<footer class="p-2">
|
|
||||||
<NextButton
|
<NextButton
|
||||||
sm
|
sm
|
||||||
type="submit"
|
type="submit"
|
||||||
class="w-full"
|
:label="$t('BULK_ACTION.LABELS.ASSIGN_SELECTED_LABELS')"
|
||||||
:label="t('BULK_ACTION.LABELS.ASSIGN_SELECTED_LABELS')"
|
|
||||||
:disabled="!selectedLabels.length"
|
:disabled="!selectedLabels.length"
|
||||||
@click="handleAssign"
|
@click="$emit('assign', selectedLabels)"
|
||||||
/>
|
/>
|
||||||
</footer>
|
</footer>
|
||||||
</div>
|
</div>
|
||||||
@@ -131,6 +102,61 @@ const handleAssign = () => {
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
|
.labels-list {
|
||||||
|
@apply flex flex-col max-h-[15rem] min-h-[auto];
|
||||||
|
|
||||||
|
.labels-list__header {
|
||||||
|
@apply bg-n-alpha-3 backdrop-blur-[100px] py-0 px-2.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.labels-list__body {
|
||||||
|
@apply flex-1 overflow-y-auto py-2.5 mx-0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.labels-list__footer {
|
||||||
|
@apply p-2;
|
||||||
|
|
||||||
|
button {
|
||||||
|
@apply w-full;
|
||||||
|
|
||||||
|
.button__content {
|
||||||
|
@apply text-center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.label-list-search {
|
||||||
|
@apply bg-n-alpha-black2 py-0 px-2.5 border border-solid border-n-strong rounded-md;
|
||||||
|
|
||||||
|
.search-icon {
|
||||||
|
@apply text-n-slate-10;
|
||||||
|
}
|
||||||
|
|
||||||
|
.label--search_input {
|
||||||
|
@apply border-0 text-xs m-0 dark:bg-transparent bg-transparent h-[unset] w-full;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.labels-container {
|
||||||
|
@apply absolute ltr:right-2 rtl:left-2 top-12 origin-top-right w-auto z-20 max-w-[15rem] min-w-[15rem] bg-n-alpha-3 backdrop-blur-[100px] border-n-weak rounded-lg border border-solid shadow-md;
|
||||||
|
|
||||||
|
.header {
|
||||||
|
@apply p-2.5;
|
||||||
|
|
||||||
|
span {
|
||||||
|
@apply text-sm font-medium;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.container {
|
||||||
|
@apply max-h-[15rem] overflow-y-auto;
|
||||||
|
|
||||||
|
.label__list-container {
|
||||||
|
@apply h-full;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.triangle {
|
.triangle {
|
||||||
@apply block z-10 absolute text-left -top-3 ltr:right-[--triangle-position] rtl:left-[--triangle-position];
|
@apply block z-10 absolute text-left -top-3 ltr:right-[--triangle-position] rtl:left-[--triangle-position];
|
||||||
|
|
||||||
@@ -138,4 +164,45 @@ const handleAssign = () => {
|
|||||||
@apply fill-n-alpha-3 backdrop-blur-[100px] stroke-n-weak;
|
@apply fill-n-alpha-3 backdrop-blur-[100px] stroke-n-weak;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ul {
|
||||||
|
@apply m-0 list-none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.labels-placeholder {
|
||||||
|
@apply p-2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.label__list-item {
|
||||||
|
@apply my-1 mx-0 py-0 px-2.5;
|
||||||
|
|
||||||
|
.item {
|
||||||
|
@apply items-center rounded-md cursor-pointer flex py-1 px-2.5 hover:bg-n-slate-3 dark:hover:bg-n-solid-3;
|
||||||
|
|
||||||
|
&.label-selected {
|
||||||
|
@apply bg-n-slate-2;
|
||||||
|
}
|
||||||
|
|
||||||
|
span {
|
||||||
|
@apply text-sm;
|
||||||
|
}
|
||||||
|
|
||||||
|
.label-checkbox {
|
||||||
|
@apply my-0 ltr:mr-2.5 rtl:ml-2.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.label-title {
|
||||||
|
@apply flex-grow w-full;
|
||||||
|
}
|
||||||
|
|
||||||
|
.label-pill {
|
||||||
|
@apply rounded-md h-3 w-3 flex-shrink-0 border border-solid border-n-weak;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.search-container {
|
||||||
|
@apply bg-n-alpha-3 backdrop-blur-[100px] py-0 px-2.5 sticky top-0 z-20;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
},
|
},
|
||||||
"LABELS": {
|
"LABELS": {
|
||||||
"ASSIGN_LABELS": "Assign labels",
|
"ASSIGN_LABELS": "Assign labels",
|
||||||
"NO_LABELS_FOUND": "No labels found",
|
"NO_LABELS_FOUND": "No labels found for",
|
||||||
"ASSIGN_SELECTED_LABELS": "Assign selected labels",
|
"ASSIGN_SELECTED_LABELS": "Assign selected labels",
|
||||||
"ASSIGN_SUCCESFUL": "Labels assigned successfully.",
|
"ASSIGN_SUCCESFUL": "Labels assigned successfully.",
|
||||||
"ASSIGN_FAILED": "Failed to assign labels. Please try again."
|
"ASSIGN_FAILED": "Failed to assign labels. Please try again."
|
||||||
|
|||||||
@@ -571,16 +571,6 @@
|
|||||||
"ACTIVE_EMPTY_STATE_TITLE": "በአሁኑ ጊዜ ንቁ እውቂያዎች የሉም 🌙"
|
"ACTIVE_EMPTY_STATE_TITLE": "በአሁኑ ጊዜ ንቁ እውቂያዎች የሉም 🌙"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"CONTACTS_BULK_ACTIONS": {
|
|
||||||
"ASSIGN_LABELS": "Assign Labels",
|
|
||||||
"ASSIGN_LABELS_SUCCESS": "Labels assigned successfully.",
|
|
||||||
"ASSIGN_LABELS_FAILED": "Failed to assign labels",
|
|
||||||
"DESCRIPTION": "Select the labels you want to add to the selected contacts.",
|
|
||||||
"NO_LABELS_FOUND": "No labels available yet.",
|
|
||||||
"SELECTED_COUNT": "{count} selected",
|
|
||||||
"CLEAR_SELECTION": "Clear selection",
|
|
||||||
"SELECT_ALL": "Select all ({count})"
|
|
||||||
},
|
|
||||||
"COMPOSE_NEW_CONVERSATION": {
|
"COMPOSE_NEW_CONVERSATION": {
|
||||||
"CONTACT_SEARCH": {
|
"CONTACT_SEARCH": {
|
||||||
"ERROR_MESSAGE": "We couldn’t complete the search. Please try again."
|
"ERROR_MESSAGE": "We couldn’t complete the search. Please try again."
|
||||||
|
|||||||
@@ -863,7 +863,6 @@
|
|||||||
},
|
},
|
||||||
"RESPONSES": {
|
"RESPONSES": {
|
||||||
"HEADER": "FAQs",
|
"HEADER": "FAQs",
|
||||||
"PENDING_FAQS": "Pending FAQs",
|
|
||||||
"ADD_NEW": "Create new FAQ",
|
"ADD_NEW": "Create new FAQ",
|
||||||
"DOCUMENTABLE": {
|
"DOCUMENTABLE": {
|
||||||
"CONVERSATION": "Conversation #{id}"
|
"CONVERSATION": "Conversation #{id}"
|
||||||
@@ -903,10 +902,6 @@
|
|||||||
"APPROVED": "Approved",
|
"APPROVED": "Approved",
|
||||||
"ALL": "All"
|
"ALL": "All"
|
||||||
},
|
},
|
||||||
"PENDING_BANNER": {
|
|
||||||
"TITLE": "Captain has found some FAQs your customers were looking for.",
|
|
||||||
"ACTION": "Click here to review"
|
|
||||||
},
|
|
||||||
"FORM_DESCRIPTION": "Add a question and its corresponding answer to the knowledge base and select the assistant it should be associated with.",
|
"FORM_DESCRIPTION": "Add a question and its corresponding answer to the knowledge base and select the assistant it should be associated with.",
|
||||||
"CREATE": {
|
"CREATE": {
|
||||||
"TITLE": "Add an FAQ",
|
"TITLE": "Add an FAQ",
|
||||||
@@ -937,15 +932,13 @@
|
|||||||
"APPROVE_SUCCESS_MESSAGE": "The FAQ was marked as approved"
|
"APPROVE_SUCCESS_MESSAGE": "The FAQ was marked as approved"
|
||||||
},
|
},
|
||||||
"OPTIONS": {
|
"OPTIONS": {
|
||||||
"APPROVE": "Approve",
|
"APPROVE": "Mark as approved",
|
||||||
"EDIT_RESPONSE": "Edit",
|
"EDIT_RESPONSE": "Edit FAQ",
|
||||||
"DELETE_RESPONSE": "Delete"
|
"DELETE_RESPONSE": "Delete FAQ"
|
||||||
},
|
},
|
||||||
"EMPTY_STATE": {
|
"EMPTY_STATE": {
|
||||||
"TITLE": "No FAQs Found",
|
"TITLE": "No FAQs Found",
|
||||||
"NO_PENDING_TITLE": "There are no more pending FAQs to review",
|
|
||||||
"SUBTITLE": "FAQs help your assistant provide quick and accurate answers to questions from your customers. They can be generated automatically from your content or can be added manually.",
|
"SUBTITLE": "FAQs help your assistant provide quick and accurate answers to questions from your customers. They can be generated automatically from your content or can be added manually.",
|
||||||
"CLEAR_SEARCH": "Clear active filters",
|
|
||||||
"FEATURE_SPOTLIGHT": {
|
"FEATURE_SPOTLIGHT": {
|
||||||
"TITLE": "Captain FAQ",
|
"TITLE": "Captain FAQ",
|
||||||
"NOTE": "Captain FAQs detects common customer questions—whether missing from your knowledge base or frequently asked—and generates relevant FAQs to improve support. You can review each suggestion and decide whether to approve or reject it."
|
"NOTE": "Captain FAQs detects common customer questions—whether missing from your knowledge base or frequently asked—and generates relevant FAQs to improve support. You can review each suggestion and decide whether to approve or reject it."
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
},
|
},
|
||||||
"LABELS": {
|
"LABELS": {
|
||||||
"ASSIGN_LABELS": "إضافة وسم",
|
"ASSIGN_LABELS": "إضافة وسم",
|
||||||
"NO_LABELS_FOUND": "لم يتم العثور على تصنيفات",
|
"NO_LABELS_FOUND": "لم يتم العثور على تسميات لـ",
|
||||||
"ASSIGN_SELECTED_LABELS": "تعيين التسميات المحددة",
|
"ASSIGN_SELECTED_LABELS": "تعيين التسميات المحددة",
|
||||||
"ASSIGN_SUCCESFUL": "تم تعيين التسميات بنجاح.",
|
"ASSIGN_SUCCESFUL": "تم تعيين التسميات بنجاح.",
|
||||||
"ASSIGN_FAILED": "فشل في تعيين التسميات ، الرجاء المحاولة مرة أخرى."
|
"ASSIGN_FAILED": "فشل في تعيين التسميات ، الرجاء المحاولة مرة أخرى."
|
||||||
|
|||||||
@@ -571,16 +571,6 @@
|
|||||||
"ACTIVE_EMPTY_STATE_TITLE": "No contacts are active at the moment 🌙"
|
"ACTIVE_EMPTY_STATE_TITLE": "No contacts are active at the moment 🌙"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"CONTACTS_BULK_ACTIONS": {
|
|
||||||
"ASSIGN_LABELS": "تعيين التسميات",
|
|
||||||
"ASSIGN_LABELS_SUCCESS": "تم تعيين التسميات بنجاح.",
|
|
||||||
"ASSIGN_LABELS_FAILED": "Failed to assign labels",
|
|
||||||
"DESCRIPTION": "Select the labels you want to add to the selected contacts.",
|
|
||||||
"NO_LABELS_FOUND": "No labels available yet.",
|
|
||||||
"SELECTED_COUNT": "{count} selected",
|
|
||||||
"CLEAR_SELECTION": "Clear selection",
|
|
||||||
"SELECT_ALL": "Select all ({count})"
|
|
||||||
},
|
|
||||||
"COMPOSE_NEW_CONVERSATION": {
|
"COMPOSE_NEW_CONVERSATION": {
|
||||||
"CONTACT_SEARCH": {
|
"CONTACT_SEARCH": {
|
||||||
"ERROR_MESSAGE": "We couldn’t complete the search. Please try again."
|
"ERROR_MESSAGE": "We couldn’t complete the search. Please try again."
|
||||||
|
|||||||
@@ -863,7 +863,6 @@
|
|||||||
},
|
},
|
||||||
"RESPONSES": {
|
"RESPONSES": {
|
||||||
"HEADER": "FAQs",
|
"HEADER": "FAQs",
|
||||||
"PENDING_FAQS": "Pending FAQs",
|
|
||||||
"ADD_NEW": "Create new FAQ",
|
"ADD_NEW": "Create new FAQ",
|
||||||
"DOCUMENTABLE": {
|
"DOCUMENTABLE": {
|
||||||
"CONVERSATION": "Conversation #{id}"
|
"CONVERSATION": "Conversation #{id}"
|
||||||
@@ -903,10 +902,6 @@
|
|||||||
"APPROVED": "Approved",
|
"APPROVED": "Approved",
|
||||||
"ALL": "الكل"
|
"ALL": "الكل"
|
||||||
},
|
},
|
||||||
"PENDING_BANNER": {
|
|
||||||
"TITLE": "Captain has found some FAQs your customers were looking for.",
|
|
||||||
"ACTION": "Click here to review"
|
|
||||||
},
|
|
||||||
"FORM_DESCRIPTION": "Add a question and its corresponding answer to the knowledge base and select the assistant it should be associated with.",
|
"FORM_DESCRIPTION": "Add a question and its corresponding answer to the knowledge base and select the assistant it should be associated with.",
|
||||||
"CREATE": {
|
"CREATE": {
|
||||||
"TITLE": "Add an FAQ",
|
"TITLE": "Add an FAQ",
|
||||||
@@ -937,15 +932,13 @@
|
|||||||
"APPROVE_SUCCESS_MESSAGE": "The FAQ was marked as approved"
|
"APPROVE_SUCCESS_MESSAGE": "The FAQ was marked as approved"
|
||||||
},
|
},
|
||||||
"OPTIONS": {
|
"OPTIONS": {
|
||||||
"APPROVE": "Approve",
|
"APPROVE": "Mark as approved",
|
||||||
"EDIT_RESPONSE": "تعديل",
|
"EDIT_RESPONSE": "Edit FAQ",
|
||||||
"DELETE_RESPONSE": "حذف"
|
"DELETE_RESPONSE": "Delete FAQ"
|
||||||
},
|
},
|
||||||
"EMPTY_STATE": {
|
"EMPTY_STATE": {
|
||||||
"TITLE": "No FAQs Found",
|
"TITLE": "No FAQs Found",
|
||||||
"NO_PENDING_TITLE": "There are no more pending FAQs to review",
|
|
||||||
"SUBTITLE": "FAQs help your assistant provide quick and accurate answers to questions from your customers. They can be generated automatically from your content or can be added manually.",
|
"SUBTITLE": "FAQs help your assistant provide quick and accurate answers to questions from your customers. They can be generated automatically from your content or can be added manually.",
|
||||||
"CLEAR_SEARCH": "Clear active filters",
|
|
||||||
"FEATURE_SPOTLIGHT": {
|
"FEATURE_SPOTLIGHT": {
|
||||||
"TITLE": "Captain FAQ",
|
"TITLE": "Captain FAQ",
|
||||||
"NOTE": "Captain FAQs detects common customer questions—whether missing from your knowledge base or frequently asked—and generates relevant FAQs to improve support. You can review each suggestion and decide whether to approve or reject it."
|
"NOTE": "Captain FAQs detects common customer questions—whether missing from your knowledge base or frequently asked—and generates relevant FAQs to improve support. You can review each suggestion and decide whether to approve or reject it."
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
},
|
},
|
||||||
"LABELS": {
|
"LABELS": {
|
||||||
"ASSIGN_LABELS": "Assign labels",
|
"ASSIGN_LABELS": "Assign labels",
|
||||||
"NO_LABELS_FOUND": "No labels found",
|
"NO_LABELS_FOUND": "No labels found for",
|
||||||
"ASSIGN_SELECTED_LABELS": "Assign selected labels",
|
"ASSIGN_SELECTED_LABELS": "Assign selected labels",
|
||||||
"ASSIGN_SUCCESFUL": "Labels assigned successfully.",
|
"ASSIGN_SUCCESFUL": "Labels assigned successfully.",
|
||||||
"ASSIGN_FAILED": "Failed to assign labels. Please try again."
|
"ASSIGN_FAILED": "Failed to assign labels. Please try again."
|
||||||
|
|||||||
@@ -571,16 +571,6 @@
|
|||||||
"ACTIVE_EMPTY_STATE_TITLE": "No contacts are active at the moment 🌙"
|
"ACTIVE_EMPTY_STATE_TITLE": "No contacts are active at the moment 🌙"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"CONTACTS_BULK_ACTIONS": {
|
|
||||||
"ASSIGN_LABELS": "Assign Labels",
|
|
||||||
"ASSIGN_LABELS_SUCCESS": "Labels assigned successfully.",
|
|
||||||
"ASSIGN_LABELS_FAILED": "Failed to assign labels",
|
|
||||||
"DESCRIPTION": "Select the labels you want to add to the selected contacts.",
|
|
||||||
"NO_LABELS_FOUND": "No labels available yet.",
|
|
||||||
"SELECTED_COUNT": "{count} selected",
|
|
||||||
"CLEAR_SELECTION": "Clear selection",
|
|
||||||
"SELECT_ALL": "Select all ({count})"
|
|
||||||
},
|
|
||||||
"COMPOSE_NEW_CONVERSATION": {
|
"COMPOSE_NEW_CONVERSATION": {
|
||||||
"CONTACT_SEARCH": {
|
"CONTACT_SEARCH": {
|
||||||
"ERROR_MESSAGE": "We couldn’t complete the search. Please try again."
|
"ERROR_MESSAGE": "We couldn’t complete the search. Please try again."
|
||||||
|
|||||||
@@ -863,7 +863,6 @@
|
|||||||
},
|
},
|
||||||
"RESPONSES": {
|
"RESPONSES": {
|
||||||
"HEADER": "FAQs",
|
"HEADER": "FAQs",
|
||||||
"PENDING_FAQS": "Pending FAQs",
|
|
||||||
"ADD_NEW": "Create new FAQ",
|
"ADD_NEW": "Create new FAQ",
|
||||||
"DOCUMENTABLE": {
|
"DOCUMENTABLE": {
|
||||||
"CONVERSATION": "Conversation #{id}"
|
"CONVERSATION": "Conversation #{id}"
|
||||||
@@ -903,10 +902,6 @@
|
|||||||
"APPROVED": "Approved",
|
"APPROVED": "Approved",
|
||||||
"ALL": "All"
|
"ALL": "All"
|
||||||
},
|
},
|
||||||
"PENDING_BANNER": {
|
|
||||||
"TITLE": "Captain has found some FAQs your customers were looking for.",
|
|
||||||
"ACTION": "Click here to review"
|
|
||||||
},
|
|
||||||
"FORM_DESCRIPTION": "Add a question and its corresponding answer to the knowledge base and select the assistant it should be associated with.",
|
"FORM_DESCRIPTION": "Add a question and its corresponding answer to the knowledge base and select the assistant it should be associated with.",
|
||||||
"CREATE": {
|
"CREATE": {
|
||||||
"TITLE": "Add an FAQ",
|
"TITLE": "Add an FAQ",
|
||||||
@@ -937,15 +932,13 @@
|
|||||||
"APPROVE_SUCCESS_MESSAGE": "The FAQ was marked as approved"
|
"APPROVE_SUCCESS_MESSAGE": "The FAQ was marked as approved"
|
||||||
},
|
},
|
||||||
"OPTIONS": {
|
"OPTIONS": {
|
||||||
"APPROVE": "Approve",
|
"APPROVE": "Mark as approved",
|
||||||
"EDIT_RESPONSE": "Edit",
|
"EDIT_RESPONSE": "Edit FAQ",
|
||||||
"DELETE_RESPONSE": "Delete"
|
"DELETE_RESPONSE": "Delete FAQ"
|
||||||
},
|
},
|
||||||
"EMPTY_STATE": {
|
"EMPTY_STATE": {
|
||||||
"TITLE": "No FAQs Found",
|
"TITLE": "No FAQs Found",
|
||||||
"NO_PENDING_TITLE": "There are no more pending FAQs to review",
|
|
||||||
"SUBTITLE": "FAQs help your assistant provide quick and accurate answers to questions from your customers. They can be generated automatically from your content or can be added manually.",
|
"SUBTITLE": "FAQs help your assistant provide quick and accurate answers to questions from your customers. They can be generated automatically from your content or can be added manually.",
|
||||||
"CLEAR_SEARCH": "Clear active filters",
|
|
||||||
"FEATURE_SPOTLIGHT": {
|
"FEATURE_SPOTLIGHT": {
|
||||||
"TITLE": "Captain FAQ",
|
"TITLE": "Captain FAQ",
|
||||||
"NOTE": "Captain FAQs detects common customer questions—whether missing from your knowledge base or frequently asked—and generates relevant FAQs to improve support. You can review each suggestion and decide whether to approve or reject it."
|
"NOTE": "Captain FAQs detects common customer questions—whether missing from your knowledge base or frequently asked—and generates relevant FAQs to improve support. You can review each suggestion and decide whether to approve or reject it."
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
},
|
},
|
||||||
"LABELS": {
|
"LABELS": {
|
||||||
"ASSIGN_LABELS": "Assign labels",
|
"ASSIGN_LABELS": "Assign labels",
|
||||||
"NO_LABELS_FOUND": "Няма намерени етикети",
|
"NO_LABELS_FOUND": "No labels found for",
|
||||||
"ASSIGN_SELECTED_LABELS": "Assign selected labels",
|
"ASSIGN_SELECTED_LABELS": "Assign selected labels",
|
||||||
"ASSIGN_SUCCESFUL": "Labels assigned successfully.",
|
"ASSIGN_SUCCESFUL": "Labels assigned successfully.",
|
||||||
"ASSIGN_FAILED": "Failed to assign labels. Please try again."
|
"ASSIGN_FAILED": "Failed to assign labels. Please try again."
|
||||||
|
|||||||
@@ -571,16 +571,6 @@
|
|||||||
"ACTIVE_EMPTY_STATE_TITLE": "No contacts are active at the moment 🌙"
|
"ACTIVE_EMPTY_STATE_TITLE": "No contacts are active at the moment 🌙"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"CONTACTS_BULK_ACTIONS": {
|
|
||||||
"ASSIGN_LABELS": "Assign Labels",
|
|
||||||
"ASSIGN_LABELS_SUCCESS": "Labels assigned successfully.",
|
|
||||||
"ASSIGN_LABELS_FAILED": "Failed to assign labels",
|
|
||||||
"DESCRIPTION": "Select the labels you want to add to the selected contacts.",
|
|
||||||
"NO_LABELS_FOUND": "No labels available yet.",
|
|
||||||
"SELECTED_COUNT": "{count} selected",
|
|
||||||
"CLEAR_SELECTION": "Clear selection",
|
|
||||||
"SELECT_ALL": "Select all ({count})"
|
|
||||||
},
|
|
||||||
"COMPOSE_NEW_CONVERSATION": {
|
"COMPOSE_NEW_CONVERSATION": {
|
||||||
"CONTACT_SEARCH": {
|
"CONTACT_SEARCH": {
|
||||||
"ERROR_MESSAGE": "We couldn’t complete the search. Please try again."
|
"ERROR_MESSAGE": "We couldn’t complete the search. Please try again."
|
||||||
|
|||||||
@@ -863,7 +863,6 @@
|
|||||||
},
|
},
|
||||||
"RESPONSES": {
|
"RESPONSES": {
|
||||||
"HEADER": "FAQs",
|
"HEADER": "FAQs",
|
||||||
"PENDING_FAQS": "Pending FAQs",
|
|
||||||
"ADD_NEW": "Create new FAQ",
|
"ADD_NEW": "Create new FAQ",
|
||||||
"DOCUMENTABLE": {
|
"DOCUMENTABLE": {
|
||||||
"CONVERSATION": "Conversation #{id}"
|
"CONVERSATION": "Conversation #{id}"
|
||||||
@@ -903,10 +902,6 @@
|
|||||||
"APPROVED": "Approved",
|
"APPROVED": "Approved",
|
||||||
"ALL": "Всички"
|
"ALL": "Всички"
|
||||||
},
|
},
|
||||||
"PENDING_BANNER": {
|
|
||||||
"TITLE": "Captain has found some FAQs your customers were looking for.",
|
|
||||||
"ACTION": "Click here to review"
|
|
||||||
},
|
|
||||||
"FORM_DESCRIPTION": "Add a question and its corresponding answer to the knowledge base and select the assistant it should be associated with.",
|
"FORM_DESCRIPTION": "Add a question and its corresponding answer to the knowledge base and select the assistant it should be associated with.",
|
||||||
"CREATE": {
|
"CREATE": {
|
||||||
"TITLE": "Add an FAQ",
|
"TITLE": "Add an FAQ",
|
||||||
@@ -937,15 +932,13 @@
|
|||||||
"APPROVE_SUCCESS_MESSAGE": "The FAQ was marked as approved"
|
"APPROVE_SUCCESS_MESSAGE": "The FAQ was marked as approved"
|
||||||
},
|
},
|
||||||
"OPTIONS": {
|
"OPTIONS": {
|
||||||
"APPROVE": "Approve",
|
"APPROVE": "Mark as approved",
|
||||||
"EDIT_RESPONSE": "Редактирай",
|
"EDIT_RESPONSE": "Edit FAQ",
|
||||||
"DELETE_RESPONSE": "Изтрий"
|
"DELETE_RESPONSE": "Delete FAQ"
|
||||||
},
|
},
|
||||||
"EMPTY_STATE": {
|
"EMPTY_STATE": {
|
||||||
"TITLE": "No FAQs Found",
|
"TITLE": "No FAQs Found",
|
||||||
"NO_PENDING_TITLE": "There are no more pending FAQs to review",
|
|
||||||
"SUBTITLE": "FAQs help your assistant provide quick and accurate answers to questions from your customers. They can be generated automatically from your content or can be added manually.",
|
"SUBTITLE": "FAQs help your assistant provide quick and accurate answers to questions from your customers. They can be generated automatically from your content or can be added manually.",
|
||||||
"CLEAR_SEARCH": "Clear active filters",
|
|
||||||
"FEATURE_SPOTLIGHT": {
|
"FEATURE_SPOTLIGHT": {
|
||||||
"TITLE": "Captain FAQ",
|
"TITLE": "Captain FAQ",
|
||||||
"NOTE": "Captain FAQs detects common customer questions—whether missing from your knowledge base or frequently asked—and generates relevant FAQs to improve support. You can review each suggestion and decide whether to approve or reject it."
|
"NOTE": "Captain FAQs detects common customer questions—whether missing from your knowledge base or frequently asked—and generates relevant FAQs to improve support. You can review each suggestion and decide whether to approve or reject it."
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
},
|
},
|
||||||
"LABELS": {
|
"LABELS": {
|
||||||
"ASSIGN_LABELS": "Assign labels",
|
"ASSIGN_LABELS": "Assign labels",
|
||||||
"NO_LABELS_FOUND": "No labels found",
|
"NO_LABELS_FOUND": "No labels found for",
|
||||||
"ASSIGN_SELECTED_LABELS": "Assign selected labels",
|
"ASSIGN_SELECTED_LABELS": "Assign selected labels",
|
||||||
"ASSIGN_SUCCESFUL": "Labels assigned successfully.",
|
"ASSIGN_SUCCESFUL": "Labels assigned successfully.",
|
||||||
"ASSIGN_FAILED": "Failed to assign labels. Please try again."
|
"ASSIGN_FAILED": "Failed to assign labels. Please try again."
|
||||||
|
|||||||
@@ -571,16 +571,6 @@
|
|||||||
"ACTIVE_EMPTY_STATE_TITLE": "No contacts are active at the moment 🌙"
|
"ACTIVE_EMPTY_STATE_TITLE": "No contacts are active at the moment 🌙"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"CONTACTS_BULK_ACTIONS": {
|
|
||||||
"ASSIGN_LABELS": "Assign Labels",
|
|
||||||
"ASSIGN_LABELS_SUCCESS": "Labels assigned successfully.",
|
|
||||||
"ASSIGN_LABELS_FAILED": "Failed to assign labels",
|
|
||||||
"DESCRIPTION": "Select the labels you want to add to the selected contacts.",
|
|
||||||
"NO_LABELS_FOUND": "No labels available yet.",
|
|
||||||
"SELECTED_COUNT": "{count} selected",
|
|
||||||
"CLEAR_SELECTION": "Clear selection",
|
|
||||||
"SELECT_ALL": "Select all ({count})"
|
|
||||||
},
|
|
||||||
"COMPOSE_NEW_CONVERSATION": {
|
"COMPOSE_NEW_CONVERSATION": {
|
||||||
"CONTACT_SEARCH": {
|
"CONTACT_SEARCH": {
|
||||||
"ERROR_MESSAGE": "We couldn’t complete the search. Please try again."
|
"ERROR_MESSAGE": "We couldn’t complete the search. Please try again."
|
||||||
|
|||||||
@@ -863,7 +863,6 @@
|
|||||||
},
|
},
|
||||||
"RESPONSES": {
|
"RESPONSES": {
|
||||||
"HEADER": "FAQs",
|
"HEADER": "FAQs",
|
||||||
"PENDING_FAQS": "Pending FAQs",
|
|
||||||
"ADD_NEW": "Create new FAQ",
|
"ADD_NEW": "Create new FAQ",
|
||||||
"DOCUMENTABLE": {
|
"DOCUMENTABLE": {
|
||||||
"CONVERSATION": "Conversation #{id}"
|
"CONVERSATION": "Conversation #{id}"
|
||||||
@@ -903,10 +902,6 @@
|
|||||||
"APPROVED": "Approved",
|
"APPROVED": "Approved",
|
||||||
"ALL": "All"
|
"ALL": "All"
|
||||||
},
|
},
|
||||||
"PENDING_BANNER": {
|
|
||||||
"TITLE": "Captain has found some FAQs your customers were looking for.",
|
|
||||||
"ACTION": "Click here to review"
|
|
||||||
},
|
|
||||||
"FORM_DESCRIPTION": "Add a question and its corresponding answer to the knowledge base and select the assistant it should be associated with.",
|
"FORM_DESCRIPTION": "Add a question and its corresponding answer to the knowledge base and select the assistant it should be associated with.",
|
||||||
"CREATE": {
|
"CREATE": {
|
||||||
"TITLE": "Add an FAQ",
|
"TITLE": "Add an FAQ",
|
||||||
@@ -937,15 +932,13 @@
|
|||||||
"APPROVE_SUCCESS_MESSAGE": "The FAQ was marked as approved"
|
"APPROVE_SUCCESS_MESSAGE": "The FAQ was marked as approved"
|
||||||
},
|
},
|
||||||
"OPTIONS": {
|
"OPTIONS": {
|
||||||
"APPROVE": "Approve",
|
"APPROVE": "Mark as approved",
|
||||||
"EDIT_RESPONSE": "Edit",
|
"EDIT_RESPONSE": "Edit FAQ",
|
||||||
"DELETE_RESPONSE": "Delete"
|
"DELETE_RESPONSE": "Delete FAQ"
|
||||||
},
|
},
|
||||||
"EMPTY_STATE": {
|
"EMPTY_STATE": {
|
||||||
"TITLE": "No FAQs Found",
|
"TITLE": "No FAQs Found",
|
||||||
"NO_PENDING_TITLE": "There are no more pending FAQs to review",
|
|
||||||
"SUBTITLE": "FAQs help your assistant provide quick and accurate answers to questions from your customers. They can be generated automatically from your content or can be added manually.",
|
"SUBTITLE": "FAQs help your assistant provide quick and accurate answers to questions from your customers. They can be generated automatically from your content or can be added manually.",
|
||||||
"CLEAR_SEARCH": "Clear active filters",
|
|
||||||
"FEATURE_SPOTLIGHT": {
|
"FEATURE_SPOTLIGHT": {
|
||||||
"TITLE": "Captain FAQ",
|
"TITLE": "Captain FAQ",
|
||||||
"NOTE": "Captain FAQs detects common customer questions—whether missing from your knowledge base or frequently asked—and generates relevant FAQs to improve support. You can review each suggestion and decide whether to approve or reject it."
|
"NOTE": "Captain FAQs detects common customer questions—whether missing from your knowledge base or frequently asked—and generates relevant FAQs to improve support. You can review each suggestion and decide whether to approve or reject it."
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
},
|
},
|
||||||
"LABELS": {
|
"LABELS": {
|
||||||
"ASSIGN_LABELS": "Assignar etiquetes",
|
"ASSIGN_LABELS": "Assignar etiquetes",
|
||||||
"NO_LABELS_FOUND": "No s'han trobat etiquetes",
|
"NO_LABELS_FOUND": "No s'han trobat etiquetes per a",
|
||||||
"ASSIGN_SELECTED_LABELS": "Assigna les etiquetes seleccionades",
|
"ASSIGN_SELECTED_LABELS": "Assigna les etiquetes seleccionades",
|
||||||
"ASSIGN_SUCCESFUL": "L'etiqueta s'ha assignat correctament.",
|
"ASSIGN_SUCCESFUL": "L'etiqueta s'ha assignat correctament.",
|
||||||
"ASSIGN_FAILED": "No s'han pogut assignar les etiquetes. Torna-ho a provar."
|
"ASSIGN_FAILED": "No s'han pogut assignar les etiquetes. Torna-ho a provar."
|
||||||
|
|||||||
@@ -571,16 +571,6 @@
|
|||||||
"ACTIVE_EMPTY_STATE_TITLE": "No contacts are active at the moment 🌙"
|
"ACTIVE_EMPTY_STATE_TITLE": "No contacts are active at the moment 🌙"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"CONTACTS_BULK_ACTIONS": {
|
|
||||||
"ASSIGN_LABELS": "Assign Labels",
|
|
||||||
"ASSIGN_LABELS_SUCCESS": "L'etiqueta s'ha assignat correctament.",
|
|
||||||
"ASSIGN_LABELS_FAILED": "Failed to assign labels",
|
|
||||||
"DESCRIPTION": "Select the labels you want to add to the selected contacts.",
|
|
||||||
"NO_LABELS_FOUND": "No labels available yet.",
|
|
||||||
"SELECTED_COUNT": "{count} selected",
|
|
||||||
"CLEAR_SELECTION": "Clear selection",
|
|
||||||
"SELECT_ALL": "Select all ({count})"
|
|
||||||
},
|
|
||||||
"COMPOSE_NEW_CONVERSATION": {
|
"COMPOSE_NEW_CONVERSATION": {
|
||||||
"CONTACT_SEARCH": {
|
"CONTACT_SEARCH": {
|
||||||
"ERROR_MESSAGE": "We couldn’t complete the search. Please try again."
|
"ERROR_MESSAGE": "We couldn’t complete the search. Please try again."
|
||||||
|
|||||||
@@ -863,7 +863,6 @@
|
|||||||
},
|
},
|
||||||
"RESPONSES": {
|
"RESPONSES": {
|
||||||
"HEADER": "FAQs",
|
"HEADER": "FAQs",
|
||||||
"PENDING_FAQS": "Pending FAQs",
|
|
||||||
"ADD_NEW": "Create new FAQ",
|
"ADD_NEW": "Create new FAQ",
|
||||||
"DOCUMENTABLE": {
|
"DOCUMENTABLE": {
|
||||||
"CONVERSATION": "Conversation #{id}"
|
"CONVERSATION": "Conversation #{id}"
|
||||||
@@ -903,10 +902,6 @@
|
|||||||
"APPROVED": "Approved",
|
"APPROVED": "Approved",
|
||||||
"ALL": "Totes"
|
"ALL": "Totes"
|
||||||
},
|
},
|
||||||
"PENDING_BANNER": {
|
|
||||||
"TITLE": "Captain has found some FAQs your customers were looking for.",
|
|
||||||
"ACTION": "Click here to review"
|
|
||||||
},
|
|
||||||
"FORM_DESCRIPTION": "Add a question and its corresponding answer to the knowledge base and select the assistant it should be associated with.",
|
"FORM_DESCRIPTION": "Add a question and its corresponding answer to the knowledge base and select the assistant it should be associated with.",
|
||||||
"CREATE": {
|
"CREATE": {
|
||||||
"TITLE": "Add an FAQ",
|
"TITLE": "Add an FAQ",
|
||||||
@@ -937,15 +932,13 @@
|
|||||||
"APPROVE_SUCCESS_MESSAGE": "The FAQ was marked as approved"
|
"APPROVE_SUCCESS_MESSAGE": "The FAQ was marked as approved"
|
||||||
},
|
},
|
||||||
"OPTIONS": {
|
"OPTIONS": {
|
||||||
"APPROVE": "Approve",
|
"APPROVE": "Mark as approved",
|
||||||
"EDIT_RESPONSE": "Edita",
|
"EDIT_RESPONSE": "Edit FAQ",
|
||||||
"DELETE_RESPONSE": "Esborrar"
|
"DELETE_RESPONSE": "Delete FAQ"
|
||||||
},
|
},
|
||||||
"EMPTY_STATE": {
|
"EMPTY_STATE": {
|
||||||
"TITLE": "No FAQs Found",
|
"TITLE": "No FAQs Found",
|
||||||
"NO_PENDING_TITLE": "There are no more pending FAQs to review",
|
|
||||||
"SUBTITLE": "FAQs help your assistant provide quick and accurate answers to questions from your customers. They can be generated automatically from your content or can be added manually.",
|
"SUBTITLE": "FAQs help your assistant provide quick and accurate answers to questions from your customers. They can be generated automatically from your content or can be added manually.",
|
||||||
"CLEAR_SEARCH": "Clear active filters",
|
|
||||||
"FEATURE_SPOTLIGHT": {
|
"FEATURE_SPOTLIGHT": {
|
||||||
"TITLE": "Captain FAQ",
|
"TITLE": "Captain FAQ",
|
||||||
"NOTE": "Captain FAQs detects common customer questions—whether missing from your knowledge base or frequently asked—and generates relevant FAQs to improve support. You can review each suggestion and decide whether to approve or reject it."
|
"NOTE": "Captain FAQs detects common customer questions—whether missing from your knowledge base or frequently asked—and generates relevant FAQs to improve support. You can review each suggestion and decide whether to approve or reject it."
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
},
|
},
|
||||||
"LABELS": {
|
"LABELS": {
|
||||||
"ASSIGN_LABELS": "Assign labels",
|
"ASSIGN_LABELS": "Assign labels",
|
||||||
"NO_LABELS_FOUND": "No labels found",
|
"NO_LABELS_FOUND": "No labels found for",
|
||||||
"ASSIGN_SELECTED_LABELS": "Assign selected labels",
|
"ASSIGN_SELECTED_LABELS": "Assign selected labels",
|
||||||
"ASSIGN_SUCCESFUL": "Labels assigned successfully.",
|
"ASSIGN_SUCCESFUL": "Labels assigned successfully.",
|
||||||
"ASSIGN_FAILED": "Failed to assign labels. Please try again."
|
"ASSIGN_FAILED": "Failed to assign labels. Please try again."
|
||||||
|
|||||||
@@ -571,16 +571,6 @@
|
|||||||
"ACTIVE_EMPTY_STATE_TITLE": "No contacts are active at the moment 🌙"
|
"ACTIVE_EMPTY_STATE_TITLE": "No contacts are active at the moment 🌙"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"CONTACTS_BULK_ACTIONS": {
|
|
||||||
"ASSIGN_LABELS": "Assign Labels",
|
|
||||||
"ASSIGN_LABELS_SUCCESS": "Labels assigned successfully.",
|
|
||||||
"ASSIGN_LABELS_FAILED": "Failed to assign labels",
|
|
||||||
"DESCRIPTION": "Select the labels you want to add to the selected contacts.",
|
|
||||||
"NO_LABELS_FOUND": "No labels available yet.",
|
|
||||||
"SELECTED_COUNT": "{count} selected",
|
|
||||||
"CLEAR_SELECTION": "Clear selection",
|
|
||||||
"SELECT_ALL": "Select all ({count})"
|
|
||||||
},
|
|
||||||
"COMPOSE_NEW_CONVERSATION": {
|
"COMPOSE_NEW_CONVERSATION": {
|
||||||
"CONTACT_SEARCH": {
|
"CONTACT_SEARCH": {
|
||||||
"ERROR_MESSAGE": "We couldn’t complete the search. Please try again."
|
"ERROR_MESSAGE": "We couldn’t complete the search. Please try again."
|
||||||
|
|||||||
@@ -863,7 +863,6 @@
|
|||||||
},
|
},
|
||||||
"RESPONSES": {
|
"RESPONSES": {
|
||||||
"HEADER": "FAQs",
|
"HEADER": "FAQs",
|
||||||
"PENDING_FAQS": "Pending FAQs",
|
|
||||||
"ADD_NEW": "Create new FAQ",
|
"ADD_NEW": "Create new FAQ",
|
||||||
"DOCUMENTABLE": {
|
"DOCUMENTABLE": {
|
||||||
"CONVERSATION": "Conversation #{id}"
|
"CONVERSATION": "Conversation #{id}"
|
||||||
@@ -903,10 +902,6 @@
|
|||||||
"APPROVED": "Approved",
|
"APPROVED": "Approved",
|
||||||
"ALL": "Vše"
|
"ALL": "Vše"
|
||||||
},
|
},
|
||||||
"PENDING_BANNER": {
|
|
||||||
"TITLE": "Captain has found some FAQs your customers were looking for.",
|
|
||||||
"ACTION": "Click here to review"
|
|
||||||
},
|
|
||||||
"FORM_DESCRIPTION": "Add a question and its corresponding answer to the knowledge base and select the assistant it should be associated with.",
|
"FORM_DESCRIPTION": "Add a question and its corresponding answer to the knowledge base and select the assistant it should be associated with.",
|
||||||
"CREATE": {
|
"CREATE": {
|
||||||
"TITLE": "Add an FAQ",
|
"TITLE": "Add an FAQ",
|
||||||
@@ -937,15 +932,13 @@
|
|||||||
"APPROVE_SUCCESS_MESSAGE": "The FAQ was marked as approved"
|
"APPROVE_SUCCESS_MESSAGE": "The FAQ was marked as approved"
|
||||||
},
|
},
|
||||||
"OPTIONS": {
|
"OPTIONS": {
|
||||||
"APPROVE": "Approve",
|
"APPROVE": "Mark as approved",
|
||||||
"EDIT_RESPONSE": "Upravit",
|
"EDIT_RESPONSE": "Edit FAQ",
|
||||||
"DELETE_RESPONSE": "Vymazat"
|
"DELETE_RESPONSE": "Delete FAQ"
|
||||||
},
|
},
|
||||||
"EMPTY_STATE": {
|
"EMPTY_STATE": {
|
||||||
"TITLE": "No FAQs Found",
|
"TITLE": "No FAQs Found",
|
||||||
"NO_PENDING_TITLE": "There are no more pending FAQs to review",
|
|
||||||
"SUBTITLE": "FAQs help your assistant provide quick and accurate answers to questions from your customers. They can be generated automatically from your content or can be added manually.",
|
"SUBTITLE": "FAQs help your assistant provide quick and accurate answers to questions from your customers. They can be generated automatically from your content or can be added manually.",
|
||||||
"CLEAR_SEARCH": "Clear active filters",
|
|
||||||
"FEATURE_SPOTLIGHT": {
|
"FEATURE_SPOTLIGHT": {
|
||||||
"TITLE": "Captain FAQ",
|
"TITLE": "Captain FAQ",
|
||||||
"NOTE": "Captain FAQs detects common customer questions—whether missing from your knowledge base or frequently asked—and generates relevant FAQs to improve support. You can review each suggestion and decide whether to approve or reject it."
|
"NOTE": "Captain FAQs detects common customer questions—whether missing from your knowledge base or frequently asked—and generates relevant FAQs to improve support. You can review each suggestion and decide whether to approve or reject it."
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
},
|
},
|
||||||
"LABELS": {
|
"LABELS": {
|
||||||
"ASSIGN_LABELS": "Assign labels",
|
"ASSIGN_LABELS": "Assign labels",
|
||||||
"NO_LABELS_FOUND": "Ingen labels fundet",
|
"NO_LABELS_FOUND": "Ingen etiketter fundet for",
|
||||||
"ASSIGN_SELECTED_LABELS": "Tildel valgte etiketter",
|
"ASSIGN_SELECTED_LABELS": "Tildel valgte etiketter",
|
||||||
"ASSIGN_SUCCESFUL": "Etiketter tildelt med succes.",
|
"ASSIGN_SUCCESFUL": "Etiketter tildelt med succes.",
|
||||||
"ASSIGN_FAILED": "Failed to assign labels. Please try again."
|
"ASSIGN_FAILED": "Failed to assign labels. Please try again."
|
||||||
|
|||||||
@@ -571,16 +571,6 @@
|
|||||||
"ACTIVE_EMPTY_STATE_TITLE": "No contacts are active at the moment 🌙"
|
"ACTIVE_EMPTY_STATE_TITLE": "No contacts are active at the moment 🌙"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"CONTACTS_BULK_ACTIONS": {
|
|
||||||
"ASSIGN_LABELS": "Tildel Etiketter",
|
|
||||||
"ASSIGN_LABELS_SUCCESS": "Etiketter tildelt med succes.",
|
|
||||||
"ASSIGN_LABELS_FAILED": "Failed to assign labels",
|
|
||||||
"DESCRIPTION": "Select the labels you want to add to the selected contacts.",
|
|
||||||
"NO_LABELS_FOUND": "No labels available yet.",
|
|
||||||
"SELECTED_COUNT": "{count} selected",
|
|
||||||
"CLEAR_SELECTION": "Clear selection",
|
|
||||||
"SELECT_ALL": "Select all ({count})"
|
|
||||||
},
|
|
||||||
"COMPOSE_NEW_CONVERSATION": {
|
"COMPOSE_NEW_CONVERSATION": {
|
||||||
"CONTACT_SEARCH": {
|
"CONTACT_SEARCH": {
|
||||||
"ERROR_MESSAGE": "We couldn’t complete the search. Please try again."
|
"ERROR_MESSAGE": "We couldn’t complete the search. Please try again."
|
||||||
|
|||||||
@@ -863,7 +863,6 @@
|
|||||||
},
|
},
|
||||||
"RESPONSES": {
|
"RESPONSES": {
|
||||||
"HEADER": "FAQs",
|
"HEADER": "FAQs",
|
||||||
"PENDING_FAQS": "Pending FAQs",
|
|
||||||
"ADD_NEW": "Create new FAQ",
|
"ADD_NEW": "Create new FAQ",
|
||||||
"DOCUMENTABLE": {
|
"DOCUMENTABLE": {
|
||||||
"CONVERSATION": "Conversation #{id}"
|
"CONVERSATION": "Conversation #{id}"
|
||||||
@@ -903,10 +902,6 @@
|
|||||||
"APPROVED": "Approved",
|
"APPROVED": "Approved",
|
||||||
"ALL": "Alle"
|
"ALL": "Alle"
|
||||||
},
|
},
|
||||||
"PENDING_BANNER": {
|
|
||||||
"TITLE": "Captain has found some FAQs your customers were looking for.",
|
|
||||||
"ACTION": "Click here to review"
|
|
||||||
},
|
|
||||||
"FORM_DESCRIPTION": "Add a question and its corresponding answer to the knowledge base and select the assistant it should be associated with.",
|
"FORM_DESCRIPTION": "Add a question and its corresponding answer to the knowledge base and select the assistant it should be associated with.",
|
||||||
"CREATE": {
|
"CREATE": {
|
||||||
"TITLE": "Add an FAQ",
|
"TITLE": "Add an FAQ",
|
||||||
@@ -937,15 +932,13 @@
|
|||||||
"APPROVE_SUCCESS_MESSAGE": "The FAQ was marked as approved"
|
"APPROVE_SUCCESS_MESSAGE": "The FAQ was marked as approved"
|
||||||
},
|
},
|
||||||
"OPTIONS": {
|
"OPTIONS": {
|
||||||
"APPROVE": "Approve",
|
"APPROVE": "Mark as approved",
|
||||||
"EDIT_RESPONSE": "Rediger",
|
"EDIT_RESPONSE": "Edit FAQ",
|
||||||
"DELETE_RESPONSE": "Slet"
|
"DELETE_RESPONSE": "Delete FAQ"
|
||||||
},
|
},
|
||||||
"EMPTY_STATE": {
|
"EMPTY_STATE": {
|
||||||
"TITLE": "No FAQs Found",
|
"TITLE": "No FAQs Found",
|
||||||
"NO_PENDING_TITLE": "There are no more pending FAQs to review",
|
|
||||||
"SUBTITLE": "FAQs help your assistant provide quick and accurate answers to questions from your customers. They can be generated automatically from your content or can be added manually.",
|
"SUBTITLE": "FAQs help your assistant provide quick and accurate answers to questions from your customers. They can be generated automatically from your content or can be added manually.",
|
||||||
"CLEAR_SEARCH": "Clear active filters",
|
|
||||||
"FEATURE_SPOTLIGHT": {
|
"FEATURE_SPOTLIGHT": {
|
||||||
"TITLE": "Captain FAQ",
|
"TITLE": "Captain FAQ",
|
||||||
"NOTE": "Captain FAQs detects common customer questions—whether missing from your knowledge base or frequently asked—and generates relevant FAQs to improve support. You can review each suggestion and decide whether to approve or reject it."
|
"NOTE": "Captain FAQs detects common customer questions—whether missing from your knowledge base or frequently asked—and generates relevant FAQs to improve support. You can review each suggestion and decide whether to approve or reject it."
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
},
|
},
|
||||||
"LABELS": {
|
"LABELS": {
|
||||||
"ASSIGN_LABELS": "Labels zuweisen",
|
"ASSIGN_LABELS": "Labels zuweisen",
|
||||||
"NO_LABELS_FOUND": "Keine Labels gefunden",
|
"NO_LABELS_FOUND": "Keine Labels gefunden für",
|
||||||
"ASSIGN_SELECTED_LABELS": "Ausgewählte Labels zuweisen",
|
"ASSIGN_SELECTED_LABELS": "Ausgewählte Labels zuweisen",
|
||||||
"ASSIGN_SUCCESFUL": "Labels erfolgreich zugewiesen.",
|
"ASSIGN_SUCCESFUL": "Labels erfolgreich zugewiesen.",
|
||||||
"ASSIGN_FAILED": "Labels konnten nicht zugewiesen werden. Bitte versuchen Sie es erneut."
|
"ASSIGN_FAILED": "Labels konnten nicht zugewiesen werden. Bitte versuchen Sie es erneut."
|
||||||
|
|||||||
@@ -571,16 +571,6 @@
|
|||||||
"ACTIVE_EMPTY_STATE_TITLE": "Im Moment sind keine Kontakte aktiv 🌙"
|
"ACTIVE_EMPTY_STATE_TITLE": "Im Moment sind keine Kontakte aktiv 🌙"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"CONTACTS_BULK_ACTIONS": {
|
|
||||||
"ASSIGN_LABELS": "Labels zuweisen",
|
|
||||||
"ASSIGN_LABELS_SUCCESS": "Labels erfolgreich zugewiesen.",
|
|
||||||
"ASSIGN_LABELS_FAILED": "Failed to assign labels",
|
|
||||||
"DESCRIPTION": "Select the labels you want to add to the selected contacts.",
|
|
||||||
"NO_LABELS_FOUND": "No labels available yet.",
|
|
||||||
"SELECTED_COUNT": "{count} selected",
|
|
||||||
"CLEAR_SELECTION": "Clear selection",
|
|
||||||
"SELECT_ALL": "Select all ({count})"
|
|
||||||
},
|
|
||||||
"COMPOSE_NEW_CONVERSATION": {
|
"COMPOSE_NEW_CONVERSATION": {
|
||||||
"CONTACT_SEARCH": {
|
"CONTACT_SEARCH": {
|
||||||
"ERROR_MESSAGE": "Wir konnten die Suche nicht abschließen. Bitte versuch es erneut."
|
"ERROR_MESSAGE": "Wir konnten die Suche nicht abschließen. Bitte versuch es erneut."
|
||||||
|
|||||||
@@ -863,7 +863,6 @@
|
|||||||
},
|
},
|
||||||
"RESPONSES": {
|
"RESPONSES": {
|
||||||
"HEADER": "FAQs",
|
"HEADER": "FAQs",
|
||||||
"PENDING_FAQS": "Pending FAQs",
|
|
||||||
"ADD_NEW": "Create new FAQ",
|
"ADD_NEW": "Create new FAQ",
|
||||||
"DOCUMENTABLE": {
|
"DOCUMENTABLE": {
|
||||||
"CONVERSATION": "Conversation #{id}"
|
"CONVERSATION": "Conversation #{id}"
|
||||||
@@ -903,10 +902,6 @@
|
|||||||
"APPROVED": "Approved",
|
"APPROVED": "Approved",
|
||||||
"ALL": "Alle"
|
"ALL": "Alle"
|
||||||
},
|
},
|
||||||
"PENDING_BANNER": {
|
|
||||||
"TITLE": "Captain has found some FAQs your customers were looking for.",
|
|
||||||
"ACTION": "Click here to review"
|
|
||||||
},
|
|
||||||
"FORM_DESCRIPTION": "Add a question and its corresponding answer to the knowledge base and select the assistant it should be associated with.",
|
"FORM_DESCRIPTION": "Add a question and its corresponding answer to the knowledge base and select the assistant it should be associated with.",
|
||||||
"CREATE": {
|
"CREATE": {
|
||||||
"TITLE": "Add an FAQ",
|
"TITLE": "Add an FAQ",
|
||||||
@@ -937,15 +932,13 @@
|
|||||||
"APPROVE_SUCCESS_MESSAGE": "The FAQ was marked as approved"
|
"APPROVE_SUCCESS_MESSAGE": "The FAQ was marked as approved"
|
||||||
},
|
},
|
||||||
"OPTIONS": {
|
"OPTIONS": {
|
||||||
"APPROVE": "Approve",
|
"APPROVE": "Mark as approved",
|
||||||
"EDIT_RESPONSE": "Bearbeiten",
|
"EDIT_RESPONSE": "Edit FAQ",
|
||||||
"DELETE_RESPONSE": "Löschen"
|
"DELETE_RESPONSE": "Delete FAQ"
|
||||||
},
|
},
|
||||||
"EMPTY_STATE": {
|
"EMPTY_STATE": {
|
||||||
"TITLE": "No FAQs Found",
|
"TITLE": "No FAQs Found",
|
||||||
"NO_PENDING_TITLE": "There are no more pending FAQs to review",
|
|
||||||
"SUBTITLE": "FAQs help your assistant provide quick and accurate answers to questions from your customers. They can be generated automatically from your content or can be added manually.",
|
"SUBTITLE": "FAQs help your assistant provide quick and accurate answers to questions from your customers. They can be generated automatically from your content or can be added manually.",
|
||||||
"CLEAR_SEARCH": "Clear active filters",
|
|
||||||
"FEATURE_SPOTLIGHT": {
|
"FEATURE_SPOTLIGHT": {
|
||||||
"TITLE": "Captain FAQ",
|
"TITLE": "Captain FAQ",
|
||||||
"NOTE": "Captain FAQs detects common customer questions—whether missing from your knowledge base or frequently asked—and generates relevant FAQs to improve support. You can review each suggestion and decide whether to approve or reject it."
|
"NOTE": "Captain FAQs detects common customer questions—whether missing from your knowledge base or frequently asked—and generates relevant FAQs to improve support. You can review each suggestion and decide whether to approve or reject it."
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
},
|
},
|
||||||
"LABELS": {
|
"LABELS": {
|
||||||
"ASSIGN_LABELS": "Assign labels",
|
"ASSIGN_LABELS": "Assign labels",
|
||||||
"NO_LABELS_FOUND": "Δεν βρέθηκαν ετικέτες",
|
"NO_LABELS_FOUND": "Δεν βρέθηκαν πρότυπα για",
|
||||||
"ASSIGN_SELECTED_LABELS": "Ανάθεση επιλεγμένων ετικετών",
|
"ASSIGN_SELECTED_LABELS": "Ανάθεση επιλεγμένων ετικετών",
|
||||||
"ASSIGN_SUCCESFUL": "Επιτυχής ανάθεση ετικετών.",
|
"ASSIGN_SUCCESFUL": "Επιτυχής ανάθεση ετικετών.",
|
||||||
"ASSIGN_FAILED": "Failed to assign labels. Please try again."
|
"ASSIGN_FAILED": "Failed to assign labels. Please try again."
|
||||||
|
|||||||
@@ -571,16 +571,6 @@
|
|||||||
"ACTIVE_EMPTY_STATE_TITLE": "No contacts are active at the moment 🌙"
|
"ACTIVE_EMPTY_STATE_TITLE": "No contacts are active at the moment 🌙"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"CONTACTS_BULK_ACTIONS": {
|
|
||||||
"ASSIGN_LABELS": "Ανάθεση Ετικετών",
|
|
||||||
"ASSIGN_LABELS_SUCCESS": "Επιτυχής ανάθεση ετικετών.",
|
|
||||||
"ASSIGN_LABELS_FAILED": "Failed to assign labels",
|
|
||||||
"DESCRIPTION": "Select the labels you want to add to the selected contacts.",
|
|
||||||
"NO_LABELS_FOUND": "No labels available yet.",
|
|
||||||
"SELECTED_COUNT": "{count} selected",
|
|
||||||
"CLEAR_SELECTION": "Clear selection",
|
|
||||||
"SELECT_ALL": "Select all ({count})"
|
|
||||||
},
|
|
||||||
"COMPOSE_NEW_CONVERSATION": {
|
"COMPOSE_NEW_CONVERSATION": {
|
||||||
"CONTACT_SEARCH": {
|
"CONTACT_SEARCH": {
|
||||||
"ERROR_MESSAGE": "We couldn’t complete the search. Please try again."
|
"ERROR_MESSAGE": "We couldn’t complete the search. Please try again."
|
||||||
|
|||||||
@@ -863,7 +863,6 @@
|
|||||||
},
|
},
|
||||||
"RESPONSES": {
|
"RESPONSES": {
|
||||||
"HEADER": "FAQs",
|
"HEADER": "FAQs",
|
||||||
"PENDING_FAQS": "Pending FAQs",
|
|
||||||
"ADD_NEW": "Create new FAQ",
|
"ADD_NEW": "Create new FAQ",
|
||||||
"DOCUMENTABLE": {
|
"DOCUMENTABLE": {
|
||||||
"CONVERSATION": "Conversation #{id}"
|
"CONVERSATION": "Conversation #{id}"
|
||||||
@@ -903,10 +902,6 @@
|
|||||||
"APPROVED": "Approved",
|
"APPROVED": "Approved",
|
||||||
"ALL": "Όλες"
|
"ALL": "Όλες"
|
||||||
},
|
},
|
||||||
"PENDING_BANNER": {
|
|
||||||
"TITLE": "Captain has found some FAQs your customers were looking for.",
|
|
||||||
"ACTION": "Click here to review"
|
|
||||||
},
|
|
||||||
"FORM_DESCRIPTION": "Add a question and its corresponding answer to the knowledge base and select the assistant it should be associated with.",
|
"FORM_DESCRIPTION": "Add a question and its corresponding answer to the knowledge base and select the assistant it should be associated with.",
|
||||||
"CREATE": {
|
"CREATE": {
|
||||||
"TITLE": "Add an FAQ",
|
"TITLE": "Add an FAQ",
|
||||||
@@ -937,15 +932,13 @@
|
|||||||
"APPROVE_SUCCESS_MESSAGE": "The FAQ was marked as approved"
|
"APPROVE_SUCCESS_MESSAGE": "The FAQ was marked as approved"
|
||||||
},
|
},
|
||||||
"OPTIONS": {
|
"OPTIONS": {
|
||||||
"APPROVE": "Approve",
|
"APPROVE": "Mark as approved",
|
||||||
"EDIT_RESPONSE": "Επεξεργασία",
|
"EDIT_RESPONSE": "Edit FAQ",
|
||||||
"DELETE_RESPONSE": "Διαγραφή"
|
"DELETE_RESPONSE": "Delete FAQ"
|
||||||
},
|
},
|
||||||
"EMPTY_STATE": {
|
"EMPTY_STATE": {
|
||||||
"TITLE": "No FAQs Found",
|
"TITLE": "No FAQs Found",
|
||||||
"NO_PENDING_TITLE": "There are no more pending FAQs to review",
|
|
||||||
"SUBTITLE": "FAQs help your assistant provide quick and accurate answers to questions from your customers. They can be generated automatically from your content or can be added manually.",
|
"SUBTITLE": "FAQs help your assistant provide quick and accurate answers to questions from your customers. They can be generated automatically from your content or can be added manually.",
|
||||||
"CLEAR_SEARCH": "Clear active filters",
|
|
||||||
"FEATURE_SPOTLIGHT": {
|
"FEATURE_SPOTLIGHT": {
|
||||||
"TITLE": "Captain FAQ",
|
"TITLE": "Captain FAQ",
|
||||||
"NOTE": "Captain FAQs detects common customer questions—whether missing from your knowledge base or frequently asked—and generates relevant FAQs to improve support. You can review each suggestion and decide whether to approve or reject it."
|
"NOTE": "Captain FAQs detects common customer questions—whether missing from your knowledge base or frequently asked—and generates relevant FAQs to improve support. You can review each suggestion and decide whether to approve or reject it."
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
},
|
},
|
||||||
"LABELS": {
|
"LABELS": {
|
||||||
"ASSIGN_LABELS": "Assign labels",
|
"ASSIGN_LABELS": "Assign labels",
|
||||||
"NO_LABELS_FOUND": "No labels found",
|
"NO_LABELS_FOUND": "No labels found for",
|
||||||
"ASSIGN_SELECTED_LABELS": "Assign selected labels",
|
"ASSIGN_SELECTED_LABELS": "Assign selected labels",
|
||||||
"ASSIGN_SUCCESFUL": "Labels assigned successfully.",
|
"ASSIGN_SUCCESFUL": "Labels assigned successfully.",
|
||||||
"ASSIGN_FAILED": "Failed to assign labels. Please try again."
|
"ASSIGN_FAILED": "Failed to assign labels. Please try again."
|
||||||
|
|||||||
@@ -572,27 +572,6 @@
|
|||||||
"ACTIVE_EMPTY_STATE_TITLE": "No contacts are active at the moment 🌙"
|
"ACTIVE_EMPTY_STATE_TITLE": "No contacts are active at the moment 🌙"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"CONTACTS_BULK_ACTIONS": {
|
|
||||||
"ASSIGN_LABELS": "Assign Labels",
|
|
||||||
"ASSIGN_LABELS_SUCCESS": "Labels assigned successfully.",
|
|
||||||
"ASSIGN_LABELS_FAILED": "Failed to assign labels",
|
|
||||||
"DESCRIPTION": "Select the labels you want to add to the selected contacts.",
|
|
||||||
"NO_LABELS_FOUND": "No labels available yet.",
|
|
||||||
"SELECTED_COUNT": "{count} selected",
|
|
||||||
"CLEAR_SELECTION": "Clear selection",
|
|
||||||
"SELECT_ALL": "Select all ({count})",
|
|
||||||
"DELETE_CONTACTS": "Delete",
|
|
||||||
"DELETE_SUCCESS": "Contacts deleted successfully.",
|
|
||||||
"DELETE_FAILED": "Failed to delete contacts.",
|
|
||||||
"DELETE_DIALOG": {
|
|
||||||
"TITLE": "Delete selected contacts",
|
|
||||||
"SINGULAR_TITLE": "Delete selected contact",
|
|
||||||
"DESCRIPTION": "This will permanently delete {count} selected contacts. This action cannot be undone.",
|
|
||||||
"SINGULAR_DESCRIPTION": "This will permanently delete the selected contact. This action cannot be undone.",
|
|
||||||
"CONFIRM_MULTIPLE": "Delete contacts",
|
|
||||||
"CONFIRM_SINGLE": "Delete contact"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
"COMPOSE_NEW_CONVERSATION": {
|
"COMPOSE_NEW_CONVERSATION": {
|
||||||
"CONTACT_SEARCH": {
|
"CONTACT_SEARCH": {
|
||||||
|
|||||||
@@ -942,9 +942,7 @@
|
|||||||
},
|
},
|
||||||
"EMPTY_STATE": {
|
"EMPTY_STATE": {
|
||||||
"TITLE": "No FAQs Found",
|
"TITLE": "No FAQs Found",
|
||||||
"NO_PENDING_TITLE": "There are no more pending FAQs to review",
|
|
||||||
"SUBTITLE": "FAQs help your assistant provide quick and accurate answers to questions from your customers. They can be generated automatically from your content or can be added manually.",
|
"SUBTITLE": "FAQs help your assistant provide quick and accurate answers to questions from your customers. They can be generated automatically from your content or can be added manually.",
|
||||||
"CLEAR_SEARCH": "Clear active filters",
|
|
||||||
"FEATURE_SPOTLIGHT": {
|
"FEATURE_SPOTLIGHT": {
|
||||||
"TITLE": "Captain FAQ",
|
"TITLE": "Captain FAQ",
|
||||||
"NOTE": "Captain FAQs detects common customer questions—whether missing from your knowledge base or frequently asked—and generates relevant FAQs to improve support. You can review each suggestion and decide whether to approve or reject it."
|
"NOTE": "Captain FAQs detects common customer questions—whether missing from your knowledge base or frequently asked—and generates relevant FAQs to improve support. You can review each suggestion and decide whether to approve or reject it."
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
},
|
},
|
||||||
"LABELS": {
|
"LABELS": {
|
||||||
"ASSIGN_LABELS": "Asignar etiqueta",
|
"ASSIGN_LABELS": "Asignar etiqueta",
|
||||||
"NO_LABELS_FOUND": "No se encontraron etiquetas",
|
"NO_LABELS_FOUND": "No se encontraron etiquetas para",
|
||||||
"ASSIGN_SELECTED_LABELS": "Asignar etiquetas seleccionadas",
|
"ASSIGN_SELECTED_LABELS": "Asignar etiquetas seleccionadas",
|
||||||
"ASSIGN_SUCCESFUL": "Etiquetas asignadas correctamente.",
|
"ASSIGN_SUCCESFUL": "Etiquetas asignadas correctamente.",
|
||||||
"ASSIGN_FAILED": "Error al asignar etiquetas, inténtalo de nuevo."
|
"ASSIGN_FAILED": "Error al asignar etiquetas, inténtalo de nuevo."
|
||||||
|
|||||||
@@ -571,16 +571,6 @@
|
|||||||
"ACTIVE_EMPTY_STATE_TITLE": "No hay contactos activos por el momento 🌙"
|
"ACTIVE_EMPTY_STATE_TITLE": "No hay contactos activos por el momento 🌙"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"CONTACTS_BULK_ACTIONS": {
|
|
||||||
"ASSIGN_LABELS": "Asignar etiquetas",
|
|
||||||
"ASSIGN_LABELS_SUCCESS": "Etiquetas asignadas correctamente.",
|
|
||||||
"ASSIGN_LABELS_FAILED": "Failed to assign labels",
|
|
||||||
"DESCRIPTION": "Select the labels you want to add to the selected contacts.",
|
|
||||||
"NO_LABELS_FOUND": "No labels available yet.",
|
|
||||||
"SELECTED_COUNT": "{count} selected",
|
|
||||||
"CLEAR_SELECTION": "Clear selection",
|
|
||||||
"SELECT_ALL": "Select all ({count})"
|
|
||||||
},
|
|
||||||
"COMPOSE_NEW_CONVERSATION": {
|
"COMPOSE_NEW_CONVERSATION": {
|
||||||
"CONTACT_SEARCH": {
|
"CONTACT_SEARCH": {
|
||||||
"ERROR_MESSAGE": "No pudimos completar la búsqueda. Por favor, inténtalo de nuevo."
|
"ERROR_MESSAGE": "No pudimos completar la búsqueda. Por favor, inténtalo de nuevo."
|
||||||
|
|||||||
@@ -863,7 +863,6 @@
|
|||||||
},
|
},
|
||||||
"RESPONSES": {
|
"RESPONSES": {
|
||||||
"HEADER": "Preguntas frecuentes",
|
"HEADER": "Preguntas frecuentes",
|
||||||
"PENDING_FAQS": "Pending FAQs",
|
|
||||||
"ADD_NEW": "Create new FAQ",
|
"ADD_NEW": "Create new FAQ",
|
||||||
"DOCUMENTABLE": {
|
"DOCUMENTABLE": {
|
||||||
"CONVERSATION": "Conversation #{id}"
|
"CONVERSATION": "Conversation #{id}"
|
||||||
@@ -903,10 +902,6 @@
|
|||||||
"APPROVED": "Approved",
|
"APPROVED": "Approved",
|
||||||
"ALL": "Todos"
|
"ALL": "Todos"
|
||||||
},
|
},
|
||||||
"PENDING_BANNER": {
|
|
||||||
"TITLE": "Captain has found some FAQs your customers were looking for.",
|
|
||||||
"ACTION": "Click here to review"
|
|
||||||
},
|
|
||||||
"FORM_DESCRIPTION": "Add a question and its corresponding answer to the knowledge base and select the assistant it should be associated with.",
|
"FORM_DESCRIPTION": "Add a question and its corresponding answer to the knowledge base and select the assistant it should be associated with.",
|
||||||
"CREATE": {
|
"CREATE": {
|
||||||
"TITLE": "Add an FAQ",
|
"TITLE": "Add an FAQ",
|
||||||
@@ -937,15 +932,13 @@
|
|||||||
"APPROVE_SUCCESS_MESSAGE": "The FAQ was marked as approved"
|
"APPROVE_SUCCESS_MESSAGE": "The FAQ was marked as approved"
|
||||||
},
|
},
|
||||||
"OPTIONS": {
|
"OPTIONS": {
|
||||||
"APPROVE": "Approve",
|
"APPROVE": "Mark as approved",
|
||||||
"EDIT_RESPONSE": "Editar",
|
"EDIT_RESPONSE": "Edit FAQ",
|
||||||
"DELETE_RESPONSE": "Eliminar"
|
"DELETE_RESPONSE": "Delete FAQ"
|
||||||
},
|
},
|
||||||
"EMPTY_STATE": {
|
"EMPTY_STATE": {
|
||||||
"TITLE": "No FAQs Found",
|
"TITLE": "No FAQs Found",
|
||||||
"NO_PENDING_TITLE": "There are no more pending FAQs to review",
|
|
||||||
"SUBTITLE": "FAQs help your assistant provide quick and accurate answers to questions from your customers. They can be generated automatically from your content or can be added manually.",
|
"SUBTITLE": "FAQs help your assistant provide quick and accurate answers to questions from your customers. They can be generated automatically from your content or can be added manually.",
|
||||||
"CLEAR_SEARCH": "Clear active filters",
|
|
||||||
"FEATURE_SPOTLIGHT": {
|
"FEATURE_SPOTLIGHT": {
|
||||||
"TITLE": "Captain FAQ",
|
"TITLE": "Captain FAQ",
|
||||||
"NOTE": "Captain FAQs detects common customer questions—whether missing from your knowledge base or frequently asked—and generates relevant FAQs to improve support. You can review each suggestion and decide whether to approve or reject it."
|
"NOTE": "Captain FAQs detects common customer questions—whether missing from your knowledge base or frequently asked—and generates relevant FAQs to improve support. You can review each suggestion and decide whether to approve or reject it."
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
},
|
},
|
||||||
"LABELS": {
|
"LABELS": {
|
||||||
"ASSIGN_LABELS": "Assign labels",
|
"ASSIGN_LABELS": "Assign labels",
|
||||||
"NO_LABELS_FOUND": "No labels found",
|
"NO_LABELS_FOUND": "No labels found for",
|
||||||
"ASSIGN_SELECTED_LABELS": "Assign selected labels",
|
"ASSIGN_SELECTED_LABELS": "Assign selected labels",
|
||||||
"ASSIGN_SUCCESFUL": "Labels assigned successfully.",
|
"ASSIGN_SUCCESFUL": "Labels assigned successfully.",
|
||||||
"ASSIGN_FAILED": "Failed to assign labels. Please try again."
|
"ASSIGN_FAILED": "Failed to assign labels. Please try again."
|
||||||
|
|||||||
@@ -571,16 +571,6 @@
|
|||||||
"ACTIVE_EMPTY_STATE_TITLE": "No contacts are active at the moment 🌙"
|
"ACTIVE_EMPTY_STATE_TITLE": "No contacts are active at the moment 🌙"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"CONTACTS_BULK_ACTIONS": {
|
|
||||||
"ASSIGN_LABELS": "Assign Labels",
|
|
||||||
"ASSIGN_LABELS_SUCCESS": "Labels assigned successfully.",
|
|
||||||
"ASSIGN_LABELS_FAILED": "Failed to assign labels",
|
|
||||||
"DESCRIPTION": "Select the labels you want to add to the selected contacts.",
|
|
||||||
"NO_LABELS_FOUND": "No labels available yet.",
|
|
||||||
"SELECTED_COUNT": "{count} selected",
|
|
||||||
"CLEAR_SELECTION": "Clear selection",
|
|
||||||
"SELECT_ALL": "Select all ({count})"
|
|
||||||
},
|
|
||||||
"COMPOSE_NEW_CONVERSATION": {
|
"COMPOSE_NEW_CONVERSATION": {
|
||||||
"CONTACT_SEARCH": {
|
"CONTACT_SEARCH": {
|
||||||
"ERROR_MESSAGE": "We couldn’t complete the search. Please try again."
|
"ERROR_MESSAGE": "We couldn’t complete the search. Please try again."
|
||||||
|
|||||||
@@ -863,7 +863,6 @@
|
|||||||
},
|
},
|
||||||
"RESPONSES": {
|
"RESPONSES": {
|
||||||
"HEADER": "FAQs",
|
"HEADER": "FAQs",
|
||||||
"PENDING_FAQS": "Pending FAQs",
|
|
||||||
"ADD_NEW": "Create new FAQ",
|
"ADD_NEW": "Create new FAQ",
|
||||||
"DOCUMENTABLE": {
|
"DOCUMENTABLE": {
|
||||||
"CONVERSATION": "Conversation #{id}"
|
"CONVERSATION": "Conversation #{id}"
|
||||||
@@ -903,10 +902,6 @@
|
|||||||
"APPROVED": "Approved",
|
"APPROVED": "Approved",
|
||||||
"ALL": "All"
|
"ALL": "All"
|
||||||
},
|
},
|
||||||
"PENDING_BANNER": {
|
|
||||||
"TITLE": "Captain has found some FAQs your customers were looking for.",
|
|
||||||
"ACTION": "Click here to review"
|
|
||||||
},
|
|
||||||
"FORM_DESCRIPTION": "Add a question and its corresponding answer to the knowledge base and select the assistant it should be associated with.",
|
"FORM_DESCRIPTION": "Add a question and its corresponding answer to the knowledge base and select the assistant it should be associated with.",
|
||||||
"CREATE": {
|
"CREATE": {
|
||||||
"TITLE": "Add an FAQ",
|
"TITLE": "Add an FAQ",
|
||||||
@@ -937,15 +932,13 @@
|
|||||||
"APPROVE_SUCCESS_MESSAGE": "The FAQ was marked as approved"
|
"APPROVE_SUCCESS_MESSAGE": "The FAQ was marked as approved"
|
||||||
},
|
},
|
||||||
"OPTIONS": {
|
"OPTIONS": {
|
||||||
"APPROVE": "Approve",
|
"APPROVE": "Mark as approved",
|
||||||
"EDIT_RESPONSE": "Edit",
|
"EDIT_RESPONSE": "Edit FAQ",
|
||||||
"DELETE_RESPONSE": "Delete"
|
"DELETE_RESPONSE": "Delete FAQ"
|
||||||
},
|
},
|
||||||
"EMPTY_STATE": {
|
"EMPTY_STATE": {
|
||||||
"TITLE": "No FAQs Found",
|
"TITLE": "No FAQs Found",
|
||||||
"NO_PENDING_TITLE": "There are no more pending FAQs to review",
|
|
||||||
"SUBTITLE": "FAQs help your assistant provide quick and accurate answers to questions from your customers. They can be generated automatically from your content or can be added manually.",
|
"SUBTITLE": "FAQs help your assistant provide quick and accurate answers to questions from your customers. They can be generated automatically from your content or can be added manually.",
|
||||||
"CLEAR_SEARCH": "Clear active filters",
|
|
||||||
"FEATURE_SPOTLIGHT": {
|
"FEATURE_SPOTLIGHT": {
|
||||||
"TITLE": "Captain FAQ",
|
"TITLE": "Captain FAQ",
|
||||||
"NOTE": "Captain FAQs detects common customer questions—whether missing from your knowledge base or frequently asked—and generates relevant FAQs to improve support. You can review each suggestion and decide whether to approve or reject it."
|
"NOTE": "Captain FAQs detects common customer questions—whether missing from your knowledge base or frequently asked—and generates relevant FAQs to improve support. You can review each suggestion and decide whether to approve or reject it."
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
},
|
},
|
||||||
"LABELS": {
|
"LABELS": {
|
||||||
"ASSIGN_LABELS": "برچسب اختصاص دهید",
|
"ASSIGN_LABELS": "برچسب اختصاص دهید",
|
||||||
"NO_LABELS_FOUND": "هیچ برچسبی یافت نشد",
|
"NO_LABELS_FOUND": "هیچ برچسبی یافت نشد برای",
|
||||||
"ASSIGN_SELECTED_LABELS": "اختصاص برچسبهای انتخاب شده",
|
"ASSIGN_SELECTED_LABELS": "اختصاص برچسبهای انتخاب شده",
|
||||||
"ASSIGN_SUCCESFUL": "برچسبها با موفقیت اختصاص یافتند.",
|
"ASSIGN_SUCCESFUL": "برچسبها با موفقیت اختصاص یافتند.",
|
||||||
"ASSIGN_FAILED": "اختصاص برچسب به صورت موفق انجام نشد، لطفا دوباره امتحان کنید."
|
"ASSIGN_FAILED": "اختصاص برچسب به صورت موفق انجام نشد، لطفا دوباره امتحان کنید."
|
||||||
|
|||||||
@@ -571,16 +571,6 @@
|
|||||||
"ACTIVE_EMPTY_STATE_TITLE": "No contacts are active at the moment 🌙"
|
"ACTIVE_EMPTY_STATE_TITLE": "No contacts are active at the moment 🌙"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"CONTACTS_BULK_ACTIONS": {
|
|
||||||
"ASSIGN_LABELS": "اختصاص برچسبها",
|
|
||||||
"ASSIGN_LABELS_SUCCESS": "برچسبها با موفقیت اختصاص یافتند.",
|
|
||||||
"ASSIGN_LABELS_FAILED": "Failed to assign labels",
|
|
||||||
"DESCRIPTION": "Select the labels you want to add to the selected contacts.",
|
|
||||||
"NO_LABELS_FOUND": "No labels available yet.",
|
|
||||||
"SELECTED_COUNT": "{count} selected",
|
|
||||||
"CLEAR_SELECTION": "Clear selection",
|
|
||||||
"SELECT_ALL": "Select all ({count})"
|
|
||||||
},
|
|
||||||
"COMPOSE_NEW_CONVERSATION": {
|
"COMPOSE_NEW_CONVERSATION": {
|
||||||
"CONTACT_SEARCH": {
|
"CONTACT_SEARCH": {
|
||||||
"ERROR_MESSAGE": "We couldn’t complete the search. Please try again."
|
"ERROR_MESSAGE": "We couldn’t complete the search. Please try again."
|
||||||
|
|||||||
@@ -863,7 +863,6 @@
|
|||||||
},
|
},
|
||||||
"RESPONSES": {
|
"RESPONSES": {
|
||||||
"HEADER": "FAQs",
|
"HEADER": "FAQs",
|
||||||
"PENDING_FAQS": "Pending FAQs",
|
|
||||||
"ADD_NEW": "Create new FAQ",
|
"ADD_NEW": "Create new FAQ",
|
||||||
"DOCUMENTABLE": {
|
"DOCUMENTABLE": {
|
||||||
"CONVERSATION": "Conversation #{id}"
|
"CONVERSATION": "Conversation #{id}"
|
||||||
@@ -903,10 +902,6 @@
|
|||||||
"APPROVED": "Approved",
|
"APPROVED": "Approved",
|
||||||
"ALL": "همه"
|
"ALL": "همه"
|
||||||
},
|
},
|
||||||
"PENDING_BANNER": {
|
|
||||||
"TITLE": "Captain has found some FAQs your customers were looking for.",
|
|
||||||
"ACTION": "Click here to review"
|
|
||||||
},
|
|
||||||
"FORM_DESCRIPTION": "Add a question and its corresponding answer to the knowledge base and select the assistant it should be associated with.",
|
"FORM_DESCRIPTION": "Add a question and its corresponding answer to the knowledge base and select the assistant it should be associated with.",
|
||||||
"CREATE": {
|
"CREATE": {
|
||||||
"TITLE": "Add an FAQ",
|
"TITLE": "Add an FAQ",
|
||||||
@@ -937,15 +932,13 @@
|
|||||||
"APPROVE_SUCCESS_MESSAGE": "The FAQ was marked as approved"
|
"APPROVE_SUCCESS_MESSAGE": "The FAQ was marked as approved"
|
||||||
},
|
},
|
||||||
"OPTIONS": {
|
"OPTIONS": {
|
||||||
"APPROVE": "Approve",
|
"APPROVE": "Mark as approved",
|
||||||
"EDIT_RESPONSE": "ویرایش",
|
"EDIT_RESPONSE": "Edit FAQ",
|
||||||
"DELETE_RESPONSE": "حذف"
|
"DELETE_RESPONSE": "Delete FAQ"
|
||||||
},
|
},
|
||||||
"EMPTY_STATE": {
|
"EMPTY_STATE": {
|
||||||
"TITLE": "No FAQs Found",
|
"TITLE": "No FAQs Found",
|
||||||
"NO_PENDING_TITLE": "There are no more pending FAQs to review",
|
|
||||||
"SUBTITLE": "FAQs help your assistant provide quick and accurate answers to questions from your customers. They can be generated automatically from your content or can be added manually.",
|
"SUBTITLE": "FAQs help your assistant provide quick and accurate answers to questions from your customers. They can be generated automatically from your content or can be added manually.",
|
||||||
"CLEAR_SEARCH": "Clear active filters",
|
|
||||||
"FEATURE_SPOTLIGHT": {
|
"FEATURE_SPOTLIGHT": {
|
||||||
"TITLE": "Captain FAQ",
|
"TITLE": "Captain FAQ",
|
||||||
"NOTE": "Captain FAQs detects common customer questions—whether missing from your knowledge base or frequently asked—and generates relevant FAQs to improve support. You can review each suggestion and decide whether to approve or reject it."
|
"NOTE": "Captain FAQs detects common customer questions—whether missing from your knowledge base or frequently asked—and generates relevant FAQs to improve support. You can review each suggestion and decide whether to approve or reject it."
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
},
|
},
|
||||||
"LABELS": {
|
"LABELS": {
|
||||||
"ASSIGN_LABELS": "Assign labels",
|
"ASSIGN_LABELS": "Assign labels",
|
||||||
"NO_LABELS_FOUND": "No labels found",
|
"NO_LABELS_FOUND": "No labels found for",
|
||||||
"ASSIGN_SELECTED_LABELS": "Assign selected labels",
|
"ASSIGN_SELECTED_LABELS": "Assign selected labels",
|
||||||
"ASSIGN_SUCCESFUL": "Labels assigned successfully.",
|
"ASSIGN_SUCCESFUL": "Labels assigned successfully.",
|
||||||
"ASSIGN_FAILED": "Failed to assign labels. Please try again."
|
"ASSIGN_FAILED": "Failed to assign labels. Please try again."
|
||||||
|
|||||||
@@ -571,16 +571,6 @@
|
|||||||
"ACTIVE_EMPTY_STATE_TITLE": "No contacts are active at the moment 🌙"
|
"ACTIVE_EMPTY_STATE_TITLE": "No contacts are active at the moment 🌙"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"CONTACTS_BULK_ACTIONS": {
|
|
||||||
"ASSIGN_LABELS": "Assign Labels",
|
|
||||||
"ASSIGN_LABELS_SUCCESS": "Labels assigned successfully.",
|
|
||||||
"ASSIGN_LABELS_FAILED": "Failed to assign labels",
|
|
||||||
"DESCRIPTION": "Select the labels you want to add to the selected contacts.",
|
|
||||||
"NO_LABELS_FOUND": "No labels available yet.",
|
|
||||||
"SELECTED_COUNT": "{count} selected",
|
|
||||||
"CLEAR_SELECTION": "Clear selection",
|
|
||||||
"SELECT_ALL": "Select all ({count})"
|
|
||||||
},
|
|
||||||
"COMPOSE_NEW_CONVERSATION": {
|
"COMPOSE_NEW_CONVERSATION": {
|
||||||
"CONTACT_SEARCH": {
|
"CONTACT_SEARCH": {
|
||||||
"ERROR_MESSAGE": "We couldn’t complete the search. Please try again."
|
"ERROR_MESSAGE": "We couldn’t complete the search. Please try again."
|
||||||
|
|||||||
@@ -863,7 +863,6 @@
|
|||||||
},
|
},
|
||||||
"RESPONSES": {
|
"RESPONSES": {
|
||||||
"HEADER": "FAQs",
|
"HEADER": "FAQs",
|
||||||
"PENDING_FAQS": "Pending FAQs",
|
|
||||||
"ADD_NEW": "Create new FAQ",
|
"ADD_NEW": "Create new FAQ",
|
||||||
"DOCUMENTABLE": {
|
"DOCUMENTABLE": {
|
||||||
"CONVERSATION": "Conversation #{id}"
|
"CONVERSATION": "Conversation #{id}"
|
||||||
@@ -903,10 +902,6 @@
|
|||||||
"APPROVED": "Approved",
|
"APPROVED": "Approved",
|
||||||
"ALL": "Kaikki"
|
"ALL": "Kaikki"
|
||||||
},
|
},
|
||||||
"PENDING_BANNER": {
|
|
||||||
"TITLE": "Captain has found some FAQs your customers were looking for.",
|
|
||||||
"ACTION": "Click here to review"
|
|
||||||
},
|
|
||||||
"FORM_DESCRIPTION": "Add a question and its corresponding answer to the knowledge base and select the assistant it should be associated with.",
|
"FORM_DESCRIPTION": "Add a question and its corresponding answer to the knowledge base and select the assistant it should be associated with.",
|
||||||
"CREATE": {
|
"CREATE": {
|
||||||
"TITLE": "Add an FAQ",
|
"TITLE": "Add an FAQ",
|
||||||
@@ -937,15 +932,13 @@
|
|||||||
"APPROVE_SUCCESS_MESSAGE": "The FAQ was marked as approved"
|
"APPROVE_SUCCESS_MESSAGE": "The FAQ was marked as approved"
|
||||||
},
|
},
|
||||||
"OPTIONS": {
|
"OPTIONS": {
|
||||||
"APPROVE": "Approve",
|
"APPROVE": "Mark as approved",
|
||||||
"EDIT_RESPONSE": "Muokkaa",
|
"EDIT_RESPONSE": "Edit FAQ",
|
||||||
"DELETE_RESPONSE": "Poista"
|
"DELETE_RESPONSE": "Delete FAQ"
|
||||||
},
|
},
|
||||||
"EMPTY_STATE": {
|
"EMPTY_STATE": {
|
||||||
"TITLE": "No FAQs Found",
|
"TITLE": "No FAQs Found",
|
||||||
"NO_PENDING_TITLE": "There are no more pending FAQs to review",
|
|
||||||
"SUBTITLE": "FAQs help your assistant provide quick and accurate answers to questions from your customers. They can be generated automatically from your content or can be added manually.",
|
"SUBTITLE": "FAQs help your assistant provide quick and accurate answers to questions from your customers. They can be generated automatically from your content or can be added manually.",
|
||||||
"CLEAR_SEARCH": "Clear active filters",
|
|
||||||
"FEATURE_SPOTLIGHT": {
|
"FEATURE_SPOTLIGHT": {
|
||||||
"TITLE": "Captain FAQ",
|
"TITLE": "Captain FAQ",
|
||||||
"NOTE": "Captain FAQs detects common customer questions—whether missing from your knowledge base or frequently asked—and generates relevant FAQs to improve support. You can review each suggestion and decide whether to approve or reject it."
|
"NOTE": "Captain FAQs detects common customer questions—whether missing from your knowledge base or frequently asked—and generates relevant FAQs to improve support. You can review each suggestion and decide whether to approve or reject it."
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
},
|
},
|
||||||
"LABELS": {
|
"LABELS": {
|
||||||
"ASSIGN_LABELS": "Assigner une étiquette",
|
"ASSIGN_LABELS": "Assigner une étiquette",
|
||||||
"NO_LABELS_FOUND": "Aucune étiquette trouvée",
|
"NO_LABELS_FOUND": "Aucune étiquette trouvée pour",
|
||||||
"ASSIGN_SELECTED_LABELS": "Assigner les étiquettes sélectionnées",
|
"ASSIGN_SELECTED_LABELS": "Assigner les étiquettes sélectionnées",
|
||||||
"ASSIGN_SUCCESFUL": "Étiquettes attribuées avec succès.",
|
"ASSIGN_SUCCESFUL": "Étiquettes attribuées avec succès.",
|
||||||
"ASSIGN_FAILED": "Impossible d'attribuer les étiquettes, veuillez réessayer."
|
"ASSIGN_FAILED": "Impossible d'attribuer les étiquettes, veuillez réessayer."
|
||||||
|
|||||||
@@ -571,16 +571,6 @@
|
|||||||
"ACTIVE_EMPTY_STATE_TITLE": "Aucun contact n'est actif pour le moment 🌙"
|
"ACTIVE_EMPTY_STATE_TITLE": "Aucun contact n'est actif pour le moment 🌙"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"CONTACTS_BULK_ACTIONS": {
|
|
||||||
"ASSIGN_LABELS": "Assigner des étiquettes",
|
|
||||||
"ASSIGN_LABELS_SUCCESS": "Étiquettes attribuées avec succès.",
|
|
||||||
"ASSIGN_LABELS_FAILED": "Failed to assign labels",
|
|
||||||
"DESCRIPTION": "Select the labels you want to add to the selected contacts.",
|
|
||||||
"NO_LABELS_FOUND": "No labels available yet.",
|
|
||||||
"SELECTED_COUNT": "{count} selected",
|
|
||||||
"CLEAR_SELECTION": "Clear selection",
|
|
||||||
"SELECT_ALL": "Select all ({count})"
|
|
||||||
},
|
|
||||||
"COMPOSE_NEW_CONVERSATION": {
|
"COMPOSE_NEW_CONVERSATION": {
|
||||||
"CONTACT_SEARCH": {
|
"CONTACT_SEARCH": {
|
||||||
"ERROR_MESSAGE": "We couldn’t complete the search. Please try again."
|
"ERROR_MESSAGE": "We couldn’t complete the search. Please try again."
|
||||||
|
|||||||
@@ -863,7 +863,6 @@
|
|||||||
},
|
},
|
||||||
"RESPONSES": {
|
"RESPONSES": {
|
||||||
"HEADER": "FAQs",
|
"HEADER": "FAQs",
|
||||||
"PENDING_FAQS": "Pending FAQs",
|
|
||||||
"ADD_NEW": "Create new FAQ",
|
"ADD_NEW": "Create new FAQ",
|
||||||
"DOCUMENTABLE": {
|
"DOCUMENTABLE": {
|
||||||
"CONVERSATION": "Conversation #{id}"
|
"CONVERSATION": "Conversation #{id}"
|
||||||
@@ -903,10 +902,6 @@
|
|||||||
"APPROVED": "Approved",
|
"APPROVED": "Approved",
|
||||||
"ALL": "Tous"
|
"ALL": "Tous"
|
||||||
},
|
},
|
||||||
"PENDING_BANNER": {
|
|
||||||
"TITLE": "Captain has found some FAQs your customers were looking for.",
|
|
||||||
"ACTION": "Click here to review"
|
|
||||||
},
|
|
||||||
"FORM_DESCRIPTION": "Add a question and its corresponding answer to the knowledge base and select the assistant it should be associated with.",
|
"FORM_DESCRIPTION": "Add a question and its corresponding answer to the knowledge base and select the assistant it should be associated with.",
|
||||||
"CREATE": {
|
"CREATE": {
|
||||||
"TITLE": "Add an FAQ",
|
"TITLE": "Add an FAQ",
|
||||||
@@ -937,15 +932,13 @@
|
|||||||
"APPROVE_SUCCESS_MESSAGE": "The FAQ was marked as approved"
|
"APPROVE_SUCCESS_MESSAGE": "The FAQ was marked as approved"
|
||||||
},
|
},
|
||||||
"OPTIONS": {
|
"OPTIONS": {
|
||||||
"APPROVE": "Approve",
|
"APPROVE": "Mark as approved",
|
||||||
"EDIT_RESPONSE": "Modifier",
|
"EDIT_RESPONSE": "Edit FAQ",
|
||||||
"DELETE_RESPONSE": "Supprimer"
|
"DELETE_RESPONSE": "Delete FAQ"
|
||||||
},
|
},
|
||||||
"EMPTY_STATE": {
|
"EMPTY_STATE": {
|
||||||
"TITLE": "No FAQs Found",
|
"TITLE": "No FAQs Found",
|
||||||
"NO_PENDING_TITLE": "There are no more pending FAQs to review",
|
|
||||||
"SUBTITLE": "FAQs help your assistant provide quick and accurate answers to questions from your customers. They can be generated automatically from your content or can be added manually.",
|
"SUBTITLE": "FAQs help your assistant provide quick and accurate answers to questions from your customers. They can be generated automatically from your content or can be added manually.",
|
||||||
"CLEAR_SEARCH": "Clear active filters",
|
|
||||||
"FEATURE_SPOTLIGHT": {
|
"FEATURE_SPOTLIGHT": {
|
||||||
"TITLE": "Captain FAQ",
|
"TITLE": "Captain FAQ",
|
||||||
"NOTE": "Captain FAQs detects common customer questions—whether missing from your knowledge base or frequently asked—and generates relevant FAQs to improve support. You can review each suggestion and decide whether to approve or reject it."
|
"NOTE": "Captain FAQs detects common customer questions—whether missing from your knowledge base or frequently asked—and generates relevant FAQs to improve support. You can review each suggestion and decide whether to approve or reject it."
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
},
|
},
|
||||||
"LABELS": {
|
"LABELS": {
|
||||||
"ASSIGN_LABELS": "Assign labels",
|
"ASSIGN_LABELS": "Assign labels",
|
||||||
"NO_LABELS_FOUND": "לא נמצאו תוויות",
|
"NO_LABELS_FOUND": "לא נצאו תוויות עבור",
|
||||||
"ASSIGN_SELECTED_LABELS": "שייך תוויות נבחרות",
|
"ASSIGN_SELECTED_LABELS": "שייך תוויות נבחרות",
|
||||||
"ASSIGN_SUCCESFUL": "תוויות שוייכו בהצלחה.",
|
"ASSIGN_SUCCESFUL": "תוויות שוייכו בהצלחה.",
|
||||||
"ASSIGN_FAILED": "Failed to assign labels. Please try again."
|
"ASSIGN_FAILED": "Failed to assign labels. Please try again."
|
||||||
|
|||||||
@@ -571,16 +571,6 @@
|
|||||||
"ACTIVE_EMPTY_STATE_TITLE": "No contacts are active at the moment 🌙"
|
"ACTIVE_EMPTY_STATE_TITLE": "No contacts are active at the moment 🌙"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"CONTACTS_BULK_ACTIONS": {
|
|
||||||
"ASSIGN_LABELS": "הקצה תוויות",
|
|
||||||
"ASSIGN_LABELS_SUCCESS": "תוויות שוייכו בהצלחה.",
|
|
||||||
"ASSIGN_LABELS_FAILED": "Failed to assign labels",
|
|
||||||
"DESCRIPTION": "Select the labels you want to add to the selected contacts.",
|
|
||||||
"NO_LABELS_FOUND": "No labels available yet.",
|
|
||||||
"SELECTED_COUNT": "{count} selected",
|
|
||||||
"CLEAR_SELECTION": "Clear selection",
|
|
||||||
"SELECT_ALL": "Select all ({count})"
|
|
||||||
},
|
|
||||||
"COMPOSE_NEW_CONVERSATION": {
|
"COMPOSE_NEW_CONVERSATION": {
|
||||||
"CONTACT_SEARCH": {
|
"CONTACT_SEARCH": {
|
||||||
"ERROR_MESSAGE": "We couldn’t complete the search. Please try again."
|
"ERROR_MESSAGE": "We couldn’t complete the search. Please try again."
|
||||||
|
|||||||
@@ -863,7 +863,6 @@
|
|||||||
},
|
},
|
||||||
"RESPONSES": {
|
"RESPONSES": {
|
||||||
"HEADER": "FAQs",
|
"HEADER": "FAQs",
|
||||||
"PENDING_FAQS": "Pending FAQs",
|
|
||||||
"ADD_NEW": "Create new FAQ",
|
"ADD_NEW": "Create new FAQ",
|
||||||
"DOCUMENTABLE": {
|
"DOCUMENTABLE": {
|
||||||
"CONVERSATION": "Conversation #{id}"
|
"CONVERSATION": "Conversation #{id}"
|
||||||
@@ -903,10 +902,6 @@
|
|||||||
"APPROVED": "Approved",
|
"APPROVED": "Approved",
|
||||||
"ALL": "הכל"
|
"ALL": "הכל"
|
||||||
},
|
},
|
||||||
"PENDING_BANNER": {
|
|
||||||
"TITLE": "Captain has found some FAQs your customers were looking for.",
|
|
||||||
"ACTION": "Click here to review"
|
|
||||||
},
|
|
||||||
"FORM_DESCRIPTION": "Add a question and its corresponding answer to the knowledge base and select the assistant it should be associated with.",
|
"FORM_DESCRIPTION": "Add a question and its corresponding answer to the knowledge base and select the assistant it should be associated with.",
|
||||||
"CREATE": {
|
"CREATE": {
|
||||||
"TITLE": "Add an FAQ",
|
"TITLE": "Add an FAQ",
|
||||||
@@ -937,15 +932,13 @@
|
|||||||
"APPROVE_SUCCESS_MESSAGE": "The FAQ was marked as approved"
|
"APPROVE_SUCCESS_MESSAGE": "The FAQ was marked as approved"
|
||||||
},
|
},
|
||||||
"OPTIONS": {
|
"OPTIONS": {
|
||||||
"APPROVE": "Approve",
|
"APPROVE": "Mark as approved",
|
||||||
"EDIT_RESPONSE": "ערוך",
|
"EDIT_RESPONSE": "Edit FAQ",
|
||||||
"DELETE_RESPONSE": "מחק"
|
"DELETE_RESPONSE": "Delete FAQ"
|
||||||
},
|
},
|
||||||
"EMPTY_STATE": {
|
"EMPTY_STATE": {
|
||||||
"TITLE": "No FAQs Found",
|
"TITLE": "No FAQs Found",
|
||||||
"NO_PENDING_TITLE": "There are no more pending FAQs to review",
|
|
||||||
"SUBTITLE": "FAQs help your assistant provide quick and accurate answers to questions from your customers. They can be generated automatically from your content or can be added manually.",
|
"SUBTITLE": "FAQs help your assistant provide quick and accurate answers to questions from your customers. They can be generated automatically from your content or can be added manually.",
|
||||||
"CLEAR_SEARCH": "Clear active filters",
|
|
||||||
"FEATURE_SPOTLIGHT": {
|
"FEATURE_SPOTLIGHT": {
|
||||||
"TITLE": "Captain FAQ",
|
"TITLE": "Captain FAQ",
|
||||||
"NOTE": "Captain FAQs detects common customer questions—whether missing from your knowledge base or frequently asked—and generates relevant FAQs to improve support. You can review each suggestion and decide whether to approve or reject it."
|
"NOTE": "Captain FAQs detects common customer questions—whether missing from your knowledge base or frequently asked—and generates relevant FAQs to improve support. You can review each suggestion and decide whether to approve or reject it."
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
},
|
},
|
||||||
"LABELS": {
|
"LABELS": {
|
||||||
"ASSIGN_LABELS": "Assign labels",
|
"ASSIGN_LABELS": "Assign labels",
|
||||||
"NO_LABELS_FOUND": "No labels found",
|
"NO_LABELS_FOUND": "No labels found for",
|
||||||
"ASSIGN_SELECTED_LABELS": "Assign selected labels",
|
"ASSIGN_SELECTED_LABELS": "Assign selected labels",
|
||||||
"ASSIGN_SUCCESFUL": "Labels assigned successfully.",
|
"ASSIGN_SUCCESFUL": "Labels assigned successfully.",
|
||||||
"ASSIGN_FAILED": "Failed to assign labels. Please try again."
|
"ASSIGN_FAILED": "Failed to assign labels. Please try again."
|
||||||
|
|||||||
@@ -571,16 +571,6 @@
|
|||||||
"ACTIVE_EMPTY_STATE_TITLE": "No contacts are active at the moment 🌙"
|
"ACTIVE_EMPTY_STATE_TITLE": "No contacts are active at the moment 🌙"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"CONTACTS_BULK_ACTIONS": {
|
|
||||||
"ASSIGN_LABELS": "Assign Labels",
|
|
||||||
"ASSIGN_LABELS_SUCCESS": "Labels assigned successfully.",
|
|
||||||
"ASSIGN_LABELS_FAILED": "Failed to assign labels",
|
|
||||||
"DESCRIPTION": "Select the labels you want to add to the selected contacts.",
|
|
||||||
"NO_LABELS_FOUND": "No labels available yet.",
|
|
||||||
"SELECTED_COUNT": "{count} selected",
|
|
||||||
"CLEAR_SELECTION": "Clear selection",
|
|
||||||
"SELECT_ALL": "Select all ({count})"
|
|
||||||
},
|
|
||||||
"COMPOSE_NEW_CONVERSATION": {
|
"COMPOSE_NEW_CONVERSATION": {
|
||||||
"CONTACT_SEARCH": {
|
"CONTACT_SEARCH": {
|
||||||
"ERROR_MESSAGE": "We couldn’t complete the search. Please try again."
|
"ERROR_MESSAGE": "We couldn’t complete the search. Please try again."
|
||||||
|
|||||||
@@ -863,7 +863,6 @@
|
|||||||
},
|
},
|
||||||
"RESPONSES": {
|
"RESPONSES": {
|
||||||
"HEADER": "FAQs",
|
"HEADER": "FAQs",
|
||||||
"PENDING_FAQS": "Pending FAQs",
|
|
||||||
"ADD_NEW": "Create new FAQ",
|
"ADD_NEW": "Create new FAQ",
|
||||||
"DOCUMENTABLE": {
|
"DOCUMENTABLE": {
|
||||||
"CONVERSATION": "Conversation #{id}"
|
"CONVERSATION": "Conversation #{id}"
|
||||||
@@ -903,10 +902,6 @@
|
|||||||
"APPROVED": "Approved",
|
"APPROVED": "Approved",
|
||||||
"ALL": "All"
|
"ALL": "All"
|
||||||
},
|
},
|
||||||
"PENDING_BANNER": {
|
|
||||||
"TITLE": "Captain has found some FAQs your customers were looking for.",
|
|
||||||
"ACTION": "Click here to review"
|
|
||||||
},
|
|
||||||
"FORM_DESCRIPTION": "Add a question and its corresponding answer to the knowledge base and select the assistant it should be associated with.",
|
"FORM_DESCRIPTION": "Add a question and its corresponding answer to the knowledge base and select the assistant it should be associated with.",
|
||||||
"CREATE": {
|
"CREATE": {
|
||||||
"TITLE": "Add an FAQ",
|
"TITLE": "Add an FAQ",
|
||||||
@@ -937,15 +932,13 @@
|
|||||||
"APPROVE_SUCCESS_MESSAGE": "The FAQ was marked as approved"
|
"APPROVE_SUCCESS_MESSAGE": "The FAQ was marked as approved"
|
||||||
},
|
},
|
||||||
"OPTIONS": {
|
"OPTIONS": {
|
||||||
"APPROVE": "Approve",
|
"APPROVE": "Mark as approved",
|
||||||
"EDIT_RESPONSE": "Edit",
|
"EDIT_RESPONSE": "Edit FAQ",
|
||||||
"DELETE_RESPONSE": "Delete"
|
"DELETE_RESPONSE": "Delete FAQ"
|
||||||
},
|
},
|
||||||
"EMPTY_STATE": {
|
"EMPTY_STATE": {
|
||||||
"TITLE": "No FAQs Found",
|
"TITLE": "No FAQs Found",
|
||||||
"NO_PENDING_TITLE": "There are no more pending FAQs to review",
|
|
||||||
"SUBTITLE": "FAQs help your assistant provide quick and accurate answers to questions from your customers. They can be generated automatically from your content or can be added manually.",
|
"SUBTITLE": "FAQs help your assistant provide quick and accurate answers to questions from your customers. They can be generated automatically from your content or can be added manually.",
|
||||||
"CLEAR_SEARCH": "Clear active filters",
|
|
||||||
"FEATURE_SPOTLIGHT": {
|
"FEATURE_SPOTLIGHT": {
|
||||||
"TITLE": "Captain FAQ",
|
"TITLE": "Captain FAQ",
|
||||||
"NOTE": "Captain FAQs detects common customer questions—whether missing from your knowledge base or frequently asked—and generates relevant FAQs to improve support. You can review each suggestion and decide whether to approve or reject it."
|
"NOTE": "Captain FAQs detects common customer questions—whether missing from your knowledge base or frequently asked—and generates relevant FAQs to improve support. You can review each suggestion and decide whether to approve or reject it."
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
},
|
},
|
||||||
"LABELS": {
|
"LABELS": {
|
||||||
"ASSIGN_LABELS": "Assign labels",
|
"ASSIGN_LABELS": "Assign labels",
|
||||||
"NO_LABELS_FOUND": "No labels found",
|
"NO_LABELS_FOUND": "No labels found for",
|
||||||
"ASSIGN_SELECTED_LABELS": "Assign selected labels",
|
"ASSIGN_SELECTED_LABELS": "Assign selected labels",
|
||||||
"ASSIGN_SUCCESFUL": "Labels assigned successfully.",
|
"ASSIGN_SUCCESFUL": "Labels assigned successfully.",
|
||||||
"ASSIGN_FAILED": "Failed to assign labels. Please try again."
|
"ASSIGN_FAILED": "Failed to assign labels. Please try again."
|
||||||
|
|||||||
@@ -571,16 +571,6 @@
|
|||||||
"ACTIVE_EMPTY_STATE_TITLE": "No contacts are active at the moment 🌙"
|
"ACTIVE_EMPTY_STATE_TITLE": "No contacts are active at the moment 🌙"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"CONTACTS_BULK_ACTIONS": {
|
|
||||||
"ASSIGN_LABELS": "Assign Labels",
|
|
||||||
"ASSIGN_LABELS_SUCCESS": "Labels assigned successfully.",
|
|
||||||
"ASSIGN_LABELS_FAILED": "Failed to assign labels",
|
|
||||||
"DESCRIPTION": "Select the labels you want to add to the selected contacts.",
|
|
||||||
"NO_LABELS_FOUND": "No labels available yet.",
|
|
||||||
"SELECTED_COUNT": "{count} selected",
|
|
||||||
"CLEAR_SELECTION": "Clear selection",
|
|
||||||
"SELECT_ALL": "Select all ({count})"
|
|
||||||
},
|
|
||||||
"COMPOSE_NEW_CONVERSATION": {
|
"COMPOSE_NEW_CONVERSATION": {
|
||||||
"CONTACT_SEARCH": {
|
"CONTACT_SEARCH": {
|
||||||
"ERROR_MESSAGE": "We couldn’t complete the search. Please try again."
|
"ERROR_MESSAGE": "We couldn’t complete the search. Please try again."
|
||||||
|
|||||||
@@ -863,7 +863,6 @@
|
|||||||
},
|
},
|
||||||
"RESPONSES": {
|
"RESPONSES": {
|
||||||
"HEADER": "FAQs",
|
"HEADER": "FAQs",
|
||||||
"PENDING_FAQS": "Pending FAQs",
|
|
||||||
"ADD_NEW": "Create new FAQ",
|
"ADD_NEW": "Create new FAQ",
|
||||||
"DOCUMENTABLE": {
|
"DOCUMENTABLE": {
|
||||||
"CONVERSATION": "Conversation #{id}"
|
"CONVERSATION": "Conversation #{id}"
|
||||||
@@ -903,10 +902,6 @@
|
|||||||
"APPROVED": "Approved",
|
"APPROVED": "Approved",
|
||||||
"ALL": "Sve"
|
"ALL": "Sve"
|
||||||
},
|
},
|
||||||
"PENDING_BANNER": {
|
|
||||||
"TITLE": "Captain has found some FAQs your customers were looking for.",
|
|
||||||
"ACTION": "Click here to review"
|
|
||||||
},
|
|
||||||
"FORM_DESCRIPTION": "Add a question and its corresponding answer to the knowledge base and select the assistant it should be associated with.",
|
"FORM_DESCRIPTION": "Add a question and its corresponding answer to the knowledge base and select the assistant it should be associated with.",
|
||||||
"CREATE": {
|
"CREATE": {
|
||||||
"TITLE": "Add an FAQ",
|
"TITLE": "Add an FAQ",
|
||||||
@@ -937,15 +932,13 @@
|
|||||||
"APPROVE_SUCCESS_MESSAGE": "The FAQ was marked as approved"
|
"APPROVE_SUCCESS_MESSAGE": "The FAQ was marked as approved"
|
||||||
},
|
},
|
||||||
"OPTIONS": {
|
"OPTIONS": {
|
||||||
"APPROVE": "Approve",
|
"APPROVE": "Mark as approved",
|
||||||
"EDIT_RESPONSE": "Uredi",
|
"EDIT_RESPONSE": "Edit FAQ",
|
||||||
"DELETE_RESPONSE": "Izbriši"
|
"DELETE_RESPONSE": "Delete FAQ"
|
||||||
},
|
},
|
||||||
"EMPTY_STATE": {
|
"EMPTY_STATE": {
|
||||||
"TITLE": "No FAQs Found",
|
"TITLE": "No FAQs Found",
|
||||||
"NO_PENDING_TITLE": "There are no more pending FAQs to review",
|
|
||||||
"SUBTITLE": "FAQs help your assistant provide quick and accurate answers to questions from your customers. They can be generated automatically from your content or can be added manually.",
|
"SUBTITLE": "FAQs help your assistant provide quick and accurate answers to questions from your customers. They can be generated automatically from your content or can be added manually.",
|
||||||
"CLEAR_SEARCH": "Clear active filters",
|
|
||||||
"FEATURE_SPOTLIGHT": {
|
"FEATURE_SPOTLIGHT": {
|
||||||
"TITLE": "Captain FAQ",
|
"TITLE": "Captain FAQ",
|
||||||
"NOTE": "Captain FAQs detects common customer questions—whether missing from your knowledge base or frequently asked—and generates relevant FAQs to improve support. You can review each suggestion and decide whether to approve or reject it."
|
"NOTE": "Captain FAQs detects common customer questions—whether missing from your knowledge base or frequently asked—and generates relevant FAQs to improve support. You can review each suggestion and decide whether to approve or reject it."
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
},
|
},
|
||||||
"LABELS": {
|
"LABELS": {
|
||||||
"ASSIGN_LABELS": "Címkék hozzárendelése",
|
"ASSIGN_LABELS": "Címkék hozzárendelése",
|
||||||
"NO_LABELS_FOUND": "Nem találtunk címkét",
|
"NO_LABELS_FOUND": "Nem található cimke erre:",
|
||||||
"ASSIGN_SELECTED_LABELS": "Válogatott címkék hozzárendelése",
|
"ASSIGN_SELECTED_LABELS": "Válogatott címkék hozzárendelése",
|
||||||
"ASSIGN_SUCCESFUL": "Címkék hozzárendelése sikeres.",
|
"ASSIGN_SUCCESFUL": "Címkék hozzárendelése sikeres.",
|
||||||
"ASSIGN_FAILED": "Nem sikerült címkéket hozzárendelni. Kérjük, próbálja újra."
|
"ASSIGN_FAILED": "Nem sikerült címkéket hozzárendelni. Kérjük, próbálja újra."
|
||||||
|
|||||||
@@ -571,16 +571,6 @@
|
|||||||
"ACTIVE_EMPTY_STATE_TITLE": "No contacts are active at the moment 🌙"
|
"ACTIVE_EMPTY_STATE_TITLE": "No contacts are active at the moment 🌙"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"CONTACTS_BULK_ACTIONS": {
|
|
||||||
"ASSIGN_LABELS": "Cimke hozzáadása",
|
|
||||||
"ASSIGN_LABELS_SUCCESS": "Címkék hozzárendelése sikeres.",
|
|
||||||
"ASSIGN_LABELS_FAILED": "Failed to assign labels",
|
|
||||||
"DESCRIPTION": "Select the labels you want to add to the selected contacts.",
|
|
||||||
"NO_LABELS_FOUND": "No labels available yet.",
|
|
||||||
"SELECTED_COUNT": "{count} selected",
|
|
||||||
"CLEAR_SELECTION": "Clear selection",
|
|
||||||
"SELECT_ALL": "Select all ({count})"
|
|
||||||
},
|
|
||||||
"COMPOSE_NEW_CONVERSATION": {
|
"COMPOSE_NEW_CONVERSATION": {
|
||||||
"CONTACT_SEARCH": {
|
"CONTACT_SEARCH": {
|
||||||
"ERROR_MESSAGE": "We couldn’t complete the search. Please try again."
|
"ERROR_MESSAGE": "We couldn’t complete the search. Please try again."
|
||||||
|
|||||||
@@ -863,7 +863,6 @@
|
|||||||
},
|
},
|
||||||
"RESPONSES": {
|
"RESPONSES": {
|
||||||
"HEADER": "FAQs",
|
"HEADER": "FAQs",
|
||||||
"PENDING_FAQS": "Pending FAQs",
|
|
||||||
"ADD_NEW": "Create new FAQ",
|
"ADD_NEW": "Create new FAQ",
|
||||||
"DOCUMENTABLE": {
|
"DOCUMENTABLE": {
|
||||||
"CONVERSATION": "Conversation #{id}"
|
"CONVERSATION": "Conversation #{id}"
|
||||||
@@ -903,10 +902,6 @@
|
|||||||
"APPROVED": "Approved",
|
"APPROVED": "Approved",
|
||||||
"ALL": "Mind"
|
"ALL": "Mind"
|
||||||
},
|
},
|
||||||
"PENDING_BANNER": {
|
|
||||||
"TITLE": "Captain has found some FAQs your customers were looking for.",
|
|
||||||
"ACTION": "Click here to review"
|
|
||||||
},
|
|
||||||
"FORM_DESCRIPTION": "Add a question and its corresponding answer to the knowledge base and select the assistant it should be associated with.",
|
"FORM_DESCRIPTION": "Add a question and its corresponding answer to the knowledge base and select the assistant it should be associated with.",
|
||||||
"CREATE": {
|
"CREATE": {
|
||||||
"TITLE": "Add an FAQ",
|
"TITLE": "Add an FAQ",
|
||||||
@@ -937,15 +932,13 @@
|
|||||||
"APPROVE_SUCCESS_MESSAGE": "The FAQ was marked as approved"
|
"APPROVE_SUCCESS_MESSAGE": "The FAQ was marked as approved"
|
||||||
},
|
},
|
||||||
"OPTIONS": {
|
"OPTIONS": {
|
||||||
"APPROVE": "Approve",
|
"APPROVE": "Mark as approved",
|
||||||
"EDIT_RESPONSE": "Szerkesztés",
|
"EDIT_RESPONSE": "Edit FAQ",
|
||||||
"DELETE_RESPONSE": "Törlés"
|
"DELETE_RESPONSE": "Delete FAQ"
|
||||||
},
|
},
|
||||||
"EMPTY_STATE": {
|
"EMPTY_STATE": {
|
||||||
"TITLE": "No FAQs Found",
|
"TITLE": "No FAQs Found",
|
||||||
"NO_PENDING_TITLE": "There are no more pending FAQs to review",
|
|
||||||
"SUBTITLE": "FAQs help your assistant provide quick and accurate answers to questions from your customers. They can be generated automatically from your content or can be added manually.",
|
"SUBTITLE": "FAQs help your assistant provide quick and accurate answers to questions from your customers. They can be generated automatically from your content or can be added manually.",
|
||||||
"CLEAR_SEARCH": "Clear active filters",
|
|
||||||
"FEATURE_SPOTLIGHT": {
|
"FEATURE_SPOTLIGHT": {
|
||||||
"TITLE": "Captain FAQ",
|
"TITLE": "Captain FAQ",
|
||||||
"NOTE": "Captain FAQs detects common customer questions—whether missing from your knowledge base or frequently asked—and generates relevant FAQs to improve support. You can review each suggestion and decide whether to approve or reject it."
|
"NOTE": "Captain FAQs detects common customer questions—whether missing from your knowledge base or frequently asked—and generates relevant FAQs to improve support. You can review each suggestion and decide whether to approve or reject it."
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
},
|
},
|
||||||
"LABELS": {
|
"LABELS": {
|
||||||
"ASSIGN_LABELS": "Assign labels",
|
"ASSIGN_LABELS": "Assign labels",
|
||||||
"NO_LABELS_FOUND": "No labels found",
|
"NO_LABELS_FOUND": "No labels found for",
|
||||||
"ASSIGN_SELECTED_LABELS": "Assign selected labels",
|
"ASSIGN_SELECTED_LABELS": "Assign selected labels",
|
||||||
"ASSIGN_SUCCESFUL": "Labels assigned successfully.",
|
"ASSIGN_SUCCESFUL": "Labels assigned successfully.",
|
||||||
"ASSIGN_FAILED": "Failed to assign labels. Please try again."
|
"ASSIGN_FAILED": "Failed to assign labels. Please try again."
|
||||||
|
|||||||
@@ -571,16 +571,6 @@
|
|||||||
"ACTIVE_EMPTY_STATE_TITLE": "No contacts are active at the moment 🌙"
|
"ACTIVE_EMPTY_STATE_TITLE": "No contacts are active at the moment 🌙"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"CONTACTS_BULK_ACTIONS": {
|
|
||||||
"ASSIGN_LABELS": "Assign Labels",
|
|
||||||
"ASSIGN_LABELS_SUCCESS": "Labels assigned successfully.",
|
|
||||||
"ASSIGN_LABELS_FAILED": "Failed to assign labels",
|
|
||||||
"DESCRIPTION": "Select the labels you want to add to the selected contacts.",
|
|
||||||
"NO_LABELS_FOUND": "No labels available yet.",
|
|
||||||
"SELECTED_COUNT": "{count} selected",
|
|
||||||
"CLEAR_SELECTION": "Clear selection",
|
|
||||||
"SELECT_ALL": "Select all ({count})"
|
|
||||||
},
|
|
||||||
"COMPOSE_NEW_CONVERSATION": {
|
"COMPOSE_NEW_CONVERSATION": {
|
||||||
"CONTACT_SEARCH": {
|
"CONTACT_SEARCH": {
|
||||||
"ERROR_MESSAGE": "We couldn’t complete the search. Please try again."
|
"ERROR_MESSAGE": "We couldn’t complete the search. Please try again."
|
||||||
|
|||||||
@@ -863,7 +863,6 @@
|
|||||||
},
|
},
|
||||||
"RESPONSES": {
|
"RESPONSES": {
|
||||||
"HEADER": "FAQs",
|
"HEADER": "FAQs",
|
||||||
"PENDING_FAQS": "Pending FAQs",
|
|
||||||
"ADD_NEW": "Create new FAQ",
|
"ADD_NEW": "Create new FAQ",
|
||||||
"DOCUMENTABLE": {
|
"DOCUMENTABLE": {
|
||||||
"CONVERSATION": "Conversation #{id}"
|
"CONVERSATION": "Conversation #{id}"
|
||||||
@@ -903,10 +902,6 @@
|
|||||||
"APPROVED": "Approved",
|
"APPROVED": "Approved",
|
||||||
"ALL": "All"
|
"ALL": "All"
|
||||||
},
|
},
|
||||||
"PENDING_BANNER": {
|
|
||||||
"TITLE": "Captain has found some FAQs your customers were looking for.",
|
|
||||||
"ACTION": "Click here to review"
|
|
||||||
},
|
|
||||||
"FORM_DESCRIPTION": "Add a question and its corresponding answer to the knowledge base and select the assistant it should be associated with.",
|
"FORM_DESCRIPTION": "Add a question and its corresponding answer to the knowledge base and select the assistant it should be associated with.",
|
||||||
"CREATE": {
|
"CREATE": {
|
||||||
"TITLE": "Add an FAQ",
|
"TITLE": "Add an FAQ",
|
||||||
@@ -937,15 +932,13 @@
|
|||||||
"APPROVE_SUCCESS_MESSAGE": "The FAQ was marked as approved"
|
"APPROVE_SUCCESS_MESSAGE": "The FAQ was marked as approved"
|
||||||
},
|
},
|
||||||
"OPTIONS": {
|
"OPTIONS": {
|
||||||
"APPROVE": "Approve",
|
"APPROVE": "Mark as approved",
|
||||||
"EDIT_RESPONSE": "Edit",
|
"EDIT_RESPONSE": "Edit FAQ",
|
||||||
"DELETE_RESPONSE": "Delete"
|
"DELETE_RESPONSE": "Delete FAQ"
|
||||||
},
|
},
|
||||||
"EMPTY_STATE": {
|
"EMPTY_STATE": {
|
||||||
"TITLE": "No FAQs Found",
|
"TITLE": "No FAQs Found",
|
||||||
"NO_PENDING_TITLE": "There are no more pending FAQs to review",
|
|
||||||
"SUBTITLE": "FAQs help your assistant provide quick and accurate answers to questions from your customers. They can be generated automatically from your content or can be added manually.",
|
"SUBTITLE": "FAQs help your assistant provide quick and accurate answers to questions from your customers. They can be generated automatically from your content or can be added manually.",
|
||||||
"CLEAR_SEARCH": "Clear active filters",
|
|
||||||
"FEATURE_SPOTLIGHT": {
|
"FEATURE_SPOTLIGHT": {
|
||||||
"TITLE": "Captain FAQ",
|
"TITLE": "Captain FAQ",
|
||||||
"NOTE": "Captain FAQs detects common customer questions—whether missing from your knowledge base or frequently asked—and generates relevant FAQs to improve support. You can review each suggestion and decide whether to approve or reject it."
|
"NOTE": "Captain FAQs detects common customer questions—whether missing from your knowledge base or frequently asked—and generates relevant FAQs to improve support. You can review each suggestion and decide whether to approve or reject it."
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
},
|
},
|
||||||
"LABELS": {
|
"LABELS": {
|
||||||
"ASSIGN_LABELS": "Assign labels",
|
"ASSIGN_LABELS": "Assign labels",
|
||||||
"NO_LABELS_FOUND": "Tidak ada label",
|
"NO_LABELS_FOUND": "Tidak ada label ditemukan untuk",
|
||||||
"ASSIGN_SELECTED_LABELS": "Tugaskan label terpilih",
|
"ASSIGN_SELECTED_LABELS": "Tugaskan label terpilih",
|
||||||
"ASSIGN_SUCCESFUL": "Label berhasil ditugaskan.",
|
"ASSIGN_SUCCESFUL": "Label berhasil ditugaskan.",
|
||||||
"ASSIGN_FAILED": "Failed to assign labels. Please try again."
|
"ASSIGN_FAILED": "Failed to assign labels. Please try again."
|
||||||
|
|||||||
@@ -571,16 +571,6 @@
|
|||||||
"ACTIVE_EMPTY_STATE_TITLE": "No contacts are active at the moment 🌙"
|
"ACTIVE_EMPTY_STATE_TITLE": "No contacts are active at the moment 🌙"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"CONTACTS_BULK_ACTIONS": {
|
|
||||||
"ASSIGN_LABELS": "Tugaskan Label",
|
|
||||||
"ASSIGN_LABELS_SUCCESS": "Label berhasil ditugaskan.",
|
|
||||||
"ASSIGN_LABELS_FAILED": "Failed to assign labels",
|
|
||||||
"DESCRIPTION": "Select the labels you want to add to the selected contacts.",
|
|
||||||
"NO_LABELS_FOUND": "No labels available yet.",
|
|
||||||
"SELECTED_COUNT": "{count} selected",
|
|
||||||
"CLEAR_SELECTION": "Clear selection",
|
|
||||||
"SELECT_ALL": "Select all ({count})"
|
|
||||||
},
|
|
||||||
"COMPOSE_NEW_CONVERSATION": {
|
"COMPOSE_NEW_CONVERSATION": {
|
||||||
"CONTACT_SEARCH": {
|
"CONTACT_SEARCH": {
|
||||||
"ERROR_MESSAGE": "We couldn’t complete the search. Please try again."
|
"ERROR_MESSAGE": "We couldn’t complete the search. Please try again."
|
||||||
|
|||||||
@@ -863,7 +863,6 @@
|
|||||||
},
|
},
|
||||||
"RESPONSES": {
|
"RESPONSES": {
|
||||||
"HEADER": "FAQs",
|
"HEADER": "FAQs",
|
||||||
"PENDING_FAQS": "Pending FAQs",
|
|
||||||
"ADD_NEW": "Create new FAQ",
|
"ADD_NEW": "Create new FAQ",
|
||||||
"DOCUMENTABLE": {
|
"DOCUMENTABLE": {
|
||||||
"CONVERSATION": "Conversation #{id}"
|
"CONVERSATION": "Conversation #{id}"
|
||||||
@@ -903,10 +902,6 @@
|
|||||||
"APPROVED": "Approved",
|
"APPROVED": "Approved",
|
||||||
"ALL": "Semua"
|
"ALL": "Semua"
|
||||||
},
|
},
|
||||||
"PENDING_BANNER": {
|
|
||||||
"TITLE": "Captain has found some FAQs your customers were looking for.",
|
|
||||||
"ACTION": "Click here to review"
|
|
||||||
},
|
|
||||||
"FORM_DESCRIPTION": "Add a question and its corresponding answer to the knowledge base and select the assistant it should be associated with.",
|
"FORM_DESCRIPTION": "Add a question and its corresponding answer to the knowledge base and select the assistant it should be associated with.",
|
||||||
"CREATE": {
|
"CREATE": {
|
||||||
"TITLE": "Add an FAQ",
|
"TITLE": "Add an FAQ",
|
||||||
@@ -937,15 +932,13 @@
|
|||||||
"APPROVE_SUCCESS_MESSAGE": "The FAQ was marked as approved"
|
"APPROVE_SUCCESS_MESSAGE": "The FAQ was marked as approved"
|
||||||
},
|
},
|
||||||
"OPTIONS": {
|
"OPTIONS": {
|
||||||
"APPROVE": "Approve",
|
"APPROVE": "Mark as approved",
|
||||||
"EDIT_RESPONSE": "Edit",
|
"EDIT_RESPONSE": "Edit FAQ",
|
||||||
"DELETE_RESPONSE": "Hapus"
|
"DELETE_RESPONSE": "Delete FAQ"
|
||||||
},
|
},
|
||||||
"EMPTY_STATE": {
|
"EMPTY_STATE": {
|
||||||
"TITLE": "No FAQs Found",
|
"TITLE": "No FAQs Found",
|
||||||
"NO_PENDING_TITLE": "There are no more pending FAQs to review",
|
|
||||||
"SUBTITLE": "FAQs help your assistant provide quick and accurate answers to questions from your customers. They can be generated automatically from your content or can be added manually.",
|
"SUBTITLE": "FAQs help your assistant provide quick and accurate answers to questions from your customers. They can be generated automatically from your content or can be added manually.",
|
||||||
"CLEAR_SEARCH": "Clear active filters",
|
|
||||||
"FEATURE_SPOTLIGHT": {
|
"FEATURE_SPOTLIGHT": {
|
||||||
"TITLE": "Captain FAQ",
|
"TITLE": "Captain FAQ",
|
||||||
"NOTE": "Captain FAQs detects common customer questions—whether missing from your knowledge base or frequently asked—and generates relevant FAQs to improve support. You can review each suggestion and decide whether to approve or reject it."
|
"NOTE": "Captain FAQs detects common customer questions—whether missing from your knowledge base or frequently asked—and generates relevant FAQs to improve support. You can review each suggestion and decide whether to approve or reject it."
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
},
|
},
|
||||||
"LABELS": {
|
"LABELS": {
|
||||||
"ASSIGN_LABELS": "Assign labels",
|
"ASSIGN_LABELS": "Assign labels",
|
||||||
"NO_LABELS_FOUND": "Engar merkingar fundust",
|
"NO_LABELS_FOUND": "No labels found for",
|
||||||
"ASSIGN_SELECTED_LABELS": "Assign selected labels",
|
"ASSIGN_SELECTED_LABELS": "Assign selected labels",
|
||||||
"ASSIGN_SUCCESFUL": "Labels assigned successfully.",
|
"ASSIGN_SUCCESFUL": "Labels assigned successfully.",
|
||||||
"ASSIGN_FAILED": "Failed to assign labels. Please try again."
|
"ASSIGN_FAILED": "Failed to assign labels. Please try again."
|
||||||
|
|||||||
@@ -571,16 +571,6 @@
|
|||||||
"ACTIVE_EMPTY_STATE_TITLE": "No contacts are active at the moment 🌙"
|
"ACTIVE_EMPTY_STATE_TITLE": "No contacts are active at the moment 🌙"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"CONTACTS_BULK_ACTIONS": {
|
|
||||||
"ASSIGN_LABELS": "Assign Labels",
|
|
||||||
"ASSIGN_LABELS_SUCCESS": "Labels assigned successfully.",
|
|
||||||
"ASSIGN_LABELS_FAILED": "Failed to assign labels",
|
|
||||||
"DESCRIPTION": "Select the labels you want to add to the selected contacts.",
|
|
||||||
"NO_LABELS_FOUND": "No labels available yet.",
|
|
||||||
"SELECTED_COUNT": "{count} selected",
|
|
||||||
"CLEAR_SELECTION": "Clear selection",
|
|
||||||
"SELECT_ALL": "Select all ({count})"
|
|
||||||
},
|
|
||||||
"COMPOSE_NEW_CONVERSATION": {
|
"COMPOSE_NEW_CONVERSATION": {
|
||||||
"CONTACT_SEARCH": {
|
"CONTACT_SEARCH": {
|
||||||
"ERROR_MESSAGE": "We couldn’t complete the search. Please try again."
|
"ERROR_MESSAGE": "We couldn’t complete the search. Please try again."
|
||||||
|
|||||||
@@ -863,7 +863,6 @@
|
|||||||
},
|
},
|
||||||
"RESPONSES": {
|
"RESPONSES": {
|
||||||
"HEADER": "FAQs",
|
"HEADER": "FAQs",
|
||||||
"PENDING_FAQS": "Pending FAQs",
|
|
||||||
"ADD_NEW": "Create new FAQ",
|
"ADD_NEW": "Create new FAQ",
|
||||||
"DOCUMENTABLE": {
|
"DOCUMENTABLE": {
|
||||||
"CONVERSATION": "Conversation #{id}"
|
"CONVERSATION": "Conversation #{id}"
|
||||||
@@ -903,10 +902,6 @@
|
|||||||
"APPROVED": "Approved",
|
"APPROVED": "Approved",
|
||||||
"ALL": "Allt"
|
"ALL": "Allt"
|
||||||
},
|
},
|
||||||
"PENDING_BANNER": {
|
|
||||||
"TITLE": "Captain has found some FAQs your customers were looking for.",
|
|
||||||
"ACTION": "Click here to review"
|
|
||||||
},
|
|
||||||
"FORM_DESCRIPTION": "Add a question and its corresponding answer to the knowledge base and select the assistant it should be associated with.",
|
"FORM_DESCRIPTION": "Add a question and its corresponding answer to the knowledge base and select the assistant it should be associated with.",
|
||||||
"CREATE": {
|
"CREATE": {
|
||||||
"TITLE": "Add an FAQ",
|
"TITLE": "Add an FAQ",
|
||||||
@@ -937,15 +932,13 @@
|
|||||||
"APPROVE_SUCCESS_MESSAGE": "The FAQ was marked as approved"
|
"APPROVE_SUCCESS_MESSAGE": "The FAQ was marked as approved"
|
||||||
},
|
},
|
||||||
"OPTIONS": {
|
"OPTIONS": {
|
||||||
"APPROVE": "Approve",
|
"APPROVE": "Mark as approved",
|
||||||
"EDIT_RESPONSE": "Breyta",
|
"EDIT_RESPONSE": "Edit FAQ",
|
||||||
"DELETE_RESPONSE": "Eyða"
|
"DELETE_RESPONSE": "Delete FAQ"
|
||||||
},
|
},
|
||||||
"EMPTY_STATE": {
|
"EMPTY_STATE": {
|
||||||
"TITLE": "No FAQs Found",
|
"TITLE": "No FAQs Found",
|
||||||
"NO_PENDING_TITLE": "There are no more pending FAQs to review",
|
|
||||||
"SUBTITLE": "FAQs help your assistant provide quick and accurate answers to questions from your customers. They can be generated automatically from your content or can be added manually.",
|
"SUBTITLE": "FAQs help your assistant provide quick and accurate answers to questions from your customers. They can be generated automatically from your content or can be added manually.",
|
||||||
"CLEAR_SEARCH": "Clear active filters",
|
|
||||||
"FEATURE_SPOTLIGHT": {
|
"FEATURE_SPOTLIGHT": {
|
||||||
"TITLE": "Captain FAQ",
|
"TITLE": "Captain FAQ",
|
||||||
"NOTE": "Captain FAQs detects common customer questions—whether missing from your knowledge base or frequently asked—and generates relevant FAQs to improve support. You can review each suggestion and decide whether to approve or reject it."
|
"NOTE": "Captain FAQs detects common customer questions—whether missing from your knowledge base or frequently asked—and generates relevant FAQs to improve support. You can review each suggestion and decide whether to approve or reject it."
|
||||||
|
|||||||
@@ -147,7 +147,7 @@
|
|||||||
"SEND_WEBHOOK_EVENT": "Invia Evento Webhook",
|
"SEND_WEBHOOK_EVENT": "Invia Evento Webhook",
|
||||||
"SEND_ATTACHMENT": "Invia Allegato",
|
"SEND_ATTACHMENT": "Invia Allegato",
|
||||||
"SEND_MESSAGE": "Invia un Messaggio",
|
"SEND_MESSAGE": "Invia un Messaggio",
|
||||||
"ADD_PRIVATE_NOTE": "Aggiungi una Nota Privata",
|
"ADD_PRIVATE_NOTE": "Aggiungi Nota Privata",
|
||||||
"CHANGE_PRIORITY": "Modifica Priorità",
|
"CHANGE_PRIORITY": "Modifica Priorità",
|
||||||
"ADD_SLA": "Aggiungi SLA",
|
"ADD_SLA": "Aggiungi SLA",
|
||||||
"OPEN_CONVERSATION": "Riapri conversazione"
|
"OPEN_CONVERSATION": "Riapri conversazione"
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
},
|
},
|
||||||
"LABELS": {
|
"LABELS": {
|
||||||
"ASSIGN_LABELS": "Assegna etichette",
|
"ASSIGN_LABELS": "Assegna etichette",
|
||||||
"NO_LABELS_FOUND": "Nessuna etichetta trovata",
|
"NO_LABELS_FOUND": "Nessuna etichetta trovata per",
|
||||||
"ASSIGN_SELECTED_LABELS": "Assegna etichette selezeionate",
|
"ASSIGN_SELECTED_LABELS": "Assegna etichette selezeionate",
|
||||||
"ASSIGN_SUCCESFUL": "Etichette assegnate correttamente.",
|
"ASSIGN_SUCCESFUL": "Etichette assegnate correttamente.",
|
||||||
"ASSIGN_FAILED": "Impossibile assegnare le etichette. Riprova."
|
"ASSIGN_FAILED": "Impossibile assegnare le etichette. Riprova."
|
||||||
|
|||||||
@@ -470,7 +470,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"DETAILS": {
|
"DETAILS": {
|
||||||
"CREATED_AT": "Creato {date}",
|
"CREATED_AT": "Creato il {date}",
|
||||||
"LAST_ACTIVITY": "Ultima attività {date}",
|
"LAST_ACTIVITY": "Ultima attività {date}",
|
||||||
"DELETE_CONTACT_DESCRIPTION": "Elimina definitivamente questo contatto. Questa azione è irreversibile",
|
"DELETE_CONTACT_DESCRIPTION": "Elimina definitivamente questo contatto. Questa azione è irreversibile",
|
||||||
"DELETE_CONTACT": "Elimina contatto",
|
"DELETE_CONTACT": "Elimina contatto",
|
||||||
@@ -571,16 +571,6 @@
|
|||||||
"ACTIVE_EMPTY_STATE_TITLE": "Nessun contatto attivo al momento 🌙"
|
"ACTIVE_EMPTY_STATE_TITLE": "Nessun contatto attivo al momento 🌙"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"CONTACTS_BULK_ACTIONS": {
|
|
||||||
"ASSIGN_LABELS": "Assegna Etichette",
|
|
||||||
"ASSIGN_LABELS_SUCCESS": "Etichette assegnate correttamente.",
|
|
||||||
"ASSIGN_LABELS_FAILED": "Assegnazione delle etichette non riuscita",
|
|
||||||
"DESCRIPTION": "Selezionare le etichette da aggiungere ai contatti selezionati.",
|
|
||||||
"NO_LABELS_FOUND": "Nessuna etichetta disponibile.",
|
|
||||||
"SELECTED_COUNT": "{count} selezionate",
|
|
||||||
"CLEAR_SELECTION": "Annulla selezione",
|
|
||||||
"SELECT_ALL": "Seleziona tutto ({count})"
|
|
||||||
},
|
|
||||||
"COMPOSE_NEW_CONVERSATION": {
|
"COMPOSE_NEW_CONVERSATION": {
|
||||||
"CONTACT_SEARCH": {
|
"CONTACT_SEARCH": {
|
||||||
"ERROR_MESSAGE": "Non siamo riusciti a completare la ricerca. Riprova."
|
"ERROR_MESSAGE": "Non siamo riusciti a completare la ricerca. Riprova."
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"CONTACTS_FILTER": {
|
"CONTACTS_FILTER": {
|
||||||
"TITLE": "Filtra Contatti",
|
"TITLE": "Filtra contatti",
|
||||||
"SUBTITLE": "Aggiungi filtri qui sotto e premi 'Invia' per filtrare i contatti.",
|
"SUBTITLE": "Aggiungi filtri qui sotto e premi 'Invia' per filtrare i contatti.",
|
||||||
"EDIT_CUSTOM_SEGMENT": "Edit Segment",
|
"EDIT_CUSTOM_SEGMENT": "Edit Segment",
|
||||||
"CUSTOM_VIEWS_SUBTITLE": "Add or remove filters and update your segment.",
|
"CUSTOM_VIEWS_SUBTITLE": "Add or remove filters and update your segment.",
|
||||||
@@ -8,12 +8,12 @@
|
|||||||
"CLEAR_ALL_FILTERS": "Cancella tutti i filtri",
|
"CLEAR_ALL_FILTERS": "Cancella tutti i filtri",
|
||||||
"FILTER_DELETE_ERROR": "Dovresti avere almeno un filtro da salvare",
|
"FILTER_DELETE_ERROR": "Dovresti avere almeno un filtro da salvare",
|
||||||
"SUBMIT_BUTTON_LABEL": "Invia",
|
"SUBMIT_BUTTON_LABEL": "Invia",
|
||||||
"UPDATE_BUTTON_LABEL": "Aggiorna Segmento",
|
"UPDATE_BUTTON_LABEL": "Update Segment",
|
||||||
"CANCEL_BUTTON_LABEL": "Annulla",
|
"CANCEL_BUTTON_LABEL": "Annulla",
|
||||||
"CLEAR_BUTTON_LABEL": "Rimuovi Filtri",
|
"CLEAR_BUTTON_LABEL": "Cancella filtri",
|
||||||
"EMPTY_VALUE_ERROR": "Valore richiesto",
|
"EMPTY_VALUE_ERROR": "Il valore è obbligatorio",
|
||||||
"SEGMENT_LABEL": "Nome Segmento",
|
"SEGMENT_LABEL": "Segment Name",
|
||||||
"SEGMENT_QUERY_LABEL": "Query Segmento",
|
"SEGMENT_QUERY_LABEL": "Segment Query",
|
||||||
"TOOLTIP_LABEL": "Filtra contatti",
|
"TOOLTIP_LABEL": "Filtra contatti",
|
||||||
"QUERY_DROPDOWN_LABELS": {
|
"QUERY_DROPDOWN_LABELS": {
|
||||||
"AND": "E",
|
"AND": "E",
|
||||||
@@ -46,15 +46,15 @@
|
|||||||
"CUSTOM_ATTRIBUTE_LINK": "Link",
|
"CUSTOM_ATTRIBUTE_LINK": "Link",
|
||||||
"CUSTOM_ATTRIBUTE_CHECKBOX": "Checkbox",
|
"CUSTOM_ATTRIBUTE_CHECKBOX": "Checkbox",
|
||||||
"CREATED_AT": "Creato il",
|
"CREATED_AT": "Creato il",
|
||||||
"LAST_ACTIVITY": "Ultima Attività",
|
"LAST_ACTIVITY": "Ultima attività",
|
||||||
"REFERER_LINK": "Link referente",
|
"REFERER_LINK": "Link di riferimento",
|
||||||
"BLOCKED": "Bloccato",
|
"BLOCKED": "Blocked",
|
||||||
"LABELS": "Etichette"
|
"LABELS": "Etichette"
|
||||||
},
|
},
|
||||||
"GROUPS": {
|
"GROUPS": {
|
||||||
"STANDARD_FILTERS": "Filtri Standard",
|
"STANDARD_FILTERS": "Filtri standard",
|
||||||
"ADDITIONAL_FILTERS": "Filtri Aggiuntivi",
|
"ADDITIONAL_FILTERS": "Filtri addizionali",
|
||||||
"CUSTOM_ATTRIBUTES": "Attributi Personalizzati"
|
"CUSTOM_ATTRIBUTES": "Attributi personalizzati"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,12 +3,12 @@
|
|||||||
"MODAL": {
|
"MODAL": {
|
||||||
"TITLE": "Modelli Twilio",
|
"TITLE": "Modelli Twilio",
|
||||||
"SUBTITLE": "Seleziona il modello Twilio che vuoi inviare",
|
"SUBTITLE": "Seleziona il modello Twilio che vuoi inviare",
|
||||||
"TEMPLATE_SELECTED_SUBTITLE": "Configura modello: {templateName}"
|
"TEMPLATE_SELECTED_SUBTITLE": "Configura template: {templateName}"
|
||||||
},
|
},
|
||||||
"PICKER": {
|
"PICKER": {
|
||||||
"SEARCH_PLACEHOLDER": "Cerca Modelli",
|
"SEARCH_PLACEHOLDER": "Cerca modelli",
|
||||||
"NO_TEMPLATES_FOUND": "Nessun modello trovato per",
|
"NO_TEMPLATES_FOUND": "Nessun modello trovato per",
|
||||||
"NO_CONTENT": "Nessun contenuto",
|
"NO_CONTENT": "No content",
|
||||||
"HEADER": "Intestazione",
|
"HEADER": "Intestazione",
|
||||||
"BODY": "Corpo",
|
"BODY": "Corpo",
|
||||||
"FOOTER": "Piè",
|
"FOOTER": "Piè",
|
||||||
@@ -22,7 +22,7 @@
|
|||||||
"REFRESH_ERROR": "Impossibile aggiornare i modelli. Per favore riprova.",
|
"REFRESH_ERROR": "Impossibile aggiornare i modelli. Per favore riprova.",
|
||||||
"LABELS": {
|
"LABELS": {
|
||||||
"LANGUAGE": "Lingua",
|
"LANGUAGE": "Lingua",
|
||||||
"TEMPLATE_BODY": "Corpo Modello",
|
"TEMPLATE_BODY": "Corpo modello",
|
||||||
"CATEGORY": "Categoria"
|
"CATEGORY": "Categoria"
|
||||||
},
|
},
|
||||||
"TYPES": {
|
"TYPES": {
|
||||||
@@ -36,16 +36,16 @@
|
|||||||
"LANGUAGE": "Lingua",
|
"LANGUAGE": "Lingua",
|
||||||
"CATEGORY": "Categoria",
|
"CATEGORY": "Categoria",
|
||||||
"VARIABLE_PLACEHOLDER": "Inserisci il valore di {variable}",
|
"VARIABLE_PLACEHOLDER": "Inserisci il valore di {variable}",
|
||||||
"GO_BACK_LABEL": "Torna Indietro",
|
"GO_BACK_LABEL": "Torna indietro",
|
||||||
"SEND_MESSAGE_LABEL": "Invia Messaggio",
|
"SEND_MESSAGE_LABEL": "Invia messaggio",
|
||||||
"FORM_ERROR_MESSAGE": "Inserisci tutte le variabili prima di inviare",
|
"FORM_ERROR_MESSAGE": "Si prega di compilare tutte le variabili prima di inviare",
|
||||||
"MEDIA_HEADER_LABEL": "Intestazione {type}",
|
"MEDIA_HEADER_LABEL": "Intestazione {type}",
|
||||||
"MEDIA_URL_LABEL": "Inserisci l'URL completo del media",
|
"MEDIA_URL_LABEL": "Inserisci l'URL completo del media",
|
||||||
"MEDIA_URL_PLACEHOLDER": "https://example.com/image.jpg"
|
"MEDIA_URL_PLACEHOLDER": "https://example.com/image.jpg"
|
||||||
},
|
},
|
||||||
"FORM": {
|
"FORM": {
|
||||||
"BACK_BUTTON": "Indietro",
|
"BACK_BUTTON": "Indietro",
|
||||||
"SEND_MESSAGE_BUTTON": "Invia Messaggio"
|
"SEND_MESSAGE_BUTTON": "Invia messaggio"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user