Merge branch 'develop' into chore/conversation-participants

This commit is contained in:
Sojan Jose 2022-11-29 17:18:19 +03:00 committed by GitHub
commit 1e32157fc5
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
358 changed files with 6220 additions and 779 deletions

View file

@ -60,9 +60,10 @@ MAILER_SENDER_EMAIL=Chatwoot <accounts@chatwoot.com>
#SMTP domain key is set up for HELO checking #SMTP domain key is set up for HELO checking
SMTP_DOMAIN=chatwoot.com SMTP_DOMAIN=chatwoot.com
# the default value is set "mailhog" and is used by docker-compose for development environments, # Set the value to "mailhog" if using docker-compose for development environments,
# Set the value as "localhost" or your SMTP address in other environments # Set the value as "localhost" or your SMTP address in other environments
SMTP_ADDRESS=mailhog # If SMTP_ADDRESS is empty, Chatwoot would try to use sendmail(postfix)
SMTP_ADDRESS=
SMTP_PORT=1025 SMTP_PORT=1025
SMTP_USERNAME= SMTP_USERNAME=
SMTP_PASSWORD= SMTP_PASSWORD=

View file

@ -17,7 +17,6 @@ Metrics/ClassLength:
- 'app/models/message.rb' - 'app/models/message.rb'
- 'app/builders/messages/facebook/message_builder.rb' - 'app/builders/messages/facebook/message_builder.rb'
- 'app/controllers/api/v1/accounts/contacts_controller.rb' - 'app/controllers/api/v1/accounts/contacts_controller.rb'
- 'app/controllers/api/v1/accounts/conversations_controller.rb'
- 'app/listeners/action_cable_listener.rb' - 'app/listeners/action_cable_listener.rb'
- 'app/models/user.rb' - 'app/models/user.rb'
RSpec/ExampleLength: RSpec/ExampleLength:

View file

@ -0,0 +1,40 @@
class ConversationBuilder
pattr_initialize [:params!, :contact_inbox!]
def perform
look_up_exising_conversation || create_new_conversation
end
private
def look_up_exising_conversation
return unless @contact_inbox.inbox.lock_to_single_conversation?
@contact_inbox.conversations.last
end
def create_new_conversation
::Conversation.create!(conversation_params)
end
def conversation_params
additional_attributes = params[:additional_attributes]&.permit! || {}
custom_attributes = params[:custom_attributes]&.permit! || {}
status = params[:status].present? ? { status: params[:status] } : {}
# TODO: temporary fallback for the old bot status in conversation, we will remove after couple of releases
# commenting this out to see if there are any errors, if not we can remove this in subsequent releases
# status = { status: 'pending' } if status[:status] == 'bot'
{
account_id: @contact_inbox.inbox.account_id,
inbox_id: @contact_inbox.inbox_id,
contact_id: @contact_inbox.contact_id,
contact_inbox_id: @contact_inbox.id,
additional_attributes: additional_attributes,
custom_attributes: custom_attributes,
snoozed_until: params[:snoozed_until],
assignee_id: params[:assignee_id],
team_id: params[:team_id]
}.merge(status)
end
end

View file

@ -2,7 +2,7 @@ class Api::V1::Accounts::Contacts::ConversationsController < Api::V1::Accounts::
def index def index
@conversations = Current.account.conversations.includes( @conversations = Current.account.conversations.includes(
:assignee, :contact, :inbox, :taggings :assignee, :contact, :inbox, :taggings
).where(inbox_id: inbox_ids, contact_id: @contact.id) ).where(inbox_id: inbox_ids, contact_id: @contact.id).order(id: :desc).limit(20)
end end
private private

View file

@ -24,7 +24,7 @@ class Api::V1::Accounts::ConversationsController < Api::V1::Accounts::BaseContro
def create def create
ActiveRecord::Base.transaction do ActiveRecord::Base.transaction do
@conversation = ::Conversation.create!(conversation_params) @conversation = ConversationBuilder.new(params: params, contact_inbox: @contact_inbox).perform
Messages::MessageBuilder.new(Current.user, @conversation, params[:message]).perform if params[:message].present? Messages::MessageBuilder.new(Current.user, @conversation, params[:message]).perform if params[:message].present?
end end
end end
@ -75,10 +75,13 @@ class Api::V1::Accounts::ConversationsController < Api::V1::Accounts::BaseContro
end end
def update_last_seen def update_last_seen
# rubocop:disable Rails/SkipsModelValidations update_last_seen_on_conversation(DateTime.now.utc, assignee?)
@conversation.update_column(:agent_last_seen_at, DateTime.now.utc) end
@conversation.update_column(:assignee_last_seen_at, DateTime.now.utc) if assignee?
# rubocop:enable Rails/SkipsModelValidations def unread
last_incoming_message = @conversation.messages.incoming.last
last_seen_at = last_incoming_message.created_at - 1.second if last_incoming_message.present?
update_last_seen_on_conversation(last_seen_at, true)
end end
def custom_attributes def custom_attributes
@ -88,9 +91,18 @@ class Api::V1::Accounts::ConversationsController < Api::V1::Accounts::BaseContro
private private
def update_last_seen_on_conversation(last_seen_at, update_assignee)
# rubocop:disable Rails/SkipsModelValidations
@conversation.update_column(:agent_last_seen_at, last_seen_at)
@conversation.update_column(:assignee_last_seen_at, last_seen_at) if update_assignee.present?
# rubocop:enable Rails/SkipsModelValidations
end
def set_conversation_status def set_conversation_status
status = params[:status] == 'bot' ? 'pending' : params[:status] # TODO: temporary fallback for the old bot status in conversation, we will remove after couple of releases
@conversation.status = status # commenting this out to see if there are any errors, if not we can remove this in subsequent releases
# status = params[:status] == 'bot' ? 'pending' : params[:status]
@conversation.status = params[:status]
@conversation.snoozed_until = parse_date_time(params[:snoozed_until].to_s) if params[:snoozed_until] @conversation.snoozed_until = parse_date_time(params[:snoozed_until].to_s) if params[:snoozed_until]
end end
@ -142,31 +154,11 @@ class Api::V1::Accounts::ConversationsController < Api::V1::Accounts::BaseContro
).perform ).perform
end end
def conversation_params
additional_attributes = params[:additional_attributes]&.permit! || {}
custom_attributes = params[:custom_attributes]&.permit! || {}
status = params[:status].present? ? { status: params[:status] } : {}
# TODO: temporary fallback for the old bot status in conversation, we will remove after couple of releases
status = { status: 'pending' } if status[:status] == 'bot'
{
account_id: Current.account.id,
inbox_id: @contact_inbox.inbox_id,
contact_id: @contact_inbox.contact_id,
contact_inbox_id: @contact_inbox.id,
additional_attributes: additional_attributes,
custom_attributes: custom_attributes,
snoozed_until: params[:snoozed_until],
assignee_id: params[:assignee_id],
team_id: params[:team_id]
}.merge(status)
end
def conversation_finder def conversation_finder
@conversation_finder ||= ConversationFinder.new(current_user, params) @conversation_finder ||= ConversationFinder.new(Current.user, params)
end end
def assignee? def assignee?
@conversation.assignee_id? && current_user == @conversation.assignee @conversation.assignee_id? && Current.user == @conversation.assignee
end end
end end

View file

@ -113,7 +113,8 @@ class Api::V1::Accounts::InboxesController < Api::V1::Accounts::BaseController
def inbox_attributes def inbox_attributes
[:name, :avatar, :greeting_enabled, :greeting_message, :enable_email_collect, :csat_survey_enabled, [:name, :avatar, :greeting_enabled, :greeting_message, :enable_email_collect, :csat_survey_enabled,
:enable_auto_assignment, :working_hours_enabled, :out_of_office_message, :timezone, :allow_messages_after_resolved] :enable_auto_assignment, :working_hours_enabled, :out_of_office_message, :timezone, :allow_messages_after_resolved,
:lock_to_single_conversation]
end end
def permitted_params(channel_attributes = []) def permitted_params(channel_attributes = [])

View file

@ -50,7 +50,9 @@ class Api::V1::Widget::BaseController < ApplicationController
end end
def contact_name def contact_name
params[:contact][:name] || contact_email.split('@')[0] if contact_email.present? return if @contact.email.present? || @contact.phone_number.present? || @contact.identifier.present?
permitted_params.dig(:contact, :name) || (contact_email.split('@')[0] if contact_email.present?)
end end
def contact_phone_number def contact_phone_number

View file

@ -16,8 +16,7 @@ class DashboardController < ActionController::Base
@global_config = GlobalConfig.get( @global_config = GlobalConfig.get(
'LOGO', 'LOGO_THUMBNAIL', 'LOGO', 'LOGO_THUMBNAIL',
'INSTALLATION_NAME', 'INSTALLATION_NAME',
'WIDGET_BRAND_URL', 'WIDGET_BRAND_URL', 'TERMS_URL',
'TERMS_URL',
'PRIVACY_URL', 'PRIVACY_URL',
'DISPLAY_MANIFEST', 'DISPLAY_MANIFEST',
'CREATE_NEW_ACCOUNT_FROM_DASHBOARD', 'CREATE_NEW_ACCOUNT_FROM_DASHBOARD',
@ -30,7 +29,8 @@ class DashboardController < ActionController::Base
'HCAPTCHA_SITE_KEY', 'HCAPTCHA_SITE_KEY',
'LOGOUT_REDIRECT_LINK', 'LOGOUT_REDIRECT_LINK',
'DISABLE_USER_PROFILE_UPDATE', 'DISABLE_USER_PROFILE_UPDATE',
'DEPLOYMENT_ENV' 'DEPLOYMENT_ENV',
'CSML_EDITOR_HOST'
).merge(app_config) ).merge(app_config)
end end

View file

@ -21,7 +21,9 @@ class MessageFinder
end end
def current_messages def current_messages
if @params[:before].present? if @params[:after].present?
messages.reorder('created_at asc').where('id >= ?', @params[:before].to_i).limit(20)
elsif @params[:before].present?
messages.reorder('created_at desc').where('id < ?', @params[:before].to_i).limit(20).reverse messages.reorder('created_at desc').where('id < ?', @params[:before].to_i).limit(20).reverse
else else
messages.reorder('created_at desc').limit(20).reverse messages.reorder('created_at desc').limit(20).reverse

View file

