Merge branch 'develop' into feat/new-auth-screens

This commit is contained in:
Sivin Varghese 2022-06-02 18:43:32 +05:30 committed by GitHub
commit 73a8c07f7b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
396 changed files with 8177 additions and 2997 deletions

View file

@ -7,7 +7,7 @@ defaults: &defaults
working_directory: ~/build
docker:
# specify the version you desire here
- image: cimg/ruby:3.0.2-browsers
- image: cimg/ruby:3.0.4-browsers
# Specify service dependencies here if necessary
# CircleCI maintains a library of pre-built images
@ -40,14 +40,13 @@ jobs:
- restore_cache:
keys:
- chatwoot-bundle-{{ .Environment.CACHE_VERSION }}-{{ checksum "Gemfile.lock" }}
- chatwoot-bundle
- chatwoot-bundle-{{ .Environment.CACHE_VERSION }}-v20220524-{{ checksum "Gemfile.lock" }}
- run: bundle install --frozen --path ~/.bundle
- save_cache:
paths:
- ~/.bundle
key: chatwoot-bundle-{{ .Environment.CACHE_VERSION }}-{{ checksum "Gemfile.lock" }}
key: chatwoot-bundle-{{ .Environment.CACHE_VERSION }}-v20220524-{{ checksum "Gemfile.lock" }}
# Only necessary if app uses webpacker or yarn in some other way

View file

@ -47,7 +47,7 @@ jobs:
- uses: ruby/setup-ruby@v1
with:
ruby-version: 3.0.2 # Not needed with a .ruby-version file
ruby-version: 3.0.4 # Not needed with a .ruby-version file
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
- name: yarn

View file

@ -1 +1 @@
3.0.2
3.0.4

View file

@ -1,6 +1,6 @@
source 'https://rubygems.org'
ruby '3.0.2'
ruby '3.0.4'
##-- base gems for rails --##
gem 'rack-cors', require: 'rack/cors'

View file

@ -378,14 +378,14 @@ GEM
netrc (0.11.0)
newrelic_rpm (8.7.0)
nio4r (2.5.8)
nokogiri (1.13.5)
nokogiri (1.13.6)
mini_portile2 (~> 2.8.0)
racc (~> 1.4)
nokogiri (1.13.5-arm64-darwin)
nokogiri (1.13.6-arm64-darwin)
racc (~> 1.4)
nokogiri (1.13.5-x86_64-darwin)
nokogiri (1.13.6-x86_64-darwin)
racc (~> 1.4)
nokogiri (1.13.5-x86_64-linux)
nokogiri (1.13.6-x86_64-linux)
racc (~> 1.4)
oauth (0.5.8)
orm_adapter (0.5.0)
@ -409,7 +409,7 @@ GEM
activesupport (>= 3.0.0)
raabro (1.4.0)
racc (1.6.0)
rack (2.2.3)
rack (2.2.3.1)
rack-attack (6.6.0)
rack (>= 1.0, < 3)
rack-cors (1.1.1)
@ -752,7 +752,7 @@ DEPENDENCIES
working_hours
RUBY VERSION
ruby 3.0.2p107
ruby 3.0.4p208
BUNDLED WITH
2.3.10

View file

@ -0,0 +1,24 @@
class Api::V1::Accounts::AssignableAgentsController < Api::V1::Accounts::BaseController
before_action :fetch_inboxes
def index
agent_ids = @inboxes.map do |inbox|
authorize inbox, :show?
member_ids = inbox.members.pluck(:user_id)
member_ids
end
agent_ids = agent_ids.inject(:&)
agents = Current.account.users.where(id: agent_ids)
@assignable_agents = (agents + Current.account.administrators).uniq
end
private
def fetch_inboxes
@inboxes = Current.account.inboxes.find(permitted_params[:inbox_ids])
end
def permitted_params
params.permit(inbox_ids: [])
end
end

View file

@ -1,4 +1,5 @@
class Api::V1::Accounts::Kbase::CategoriesController < Api::V1::Accounts::Kbase::BaseController
class Api::V1::Accounts::CategoriesController < Api::V1::Accounts::BaseController
before_action :portal
before_action :fetch_category, except: [:index, :create]
def index
@ -24,6 +25,10 @@ class Api::V1::Accounts::Kbase::CategoriesController < Api::V1::Accounts::Kbase:
@category = @portal.categories.find(params[:id])
end
def portal
@portal ||= Current.account.portals.find_by(slug: params[:portal_id])
end
def category_params
params.require(:category).permit(
:name, :description, :position

View file

@ -5,7 +5,7 @@ class Api::V1::Accounts::CsatSurveyResponsesController < Api::V1::Accounts::Base
RESULTS_PER_PAGE = 25
before_action :check_authorization
before_action :set_csat_survey_responses, only: [:index, :metrics]
before_action :set_csat_survey_responses, only: [:index, :metrics, :download]
before_action :set_current_page, only: [:index]
before_action :set_current_page_surveys, only: [:index]
before_action :set_total_sent_messages_count, only: [:metrics]
@ -19,6 +19,12 @@ class Api::V1::Accounts::CsatSurveyResponsesController < Api::V1::Accounts::Base
@ratings_count = @csat_survey_responses.group(:rating).count
end
def download
response.headers['Content-Type'] = 'text/csv'
response.headers['Content-Disposition'] = 'attachment; filename=csat_report.csv'
render layout: false, template: 'api/v1/accounts/csat_survey_responses/download.csv.erb', format: 'csv'
end
private
def set_total_sent_messages_count

View file

@ -0,0 +1,44 @@
class Api::V1::Accounts::DashboardAppsController < Api::V1::Accounts::BaseController
before_action :fetch_dashboard_apps, except: [:create]
before_action :fetch_dashboard_app, only: [:show, :update, :destroy]
def index; end
def show; end
def create
@dashboard_app = Current.account.dashboard_apps.create!(
permitted_payload.merge(user_id: Current.user.id)
)
end
def update
@dashboard_app.update!(permitted_payload)
end
def destroy
@dashboard_app.destroy!
head :no_content
end
private
def fetch_dashboard_apps
@dashboard_apps = Current.account.dashboard_apps
end
def fetch_dashboard_app
@dashboard_app = @dashboard_apps.find(permitted_params[:id])
end
def permitted_payload
params.require(:dashboard_app).permit(
:title,
content: [:url, :type]
)
end
def permitted_params
params.permit(:id)
end
end

View file

@ -12,6 +12,7 @@ class Api::V1::Accounts::InboxesController < Api::V1::Accounts::BaseController
def show; end
# Deprecated: This API will be removed in 2.7.0
def assignable_agents
@assignable_agents = (Current.account.users.where(id: @inbox.members.select(:user_id)) + Current.account.administrators).uniq
end

View file

@ -1,9 +0,0 @@
class Api::V1::Accounts::Kbase::BaseController < Api::V1::Accounts::BaseController
before_action :portal
private
def portal
@portal ||= Current.account.kbase_portals.find_by(slug: params[:portal_id])
end
end

View file

@ -1,14 +1,14 @@
class Api::V1::Accounts::Kbase::PortalsController < Api::V1::Accounts::BaseController
class Api::V1::Accounts::PortalsController < Api::V1::Accounts::BaseController
before_action :fetch_portal, except: [:index, :create]
def index
@portals = Current.account.kbase_portals
@portals = Current.account.portals
end
def show; end
def create
@portal = Current.account.kbase_portals.create!(portal_params)
@portal = Current.account.portals.create!(portal_params)
end
def update
@ -23,7 +23,7 @@ class Api::V1::Accounts::Kbase::PortalsController < Api::V1::Accounts::BaseContr
private
def fetch_portal
@portal = Current.account.kbase_portals.find_by(slug: permitted_params[:id])
@portal = Current.account.portals.find_by(slug: permitted_params[:id])
end
def permitted_params
@ -32,7 +32,7 @@ class Api::V1::Accounts::Kbase::PortalsController < Api::V1::Accounts::BaseContr
def portal_params
params.require(:portal).permit(
:account_id, :color, :custom_domain, :header_text, :homepage_link, :name, :page_title, :slug
:account_id, :color, :custom_domain, :header_text, :homepage_link, :name, :page_title, :slug, :archived
)
end
end

View file

@ -54,6 +54,7 @@ class Api::V1::Widget::BaseController < ApplicationController
).perform
else
@contact.update!(email: email)
update_contact_name
end
end
@ -67,9 +68,14 @@ class Api::V1::Widget::BaseController < ApplicationController
).perform
else
@contact.update!(phone_number: phone_number)
update_contact_name
end
end
def update_contact_name
@contact.update!(name: contact_name) if contact_name.present?
end
def contact_email
permitted_params.dig(:contact, :email)&.downcase
end

View file

@ -16,7 +16,6 @@ class Api::V1::Widget::ConversationsController < Api::V1::Widget::BaseController
def process_update_contact
update_contact(contact_email) if @contact.email.blank? && contact_email.present?
update_contact_phone_number(contact_phone_number) if @contact.phone_number.blank? && contact_phone_number.present?
@contact.update!(name: contact_name) if contact_name.present?
end
def update_last_seen

View file

@ -1,4 +1,5 @@
class Api::V2::Accounts::ReportsController < Api::V1::Accounts::BaseController
include Api::V2::Accounts::ReportsHelper
before_action :check_authorization
def index
@ -12,27 +13,23 @@ class Api::V2::Accounts::ReportsController < Api::V1::Accounts::BaseController
end
def agents
response.headers['Content-Type'] = 'text/csv'
response.headers['Content-Disposition'] = 'attachment; filename=agents_report.csv'
render layout: false, template: 'api/v2/accounts/reports/agents.csv.erb', format: 'csv'
@report_data = generate_agents_report
generate_csv('agents_report', 'api/v2/accounts/reports/agents.csv.erb')
end
def inboxes
response.headers['Content-Type'] = 'text/csv'
response.headers['Content-Disposition'] = 'attachment; filename=inboxes_report.csv'
render layout: false, template: 'api/v2/accounts/reports/inboxes.csv.erb', format: 'csv'
@report_data = generate_inboxes_report
generate_csv('inboxes_report', 'api/v2/accounts/reports/inboxes.csv.erb')
end
def labels
response.headers['Content-Type'] = 'text/csv'
response.headers['Content-Disposition'] = 'attachment; filename=labels_report.csv'
render layout: false, template: 'api/v2/accounts/reports/labels.csv.erb', format: 'csv'
@report_data = generate_labels_report
generate_csv('labels_report', 'api/v2/accounts/reports/labels.csv.erb')
end
def teams
response.headers['Content-Type'] = 'text/csv'
response.headers['Content-Disposition'] = 'attachment; filename=teams_report.csv'
render layout: false, template: 'api/v2/accounts/reports/teams.csv.erb', format: 'csv'
@report_data = generate_teams_report
generate_csv('teams_report', 'api/v2/accounts/reports/teams.csv.erb')
end
def conversations
@ -43,6 +40,12 @@ class Api::V2::Accounts::ReportsController < Api::V1::Accounts::BaseController
private
def generate_csv(filename, template)
response.headers['Content-Type'] = 'text/csv'
response.headers['Content-Disposition'] = "attachment; filename=#{filename}.csv"
render layout: false, template: template, format: 'csv'
end
def check_authorization
raise Pundit::NotAuthorizedError unless Current.account_user.administrator?
end

View file

@ -38,9 +38,12 @@ class DashboardController < ActionController::Base
end
def app_config
{ APP_VERSION: Chatwoot.config[:version],
{
APP_VERSION: Chatwoot.config[:version],
VAPID_PUBLIC_KEY: VapidService.public_key,
ENABLE_ACCOUNT_SIGNUP: GlobalConfigService.load('ENABLE_ACCOUNT_SIGNUP', 'false'),
FB_APP_ID: GlobalConfigService.load('FB_APP_ID', '') }
FB_APP_ID: GlobalConfigService.load('FB_APP_ID', ''),
FACEBOOK_API_VERSION: 'v13.0'
}
end
end

View file

@ -51,6 +51,7 @@ class ConversationFinder
filter_by_team if @team
filter_by_labels if params[:labels]
filter_by_query if params[:q]
filter_by_reply_status
end
def set_inboxes
@ -90,6 +91,10 @@ class ConversationFinder
@conversations
end
def filter_by_reply_status
@conversations = @conversations.where(first_reply_created_at: nil) if params[:reply_status] == 'unattended'
end
def filter_by_query
allowed_message_types = [Message.message_types[:incoming], Message.message_types[:outgoing]]
@conversations = conversations.joins(:messages).where('messages.content ILIKE :search', search: "%#{params[:q]}%")