@ -68,6 +68,10 @@ class ConversationApi extends ApiClient {
return axios.post(`${this.url}/${id}/update_last_seen`); return axios.post(`${this.url}/${id}/update_last_seen`);
} }
markMessagesUnread({ id }) {
return axios.post(`${this.url}/${id}/unread`);
}
toggleTyping({ conversationId, status, isPrivate }) { toggleTyping({ conversationId, status, isPrivate }) {
return axios.post(`${this.url}/${conversationId}/toggle_typing_status`, { return axios.post(`${this.url}/${conversationId}/toggle_typing_status`, {
typing_status: status, typing_status: status,

View file

@ -13,6 +13,16 @@ class Inboxes extends ApiClient {
deleteInboxAvatar(inboxId) { deleteInboxAvatar(inboxId) {
return axios.delete(`${this.url}/${inboxId}/avatar`); return axios.delete(`${this.url}/${inboxId}/avatar`);
} }
getAgentBot(inboxId) {
return axios.get(`${this.url}/${inboxId}/agent_bot`);
}
setAgentBot(inboxId, botId) {
return axios.post(`${this.url}/${inboxId}/set_agent_bot`, {
agent_bot: botId,
});
}
} }
export default new Inboxes(); export default new Inboxes();

View file

@ -11,6 +11,8 @@ describe('#InboxesAPI', () => {
expect(inboxesAPI).toHaveProperty('update'); expect(inboxesAPI).toHaveProperty('update');
expect(inboxesAPI).toHaveProperty('delete'); expect(inboxesAPI).toHaveProperty('delete');
expect(inboxesAPI).toHaveProperty('getCampaigns'); expect(inboxesAPI).toHaveProperty('getCampaigns');
expect(inboxesAPI).toHaveProperty('getAgentBot');
expect(inboxesAPI).toHaveProperty('setAgentBot');
}); });
describeWithAPIMock('API calls', context => { describeWithAPIMock('API calls', context => {
it('#getCampaigns', () => { it('#getCampaigns', () => {

View file

@ -102,6 +102,7 @@
@assign-agent="onAssignAgent" @assign-agent="onAssignAgent"
@update-conversations="onUpdateConversations" @update-conversations="onUpdateConversations"
@assign-labels="onAssignLabels" @assign-labels="onAssignLabels"
@assign-team="onAssignTeamsForBulk"
/> />
<div <div
ref="activeConversation" ref="activeConversation"
@ -125,6 +126,7 @@
@assign-label="onAssignLabels" @assign-label="onAssignLabels"
@update-conversation-status="toggleConversationStatus" @update-conversation-status="toggleConversationStatus"
@context-menu-toggle="onContextMenuToggle" @context-menu-toggle="onContextMenuToggle"
@mark-as-unread="markAsUnread"
/> />
<div v-if="chatListLoading" class="text-center"> <div v-if="chatListLoading" class="text-center">
@ -184,6 +186,7 @@ import {
hasPressedAltAndJKey, hasPressedAltAndJKey,
hasPressedAltAndKKey, hasPressedAltAndKKey,
} from 'shared/helpers/KeyboardHelpers'; } from 'shared/helpers/KeyboardHelpers';
import { conversationListPageURL } from '../helper/URLHelper';
export default { export default {
components: { components: {
@ -639,6 +642,29 @@ export default {
this.showAlert(this.$t('BULK_ACTION.ASSIGN_FAILED')); this.showAlert(this.$t('BULK_ACTION.ASSIGN_FAILED'));
} }
}, },
async markAsUnread(conversationId) {
try {
await this.$store.dispatch('markMessagesUnread', {
id: conversationId,
});
const {
params: { accountId, inbox_id: inboxId, label, teamId },
name,
} = this.$route;
this.$router.push(
conversationListPageURL({
accountId,
conversationType: name === 'conversation_mentions' ? 'mention' : '',
customViewId: this.foldersId,
inboxId,
label,
teamId,
})
);
} catch (error) {
// Ignore error
}
},
async onAssignTeam(team, conversationId = null) { async onAssignTeam(team, conversationId = null) {
try { try {
await this.$store.dispatch('assignTeam', { await this.$store.dispatch('assignTeam', {
@ -688,6 +714,21 @@ export default {
this.showAlert(this.$t('BULK_ACTION.LABELS.ASSIGN_FAILED')); this.showAlert(this.$t('BULK_ACTION.LABELS.ASSIGN_FAILED'));
} }
}, },
async onAssignTeamsForBulk(team) {
try {
await this.$store.dispatch('bulkActions/process', {
type: 'Conversation',
ids: this.selectedConversations,
fields: {
team_id: team.id,
},
});
this.selectedConversations = [];
this.showAlert(this.$t('BULK_ACTION.TEAMS.ASSIGN_SUCCESFUL'));
} catch (err) {
this.showAlert(this.$t('BULK_ACTION.TEAMS.ASSIGN_FAILED'));
}
},
async onUpdateConversations(status) { async onUpdateConversations(status) {
try { try {
await this.$store.dispatch('bulkActions/process', { await this.$store.dispatch('bulkActions/process', {

View file

@ -1,7 +1,11 @@
<template> <template>
<span> <span>
{{ textToBeDisplayed }} {{ textToBeDisplayed }}
<button class="show-more--button" @click="toggleShowMore"> <button
v-if="text.length > limit"
class="show-more--button"
@click="toggleShowMore"
>
{{ buttonLabel }} {{ buttonLabel }}
</button> </button>
</span> </span>
@ -25,7 +29,7 @@ export default {
}, },
computed: { computed: {
textToBeDisplayed() { textToBeDisplayed() {
if (this.showMore) { if (this.showMore || this.text.length <= this.limit) {
return this.text; return this.text;
} }

View file

@ -233,7 +233,9 @@ export default {
node node
); );
this.state = this.editorView.state.apply(tr); this.state = this.editorView.state.apply(tr);
return this.emitOnChange(); this.emitOnChange();
return false;
}, },
insertCannedResponse(cannedItem) { insertCannedResponse(cannedItem) {
@ -241,22 +243,26 @@ export default {
return null; return null;
} }
const tr = this.editorView.state.tr.insertText( let from = this.range.from - 1;
cannedItem, let node = addMentionsToMarkdownParser(defaultMarkdownParser).parse(
this.range.from, cannedItem
this.range.to
); );
if (node.childCount === 1) {
node = this.editorView.state.schema.text(cannedItem);
from = this.range.from;
}
const tr = this.editorView.state.tr.replaceWith(
from,
this.range.to,
node
);
this.state = this.editorView.state.apply(tr); this.state = this.editorView.state.apply(tr);
this.emitOnChange(); this.emitOnChange();
// Hacky fix for #5501 tr.scrollIntoView();
this.state = createState(
this.contentFromEditor,
this.placeholder,
this.plugins
);
this.editorView.updateState(this.state);
this.focusEditorInputField();
return false; return false;
}, },

View file

@ -102,10 +102,12 @@
<conversation-context-menu <conversation-context-menu
:status="chat.status" :status="chat.status"
:inbox-id="inbox.id" :inbox-id="inbox.id"
:has-unread-messages="hasUnread"
@update-conversation="onUpdateConversation" @update-conversation="onUpdateConversation"
@assign-agent="onAssignAgent" @assign-agent="onAssignAgent"
@assign-label="onAssignLabel" @assign-label="onAssignLabel"
@assign-team="onAssignTeam" @assign-team="onAssignTeam"
@mark-as-unread="markAsUnread"
/> />
</woot-context-menu> </woot-context-menu>
</div> </div>
@ -241,7 +243,7 @@ export default {
}, },
unreadCount() { unreadCount() {
return this.unreadMessagesCount(this.chat); return this.chat.unread_count;
}, },
hasUnread() { hasUnread() {
@ -359,6 +361,10 @@ export default {
this.$emit('assign-team', team, this.chat.id); this.$emit('assign-team', team, this.chat.id);
this.closeContextMenu(); this.closeContextMenu();
}, },
async markAsUnread() {
this.$emit('mark-as-unread', this.chat.id);
this.closeContextMenu();
},
}, },
}; };
</script> </script>

View file

@ -59,10 +59,12 @@
:story-sender="storySender" :story-sender="storySender"
:story-id="storyId" :story-id="storyId"
:is-a-tweet="isATweet" :is-a-tweet="isATweet"
:is-a-whatsapp-channel="isAWhatsAppChannel"
:has-instagram-story="hasInstagramStory" :has-instagram-story="hasInstagramStory"
:is-email="isEmailContentType" :is-email="isEmailContentType"
:is-private="data.private" :is-private="data.private"
:message-type="data.message_type" :message-type="data.message_type"
:message-status="status"
:readable-time="readableTime" :readable-time="readableTime"
:source-id="data.source_id" :source-id="data.source_id"
:inbox-id="data.inbox_id" :inbox-id="data.inbox_id"
@ -157,6 +159,10 @@ export default {
type: Boolean, type: Boolean,
default: false, default: false,
}, },
isAWhatsAppChannel: {
type: Boolean,
default: false,
},
hasInstagramStory: { hasInstagramStory: {
type: Boolean, type: Boolean,
default: false, default: false,
@ -231,6 +237,9 @@ export default {
sender() { sender() {
return this.data.sender || {}; return this.data.sender || {};
}, },
status() {
return this.data.status;
},
storySender() { storySender() {
return this.contentAttributes.story_sender || null; return this.contentAttributes.story_sender || null;
}, },

View file

@ -35,20 +35,21 @@
<message <message
v-for="message in getReadMessages" v-for="message in getReadMessages"
:key="message.id" :key="message.id"
class="message--read" class="message--read ph-no-capture"
:data="message" :data="message"
:is-a-tweet="isATweet" :is-a-tweet="isATweet"
:is-a-whatsapp-channel="isAWhatsAppChannel"
:has-instagram-story="hasInstagramStory" :has-instagram-story="hasInstagramStory"
:has-user-read-message=" :has-user-read-message="
hasUserReadMessage(message.created_at, getLastSeenAt) hasUserReadMessage(message.created_at, getLastSeenAt)
" "
:is-web-widget-inbox="isAWebWidgetInbox" :is-web-widget-inbox="isAWebWidgetInbox"
/> />
<li v-show="getUnreadCount != 0" class="unread--toast"> <li v-show="unreadMessageCount != 0" class="unread--toast">
<span class="text-uppercase"> <span class="text-uppercase">
{{ getUnreadCount }} {{ unreadMessageCount }}
{{ {{
getUnreadCount > 1 unreadMessageCount > 1
? $t('CONVERSATION.UNREAD_MESSAGES') ? $t('CONVERSATION.UNREAD_MESSAGES')
: $t('CONVERSATION.UNREAD_MESSAGE') : $t('CONVERSATION.UNREAD_MESSAGE')
}} }}
@ -57,9 +58,10 @@
<message <message
v-for="message in getUnReadMessages" v-for="message in getUnReadMessages"
:key="message.id" :key="message.id"
class="message--unread" class="message--unread ph-no-capture"
:data="message" :data="message"
:is-a-tweet="isATweet" :is-a-tweet="isATweet"
:is-a-whatsapp-channel="isAWhatsAppChannel"
:has-instagram-story="hasInstagramStory" :has-instagram-story="hasInstagramStory"
:has-user-read-message=" :has-user-read-message="
hasUserReadMessage(message.created_at, getLastSeenAt) hasUserReadMessage(message.created_at, getLastSeenAt)
@ -137,7 +139,6 @@ export default {
allConversations: 'getAllConversations', allConversations: 'getAllConversations',
inboxesList: 'inboxes/getInboxes', inboxesList: 'inboxes/getInboxes',
listLoadingStatus: 'getAllMessagesLoaded', listLoadingStatus: 'getAllMessagesLoaded',
getUnreadCount: 'getUnreadCount',
loadingChatList: 'getChatListLoadingStatus', loadingChatList: 'getChatListLoadingStatus',
}), }),
inboxId() { inboxId() {
@ -271,6 +272,9 @@ export default {
} }
return ''; return '';
}, },
unreadMessageCount() {
return this.currentChat.unread_count;
},
}, },
watch: { watch: {
@ -331,7 +335,7 @@ export default {
}, },
scrollToBottom() { scrollToBottom() {
let relevantMessages = []; let relevantMessages = [];
if (this.getUnreadCount > 0) { if (this.unreadMessageCount > 0) {
// capturing only the unread messages // capturing only the unread messages
relevantMessages = this.conversationPanel.querySelectorAll( relevantMessages = this.conversationPanel.querySelectorAll(
'.message--unread' '.message--unread'

View file

@ -3,20 +3,30 @@
<span class="time" :class="{ delivered: messageRead }">{{ <span class="time" :class="{ delivered: messageRead }">{{
readableTime readableTime
}}</span> }}</span>
<span v-if="showSentIndicator" class="time"> <span v-if="showReadIndicator" class="read-indicator-wrap">
<fluent-icon <fluent-icon
v-tooltip.top-start="$t('CHAT_LIST.SENT')" v-tooltip.top-start="$t('CHAT_LIST.MESSAGE_READ')"
icon="checkmark" icon="checkmark-double"
class="action--icon read-tick read-indicator"
size="14"
/>
</span>
<span v-if="showDeliveredIndicator" class="read-indicator-wrap">
<fluent-icon
v-tooltip.top-start="$t('CHAT_LIST.DELIVERED')"
icon="checkmark-double"
class="action--icon read-tick"
size="14"
/>
</span>
<span v-if="showSentIndicator" class="read-indicator-wrap">
<fluent-icon
v-tooltip.top-start="$t('CHAT_LIST.SENT')"
icon="checkmark"
class="action--icon read-tick"
size="14" size="14"
/> />
</span> </span>
<fluent-icon
v-if="messageRead"
v-tooltip.top-start="$t('CHAT_LIST.MESSAGE_READ')"
icon="checkmark-double"
class="action--icon read-tick"
size="12"
/>
<fluent-icon <fluent-icon
v-if="isEmail" v-if="isEmail"
v-tooltip.top-start="$t('CHAT_LIST.RECEIVED_VIA_EMAIL')" v-tooltip.top-start="$t('CHAT_LIST.RECEIVED_VIA_EMAIL')"
@ -74,7 +84,7 @@
</template> </template>
<script> <script>
import { MESSAGE_TYPE } from 'shared/constants/messages'; import { MESSAGE_TYPE, MESSAGE_STATUS } from 'shared/constants/messages';
import { BUS_EVENTS } from 'shared/constants/busEvents'; import { BUS_EVENTS } from 'shared/constants/busEvents';
import inboxMixin from 'shared/mixins/inboxMixin'; import inboxMixin from 'shared/mixins/inboxMixin';
@ -117,6 +127,10 @@ export default {
type: Number, type: Number,
default: 1, default: 1,
}, },
messageStatus: {
type: String,
default: '',
},
sourceId: { sourceId: {
type: String, type: String,
default: '', default: '',
@ -144,6 +158,15 @@ export default {
isOutgoing() { isOutgoing() {
return MESSAGE_TYPE.OUTGOING === this.messageType; return MESSAGE_TYPE.OUTGOING === this.messageType;
}, },
isDelivered() {
return MESSAGE_STATUS.DELIVERED === this.messageStatus;
},
isRead() {
return MESSAGE_STATUS.READ === this.messageStatus;
},
isSent() {
return MESSAGE_STATUS.SENT === this.messageStatus;
},
screenName() { screenName() {
const { additional_attributes: additionalAttributes = {} } = const { additional_attributes: additionalAttributes = {} } =
this.sender || {}; this.sender || {};
@ -168,7 +191,23 @@ export default {
return ( return (
this.isOutgoing && this.isOutgoing &&
this.sourceId && this.sourceId &&
(this.isAnEmailChannel || this.isAWhatsAppChannel) (this.isAnEmailChannel || (this.isAWhatsAppChannel && this.isSent))
);
},
showDeliveredIndicator() {
return (
this.isOutgoing &&
this.sourceId &&
this.isAWhatsAppChannel &&
this.isDelivered
);
},
showReadIndicator() {
return (
this.isOutgoing &&
this.sourceId &&
this.isAWhatsAppChannel &&
this.isRead
); );
}, },
}, },
@ -185,16 +224,20 @@ export default {
.right { .right {
.message-text--metadata { .message-text--metadata {
align-items: center;
.time { .time {
color: var(--w-100); color: var(--w-100);
} }
.action--icon { .action--icon {
color: var(--white);
&.read-tick { &.read-tick {
color: var(--v-100); color: var(--v-100);
margin-top: calc(var(--space-micro) + var(--space-micro) / 2);
} }
color: var(--white);
&.read-indicator {
color: var(--g-300);
}
} }
.lock--icon--private { .lock--icon--private {
@ -296,4 +339,10 @@ export default {
.delivered-icon { .delivered-icon {
margin-left: -var(--space-normal); margin-left: -var(--space-normal);
} }
.read-indicator-wrap {
line-height: 1;
display: flex;
align-items: center;
}
</style> </style>

View file

@ -1,5 +1,11 @@
<template> <template>
<div class="menu-container"> <div class="menu-container">
<menu-item
v-if="!hasUnreadMessages"
:option="unreadOption"
variant="icon"
@click="$emit('mark-as-unread')"
/>
<template v-for="option in statusMenuConfig"> <template v-for="option in statusMenuConfig">
<menu-item <menu-item
v-if="show(option.key)" v-if="show(option.key)"
@ -79,6 +85,10 @@ export default {
type: String, type: String,
default: '', default: '',
}, },
hasUnreadMessages: {
type: Boolean,
default: false,
},
inboxId: { inboxId: {
type: Number, type: Number,
default: null, default: null,
@ -87,6 +97,10 @@ export default {
data() { data() {
return { return {
STATUS_TYPE: wootConstants.STATUS_TYPE, STATUS_TYPE: wootConstants.STATUS_TYPE,
unreadOption: {
label: this.$t('CONVERSATION.CARD_CONTEXT_MENU.MARK_AS_UNREAD'),
icon: 'mail',
},
statusMenuConfig: [ statusMenuConfig: [
{ {
key: wootConstants.STATUS_TYPE.RESOLVED, key: wootConstants.STATUS_TYPE.RESOLVED,

View file

@ -1,6 +1,6 @@
<template> <template>
<div class="bulk-action__agents"> <div class="bulk-action__agents">
<div class="triangle"> <div class="triangle" :style="cssVars">
<svg height="12" viewBox="0 0 24 12" width="24"> <svg height="12" viewBox="0 0 24 12" width="24">
<path <path
d="M20 12l-8-8-12 12" d="M20 12l-8-8-12 12"
@ -105,13 +105,14 @@ import { mapGetters } from 'vuex';
import Thumbnail from 'dashboard/components/widgets/Thumbnail.vue'; import Thumbnail from 'dashboard/components/widgets/Thumbnail.vue';
import Spinner from 'shared/components/Spinner'; import Spinner from 'shared/components/Spinner';
import { mixin as clickaway } from 'vue-clickaway'; import { mixin as clickaway } from 'vue-clickaway';
import bulkActionsMixin from 'dashboard/mixins/bulkActionsMixin.js';
export default { export default {
components: { components: {
Thumbnail, Thumbnail,
Spinner, Spinner,
}, },
mixins: [clickaway], mixins: [clickaway, bulkActionsMixin],
props: { props: {
selectedInboxes: { selectedInboxes: {
type: Array, type: Array,
@ -233,7 +234,7 @@ export default {
z-index: var(--z-index-one); z-index: var(--z-index-one);
position: absolute; position: absolute;
top: calc(var(--space-slab) * -1); top: calc(var(--space-slab) * -1);
right: var(--space-micro); right: var(--triangle-position);
text-align: left; text-align: left;
} }
} }

View file

@ -43,25 +43,26 @@
variant="smooth" variant="smooth"
color-scheme="secondary" color-scheme="secondary"
icon="person-assign" icon="person-assign"
class="margin-right-smaller"
@click="toggleAgentList" @click="toggleAgentList"
/> />
<woot-button
v-tooltip="$t('BULK_ACTION.ASSIGN_TEAM_TOOLTIP')"
size="tiny"
variant="smooth"
color-scheme="secondary"
icon="people-team-add"
@click="toggleTeamsList"
/>
</div> </div>
<transition name="popover-animation"> <transition name="popover-animation">
<label-actions <label-actions
v-if="showLabelActions" v-if="showLabelActions"
triangle-position="8.5"
@assign="assignLabels" @assign="assignLabels"
@close="showLabelActions = false" @close="showLabelActions = false"
/> />
</transition> </transition>
<transition name="popover-animation">
<agent-selector
v-if="showAgentsList"
:selected-inboxes="selectedInboxes"
:conversation-count="conversations.length"
@select="submit"
@close="showAgentsList = false"
/>
</transition>
<transition name="popover-animation"> <transition name="popover-animation">
<update-actions <update-actions
v-if="showUpdateActions" v-if="showUpdateActions"
@ -70,10 +71,29 @@
:show-resolve="!showResolvedAction" :show-resolve="!showResolvedAction"
:show-reopen="!showOpenAction" :show-reopen="!showOpenAction"
:show-snooze="!showSnoozedAction" :show-snooze="!showSnoozedAction"
triangle-position="5.6"
@update="updateConversations" @update="updateConversations"
@close="showUpdateActions = false" @close="showUpdateActions = false"
/> />
</transition> </transition>
<transition name="popover-animation">
<agent-selector
v-if="showAgentsList"
:selected-inboxes="selectedInboxes"
:conversation-count="conversations.length"
triangle-position="2.8"
@select="submit"
@close="showAgentsList = false"
/>
</transition>
<transition name="popover-animation">
<team-actions
v-if="showTeamsList"
triangle-position="0.2"
@assign-team="assignTeam"
@close="showTeamsList = false"
/>
</transition>
</div> </div>
<div v-if="allConversationsSelected" class="bulk-action__alert"> <div v-if="allConversationsSelected" class="bulk-action__alert">
{{ $t('BULK_ACTION.ALL_CONVERSATIONS_SELECTED_ALERT') }} {{ $t('BULK_ACTION.ALL_CONVERSATIONS_SELECTED_ALERT') }}
@ -85,11 +105,13 @@
import AgentSelector from './AgentSelector.vue'; import AgentSelector from './AgentSelector.vue';
import UpdateActions from './UpdateActions.vue'; import UpdateActions from './UpdateActions.vue';
import LabelActions from './LabelActions.vue'; import LabelActions from './LabelActions.vue';
import TeamActions from './TeamActions.vue';
export default { export default {
components: { components: {
AgentSelector, AgentSelector,
UpdateActions, UpdateActions,
LabelActions, LabelActions,
TeamActions,
}, },
props: { props: {
conversations: { conversations: {
@ -122,6 +144,8 @@ export default {
showAgentsList: false, showAgentsList: false,
showUpdateActions: false, showUpdateActions: false,
showLabelActions: false, showLabelActions: false,
showTeamsList: false,
popoverPositions: {},
}; };
}, },
methods: { methods: {
@ -137,6 +161,9 @@ export default {
assignLabels(labels) { assignLabels(labels) {
this.$emit('assign-labels', labels); this.$emit('assign-labels', labels);
}, },
assignTeam(team) {
this.$emit('assign-team', team);
},
resolveConversations() { resolveConversations() {
this.$emit('resolve-conversations'); this.$emit('resolve-conversations');
}, },
@ -149,6 +176,9 @@ export default {
toggleAgentList() { toggleAgentList() {
this.showAgentsList = !this.showAgentsList; this.showAgentsList = !this.showAgentsList;
}, },
toggleTeamsList() {
this.showTeamsList = !this.showTeamsList;
},
}, },
}; };
</script> </script>

View file

@ -1,6 +1,6 @@
<template> <template>
<div v-on-clickaway="onClose" class="labels-container"> <div v-on-clickaway="onClose" class="labels-container">
<div class="triangle"> <div class="triangle" :style="cssVars">
<svg height="12" viewBox="0 0 24 12" width="24"> <svg height="12" viewBox="0 0 24 12" width="24">
<path <path
d="M20 12l-8-8-12 12" d="M20 12l-8-8-12 12"
@ -75,9 +75,10 @@
<script> <script>
import { mixin as clickaway } from 'vue-clickaway'; import { mixin as clickaway } from 'vue-clickaway';
import { mapGetters } from 'vuex'; import { mapGetters } from 'vuex';
import bulkActionsMixin from 'dashboard/mixins/bulkActionsMixin.js';
export default { export default {
mixins: [clickaway], mixins: [clickaway, bulkActionsMixin],
data() { data() {
return { return {
query: '', query: '',
@ -160,7 +161,7 @@ export default {
max-width: var(--space-giga); max-width: var(--space-giga);
min-width: var(--space-giga); min-width: var(--space-giga);
position: absolute; position: absolute;
right: 4.5rem; right: var(--space-small);
top: var(--space-larger); top: var(--space-larger);
transform-origin: top right; transform-origin: top right;
width: auto; width: auto;
@ -204,7 +205,7 @@ export default {
.triangle { .triangle {
display: block; display: block;
position: absolute; position: absolute;
right: var(--space-two); right: var(--triangle-position);
text-align: left; text-align: left;
top: calc(var(--space-slab) * -1); top: calc(var(--space-slab) * -1);
z-index: var(--z-index-one); z-index: var(--z-index-one);

View file

@ -0,0 +1,174 @@
<template>
<div v-on-clickaway="onClose" class="bulk-action__teams">
<div class="triangle" :style="cssVars">
<svg height="12" viewBox="0 0 24 12" width="24">
<path
d="M20 12l-8-8-12 12"
fill="var(--white)"
fill-rule="evenodd"
stroke="var(--s-50)"
stroke-width="1px"
/>
</svg>
</div>
<div class="header flex-between">
<span>{{ $t('BULK_ACTION.TEAMS.TEAM_SELECT_LABEL') }}</span>
<woot-button
size="tiny"
variant="clear"
color-scheme="secondary"
icon="dismiss"
@click="onClose"
/>
</div>
<div class="container">
<div class="team__list-container">
<ul>
<li class="search-container">
<div class="agent-list-search flex-between">
<fluent-icon icon="search" class="search-icon" size="16" />
<input
ref="search"
v-model="query"
type="search"
placeholder="Search"
class="agent--search_input"
/>
</div>
</li>
<template v-if="filteredTeams.length">
<li v-for="team in filteredTeams" :key="team.id">
<div class="team__list-item" @click="assignTeam(team)">
<span class="reports-option__title">{{ team.name }}</span>
</div>
</li>
</template>
<li v-else>
<div class="team__list-item">
<span class="reports-option__title">{{
$t('BULK_ACTION.TEAMS.NO_TEAMS_AVAILABLE')
}}</span>
</div>
</li>
</ul>
</div>
</div>
</div>
</template>
<script>
import { mixin as clickaway } from 'vue-clickaway';
import { mapGetters } from 'vuex';
import bulkActionsMixin from 'dashboard/mixins/bulkActionsMixin.js';
export default {
mixins: [clickaway, bulkActionsMixin],
data() {
return {
query: '',
selectedteams: [],
};
},
computed: {
...mapGetters({ teams: 'teams/getTeams' }),
filteredTeams() {
return [
{ name: 'None', id: 0 },
...this.teams.filter(team =>
team.name.toLowerCase().includes(this.query.toLowerCase())
),
];
},
},
methods: {
assignTeam(key) {
this.$emit('assign-team', key);
},
onClose() {
this.$emit('close');
},
},
};
</script>
<style scoped lang="scss">
.bulk-action__teams {
background-color: var(--white);
border-radius: var(--border-radius-large);
border: 1px solid var(--s-50);
box-shadow: var(--shadow-dropdown-pane);
max-width: 75%;
position: absolute;
right: var(--space-small);
top: var(--space-larger);
transform-origin: top right;
width: auto;
z-index: var(--z-index-twenty);
min-width: var(--space-giga);
.header {
padding: var(--space-one);
span {
font-size: var(--font-size-small);
font-weight: var(--font-weight-medium);
}
}
.container {
max-height: var(--space-giga);
overflow-y: auto;
.team__list-container {
height: 100%;
}
.agent-list-search {
padding: 0 var(--space-one);
border: 1px solid var(--s-100);
border-radius: var(--border-radius-medium);
background-color: var(--s-50);
.search-icon {
color: var(--s-400);
}
.agent--search_input {
border: 0;
font-size: var(--font-size-mini);
margin: 0;
background-color: transparent;
height: unset;
}
}
}
.triangle {
display: block;
z-index: var(--z-index-one);
position: absolute;
top: calc(var(--space-slab) * -1);
right: var(--triangle-position);
text-align: left;
}
}
ul {
margin: 0;
list-style: none;
}
.team__list-item {
display: flex;
align-items: center;
padding: var(--space-one);
cursor: pointer;
&:hover {
background-color: var(--s-50);
}
span {
font-size: var(--font-size-small);
}
}
.search-container {
padding: 0 var(--space-one);
position: sticky;
top: 0;
z-index: var(--z-index-twenty);
background-color: var(--white);
}
</style>

View file

@ -1,6 +1,6 @@
<template> <template>
<div v-on-clickaway="onClose" class="actions-container"> <div v-on-clickaway="onClose" class="actions-container">
<div class="triangle"> <div class="triangle" :style="cssVars">
<svg height="12" viewBox="0 0 24 12" width="24"> <svg height="12" viewBox="0 0 24 12" width="24">
<path <path
d="M20 12l-8-8-12 12" d="M20 12l-8-8-12 12"
@ -45,12 +45,14 @@
import { mixin as clickaway } from 'vue-clickaway'; import { mixin as clickaway } from 'vue-clickaway';
import WootDropdownItem from 'shared/components/ui/dropdown/DropdownItem.vue'; import WootDropdownItem from 'shared/components/ui/dropdown/DropdownItem.vue';
import WootDropdownMenu from 'shared/components/ui/dropdown/DropdownMenu.vue'; import WootDropdownMenu from 'shared/components/ui/dropdown/DropdownMenu.vue';
import bulkActionsMixin from 'dashboard/mixins/bulkActionsMixin.js';
export default { export default {
components: { components: {
WootDropdownItem, WootDropdownItem,
WootDropdownMenu, WootDropdownMenu,
}, },
mixins: [clickaway], mixins: [clickaway, bulkActionsMixin],
props: { props: {
selectedInboxes: { selectedInboxes: {
type: Array, type: Array,
@ -131,7 +133,7 @@ export default {
box-shadow: var(--shadow-dropdown-pane); box-shadow: var(--shadow-dropdown-pane);
position: absolute; position: absolute;
right: var(--space-small); right: var(--space-small);
top: 48px; top: var(--space-larger);
transform-origin: top right; transform-origin: top right;
width: auto; width: auto;
z-index: var(--z-index-twenty); z-index: var(--z-index-twenty);
@ -152,7 +154,7 @@ export default {
.triangle { .triangle {
display: block; display: block;
position: absolute; position: absolute;
right: 2.8rem; right: var(--triangle-position);
text-align: left; text-align: left;
top: calc(var(--space-slab) * -1); top: calc(var(--space-slab) * -1);
z-index: var(--z-index-one); z-index: var(--z-index-one);

View file

@ -68,6 +68,7 @@ export const conversationListPageURL = ({
inboxId, inboxId,
label, label,
teamId, teamId,
customViewId,
}) => { }) => {
let url = `accounts/${accountId}/dashboard`; let url = `accounts/${accountId}/dashboard`;
if (label) { if (label) {
@ -78,6 +79,8 @@ export const conversationListPageURL = ({
url = `accounts/${accountId}/mentions/conversations`; url = `accounts/${accountId}/mentions/conversations`;
} else if (inboxId) { } else if (inboxId) {
url = `accounts/${accountId}/inbox/${inboxId}`; url = `accounts/${accountId}/inbox/${inboxId}`;
} else if (customViewId) {
url = `accounts/${accountId}/custom_view/${customViewId}`;
} }
return frontendURL(url); return frontendURL(url);
}; };

View file

@ -29,6 +29,12 @@ describe('#URL Helpers', () => {
'/app/accounts/1/team/1' '/app/accounts/1/team/1'
); );
}); });
it('should return url to custom view', () => {
expect(conversationListPageURL({ accountId: 1, customViewId: 1 })).toBe(
'/app/accounts/1/custom_view/1'
);
});
}); });
describe('conversationUrl', () => { describe('conversationUrl', () => {
it('should return direct conversation URL if activeInbox is nil', () => { it('should return direct conversation URL if activeInbox is nil', () => {

View file

@ -15,6 +15,7 @@ import id from './locale/id';
import it from './locale/it'; import it from './locale/it';
import ja from './locale/ja'; import ja from './locale/ja';
import ko from './locale/ko'; import ko from './locale/ko';
import lv from './locale/lv';
import ml from './locale/ml'; import ml from './locale/ml';
import nl from './locale/nl'; import nl from './locale/nl';
import no from './locale/no'; import no from './locale/no';
@ -52,6 +53,7 @@ export default {
ja, ja,
ko, ko,
ml, ml,
lv,
nl, nl,
no, no,
pl, pl,

View file

@ -1,5 +1,70 @@
{ {
"AGENT_BOTS": { "AGENT_BOTS": {
"HEADER": "Bots" "HEADER": "Bots",
"LOADING_EDITOR": "Loading Editor...",
"HEADER_BTN_TXT": "Add Bot Configuration",
"SIDEBAR_TXT": "<p><b>Agent Bots</b> <p>Agent bots allows you to automate the conversations</p>",
"CSML_BOT_EDITOR": {
"NAME": {
"LABEL": "Bot Name",
"PLACEHOLDER": "Give your bot a name",
"ERROR": "Bot name is required"
},
"DESCRIPTION": {
"LABEL": "Bot Description",
"PLACEHOLDER": "What does this bot do?"
},
"BOT_CONFIG": {
"ERROR": "Please enter your CSML bot configuration above",
"API_ERROR": "Your CSML configuration is invalid, please fix it and try again."
},
"SUBMIT": "Validate and save"
},
"BOT_CONFIGURATION": {
"TITLE": "Select an agent bot",
"DESC": "You can set an agent bot from the list to this inbox. The bot can initially handle the conversation and transfer it to an agent when needed.",
"SUBMIT": "تحديث",
"SUCCESS_MESSAGE": "Successfully updated the agent bot",
"ERROR_MESSAGE": "Could not update the agent bot, please try again later",
"SELECT_PLACEHOLDER": "Select Bot"
},
"ADD": {
"TITLE": "Configure new bot",
"CANCEL_BUTTON_TEXT": "إلغاء",
"API": {
"SUCCESS_MESSAGE": "Bot added successfully",
"ERROR_MESSAGE": "Could not add bot, Please try again later"
}
},
"LIST": {
"404": "No Bots found, you can create a bot by clicking the 'Configure new bot' Button ↗",
"LOADING": "Fetching Bots...",
"TYPE": "Bot Type"
},
"DELETE": {
"BUTTON_TEXT": "حذف",
"TITLE": "Delete Bot",
"SUBMIT": "حذف",
"CANCEL_BUTTON_TEXT": "إلغاء",
"DESCRIPTION": "Are you sure you want to delete this bot? This action is irreversible",
"API": {
"SUCCESS_MESSAGE": "Bot deleted successfully",
"ERROR_MESSAGE": "Could not able to delete bot, Please try again later"
}
},
"EDIT": {
"BUTTON_TEXT": "تعديل",
"LOADING": "Fetching Bots...",
"TITLE": "Edit Bot",
"CANCEL_BUTTON_TEXT": "إلغاء",
"API": {
"SUCCESS_MESSAGE": "Bot updated successfully",
"ERROR_MESSAGE": "Could not update bot, Please try again later"
}
},
"TYPES": {
"WEBHOOK": "Webhook Bot",
"CSML": "CSML Bot"
}
} }
} }

View file

@ -86,7 +86,9 @@
"RESET_MESSAGE": "تغيير نوع الحدث سوف يعيد تعيين الشروط والأحداث التي أضفتها أدناه" "RESET_MESSAGE": "تغيير نوع الحدث سوف يعيد تعيين الشروط والأحداث التي أضفتها أدناه"
}, },
"CONDITION": { "CONDITION": {
"DELETE_MESSAGE": "يجب أن يكون لديك على الأقل شرط واحد للحفظ" "DELETE_MESSAGE": "يجب أن يكون لديك على الأقل شرط واحد للحفظ",
"CONTACT_CUSTOM_ATTR_LABEL": "Contact Custom Attributes",
"CONVERSATION_CUSTOM_ATTR_LABEL": "Conversation Custom Attributes"
}, },
"ACTION": { "ACTION": {
"DELETE_MESSAGE": "يجب أن يكون لديك على الأقل شرط واحد للحفظ", "DELETE_MESSAGE": "يجب أن يكون لديك على الأقل شرط واحد للحفظ",

View file

@ -8,6 +8,7 @@
"ASSIGN_LABEL": "تكليف", "ASSIGN_LABEL": "تكليف",
"YES": "نعم", "YES": "نعم",
"ASSIGN_AGENT_TOOLTIP": "إسناد وكيل", "ASSIGN_AGENT_TOOLTIP": "إسناد وكيل",
"ASSIGN_TEAM_TOOLTIP": "تعيين فريق",
"ASSIGN_SUCCESFUL": "تم تعيين المحادثات بنجاح", "ASSIGN_SUCCESFUL": "تم تعيين المحادثات بنجاح",
"ASSIGN_FAILED": "فشل في تعيين المحادثات، الرجاء المحاولة مرة أخرى", "ASSIGN_FAILED": "فشل في تعيين المحادثات، الرجاء المحاولة مرة أخرى",
"RESOLVE_SUCCESFUL": "تم تسوية المحادثات بنجاح", "RESOLVE_SUCCESFUL": "تم تسوية المحادثات بنجاح",
@ -26,6 +27,14 @@
"ASSIGN_SELECTED_LABELS": "تعيين التسميات المحددة", "ASSIGN_SELECTED_LABELS": "تعيين التسميات المحددة",
"ASSIGN_SUCCESFUL": "تم تعيين التسميات بنجاح", "ASSIGN_SUCCESFUL": "تم تعيين التسميات بنجاح",
"ASSIGN_FAILED": "فشل في تعيين التسميات ، الرجاء المحاولة مرة أخرى" "ASSIGN_FAILED": "فشل في تعيين التسميات ، الرجاء المحاولة مرة أخرى"
},
"TEAMS": {
"TEAM_SELECT_LABEL": "اختيار فريق",
"NONE": "لا شيء",
"NO_TEAMS_AVAILABLE": "There are no teams added to this account yet.",
"ASSIGN_SELECTED_TEAMS": "Assign selected team",
"ASSIGN_SUCCESFUL": "Teams assiged successfully",
"ASSIGN_FAILED": "Failed to assign team, please try again"
} }
} }
} }

View file

@ -54,7 +54,8 @@
"MULTISELECT": { "MULTISELECT": {
"ENTER_TO_SELECT": "اضغط على زر الإدخال للاختيار", "ENTER_TO_SELECT": "اضغط على زر الإدخال للاختيار",
"ENTER_TO_REMOVE": "اضغط على زر الإدخال للحذف", "ENTER_TO_REMOVE": "اضغط على زر الإدخال للحذف",
"SELECT_ONE": "اختر واحدا" "SELECT_ONE": "اختر واحدا",
"SELECT": "Select"
} }
}, },
"NOTIFICATIONS_PAGE": { "NOTIFICATIONS_PAGE": {

View file

@ -416,7 +416,8 @@
"CAMPAIGN": "الحملات", "CAMPAIGN": "الحملات",
"PRE_CHAT_FORM": "نموذج ما قبل الدردشة", "PRE_CHAT_FORM": "نموذج ما قبل الدردشة",
"BUSINESS_HOURS": "ساعات العمل", "BUSINESS_HOURS": "ساعات العمل",
"WIDGET_BUILDER": "منشئ اللايف شات" "WIDGET_BUILDER": "منشئ اللايف شات",
"BOT_CONFIGURATION": "Bot Configuration"
}, },
"SETTINGS": "الإعدادات", "SETTINGS": "الإعدادات",
"FEATURES": { "FEATURES": {

View file

@ -1,5 +1,70 @@
{ {
"AGENT_BOTS": { "AGENT_BOTS": {
"HEADER": "Bots" "HEADER": "Bots",
"LOADING_EDITOR": "Loading Editor...",
"HEADER_BTN_TXT": "Add Bot Configuration",
"SIDEBAR_TXT": "<p><b>Agent Bots</b> <p>Agent bots allows you to automate the conversations</p>",
"CSML_BOT_EDITOR": {
"NAME": {
"LABEL": "Bot Name",
"PLACEHOLDER": "Give your bot a name",
"ERROR": "Bot name is required"
},
"DESCRIPTION": {
"LABEL": "Bot Description",
"PLACEHOLDER": "What does this bot do?"
},
"BOT_CONFIG": {
"ERROR": "Please enter your CSML bot configuration above",
"API_ERROR": "Your CSML configuration is invalid, please fix it and try again."
},
"SUBMIT": "Validate and save"
},
"BOT_CONFIGURATION": {
"TITLE": "Select an agent bot",
"DESC": "You can set an agent bot from the list to this inbox. The bot can initially handle the conversation and transfer it to an agent when needed.",
"SUBMIT": "Обновяване",
"SUCCESS_MESSAGE": "Successfully updated the agent bot",
"ERROR_MESSAGE": "Could not update the agent bot, please try again later",
"SELECT_PLACEHOLDER": "Select Bot"
},
"ADD": {
"TITLE": "Configure new bot",
"CANCEL_BUTTON_TEXT": "Отмени",
"API": {
"SUCCESS_MESSAGE": "Bot added successfully",
"ERROR_MESSAGE": "Could not add bot, Please try again later"
}
},
"LIST": {
"404": "No Bots found, you can create a bot by clicking the 'Configure new bot' Button ↗",
"LOADING": "Fetching Bots...",
"TYPE": "Bot Type"
},
"DELETE": {
"BUTTON_TEXT": "Изтрий",
"TITLE": "Delete Bot",
"SUBMIT": "Изтрий",
"CANCEL_BUTTON_TEXT": "Отмени",
"DESCRIPTION": "Are you sure you want to delete this bot? This action is irreversible",
"API": {
"SUCCESS_MESSAGE": "Bot deleted successfully",
"ERROR_MESSAGE": "Could not able to delete bot, Please try again later"
}
},
"EDIT": {
"BUTTON_TEXT": "Редактирай",
"LOADING": "Fetching Bots...",
"TITLE": "Edit Bot",
"CANCEL_BUTTON_TEXT": "Отмени",
"API": {
"SUCCESS_MESSAGE": "Bot updated successfully",
"ERROR_MESSAGE": "Could not update bot, Please try again later"
}
},
"TYPES": {
"WEBHOOK": "Webhook Bot",
"CSML": "CSML Bot"
}
} }
} }

View file

@ -86,7 +86,9 @@
"RESET_MESSAGE": "Changing event type will reset the conditions and events you have added below" "RESET_MESSAGE": "Changing event type will reset the conditions and events you have added below"
}, },
"CONDITION": { "CONDITION": {
"DELETE_MESSAGE": "You need to have atleast one condition to save" "DELETE_MESSAGE": "You need to have atleast one condition to save",
"CONTACT_CUSTOM_ATTR_LABEL": "Contact Custom Attributes",
"CONVERSATION_CUSTOM_ATTR_LABEL": "Conversation Custom Attributes"
}, },
"ACTION": { "ACTION": {
"DELETE_MESSAGE": "You need to have atleast one action to save", "DELETE_MESSAGE": "You need to have atleast one action to save",

View file

@ -8,6 +8,7 @@
"ASSIGN_LABEL": "Assign", "ASSIGN_LABEL": "Assign",
"YES": "Yes", "YES": "Yes",
"ASSIGN_AGENT_TOOLTIP": "Assign Agent", "ASSIGN_AGENT_TOOLTIP": "Assign Agent",
"ASSIGN_TEAM_TOOLTIP": "Assign team",
"ASSIGN_SUCCESFUL": "Conversations assigned successfully", "ASSIGN_SUCCESFUL": "Conversations assigned successfully",
"ASSIGN_FAILED": "Failed to assign conversations, please try again", "ASSIGN_FAILED": "Failed to assign conversations, please try again",
"RESOLVE_SUCCESFUL": "Conversations resolved successfully", "RESOLVE_SUCCESFUL": "Conversations resolved successfully",
@ -26,6 +27,14 @@
"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"
},
"TEAMS": {
"TEAM_SELECT_LABEL": "Select Team",
"NONE": "Нито един",
"NO_TEAMS_AVAILABLE": "There are no teams added to this account yet.",
"ASSIGN_SELECTED_TEAMS": "Assign selected team",
"ASSIGN_SUCCESFUL": "Teams assiged successfully",
"ASSIGN_FAILED": "Failed to assign team, please try again"
} }
} }
} }

View file

@ -54,7 +54,8 @@
"MULTISELECT": { "MULTISELECT": {
"ENTER_TO_SELECT": "Press enter to select", "ENTER_TO_SELECT": "Press enter to select",
"ENTER_TO_REMOVE": "Press enter to remove", "ENTER_TO_REMOVE": "Press enter to remove",
"SELECT_ONE": "Select one" "SELECT_ONE": "Select one",
"SELECT": "Select"
} }
}, },
"NOTIFICATIONS_PAGE": { "NOTIFICATIONS_PAGE": {

View file

@ -416,7 +416,8 @@
"CAMPAIGN": "Campaigns", "CAMPAIGN": "Campaigns",
"PRE_CHAT_FORM": "Pre Chat Form", "PRE_CHAT_FORM": "Pre Chat Form",
"BUSINESS_HOURS": "Business Hours", "BUSINESS_HOURS": "Business Hours",
"WIDGET_BUILDER": "Widget Builder" "WIDGET_BUILDER": "Widget Builder",
"BOT_CONFIGURATION": "Bot Configuration"
}, },
"SETTINGS": "Settings", "SETTINGS": "Settings",
"FEATURES": { "FEATURES": {

View file

@ -1,5 +1,70 @@
{ {
"AGENT_BOTS": { "AGENT_BOTS": {
"HEADER": "Bots" "HEADER": "Bots",
"LOADING_EDITOR": "Loading Editor...",
"HEADER_BTN_TXT": "Add Bot Configuration",
"SIDEBAR_TXT": "<p><b>Agent Bots</b> <p>Agent bots allows you to automate the conversations</p>",
"CSML_BOT_EDITOR": {
"NAME": {
"LABEL": "Bot Name",
"PLACEHOLDER": "Give your bot a name",
"ERROR": "Bot name is required"
},
"DESCRIPTION": {
"LABEL": "Bot Description",
"PLACEHOLDER": "What does this bot do?"
},
"BOT_CONFIG": {
"ERROR": "Please enter your CSML bot configuration above",
"API_ERROR": "Your CSML configuration is invalid, please fix it and try again."
},
"SUBMIT": "Validate and save"
},
"BOT_CONFIGURATION": {
"TITLE": "Select an agent bot",
"DESC": "You can set an agent bot from the list to this inbox. The bot can initially handle the conversation and transfer it to an agent when needed.",
"SUBMIT": "Actualitza",
"SUCCESS_MESSAGE": "Successfully updated the agent bot",
"ERROR_MESSAGE": "Could not update the agent bot, please try again later",
"SELECT_PLACEHOLDER": "Select Bot"
},
"ADD": {
"TITLE": "Configure new bot",
"CANCEL_BUTTON_TEXT": "Cancel·la",
"API": {
"SUCCESS_MESSAGE": "Bot added successfully",
"ERROR_MESSAGE": "Could not add bot, Please try again later"
}
},
"LIST": {
"404": "No Bots found, you can create a bot by clicking the 'Configure new bot' Button ↗",
"LOADING": "Fetching Bots...",
"TYPE": "Bot Type"
},
"DELETE": {
"BUTTON_TEXT": "Esborrar",
"TITLE": "Delete Bot",
"SUBMIT": "Esborrar",
"CANCEL_BUTTON_TEXT": "Cancel·la",
"DESCRIPTION": "Are you sure you want to delete this bot? This action is irreversible",
"API": {
"SUCCESS_MESSAGE": "Bot deleted successfully",
"ERROR_MESSAGE": "Could not able to delete bot, Please try again later"
}
},
"EDIT": {
"BUTTON_TEXT": "Edita",
"LOADING": "Fetching Bots...",
"TITLE": "Edit Bot",
"CANCEL_BUTTON_TEXT": "Cancel·la",
"API": {
"SUCCESS_MESSAGE": "Bot updated successfully",
"ERROR_MESSAGE": "Could not update bot, Please try again later"
}
},
"TYPES": {
"WEBHOOK": "Webhook Bot",
"CSML": "CSML Bot"
}
} }
} }

View file

@ -86,7 +86,9 @@
"RESET_MESSAGE": "Changing event type will reset the conditions and events you have added below" "RESET_MESSAGE": "Changing event type will reset the conditions and events you have added below"
}, },
"CONDITION": { "CONDITION": {
"DELETE_MESSAGE": "You need to have atleast one condition to save" "DELETE_MESSAGE": "You need to have atleast one condition to save",
"CONTACT_CUSTOM_ATTR_LABEL": "Contact Custom Attributes",
"CONVERSATION_CUSTOM_ATTR_LABEL": "Conversation Custom Attributes"
}, },
"ACTION": { "ACTION": {
"DELETE_MESSAGE": "You need to have atleast one action to save", "DELETE_MESSAGE": "You need to have atleast one action to save",

View file

@ -8,6 +8,7 @@
"ASSIGN_LABEL": "Assignar", "ASSIGN_LABEL": "Assignar",
"YES": "Si", "YES": "Si",
"ASSIGN_AGENT_TOOLTIP": "Assign Agent", "ASSIGN_AGENT_TOOLTIP": "Assign Agent",
"ASSIGN_TEAM_TOOLTIP": "Assign team",
"ASSIGN_SUCCESFUL": "Conversations assigned successfully", "ASSIGN_SUCCESFUL": "Conversations assigned successfully",
"ASSIGN_FAILED": "Failed to assign conversations, please try again", "ASSIGN_FAILED": "Failed to assign conversations, please try again",
"RESOLVE_SUCCESFUL": "Conversations resolved successfully", "RESOLVE_SUCCESFUL": "Conversations resolved successfully",
@ -26,6 +27,14 @@
"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"
},
"TEAMS": {
"TEAM_SELECT_LABEL": "Select Team",
"NONE": "Ningú",
"NO_TEAMS_AVAILABLE": "There are no teams added to this account yet.",
"ASSIGN_SELECTED_TEAMS": "Assign selected team",
"ASSIGN_SUCCESFUL": "Teams assiged successfully",
"ASSIGN_FAILED": "Failed to assign team, please try again"
} }
} }
} }

View file

@ -54,7 +54,8 @@
"MULTISELECT": { "MULTISELECT": {
"ENTER_TO_SELECT": "Presiona retorn (tecla enter) per seleccionar", "ENTER_TO_SELECT": "Presiona retorn (tecla enter) per seleccionar",
"ENTER_TO_REMOVE": "Presiona retorn (tecla enter) per eliminar", "ENTER_TO_REMOVE": "Presiona retorn (tecla enter) per eliminar",
"SELECT_ONE": "Selecciona un" "SELECT_ONE": "Selecciona un",
"SELECT": "Select"
} }
}, },
"NOTIFICATIONS_PAGE": { "NOTIFICATIONS_PAGE": {

View file

@ -416,7 +416,8 @@
"CAMPAIGN": "Campaigns", "CAMPAIGN": "Campaigns",
"PRE_CHAT_FORM": "Pre Chat Form", "PRE_CHAT_FORM": "Pre Chat Form",
"BUSINESS_HOURS": "Business Hours", "BUSINESS_HOURS": "Business Hours",
"WIDGET_BUILDER": "Widget Builder" "WIDGET_BUILDER": "Widget Builder",
"BOT_CONFIGURATION": "Bot Configuration"
}, },
"SETTINGS": "Configuracions", "SETTINGS": "Configuracions",
"FEATURES": { "FEATURES": {

View file

@ -1,5 +1,70 @@
{ {
"AGENT_BOTS": { "AGENT_BOTS": {
"HEADER": "Bots" "HEADER": "Bots",
"LOADING_EDITOR": "Loading Editor...",
"HEADER_BTN_TXT": "Add Bot Configuration",
"SIDEBAR_TXT": "<p><b>Agent Bots</b> <p>Agent bots allows you to automate the conversations</p>",
"CSML_BOT_EDITOR": {
"NAME": {
"LABEL": "Bot Name",
"PLACEHOLDER": "Give your bot a name",
"ERROR": "Bot name is required"
},
"DESCRIPTION": {
"LABEL": "Bot Description",
"PLACEHOLDER": "What does this bot do?"
},
"BOT_CONFIG": {
"ERROR": "Please enter your CSML bot configuration above",
"API_ERROR": "Your CSML configuration is invalid, please fix it and try again."
},
"SUBMIT": "Validate and save"
},
"BOT_CONFIGURATION": {
"TITLE": "Select an agent bot",
"DESC": "You can set an agent bot from the list to this inbox. The bot can initially handle the conversation and transfer it to an agent when needed.",
"SUBMIT": "Aktualizovat",
"SUCCESS_MESSAGE": "Successfully updated the agent bot",
"ERROR_MESSAGE": "Could not update the agent bot, please try again later",
"SELECT_PLACEHOLDER": "Select Bot"
},
"ADD": {
"TITLE": "Configure new bot",
"CANCEL_BUTTON_TEXT": "Zrušit",
"API": {
"SUCCESS_MESSAGE": "Bot added successfully",
"ERROR_MESSAGE": "Could not add bot, Please try again later"
}
},
"LIST": {
"404": "No Bots found, you can create a bot by clicking the 'Configure new bot' Button ↗",
"LOADING": "Fetching Bots...",
"TYPE": "Bot Type"
},
"DELETE": {
"BUTTON_TEXT": "Vymazat",
"TITLE": "Delete Bot",
"SUBMIT": "Vymazat",
"CANCEL_BUTTON_TEXT": "Zrušit",
"DESCRIPTION": "Are you sure you want to delete this bot? This action is irreversible",
"API": {
"SUCCESS_MESSAGE": "Bot deleted successfully",
"ERROR_MESSAGE": "Could not able to delete bot, Please try again later"
}
},
"EDIT": {
"BUTTON_TEXT": "Upravit",
"LOADING": "Fetching Bots...",
"TITLE": "Edit Bot",
"CANCEL_BUTTON_TEXT": "Zrušit",
"API": {
"SUCCESS_MESSAGE": "Bot updated successfully",
"ERROR_MESSAGE": "Could not update bot, Please try again later"
}
},
"TYPES": {
"WEBHOOK": "Webhook Bot",
"CSML": "CSML Bot"
}
} }
} }

View file

@ -86,7 +86,9 @@
"RESET_MESSAGE": "Changing event type will reset the conditions and events you have added below" "RESET_MESSAGE": "Changing event type will reset the conditions and events you have added below"
}, },
"CONDITION": { "CONDITION": {
"DELETE_MESSAGE": "You need to have atleast one condition to save" "DELETE_MESSAGE": "You need to have atleast one condition to save",
"CONTACT_CUSTOM_ATTR_LABEL": "Contact Custom Attributes",
"CONVERSATION_CUSTOM_ATTR_LABEL": "Conversation Custom Attributes"
}, },
"ACTION": { "ACTION": {
"DELETE_MESSAGE": "You need to have atleast one action to save", "DELETE_MESSAGE": "You need to have atleast one action to save",

View file

@ -8,6 +8,7 @@
"ASSIGN_LABEL": "Přiřadit", "ASSIGN_LABEL": "Přiřadit",
"YES": "Ano", "YES": "Ano",
"ASSIGN_AGENT_TOOLTIP": "Assign Agent", "ASSIGN_AGENT_TOOLTIP": "Assign Agent",
"ASSIGN_TEAM_TOOLTIP": "Přiřadit tým",
"ASSIGN_SUCCESFUL": "Conversations assigned successfully", "ASSIGN_SUCCESFUL": "Conversations assigned successfully",
"ASSIGN_FAILED": "Failed to assign conversations, please try again", "ASSIGN_FAILED": "Failed to assign conversations, please try again",
"RESOLVE_SUCCESFUL": "Conversations resolved successfully", "RESOLVE_SUCCESFUL": "Conversations resolved successfully",
@ -26,6 +27,14 @@
"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"
},
"TEAMS": {
"TEAM_SELECT_LABEL": "Select Team",
"NONE": "Nic",
"NO_TEAMS_AVAILABLE": "There are no teams added to this account yet.",
"ASSIGN_SELECTED_TEAMS": "Assign selected team",
"ASSIGN_SUCCESFUL": "Teams assiged successfully",
"ASSIGN_FAILED": "Failed to assign team, please try again"
} }
} }
} }

View file

@ -54,7 +54,8 @@
"MULTISELECT": { "MULTISELECT": {
"ENTER_TO_SELECT": "Stiskněte Enter pro vybrání", "ENTER_TO_SELECT": "Stiskněte Enter pro vybrání",
"ENTER_TO_REMOVE": "Stiskněte Enter pro odebrání", "ENTER_TO_REMOVE": "Stiskněte Enter pro odebrání",
"SELECT_ONE": "Vyberte jeden" "SELECT_ONE": "Vyberte jeden",
"SELECT": "Select"
} }
}, },
"NOTIFICATIONS_PAGE": { "NOTIFICATIONS_PAGE": {

View file

@ -416,7 +416,8 @@
"CAMPAIGN": "Kampaně", "CAMPAIGN": "Kampaně",
"PRE_CHAT_FORM": "Formulář před chatem", "PRE_CHAT_FORM": "Formulář před chatem",
"BUSINESS_HOURS": "Pracovní doba", "BUSINESS_HOURS": "Pracovní doba",
"WIDGET_BUILDER": "Widget Builder" "WIDGET_BUILDER": "Widget Builder",
"BOT_CONFIGURATION": "Bot Configuration"
}, },
"SETTINGS": "Nastavení", "SETTINGS": "Nastavení",
"FEATURES": { "FEATURES": {

View file

@ -1,5 +1,70 @@
{ {
"AGENT_BOTS": { "AGENT_BOTS": {
"HEADER": "Bots" "HEADER": "Bots",
"LOADING_EDITOR": "Loading Editor...",
"HEADER_BTN_TXT": "Add Bot Configuration",
"SIDEBAR_TXT": "<p><b>Agent Bots</b> <p>Agent bots allows you to automate the conversations</p>",
"CSML_BOT_EDITOR": {
"NAME": {
"LABEL": "Bot Name",
"PLACEHOLDER": "Give your bot a name",
"ERROR": "Bot name is required"
},
"DESCRIPTION": {
"LABEL": "Bot Description",
"PLACEHOLDER": "What does this bot do?"
},
"BOT_CONFIG": {
"ERROR": "Please enter your CSML bot configuration above",
"API_ERROR": "Your CSML configuration is invalid, please fix it and try again."
},
"SUBMIT": "Validate and save"
},
"BOT_CONFIGURATION": {
"TITLE": "Select an agent bot",
"DESC": "You can set an agent bot from the list to this inbox. The bot can initially handle the conversation and transfer it to an agent when needed.",
"SUBMIT": "Opdater",
"SUCCESS_MESSAGE": "Successfully updated the agent bot",
"ERROR_MESSAGE": "Could not update the agent bot, please try again later",
"SELECT_PLACEHOLDER": "Select Bot"
},
"ADD": {
"TITLE": "Configure new bot",
"CANCEL_BUTTON_TEXT": "Annuller",
"API": {
"SUCCESS_MESSAGE": "Bot added successfully",
"ERROR_MESSAGE": "Could not add bot, Please try again later"
}
},
"LIST": {
"404": "No Bots found, you can create a bot by clicking the 'Configure new bot' Button ↗",
"LOADING": "Fetching Bots...",
"TYPE": "Bot Type"
},
"DELETE": {
"BUTTON_TEXT": "Slet",
"TITLE": "Delete Bot",
"SUBMIT": "Slet",
"CANCEL_BUTTON_TEXT": "Annuller",
"DESCRIPTION": "Are you sure you want to delete this bot? This action is irreversible",
"API": {
"SUCCESS_MESSAGE": "Bot deleted successfully",
"ERROR_MESSAGE": "Could not able to delete bot, Please try again later"
}
},
"EDIT": {
"BUTTON_TEXT": "Rediger",
"LOADING": "Fetching Bots...",
"TITLE": "Edit Bot",
"CANCEL_BUTTON_TEXT": "Annuller",
"API": {
"SUCCESS_MESSAGE": "Bot updated successfully",
"ERROR_MESSAGE": "Could not update bot, Please try again later"
}
},
"TYPES": {
"WEBHOOK": "Webhook Bot",
"CSML": "CSML Bot"
}
} }
} }

View file

@ -86,7 +86,9 @@
"RESET_MESSAGE": "Ændring af begivenhedstype vil nulstille de betingelser og begivenheder, du har tilføjet nedenfor" "RESET_MESSAGE": "Ændring af begivenhedstype vil nulstille de betingelser og begivenheder, du har tilføjet nedenfor"
}, },
"CONDITION": { "CONDITION": {
"DELETE_MESSAGE": "Du skal have mindst én betingelse for at gemme" "DELETE_MESSAGE": "Du skal have mindst én betingelse for at gemme",
"CONTACT_CUSTOM_ATTR_LABEL": "Contact Custom Attributes",
"CONVERSATION_CUSTOM_ATTR_LABEL": "Conversation Custom Attributes"
}, },
"ACTION": { "ACTION": {
"DELETE_MESSAGE": "Du skal have mindst én handling for at gemme", "DELETE_MESSAGE": "Du skal have mindst én handling for at gemme",

View file

@ -8,6 +8,7 @@
"ASSIGN_LABEL": "Tildel", "ASSIGN_LABEL": "Tildel",
"YES": "Ja", "YES": "Ja",
"ASSIGN_AGENT_TOOLTIP": "Tildel Agent", "ASSIGN_AGENT_TOOLTIP": "Tildel Agent",
"ASSIGN_TEAM_TOOLTIP": "Tildel team",
"ASSIGN_SUCCESFUL": "Samtaler tildelt", "ASSIGN_SUCCESFUL": "Samtaler tildelt",
"ASSIGN_FAILED": "Mislykkedes at tildele samtaler, prøv igen", "ASSIGN_FAILED": "Mislykkedes at tildele samtaler, prøv igen",
"RESOLVE_SUCCESFUL": "Samtaler løst med succes", "RESOLVE_SUCCESFUL": "Samtaler løst med succes",
@ -26,6 +27,14 @@
"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": "Kunne ikke tildele etiketter. Prøv igen" "ASSIGN_FAILED": "Kunne ikke tildele etiketter. Prøv igen"
},
"TEAMS": {
"TEAM_SELECT_LABEL": "Vælg Team",
"NONE": "Ingen",
"NO_TEAMS_AVAILABLE": "There are no teams added to this account yet.",
"ASSIGN_SELECTED_TEAMS": "Assign selected team",
"ASSIGN_SUCCESFUL": "Teams assiged successfully",
"ASSIGN_FAILED": "Failed to assign team, please try again"
} }
} }
} }

View file

@ -54,7 +54,8 @@
"MULTISELECT": { "MULTISELECT": {
"ENTER_TO_SELECT": "Tryk enter for at vælge", "ENTER_TO_SELECT": "Tryk enter for at vælge",
"ENTER_TO_REMOVE": "Tryk enter for at fjerne", "ENTER_TO_REMOVE": "Tryk enter for at fjerne",
"SELECT_ONE": "Vælg en" "SELECT_ONE": "Vælg en",
"SELECT": "Select"
} }
}, },
"NOTIFICATIONS_PAGE": { "NOTIFICATIONS_PAGE": {

View file

@ -416,7 +416,8 @@
"CAMPAIGN": "Kampagner", "CAMPAIGN": "Kampagner",
"PRE_CHAT_FORM": "Pre Chat Form", "PRE_CHAT_FORM": "Pre Chat Form",
"BUSINESS_HOURS": "Forretningstider", "BUSINESS_HOURS": "Forretningstider",
"WIDGET_BUILDER": "Widget Builder" "WIDGET_BUILDER": "Widget Builder",
"BOT_CONFIGURATION": "Bot Configuration"
}, },
"SETTINGS": "Indstillinger", "SETTINGS": "Indstillinger",
"FEATURES": { "FEATURES": {

View file

@ -1,5 +1,70 @@
{ {
"AGENT_BOTS": { "AGENT_BOTS": {
"HEADER": "Bots" "HEADER": "Bots",
"LOADING_EDITOR": "Loading Editor...",
"HEADER_BTN_TXT": "Add Bot Configuration",
"SIDEBAR_TXT": "<p><b>Agent Bots</b> <p>Agent bots allows you to automate the conversations</p>",
"CSML_BOT_EDITOR": {
"NAME": {
"LABEL": "Bot Name",
"PLACEHOLDER": "Give your bot a name",
"ERROR": "Bot name is required"
},
"DESCRIPTION": {
"LABEL": "Bot Description",
"PLACEHOLDER": "What does this bot do?"
},
"BOT_CONFIG": {
"ERROR": "Please enter your CSML bot configuration above",
"API_ERROR": "Your CSML configuration is invalid, please fix it and try again."
},
"SUBMIT": "Validate and save"
},
"BOT_CONFIGURATION": {
"TITLE": "Select an agent bot",
"DESC": "You can set an agent bot from the list to this inbox. The bot can initially handle the conversation and transfer it to an agent when needed.",
"SUBMIT": "Aktualisieren",
"SUCCESS_MESSAGE": "Successfully updated the agent bot",
"ERROR_MESSAGE": "Could not update the agent bot, please try again later",
"SELECT_PLACEHOLDER": "Select Bot"
},
"ADD": {
"TITLE": "Configure new bot",
"CANCEL_BUTTON_TEXT": "Stornieren",
"API": {
"SUCCESS_MESSAGE": "Bot added successfully",
"ERROR_MESSAGE": "Could not add bot, Please try again later"
}
},
"LIST": {
"404": "No Bots found, you can create a bot by clicking the 'Configure new bot' Button ↗",
"LOADING": "Fetching Bots...",
"TYPE": "Bot Type"
},
"DELETE": {
"BUTTON_TEXT": "Löschen",
"TITLE": "Delete Bot",
"SUBMIT": "Löschen",
"CANCEL_BUTTON_TEXT": "Stornieren",
"DESCRIPTION": "Are you sure you want to delete this bot? This action is irreversible",
"API": {
"SUCCESS_MESSAGE": "Bot deleted successfully",
"ERROR_MESSAGE": "Could not able to delete bot, Please try again later"
}
},
"EDIT": {
"BUTTON_TEXT": "Bearbeiten",
"LOADING": "Fetching Bots...",
"TITLE": "Edit Bot",
"CANCEL_BUTTON_TEXT": "Stornieren",
"API": {
"SUCCESS_MESSAGE": "Bot updated successfully",
"ERROR_MESSAGE": "Could not update bot, Please try again later"
}
},
"TYPES": {
"WEBHOOK": "Webhook Bot",
"CSML": "CSML Bot"
}
} }
} }

View file

@ -86,7 +86,9 @@
"RESET_MESSAGE": "Durch das Ändern des Ereignistyps werden die unten hinzugefügten Bedingungen und Ereignisse zurückgesetzt" "RESET_MESSAGE": "Durch das Ändern des Ereignistyps werden die unten hinzugefügten Bedingungen und Ereignisse zurückgesetzt"
}, },
"CONDITION": { "CONDITION": {
"DELETE_MESSAGE": "Du musst mindestens eine Bedingung zum Speichern haben" "DELETE_MESSAGE": "Du musst mindestens eine Bedingung zum Speichern haben",
"CONTACT_CUSTOM_ATTR_LABEL": "Contact Custom Attributes",
"CONVERSATION_CUSTOM_ATTR_LABEL": "Conversation Custom Attributes"
}, },
"ACTION": { "ACTION": {
"DELETE_MESSAGE": "Zum Speichern ist mindestens eine Aktion erforderlich", "DELETE_MESSAGE": "Zum Speichern ist mindestens eine Aktion erforderlich",

View file

@ -8,6 +8,7 @@
"ASSIGN_LABEL": "Zuordnen", "ASSIGN_LABEL": "Zuordnen",
"YES": "Ja", "YES": "Ja",
"ASSIGN_AGENT_TOOLTIP": "Agent zuweisen", "ASSIGN_AGENT_TOOLTIP": "Agent zuweisen",
"ASSIGN_TEAM_TOOLTIP": "Team zuweisen",
"ASSIGN_SUCCESFUL": "Konversationen erfolgreich zugewiesen", "ASSIGN_SUCCESFUL": "Konversationen erfolgreich zugewiesen",
"ASSIGN_FAILED": "Konversationen konnten nicht zugewiesen werden. Bitte versuchen Sie es erneut", "ASSIGN_FAILED": "Konversationen konnten nicht zugewiesen werden. Bitte versuchen Sie es erneut",
"RESOLVE_SUCCESFUL": "Konversationen erfolgreich gelöst", "RESOLVE_SUCCESFUL": "Konversationen erfolgreich gelöst",
@ -26,6 +27,14 @@
"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": "Label konnten nicht zugewiesen werden. Bitte versuchen Sie es erneut" "ASSIGN_FAILED": "Label konnten nicht zugewiesen werden. Bitte versuchen Sie es erneut"
},
"TEAMS": {
"TEAM_SELECT_LABEL": "Team auswählen",
"NONE": "Keine",
"NO_TEAMS_AVAILABLE": "Es wurden noch keine Teams zu diesem Konto hinzugefügt.",
"ASSIGN_SELECTED_TEAMS": "Ausgewähltes Team zuweisen",
"ASSIGN_SUCCESFUL": "Teams erfolgreich zugewiesen",
"ASSIGN_FAILED": "Team konnte nicht zugewiesen werden. Bitte versuche es erneut"
} }
} }
} }

View file

@ -54,7 +54,8 @@
"MULTISELECT": { "MULTISELECT": {
"ENTER_TO_SELECT": "Drücken Sie zur Auswahl die Eingabetaste", "ENTER_TO_SELECT": "Drücken Sie zur Auswahl die Eingabetaste",
"ENTER_TO_REMOVE": "Drücken Sie zum Entfernen die Eingabetaste", "ENTER_TO_REMOVE": "Drücken Sie zum Entfernen die Eingabetaste",
"SELECT_ONE": "Eines wählen" "SELECT_ONE": "Eines wählen",
"SELECT": "Select"
} }
}, },
"NOTIFICATIONS_PAGE": { "NOTIFICATIONS_PAGE": {

View file

@ -416,7 +416,8 @@
"CAMPAIGN": "Kampagnen", "CAMPAIGN": "Kampagnen",
"PRE_CHAT_FORM": "Pre-Chat-Formular", "PRE_CHAT_FORM": "Pre-Chat-Formular",
"BUSINESS_HOURS": "Öffnungszeiten", "BUSINESS_HOURS": "Öffnungszeiten",
"WIDGET_BUILDER": "Widget-Generator" "WIDGET_BUILDER": "Widget-Generator",
"BOT_CONFIGURATION": "Bot Configuration"
}, },
"SETTINGS": "Einstellungen", "SETTINGS": "Einstellungen",
"FEATURES": { "FEATURES": {

View file

@ -1,5 +1,70 @@
{ {
"AGENT_BOTS": { "AGENT_BOTS": {
"HEADER": "Bots" "HEADER": "Bots",
"LOADING_EDITOR": "Φόρτωση Επεξεργαστή...",
"HEADER_BTN_TXT": "Προσθήκη Ρυθμίσεων Bot",
"SIDEBAR_TXT": "<p><b>Agent Bots</b> <p>Τα Agent bots σας επιτρέπουν να αυτοματοποιήσετε τις συνομιλίες</p>",
"CSML_BOT_EDITOR": {
"NAME": {
"LABEL": "Όνομα Bot",
"PLACEHOLDER": "Δώστε στο bot σας ένα όνομα",
"ERROR": "Το Όνομα Bot είναι απαραίτητο"
},
"DESCRIPTION": {
"LABEL": "Περιγραφή Bot",
"PLACEHOLDER": "Τι κάνει αυτό το bot?"
},
"BOT_CONFIG": {
"ERROR": "Παρακαλώ εισάγετε την διαμόρφωση του CSML bot παραπάνω",
"API_ERROR": "Η ρύθμιση παραμέτρων CSML δεν είναι έγκυρη, παρακαλώ διορθώστε την και προσπαθήστε ξανά."
},
"SUBMIT": "Επαλήθευση και αποθήκευση"
},
"BOT_CONFIGURATION": {
"TITLE": "Επιλέξτε ενός Agent Bot",
"DESC": "Μπορείτε να ορίσετε ένα agent bot από τη λίστα σε αυτά τα εισερχόμενα. Το bot μπορεί αρχικά να χειριστεί τη συνομιλία και να την μεταφέρει σε έναν πράκτορα όταν χρειάζεται.",
"SUBMIT": "Ενημέρωση",
"SUCCESS_MESSAGE": "Επιτυχής ενημέρωση του agent bot",
"ERROR_MESSAGE": "Δεν ήταν δυνατή η ενημέρωση του agent bot, δοκιμάστε ξανά αργότερα",
"SELECT_PLACEHOLDER": "Επιλογή Bot"
},
"ADD": {
"TITLE": "Ρύθμιση νέου bot",
"CANCEL_BUTTON_TEXT": "Άκυρο",
"API": {
"SUCCESS_MESSAGE": "Το bot προστέθηκε επιτυχώς",
"ERROR_MESSAGE": "Δεν ήταν δυνατή η προσθήκη bot, παρακαλώ προσπαθήστε ξανά αργότερα"
}
},
"LIST": {
"404": "Δεν βρέθηκαν bots, μπορείτε να δημιουργήσετε ένα bot κάνοντας κλικ στο κουμπί 'Ρύθμιση νέου Bot' ↗",
"LOADING": "Λήψη Bots...",
"TYPE": "Τύπος Bot"
},
"DELETE": {
"BUTTON_TEXT": "Διαγραφή",
"TITLE": "Διαγραφή Bot",
"SUBMIT": "Διαγραφή",
"CANCEL_BUTTON_TEXT": "Άκυρο",
"DESCRIPTION": "Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτό το bot? Αυτή η ενέργεια είναι μη αναστρέψιμη",
"API": {
"SUCCESS_MESSAGE": "Το bot διαγράφηκε επιτυχώς",
"ERROR_MESSAGE": "Δεν ήταν δυνατή η διαγραφή του bot, παρακαλώ προσπαθήστε ξανά αργότερα"
}
},
"EDIT": {
"BUTTON_TEXT": "Επεξεργασία",
"LOADING": "Λήψη Bots...",
"TITLE": "Επεξεργασία Bot",
"CANCEL_BUTTON_TEXT": "Άκυρο",
"API": {
"SUCCESS_MESSAGE": "Το bot ενημερώθηκε επιτυχώς",
"ERROR_MESSAGE": "Δεν ήταν δυνατή η ενημέρωση του bot, παρακαλώ προσπαθήστε ξανά αργότερα"
}
},
"TYPES": {
"WEBHOOK": "Webhook Bot",
"CSML": "CSML Bot"
}
} }
} }

View file

@ -86,7 +86,9 @@
"RESET_MESSAGE": "Η αλλαγή τύπου συμβάντος θα επαναφέρει τις συνθήκες και τα συμβάντα που έχετε προσθέσει παρακάτω" "RESET_MESSAGE": "Η αλλαγή τύπου συμβάντος θα επαναφέρει τις συνθήκες και τα συμβάντα που έχετε προσθέσει παρακάτω"
}, },
"CONDITION": { "CONDITION": {
"DELETE_MESSAGE": "Πρέπει να έχετε τουλάχιστον μία συνθήκη για να αποθηκεύσετε" "DELETE_MESSAGE": "Πρέπει να έχετε τουλάχιστον μία συνθήκη για να αποθηκεύσετε",
"CONTACT_CUSTOM_ATTR_LABEL": "Προσαρμοσμένες Ιδιότητες Επαφής",
"CONVERSATION_CUSTOM_ATTR_LABEL": "Προσαρμοσμένες Ιδιότητες Συνομιλίας"
}, },
"ACTION": { "ACTION": {
"DELETE_MESSAGE": "Πρέπει να έχετε τουλάχιστον μία ενέργεια για να αποθηκεύσετε", "DELETE_MESSAGE": "Πρέπει να έχετε τουλάχιστον μία ενέργεια για να αποθηκεύσετε",

View file

@ -8,6 +8,7 @@
"ASSIGN_LABEL": "Αντιστοίχιση", "ASSIGN_LABEL": "Αντιστοίχιση",
"YES": "Ναι", "YES": "Ναι",
"ASSIGN_AGENT_TOOLTIP": "Ανάθεση σε πράκτορα", "ASSIGN_AGENT_TOOLTIP": "Ανάθεση σε πράκτορα",
"ASSIGN_TEAM_TOOLTIP": "Ανάθεση ομάδας",
"ASSIGN_SUCCESFUL": "Οι σινομιλίες αντιστοιχήθηκαν επιτυχώς", "ASSIGN_SUCCESFUL": "Οι σινομιλίες αντιστοιχήθηκαν επιτυχώς",
"ASSIGN_FAILED": "Αποτυχία στην αντιστοίχιση σινομιλιών, παρακαλώ δοκιμάστε αργότερα", "ASSIGN_FAILED": "Αποτυχία στην αντιστοίχιση σινομιλιών, παρακαλώ δοκιμάστε αργότερα",
"RESOLVE_SUCCESFUL": "Οι σινομιλίες επιλύθηκαν επιτυχώς", "RESOLVE_SUCCESFUL": "Οι σινομιλίες επιλύθηκαν επιτυχώς",
@ -26,6 +27,14 @@
"ASSIGN_SELECTED_LABELS": "Ανάθεση επιλεγμένων ετικετών", "ASSIGN_SELECTED_LABELS": "Ανάθεση επιλεγμένων ετικετών",
"ASSIGN_SUCCESFUL": "Επιτυχής ανάθεση ετικετών", "ASSIGN_SUCCESFUL": "Επιτυχής ανάθεση ετικετών",
"ASSIGN_FAILED": "Αποτυχία στην ανάθεση ετικετών, παρακαλώ δοκιμάστε αργότερα" "ASSIGN_FAILED": "Αποτυχία στην ανάθεση ετικετών, παρακαλώ δοκιμάστε αργότερα"
},
"TEAMS": {
"TEAM_SELECT_LABEL": "Επιλογή Ομάδας",
"NONE": "Κανένα",
"NO_TEAMS_AVAILABLE": "Δεν έχουν προστεθεί ομάδες σε αυτόν τον λογαριασμό ακόμα.",
"ASSIGN_SELECTED_TEAMS": "Ανάθεση επιλεγμένης ομάδας",
"ASSIGN_SUCCESFUL": "Επιτυχής ανάθεση σε ομάδα",
"ASSIGN_FAILED": "Αδυναμία αντιστοίχισης ομάδας. Παρακαλώ δοκιμάστε ξανά"
} }
} }
} }

View file

@ -54,7 +54,8 @@
"MULTISELECT": { "MULTISELECT": {
"ENTER_TO_SELECT": "Πάτησε enter για επιλογή", "ENTER_TO_SELECT": "Πάτησε enter για επιλογή",
"ENTER_TO_REMOVE": "Πάτησε enter για αφαίρεση", "ENTER_TO_REMOVE": "Πάτησε enter για αφαίρεση",
"SELECT_ONE": "Επιλέξτε ένα" "SELECT_ONE": "Επιλέξτε ένα",
"SELECT": "Επιλογή"
} }
}, },
"NOTIFICATIONS_PAGE": { "NOTIFICATIONS_PAGE": {

View file

@ -416,7 +416,8 @@
"CAMPAIGN": "Καμπάνιες", "CAMPAIGN": "Καμπάνιες",
"PRE_CHAT_FORM": "Φόρμα Προ-Συνομιλίας", "PRE_CHAT_FORM": "Φόρμα Προ-Συνομιλίας",
"BUSINESS_HOURS": "Ώρες Εργασίας", "BUSINESS_HOURS": "Ώρες Εργασίας",
"WIDGET_BUILDER": "Δημιουργός Widget" "WIDGET_BUILDER": "Δημιουργός Widget",
"BOT_CONFIGURATION": "Ρυθμίσεις Bot"
}, },
"SETTINGS": "Ρυθμίσεις", "SETTINGS": "Ρυθμίσεις",
"FEATURES": { "FEATURES": {

View file

@ -1,5 +1,70 @@
{ {
"AGENT_BOTS": { "AGENT_BOTS": {
"HEADER": "Bots" "HEADER": "Bots",
"LOADING_EDITOR": "Loading Editor...",
"HEADER_BTN_TXT": "Add Bot Configuration",
"SIDEBAR_TXT": "<p><b>Agent Bots</b> <p>Agent bots allows you to automate the conversations</p>",
"CSML_BOT_EDITOR": {
"NAME": {
"LABEL": "Bot Name",
"PLACEHOLDER": "Give your bot a name",
"ERROR": "Bot name is required"
},
"DESCRIPTION": {
"LABEL": "Bot Description",
"PLACEHOLDER": "What does this bot do?"
},
"BOT_CONFIG": {
"ERROR": "Please enter your CSML bot configuration above",
"API_ERROR": "Your CSML configuration is invalid, please fix it and try again."
},
"SUBMIT": "Validate and save"
},
"BOT_CONFIGURATION": {
"TITLE": "Select an agent bot",
"DESC": "You can set an agent bot from the list to this inbox. The bot can initially handle the conversation and transfer it to an agent when needed.",
"SUBMIT": "Update",
"SUCCESS_MESSAGE": "Successfully updated the agent bot",
"ERROR_MESSAGE": "Could not update the agent bot, please try again later",
"SELECT_PLACEHOLDER": "Select Bot"
},
"ADD": {
"TITLE": "Configure new bot",
"CANCEL_BUTTON_TEXT": "Cancel",
"API": {
"SUCCESS_MESSAGE": "Bot added successfully",
"ERROR_MESSAGE": "Could not add bot, Please try again later"
}
},
"LIST": {
"404": "No Bots found, you can create a bot by clicking the 'Configure new bot' Button ↗",
"LOADING": "Fetching Bots...",
"TYPE": "Bot Type"
},
"DELETE": {
"BUTTON_TEXT": "Delete",
"TITLE": "Delete Bot",
"SUBMIT": "Delete",
"CANCEL_BUTTON_TEXT": "Cancel",
"DESCRIPTION": "Are you sure you want to delete this bot? This action is irreversible",
"API": {
"SUCCESS_MESSAGE": "Bot deleted successfully",
"ERROR_MESSAGE": "Could not able to delete bot, Please try again later"
}
},
"EDIT": {
"BUTTON_TEXT": "Edit",
"LOADING": "Fetching Bots...",
"TITLE": "Edit Bot",
"CANCEL_BUTTON_TEXT": "Cancel",
"API": {
"SUCCESS_MESSAGE": "Bot updated successfully",
"ERROR_MESSAGE": "Could not update bot, Please try again later"
}
},
"TYPES": {
"WEBHOOK": "Webhook Bot",
"CSML": "CSML Bot"
}
} }
} }

View file

@ -8,6 +8,7 @@
"ASSIGN_LABEL": "Assign", "ASSIGN_LABEL": "Assign",
"YES": "Yes", "YES": "Yes",
"ASSIGN_AGENT_TOOLTIP": "Assign Agent", "ASSIGN_AGENT_TOOLTIP": "Assign Agent",
"ASSIGN_TEAM_TOOLTIP": "Assign team",
"ASSIGN_SUCCESFUL": "Conversations assigned successfully", "ASSIGN_SUCCESFUL": "Conversations assigned successfully",
"ASSIGN_FAILED": "Failed to assign conversations, please try again", "ASSIGN_FAILED": "Failed to assign conversations, please try again",
"RESOLVE_SUCCESFUL": "Conversations resolved successfully", "RESOLVE_SUCCESFUL": "Conversations resolved successfully",
@ -26,6 +27,14 @@
"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"
},
"TEAMS": {
"TEAM_SELECT_LABEL": "Select Team",
"NONE": "None",
"NO_TEAMS_AVAILABLE": "There are no teams added to this account yet.",
"ASSIGN_SELECTED_TEAMS": "Assign selected team",
"ASSIGN_SUCCESFUL": "Teams assiged successfully",
"ASSIGN_FAILED": "Failed to assign team, please try again"
} }
} }
} }

View file

@ -56,6 +56,8 @@
"REPLY_TO_TWEET": "Reply to this tweet", "REPLY_TO_TWEET": "Reply to this tweet",
"LINK_TO_STORY": "Go to instagram story", "LINK_TO_STORY": "Go to instagram story",
"SENT": "Sent successfully", "SENT": "Sent successfully",
"READ": "Read successfully",
"DELIVERED": "Delivered successfully",
"NO_MESSAGES": "No Messages", "NO_MESSAGES": "No Messages",
"NO_CONTENT": "No content available", "NO_CONTENT": "No content available",
"HIDE_QUOTED_TEXT": "Hide Quoted Text", "HIDE_QUOTED_TEXT": "Hide Quoted Text",

View file

@ -64,6 +64,7 @@
"CARD_CONTEXT_MENU": { "CARD_CONTEXT_MENU": {
"PENDING": "Mark as pending", "PENDING": "Mark as pending",
"RESOLVED": "Mark as resolved", "RESOLVED": "Mark as resolved",
"MARK_AS_UNREAD": "Mark as unread",
"REOPEN": "Reopen conversation", "REOPEN": "Reopen conversation",
"SNOOZE": { "SNOOZE": {
"TITLE": "Snooze", "TITLE": "Snooze",

View file

@ -23,7 +23,7 @@
"ERROR": "Please enter a valid account name" "ERROR": "Please enter a valid account name"
}, },
"LANGUAGE": { "LANGUAGE": {
"LABEL": "Site language (Beta)", "LABEL": "Site language",
"PLACEHOLDER": "Your account name", "PLACEHOLDER": "Your account name",
"ERROR": "" "ERROR": ""
}, },

View file

@ -388,6 +388,10 @@
"ENABLED": "Enabled", "ENABLED": "Enabled",
"DISABLED": "Disabled" "DISABLED": "Disabled"
}, },
"LOCK_TO_SINGLE_CONVERSATION": {
"ENABLED": "Enabled",
"DISABLED": "Disabled"
},
"ENABLE_HMAC": { "ENABLE_HMAC": {
"LABEL": "Enable" "LABEL": "Enable"
} }
@ -416,7 +420,8 @@
"CAMPAIGN": "Campaigns", "CAMPAIGN": "Campaigns",
"PRE_CHAT_FORM": "Pre Chat Form", "PRE_CHAT_FORM": "Pre Chat Form",
"BUSINESS_HOURS": "Business Hours", "BUSINESS_HOURS": "Business Hours",
"WIDGET_BUILDER": "Widget Builder" "WIDGET_BUILDER": "Widget Builder",
"BOT_CONFIGURATION": "Bot Configuration"
}, },
"SETTINGS": "Settings", "SETTINGS": "Settings",
"FEATURES": { "FEATURES": {
@ -440,6 +445,8 @@
"ENABLE_CSAT_SUB_TEXT": "Enable/Disable CSAT(Customer satisfaction) survey after resolving a conversation", "ENABLE_CSAT_SUB_TEXT": "Enable/Disable CSAT(Customer satisfaction) survey after resolving a conversation",
"ENABLE_CONTINUITY_VIA_EMAIL": "Enable conversation continuity via email", "ENABLE_CONTINUITY_VIA_EMAIL": "Enable conversation continuity via email",
"ENABLE_CONTINUITY_VIA_EMAIL_SUB_TEXT": "Conversations will continue over email if the contact email address is available.", "ENABLE_CONTINUITY_VIA_EMAIL_SUB_TEXT": "Conversations will continue over email if the contact email address is available.",
"LOCK_TO_SINGLE_CONVERSATION": "Lock to single conversation",
"LOCK_TO_SINGLE_CONVERSATION_SUB_TEXT": "Enable or disable multiple conversations for the same contact in this inbox",
"INBOX_UPDATE_TITLE": "Inbox Settings", "INBOX_UPDATE_TITLE": "Inbox Settings",
"INBOX_UPDATE_SUB_TEXT": "Update your inbox settings", "INBOX_UPDATE_SUB_TEXT": "Update your inbox settings",
"AUTO_ASSIGNMENT_SUB_TEXT": "Enable or disable the automatic assignment of new conversations to the agents added to this inbox.", "AUTO_ASSIGNMENT_SUB_TEXT": "Enable or disable the automatic assignment of new conversations to the agents added to this inbox.",

View file

@ -1,5 +1,70 @@
{ {
"AGENT_BOTS": { "AGENT_BOTS": {
"HEADER": "Bots" "HEADER": "Bots",
"LOADING_EDITOR": "Loading Editor...",
"HEADER_BTN_TXT": "Add Bot Configuration",
"SIDEBAR_TXT": "<p><b>Agent Bots</b> <p>Agent bots allows you to automate the conversations</p>",
"CSML_BOT_EDITOR": {
"NAME": {
"LABEL": "Bot Name",
"PLACEHOLDER": "Give your bot a name",
"ERROR": "Bot name is required"
},
"DESCRIPTION": {
"LABEL": "Bot Description",
"PLACEHOLDER": "What does this bot do?"
},
"BOT_CONFIG": {
"ERROR": "Please enter your CSML bot configuration above",
"API_ERROR": "Your CSML configuration is invalid, please fix it and try again."
},
"SUBMIT": "Validate and save"
},
"BOT_CONFIGURATION": {
"TITLE": "Select an agent bot",
"DESC": "You can set an agent bot from the list to this inbox. The bot can initially handle the conversation and transfer it to an agent when needed.",
"SUBMIT": "Actualizar",
"SUCCESS_MESSAGE": "Successfully updated the agent bot",
"ERROR_MESSAGE": "Could not update the agent bot, please try again later",
"SELECT_PLACEHOLDER": "Select Bot"
},
"ADD": {
"TITLE": "Configure new bot",
"CANCEL_BUTTON_TEXT": "Cancelar",
"API": {
"SUCCESS_MESSAGE": "Bot added successfully",
"ERROR_MESSAGE": "Could not add bot, Please try again later"
}
},
"LIST": {
"404": "No Bots found, you can create a bot by clicking the 'Configure new bot' Button ↗",
"LOADING": "Fetching Bots...",
"TYPE": "Bot Type"
},
"DELETE": {
"BUTTON_TEXT": "Eliminar",
"TITLE": "Delete Bot",
"SUBMIT": "Eliminar",
"CANCEL_BUTTON_TEXT": "Cancelar",
"DESCRIPTION": "Are you sure you want to delete this bot? This action is irreversible",
"API": {
"SUCCESS_MESSAGE": "Bot deleted successfully",
"ERROR_MESSAGE": "Could not able to delete bot, Please try again later"
}
},
"EDIT": {
"BUTTON_TEXT": "Editar",
"LOADING": "Fetching Bots...",
"TITLE": "Edit Bot",
"CANCEL_BUTTON_TEXT": "Cancelar",
"API": {
"SUCCESS_MESSAGE": "Bot updated successfully",
"ERROR_MESSAGE": "Could not update bot, Please try again later"
}
},
"TYPES": {
"WEBHOOK": "Webhook Bot",
"CSML": "CSML Bot"
}
} }
} }

View file

@ -86,7 +86,9 @@
"RESET_MESSAGE": "El cambio de tipo de evento restablecerá las condiciones y eventos que has añadido abajo" "RESET_MESSAGE": "El cambio de tipo de evento restablecerá las condiciones y eventos que has añadido abajo"
}, },
"CONDITION": { "CONDITION": {
"DELETE_MESSAGE": "Necesitas tener al menos una condición para guardar" "DELETE_MESSAGE": "Necesitas tener al menos una condición para guardar",
"CONTACT_CUSTOM_ATTR_LABEL": "Contact Custom Attributes",
"CONVERSATION_CUSTOM_ATTR_LABEL": "Conversation Custom Attributes"
}, },
"ACTION": { "ACTION": {
"DELETE_MESSAGE": "Necesitas tener al menos una acción para guardar", "DELETE_MESSAGE": "Necesitas tener al menos una acción para guardar",

View file

@ -8,6 +8,7 @@
"ASSIGN_LABEL": "Asignar", "ASSIGN_LABEL": "Asignar",
"YES": "Si", "YES": "Si",
"ASSIGN_AGENT_TOOLTIP": "Asignar agente", "ASSIGN_AGENT_TOOLTIP": "Asignar agente",
"ASSIGN_TEAM_TOOLTIP": "Asignar equipo",
"ASSIGN_SUCCESFUL": "Conversaciones asignadas con éxito", "ASSIGN_SUCCESFUL": "Conversaciones asignadas con éxito",
"ASSIGN_FAILED": "Error al asignar conversaciones, inténtelo de nuevo", "ASSIGN_FAILED": "Error al asignar conversaciones, inténtelo de nuevo",
"RESOLVE_SUCCESFUL": "Conversaciones resueltas con éxito", "RESOLVE_SUCCESFUL": "Conversaciones resueltas con éxito",
@ -26,6 +27,14 @@
"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"
},
"TEAMS": {
"TEAM_SELECT_LABEL": "Seleccionar equipo",
"NONE": "Ninguna",
"NO_TEAMS_AVAILABLE": "There are no teams added to this account yet.",
"ASSIGN_SELECTED_TEAMS": "Assign selected team",
"ASSIGN_SUCCESFUL": "Teams assiged successfully",
"ASSIGN_FAILED": "Failed to assign team, please try again"
} }
} }
} }

View file

@ -54,7 +54,8 @@
"MULTISELECT": { "MULTISELECT": {
"ENTER_TO_SELECT": "Pulse Enter para seleccionar", "ENTER_TO_SELECT": "Pulse Enter para seleccionar",
"ENTER_TO_REMOVE": "Presione Enter para eliminar", "ENTER_TO_REMOVE": "Presione Enter para eliminar",
"SELECT_ONE": "Seleccione uno" "SELECT_ONE": "Seleccione uno",
"SELECT": "Select"
} }
}, },
"NOTIFICATIONS_PAGE": { "NOTIFICATIONS_PAGE": {

View file

@ -416,7 +416,8 @@
"CAMPAIGN": "Campañas", "CAMPAIGN": "Campañas",
"PRE_CHAT_FORM": "Pre-formulario de chat", "PRE_CHAT_FORM": "Pre-formulario de chat",
"BUSINESS_HOURS": "Horarios", "BUSINESS_HOURS": "Horarios",
"WIDGET_BUILDER": "Constructor de Widget" "WIDGET_BUILDER": "Constructor de Widget",
"BOT_CONFIGURATION": "Bot Configuration"
}, },
"SETTINGS": "Ajustes", "SETTINGS": "Ajustes",
"FEATURES": { "FEATURES": {

View file

@ -1,5 +1,70 @@
{ {
"AGENT_BOTS": { "AGENT_BOTS": {
"HEADER": "ربات‌ها" "HEADER": "ربات‌ها",
"LOADING_EDITOR": "در حال بارگیری ویرایشگر...",
"HEADER_BTN_TXT": "افرودن پیکربندی ربات",
"SIDEBAR_TXT": "<p><b>ربات‌های عامل</b> <p>ربات‌های عامل به شما امکان می‌دهند گفتگوها را خودکار کنید</p>",
"CSML_BOT_EDITOR": {
"NAME": {
"LABEL": "نام ربات",
"PLACEHOLDER": "برای ربات خود یک نام مشخص کنید",
"ERROR": "نام ربات الزامی است"
},
"DESCRIPTION": {
"LABEL": "توضیحات ربات",
"PLACEHOLDER": "این ربات چه کاری انجام می‌دهد؟"
},
"BOT_CONFIG": {
"ERROR": "لطفا پیکربندی ربات CSML خود را در بالا وارد کنید",
"API_ERROR": "پیکربندی CSML شما نامعتبر است، لطفا آن را اصلاح کنید و دوباره امتحان کنید."
},
"SUBMIT": "اعتبارسنجی و ذخیره کنید"
},
"BOT_CONFIGURATION": {
"TITLE": "انتخاب یک ربات عامل",
"DESC": "می‌توانید یک ربات عامل را از فهرست در این صندوق ورودی تنظیم کنید. ربات در ابتدا می‌تواند گفتگو را مدیریت کند و در صورت نیاز آن را به یک نماینده منتقل کند.",
"SUBMIT": "اعمال شود",
"SUCCESS_MESSAGE": "ربات عامل با موفقیت به‌روز شد",
"ERROR_MESSAGE": "ربات عامل به‌روزرسانی نشد، لطفا بعدا دوباره امتحان کنید",
"SELECT_PLACEHOLDER": "انتخاب ربات"
},
"ADD": {
"TITLE": "پیکربندی ربات جدید",
"CANCEL_BUTTON_TEXT": "انصراف",
"API": {
"SUCCESS_MESSAGE": "ربات با موفقیت اضافه شد",
"ERROR_MESSAGE": "ربات اضافه نشد، لطفا بعدا دوباره امتحان کنید"
}
},
"LIST": {
"404": "هیچ روباتی یافت نشد، می‌توانید با کلیک کردن روی دکمه «پیکربندی ربات جدید» یک ربات ایجاد کنید ↗",
"LOADING": "در حال گرفتن ربات‌ها...",
"TYPE": "نوع ربات"
},
"DELETE": {
"BUTTON_TEXT": "حذف",
"TITLE": "حذف ربات",
"SUBMIT": "حذف",
"CANCEL_BUTTON_TEXT": "انصراف",
"DESCRIPTION": "آیا مطمئن هستید که می‌خواهید این ربات را حذف کنید؟ این عمل برگشت‌ناپذیر است",
"API": {
"SUCCESS_MESSAGE": "ربات با موفقیت حذف شد",
"ERROR_MESSAGE": "نمی‌توان ربات را حذف کرد، لطفا بعدا دوباره امتحان کنید"
}
},
"EDIT": {
"BUTTON_TEXT": "ویرایش",
"LOADING": "در حال گرفتن ربات‌ها...",
"TITLE": "ویرایش ربات",
"CANCEL_BUTTON_TEXT": "انصراف",
"API": {
"SUCCESS_MESSAGE": "ربات با موفقیت به‌روز شد",
"ERROR_MESSAGE": "ربات به‌روزرسانی نشد، لطفا بعدا دوباره امتحان کنید"
}
},
"TYPES": {
"WEBHOOK": "وب‌هوک ربات",
"CSML": "ربات CSML"
}
} }
} }

View file

@ -86,7 +86,9 @@
"RESET_MESSAGE": "با تغییر نوع رویداد، شرایط و رویدادهایی که در زیر اضافه کرده‌اید بازنشانی می‌شود" "RESET_MESSAGE": "با تغییر نوع رویداد، شرایط و رویدادهایی که در زیر اضافه کرده‌اید بازنشانی می‌شود"
}, },
"CONDITION": { "CONDITION": {
"DELETE_MESSAGE": "شما باید حداقل یک شرط برای ذخیره داشته باشید" "DELETE_MESSAGE": "شما باید حداقل یک شرط برای ذخیره داشته باشید",
"CONTACT_CUSTOM_ATTR_LABEL": "ویژگی‌های سفارشی تماس",
"CONVERSATION_CUSTOM_ATTR_LABEL": "ویژگی‌های سفارشی گفتگو"
}, },
"ACTION": { "ACTION": {
"DELETE_MESSAGE": "برای ذخیره باید حداقل یک اکشن داشته باشید", "DELETE_MESSAGE": "برای ذخیره باید حداقل یک اکشن داشته باشید",

View file

@ -8,6 +8,7 @@
"ASSIGN_LABEL": "اختصاص دادن", "ASSIGN_LABEL": "اختصاص دادن",
"YES": "بله", "YES": "بله",
"ASSIGN_AGENT_TOOLTIP": "تعیین ایجنت", "ASSIGN_AGENT_TOOLTIP": "تعیین ایجنت",
"ASSIGN_TEAM_TOOLTIP": "تیم را تعیین کنید",
"ASSIGN_SUCCESFUL": "گفتگو با موفقیت اختصاص داده شده", "ASSIGN_SUCCESFUL": "گفتگو با موفقیت اختصاص داده شده",
"ASSIGN_FAILED": "گفتگو اختصاص داده نشد، لطفا دوباره امتحان کنید", "ASSIGN_FAILED": "گفتگو اختصاص داده نشد، لطفا دوباره امتحان کنید",
"RESOLVE_SUCCESFUL": "گفتگو با موفقیت حل شد", "RESOLVE_SUCCESFUL": "گفتگو با موفقیت حل شد",
@ -26,6 +27,14 @@
"ASSIGN_SELECTED_LABELS": "اختصاص برچسب‌های انتخاب شده", "ASSIGN_SELECTED_LABELS": "اختصاص برچسب‌های انتخاب شده",
"ASSIGN_SUCCESFUL": "برچسب‌ها با موفقیت اختصاص یافتند", "ASSIGN_SUCCESFUL": "برچسب‌ها با موفقیت اختصاص یافتند",
"ASSIGN_FAILED": "اختصاص برچسب‌ها به صورت موفق انجام نشد، لطفا دوباره امتحان کنید" "ASSIGN_FAILED": "اختصاص برچسب‌ها به صورت موفق انجام نشد، لطفا دوباره امتحان کنید"
},
"TEAMS": {
"TEAM_SELECT_LABEL": "تیم را انتخاب کنید",
"NONE": "هیچکدام",
"NO_TEAMS_AVAILABLE": "هنوز هیچ تیمی به این حساب کاربری اضافه نشده است.",
"ASSIGN_SELECTED_TEAMS": "اختصاص تیم انتخاب شده",
"ASSIGN_SUCCESFUL": "تیم‌ها با موفقیت اختصاص یافتند",
"ASSIGN_FAILED": "اختصاص تیم با موفقیت انجام نشد، لطفا دوباره امتحان کنید"
} }
} }
} }

View file

@ -54,7 +54,8 @@
"MULTISELECT": { "MULTISELECT": {
"ENTER_TO_SELECT": "برای انتخاب Enter را فشار دهید", "ENTER_TO_SELECT": "برای انتخاب Enter را فشار دهید",
"ENTER_TO_REMOVE": "برای حذف دکمه enter را فشار دهید", "ENTER_TO_REMOVE": "برای حذف دکمه enter را فشار دهید",
"SELECT_ONE": "یکی را انتخاب کن" "SELECT_ONE": "یکی را انتخاب کن",
"SELECT": "انتخاب کنید"
} }
}, },
"NOTIFICATIONS_PAGE": { "NOTIFICATIONS_PAGE": {

View file

@ -416,7 +416,8 @@
"CAMPAIGN": "کمپین ها", "CAMPAIGN": "کمپین ها",
"PRE_CHAT_FORM": "فرم پیش چت", "PRE_CHAT_FORM": "فرم پیش چت",
"BUSINESS_HOURS": "ساعت کاری", "BUSINESS_HOURS": "ساعت کاری",
"WIDGET_BUILDER": "سازنده ابزارک" "WIDGET_BUILDER": "سازنده ابزارک",
"BOT_CONFIGURATION": "پیکربندی ربات"
}, },
"SETTINGS": "تنظیمات", "SETTINGS": "تنظیمات",
"FEATURES": { "FEATURES": {

View file

@ -4,9 +4,9 @@
"HEADER_BTN_TXT": "افزودن ماکرو جدید", "HEADER_BTN_TXT": "افزودن ماکرو جدید",
"HEADER_BTN_TXT_SAVE": "ذخیره ماکرو", "HEADER_BTN_TXT_SAVE": "ذخیره ماکرو",
"LOADING": "در حال گرفتن ماکروها", "LOADING": "در حال گرفتن ماکروها",
"SIDEBAR_TXT": "<p><b>Macros</b><p>A macro is a set of saved actions that help customer service agents easily complete tasks. The agents can define a set of actions like tagging a conversation with a label, sending an email transcript, updating a custom attribute, etc., and they can run these actions in a single click. When the agents run the macro, the actions would be performed sequentially in the order they are defined. Macros improve productivity and increase consistency in actions. </p><p>A macro can be helpful in 2 ways. </p><p><b>As an agent assist:</b> If an agent performs a set of actions multiple times, they can save it as a macro and execute all the actions together using a single click.</p><p><b>As an option to onboard a team member:</b> Every agent has to perform many different checks/actions during each conversation. Onboarding a new support team member will be easy if pre-defined macros are available on the account. Instead of describing each step in detail, the manager/team lead can point to the macros used in different scenarios.</p>", "SIDEBAR_TXT": "<p><b>ماکروها</b><p>یک ماکرو مجموعه ای از اقدامات ذخیره شده است که به نمایندگی های خدمات مشتری کمک می کند تا وظایف را به راحتی انجام دهند. نمایندگان می توانند مجموعه ای از اقدامات مانند برچسب گذاری یک مکالمه با برچسب، ارسال متن ایمیل، به روز رسانی یک ویژگی سفارشی و غیره را تعریف کنند و می توانند این اقدامات را با یک کلیک اجرا کنند. هنگامی که عامل ها ماکرو را اجرا می کنند، اقدامات به ترتیب به ترتیبی که تعریف شده اند انجام می شوند. ماکروها بهره وری را بهبود می بخشند و ثبات در اقدامات را افزایش می دهند. </p><p>یک ماکرو از دو جهت می تواند مفید باشد. </p><p><b>به‌عنوان کمک عامل:</b> اگر یک عامل مجموعه‌ای از اقدامات را چندین بار انجام دهد، می‌تواند آن را به‌عنوان یک ماکرو ذخیره کند و همه اقدامات را با هم با یک کلیک انجام دهد.</b> p><p><b>به‌عنوان گزینه‌ای برای حضور در یک عضو تیم:</b> هر نماینده باید در طول هر مکالمه، بررسی‌ها/عملکردهای مختلفی را انجام دهد. در صورتی که ماکروهای از پیش تعریف شده در حساب موجود باشد، ورود به یک عضو تیم پشتیبانی جدید آسان خواهد بود. به جای توصیف هر مرحله با جزئیات، مدیر/سرپرست تیم می‌تواند به ماکروهای مورد استفاده در سناریوهای مختلف اشاره کند.</p>",
"ERROR": "مشکلی پیش آمد. لطفا دوباره تلاش کنید", "ERROR": "مشکلی پیش آمد. لطفا دوباره تلاش کنید",
"ORDER_INFO": "Macros will run in the order you add your actions. You can rearrange them by dragging them by the handle beside each node.", "ORDER_INFO": "ماکروها به ترتیبی که اقدامات خود را اضافه می کنید اجرا می شوند. می توانید با کشیدن آنها توسط دسته کنار هر گره آنها را دوباره مرتب کنید.",
"ADD": { "ADD": {
"FORM": { "FORM": {
"NAME": { "NAME": {
@ -28,7 +28,7 @@
"نام", "نام",
"ايجاد شده توسط", "ايجاد شده توسط",
"آخرین به‌روزرسانی توسط", "آخرین به‌روزرسانی توسط",
"Visibility" "دید"
], ],
"404": "هیچ ماکروی یافت نشد" "404": "هیچ ماکروی یافت نشد"
}, },
@ -52,20 +52,20 @@
} }
}, },
"EDITOR": { "EDITOR": {
"START_FLOW": "Start Flow", "START_FLOW": "جریان را شروع کنید",
"END_FLOW": "End Flow", "END_FLOW": "پایان جریان",
"LOADING": "در حال گرفتن ماکرو", "LOADING": "در حال گرفتن ماکرو",
"ADD_BTN_TOOLTIP": "Add new action", "ADD_BTN_TOOLTIP": "افزودن اقدام جدید",
"DELETE_BTN_TOOLTIP": "Delete Action", "DELETE_BTN_TOOLTIP": "حذف اکشن",
"VISIBILITY": { "VISIBILITY": {
"LABEL": "Macro Visibility", "LABEL": "دید ماکرو",
"GLOBAL": { "GLOBAL": {
"LABEL": "عمومی", "LABEL": "عمومی",
"DESCRIPTION": "This macro is available publicly for all agents in this account." "DESCRIPTION": "این ماکرو به صورت عمومی برای همه نمایندگان این حساب در دسترس است."
}, },
"PERSONAL": { "PERSONAL": {
"LABEL": "خصوصی", "LABEL": "خصوصی",
"DESCRIPTION": "This macro will be private to you and not be available to others." "DESCRIPTION": "این ماکرو برای شما خصوصی خواهد بود و برای دیگران در دسترس نخواهد بود."
} }
} }
}, },

View file

@ -1,5 +1,70 @@
{ {
"AGENT_BOTS": { "AGENT_BOTS": {
"HEADER": "Bots" "HEADER": "Bots",
"LOADING_EDITOR": "Loading Editor...",
"HEADER_BTN_TXT": "Add Bot Configuration",
"SIDEBAR_TXT": "<p><b>Agent Bots</b> <p>Agent bots allows you to automate the conversations</p>",
"CSML_BOT_EDITOR": {
"NAME": {
"LABEL": "Bot Name",
"PLACEHOLDER": "Give your bot a name",
"ERROR": "Bot name is required"
},
"DESCRIPTION": {
"LABEL": "Bot Description",
"PLACEHOLDER": "What does this bot do?"
},
"BOT_CONFIG": {
"ERROR": "Please enter your CSML bot configuration above",
"API_ERROR": "Your CSML configuration is invalid, please fix it and try again."
},
"SUBMIT": "Validate and save"
},
"BOT_CONFIGURATION": {
"TITLE": "Select an agent bot",
"DESC": "You can set an agent bot from the list to this inbox. The bot can initially handle the conversation and transfer it to an agent when needed.",
"SUBMIT": "Päivitä",
"SUCCESS_MESSAGE": "Successfully updated the agent bot",
"ERROR_MESSAGE": "Could not update the agent bot, please try again later",
"SELECT_PLACEHOLDER": "Select Bot"
},
"ADD": {
"TITLE": "Configure new bot",
"CANCEL_BUTTON_TEXT": "Peruuta",
"API": {
"SUCCESS_MESSAGE": "Bot added successfully",
"ERROR_MESSAGE": "Could not add bot, Please try again later"
}
},
"LIST": {
"404": "No Bots found, you can create a bot by clicking the 'Configure new bot' Button ↗",
"LOADING": "Fetching Bots...",
"TYPE": "Bot Type"
},
"DELETE": {
"BUTTON_TEXT": "Poista",
"TITLE": "Delete Bot",
"SUBMIT": "Poista",
"CANCEL_BUTTON_TEXT": "Peruuta",
"DESCRIPTION": "Are you sure you want to delete this bot? This action is irreversible",
"API": {
"SUCCESS_MESSAGE": "Bot deleted successfully",
"ERROR_MESSAGE": "Could not able to delete bot, Please try again later"
}
},
"EDIT": {
"BUTTON_TEXT": "Muokkaa",
"LOADING": "Fetching Bots...",
"TITLE": "Edit Bot",
"CANCEL_BUTTON_TEXT": "Peruuta",
"API": {
"SUCCESS_MESSAGE": "Bot updated successfully",
"ERROR_MESSAGE": "Could not update bot, Please try again later"
}
},
"TYPES": {
"WEBHOOK": "Webhook Bot",
"CSML": "CSML Bot"
}
} }
} }

View file

@ -86,7 +86,9 @@
"RESET_MESSAGE": "Changing event type will reset the conditions and events you have added below" "RESET_MESSAGE": "Changing event type will reset the conditions and events you have added below"
}, },
"CONDITION": { "CONDITION": {
"DELETE_MESSAGE": "You need to have atleast one condition to save" "DELETE_MESSAGE": "You need to have atleast one condition to save",
"CONTACT_CUSTOM_ATTR_LABEL": "Contact Custom Attributes",
"CONVERSATION_CUSTOM_ATTR_LABEL": "Conversation Custom Attributes"
}, },
"ACTION": { "ACTION": {
"DELETE_MESSAGE": "You need to have atleast one action to save", "DELETE_MESSAGE": "You need to have atleast one action to save",

View file

@ -8,6 +8,7 @@
"ASSIGN_LABEL": "Delegoi", "ASSIGN_LABEL": "Delegoi",
"YES": "Yes", "YES": "Yes",
"ASSIGN_AGENT_TOOLTIP": "Assign Agent", "ASSIGN_AGENT_TOOLTIP": "Assign Agent",
"ASSIGN_TEAM_TOOLTIP": "Assign team",
"ASSIGN_SUCCESFUL": "Conversations assigned successfully", "ASSIGN_SUCCESFUL": "Conversations assigned successfully",
"ASSIGN_FAILED": "Failed to assign conversations, please try again", "ASSIGN_FAILED": "Failed to assign conversations, please try again",
"RESOLVE_SUCCESFUL": "Conversations resolved successfully", "RESOLVE_SUCCESFUL": "Conversations resolved successfully",
@ -26,6 +27,14 @@
"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"
},
"TEAMS": {
"TEAM_SELECT_LABEL": "Select Team",
"NONE": "None",
"NO_TEAMS_AVAILABLE": "There are no teams added to this account yet.",
"ASSIGN_SELECTED_TEAMS": "Assign selected team",
"ASSIGN_SUCCESFUL": "Teams assiged successfully",
"ASSIGN_FAILED": "Failed to assign team, please try again"
} }
} }
} }

View file

@ -54,7 +54,8 @@
"MULTISELECT": { "MULTISELECT": {
"ENTER_TO_SELECT": "Paina enter valitaksesi", "ENTER_TO_SELECT": "Paina enter valitaksesi",
"ENTER_TO_REMOVE": "Paina enter poistaaksesi", "ENTER_TO_REMOVE": "Paina enter poistaaksesi",
"SELECT_ONE": "Valitse yksi" "SELECT_ONE": "Valitse yksi",
"SELECT": "Select"
} }
}, },
"NOTIFICATIONS_PAGE": { "NOTIFICATIONS_PAGE": {

View file

@ -416,7 +416,8 @@
"CAMPAIGN": "Campaigns", "CAMPAIGN": "Campaigns",
"PRE_CHAT_FORM": "Pre Chat Form", "PRE_CHAT_FORM": "Pre Chat Form",
"BUSINESS_HOURS": "Business Hours", "BUSINESS_HOURS": "Business Hours",
"WIDGET_BUILDER": "Widget Builder" "WIDGET_BUILDER": "Widget Builder",
"BOT_CONFIGURATION": "Bot Configuration"
}, },
"SETTINGS": "Asetukset", "SETTINGS": "Asetukset",
"FEATURES": { "FEATURES": {

View file

@ -1,5 +1,70 @@
{ {
"AGENT_BOTS": { "AGENT_BOTS": {
"HEADER": "Bots" "HEADER": "Bots",
"LOADING_EDITOR": "Loading Editor...",
"HEADER_BTN_TXT": "Add Bot Configuration",
"SIDEBAR_TXT": "<p><b>Agent Bots</b> <p>Agent bots allows you to automate the conversations</p>",
"CSML_BOT_EDITOR": {
"NAME": {
"LABEL": "Bot Name",
"PLACEHOLDER": "Give your bot a name",
"ERROR": "Bot name is required"
},
"DESCRIPTION": {
"LABEL": "Bot Description",
"PLACEHOLDER": "What does this bot do?"
},
"BOT_CONFIG": {
"ERROR": "Please enter your CSML bot configuration above",
"API_ERROR": "Your CSML configuration is invalid, please fix it and try again."
},
"SUBMIT": "Validate and save"
},
"BOT_CONFIGURATION": {
"TITLE": "Select an agent bot",
"DESC": "You can set an agent bot from the list to this inbox. The bot can initially handle the conversation and transfer it to an agent when needed.",
"SUBMIT": "Mettre à jour",
"SUCCESS_MESSAGE": "Successfully updated the agent bot",
"ERROR_MESSAGE": "Could not update the agent bot, please try again later",
"SELECT_PLACEHOLDER": "Select Bot"
},
"ADD": {
"TITLE": "Configure new bot",
"CANCEL_BUTTON_TEXT": "Annuler",
"API": {
"SUCCESS_MESSAGE": "Bot added successfully",
"ERROR_MESSAGE": "Could not add bot, Please try again later"
}
},
"LIST": {
"404": "No Bots found, you can create a bot by clicking the 'Configure new bot' Button ↗",
"LOADING": "Fetching Bots...",
"TYPE": "Bot Type"
},
"DELETE": {
"BUTTON_TEXT": "Supprimer",
"TITLE": "Delete Bot",
"SUBMIT": "Supprimer",
"CANCEL_BUTTON_TEXT": "Annuler",
"DESCRIPTION": "Are you sure you want to delete this bot? This action is irreversible",
"API": {
"SUCCESS_MESSAGE": "Bot deleted successfully",
"ERROR_MESSAGE": "Could not able to delete bot, Please try again later"
}
},
"EDIT": {
"BUTTON_TEXT": "Modifier",
"LOADING": "Fetching Bots...",
"TITLE": "Edit Bot",
"CANCEL_BUTTON_TEXT": "Annuler",
"API": {
"SUCCESS_MESSAGE": "Bot updated successfully",
"ERROR_MESSAGE": "Could not update bot, Please try again later"
}
},
"TYPES": {
"WEBHOOK": "Webhook Bot",
"CSML": "CSML Bot"
}
} }
} }

View file

@ -86,7 +86,9 @@
"RESET_MESSAGE": "Changer le type d'événement réinitialisera les conditions et les événements que vous avez ajoutés ci-dessous" "RESET_MESSAGE": "Changer le type d'événement réinitialisera les conditions et les événements que vous avez ajoutés ci-dessous"
}, },
"CONDITION": { "CONDITION": {
"DELETE_MESSAGE": "Vous devez avoir au moins une condition pour enregistrer" "DELETE_MESSAGE": "Vous devez avoir au moins une condition pour enregistrer",
"CONTACT_CUSTOM_ATTR_LABEL": "Contact Custom Attributes",
"CONVERSATION_CUSTOM_ATTR_LABEL": "Conversation Custom Attributes"
}, },
"ACTION": { "ACTION": {
"DELETE_MESSAGE": "Vous devez avoir au moins une action pour enregistrer", "DELETE_MESSAGE": "Vous devez avoir au moins une action pour enregistrer",

View file

@ -8,6 +8,7 @@
"ASSIGN_LABEL": "Assigner", "ASSIGN_LABEL": "Assigner",
"YES": "Oui", "YES": "Oui",
"ASSIGN_AGENT_TOOLTIP": "Assign Agent", "ASSIGN_AGENT_TOOLTIP": "Assign Agent",
"ASSIGN_TEAM_TOOLTIP": "Assign team",
"ASSIGN_SUCCESFUL": "Conversations assigned successfully", "ASSIGN_SUCCESFUL": "Conversations assigned successfully",
"ASSIGN_FAILED": "Failed to assign conversations, please try again", "ASSIGN_FAILED": "Failed to assign conversations, please try again",
"RESOLVE_SUCCESFUL": "Conversations resolved successfully", "RESOLVE_SUCCESFUL": "Conversations resolved successfully",
@ -26,6 +27,14 @@
"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"
},
"TEAMS": {
"TEAM_SELECT_LABEL": "Choisis une équipe",
"NONE": "Aucun",
"NO_TEAMS_AVAILABLE": "There are no teams added to this account yet.",
"ASSIGN_SELECTED_TEAMS": "Assign selected team",
"ASSIGN_SUCCESFUL": "Teams assiged successfully",
"ASSIGN_FAILED": "Failed to assign team, please try again"
} }
} }
} }