View file

@ -0,0 +1,56 @@
module Api::V2::Accounts::ReportsHelper
def generate_agents_report
Current.account.users.map do |agent|
agent_report = generate_report({ type: :agent, id: agent.id })
[agent.name] + generate_readable_report_metrics(agent_report)
end
end
def generate_inboxes_report
Current.account.inboxes.map do |inbox|
inbox_report = generate_report({ type: :inbox, id: inbox.id })
[inbox.name, inbox.channel&.name] + generate_readable_report_metrics(inbox_report)
end
end
def generate_teams_report
Current.account.teams.map do |team|
team_report = generate_report({ type: :team, id: team.id })
[team.name] + generate_readable_report_metrics(team_report)
end
end
def generate_labels_report
Current.account.labels.map do |label|
label_report = generate_report({ type: :label, id: label.id })
[label.title] + generate_readable_report_metrics(label_report)
end
end
def generate_report(report_params)
V2::ReportBuilder.new(
Current.account,
report_params.merge(
{
since: params[:since],
until: params[:until],
business_hours: ActiveModel::Type::Boolean.new.cast(params[:business_hours])
}
)
).summary
end
private
def generate_readable_report_metrics(report_metric)
[
report_metric[:conversations_count],
time_to_minutes(report_metric[:avg_first_response_time]),
time_to_minutes(report_metric[:avg_resolution_time])
]
end
def time_to_minutes(time_in_seconds)
(time_in_seconds / 60).to_i
end
end

View file

@ -17,30 +17,30 @@ module ReportHelper
end
def conversations_count
(get_grouped_values scope.conversations).count
(get_grouped_values scope.conversations.where(account_id: account.id)).count
end
def incoming_messages_count
(get_grouped_values scope.messages.incoming.unscope(:order)).count
(get_grouped_values scope.messages.where(account_id: account.id).incoming.unscope(:order)).count
end
def outgoing_messages_count
(get_grouped_values scope.messages.outgoing.unscope(:order)).count
(get_grouped_values scope.messages.where(account_id: account.id).outgoing.unscope(:order)).count
end
def resolutions_count
(get_grouped_values scope.conversations.resolved).count
(get_grouped_values scope.conversations.where(account_id: account.id).resolved).count
end
def avg_first_response_time
grouped_reporting_events = (get_grouped_values scope.reporting_events.where(name: 'first_response'))
grouped_reporting_events = (get_grouped_values scope.reporting_events.where(name: 'first_response', account_id: account.id))
return grouped_reporting_events.average(:value_in_business_hours) if params[:business_hours]
grouped_reporting_events.average(:value)
end
def avg_resolution_time
grouped_reporting_events = (get_grouped_values scope.reporting_events.where(name: 'conversation_resolved'))
grouped_reporting_events = (get_grouped_values scope.reporting_events.where(name: 'conversation_resolved', account_id: account.id))
return grouped_reporting_events.average(:value_in_business_hours) if params[:business_hours]
grouped_reporting_events.average(:value)
@ -48,7 +48,7 @@ module ReportHelper
def avg_resolution_time_summary
reporting_events = scope.reporting_events
.where(name: 'conversation_resolved', created_at: range)
.where(name: 'conversation_resolved', account_id: account.id, created_at: range)
avg_rt = params[:business_hours] ? reporting_events.average(:value_in_business_hours) : reporting_events.average(:value)
return 0 if avg_rt.blank?
@ -58,7 +58,7 @@ module ReportHelper
def avg_first_response_time_summary
reporting_events = scope.reporting_events
.where(name: 'first_response', created_at: range)
.where(name: 'first_response', account_id: account.id, created_at: range)
avg_frt = params[:business_hours] ? reporting_events.average(:value_in_business_hours) : reporting_events.average(:value)
return 0 if avg_frt.blank?

View file

@ -0,0 +1,16 @@
/* global axios */
import ApiClient from './ApiClient';
class AssignableAgents extends ApiClient {
constructor() {
super('assignable_agents', { accountScoped: true });
}
get(inboxIds) {
return axios.get(this.url, {
params: { inbox_ids: inboxIds },
});
}
}
export default new AssignableAgents();

View file

@ -18,6 +18,17 @@ class CSATReportsAPI extends ApiClient {
});
}
download({ from, to, user_ids } = {}) {
return axios.get(`${this.url}/download`, {
params: {
since: from,
until: to,
sort: '-created_at',
user_ids,
},
});
}
getMetrics({ from, to, user_ids } = {}) {
return axios.get(`${this.url}/metrics`, {
params: { since: from, until: to, user_ids },

View file

@ -0,0 +1,9 @@
import ApiClient from './ApiClient';
class DashboardAppsAPI extends ApiClient {
constructor() {
super('dashboard_apps', { accountScoped: true });
}
}
export default new DashboardAppsAPI();

View file

@ -6,10 +6,6 @@ class Inboxes extends ApiClient {
super('inboxes', { accountScoped: true });
}
getAssignableAgents(inboxId) {
return axios.get(`${this.url}/${inboxId}/assignable_agents`);
}
getCampaigns(inboxId) {
return axios.get(`${this.url}/${inboxId}/campaigns`);
}

View file

@ -53,27 +53,27 @@ class ReportsAPI extends ApiClient {
});
}
getAgentReports(since, until) {
getAgentReports({ from: since, to: until, businessHours }) {
return axios.get(`${this.url}/agents`, {
params: { since, until },
params: { since, until, business_hours: businessHours },
});
}
getLabelReports(since, until) {
getLabelReports({ from: since, to: until, businessHours }) {
return axios.get(`${this.url}/labels`, {
params: { since, until },
params: { since, until, business_hours: businessHours },
});
}
getInboxReports(since, until) {
getInboxReports({ from: since, to: until, businessHours }) {
return axios.get(`${this.url}/inboxes`, {
params: { since, until },
params: { since, until, business_hours: businessHours },
});
}
getTeamReports(since, until) {
getTeamReports({ from: since, to: until, businessHours }) {
return axios.get(`${this.url}/teams`, {
params: { since, until },
params: { since, until, business_hours: businessHours },
});
}
}

View file

@ -0,0 +1,18 @@
import assignableAgentsAPI from '../assignableAgents';
import describeWithAPIMock from './apiSpecHelper';
describe('#AssignableAgentsAPI', () => {
describeWithAPIMock('API calls', context => {
it('#getAssignableAgents', () => {
assignableAgentsAPI.get([1]);
expect(context.axiosMock.get).toHaveBeenCalledWith(
'/api/v1/assignable_agents',
{
params: {
inbox_ids: [1],
},
}
);
});
});
});

View file

@ -33,5 +33,23 @@ describe('#Reports API', () => {
}
);
});
it('#download', () => {
csatReportsAPI.download({
from: 1622485800,
to: 1623695400,
user_ids: 1,
});
expect(context.axiosMock.get).toHaveBeenCalledWith(
'/api/v1/csat_survey_responses/download',
{
params: {
since: 1622485800,
until: 1623695400,
user_ids: 1,
sort: '-created_at',
},
}
);
});
});
});

View file

@ -0,0 +1,13 @@
import dashboardAppsAPI from '../dashboardApps';
import ApiClient from '../ApiClient';
describe('#dashboardAppsAPI', () => {
it('creates correct instance', () => {
expect(dashboardAppsAPI).toBeInstanceOf(ApiClient);
expect(dashboardAppsAPI).toHaveProperty('get');
expect(dashboardAppsAPI).toHaveProperty('show');
expect(dashboardAppsAPI).toHaveProperty('create');
expect(dashboardAppsAPI).toHaveProperty('update');
expect(dashboardAppsAPI).toHaveProperty('delete');
});
});

View file