View file

@ -54,7 +54,8 @@
"MULTISELECT": { "MULTISELECT": {
"ENTER_TO_SELECT": "Appuyer sur Entrée pour sélectionner", "ENTER_TO_SELECT": "Appuyer sur Entrée pour sélectionner",
"ENTER_TO_REMOVE": "Appuyer sur Entrée pour supprimer", "ENTER_TO_REMOVE": "Appuyer sur Entrée pour supprimer",
"SELECT_ONE": "Sélectionnez un" "SELECT_ONE": "Sélectionnez un",
"SELECT": "Select"
} }
}, },
"NOTIFICATIONS_PAGE": { "NOTIFICATIONS_PAGE": {

View file

@ -416,7 +416,8 @@
"CAMPAIGN": "Campagnes", "CAMPAIGN": "Campagnes",
"PRE_CHAT_FORM": "Formulaire avant chat", "PRE_CHAT_FORM": "Formulaire avant chat",
"BUSINESS_HOURS": "Heures de bureau", "BUSINESS_HOURS": "Heures de bureau",
"WIDGET_BUILDER": "Widget Builder" "WIDGET_BUILDER": "Widget Builder",
"BOT_CONFIGURATION": "Bot Configuration"
}, },
"SETTINGS": "Paramètres", "SETTINGS": "Paramètres",
"FEATURES": { "FEATURES": {

View file

@ -1,5 +1,70 @@
{ {
"AGENT_BOTS": { "AGENT_BOTS": {
"HEADER": "בוטים" "HEADER": "בוטים",
"LOADING_EDITOR": "Loading Editor...",
"HEADER_BTN_TXT": "Add Bot Configuration",
"SIDEBAR_TXT": "<p><b>Agent Bots</b> <p>Agent bots allows you to automate the conversations</p>",
"CSML_BOT_EDITOR": {
"NAME": {
"LABEL": "Bot Name",
"PLACEHOLDER": "Give your bot a name",
"ERROR": "Bot name is required"
},
"DESCRIPTION": {
"LABEL": "Bot Description",
"PLACEHOLDER": "What does this bot do?"
},
"BOT_CONFIG": {
"ERROR": "Please enter your CSML bot configuration above",
"API_ERROR": "Your CSML configuration is invalid, please fix it and try again."
},
"SUBMIT": "Validate and save"
},
"BOT_CONFIGURATION": {
"TITLE": "Select an agent bot",
"DESC": "You can set an agent bot from the list to this inbox. The bot can initially handle the conversation and transfer it to an agent when needed.",
"SUBMIT": "עדכן",
"SUCCESS_MESSAGE": "Successfully updated the agent bot",
"ERROR_MESSAGE": "Could not update the agent bot, please try again later",
"SELECT_PLACEHOLDER": "Select Bot"
},
"ADD": {
"TITLE": "Configure new bot",
"CANCEL_BUTTON_TEXT": "ביטול",
"API": {
"SUCCESS_MESSAGE": "Bot added successfully",
"ERROR_MESSAGE": "Could not add bot, Please try again later"
}
},
"LIST": {
"404": "No Bots found, you can create a bot by clicking the 'Configure new bot' Button ↗",
"LOADING": "Fetching Bots...",
"TYPE": "Bot Type"
},
"DELETE": {
"BUTTON_TEXT": "מחק",
"TITLE": "Delete Bot",
"SUBMIT": "מחק",
"CANCEL_BUTTON_TEXT": "ביטול",
"DESCRIPTION": "Are you sure you want to delete this bot? This action is irreversible",
"API": {
"SUCCESS_MESSAGE": "Bot deleted successfully",
"ERROR_MESSAGE": "Could not able to delete bot, Please try again later"
}
},
"EDIT": {
"BUTTON_TEXT": "ערוך",
"LOADING": "Fetching Bots...",
"TITLE": "Edit Bot",
"CANCEL_BUTTON_TEXT": "ביטול",
"API": {
"SUCCESS_MESSAGE": "Bot updated successfully",
"ERROR_MESSAGE": "Could not update bot, Please try again later"
}
},
"TYPES": {
"WEBHOOK": "Webhook Bot",
"CSML": "CSML Bot"
}
} }
} }

View file

@ -86,7 +86,9 @@
"RESET_MESSAGE": "Changing event type will reset the conditions and events you have added below" "RESET_MESSAGE": "Changing event type will reset the conditions and events you have added below"
}, },
"CONDITION": { "CONDITION": {
"DELETE_MESSAGE": "You need to have atleast one condition to save" "DELETE_MESSAGE": "You need to have atleast one condition to save",
"CONTACT_CUSTOM_ATTR_LABEL": "Contact Custom Attributes",
"CONVERSATION_CUSTOM_ATTR_LABEL": "Conversation Custom Attributes"
}, },
"ACTION": { "ACTION": {
"DELETE_MESSAGE": "You need to have atleast one action to save", "DELETE_MESSAGE": "You need to have atleast one action to save",

View file

@ -8,6 +8,7 @@
"ASSIGN_LABEL": "שייך", "ASSIGN_LABEL": "שייך",
"YES": "כן", "YES": "כן",
"ASSIGN_AGENT_TOOLTIP": "שייך סוכן", "ASSIGN_AGENT_TOOLTIP": "שייך סוכן",
"ASSIGN_TEAM_TOOLTIP": "שייך צוות",
"ASSIGN_SUCCESFUL": "שיוך בוצע בהצלחה", "ASSIGN_SUCCESFUL": "שיוך בוצע בהצלחה",
"ASSIGN_FAILED": "שיוך נכשל, נסה שנית", "ASSIGN_FAILED": "שיוך נכשל, נסה שנית",
"RESOLVE_SUCCESFUL": "שיחה טופלה בהצלחה", "RESOLVE_SUCCESFUL": "שיחה טופלה בהצלחה",
@ -26,6 +27,14 @@
"ASSIGN_SELECTED_LABELS": "שייך תוויות נבחרות", "ASSIGN_SELECTED_LABELS": "שייך תוויות נבחרות",
"ASSIGN_SUCCESFUL": "תוויות שוייכו בהצלחה", "ASSIGN_SUCCESFUL": "תוויות שוייכו בהצלחה",
"ASSIGN_FAILED": "שיוך תוויות נכשל, נסה שנית" "ASSIGN_FAILED": "שיוך תוויות נכשל, נסה שנית"
},
"TEAMS": {
"TEAM_SELECT_LABEL": "Select Team",
"NONE": "כלום",
"NO_TEAMS_AVAILABLE": "There are no teams added to this account yet.",
"ASSIGN_SELECTED_TEAMS": "Assign selected team",
"ASSIGN_SUCCESFUL": "Teams assiged successfully",
"ASSIGN_FAILED": "Failed to assign team, please try again"
} }
} }
} }