@ -10,17 +10,9 @@ describe('#InboxesAPI', () => {
expect(inboxesAPI).toHaveProperty('create');
expect(inboxesAPI).toHaveProperty('update');
expect(inboxesAPI).toHaveProperty('delete');
expect(inboxesAPI).toHaveProperty('getAssignableAgents');
expect(inboxesAPI).toHaveProperty('getCampaigns');
});
describeWithAPIMock('API calls', context => {
it('#getAssignableAgents', () => {
inboxesAPI.getAssignableAgents(1);
expect(context.axiosMock.get).toHaveBeenCalledWith(
'/api/v1/inboxes/1/assignable_agents'
);
});
it('#getCampaigns', () => {
inboxesAPI.getCampaigns(2);
expect(context.axiosMock.get).toHaveBeenCalledWith(

View file

@ -47,20 +47,25 @@ describe('#Reports API', () => {
});
it('#getAgentReports', () => {
reportsAPI.getAgentReports(1621103400, 1621621800);
reportsAPI.getAgentReports({
from: 1621103400,
to: 1621621800,
businessHours: true,
});
expect(context.axiosMock.get).toHaveBeenCalledWith(
'/api/v2/reports/agents',
{
params: {
since: 1621103400,
until: 1621621800,
business_hours: true,
},
}
);
});
it('#getLabelReports', () => {
reportsAPI.getLabelReports(1621103400, 1621621800);
reportsAPI.getLabelReports({ from: 1621103400, to: 1621621800 });
expect(context.axiosMock.get).toHaveBeenCalledWith(
'/api/v2/reports/labels',
{
@ -73,7 +78,7 @@ describe('#Reports API', () => {
});
it('#getInboxReports', () => {
reportsAPI.getInboxReports(1621103400, 1621621800);
reportsAPI.getInboxReports({ from: 1621103400, to: 1621621800 });
expect(context.axiosMock.get).toHaveBeenCalledWith(
'/api/v2/reports/inboxes',
{
@ -86,7 +91,7 @@ describe('#Reports API', () => {
});
it('#getTeamReports', () => {
reportsAPI.getTeamReports(1621103400, 1621621800);
reportsAPI.getTeamReports({ from: 1621103400, to: 1621621800 });
expect(context.axiosMock.get).toHaveBeenCalledWith(
'/api/v2/reports/teams',
{

View file

@ -235,11 +235,16 @@ export default {
return {};
},
assigneeTabItems() {
return this.$t('CHAT_LIST.ASSIGNEE_TYPE_TABS').map(item => {
const count = this.conversationStats[item.COUNT_KEY] || 0;
const ASSIGNEE_TYPE_TAB_KEYS = {
me: 'mineCount',
unassigned: 'unAssignedCount',
all: 'allCount',
};
return Object.keys(ASSIGNEE_TYPE_TAB_KEYS).map(key => {
const count = this.conversationStats[ASSIGNEE_TYPE_TAB_KEYS[key]] || 0;
return {
key: item.KEY,
name: item.NAME,
key,
name: this.$t(`CHAT_LIST.ASSIGNEE_TYPE_TABS.${key}`),
count,
};
});

View file

@ -0,0 +1,64 @@
<template>
<div class="dashboard-app--container">
<div
v-for="(configItem, index) in config"
:key="index"
class="dashboard-app--list"
>
<iframe
v-if="configItem.type === 'frame' && configItem.url"
:id="`dashboard-app--frame-${index}`"
:src="configItem.url"
@load="() => onIframeLoad(index)"
/>
</div>
</div>
</template>
<script>
export default {
props: {
config: {
type: Array,
default: () => [],
},
currentChat: {
type: Object,
default: () => ({}),
},
},
computed: {
dashboardAppContext() {
return {
conversation: this.currentChat,
contact: this.$store.getters['contacts/getContact'](this.contactId),
};
},
contactId() {
return this.currentChat?.meta?.sender?.id;
},
},
methods: {
onIframeLoad(index) {
const frameElement = document.getElementById(
`dashboard-app--frame-${index}`
);
const eventData = { event: 'appContext', data: this.dashboardAppContext };
frameElement.contentWindow.postMessage(JSON.stringify(eventData), '*');
},
},
};
</script>
<style scoped>
.dashboard-app--container,
.dashboard-app--list,
.dashboard-app--list iframe {
height: 100%;
width: 100%;
}
.dashboard-app--list iframe {
border: 0;
}
</style>

View file

@ -6,7 +6,20 @@
:is-contact-panel-open="isContactPanelOpen"
@contact-panel-toggle="onToggleContactPanel"
/>
<div class="messages-and-sidebar">
<woot-tabs
v-if="dashboardApps.length && currentChat.id"
:index="activeIndex"
class="dashboard-app--tabs"
@change="onDashboardAppTabChange"
>
<woot-tabs-item
v-for="tab in dashboardAppTabs"
:key="tab.key"
:name="tab.name"
:show-badge="false"
/>
</woot-tabs>
<div v-if="!activeIndex" class="messages-and-sidebar">
<messages-view
v-if="currentChat.id"
:inbox-id="inboxId"
@ -14,7 +27,6 @@
@contact-panel-toggle="onToggleContactPanel"
/>
<empty-state v-else />
<div v-show="showContactPanel" class="conversation-sidebar-wrap">
<contact-panel
v-if="showContactPanel"
@ -24,21 +36,29 @@
/>
</div>
</div>
<dashboard-app-frame
v-else
:key="currentChat.id"
:config="dashboardApps[activeIndex - 1].content"
:current-chat="currentChat"
/>
</div>
</template>
<script>
import { mapGetters } from 'vuex';
import ContactPanel from 'dashboard/routes/dashboard/conversation/ContactPanel';
import ConversationHeader from './ConversationHeader';
import DashboardAppFrame from '../DashboardApp/Frame.vue';
import EmptyState from './EmptyState';
import MessagesView from './MessagesView';
export default {
components: {
EmptyState,
MessagesView,
ContactPanel,
ConversationHeader,
DashboardAppFrame,
EmptyState,
MessagesView,
},
props: {
@ -52,8 +72,26 @@ export default {
default: true,
},
},
data() {
return { activeIndex: 0 };
},
computed: {
...mapGetters({ currentChat: 'getSelectedChat' }),
...mapGetters({
currentChat: 'getSelectedChat',
dashboardApps: 'dashboardApps/getRecords',
}),
dashboardAppTabs() {
return [
{
key: 'messages',
name: this.$t('CONVERSATION.DASHBOARD_APP_TAB_MESSAGES'),
},
...this.dashboardApps.map(dashboardApp => ({
key: `dashboard-${dashboardApp.id}`,
name: dashboardApp.title,
})),
];
},
showContactPanel() {
return this.isContactPanelOpen && this.currentChat.id;
},
@ -70,6 +108,7 @@ export default {
},
mounted() {
this.fetchLabels();
this.$store.dispatch('dashboardApps/get');
},
methods: {
fetchLabels() {
@ -81,6 +120,9 @@ export default {
onToggleContactPanel() {
this.$emit('contact-panel-toggle');
},
onDashboardAppTabChange(index) {
this.activeIndex = index;
},
},
};
</script>
@ -96,6 +138,11 @@ export default {
background: var(--color-background-light);
}
.dashboard-app--tabs {
background: var(--white);
margin-top: -1px;
}
.messages-and-sidebar {
display: flex;
background: var(--color-background-light);

View file

@ -29,8 +29,11 @@ export default {
},
computed: {
fileName() {
if (this.url) {
const filename = this.url.substring(this.url.lastIndexOf('/') + 1);
return filename;
return filename || this.$t('CONVERSATION.UNKNOWN_FILE_TYPE');
}
return this.$t('CONVERSATION.UNKNOWN_FILE_TYPE');
},
},
methods: {

View file

@ -1,6 +0,0 @@
export const downloadCsvFile = (fileName, fileContent) => {
const link = document.createElement('a');
link.download = fileName;
link.href = `data:text/csv;charset=utf-8,` + encodeURI(fileContent);
link.click();
};

View file

@ -0,0 +1,22 @@
import fromUnixTime from 'date-fns/fromUnixTime';
import format from 'date-fns/format';
export const downloadCsvFile = (fileName, content) => {
const contentType = 'data:text/csv;charset=utf-8;';
const blob = new Blob([content], { type: contentType });
const url = URL.createObjectURL(blob);
const link = document.createElement('a');
link.setAttribute('download', fileName);
link.setAttribute('href', url);
link.click();
return link;
};
export const generateFileName = ({ type, to, businessHours = false }) => {
let name = `${type}-report-${format(fromUnixTime(to), 'dd-MM-yyyy')}`;
if (businessHours) {
name = `${name}-business-hours`;
}
return `${name}.csv`;
};

View file

@ -1,25 +0,0 @@
export const createMessengerScript = pageId => `
<script>
window.fbAsyncInit = function() {
FB.init({
appId: "${window.chatwootConfig.fbAppId}",
xfbml: true,
version: "v4.0"
});
};
(function(d, s, id){
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) { return; }
js = d.createElement(s); js.id = id;
js.src = "//connect.facebook.net/en_US/sdk.js";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
</script>
<div class="fb-messengermessageus"
messenger_app_id="${window.chatwootConfig.fbAppId}"
page_id="${pageId}"
color="blue"
size="standard" >
</div>
`;

View file

@ -1,21 +0,0 @@
import { downloadCsvFile } from '../downloadCsvFile';
const fileName = 'test.csv';
const fileData = `Agent name,Conversations count,Avg first response time (Minutes),Avg resolution time (Minutes)
Pranav,36,114,28411`;
describe('#downloadCsvFile', () => {
it('should download the csv file', () => {
const link = {
click: jest.fn(),
};
jest.spyOn(document, 'createElement').mockImplementation(() => link);
downloadCsvFile(fileName, fileData);
expect(link.download).toEqual(fileName);
expect(link.href).toEqual(
`data:text/csv;charset=utf-8,${encodeURI(fileData)}`
);
expect(link.click).toHaveBeenCalledTimes(1);
});
});

View file

@ -0,0 +1,13 @@
import { generateFileName } from '../downloadHelper';
describe('#generateFileName', () => {
it('should generate the correct file name', () => {
expect(generateFileName({ type: 'csat', to: 1652812199 })).toEqual(
'csat-report-17-05-2022.csv'
);
expect(
generateFileName({ type: 'csat', to: 1652812199, businessHours: true })
).toEqual('csat-report-17-05-2022-business-hours.csv');
});
});

View file

@ -12,33 +12,11 @@
"INPUT": "البحث عن جهات الاتصال، المحادثات، قوالب الردود الجاهزة .."
},
"FILTER_ALL": "الكل",
"STATUS_TABS": [
{
"NAME": "فتح",
"KEY": "openCount"
"ASSIGNEE_TYPE_TABS": {
"me": "محادثاتي",
"unassigned": "غير مسند",
"all": "الكل"
},
{
"NAME": "مغلقة",
"KEY": "allConvCount"
}
],
"ASSIGNEE_TYPE_TABS": [
{
"NAME": "محادثاتي",
"KEY": "me",
"COUNT_KEY": "mineCount"
},
{
"NAME": "غير مسند",
"KEY": "unassigned",
"COUNT_KEY": "unAssignedCount"
},
{
"NAME": "الكل",
"KEY": "all",
"COUNT_KEY": "allCount"
}
],
"CHAT_STATUS_FILTER_ITEMS": {
"open": {
"TEXT": "فتح"

View file

@ -341,10 +341,6 @@
"AUTO_ASSIGNMENT_SUCCESS_MESSAGE": "تم تحديث إعدادات الإسناد التلقائي بنجاح",
"ERROR_MESSAGE": "تعذر تحديث لون صندوق الدردشة. الرجاء المحاولة مرة أخرى لاحقاً."
},
"AUTO_ASSIGNMENT": {
"ENABLED": "مفعل",
"DISABLED": "معطّل"
},
"EMAIL_COLLECT_BOX": {
"ENABLED": "مفعل",
"DISABLED": "معطّل"
@ -402,6 +398,8 @@
"MESSENGER_SUB_HEAD": "ضع هذا الكود داخل وسم الـ body في موقعك",
"INBOX_AGENTS": "موظف الدعم",
"INBOX_AGENTS_SUB_TEXT": "إضافة أو إزالة موظفين من قناة التواصل هذه",
"AGENT_ASSIGNMENT": "إسناد المحادثات",
"AGENT_ASSIGNMENT_SUB_TEXT": "تحديث إعدادات إسناد المحادثات",
"UPDATE": "تحديث",
"ENABLE_EMAIL_COLLECT_BOX": "تفعيل صندوق جمع البريد الإلكتروني",
"ENABLE_EMAIL_COLLECT_BOX_SUB_TEXT": "تمكين أو تعطيل مربع جمع البريد الإلكتروني في محادثة جديدة",

View file

@ -386,6 +386,7 @@
"CSAT_REPORTS": {
"HEADER": "تقارير CSAT",
"NO_RECORDS": "لا توجد ردود متوفرة على الدراسة الاستقصائية CSAT.",
"DOWNLOAD": "تحميل تقرير رضاء خدمة العملاء",
"FILTERS": {
"AGENTS": {
"PLACEHOLDER": "اختر الوكلاء"

View file

@ -151,7 +151,7 @@
},
"SIDEBAR": {
"CURRENTLY_VIEWING_ACCOUNT": "مشاهدة حاليا:",
"SWITCH": "Switch",
"SWITCH": "تبديل",
"CONVERSATIONS": "المحادثات",
"ALL_CONVERSATIONS": "كل المحادثات",
"MENTIONED_CONVERSATIONS": "الإشارات",

View file

@ -12,33 +12,11 @@
"INPUT": "Търсене на хора, чатове, запазени отговори .."
},
"FILTER_ALL": "Всички",
"STATUS_TABS": [
{
"NAME": "Отворен",
"KEY": "openCount"
"ASSIGNEE_TYPE_TABS": {
"me": "Мой",
"unassigned": "Неназначен",
"all": "Всички"
},
{
"NAME": "Разрешен",
"KEY": "allConvCount"
}
],
"ASSIGNEE_TYPE_TABS": [
{
"NAME": "Мой",
"KEY": "me",
"COUNT_KEY": "mineCount"
},
{
"NAME": "Неназначен",
"KEY": "unassigned",
"COUNT_KEY": "unAssignedCount"
},
{
"NAME": "Всички",
"KEY": "all",
"COUNT_KEY": "allCount"
}
],
"CHAT_STATUS_FILTER_ITEMS": {
"open": {
"TEXT": "Отворен"

View file

@ -341,10 +341,6 @@
"AUTO_ASSIGNMENT_SUCCESS_MESSAGE": "Auto assignment updated successfully",
"ERROR_MESSAGE": "Could not update widget color. Please try again later."
},
"AUTO_ASSIGNMENT": {
"ENABLED": "Enabled",
"DISABLED": "Disabled"
},
"EMAIL_COLLECT_BOX": {
"ENABLED": "Enabled",
"DISABLED": "Disabled"
@ -402,6 +398,8 @@
"MESSENGER_SUB_HEAD": "Place this button inside your body tag",
"INBOX_AGENTS": "Агенти",
"INBOX_AGENTS_SUB_TEXT": "Add or remove agents from this inbox",
"AGENT_ASSIGNMENT": "Conversation Assignment",
"AGENT_ASSIGNMENT_SUB_TEXT": "Update conversation assignment settings",
"UPDATE": "Update",
"ENABLE_EMAIL_COLLECT_BOX": "Enable email collect box",
"ENABLE_EMAIL_COLLECT_BOX_SUB_TEXT": "Enable or disable email collect box on new conversation",

View file

@ -386,6 +386,7 @@
"CSAT_REPORTS": {
"HEADER": "CSAT Reports",
"NO_RECORDS": "There are no CSAT survey responses available.",
"DOWNLOAD": "Download CSAT Reports",
"FILTERS": {
"AGENTS": {
"PLACEHOLDER": "Choose Agents"

View file

@ -12,33 +12,11 @@
"INPUT": "Cerca persones, xats, respostes desades .."
},
"FILTER_ALL": "Totes",
"STATUS_TABS": [
{
"NAME": "Obrir",
"KEY": "openCount"
"ASSIGNEE_TYPE_TABS": {
"me": "Meves",
"unassigned": "Sense assignar",
"all": "Totes"
},
{
"NAME": "Resoltes",
"KEY": "allConvCount"
}
],
"ASSIGNEE_TYPE_TABS": [
{
"NAME": "Meves",
"KEY": "me",
"COUNT_KEY": "mineCount"
},
{
"NAME": "Sense assignar",
"KEY": "unassigned",
"COUNT_KEY": "unAssignedCount"
},
{
"NAME": "Totes",
"KEY": "all",
"COUNT_KEY": "allCount"
}
],
"CHAT_STATUS_FILTER_ITEMS": {
"open": {
"TEXT": "Obrir"

View file

@ -341,10 +341,6 @@
"AUTO_ASSIGNMENT_SUCCESS_MESSAGE": "Assignació automàtica actualitzada correctament",
"ERROR_MESSAGE": "No s'ha pogut actualitzar el color del widget. Torneu-ho a provar més endavant."
},
"AUTO_ASSIGNMENT": {
"ENABLED": "Habilita",
"DISABLED": "Inhabilita"
},
"EMAIL_COLLECT_BOX": {
"ENABLED": "Habilita",
"DISABLED": "Inhabilita"
@ -402,6 +398,8 @@
"MESSENGER_SUB_HEAD": "Col·loca aquest botó dins de l'etiqueta body",
"INBOX_AGENTS": "Agents",
"INBOX_AGENTS_SUB_TEXT": "Afegir o eliminar agents d'aquesta safata d'entrada",
"AGENT_ASSIGNMENT": "Conversation Assignment",
"AGENT_ASSIGNMENT_SUB_TEXT": "Update conversation assignment settings",
"UPDATE": "Actualitza",
"ENABLE_EMAIL_COLLECT_BOX": "Enable email collect box",
"ENABLE_EMAIL_COLLECT_BOX_SUB_TEXT": "Enable or disable email collect box on new conversation",

View file

@ -386,6 +386,7 @@
"CSAT_REPORTS": {
"HEADER": "CSAT Reports",
"NO_RECORDS": "There are no CSAT survey responses available.",
"DOWNLOAD": "Download CSAT Reports",
"FILTERS": {
"AGENTS": {
"PLACEHOLDER": "Choose Agents"

View file

@ -7,38 +7,16 @@
"404": "V této skupině nejsou žádné aktivní konverzace."
},
"TAB_HEADING": "Konverzace",
"MENTION_HEADING": "Mentions",
"MENTION_HEADING": "Zmínka",
"SEARCH": {
"INPUT": "Hledat lidi, chaty, Uložené odpovědi .."
},
"FILTER_ALL": "Vše",
"STATUS_TABS": [
{
"NAME": "Otevřít",
"KEY": "openCount"
"ASSIGNEE_TYPE_TABS": {
"me": "Mine",
"unassigned": "Nepřiřazeno",
"all": "Vše"
},
{
"NAME": "Vyřešeno",
"KEY": "allConvCount"
}
],
"ASSIGNEE_TYPE_TABS": [
{
"NAME": "Důl",
"KEY": "me",
"COUNT_KEY": "mineCount"
},
{
"NAME": "Nepřiřazeno",
"KEY": "unassigned",
"COUNT_KEY": "unAssignedCount"
},
{
"NAME": "Vše",
"KEY": "all",
"COUNT_KEY": "allCount"
}
],
"CHAT_STATUS_FILTER_ITEMS": {
"open": {
"TEXT": "Otevřít"
@ -76,12 +54,12 @@
"RECEIVED_VIA_EMAIL": "Obdrženo e-mailem",
"VIEW_TWEET_IN_TWITTER": "Zobrazit tweet na Twitteru",
"REPLY_TO_TWEET": "Odpovědět na tento tweet",
"LINK_TO_STORY": "Go to instagram story",
"LINK_TO_STORY": "Přejít na instagram příběh",
"SENT": "Sent successfully",
"NO_MESSAGES": "Žádné zprávy",
"NO_CONTENT": "Žádný obsah k dispozici",
"HIDE_QUOTED_TEXT": "Hide Quoted Text",
"SHOW_QUOTED_TEXT": "Show Quoted Text",
"MESSAGE_READ": "Read"
"MESSAGE_READ": "Přečteno"
}
}

View file

@ -1,7 +1,7 @@
{
"CONVERSATION": {
"404": "Vyberte prosím konverzaci z levého panelu",
"UNVERIFIED_SESSION": "The identity of this user is not verified",
"UNVERIFIED_SESSION": "Identita tohoto uživatele není ověřena",
"NO_MESSAGE_1": "Ale ne! Vypadá to, že ve vaší schránce nejsou žádné zprávy od zákazníků.",
"NO_MESSAGE_2": " pro odeslání zprávy na vaši stránku!",
"NO_INBOX_1": "Hola! Zdá se, že jste ještě nepřidali žádné schránky.",
@ -22,17 +22,17 @@
"LOADING_CONVERSATIONS": "Načítání konverzací",
"CANNOT_REPLY": "Nemůžete odpovědět z důvodu",
"24_HOURS_WINDOW": "24 hodinové omezení okna",
"NOT_ASSIGNED_TO_YOU": "This conversation is not assigned to you. Would you like to assign this conversation to yourself?",
"NOT_ASSIGNED_TO_YOU": "Tato konverzace vám není přiřazena. Chcete si přiřadit tuto konverzaci?",
"ASSIGN_TO_ME": "Přiřadit mi",
"TWILIO_WHATSAPP_CAN_REPLY": "You can only reply to this conversation using a template message due to",
"TWILIO_WHATSAPP_CAN_REPLY": "Na tuto konverzaci můžete odpovědět pouze pomocí šablony zprávy z důvodu",
"TWILIO_WHATSAPP_24_HOURS_WINDOW": "24 hodinové omezení okna",
"SELECT_A_TWEET_TO_REPLY": "Please select a tweet to reply to.",
"SELECT_A_TWEET_TO_REPLY": "Vyberte prosím tweet, na který chcete odpovědět.",
"REPLYING_TO": "Odpovídáte uživateli:",
"REMOVE_SELECTION": "Odstranit výběr",
"DOWNLOAD": "Stáhnout",
"UPLOADING_ATTACHMENTS": "Nahrávání příloh...",
"SUCCESS_DELETE_MESSAGE": "Zpráva byla úspěšně smazána",
"FAIL_DELETE_MESSSAGE": "Couldn't delete message! Try again",
"FAIL_DELETE_MESSSAGE": "Zpráva se nepodařilo odstranit! Zkuste to znovu",
"NO_RESPONSE": "Bez odpovědi",
"RATING_TITLE": "Hodnocení",
"FEEDBACK_TITLE": "Zpětná vazba",
@ -43,12 +43,12 @@
"OPEN": "Více",
"CLOSE": "Zavřít",
"DETAILS": "Podrobnosti",
"SNOOZED_UNTIL_TOMORROW": "Snoozed until tomorrow",
"SNOOZED_UNTIL_NEXT_WEEK": "Snoozed until next week",
"SNOOZED_UNTIL_NEXT_REPLY": "Snoozed until next reply"
"SNOOZED_UNTIL_TOMORROW": "Odloženo do zítřka",
"SNOOZED_UNTIL_NEXT_WEEK": "Odloženo do příštího týdne",
"SNOOZED_UNTIL_NEXT_REPLY": "Odloženo do další odpovědi"
},
"RESOLVE_DROPDOWN": {
"MARK_PENDING": "Mark as pending",
"MARK_PENDING": "Označit jako nevyřízené",
"SNOOZE": {
"TITLE": "Odložit do",
"NEXT_REPLY": "Další odpověď",
@ -57,13 +57,13 @@
}
},
"FOOTER": {
"MESSAGE_SIGN_TOOLTIP": "Message signature",
"ENABLE_SIGN_TOOLTIP": "Enable signature",
"DISABLE_SIGN_TOOLTIP": "Disable signature",
"MESSAGE_SIGN_TOOLTIP": "Podpis zprávy",
"ENABLE_SIGN_TOOLTIP": "Povolit podpis",
"DISABLE_SIGN_TOOLTIP": "Zakázat podpis",
"MSG_INPUT": "Shift + zadejte pro nový řádek. Začněte '/' pro výběr zrušené odpovědi.",
"PRIVATE_MSG_INPUT": "Shift + zadejte pro nový řádek. Toto bude viditelné pouze pro agenty",
"MESSAGE_SIGNATURE_NOT_CONFIGURED": "Message signature is not configured, please configure it in profile settings.",
"CLICK_HERE": "Click here to update"
"CLICK_HERE": "Klikněte zde pro aktualizaci"
},
"REPLYBOX": {
"REPLY": "Odpověď",
@ -74,13 +74,13 @@
"TIP_FORMAT_ICON": "Zobrazit formátovaný textový editor",
"TIP_EMOJI_ICON": "Zobrazit výběr emoji",
"TIP_ATTACH_ICON": "Přiložit soubory",
"TIP_AUDIORECORDER_ICON": "Record audio",
"TIP_AUDIORECORDER_PERMISSION": "Allow access to audio",
"TIP_AUDIORECORDER_ERROR": "Could not open the audio",
"ENTER_TO_SEND": "Enter to send",
"DRAG_DROP": "Drag and drop here to attach",
"START_AUDIO_RECORDING": "Start audio recording",
"STOP_AUDIO_RECORDING": "Stop audio recording",
"TIP_AUDIORECORDER_ICON": "Nahrát zvuk",
"TIP_AUDIORECORDER_PERMISSION": "Povolit přístup ke zvuku",
"TIP_AUDIORECORDER_ERROR": "Zvuk se nepodařilo otevřít",
"ENTER_TO_SEND": "Enterem odeslat",
"DRAG_DROP": "Přetažením sem připojíte",
"START_AUDIO_RECORDING": "Spustit nahrávání zvuku",
"STOP_AUDIO_RECORDING": "Zastavit nahrávání zvuku",
"": "",
"EMAIL_HEAD": {
"ADD_BCC": "Přidat bcc",
@ -101,11 +101,11 @@
"CHANGE_AGENT": "Konverzace pověřená osoba změněna",
"CHANGE_TEAM": "Tým konverzace se změnil",
"FILE_SIZE_LIMIT": "Soubor překračuje limit {MAXIMUM_FILE_UPLOAD_SIZE} přílohy",
"MESSAGE_ERROR": "Unable to send this message, please try again later",
"MESSAGE_ERROR": "Nepodařilo se odeslat tuto zprávu, zkuste to prosím později",
"SENT_BY": "Odeslal:",
"BOT": "Bot",
"SEND_FAILED": "Couldn't send message! Try again",
"TRY_AGAIN": "retry",
"SEND_FAILED": "Odeslání zprávy se nezdařilo! Zkuste to znovu",
"TRY_AGAIN": "opakovat",
"ASSIGNMENT": {
"SELECT_AGENT": "Vybrat agenta",
"REMOVE": "Odebrat",
@ -165,37 +165,37 @@
"PLACEHOLDER": "Nic"
},
"ACCORDION": {
"CONTACT_DETAILS": "Contact Details",
"CONVERSATION_ACTIONS": "Conversation Actions",
"CONVERSATION_LABELS": "Conversation Labels",
"CONVERSATION_INFO": "Conversation Information",
"CONTACT_ATTRIBUTES": "Contact Attributes",
"CONTACT_DETAILS": "Podrobnosti kontaktu",
"CONVERSATION_ACTIONS": "Akce konverzace",
"CONVERSATION_LABELS": "Štítky konverzace",
"CONVERSATION_INFO": "Informace o konverzaci",
"CONTACT_ATTRIBUTES": "Atributy kontaktu",
"PREVIOUS_CONVERSATION": "Předchozí konverzace"
}
},
"CONVERSATION_CUSTOM_ATTRIBUTES": {
"ADD_BUTTON_TEXT": "Create attribute",
"ADD_BUTTON_TEXT": "Vytvořit atribut",
"UPDATE": {
"SUCCESS": "Attribute updated successfully",
"ERROR": "Unable to update attribute. Please try again later"
"SUCCESS": "Atribut byl úspěšně aktualizován",
"ERROR": "Atribut nelze aktualizovat. Zkuste to prosím později"
},
"ADD": {
"TITLE": "Add",
"SUCCESS": "Attribute added successfully",
"ERROR": "Unable to add attribute. Please try again later"
"TITLE": "Přidat",
"SUCCESS": "Atribut byl úspěšně přidán",
"ERROR": "Nelze přidat atribut. Zkuste to prosím později"
},
"DELETE": {
"SUCCESS": "Attribute deleted successfully",
"ERROR": "Unable to delete attribute. Please try again later"
"SUCCESS": "Atribut byl úspěšně odstraněn",
"ERROR": "Atribut nelze odstranit. Zkuste to prosím později"
},
"ATTRIBUTE_SELECT": {
"TITLE": "Add attributes",
"PLACEHOLDER": "Search attributes",
"NO_RESULT": "No attributes found"
"TITLE": "Přidat atributy",
"PLACEHOLDER": "Hledat atributy",
"NO_RESULT": "Nebyly nalezeny žádné atributy"
}
},
"EMAIL_HEADER": {
"FROM": "From",
"FROM": "Od",
"TO": "Komu",
"BCC": "Bcc",
"CC": "Cc",

View file

@ -341,10 +341,6 @@
"AUTO_ASSIGNMENT_SUCCESS_MESSAGE": "Automatické přiřazení bylo úspěšně aktualizováno",
"ERROR_MESSAGE": "Nelze aktualizovat barvu widgetu. Opakujte akci později."
},
"AUTO_ASSIGNMENT": {
"ENABLED": "Povoleno",
"DISABLED": "Zakázáno"
},
"EMAIL_COLLECT_BOX": {
"ENABLED": "Povoleno",
"DISABLED": "Zakázáno"
@ -402,6 +398,8 @@
"MESSENGER_SUB_HEAD": "Umístěte toto tlačítko dovnitř vašeho tělesného štítku",
"INBOX_AGENTS": "Agenti",
"INBOX_AGENTS_SUB_TEXT": "Přidat nebo odebrat agenty z této složky doručené pošty",
"AGENT_ASSIGNMENT": "Conversation Assignment",
"AGENT_ASSIGNMENT_SUB_TEXT": "Update conversation assignment settings",
"UPDATE": "Aktualizovat",
"ENABLE_EMAIL_COLLECT_BOX": "Enable email collect box",
"ENABLE_EMAIL_COLLECT_BOX_SUB_TEXT": "Enable or disable email collect box on new conversation",

View file

@ -53,7 +53,7 @@
},
{
"id": 4,
"name": "Last year"
"name": "Poslední rok"
},
{
"id": 5,
@ -61,56 +61,56 @@
}
],
"CUSTOM_DATE_RANGE": {
"CONFIRM": "Apply",
"CONFIRM": "Použít",
"PLACEHOLDER": "Select date range"
},
"GROUP_BY_FILTER_DROPDOWN_LABEL": "Group By",
"GROUP_BY_DAY_OPTIONS": [
{
"id": 1,
"groupBy": "Day"
"groupBy": "Den"
}
],
"GROUP_BY_WEEK_OPTIONS": [
{
"id": 1,
"groupBy": "Day"
"groupBy": "Den"
},
{
"id": 2,
"groupBy": "Week"
"groupBy": "Týden"
}
],
"GROUP_BY_MONTH_OPTIONS": [
{
"id": 1,
"groupBy": "Day"
"groupBy": "Den"
},
{
"id": 2,
"groupBy": "Week"
"groupBy": "Týden"
},
{
"id": 3,
"groupBy": "Month"
"groupBy": "Měsíc"
}
],
"GROUP_BY_YEAR_OPTIONS": [
{
"id": 1,
"groupBy": "Day"
"groupBy": "Den"
},
{
"id": 2,
"groupBy": "Week"
"groupBy": "Týden"
},
{
"id": 3,
"groupBy": "Month"
"groupBy": "Měsíc"
},
{
"id": 4,
"groupBy": "Year"
"groupBy": "Rok"
}
],
"BUSINESS_HOURS": "Pracovní doba"
@ -170,7 +170,7 @@
},
{
"id": 4,
"name": "Last year"
"name": "Poslední rok"
},
{
"id": 5,
@ -178,7 +178,7 @@
}
],
"CUSTOM_DATE_RANGE": {
"CONFIRM": "Apply",
"CONFIRM": "Použít",
"PLACEHOLDER": "Select date range"
}
},
@ -237,7 +237,7 @@
},
{
"id": 4,
"name": "Last year"
"name": "Poslední rok"
},
{
"id": 5,
@ -245,7 +245,7 @@
}
],
"CUSTOM_DATE_RANGE": {
"CONFIRM": "Apply",
"CONFIRM": "Použít",
"PLACEHOLDER": "Select date range"
}
},
@ -304,7 +304,7 @@
},
{
"id": 4,
"name": "Last year"
"name": "Poslední rok"
},
{
"id": 5,
@ -312,7 +312,7 @@
}
],
"CUSTOM_DATE_RANGE": {
"CONFIRM": "Apply",
"CONFIRM": "Použít",
"PLACEHOLDER": "Select date range"
}
},
@ -371,7 +371,7 @@
},
{
"id": 4,
"name": "Last year"
"name": "Poslední rok"
},
{
"id": 5,
@ -379,13 +379,14 @@
}
],
"CUSTOM_DATE_RANGE": {
"CONFIRM": "Apply",
"CONFIRM": "Použít",
"PLACEHOLDER": "Select date range"
}
},
"CSAT_REPORTS": {
"HEADER": "CSAT Reports",
"NO_RECORDS": "There are no CSAT survey responses available.",
"DOWNLOAD": "Download CSAT Reports",
"FILTERS": {
"AGENTS": {
"PLACEHOLDER": "Choose Agents"

View file

@ -16,7 +16,7 @@
"ERROR_MESSAGE": "Nelze se připojit k Woot serveru, opakujte akci později"
},
"CAPTCHA": {
"ERROR": "Verification expired. Please solve captcha again."
"ERROR": "Ověření vypršelo. Vyřešte captchu znovu."
},
"SUBMIT": "Odeslat"
}

View file

@ -154,7 +154,7 @@
"SWITCH": "Switch",
"CONVERSATIONS": "Konverzace",
"ALL_CONVERSATIONS": "All Conversations",
"MENTIONED_CONVERSATIONS": "Mentions",
"MENTIONED_CONVERSATIONS": "Zmínka",
"REPORTS": "Zprávy",
"SETTINGS": "Nastavení",
"CONTACTS": "Kontakty",

View file

@ -12,33 +12,11 @@
"INPUT": "Søg efter Mennesker, Chats, Gemte svar .."
},
"FILTER_ALL": "Alle",
"STATUS_TABS": [
{
"NAME": "Åbn",
"KEY": "openCount"
"ASSIGNEE_TYPE_TABS": {
"me": "Mine",
"unassigned": "Ikke Tildelt",
"all": "Alle"
},
{
"NAME": "Løst",
"KEY": "allConvCount"
}
],
"ASSIGNEE_TYPE_TABS": [
{
"NAME": "Mine",
"KEY": "me",
"COUNT_KEY": "mineCount"
},
{
"NAME": "Ikke Tildelt",
"KEY": "unassigned",
"COUNT_KEY": "unAssignedCount"
},
{
"NAME": "Alle",
"KEY": "all",
"COUNT_KEY": "allCount"
}
],
"CHAT_STATUS_FILTER_ITEMS": {
"open": {
"TEXT": "Åbn"

View file

@ -341,10 +341,6 @@
"AUTO_ASSIGNMENT_SUCCESS_MESSAGE": "Automatisk tildeling opdateret",
"ERROR_MESSAGE": "Kunne ikke opdatere widget farve. Prøv igen senere."
},
"AUTO_ASSIGNMENT": {
"ENABLED": "Aktiveret",
"DISABLED": "Deaktiveret"
},
"EMAIL_COLLECT_BOX": {
"ENABLED": "Aktiveret",
"DISABLED": "Deaktiveret"
@ -402,6 +398,8 @@
"MESSENGER_SUB_HEAD": "Placer denne knap inde i din body tag",
"INBOX_AGENTS": "Agenter",
"INBOX_AGENTS_SUB_TEXT": "Tilføj eller fjern agenter fra denne indbakke",
"AGENT_ASSIGNMENT": "Conversation Assignment",
"AGENT_ASSIGNMENT_SUB_TEXT": "Update conversation assignment settings",
"UPDATE": "Opdater",
"ENABLE_EMAIL_COLLECT_BOX": "Enable email collect box",
"ENABLE_EMAIL_COLLECT_BOX_SUB_TEXT": "Enable or disable email collect box on new conversation",

View file

@ -386,6 +386,7 @@
"CSAT_REPORTS": {
"HEADER": "CSAT Reports",
"NO_RECORDS": "There are no CSAT survey responses available.",
"DOWNLOAD": "Download CSAT Reports",
"FILTERS": {
"AGENTS": {
"PLACEHOLDER": "Choose Agents"

View file

@ -12,33 +12,11 @@
"INPUT": "Suche nach Personen, Chats, gespeicherten Antworten .."
},
"FILTER_ALL": "Alle",
"STATUS_TABS": [
{
"NAME": "Offen",
"KEY": "openCount"
"ASSIGNEE_TYPE_TABS": {
"me": "Meine",
"unassigned": "Nicht zugewiesen",
"all": "Alle"
},
{
"NAME": "Gelöst",
"KEY": "allConvCount"
}
],
"ASSIGNEE_TYPE_TABS": [
{
"NAME": "Meine",
"KEY": "me",
"COUNT_KEY": "mineCount"
},
{
"NAME": "Nicht zugewiesen",
"KEY": "unassigned",
"COUNT_KEY": "unAssignedCount"
},
{
"NAME": "Alle",
"KEY": "all",
"COUNT_KEY": "allCount"
}
],
"CHAT_STATUS_FILTER_ITEMS": {
"open": {
"TEXT": "Öffnen"

View file

@ -341,10 +341,6 @@
"AUTO_ASSIGNMENT_SUCCESS_MESSAGE": "Automatische Zuordnung erfolgreich aktualisiert",
"ERROR_MESSAGE": "Widget-Farbe konnte nicht aktualisiert werden. Bitte versuchen Sie es später noch einmal."
},
"AUTO_ASSIGNMENT": {
"ENABLED": "Aktiviert",
"DISABLED": "Deaktiviert"
},
"EMAIL_COLLECT_BOX": {
"ENABLED": "Aktiviert",
"DISABLED": "Deaktiviert"
@ -402,6 +398,8 @@
"MESSENGER_SUB_HEAD": "Platzieren Sie diese Schaltfläche in Ihrem Body-Tag",
"INBOX_AGENTS": "Agenten",
"INBOX_AGENTS_SUB_TEXT": "Hinzufügen oder Entfernen von Agenten zu diesem Posteingang",
"AGENT_ASSIGNMENT": "Conversation Assignment",
"AGENT_ASSIGNMENT_SUB_TEXT": "Update conversation assignment settings",
"UPDATE": "Aktualisieren",
"ENABLE_EMAIL_COLLECT_BOX": "E-Mail-Sammelbox aktivieren",
"ENABLE_EMAIL_COLLECT_BOX_SUB_TEXT": "E-Mail-Sammelbox für neue Konversation aktivieren oder deaktivieren",

View file

@ -386,6 +386,7 @@
"CSAT_REPORTS": {
"HEADER": "CSAT-Berichte",
"NO_RECORDS": "Es sind keine Antworten zu CSAT Umfragen verfügbar.",
"DOWNLOAD": "CSAT-Berichte herunterladen",
"FILTERS": {
"AGENTS": {
"PLACEHOLDER": "Agenten wählen"
@ -420,7 +421,7 @@
"ACCOUNT_CONVERSATIONS": {
"HEADER": "Offene Konversationen",
"LOADING_MESSAGE": "Konversationsdaten werden geladen...",
"OPEN": "Offen",
"OPEN": "Öffnen",
"UNATTENDED": "Unbeaufsichtigt",
"UNASSIGNED": "Nicht zugewiesen"
},

View file

@ -12,33 +12,11 @@
"INPUT": "Αναζήτηση Ανθρώπων, συνομιλιών, αποθηκευμένων απαντήσεων .."
},
"FILTER_ALL": "Όλες",
"STATUS_TABS": [
{
"NAME": "Ανοιχτές",
"KEY": "openCount"
"ASSIGNEE_TYPE_TABS": {
"me": "Δικές μου",
"unassigned": "Χωρίς Αντιστοίχιση",
"all": "Όλες"
},
{
"NAME": "Επιλύθηκαν",
"KEY": "allConvCount"
}
],
"ASSIGNEE_TYPE_TABS": [
{
"NAME": "Δικές μου",
"KEY": "me",
"COUNT_KEY": "mineCount"
},
{
"NAME": "Χωρίς Αντιστοίχιση",
"KEY": "unassigned",
"COUNT_KEY": "unAssignedCount"
},
{
"NAME": "Όλες",
"KEY": "all",
"COUNT_KEY": "allCount"
}
],
"CHAT_STATUS_FILTER_ITEMS": {
"open": {
"TEXT": "Ανοιχτές"

View file

@ -341,10 +341,6 @@
"AUTO_ASSIGNMENT_SUCCESS_MESSAGE": "Η αυτόματη αντιστοίχιση ενημερώθηκε επιτυχώς",
"ERROR_MESSAGE": "Δεν μπορεί να ενημερωθεί το χρώμα του widget. Παρακαλώ προσπαθήστε αργότερα."
},
"AUTO_ASSIGNMENT": {
"ENABLED": "Ενεργό",
"DISABLED": "Ανενεργό"
},
"EMAIL_COLLECT_BOX": {
"ENABLED": "Ενεργό",
"DISABLED": "Ανενεργό"
@ -402,6 +398,8 @@
"MESSENGER_SUB_HEAD": "Τοποθετήσετε αυτόν τον κώδικα μέσα στο body tag της ιστοσελίδας σας",
"INBOX_AGENTS": "Πράκτορες",
"INBOX_AGENTS_SUB_TEXT": "Προσθέστε ή αφαιρέστε πράκτορες σε αυτό το κιβώτιο",
"AGENT_ASSIGNMENT": "Ανάθεση Συνομιλίας",
"AGENT_ASSIGNMENT_SUB_TEXT": "Ενημέρωση ρυθμίσεων ανάθεσης συνομιλίας",
"UPDATE": "Ενημέρωση",
"ENABLE_EMAIL_COLLECT_BOX": "Ενεργοποιήσετε το πλαίσιο συλλογής email",
"ENABLE_EMAIL_COLLECT_BOX_SUB_TEXT": "Ενεργοποίηση ή απενεργοποίηση του πλαισίου συλλογής μηνυμάτων ηλεκτρονικού ταχυδρομείου στη νέα συνομιλία",

View file

@ -386,6 +386,7 @@
"CSAT_REPORTS": {
"HEADER": "Αναφορές CSAT",
"NO_RECORDS": "Δεν υπάρχουν διαθέσιμες απαντήσεις ερευνών CSAT.",
"DOWNLOAD": "Λήψη αναφορών CSAT",
"FILTERS": {
"AGENTS": {
"PLACEHOLDER": "Επιλέξτε Πράκτορες"

View file

@ -12,33 +12,11 @@
"INPUT": "Search for People, Chats, Saved Replies .."
},
"FILTER_ALL": "All",
"STATUS_TABS": [
{
"NAME": "Open",
"KEY": "openCount"
"ASSIGNEE_TYPE_TABS": {
"me": "Mine",
"unassigned": "Unassigned",
"all": "All"
},
{
"NAME": "Resolved",
"KEY": "allConvCount"
}
],
"ASSIGNEE_TYPE_TABS": [
{
"NAME": "Mine",
"KEY": "me",
"COUNT_KEY": "mineCount"
},
{
"NAME": "Unassigned",
"KEY": "unassigned",
"COUNT_KEY": "unAssignedCount"
},
{
"NAME": "All",
"KEY": "all",
"COUNT_KEY": "allCount"
}
],
"CHAT_STATUS_FILTER_ITEMS": {
"open": {
"TEXT": "Open"

View file

@ -1,6 +1,7 @@
{
"CONVERSATION": {
"404": "Please select a conversation from left pane",
"DASHBOARD_APP_TAB_MESSAGES": "Messages",
"UNVERIFIED_SESSION": "The identity of this user is not verified",
"NO_MESSAGE_1": "Uh oh! Looks like there are no messages from customers in your inbox.",
"NO_MESSAGE_2": " to send a message to your page!",
@ -30,6 +31,7 @@
"REPLYING_TO": "You are replying to:",
"REMOVE_SELECTION": "Remove Selection",
"DOWNLOAD": "Download",
"UNKNOWN_FILE_TYPE": "Unknown File",
"UPLOADING_ATTACHMENTS": "Uploading attachments...",
"SUCCESS_DELETE_MESSAGE": "Message deleted successfully",
"FAIL_DELETE_MESSSAGE": "Couldn't delete message! Try again",

View file

@ -341,10 +341,6 @@
"AUTO_ASSIGNMENT_SUCCESS_MESSAGE": "Auto assignment updated successfully",
"ERROR_MESSAGE": "Could not update widget color. Please try again later."
},
"AUTO_ASSIGNMENT": {
"ENABLED": "Enabled",
"DISABLED": "Disabled"
},
"EMAIL_COLLECT_BOX": {
"ENABLED": "Enabled",
"DISABLED": "Disabled"
@ -402,6 +398,8 @@
"MESSENGER_SUB_HEAD": "Place this button inside your body tag",
"INBOX_AGENTS": "Agents",
"INBOX_AGENTS_SUB_TEXT": "Add or remove agents from this inbox",
"AGENT_ASSIGNMENT": "Conversation Assignment",
"AGENT_ASSIGNMENT_SUB_TEXT": "Update conversation assignment settings",
"UPDATE": "Update",
"ENABLE_EMAIL_COLLECT_BOX": "Enable email collect box",
"ENABLE_EMAIL_COLLECT_BOX_SUB_TEXT": "Enable or disable email collect box on new conversation",

View file

@ -354,6 +354,7 @@
"CSAT_REPORTS": {
"HEADER": "CSAT Reports",
"NO_RECORDS": "There are no CSAT survey responses available.",
"DOWNLOAD": "Download CSAT Reports",
"FILTERS": {
"AGENTS": {
"PLACEHOLDER": "Choose Agents"

View file

@ -21,7 +21,7 @@
},
"MESSAGE_SIGNATURE_SECTION": {
"TITLE": "Personal message signature",
"NOTE": "Create a personal message signature that would be added to all the messages you send from the platform. Use the rich content editor to create a highly personalised signature.",
"NOTE": "Create a personal message signature that would be added to all the messages you send from your email inbox. Use the rich content editor to create a highly personalised signature.",
"BTN_TEXT": "Save message signature",
"API_ERROR": "Couldn't save signature! Try again",
"API_SUCCESS": "Signature saved successfully"

View file

@ -12,33 +12,11 @@
"INPUT": "Búsqueda de Personas, Chats, Respuestas Salvadas .."
},
"FILTER_ALL": "Todos",
"STATUS_TABS": [
{
"NAME": "Abrir",
"KEY": "openCount"
"ASSIGNEE_TYPE_TABS": {
"me": "Mías",
"unassigned": "Sin asignar",
"all": "Todos"
},
{
"NAME": "Resuelto",
"KEY": "allConvCount"
}
],
"ASSIGNEE_TYPE_TABS": [
{
"NAME": "Mías",
"KEY": "me",
"COUNT_KEY": "mineCount"
},
{
"NAME": "Unassigned",
"KEY": "unassigned",
"COUNT_KEY": "unAssignedCount"
},
{
"NAME": "Todos",
"KEY": "all",
"COUNT_KEY": "allCount"
}
],
"CHAT_STATUS_FILTER_ITEMS": {
"open": {
"TEXT": "Abrir"

View file

@ -341,10 +341,6 @@
"AUTO_ASSIGNMENT_SUCCESS_MESSAGE": "Auto-asignación actualizada correctamente",
"ERROR_MESSAGE": "No se pudo actualizar el color del widget. Inténtalo de nuevo más tarde."
},
"AUTO_ASSIGNMENT": {
"ENABLED": "Activado",
"DISABLED": "Deshabilitado"
},
"EMAIL_COLLECT_BOX": {
"ENABLED": "Activado",
"DISABLED": "Deshabilitado"
@ -402,6 +398,8 @@
"MESSENGER_SUB_HEAD": "Coloca este botón dentro de tu etiqueta cuerpo",
"INBOX_AGENTS": "Agentes",
"INBOX_AGENTS_SUB_TEXT": "Añadir o quitar agentes de esta bandeja de entrada",
"AGENT_ASSIGNMENT": "Conversation Assignment",
"AGENT_ASSIGNMENT_SUB_TEXT": "Update conversation assignment settings",
"UPDATE": "Actualizar",
"ENABLE_EMAIL_COLLECT_BOX": "Activar caja de recolección de correo electrónico",
"ENABLE_EMAIL_COLLECT_BOX_SUB_TEXT": "Activar o desactivar la caja de recolección de correo electrónico",

View file

@ -386,6 +386,7 @@
"CSAT_REPORTS": {
"HEADER": "Reporte de encuestas de satisfacción",
"NO_RECORDS": "No hay respuestas de encuestas de satisfacción disponibles.",
"DOWNLOAD": "Download CSAT Reports",
"FILTERS": {
"AGENTS": {
"PLACEHOLDER": "Elegir agentes"

View file

@ -12,33 +12,11 @@
"INPUT": "پیدا کردن افراد، گفتگوها و پاسخ‌های از پیش نوشته شده..."
},
"FILTER_ALL": "همه",
"STATUS_TABS": [
{
"NAME": "باز",
"KEY": "openCount"
"ASSIGNEE_TYPE_TABS": {
"me": "من",
"unassigned": "تخصیص داده نشده",
"all": "همه"
},
{
"NAME": "حل شده",
"KEY": "allConvCount"
}
],
"ASSIGNEE_TYPE_TABS": [
{
"NAME": "من",
"KEY": "me",
"COUNT_KEY": "mineCount"
},
{
"NAME": "تخصیص داده نشده",
"KEY": "unassigned",
"COUNT_KEY": "unAssignedCount"
},
{
"NAME": "همه",
"KEY": "all",
"COUNT_KEY": "allCount"
}
],
"CHAT_STATUS_FILTER_ITEMS": {
"open": {
"TEXT": "باز"

View file

@ -341,10 +341,6 @@
"AUTO_ASSIGNMENT_SUCCESS_MESSAGE": "واگذاری خودکار گفتگو به ایجنت ها تنظیم شد",
"ERROR_MESSAGE": "در حال حاضر امکان تغییر رنگ ویجت امکان‌پذیر نیست. لطفا بعدا امتحان کنید."
},
"AUTO_ASSIGNMENT": {
"ENABLED": "فعال",
"DISABLED": "غیرفعال"
},
"EMAIL_COLLECT_BOX": {
"ENABLED": "فعال",
"DISABLED": "غیرفعال"
@ -402,6 +398,8 @@
"MESSENGER_SUB_HEAD": "این دکمه را در تگ body قرار دهید",
"INBOX_AGENTS": "ایجنت ها",
"INBOX_AGENTS_SUB_TEXT": "اضافه کردن یا حذف کردن دسترسی ایجنت به صندوق ورودی",
"AGENT_ASSIGNMENT": "واگذاری مکالمه",
"AGENT_ASSIGNMENT_SUB_TEXT": "تنظیمات واگذاری مکالمه را به روز کنید",
"UPDATE": "اعمال شود",
"ENABLE_EMAIL_COLLECT_BOX": "فعال سازی فرم دریافت ایمیل از کاربر",
"ENABLE_EMAIL_COLLECT_BOX_SUB_TEXT": "فعال یا غیرفعال کردن فرم دریافت ایمیل از کاربر",

View file

@ -386,6 +386,7 @@
"CSAT_REPORTS": {
"HEADER": "گزارشات رضایت مشتری",
"NO_RECORDS": "هیچ پاسخ برای نظرسنجی رضایت مشتری در دسترس نیست.",
"DOWNLOAD": "دانلود گزارش CSAT",
"FILTERS": {
"AGENTS": {
"PLACEHOLDER": "ایجنت را انتخاب کنید"

View file

@ -12,33 +12,11 @@
"INPUT": "Etsi ihmisiä, keskusteluita, tallennettuja vastauksia..."
},
"FILTER_ALL": "Kaikki",
"STATUS_TABS": [
{
"NAME": "Avaa",
"KEY": "openCount"
"ASSIGNEE_TYPE_TABS": {
"me": "Minun",
"unassigned": "Osoittamaton",
"all": "Kaikki"
},
{
"NAME": "Ratkaistu",
"KEY": "allConvCount"
}
],
"ASSIGNEE_TYPE_TABS": [
{
"NAME": "Minun",
"KEY": "me",
"COUNT_KEY": "mineCount"
},
{
"NAME": "Osoittamaton",
"KEY": "unassigned",
"COUNT_KEY": "unAssignedCount"
},
{
"NAME": "Kaikki",
"KEY": "all",
"COUNT_KEY": "allCount"
}
],
"CHAT_STATUS_FILTER_ITEMS": {
"open": {
"TEXT": "Avaa"

View file

@ -341,10 +341,6 @@
"AUTO_ASSIGNMENT_SUCCESS_MESSAGE": "Automaattinen delegointi päivitetty onnistuneesti",
"ERROR_MESSAGE": "Widgetin väriä ei voitu päivittää. Yritä myöhemmin uudelleen."
},
"AUTO_ASSIGNMENT": {
"ENABLED": "Käytössä",
"DISABLED": "Pois käytöstä"
},
"EMAIL_COLLECT_BOX": {
"ENABLED": "Käytössä",
"DISABLED": "Pois käytöstä"
@ -402,6 +398,8 @@
"MESSENGER_SUB_HEAD": "Aseta tämä painike body-tagiisi",
"INBOX_AGENTS": "Edustajat",
"INBOX_AGENTS_SUB_TEXT": "Lisää tai poista edustajia tästä saapuneet-kansiosta",
"AGENT_ASSIGNMENT": "Conversation Assignment",
"AGENT_ASSIGNMENT_SUB_TEXT": "Update conversation assignment settings",
"UPDATE": "Päivitä",
"ENABLE_EMAIL_COLLECT_BOX": "Enable email collect box",
"ENABLE_EMAIL_COLLECT_BOX_SUB_TEXT": "Enable or disable email collect box on new conversation",

View file

@ -386,6 +386,7 @@
"CSAT_REPORTS": {
"HEADER": "CSAT Reports",
"NO_RECORDS": "There are no CSAT survey responses available.",
"DOWNLOAD": "Download CSAT Reports",
"FILTERS": {
"AGENTS": {
"PLACEHOLDER": "Choose Agents"

View file

@ -12,33 +12,11 @@
"INPUT": "Rechercher des personnes, des conversations, des réponses standardisées ..."
},
"FILTER_ALL": "Tous",
"STATUS_TABS": [
{
"NAME": "Ouvert",
"KEY": "openCount"
"ASSIGNEE_TYPE_TABS": {
"me": "Les miens",
"unassigned": "Non assigné",
"all": "Tous"
},
{
"NAME": "Résolu",
"KEY": "allConvCount"
}
],
"ASSIGNEE_TYPE_TABS": [
{
"NAME": "Les miens",
"KEY": "me",
"COUNT_KEY": "mineCount"
},
{
"NAME": "Non assigné",
"KEY": "unassigned",
"COUNT_KEY": "unAssignedCount"
},
{
"NAME": "Tous",
"KEY": "all",
"COUNT_KEY": "allCount"
}
],
"CHAT_STATUS_FILTER_ITEMS": {
"open": {
"TEXT": "Ouvert"

View file

@ -341,10 +341,6 @@
"AUTO_ASSIGNMENT_SUCCESS_MESSAGE": "Affectation automatique mise à jour avec succès",
"ERROR_MESSAGE": "Impossible de mettre à jour la couleur du widget. Veuillez réessayer plus tard."
},
"AUTO_ASSIGNMENT": {
"ENABLED": "Activé",
"DISABLED": "Désactivé"
},
"EMAIL_COLLECT_BOX": {
"ENABLED": "Activé",
"DISABLED": "Désactivé"
@ -402,6 +398,8 @@
"MESSENGER_SUB_HEAD": "Placez ce code avant la fermeture de votre balise body",
"INBOX_AGENTS": "Agents",
"INBOX_AGENTS_SUB_TEXT": "Ajouter ou supprimer des agents de cette boîte de réception",
"AGENT_ASSIGNMENT": "Konversationsauftrag",
"AGENT_ASSIGNMENT_SUB_TEXT": "Aktualisieren Sie die Konversationszuweisungseinstellungen",
"UPDATE": "Mettre à jour",
"ENABLE_EMAIL_COLLECT_BOX": "Activer la boîte de collecte des courriels",
"ENABLE_EMAIL_COLLECT_BOX_SUB_TEXT": "Activer ou désactiver la boîte de collecte des courriels pour les nouvelles conversations",

View file

@ -386,6 +386,7 @@
"CSAT_REPORTS": {
"HEADER": "Rapports CSAT",
"NO_RECORDS": "Il n'y a aucune réponse à l'enquête CSAT disponible.",
"DOWNLOAD": "Download CSAT Reports",
"FILTERS": {
"AGENTS": {
"PLACEHOLDER": "Choisissez des agents"

View file

@ -12,33 +12,11 @@
"INPUT": "חפש אנשים, צ'אטים, תגובות שמורות .."
},
"FILTER_ALL": "הכל",
"STATUS_TABS": [
{
"NAME": "פתח",
"KEY": "openCount"
"ASSIGNEE_TYPE_TABS": {
"me": "שלי",
"unassigned": "לא הוקצתה",
"all": "הכל"
},
{
"NAME": "נפתרה",
"KEY": "allConvCount"
}
],
"ASSIGNEE_TYPE_TABS": [
{
"NAME": "שלי",
"KEY": "me",
"COUNT_KEY": "mineCount"
},
{
"NAME": "לא הוקצתה",
"KEY": "unassigned",
"COUNT_KEY": "unAssignedCount"
},
{
"NAME": "הכל",
"KEY": "all",
"COUNT_KEY": "allCount"
}
],
"CHAT_STATUS_FILTER_ITEMS": {
"open": {
"TEXT": "פתח"

View file

@ -341,10 +341,6 @@
"AUTO_ASSIGNMENT_SUCCESS_MESSAGE": "ההקצאה האוטומטית עודכנה בהצלחה",
"ERROR_MESSAGE": "לא ניתן היה לעדכן את צבע הווידג'ט. בבקשה נסה שוב מאוחר יותר."
},
"AUTO_ASSIGNMENT": {
"ENABLED": "מופעל",
"DISABLED": "כבוי"
},
"EMAIL_COLLECT_BOX": {
"ENABLED": "מופעל",
"DISABLED": "כבוי"
@ -402,6 +398,8 @@
"MESSENGER_SUB_HEAD": "מקם את הכפתור הזה בתוך תג הגוף שלך",
"INBOX_AGENTS": "סוכנים",
"INBOX_AGENTS_SUB_TEXT": "הוסף או הסר נציגים מתיבת הדואר הנכנס הזו",
"AGENT_ASSIGNMENT": "Conversation Assignment",
"AGENT_ASSIGNMENT_SUB_TEXT": "Update conversation assignment settings",
"UPDATE": "עדכן",
"ENABLE_EMAIL_COLLECT_BOX": "אפשר תיבת איסוף דוא\"ל",
"ENABLE_EMAIL_COLLECT_BOX_SUB_TEXT": "הפעל או השבת את תיבת איסוף הדוא\"ל בשיחה חדשה",

View file

@ -386,6 +386,7 @@
"CSAT_REPORTS": {
"HEADER": "CSAT Reports",
"NO_RECORDS": "There are no CSAT survey responses available.",
"DOWNLOAD": "Download CSAT Reports",
"FILTERS": {
"AGENTS": {
"PLACEHOLDER": "Choose Agents"

View file

@ -12,33 +12,11 @@
"INPUT": "Search for People, Chats, Saved Replies .."
},
"FILTER_ALL": "All",
"STATUS_TABS": [
{
"NAME": "Open",
"KEY": "openCount"
"ASSIGNEE_TYPE_TABS": {
"me": "Mine",
"unassigned": "Unassigned",
"all": "All"
},
{
"NAME": "Resolved",
"KEY": "allConvCount"
}
],
"ASSIGNEE_TYPE_TABS": [
{
"NAME": "Mine",
"KEY": "me",
"COUNT_KEY": "mineCount"
},
{
"NAME": "Unassigned",
"KEY": "unassigned",
"COUNT_KEY": "unAssignedCount"
},
{
"NAME": "All",
"KEY": "all",
"COUNT_KEY": "allCount"
}
],
"CHAT_STATUS_FILTER_ITEMS": {
"open": {
"TEXT": "Open"

View file

@ -341,10 +341,6 @@
"AUTO_ASSIGNMENT_SUCCESS_MESSAGE": "Auto assignment updated successfully",
"ERROR_MESSAGE": "Could not update widget color. Please try again later."
},
"AUTO_ASSIGNMENT": {
"ENABLED": "Enabled",
"DISABLED": "Disabled"
},
"EMAIL_COLLECT_BOX": {
"ENABLED": "Enabled",
"DISABLED": "Disabled"
@ -402,6 +398,8 @@
"MESSENGER_SUB_HEAD": "Place this button inside your body tag",
"INBOX_AGENTS": "Agents",
"INBOX_AGENTS_SUB_TEXT": "Add or remove agents from this inbox",
"AGENT_ASSIGNMENT": "Conversation Assignment",
"AGENT_ASSIGNMENT_SUB_TEXT": "Update conversation assignment settings",
"UPDATE": "Update",
"ENABLE_EMAIL_COLLECT_BOX": "Enable email collect box",
"ENABLE_EMAIL_COLLECT_BOX_SUB_TEXT": "Enable or disable email collect box on new conversation",

View file

@ -386,6 +386,7 @@
"CSAT_REPORTS": {
"HEADER": "CSAT Reports",
"NO_RECORDS": "There are no CSAT survey responses available.",
"DOWNLOAD": "Download CSAT Reports",
"FILTERS": {
"AGENTS": {
"PLACEHOLDER": "Choose Agents"

View file

@ -12,33 +12,11 @@
"INPUT": "Keresés: emberek, beszélgetése, mentett válaszok .."
},
"FILTER_ALL": "Mind",
"STATUS_TABS": [
{
"NAME": "Megnyitás",
"KEY": "openCount"
"ASSIGNEE_TYPE_TABS": {
"me": "Enyém",
"unassigned": "Gazdátlan",
"all": "Mind"
},
{
"NAME": "Megoldva",
"KEY": "allConvCount"
}
],
"ASSIGNEE_TYPE_TABS": [
{
"NAME": "Enyém",
"KEY": "me",
"COUNT_KEY": "mineCount"
},
{
"NAME": "Gazdátlan",
"KEY": "unassigned",
"COUNT_KEY": "unAssignedCount"
},
{
"NAME": "Mind",
"KEY": "all",
"COUNT_KEY": "allCount"
}
],
"CHAT_STATUS_FILTER_ITEMS": {
"open": {
"TEXT": "Megnyitás"

View file

@ -341,10 +341,6 @@
"AUTO_ASSIGNMENT_SUCCESS_MESSAGE": "Automatikus hozzárendelés sikeresen frissítve",
"ERROR_MESSAGE": "Nem sikerült a widget szín változtatása. Kérjük próbáld később."
},
"AUTO_ASSIGNMENT": {
"ENABLED": "Engedélyezve",
"DISABLED": "Letiltva"
},
"EMAIL_COLLECT_BOX": {
"ENABLED": "Engedélyezve",
"DISABLED": "Letiltva"
@ -402,6 +398,8 @@
"MESSENGER_SUB_HEAD": "Ezt a gombot a body tag-en belül helyezd el",
"INBOX_AGENTS": "Ügynökök",
"INBOX_AGENTS_SUB_TEXT": "Ügynökök hosszáadása vagy eltávolítása az inboxból",
"AGENT_ASSIGNMENT": "Conversation Assignment",
"AGENT_ASSIGNMENT_SUB_TEXT": "Update conversation assignment settings",
"UPDATE": "Frissítés",
"ENABLE_EMAIL_COLLECT_BOX": "Enable email collect box",
"ENABLE_EMAIL_COLLECT_BOX_SUB_TEXT": "Enable or disable email collect box on new conversation",

View file

@ -386,6 +386,7 @@
"CSAT_REPORTS": {
"HEADER": "CSAT Reports",
"NO_RECORDS": "There are no CSAT survey responses available.",
"DOWNLOAD": "Download CSAT Reports",
"FILTERS": {
"AGENTS": {
"PLACEHOLDER": "Choose Agents"

View file

@ -12,33 +12,11 @@
"INPUT": "Telusuri Orang, Obrolan, Balasan Tersimpan.."
},
"FILTER_ALL": "Semua",
"STATUS_TABS": [
{
"NAME": "Terbuka",
"KEY": "openCount"
"ASSIGNEE_TYPE_TABS": {
"me": "Milikku",
"unassigned": "Belum ditugaskan",
"all": "Semua"
},
{
"NAME": "Terselesaikan",
"KEY": "allConvCount"
}
],
"ASSIGNEE_TYPE_TABS": [
{
"NAME": "Milikku",
"KEY": "me",
"COUNT_KEY": "mineCount"
},
{
"NAME": "Belum ditugaskan",
"KEY": "unassigned",
"COUNT_KEY": "unAssignedCount"
},
{
"NAME": "Semua",
"KEY": "all",
"COUNT_KEY": "allCount"
}
],
"CHAT_STATUS_FILTER_ITEMS": {
"open": {
"TEXT": "Terbuka"

View file

@ -341,10 +341,6 @@
"AUTO_ASSIGNMENT_SUCCESS_MESSAGE": "Penugasan otomatis berhasil diperbarui",
"ERROR_MESSAGE": "Tidak dapat memperbarui warna widget. Silakan coba lagi nanti."
},
"AUTO_ASSIGNMENT": {
"ENABLED": "Diaktifkan",
"DISABLED": "Nonaktif"
},
"EMAIL_COLLECT_BOX": {
"ENABLED": "Diaktifkan",
"DISABLED": "Nonaktif"
@ -402,6 +398,8 @@
"MESSENGER_SUB_HEAD": "Tempatkan tombol ini di dalam tag <body> Anda",
"INBOX_AGENTS": "Agen",
"INBOX_AGENTS_SUB_TEXT": "Tambahkan atau hapus agen dari kotak masuk ini",
"AGENT_ASSIGNMENT": "Conversation Assignment",
"AGENT_ASSIGNMENT_SUB_TEXT": "Update conversation assignment settings",
"UPDATE": "Perbarui",
"ENABLE_EMAIL_COLLECT_BOX": "Aktifkan kotak pengumpulan email",
"ENABLE_EMAIL_COLLECT_BOX_SUB_TEXT": "Aktifkan atau nonaktifkan kotak pengumpulan email pada percakpaan baru",

View file

@ -386,6 +386,7 @@
"CSAT_REPORTS": {
"HEADER": "Laporan CSAT",
"NO_RECORDS": "Tidak ada respons survey CSAT yang tersedia.",
"DOWNLOAD": "Download CSAT Reports",
"FILTERS": {
"AGENTS": {
"PLACEHOLDER": "Choose Agents"

View file

@ -12,33 +12,11 @@
"INPUT": "Cerca persone, Chat, risposte salvate .."
},
"FILTER_ALL": "Tutti",
"STATUS_TABS": [
{
"NAME": "Aperte",
"KEY": "contaaperture"
"ASSIGNEE_TYPE_TABS": {
"me": "Mie",
"unassigned": "Non assegnato",
"all": "Tutti"
},
{
"NAME": "Risolti",
"KEY": "Conteggio"
}
],
"ASSIGNEE_TYPE_TABS": [
{
"NAME": "Mie",
"KEY": "Io",
"COUNT_KEY": "contaMinore"
},
{
"NAME": "Non assegnato",
"KEY": "non assegnato",
"COUNT_KEY": "unAssignedCount"
},
{
"NAME": "Tutti",
"KEY": "Tutti",
"COUNT_KEY": "allCount"
}
],
"CHAT_STATUS_FILTER_ITEMS": {
"open": {
"TEXT": "Aperte"

View file

@ -341,10 +341,6 @@
"AUTO_ASSIGNMENT_SUCCESS_MESSAGE": "Assegnazione automatica aggiornata correttamente",
"ERROR_MESSAGE": "Impossibile aggiornare il colore del widget. Riprova più tardi."
},
"AUTO_ASSIGNMENT": {
"ENABLED": "Abilitato",
"DISABLED": "Disabilitato"
},
"EMAIL_COLLECT_BOX": {
"ENABLED": "Abilitato",
"DISABLED": "Disabilitato"
@ -402,6 +398,8 @@
"MESSENGER_SUB_HEAD": "Posiziona questo pulsante all'interno del tuo tag body",
"INBOX_AGENTS": "Agenti",
"INBOX_AGENTS_SUB_TEXT": "Aggiungi o rimuovi agenti da questa casella",
"AGENT_ASSIGNMENT": "Assegnazione conversazione",
"AGENT_ASSIGNMENT_SUB_TEXT": "Aggiorna le impostazioni di assegnazione della conversazione",
"UPDATE": "Aggiorna",
"ENABLE_EMAIL_COLLECT_BOX": "Abilita casella di raccolta email",
"ENABLE_EMAIL_COLLECT_BOX_SUB_TEXT": "Abilita o disabilita la casella di raccolta email nella nuova conversazione",

View file

@ -386,6 +386,7 @@
"CSAT_REPORTS": {
"HEADER": "Rapporti CSAT",
"NO_RECORDS": "Non ci sono risposte al sondaggio CSAT disponibili.",
"DOWNLOAD": "Scarica report CSAT",
"FILTERS": {
"AGENTS": {
"PLACEHOLDER": "Scegli agenti"
@ -420,7 +421,7 @@
"ACCOUNT_CONVERSATIONS": {
"HEADER": "Conversazioni aperte",
"LOADING_MESSAGE": "Caricamento metriche conversazioni...",
"OPEN": "Aperte",
"OPEN": "Apri",
"UNATTENDED": "Non partecipate",
"UNASSIGNED": "Non assegnato"
},

View file

@ -151,7 +151,7 @@
},
"SIDEBAR": {
"CURRENTLY_VIEWING_ACCOUNT": "Visualizzazione attuale:",
"SWITCH": "Switch",
"SWITCH": "Scambia",
"CONVERSATIONS": "Conversazioni",
"ALL_CONVERSATIONS": "Tutte le conversazioni",
"MENTIONED_CONVERSATIONS": "Menzioni",

View file

@ -1,28 +1,28 @@
{
"FILTER": {
"TITLE": "Filter Conversations",
"SUBTITLE": "Add filters below and hit 'Apply filters' to filter conversations.",
"ADD_NEW_FILTER": "Add Filter",
"FILTER_DELETE_ERROR": "You should have atleast one filter to save",
"SUBMIT_BUTTON_LABEL": "Apply filters",
"SUBTITLE": "会話のフィルターを行うには、適用したいフィルターを選択して「フィルターを適用」を押してください。",
"ADD_NEW_FILTER": "フィルターを追加",
"FILTER_DELETE_ERROR": "保存するには少なくとも一つのフィルター選択が必要です。",
"SUBMIT_BUTTON_LABEL": "フィルターを適用",
"CANCEL_BUTTON_LABEL": "キャンセル",
"CLEAR_BUTTON_LABEL": "Clear Filters",
"EMPTY_VALUE_ERROR": "Value is required",
"TOOLTIP_LABEL": "Filter conversations",
"CLEAR_BUTTON_LABEL": "フィルターをクリア",
"EMPTY_VALUE_ERROR": "値は必須です",
"TOOLTIP_LABEL": "会話をフィルターする",
"QUERY_DROPDOWN_LABELS": {
"AND": "AND",
"OR": "OR"
},
"OPERATOR_LABELS": {
"equal_to": "Equal to",
"not_equal_to": "Not equal to",
"contains": "Contains",
"does_not_contain": "Does not contain",
"is_present": "Is present",
"is_not_present": "Is not present",
"is_greater_than": "Is greater than",
"is_less_than": "Is lesser than",
"days_before": "Is x days before"
"equal_to": "等しい",
"not_equal_to": "等しくない",
"contains": "含む",
"does_not_contain": "含まない",
"is_present": "存在する",
"is_not_present": "存在しない",
"is_greater_than": "より大きい",
"is_less_than": "より小さい",
"days_before": "x日前"
},
"ATTRIBUTE_LABELS": {
"TRUE": "True",
@ -30,16 +30,16 @@
},
"ATTRIBUTES": {
"STATUS": "状況",
"ASSIGNEE_NAME": "Assignee Name",
"ASSIGNEE_NAME": "担当者名",
"INBOX_NAME": "受信トレイ名",
"TEAM_NAME": "Team Name",
"TEAM_NAME": "チーム名",
"CONVERSATION_IDENTIFIER": "Conversation Identifier",
"CAMPAIGN_NAME": "Campaign Name",
"CAMPAIGN_NAME": "キャンペーンの名前",
"LABELS": "ラベル",
"BROWSER_LANGUAGE": "Browser Language",
"COUNTRY_NAME": "Country Name",
"REFERER_LINK": "Referer link",
"CUSTOM_ATTRIBUTE_LIST": "List",
"BROWSER_LANGUAGE": "ブラウザの言語",
"COUNTRY_NAME": "国名",
"REFERER_LINK": "参照者のリンク",
"CUSTOM_ATTRIBUTE_LIST": "リスト",
"CUSTOM_ATTRIBUTE_TEXT": "Text",
"CUSTOM_ATTRIBUTE_NUMBER": "Number",
"CUSTOM_ATTRIBUTE_LINK": "Link",
@ -58,11 +58,11 @@
"LABEL": "Name this filter",
"PLACEHOLDER": "Enter a name for this filter",
"ERROR_MESSAGE": "Name is required",
"SAVE_BUTTON": "Save filter",
"SAVE_BUTTON": "フィルターの保存",
"CANCEL_BUTTON": "キャンセル",
"API_FOLDERS": {
"SUCCESS_MESSAGE": "Folder created successfully",
"ERROR_MESSAGE": "Error while creating folder"
"SUCCESS_MESSAGE": "フォルダが正常に作成されました",
"ERROR_MESSAGE": "フォルダの作成中にエラーが発生しました"
},
"API_SEGMENTS": {
"SUCCESS_MESSAGE": "Segment created successfully",

View file

@ -12,33 +12,11 @@
"INPUT": "人物、チャット、保存された返信を検索する"
},
"FILTER_ALL": "すべて",
"STATUS_TABS": [
{
"NAME": "開く",
"KEY": "openCount"
"ASSIGNEE_TYPE_TABS": {
"me": "自分",
"unassigned": "未割当",
"all": "すべて"
},
{
"NAME": "解決済み",
"KEY": "allConvCount"
}
],
"ASSIGNEE_TYPE_TABS": [
{
"NAME": "自分",
"KEY": "me",
"COUNT_KEY": "mineCount"
},
{
"NAME": "未割当",
"KEY": "unassigned",
"COUNT_KEY": "unAssignedCount"
},
{
"NAME": "すべて",
"KEY": "all",
"COUNT_KEY": "allCount"
}
],
"CHAT_STATUS_FILTER_ITEMS": {
"open": {
"TEXT": "開く"

View file

@ -186,7 +186,7 @@
"SEARCH_BUTTON": "Search",
"SEARCH_INPUT_PLACEHOLDER": "Search for contacts",
"FILTER_CONTACTS": "Filter",
"FILTER_CONTACTS_SAVE": "Save filter",
"FILTER_CONTACTS_SAVE": "フィルターの保存",
"FILTER_CONTACTS_DELETE": "Delete filter",
"LIST": {
"LOADING_MESSAGE": "Loading contacts...",

View file

@ -2,28 +2,28 @@
"CONTACTS_FILTER": {
"TITLE": "Filter Contacts",
"SUBTITLE": "Add filters below and hit 'Submit' to filter contacts.",
"ADD_NEW_FILTER": "Add Filter",
"ADD_NEW_FILTER": "フィルターを追加",
"CLEAR_ALL_FILTERS": "Clear All Filters",
"FILTER_DELETE_ERROR": "You should have atleast one filter to save",
"FILTER_DELETE_ERROR": "保存するには少なくとも一つのフィルター選択が必要です。",
"SUBMIT_BUTTON_LABEL": "送信",
"CANCEL_BUTTON_LABEL": "キャンセル",
"CLEAR_BUTTON_LABEL": "Clear Filters",
"EMPTY_VALUE_ERROR": "Value is required",
"CLEAR_BUTTON_LABEL": "フィルターをクリア",
"EMPTY_VALUE_ERROR": "値は必須です",
"TOOLTIP_LABEL": "Filter contacts",
"QUERY_DROPDOWN_LABELS": {
"AND": "AND",
"OR": "OR"
},
"OPERATOR_LABELS": {
"equal_to": "Equal to",
"not_equal_to": "Not equal to",
"contains": "Contains",
"does_not_contain": "Does not contain",
"is_present": "Is present",
"is_not_present": "Is not present",
"is_greater_than": "Is greater than",
"equal_to": "等しい",
"not_equal_to": "等しくない",
"contains": "含む",
"does_not_contain": "含まない",
"is_present": "存在する",
"is_not_present": "存在しない",
"is_greater_than": "より大きい",
"is_lesser_than": "Is lesser than",
"days_before": "Is x days before"
"days_before": "x日前"
},
"ATTRIBUTES": {
"NAME": "名前",
@ -32,7 +32,7 @@
"IDENTIFIER": "Identifier",
"CITY": "City",
"COUNTRY": "Country",
"CUSTOM_ATTRIBUTE_LIST": "List",
"CUSTOM_ATTRIBUTE_LIST": "リスト",
"CUSTOM_ATTRIBUTE_TEXT": "Text",
"CUSTOM_ATTRIBUTE_NUMBER": "Number",
"CUSTOM_ATTRIBUTE_LINK": "Link",

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