View file

@ -54,7 +54,8 @@
"MULTISELECT": { "MULTISELECT": {
"ENTER_TO_SELECT": "הקש אנטר כדי לבחור", "ENTER_TO_SELECT": "הקש אנטר כדי לבחור",
"ENTER_TO_REMOVE": "הקש אנטר כדי להסיר", "ENTER_TO_REMOVE": "הקש אנטר כדי להסיר",
"SELECT_ONE": "תבחר אחד" "SELECT_ONE": "תבחר אחד",
"SELECT": "Select"
} }
}, },
"NOTIFICATIONS_PAGE": { "NOTIFICATIONS_PAGE": {

View file

@ -416,7 +416,8 @@
"CAMPAIGN": "קמפיין", "CAMPAIGN": "קמפיין",
"PRE_CHAT_FORM": "טופס צ'אט מקדים", "PRE_CHAT_FORM": "טופס צ'אט מקדים",
"BUSINESS_HOURS": "שעות פעילות", "BUSINESS_HOURS": "שעות פעילות",
"WIDGET_BUILDER": "Widget Builder" "WIDGET_BUILDER": "Widget Builder",
"BOT_CONFIGURATION": "Bot Configuration"
}, },
"SETTINGS": "הגדרות", "SETTINGS": "הגדרות",
"FEATURES": { "FEATURES": {

View file

@ -1,5 +1,70 @@
{ {
"AGENT_BOTS": { "AGENT_BOTS": {
"HEADER": "Bots" "HEADER": "Bots",
"LOADING_EDITOR": "Loading Editor...",
"HEADER_BTN_TXT": "Add Bot Configuration",
"SIDEBAR_TXT": "<p><b>Agent Bots</b> <p>Agent bots allows you to automate the conversations</p>",
"CSML_BOT_EDITOR": {
"NAME": {
"LABEL": "Bot Name",
"PLACEHOLDER": "Give your bot a name",
"ERROR": "Bot name is required"
},
"DESCRIPTION": {
"LABEL": "Bot Description",
"PLACEHOLDER": "What does this bot do?"
},
"BOT_CONFIG": {
"ERROR": "Please enter your CSML bot configuration above",
"API_ERROR": "Your CSML configuration is invalid, please fix it and try again."
},
"SUBMIT": "Validate and save"
},
"BOT_CONFIGURATION": {
"TITLE": "Select an agent bot",
"DESC": "You can set an agent bot from the list to this inbox. The bot can initially handle the conversation and transfer it to an agent when needed.",
"SUBMIT": "Update",
"SUCCESS_MESSAGE": "Successfully updated the agent bot",
"ERROR_MESSAGE": "Could not update the agent bot, please try again later",
"SELECT_PLACEHOLDER": "Select Bot"
},
"ADD": {
"TITLE": "Configure new bot",
"CANCEL_BUTTON_TEXT": "Cancel",
"API": {
"SUCCESS_MESSAGE": "Bot added successfully",
"ERROR_MESSAGE": "Could not add bot, Please try again later"
}
},
"LIST": {
"404": "No Bots found, you can create a bot by clicking the 'Configure new bot' Button ↗",
"LOADING": "Fetching Bots...",
"TYPE": "Bot Type"
},
"DELETE": {
"BUTTON_TEXT": "Delete",
"TITLE": "Delete Bot",
"SUBMIT": "Delete",
"CANCEL_BUTTON_TEXT": "Cancel",
"DESCRIPTION": "Are you sure you want to delete this bot? This action is irreversible",
"API": {
"SUCCESS_MESSAGE": "Bot deleted successfully",
"ERROR_MESSAGE": "Could not able to delete bot, Please try again later"
}
},
"EDIT": {
"BUTTON_TEXT": "Edit",
"LOADING": "Fetching Bots...",
"TITLE": "Edit Bot",
"CANCEL_BUTTON_TEXT": "Cancel",
"API": {
"SUCCESS_MESSAGE": "Bot updated successfully",
"ERROR_MESSAGE": "Could not update bot, Please try again later"
}
},
"TYPES": {
"WEBHOOK": "Webhook Bot",
"CSML": "CSML Bot"
}
} }
} }

View file

@ -86,7 +86,9 @@
"RESET_MESSAGE": "Changing event type will reset the conditions and events you have added below" "RESET_MESSAGE": "Changing event type will reset the conditions and events you have added below"
}, },
"CONDITION": { "CONDITION": {
"DELETE_MESSAGE": "You need to have atleast one condition to save" "DELETE_MESSAGE": "You need to have atleast one condition to save",
"CONTACT_CUSTOM_ATTR_LABEL": "Contact Custom Attributes",
"CONVERSATION_CUSTOM_ATTR_LABEL": "Conversation Custom Attributes"
}, },
"ACTION": { "ACTION": {
"DELETE_MESSAGE": "You need to have atleast one action to save", "DELETE_MESSAGE": "You need to have atleast one action to save",

View file

@ -8,6 +8,7 @@
"ASSIGN_LABEL": "Assign", "ASSIGN_LABEL": "Assign",
"YES": "Yes", "YES": "Yes",
"ASSIGN_AGENT_TOOLTIP": "Assign Agent", "ASSIGN_AGENT_TOOLTIP": "Assign Agent",
"ASSIGN_TEAM_TOOLTIP": "Assign team",
"ASSIGN_SUCCESFUL": "Conversations assigned successfully", "ASSIGN_SUCCESFUL": "Conversations assigned successfully",
"ASSIGN_FAILED": "Failed to assign conversations, please try again", "ASSIGN_FAILED": "Failed to assign conversations, please try again",
"RESOLVE_SUCCESFUL": "Conversations resolved successfully", "RESOLVE_SUCCESFUL": "Conversations resolved successfully",
@ -26,6 +27,14 @@
"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"
},
"TEAMS": {
"TEAM_SELECT_LABEL": "Select Team",
"NONE": "None",
"NO_TEAMS_AVAILABLE": "There are no teams added to this account yet.",
"ASSIGN_SELECTED_TEAMS": "Assign selected team",
"ASSIGN_SUCCESFUL": "Teams assiged successfully",
"ASSIGN_FAILED": "Failed to assign team, please try again"
} }
} }
} }

View file

@ -54,7 +54,8 @@
"MULTISELECT": { "MULTISELECT": {
"ENTER_TO_SELECT": "Press enter to select", "ENTER_TO_SELECT": "Press enter to select",
"ENTER_TO_REMOVE": "Press enter to remove", "ENTER_TO_REMOVE": "Press enter to remove",
"SELECT_ONE": "Select one" "SELECT_ONE": "Select one",
"SELECT": "Select"
} }
}, },
"NOTIFICATIONS_PAGE": { "NOTIFICATIONS_PAGE": {

View file

@ -416,7 +416,8 @@
"CAMPAIGN": "Campaigns", "CAMPAIGN": "Campaigns",
"PRE_CHAT_FORM": "Pre Chat Form", "PRE_CHAT_FORM": "Pre Chat Form",
"BUSINESS_HOURS": "Business Hours", "BUSINESS_HOURS": "Business Hours",
"WIDGET_BUILDER": "Widget Builder" "WIDGET_BUILDER": "Widget Builder",
"BOT_CONFIGURATION": "Bot Configuration"
}, },
"SETTINGS": "Settings", "SETTINGS": "Settings",
"FEATURES": { "FEATURES": {

Some files were not shown because too many files have changed in this diff Show more