Merge branch 'release/1.9.0' into master

This commit is contained in:
Sojan 2020-10-20 12:32:57 +05:30
commit cf7271ecfb
342 changed files with 6224 additions and 2899 deletions

View file

@ -22,6 +22,11 @@ REDIS_URL=redis://redis:6379
# which will be the password for the redis service running inside the docker-compose # which will be the password for the redis service running inside the docker-compose
# to make it secure # to make it secure
REDIS_PASSWORD= REDIS_PASSWORD=
# Redis Sentinel can be used by passing list of sentinel host and ports e,g. sentinel_host1:port1,sentinel_host2:port2
REDIS_SENTINELS=
# Redis sentinel master name is required when using sentinel, default value is "mymaster".
# You can find list of master using "SENTINEL masters" command
REDIS_SENTINEL_MASTER_NAME=
# Postgres Database config variables # Postgres Database config variables
POSTGRES_HOST=postgres POSTGRES_HOST=postgres

View file

@ -26,6 +26,14 @@ A clear and concise description of what you expected to happen.
If applicable, add screenshots to help explain your problem. If applicable, add screenshots to help explain your problem.
**Browser logs**
Share the browser logs to debug the issue further
**Server logs**
Share the server logs to debug the issue further
**Environment** **Environment**
Describe whether you are using Chatwoot Cloud (app.chatwoot.com) or a self hosted installation of Chatwoot. If you are using a self hosted installation of Chatwoot describe the type of deployment (Docker/Linux VM installation/Heroku) Describe whether you are using Chatwoot Cloud (app.chatwoot.com) or a self hosted installation of Chatwoot. If you are using a self hosted installation of Chatwoot describe the type of deployment (Docker/Linux VM installation/Heroku)

2
.gitignore vendored
View file

@ -23,7 +23,7 @@
*.log *.log
# Ignore application configuration # Ignore application configuration
node_modules node_modules
master.key
*.rdb *.rdb
# Ignore env files # Ignore env files

View file

@ -18,56 +18,56 @@ GEM
specs: specs:
action-cable-testing (0.6.1) action-cable-testing (0.6.1)
actioncable (>= 5.0) actioncable (>= 5.0)
actioncable (6.0.3.3) actioncable (6.0.3.4)
actionpack (= 6.0.3.3) actionpack (= 6.0.3.4)
nio4r (~> 2.0) nio4r (~> 2.0)
websocket-driver (>= 0.6.1) websocket-driver (>= 0.6.1)
actionmailbox (6.0.3.3) actionmailbox (6.0.3.4)
actionpack (= 6.0.3.3) actionpack (= 6.0.3.4)
activejob (= 6.0.3.3) activejob (= 6.0.3.4)
activerecord (= 6.0.3.3) activerecord (= 6.0.3.4)
activestorage (= 6.0.3.3) activestorage (= 6.0.3.4)
activesupport (= 6.0.3.3) activesupport (= 6.0.3.4)
mail (>= 2.7.1) mail (>= 2.7.1)
actionmailer (6.0.3.3) actionmailer (6.0.3.4)
actionpack (= 6.0.3.3) actionpack (= 6.0.3.4)
actionview (= 6.0.3.3) actionview (= 6.0.3.4)
activejob (= 6.0.3.3) activejob (= 6.0.3.4)
mail (~> 2.5, >= 2.5.4) mail (~> 2.5, >= 2.5.4)
rails-dom-testing (~> 2.0) rails-dom-testing (~> 2.0)
actionpack (6.0.3.3) actionpack (6.0.3.4)
actionview (= 6.0.3.3) actionview (= 6.0.3.4)
activesupport (= 6.0.3.3) activesupport (= 6.0.3.4)
rack (~> 2.0, >= 2.0.8) rack (~> 2.0, >= 2.0.8)
rack-test (>= 0.6.3) rack-test (>= 0.6.3)
rails-dom-testing (~> 2.0) rails-dom-testing (~> 2.0)
rails-html-sanitizer (~> 1.0, >= 1.2.0) rails-html-sanitizer (~> 1.0, >= 1.2.0)
actiontext (6.0.3.3) actiontext (6.0.3.4)
actionpack (= 6.0.3.3) actionpack (= 6.0.3.4)
activerecord (= 6.0.3.3) activerecord (= 6.0.3.4)
activestorage (= 6.0.3.3) activestorage (= 6.0.3.4)
activesupport (= 6.0.3.3) activesupport (= 6.0.3.4)
nokogiri (>= 1.8.5) nokogiri (>= 1.8.5)
actionview (6.0.3.3) actionview (6.0.3.4)
activesupport (= 6.0.3.3) activesupport (= 6.0.3.4)
builder (~> 3.1) builder (~> 3.1)
erubi (~> 1.4) erubi (~> 1.4)
rails-dom-testing (~> 2.0) rails-dom-testing (~> 2.0)
rails-html-sanitizer (~> 1.1, >= 1.2.0) rails-html-sanitizer (~> 1.1, >= 1.2.0)
activejob (6.0.3.3) activejob (6.0.3.4)
activesupport (= 6.0.3.3) activesupport (= 6.0.3.4)
globalid (>= 0.3.6) globalid (>= 0.3.6)
activemodel (6.0.3.3) activemodel (6.0.3.4)
activesupport (= 6.0.3.3) activesupport (= 6.0.3.4)
activerecord (6.0.3.3) activerecord (6.0.3.4)
activemodel (= 6.0.3.3) activemodel (= 6.0.3.4)
activesupport (= 6.0.3.3) activesupport (= 6.0.3.4)
activestorage (6.0.3.3) activestorage (6.0.3.4)
actionpack (= 6.0.3.3) actionpack (= 6.0.3.4)
activejob (= 6.0.3.3) activejob (= 6.0.3.4)
activerecord (= 6.0.3.3) activerecord (= 6.0.3.4)
marcel (~> 0.3.1) marcel (~> 0.3.1)
activesupport (6.0.3.3) activesupport (6.0.3.4)
concurrent-ruby (~> 1.0, >= 1.0.2) concurrent-ruby (~> 1.0, >= 1.0.2)
i18n (>= 0.7, < 2) i18n (>= 0.7, < 2)
minitest (~> 5.1) minitest (~> 5.1)
@ -307,7 +307,7 @@ GEM
multi_xml (0.6.0) multi_xml (0.6.0)
multipart-post (2.1.1) multipart-post (2.1.1)
netrc (0.11.0) netrc (0.11.0)
nio4r (2.5.3) nio4r (2.5.4)
nokogiri (1.10.10) nokogiri (1.10.10)
mini_portile2 (~> 2.4.0) mini_portile2 (~> 2.4.0)
oauth (0.5.4) oauth (0.5.4)
@ -336,29 +336,29 @@ GEM
rack rack
rack-test (1.1.0) rack-test (1.1.0)
rack (>= 1.0, < 3) rack (>= 1.0, < 3)
rails (6.0.3.3) rails (6.0.3.4)
actioncable (= 6.0.3.3) actioncable (= 6.0.3.4)
actionmailbox (= 6.0.3.3) actionmailbox (= 6.0.3.4)
actionmailer (= 6.0.3.3) actionmailer (= 6.0.3.4)
actionpack (= 6.0.3.3) actionpack (= 6.0.3.4)
actiontext (= 6.0.3.3) actiontext (= 6.0.3.4)
actionview (= 6.0.3.3) actionview (= 6.0.3.4)
activejob (= 6.0.3.3) activejob (= 6.0.3.4)
activemodel (= 6.0.3.3) activemodel (= 6.0.3.4)
activerecord (= 6.0.3.3) activerecord (= 6.0.3.4)
activestorage (= 6.0.3.3) activestorage (= 6.0.3.4)
activesupport (= 6.0.3.3) activesupport (= 6.0.3.4)
bundler (>= 1.3.0) bundler (>= 1.3.0)
railties (= 6.0.3.3) railties (= 6.0.3.4)
sprockets-rails (>= 2.0.0) sprockets-rails (>= 2.0.0)
rails-dom-testing (2.0.3) rails-dom-testing (2.0.3)
activesupport (>= 4.2.0) activesupport (>= 4.2.0)
nokogiri (>= 1.6) nokogiri (>= 1.6)
rails-html-sanitizer (1.3.0) rails-html-sanitizer (1.3.0)
loofah (~> 2.3) loofah (~> 2.3)
railties (6.0.3.3) railties (6.0.3.4)
actionpack (= 6.0.3.3) actionpack (= 6.0.3.4)
activesupport (= 6.0.3.3) activesupport (= 6.0.3.4)
method_source method_source
rake (>= 0.8.7) rake (>= 0.8.7)
thor (>= 0.20.3, < 2.0) thor (>= 0.20.3, < 2.0)
@ -481,7 +481,7 @@ GEM
sprockets (3.7.2) sprockets (3.7.2)
concurrent-ruby (~> 1.0) concurrent-ruby (~> 1.0)
rack (> 1, < 3) rack (> 1, < 3)
sprockets-rails (3.2.1) sprockets-rails (3.2.2)
actionpack (>= 4.0) actionpack (>= 4.0)
activesupport (>= 4.0) activesupport (>= 4.0)
sprockets (>= 3.0.0) sprockets (>= 3.0.0)

View file

@ -50,8 +50,8 @@ class Messages::Facebook::MessageBuilder
def attach_file(attachment, file_url) def attach_file(attachment, file_url)
file_resource = LocalResource.new(file_url) file_resource = LocalResource.new(file_url)
attachment.file.attach(io: file_resource.file, filename: file_resource.tmp_filename, content_type: file_resource.encoding) attachment.file.attach(io: file_resource.file, filename: file_resource.filename, content_type: file_resource.encoding)
rescue Errno::ETIMEDOUT, Errno::ECONNREFUSED, SocketError => e rescue *ExceptionList::URI_EXCEPTIONS => e
Rails.logger.info "invalid url #{file_url} : #{e.message}" Rails.logger.info "invalid url #{file_url} : #{e.message}"
end end

View file

@ -15,7 +15,6 @@ class Api::V1::Accounts::BaseController < Api::BaseController
elsif @resource&.is_a?(AgentBot) elsif @resource&.is_a?(AgentBot)
account_accessible_for_bot?(account) account_accessible_for_bot?(account)
end end
switch_locale account
account account
end end

View file

@ -30,7 +30,7 @@ class Api::V1::Accounts::CallbacksController < Api::V1::Accounts::BaseController
if (page_detail = (page_details || []).detect { |page| fb_page_id == page['id'] }) if (page_detail = (page_details || []).detect { |page| fb_page_id == page['id'] })
update_fb_page(fb_page_id, page_detail['access_token']) update_fb_page(fb_page_id, page_detail['access_token'])
return head :ok render and return
end end
end end
@ -44,9 +44,9 @@ class Api::V1::Accounts::CallbacksController < Api::V1::Accounts::BaseController
end end
def update_fb_page(fb_page_id, access_token) def update_fb_page(fb_page_id, access_token)
get_fb_page(fb_page_id)&.update!( fb_page = get_fb_page(fb_page_id)
user_access_token: @user_access_token, page_access_token: access_token fb_page&.update!(user_access_token: @user_access_token, page_access_token: access_token)
) fb_page&.reauthorized!
end end
def get_fb_page(fb_page_id) def get_fb_page(fb_page_id)
@ -81,7 +81,7 @@ class Api::V1::Accounts::CallbacksController < Api::V1::Accounts::BaseController
avatar_resource = LocalResource.new(uri) avatar_resource = LocalResource.new(uri)
facebook_inbox.avatar.attach(io: avatar_resource.file, filename: avatar_resource.tmp_filename, content_type: avatar_resource.encoding) facebook_inbox.avatar.attach(io: avatar_resource.file, filename: avatar_resource.tmp_filename, content_type: avatar_resource.encoding)
rescue Errno::ETIMEDOUT, Errno::ECONNREFUSED, SocketError => e rescue *ExceptionList::URI_EXCEPTIONS => e
Rails.logger.info "invalid url #{file_url} : #{e.message}" Rails.logger.info "invalid url #{file_url} : #{e.message}"
end end

View file

@ -1,7 +1,7 @@
class Api::V1::Accounts::Contacts::ConversationsController < Api::V1::Accounts::BaseController class Api::V1::Accounts::Contacts::ConversationsController < Api::V1::Accounts::BaseController
def index def index
@conversations = Current.account.conversations.includes( @conversations = Current.account.conversations.includes(
:assignee, :contact, :inbox :assignee, :contact, :inbox, :taggings
).where(inbox_id: inbox_ids, contact_id: permitted_params[:contact_id]) ).where(inbox_id: inbox_ids, contact_id: permitted_params[:contact_id])
end end

View file

@ -8,6 +8,12 @@ class Api::V1::Accounts::ContactsController < Api::V1::Accounts::BaseController
@contacts = Current.account.contacts @contacts = Current.account.contacts
end end
# returns online contacts
def active
@contacts = Current.account.contacts.where(id: ::OnlineStatusTracker
.get_available_contact_ids(Current.account.id))
end
def show; end def show; end
def create def create
@ -63,6 +69,6 @@ class Api::V1::Accounts::ContactsController < Api::V1::Accounts::BaseController
end end
def fetch_contact def fetch_contact
@contact = Current.account.contacts.find(params[:id]) @contact = Current.account.contacts.includes(contact_inboxes: [:inbox]).find(params[:id])
end end
end end

View file

@ -15,6 +15,12 @@ class Api::V1::Accounts::ConversationsController < Api::V1::Accounts::BaseContro
@conversations_count = result[:count] @conversations_count = result[:count]
end end
def search
result = conversation_finder.perform
@conversations = result[:conversations]
@conversations_count = result[:count]
end
def create def create
@conversation = ::Conversation.create!(conversation_params) @conversation = ::Conversation.create!(conversation_params)
end end
@ -26,6 +32,11 @@ class Api::V1::Accounts::ConversationsController < Api::V1::Accounts::BaseContro
head :ok head :ok
end end
def unmute
@conversation.unmute!
head :ok
end
def transcript def transcript
ConversationReplyMailer.conversation_transcript(@conversation, params[:email])&.deliver_later if params[:email].present? ConversationReplyMailer.conversation_transcript(@conversation, params[:email])&.deliver_later if params[:email].present?
head :ok head :ok

View file

@ -79,7 +79,7 @@ class Api::V1::Accounts::InboxesController < Api::V1::Accounts::BaseController
def permitted_params def permitted_params
params.permit(:id, :avatar, :name, :greeting_message, :greeting_enabled, channel: params.permit(:id, :avatar, :name, :greeting_message, :greeting_enabled, channel:
[:type, :website_url, :widget_color, :welcome_title, :welcome_tagline, :webhook_url, :email]) [:type, :website_url, :widget_color, :welcome_title, :welcome_tagline, :webhook_url, :email, :reply_time])
end end
def inbox_update_params def inbox_update_params
@ -91,6 +91,7 @@ class Api::V1::Accounts::InboxesController < Api::V1::Accounts::BaseController
:welcome_tagline, :welcome_tagline,
:webhook_url, :webhook_url,
:email, :email,
:reply_time,
{ selected_feature_flags: [] } { selected_feature_flags: [] }
]) ])
end end

View file

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

View file

@ -0,0 +1,32 @@
class Api::V1::Accounts::Kbase::CategoriesController < Api::V1::Accounts::Kbase::BaseController
before_action :fetch_category, except: [:index, :create]
def index
@categories = @portal.categories
end
def create
@category = @portal.categories.create!(category_params)
end
def update
@category.update!(category_params)
end
def destroy
@category.destroy
head :ok
end
private
def fetch_category
@category = @portal.categories.find(params[:id])
end
def category_params
params.require(:category).permit(
:name, :description, :position
)
end
end

View file

@ -0,0 +1,32 @@
class Api::V1::Accounts::Kbase::PortalsController < Api::V1::Accounts::Kbase::BaseController
before_action :fetch_portal, except: [:index, :create]
def index
@portals = Current.account.kbase_portals
end
def create
@portal = Current.account.kbase_portals.create!(portal_params)
end
def update
@portal.update!(portal_params)
end
def destroy
@portal.destroy
head :ok
end
private
def fetch_portal
@portal = current_account.kbase_portals.find(params[:id])
end
def portal_params
params.require(:portal).permit(
:account_id, :color, :custom_domain, :header_text, :homepage_link, :name, :page_title, :slug
)
end
end

View file

@ -4,10 +4,12 @@ class Api::V1::Widget::BaseController < ApplicationController
private private
def conversations
@conversations = @contact_inbox.conversations.where(inbox_id: auth_token_params[:inbox_id])
end
def conversation def conversation
@conversation ||= @contact_inbox.conversations.where( @conversation ||= conversations.last
inbox_id: auth_token_params[:inbox_id]
).last
end end
def auth_token_params def auth_token_params
@ -20,8 +22,7 @@ class Api::V1::Widget::BaseController < ApplicationController
def set_web_widget def set_web_widget
@web_widget = ::Channel::WebWidget.find_by!(website_token: permitted_params[:website_token]) @web_widget = ::Channel::WebWidget.find_by!(website_token: permitted_params[:website_token])
@account = @web_widget.account @current_account = @web_widget.account
switch_locale @account
end end
def set_contact def set_contact

View file

@ -1,20 +1,29 @@
class Api::V1::Widget::LabelsController < Api::V1::Widget::BaseController class Api::V1::Widget::LabelsController < Api::V1::Widget::BaseController
def create def create
if conversation.present? && label_defined_in_account?
conversation.label_list.add(permitted_params[:label]) conversation.label_list.add(permitted_params[:label])
conversation.save! conversation.save!
end
head :no_content head :no_content
end end
def destroy def destroy
if conversation.present?
conversation.label_list.remove(permitted_params[:id]) conversation.label_list.remove(permitted_params[:id])
conversation.save! conversation.save!
end
head :no_content head :no_content
end end
private private
def label_defined_in_account?
label = @current_account.labels&.find_by(title: permitted_params[:label])
label.present?
end
def permitted_params def permitted_params
params.permit(:id, :label, :website_token) params.permit(:id, :label, :website_token)
end end

View file

@ -89,10 +89,10 @@ class Api::V1::Widget::MessagesController < Api::V1::Widget::BaseController
end end
def update_contact(email) def update_contact(email)
contact_with_email = @account.contacts.find_by(email: email) contact_with_email = @current_account.contacts.find_by(email: email)
if contact_with_email if contact_with_email
@contact = ::ContactMergeAction.new( @contact = ::ContactMergeAction.new(
account: @account, account: @current_account,
base_contact: contact_with_email, base_contact: contact_with_email,
mergee_contact: @contact mergee_contact: @contact
).perform ).perform

View file

@ -5,6 +5,7 @@ class ApplicationController < ActionController::Base
protect_from_forgery with: :null_session protect_from_forgery with: :null_session
before_action :set_current_user, unless: :devise_controller? before_action :set_current_user, unless: :devise_controller?
around_action :switch_locale
around_action :handle_with_exception, unless: :devise_controller? around_action :handle_with_exception, unless: :devise_controller?
# after_action :verify_authorized # after_action :verify_authorized
@ -64,15 +65,21 @@ class ApplicationController < ActionController::Base
end end
def locale_from_account(account) def locale_from_account(account)
return unless account
I18n.available_locales.map(&:to_s).include?(account.locale) ? account.locale : nil I18n.available_locales.map(&:to_s).include?(account.locale) ? account.locale : nil
end end
def switch_locale(account) def switch_locale(&action)
# priority is for locale set in query string (mostly for widget/from js sdk) # priority is for locale set in query string (mostly for widget/from js sdk)
locale ||= locale_from_params locale ||= locale_from_params
# if local is not set in param, lets try account # if local is not set in param, lets try account
locale ||= locale_from_account(account) locale ||= locale_from_account(@current_account)
I18n.locale = locale || I18n.default_locale # if nothing works we rely on default locale
locale ||= I18n.default_locale
# ensure locale won't bleed into other requests
# https://guides.rubyonrails.org/i18n.html#managing-the-locale-across-requests
I18n.with_locale(locale, &action)
end end
def pundit_user def pundit_user

View file

@ -4,21 +4,33 @@ class DeviseOverrides::ConfirmationsController < Devise::ConfirmationsController
def create def create
@confirmable = User.find_by(confirmation_token: params[:confirmation_token]) @confirmable = User.find_by(confirmation_token: params[:confirmation_token])
if @confirmable
if @confirmable.confirm || (@confirmable.confirmed_at && @confirmable.reset_password_token) if confirm
# confirmed now or already confirmed but quit before setting a password render_confirmation_success
else
render_confirmation_error
end
end
protected
def confirm
@confirmable&.confirm || (@confirmable&.confirmed_at && @confirmable&.reset_password_token)
end
def render_confirmation_success
render json: { "message": 'Success', "redirect_url": create_reset_token_link(@confirmable) }, status: :ok render json: { "message": 'Success', "redirect_url": create_reset_token_link(@confirmable) }, status: :ok
end
def render_confirmation_error
if @confirmable.blank?
render json: { "message": 'Invalid token', "redirect_url": '/' }, status: 422
elsif @confirmable.confirmed_at elsif @confirmable.confirmed_at
render json: { "message": 'Already confirmed', "redirect_url": '/' }, status: 422 render json: { "message": 'Already confirmed', "redirect_url": '/' }, status: 422
else else
render json: { "message": 'Failure', "redirect_url": '/' }, status: 422 render json: { "message": 'Failure', "redirect_url": '/' }, status: 422
end end
else
render json: { "message": 'Invalid token', "redirect_url": '/' }, status: 422
end end
end
protected
def create_reset_token_link(user) def create_reset_token_link(user)
raw, enc = Devise.token_generator.generate(user.class, :reset_password_token) raw, enc = Devise.token_generator.generate(user.class, :reset_password_token)

View file

@ -27,6 +27,7 @@ class ConversationFinder
find_all_conversations find_all_conversations
filter_by_status filter_by_status
filter_by_labels if params[:labels] filter_by_labels if params[:labels]
filter_by_query if params[:q]
mine_count, unassigned_count, all_count = set_count_for_all_conversations mine_count, unassigned_count, all_count = set_count_for_all_conversations
@ -62,7 +63,7 @@ class ConversationFinder
def find_all_conversations def find_all_conversations
@conversations = current_account.conversations.includes( @conversations = current_account.conversations.includes(
:assignee, :inbox, contact: [:avatar_attachment] :assignee, :inbox, :taggings, contact: [:avatar_attachment]
).where(inbox_id: @inbox_ids) ).where(inbox_id: @inbox_ids)
end end
@ -76,6 +77,12 @@ class ConversationFinder
@conversations @conversations
end end
def filter_by_query
@conversations = @conversations.joins(:messages).where('messages.content LIKE :search',
search: "%#{params[:q]}%").includes(:messages).where('messages.content LIKE :search',
search: "%#{params[:q]}%")
end
def filter_by_status def filter_by_status
@conversations = @conversations.where(status: params[:status] || DEFAULT_STATUS) @conversations = @conversations.where(status: params[:status] || DEFAULT_STATUS)
end end

View file

@ -11,7 +11,7 @@ class MessageFinder
private private
def conversation_messages def conversation_messages
@conversation.messages.includes(:attachments, user: { avatar_attachment: :blob }) @conversation.messages.includes(:attachments, :sender)
end end
def messages def messages

View file

@ -138,4 +138,10 @@ export default {
} }
return axios.put(endPoints('profileUpdate').url, formData); return axios.put(endPoints('profileUpdate').url, formData);
}, },
updateAvailability({ availability }) {
return axios.put(endPoints('profileUpdate').url, {
profile: { availability },
});
},
}; };

View file

@ -12,6 +12,13 @@ class FBChannel extends ApiClient {
params params
); );
} }
reauthorizeFacebookPage({ omniauthToken, inboxId }) {
return axios.post(`${this.baseUrl()}/callbacks/reauthorize_page`, {
omniauth_token: omniauthToken,
inbox_id: inboxId,
});
}
} }
export default new FBChannel(); export default new FBChannel();

View file

@ -43,6 +43,10 @@ class ConversationApi extends ApiClient {
return axios.post(`${this.url}/${conversationId}/mute`); return axios.post(`${this.url}/${conversationId}/mute`);
} }
unmute(conversationId) {
return axios.post(`${this.url}/${conversationId}/unmute`);
}
meta({ inboxId, status, assigneeType, labels }) { meta({ inboxId, status, assigneeType, labels }) {
return axios.get(`${this.url}/meta`, { return axios.get(`${this.url}/meta`, {
params: { params: {

View file

@ -14,7 +14,32 @@ describe('#ConversationAPI', () => {
expect(conversationAPI).toHaveProperty('markMessageRead'); expect(conversationAPI).toHaveProperty('markMessageRead');
expect(conversationAPI).toHaveProperty('toggleTyping'); expect(conversationAPI).toHaveProperty('toggleTyping');
expect(conversationAPI).toHaveProperty('mute'); expect(conversationAPI).toHaveProperty('mute');
expect(conversationAPI).toHaveProperty('unmute');
expect(conversationAPI).toHaveProperty('meta'); expect(conversationAPI).toHaveProperty('meta');
expect(conversationAPI).toHaveProperty('sendEmailTranscript'); expect(conversationAPI).toHaveProperty('sendEmailTranscript');
}); });
describe('API calls', () => {
let originalAxios = null;
let axiosMock = null;
beforeEach(() => {
originalAxios = window.axios;
axiosMock = { post: jest.fn(() => Promise.resolve()) };
window.axios = axiosMock;
});
afterEach(() => {
window.axios = originalAxios;
});
it('#unmute', () => {
conversationAPI.unmute(45);
expect(axiosMock.post).toHaveBeenCalledWith(
'/api/v1/conversations/45/unmute'
);
});
});
}); });

View file

@ -1,3 +1,4 @@
.button { .button {
font-family: $body-font-family; font-family: $body-font-family;
font-weight: $font-weight-medium; font-weight: $font-weight-medium;

View file

@ -14,5 +14,4 @@
@import '~bourbon/core/bourbon'; @import '~bourbon/core/bourbon';
@include foundation-everything($flex: true); @include foundation-everything($flex: true);
@import 'woot'; @import 'woot';

View file

@ -8,6 +8,7 @@
.integration--image { .integration--image {
display: flex; display: flex;
height: 10rem;
margin-right: $space-normal; margin-right: $space-normal;
width: 10rem; width: 10rem;

View file

@ -28,3 +28,7 @@ input {
font-size: $font-size-small; font-size: $font-size-small;
font-weight: $font-weight-medium; font-weight: $font-weight-medium;
} }
.help-text {
font-weight: $font-weight-normal;
}

View file

@ -1,6 +1,6 @@
<template> <template>
<div class="row settings--section"> <div class="row settings--section">
<div class="medium-4 small-12"> <div class="medium-4 small-12 title--section">
<p class="sub-block-title"> <p class="sub-block-title">
{{ title }} {{ title }}
</p> </p>
@ -35,7 +35,7 @@ export default {
.settings--section { .settings--section {
border-bottom: 1px solid $color-border; border-bottom: 1px solid $color-border;
display: flex; display: flex;
padding: $space-normal 0; padding: $space-normal $space-normal $space-normal 0;
.sub-block-title { .sub-block-title {
color: $color-woot; color: $color-woot;

View file

@ -0,0 +1,169 @@
<template>
<div class="status">
<div class="status-view">
<div
:class="
`status-view--badge status-view--badge__${currentUserAvailabilityStatus}`
"
/>
<div class="status-view--title">
{{ currentUserAvailabilityStatus }}
</div>
</div>
<div class="status-change">
<transition name="menu-slide">
<div
v-if="isStatusMenuOpened"
v-on-clickaway="closeStatusMenu"
class="dropdown-pane top"
>
<ul class="vertical dropdown menu">
<li v-for="status in availabilityStatuses" :key="status.value">
<button
class="button clear status-change--dropdown-button"
:disabled="status.disabled"
@click="changeAvailabilityStatus(status.value)"
>
{{ status.label }}
</button>
</li>
</ul>
</div>
</transition>
<button class="status-change--change-button" @click="openStatusMenu">
{{ $t('SIDEBAR_ITEMS.CHANGE_AVAILABILITY_STATUS') }}
</button>
</div>
</div>
</template>
<script>
import { mapGetters } from 'vuex';
import { mixin as clickaway } from 'vue-clickaway';
export default {
mixins: [clickaway],
data() {
return {
isStatusMenuOpened: false,
isUpdating: false,
};
},
computed: {
...mapGetters({
currentUser: 'getCurrentUser',
}),
currentUserAvailabilityStatus() {
return this.currentUser.availability_status;
},
availabilityStatuses() {
return this.$t('PROFILE_SETTINGS.FORM.AVAILABILITY.STATUSES_LIST').map(
status => ({
...status,
disabled: this.currentUserAvailabilityStatus === status.value,
})
);
},
},
methods: {
openStatusMenu() {
this.isStatusMenuOpened = true;
},
closeStatusMenu() {
this.isStatusMenuOpened = false;
},
changeAvailabilityStatus(availability) {
if (this.isUpdating) {
return;
}
this.isUpdating = true;
this.$store
.dispatch('updateAvailability', {
availability,
})
.finally(() => {
this.isUpdating = false;
});
},
},
};
</script>
<style lang="scss">
@import '~dashboard/assets/scss/variables';
.status {
display: flex;
flex-direction: row;
align-items: center;
justify-content: space-between;
padding: $space-micro $space-smaller;
}
.status-view {
display: flex;
align-items: baseline;
& &--badge {
width: $space-one;
height: $space-one;
border-radius: 50%;
&__online {
background: $success-color;
}
&__offline {
background: $color-gray;
}
&__busy {
background: $warning-color;
}
}
& &--title {
color: $color-gray;
font-size: $font-size-small;
font-weight: $font-weight-medium;
margin-left: $space-small;
&:first-letter {
text-transform: capitalize;
}
}
}
.status-change {
.dropdown-pane {
top: -130px;
}
& &--change-button {
color: $color-gray;
font-size: $font-size-small;
border-bottom: 1px solid $color-gray;
cursor: pointer;
&:hover {
border-bottom: none;
}
}
& &--dropdown-button {
font-weight: $font-weight-normal;
font-size: $font-size-small;
padding: $space-small $space-one;
text-align: left;
width: 100%;
}
}
</style>

View file

@ -26,6 +26,10 @@
</transition-group> </transition-group>
</div> </div>
<div class="bottom-nav">
<availability-status />
</div>
<div class="bottom-nav"> <div class="bottom-nav">
<transition name="menu-slide"> <transition name="menu-slide">
<div <div
@ -55,18 +59,18 @@
</ul> </ul>
</div> </div>
</transition> </transition>
<div class="current-user" @click.prevent="showOptions()"> <div class="current-user" @click.prevent="showOptions()">
<thumbnail <thumbnail
:src="currentUser.avatar_url" :src="currentUser.avatar_url"
:username="currentUserAvailableName" :username="currentUserAvailableName"
:status="currentUser.availability_status"
/> />
<div class="current-user--data"> <div class="current-user--data">
<h3 class="current-user--name"> <h3 class="current-user--name">
{{ currentUserAvailableName }} {{ currentUserAvailableName }}
</h3> </h3>
<h5 class="current-user--role"> <h5 v-if="currentRole" class="current-user--role">
{{ currentRole }} {{ $t(`AGENT_MGMT.AGENT_TYPES.${currentRole.toUpperCase()}`) }}
</h5> </h5>
</div> </div>
<span class="current-user--options icon ion-android-more-vertical" /> <span class="current-user--options icon ion-android-more-vertical" />
@ -157,17 +161,18 @@ import { mixin as clickaway } from 'vue-clickaway';
import adminMixin from '../../mixins/isAdmin'; import adminMixin from '../../mixins/isAdmin';
import Auth from '../../api/auth'; import Auth from '../../api/auth';
import SidebarItem from './SidebarItem'; import SidebarItem from './SidebarItem';
import AvailabilityStatus from './AvailabilityStatus';
import { frontendURL } from '../../helper/URLHelper'; import { frontendURL } from '../../helper/URLHelper';
import Thumbnail from '../widgets/Thumbnail'; import Thumbnail from '../widgets/Thumbnail';
import { getSidebarItems } from '../../i18n/default-sidebar'; import { getSidebarItems } from '../../i18n/default-sidebar';
import { required, minLength } from 'vuelidate/lib/validators'; import { required, minLength } from 'vuelidate/lib/validators';
import alertMixin from 'shared/mixins/alertMixin'; import alertMixin from 'shared/mixins/alertMixin';
// import accountMixin from '../../../../../mixins/account';
export default { export default {
components: { components: {
SidebarItem, SidebarItem,
Thumbnail, Thumbnail,
AvailabilityStatus,
}, },
mixins: [clickaway, adminMixin, alertMixin], mixins: [clickaway, adminMixin, alertMixin],
props: { props: {
@ -203,8 +208,7 @@ export default {
accountLabels: 'labels/getLabelsOnSidebar', accountLabels: 'labels/getLabelsOnSidebar',
}), }),
currentUserAvailableName() { currentUserAvailableName() {
const { available_name: availableName } = this.currentUser; return this.currentUser.name;
return availableName;
}, },
showChangeAccountOption() { showChangeAccountOption() {
if (this.globalConfig.createNewAccountFromDashboard) { if (this.globalConfig.createNewAccountFromDashboard) {
@ -253,6 +257,7 @@ export default {
label: inbox.name, label: inbox.name,
toState: frontendURL(`accounts/${this.accountId}/inbox/${inbox.id}`), toState: frontendURL(`accounts/${this.accountId}/inbox/${inbox.id}`),
type: inbox.channel_type, type: inbox.channel_type,
phoneNumber: inbox.phone_number,
})), })),
}; };
}, },
@ -269,6 +274,7 @@ export default {
id: label.id, id: label.id,
label: label.title, label: label.title,
color: label.color, color: label.color,
truncateLabel: true,
toState: frontendURL( toState: frontendURL(
`accounts/${this.accountId}/label/${label.title}` `accounts/${this.accountId}/label/${label.title}`
), ),

View file

@ -30,7 +30,7 @@
tag="li" tag="li"
:to="child.toState" :to="child.toState"
> >
<a href="#"> <a href="#" :class="computedChildClass(child)">
<div class="wrap"> <div class="wrap">
<i <i
v-if="computedInboxClass(child)" v-if="computedInboxClass(child)"
@ -42,9 +42,13 @@
class="label-color--display" class="label-color--display"
:style="{ backgroundColor: child.color }" :style="{ backgroundColor: child.color }"
/> />
<div
:title="computedChildTitle(child)"
:class="computedChildClass(child)"
>
{{ child.label }} {{ child.label }}
</div> </div>
</div>
</a> </a>
</router-link> </router-link>
</ul> </ul>
@ -52,14 +56,13 @@
</template> </template>
<script> <script>
/* eslint no-console: 0 */
import { mapGetters } from 'vuex'; import { mapGetters } from 'vuex';
import router from '../../routes'; import router from '../../routes';
import adminMixin from '../../mixins/isAdmin'; import adminMixin from '../../mixins/isAdmin';
import { INBOX_TYPES } from 'shared/mixins/inboxMixin'; import { INBOX_TYPES } from 'shared/mixins/inboxMixin';
const getInboxClassByType = type => { const getInboxClassByType = (type, phoneNumber) => {
switch (type) { switch (type) {
case INBOX_TYPES.WEB: case INBOX_TYPES.WEB:
return 'ion-earth'; return 'ion-earth';
@ -71,7 +74,9 @@ const getInboxClassByType = type => {
return 'ion-social-twitter'; return 'ion-social-twitter';
case INBOX_TYPES.TWILIO: case INBOX_TYPES.TWILIO:
return 'ion-android-textsms'; return phoneNumber.startsWith('whatsapp')
? 'ion-social-whatsapp-outline'
: 'ion-android-textsms';
case INBOX_TYPES.API: case INBOX_TYPES.API:
return 'ion-cloud'; return 'ion-cloud';
@ -119,10 +124,18 @@ export default {
}, },
methods: { methods: {
computedInboxClass(child) { computedInboxClass(child) {
const { type } = child; const { type, phoneNumber } = child;
const classByType = getInboxClassByType(type); const classByType = getInboxClassByType(type, phoneNumber);
return classByType; return classByType;
}, },
computedChildClass(child) {
if (!child.truncateLabel) return '';
return 'text-truncate';
},
computedChildTitle(child) {
if (!child.truncateLabel) return false;
return child.label;
},
newLinkClick() { newLinkClick() {
router.push({ name: 'settings_inbox_new', params: { page: 'new' } }); router.push({ name: 'settings_inbox_new', params: { page: 'new' } });
}, },
@ -149,6 +162,7 @@ export default {
border-radius: $space-smaller; border-radius: $space-smaller;
height: $space-normal; height: $space-normal;
margin-right: $space-small; margin-right: $space-small;
min-width: $space-normal;
width: $space-normal; width: $space-normal;
} }
</style> </style>

View file

@ -0,0 +1,77 @@
import AvailabilityStatus from '../AvailabilityStatus';
import { createLocalVue, mount } from '@vue/test-utils';
import Vuex from 'vuex';
import VueI18n from 'vue-i18n';
import i18n from 'dashboard/i18n';
const localVue = createLocalVue();
localVue.use(Vuex);
localVue.use(VueI18n);
localVue.locale('en', i18n.en);
describe('AvailabilityStatus', () => {
const currentUser = { availability_status: 'online' };
let store = null;
let actions = null;
let modules = null;
let availabilityStatus = null;
beforeEach(() => {
actions = {
updateAvailability: jest.fn(() => {
return Promise.resolve();
}),
};
modules = {
auth: {
getters: {
getCurrentUser: () => currentUser,
},
},
};
store = new Vuex.Store({
actions,
modules,
});
availabilityStatus = mount(AvailabilityStatus, {
store,
localVue,
});
});
it('shows current user status', () => {
const statusViewTitle = availabilityStatus.find('.status-view--title');
expect(statusViewTitle.text()).toBe(currentUser.availability_status);
});
it('opens the menu when user clicks "change"', async () => {
expect(availabilityStatus.find('.dropdown-pane').exists()).toBe(false);
await availabilityStatus
.find('.status-change--change-button')
.trigger('click');
expect(availabilityStatus.find('.dropdown-pane').exists()).toBe(true);
});
it('dispatches an action when user changes status', async () => {
await availabilityStatus
.find('.status-change--change-button')
.trigger('click');
await availabilityStatus
.find('.status-change li:last-child button')
.trigger('click');
expect(actions.updateAvailability).toBeCalledWith(
expect.any(Object),
{ availability: 'offline' },
undefined
);
});
});

View file

@ -56,7 +56,7 @@ export default {
computed: { computed: {
isActive() { isActive() {
const { key } = this.channel; const { key } = this.channel;
if (Object.keys(this.enabledFeatures) === 0) { if (Object.keys(this.enabledFeatures).length === 0) {
return false; return false;
} }
if (key === 'facebook') { if (key === 'facebook') {

View file

@ -10,6 +10,7 @@
</div> </div>
</template> </template>
<script> <script>
import { getContrastingTextColor } from 'shared/helpers/ColorHelper';
export default { export default {
props: { props: {
title: { title: {
@ -43,12 +44,7 @@ export default {
}, },
computed: { computed: {
textColor() { textColor() {
const color = this.bgColor.replace('#', ''); return getContrastingTextColor(this.bgColor);
const r = parseInt(color.slice(0, 2), 16);
const g = parseInt(color.slice(2, 4), 16);
const b = parseInt(color.slice(4, 6), 16);
// http://stackoverflow.com/a/3943023/112731
return r * 0.299 + g * 0.587 + b * 0.114 > 186 ? '#000000' : '#FFFFFF';
}, },
labelClass() { labelClass() {
return `label ${this.small ? 'small' : ''}`; return `label ${this.small ? 'small' : ''}`;

View file

@ -32,7 +32,7 @@
<multiselect <multiselect
v-model="currentChat.meta.assignee" v-model="currentChat.meta.assignee"
:options="agentList" :options="agentList"
label="available_name" label="name"
:allow-empty="true" :allow-empty="true"
deselect-label="Remove" deselect-label="Remove"
placeholder="Select Agent" placeholder="Select Agent"
@ -97,7 +97,7 @@ export default {
return [ return [
{ {
confirmed: true, confirmed: true,
available_name: 'None', name: 'None',
id: 0, id: 0,
role: 'agent', role: 'agent',
account_id: 0, account_id: 0,

View file

@ -41,7 +41,7 @@
size="16px" size="16px"
/> />
<div class="sender--available-name"> <div class="sender--available-name">
{{ sender.available_name || sender.name }} {{ sender.name }}
</div> </div>
</div> </div>
</div> </div>
@ -121,7 +121,7 @@ export default {
return this.data.message_type === 1 && !this.isHovered && sender return this.data.message_type === 1 && !this.isHovered && sender
? { ? {
content: `Sent by: ${sender.available_name || sender.name}`, content: `Sent by: ${sender.name}`,
classes: 'top', classes: 'top',
} }
: false; : false;

View file

@ -22,6 +22,15 @@
> >
<span>{{ $t('CONTACT_PANEL.MUTE_CONTACT') }}</span> <span>{{ $t('CONTACT_PANEL.MUTE_CONTACT') }}</span>
</button> </button>
<button
v-else
class="button small clear row alert small-6 action--button"
@click="unmute"
>
<span>{{ $t('CONTACT_PANEL.UNMUTE_CONTACT') }}</span>
</button>
<button <button
class="button small clear row small-6 action--button" class="button small clear row small-6 action--button"
@click="toggleEmailActionsModal" @click="toggleEmailActionsModal"
@ -67,6 +76,11 @@ export default {
this.showAlert(this.$t('CONTACT_PANEL.MUTED_SUCCESS')); this.showAlert(this.$t('CONTACT_PANEL.MUTED_SUCCESS'));
this.toggleConversationActions(); this.toggleConversationActions();
}, },
unmute() {
this.$store.dispatch('unmuteConversation', this.currentChat.id);
this.showAlert(this.$t('CONTACT_PANEL.UNMUTED_SUCCESS'));
this.toggleConversationActions();
},
toggleEmailActionsModal() { toggleEmailActionsModal() {
this.showEmailActionsModal = !this.showEmailActionsModal; this.showEmailActionsModal = !this.showEmailActionsModal;
this.hideConversationActions(); this.hideConversationActions();
@ -129,6 +143,7 @@ export default {
display: flex; display: flex;
align-items: center; align-items: center;
width: 100%; width: 100%;
white-space: nowrap;
padding: var(--space-small) var(--space-smaller); padding: var(--space-small) var(--space-smaller);
font-size: var(--font-size-small); font-size: var(--font-size-small);

View file

@ -63,6 +63,7 @@ export default {
margin: 0; margin: 0;
color: $color-white; color: $color-white;
font-weight: $font-weight-bold; font-weight: $font-weight-bold;
word-break: break-word;
} }
.button { .button {

View file

@ -0,0 +1,130 @@
import { createLocalVue, mount } from '@vue/test-utils';
import Vuex from 'vuex';
import VueI18n from 'vue-i18n';
import Button from 'dashboard/components/buttons/Button';
import i18n from 'dashboard/i18n';
import MoreActions from '../MoreActions';
const localVue = createLocalVue();
localVue.use(Vuex);
localVue.use(VueI18n);
localVue.locale('en', i18n.en);
localVue.component('woot-button', Button);
describe('MoveActions', () => {
let currentChat = { id: 8, muted: false };
let state = null;
let muteConversation = null;
let unmuteConversation = null;
let modules = null;
let getters = null;
let store = null;
let moreActions = null;
beforeEach(() => {
window.bus = {
$emit: jest.fn(),
};
state = {
authenticated: true,
currentChat,
};
muteConversation = jest.fn(() => Promise.resolve());
unmuteConversation = jest.fn(() => Promise.resolve());
modules = {
conversations: {
actions: {
muteConversation,
unmuteConversation,
},
},
};
getters = {
getSelectedChat: () => currentChat,
};
store = new Vuex.Store({
state,
modules,
getters,
});
moreActions = mount(MoreActions, { store, localVue });
});
it('opens the menu when user clicks "more"', async () => {
expect(moreActions.find('.dropdown-pane').exists()).toBe(false);
await moreActions.find('.more--button').trigger('click');
expect(moreActions.find('.dropdown-pane').exists()).toBe(true);
});
describe('muting discussion', () => {
it('triggers "muteConversation"', async () => {
await moreActions.find('.more--button').trigger('click');
await moreActions
.find('.dropdown-pane button:first-child')
.trigger('click');
expect(muteConversation).toBeCalledWith(
expect.any(Object),
currentChat.id,
undefined
);
});
it('shows alert', async () => {
await moreActions.find('.more--button').trigger('click');
await moreActions
.find('.dropdown-pane button:first-child')
.trigger('click');
expect(window.bus.$emit).toBeCalledWith(
'newToastMessage',
'This conversation is muted for 6 hours'
);
});
});
describe('unmuting discussion', () => {
beforeEach(() => {
currentChat.muted = true;
});
it('triggers "unmuteConversation"', async () => {
await moreActions.find('.more--button').trigger('click');
await moreActions
.find('.dropdown-pane button:first-child')
.trigger('click');
expect(unmuteConversation).toBeCalledWith(
expect.any(Object),
currentChat.id,
undefined
);
});
it('shows alert', async () => {
await moreActions.find('.more--button').trigger('click');
await moreActions
.find('.dropdown-pane button:first-child')
.trigger('click');
expect(window.bus.$emit).toBeCalledWith(
'newToastMessage',
'This conversation is unmuted'
);
});
});
});

View file

@ -28,6 +28,7 @@ import tr from './locale/tr';
import uk from './locale/uk'; import uk from './locale/uk';
import vi from './locale/vi'; import vi from './locale/vi';
import zh from './locale/zh'; import zh from './locale/zh';
import zh_TW from './locale/zh_TW';
export default { export default {
ar, ar,
@ -60,4 +61,5 @@ export default {
uk, uk,
vi, vi,
zh, zh,
zh_TW,
}; };

View file

@ -4,16 +4,10 @@
"HEADER_BTN_TXT": "إضافة موظف", "HEADER_BTN_TXT": "إضافة موظف",
"LOADING": "جار جلب قائمة الموظفين", "LOADING": "جار جلب قائمة الموظفين",
"SIDEBAR_TXT": "<p><b>الموظفين</b></p> <p> موظف الدعم <b></b> هو عضو في فريق دعم العملاء الخاص بك. </p><p> يستطيع موظفو الدعم مشاهدة الرسائل الواردة من المستخدمين والرد عليها. تظهر القائمة جميع الموظفين الموجودين حاليا في حسابك. </p><p> انقر فوق <b>إضافة موظف</b> لإضافة موظف دعم فني جديد. سيتلقى الشخص الذي تضيفه رسالة بريد إلكتروني مع رابط تأكيد لتفعيل حسابه ، وبعد ذلك يمكنهم الوصول إلى Chatwoot والرد على الرسائل. </p><p> الوصول إلى ميزات Chatwoot يتوقف على الصلاحيات التالية. </p><p> <b>الموظف</b> - موظفي الدعم الذين لديهم هذه الصلاحية يمكنهم فقط الوصول إلى صناديق قنوات التواصل والتقارير والمحادثات. ويمكنهم بدء محادثات مع موظفين آخرين أو مع أنفسهم وأيضاً إغلاق المحادثات.</p><p> <b>مدير البرنامج</b> - الشخص المسؤول من الوصول إلى جميع ميزات Chatwoot المفعلة للحساب الخاص بك. بما في ذلك الإعدادات، إلى جانب جميع امتيازات الموظفين العاديين.</p>", "SIDEBAR_TXT": "<p><b>الموظفين</b></p> <p> موظف الدعم <b></b> هو عضو في فريق دعم العملاء الخاص بك. </p><p> يستطيع موظفو الدعم مشاهدة الرسائل الواردة من المستخدمين والرد عليها. تظهر القائمة جميع الموظفين الموجودين حاليا في حسابك. </p><p> انقر فوق <b>إضافة موظف</b> لإضافة موظف دعم فني جديد. سيتلقى الشخص الذي تضيفه رسالة بريد إلكتروني مع رابط تأكيد لتفعيل حسابه ، وبعد ذلك يمكنهم الوصول إلى Chatwoot والرد على الرسائل. </p><p> الوصول إلى ميزات Chatwoot يتوقف على الصلاحيات التالية. </p><p> <b>الموظف</b> - موظفي الدعم الذين لديهم هذه الصلاحية يمكنهم فقط الوصول إلى صناديق قنوات التواصل والتقارير والمحادثات. ويمكنهم بدء محادثات مع موظفين آخرين أو مع أنفسهم وأيضاً إغلاق المحادثات.</p><p> <b>مدير البرنامج</b> - الشخص المسؤول من الوصول إلى جميع ميزات Chatwoot المفعلة للحساب الخاص بك. بما في ذلك الإعدادات، إلى جانب جميع امتيازات الموظفين العاديين.</p>",
"AGENT_TYPES": [ "AGENT_TYPES": {
{ "ADMINISTRATOR": "المدير",
"name": "administrator", "AGENT": "موظف الدعم"
"label": "المدير"
}, },
{
"name": "agent",
"label": "موظف الدعم"
}
],
"LIST": { "LIST": {
"404": "لا يوجد موظفي دعم مرتبطين بهذا الحساب", "404": "لا يوجد موظفي دعم مرتبطين بهذا الحساب",
"TITLE": "إدارة موظفي الدعم في فريقك", "TITLE": "إدارة موظفي الدعم في فريقك",

View file

@ -3,38 +3,32 @@
"HEADER": "التقارير", "HEADER": "التقارير",
"LOADING_CHART": "تحميل بيانات الرسم البياني...", "LOADING_CHART": "تحميل بيانات الرسم البياني...",
"NO_ENOUGH_DATA": "لم يتم جمع بيانات بقدر كافي لإنشاء التقرير، الرجاء المحاولة مرة أخرى لاحقاً.", "NO_ENOUGH_DATA": "لم يتم جمع بيانات بقدر كافي لإنشاء التقرير، الرجاء المحاولة مرة أخرى لاحقاً.",
"METRICS": [ "METRICS": {
{ "CONVERSATIONS": {
"NAME": "المحادثات", "NAME": "المحادثات",
"KEY": "conversations_count",
"DESC": "(الإجمالي)" "DESC": "(الإجمالي)"
}, },
{ "INCOMING_MESSAGES": {
"NAME": "الرسائل الواردة", "NAME": "الرسائل الواردة",
"KEY": "incoming_messages_count",
"DESC": "(الإجمالي)" "DESC": "(الإجمالي)"
}, },
{ "OUTGOING_MESSAGES": {
"NAME": "الرسائل الصادرة", "NAME": "الرسائل الصادرة",
"KEY": "outgoing_messages_count",
"DESC": "(الإجمالي)" "DESC": "(الإجمالي)"
}, },
{ "FIRST_RESPONSE_TIME": {
"NAME": "وقت الاستجابة الأولى", "NAME": "وقت الاستجابة الأولى",
"KEY": "avg_first_response_time",
"DESC": "(متوسط)" "DESC": "(متوسط)"
}, },
{ "RESOLUTION_TIME": {
"NAME": "وقت إغلاق المحادثات", "NAME": "وقت إغلاق المحادثات",
"KEY": "avg_resolution_time",
"DESC": "(متوسط)" "DESC": "(متوسط)"
}, },
{ "RESOLUTION_COUNT": {
"NAME": "عدد مرات الإغلاق", "NAME": "عدد مرات الإغلاق",
"KEY": "resolutions_count",
"DESC": "(الإجمالي)" "DESC": "(الإجمالي)"
} }
], },
"DATE_RANGE": [ "DATE_RANGE": [
{ {
"id": 0, "id": 0,

View file

@ -88,6 +88,7 @@
} }
}, },
"SIDEBAR_ITEMS": { "SIDEBAR_ITEMS": {
"CHANGE_AVAILABILITY_STATUS": "يتغيرون",
"CHANGE_ACCOUNTS": "تبديل الحساب", "CHANGE_ACCOUNTS": "تبديل الحساب",
"SELECTOR_SUBTITLE": "اختر حساباً من القائمة التالية", "SELECTOR_SUBTITLE": "اختر حساباً من القائمة التالية",
"PROFILE_SETTINGS": "إعدادات الملف الشخصي", "PROFILE_SETTINGS": "إعدادات الملف الشخصي",

View file

@ -4,16 +4,10 @@
"HEADER_BTN_TXT": "Afegir Agent", "HEADER_BTN_TXT": "Afegir Agent",
"LOADING": "S'està recollint la llista d'agents", "LOADING": "S'està recollint la llista d'agents",
"SIDEBAR_TXT": "<p><b>Agents</b></p> <p> An <b>Agent</b> is a member of your Customer Support team. </p><p> Agents will be able to view and reply to messages from your users. The list shows all agents currently in your account. </p><p> Click on <b>Add Agent</b> to add a new agent. Agent you add will receive an email with a confirmation link to activate their account, after which they can access Chatwoot and respond to messages. </p><p> Access to Chatwoot's features are based on following roles. </p><p> <b>Agent</b> - Agents with this role can only access inboxes, reports and conversations. They can assign conversations to other agents or themselves and resolve conversations.</p><p> <b>Administrator</b> - Administrator will have access to all Chatwoot features enabled for your account, including settings, along with all of a normal agents' privileges.</p>", "SIDEBAR_TXT": "<p><b>Agents</b></p> <p> An <b>Agent</b> is a member of your Customer Support team. </p><p> Agents will be able to view and reply to messages from your users. The list shows all agents currently in your account. </p><p> Click on <b>Add Agent</b> to add a new agent. Agent you add will receive an email with a confirmation link to activate their account, after which they can access Chatwoot and respond to messages. </p><p> Access to Chatwoot's features are based on following roles. </p><p> <b>Agent</b> - Agents with this role can only access inboxes, reports and conversations. They can assign conversations to other agents or themselves and resolve conversations.</p><p> <b>Administrator</b> - Administrator will have access to all Chatwoot features enabled for your account, including settings, along with all of a normal agents' privileges.</p>",
"AGENT_TYPES": [ "AGENT_TYPES": {
{ "ADMINISTRATOR": "Administrador/a",
"name": "administrador/a", "AGENT": "Agent"
"label": "Administrador/a"
}, },
{
"name": "agent",
"label": "Agent"
}
],
"LIST": { "LIST": {
"404": "No hi ha agents associats a aquest compte", "404": "No hi ha agents associats a aquest compte",
"TITLE": "Gestiona agents en el teu equip", "TITLE": "Gestiona agents en el teu equip",

View file

@ -3,38 +3,32 @@
"HEADER": "Informes", "HEADER": "Informes",
"LOADING_CHART": "S'estan carregant dades del gràfic...", "LOADING_CHART": "S'estan carregant dades del gràfic...",
"NO_ENOUGH_DATA": "No hem rebut suficients punts de dades per generar l'informe. Torneu-ho a provar més endavant.", "NO_ENOUGH_DATA": "No hem rebut suficients punts de dades per generar l'informe. Torneu-ho a provar més endavant.",
"METRICS": [ "METRICS": {
{ "CONVERSATIONS": {
"NAME": "Converses", "NAME": "Converses",
"KEY": "conversations_count",
"DESC": "( Total )" "DESC": "( Total )"
}, },
{ "INCOMING_MESSAGES": {
"NAME": "Missatges d'entrada", "NAME": "Missatges d'entrada",
"KEY": "incoming_messages_count",
"DESC": "( Total )" "DESC": "( Total )"
}, },
{ "OUTGOING_MESSAGES": {
"NAME": "Missatges de sortida", "NAME": "Missatges de sortida",
"KEY": "outgoing_messages_count",
"DESC": "( Total )" "DESC": "( Total )"
}, },
{ "FIRST_RESPONSE_TIME": {
"NAME": "Primer temps de resposta", "NAME": "Primer temps de resposta",
"KEY": "avg_first_response_time",
"DESC": "( Promig )" "DESC": "( Promig )"
}, },
{ "RESOLUTION_TIME": {
"NAME": "Temps de resolució", "NAME": "Temps de resolució",
"KEY": "avg_resolution_time",
"DESC": "( Promig )" "DESC": "( Promig )"
}, },
{ "RESOLUTION_COUNT": {
"NAME": "Total de resolucions", "NAME": "Total de resolucions",
"KEY": "resolutions_count",
"DESC": "( Total )" "DESC": "( Total )"
} }
], },
"DATE_RANGE": [ "DATE_RANGE": [
{ {
"id": 0, "id": 0,

View file

@ -88,6 +88,7 @@
} }
}, },
"SIDEBAR_ITEMS": { "SIDEBAR_ITEMS": {
"CHANGE_AVAILABILITY_STATUS": "Canviar",
"CHANGE_ACCOUNTS": "Switch Account", "CHANGE_ACCOUNTS": "Switch Account",
"SELECTOR_SUBTITLE": "Select an account from the following list", "SELECTOR_SUBTITLE": "Select an account from the following list",
"PROFILE_SETTINGS": "Configuració del Perfil", "PROFILE_SETTINGS": "Configuració del Perfil",

View file

@ -4,16 +4,10 @@
"HEADER_BTN_TXT": "Přidat agenta", "HEADER_BTN_TXT": "Přidat agenta",
"LOADING": "Načítání seznamu agentů", "LOADING": "Načítání seznamu agentů",
"SIDEBAR_TXT": "<p><b>Agents</b></p> <p> An <b>Agent</b> is a member of your Customer Support team. </p><p> Agents will be able to view and reply to messages from your users. The list shows all agents currently in your account. </p><p> Click on <b>Add Agent</b> to add a new agent. Agent you add will receive an email with a confirmation link to activate their account, after which they can access Chatwoot and respond to messages. </p><p> Access to Chatwoot's features are based on following roles. </p><p> <b>Agent</b> - Agents with this role can only access inboxes, reports and conversations. They can assign conversations to other agents or themselves and resolve conversations.</p><p> <b>Administrator</b> - Administrator will have access to all Chatwoot features enabled for your account, including settings, along with all of a normal agents' privileges.</p>", "SIDEBAR_TXT": "<p><b>Agents</b></p> <p> An <b>Agent</b> is a member of your Customer Support team. </p><p> Agents will be able to view and reply to messages from your users. The list shows all agents currently in your account. </p><p> Click on <b>Add Agent</b> to add a new agent. Agent you add will receive an email with a confirmation link to activate their account, after which they can access Chatwoot and respond to messages. </p><p> Access to Chatwoot's features are based on following roles. </p><p> <b>Agent</b> - Agents with this role can only access inboxes, reports and conversations. They can assign conversations to other agents or themselves and resolve conversations.</p><p> <b>Administrator</b> - Administrator will have access to all Chatwoot features enabled for your account, including settings, along with all of a normal agents' privileges.</p>",
"AGENT_TYPES": [ "AGENT_TYPES": {
{ "ADMINISTRATOR": "Administrátor",
"name": "administrator", "AGENT": "Agent"
"label": "Administrátor"
}, },
{
"name": "agent",
"label": "Agent"
}
],
"LIST": { "LIST": {
"404": "K tomuto účtu nejsou přiřazeni žádní agenti", "404": "K tomuto účtu nejsou přiřazeni žádní agenti",
"TITLE": "Spravujte agenty ve vašem týmu", "TITLE": "Spravujte agenty ve vašem týmu",

View file

@ -3,38 +3,32 @@
"HEADER": "Zprávy", "HEADER": "Zprávy",
"LOADING_CHART": "Načítání dat mapy...", "LOADING_CHART": "Načítání dat mapy...",
"NO_ENOUGH_DATA": "Pro vytvoření hlášení jsme neobdrželi dostatek dat, zkuste to prosím později.", "NO_ENOUGH_DATA": "Pro vytvoření hlášení jsme neobdrželi dostatek dat, zkuste to prosím později.",
"METRICS": [ "METRICS": {
{ "CONVERSATIONS": {
"NAME": "Konverzace", "NAME": "Konverzace",
"KEY": "conversations_count",
"DESC": "( celkem)" "DESC": "( celkem)"
}, },
{ "INCOMING_MESSAGES": {
"NAME": "Příchozí zprávy", "NAME": "Příchozí zprávy",
"KEY": "incoming_messages_count",
"DESC": "( celkem)" "DESC": "( celkem)"
}, },
{ "OUTGOING_MESSAGES": {
"NAME": "Odchozí zprávy", "NAME": "Odchozí zprávy",
"KEY": "outgoing_messages_count",
"DESC": "( celkem)" "DESC": "( celkem)"
}, },
{ "FIRST_RESPONSE_TIME": {
"NAME": "Čas první odpovědi", "NAME": "Čas první odpovědi",
"KEY": "avg_first_response_time",
"DESC": "(Průměrný)" "DESC": "(Průměrný)"
}, },
{ "RESOLUTION_TIME": {
"NAME": "Čas rozlišení", "NAME": "Čas rozlišení",
"KEY": "avg_resolution_time",
"DESC": "(Průměrný)" "DESC": "(Průměrný)"
}, },
{ "RESOLUTION_COUNT": {
"NAME": "Počet rozlišení", "NAME": "Počet rozlišení",
"KEY": "resolutions_count",
"DESC": "( celkem)" "DESC": "( celkem)"
} }
], },
"DATE_RANGE": [ "DATE_RANGE": [
{ {
"id": 0, "id": 0,

View file

@ -88,6 +88,7 @@
} }
}, },
"SIDEBAR_ITEMS": { "SIDEBAR_ITEMS": {
"CHANGE_AVAILABILITY_STATUS": "Změnit",
"CHANGE_ACCOUNTS": "Switch Account", "CHANGE_ACCOUNTS": "Switch Account",
"SELECTOR_SUBTITLE": "Select an account from the following list", "SELECTOR_SUBTITLE": "Select an account from the following list",
"PROFILE_SETTINGS": "Nastavení profilu", "PROFILE_SETTINGS": "Nastavení profilu",

View file

@ -4,16 +4,10 @@
"HEADER_BTN_TXT": "Add Agent", "HEADER_BTN_TXT": "Add Agent",
"LOADING": "Fetching Agent List", "LOADING": "Fetching Agent List",
"SIDEBAR_TXT": "<p><b>Agents</b></p> <p> An <b>Agent</b> is a member of your Customer Support team. </p><p> Agents will be able to view and reply to messages from your users. The list shows all agents currently in your account. </p><p> Click on <b>Add Agent</b> to add a new agent. Agent you add will receive an email with a confirmation link to activate their account, after which they can access Chatwoot and respond to messages. </p><p> Access to Chatwoot's features are based on following roles. </p><p> <b>Agent</b> - Agents with this role can only access inboxes, reports and conversations. They can assign conversations to other agents or themselves and resolve conversations.</p><p> <b>Administrator</b> - Administrator will have access to all Chatwoot features enabled for your account, including settings, along with all of a normal agents' privileges.</p>", "SIDEBAR_TXT": "<p><b>Agents</b></p> <p> An <b>Agent</b> is a member of your Customer Support team. </p><p> Agents will be able to view and reply to messages from your users. The list shows all agents currently in your account. </p><p> Click on <b>Add Agent</b> to add a new agent. Agent you add will receive an email with a confirmation link to activate their account, after which they can access Chatwoot and respond to messages. </p><p> Access to Chatwoot's features are based on following roles. </p><p> <b>Agent</b> - Agents with this role can only access inboxes, reports and conversations. They can assign conversations to other agents or themselves and resolve conversations.</p><p> <b>Administrator</b> - Administrator will have access to all Chatwoot features enabled for your account, including settings, along with all of a normal agents' privileges.</p>",
"AGENT_TYPES": [ "AGENT_TYPES": {
{ "ADMINISTRATOR": "Administrator",
"name": "administrator", "AGENT": "Agent"
"label": "Administrator"
}, },
{
"name": "agent",
"label": "Agent"
}
],
"LIST": { "LIST": {
"404": "There are no agents associated to this account", "404": "There are no agents associated to this account",
"TITLE": "Manage agents in your team", "TITLE": "Manage agents in your team",
@ -35,9 +29,9 @@
"PLACEHOLDER": "Please enter a name of the agent" "PLACEHOLDER": "Please enter a name of the agent"
}, },
"AGENT_TYPE": { "AGENT_TYPE": {
"LABEL": "Agent Type", "LABEL": "Role",
"PLACEHOLDER": "Please select a type", "PLACEHOLDER": "Please select a role",
"ERROR": "Agent type is required" "ERROR": "Role is required"
}, },
"EMAIL": { "EMAIL": {
"LABEL": "Email Address", "LABEL": "Email Address",
@ -72,9 +66,9 @@
"PLACEHOLDER": "Please enter a name of the agent" "PLACEHOLDER": "Please enter a name of the agent"
}, },
"AGENT_TYPE": { "AGENT_TYPE": {
"LABEL": "Agent Type", "LABEL": "Role",
"PLACEHOLDER": "Please select a type", "PLACEHOLDER": "Please select a role",
"ERROR": "Agent type is required" "ERROR": "Role is required"
}, },
"EMAIL": { "EMAIL": {
"LABEL": "Email Address", "LABEL": "Email Address",

View file

@ -3,38 +3,32 @@
"HEADER": "Reports", "HEADER": "Reports",
"LOADING_CHART": "Loading chart data...", "LOADING_CHART": "Loading chart data...",
"NO_ENOUGH_DATA": "We've not received enough data points to generate report, Please try again later.", "NO_ENOUGH_DATA": "We've not received enough data points to generate report, Please try again later.",
"METRICS": [ "METRICS": {
{ "CONVERSATIONS": {
"NAME": "Conversations", "NAME": "Conversations",
"KEY": "conversations_count",
"DESC": "( Total )" "DESC": "( Total )"
}, },
{ "INCOMING_MESSAGES": {
"NAME": "Incoming Messages", "NAME": "Incoming Messages",
"KEY": "incoming_messages_count",
"DESC": "( Total )" "DESC": "( Total )"
}, },
{ "OUTGOING_MESSAGES": {
"NAME": "Outgoing Messages", "NAME": "Outgoing Messages",
"KEY": "outgoing_messages_count",
"DESC": "( Total )" "DESC": "( Total )"
}, },
{ "FIRST_RESPONSE_TIME": {
"NAME": "First response time", "NAME": "First response time",
"KEY": "avg_first_response_time",
"DESC": "( Avg )" "DESC": "( Avg )"
}, },
{ "RESOLUTION_TIME": {
"NAME": "Resolution Time", "NAME": "Resolution Time",
"KEY": "avg_resolution_time",
"DESC": "( Avg )" "DESC": "( Avg )"
}, },
{ "RESOLUTION_COUNT": {
"NAME": "Resolution Count", "NAME": "Resolution Count",
"KEY": "resolutions_count",
"DESC": "( Total )" "DESC": "( Total )"
} }
], },
"DATE_RANGE": [ "DATE_RANGE": [
{ {
"id": 0, "id": 0,

View file

@ -88,6 +88,7 @@
} }
}, },
"SIDEBAR_ITEMS": { "SIDEBAR_ITEMS": {
"CHANGE_AVAILABILITY_STATUS": "Change",
"CHANGE_ACCOUNTS": "Switch Account", "CHANGE_ACCOUNTS": "Switch Account",
"SELECTOR_SUBTITLE": "Select an account from the following list", "SELECTOR_SUBTITLE": "Select an account from the following list",
"PROFILE_SETTINGS": "Profile Settings", "PROFILE_SETTINGS": "Profile Settings",

View file

@ -4,16 +4,10 @@
"HEADER_BTN_TXT": "Agent hinzufügen", "HEADER_BTN_TXT": "Agent hinzufügen",
"LOADING": "Agentenliste abrufen", "LOADING": "Agentenliste abrufen",
"SIDEBAR_TXT": "<p><b>Agents</b></p> <p> An <b>Agent</b> is a member of your Customer Support team. </p><p> Agents will be able to view and reply to messages from your users. The list shows all agents currently in your account. </p><p> Click on <b>Add Agent</b> to add a new agent. Agent you add will receive an email with a confirmation link to activate their account, after which they can access Chatwoot and respond to messages. </p><p> Access to Chatwoot's features are based on following roles. </p><p> <b>Agent</b> - Agents with this role can only access inboxes, reports and conversations. They can assign conversations to other agents or themselves and resolve conversations.</p><p> <b>Administrator</b> - Administrator will have access to all Chatwoot features enabled for your account, including settings, along with all of a normal agents' privileges.</p>", "SIDEBAR_TXT": "<p><b>Agents</b></p> <p> An <b>Agent</b> is a member of your Customer Support team. </p><p> Agents will be able to view and reply to messages from your users. The list shows all agents currently in your account. </p><p> Click on <b>Add Agent</b> to add a new agent. Agent you add will receive an email with a confirmation link to activate their account, after which they can access Chatwoot and respond to messages. </p><p> Access to Chatwoot's features are based on following roles. </p><p> <b>Agent</b> - Agents with this role can only access inboxes, reports and conversations. They can assign conversations to other agents or themselves and resolve conversations.</p><p> <b>Administrator</b> - Administrator will have access to all Chatwoot features enabled for your account, including settings, along with all of a normal agents' privileges.</p>",
"AGENT_TYPES": [ "AGENT_TYPES": {
{ "ADMINISTRATOR": "Administrator",
"name": "administrator", "AGENT": "Agent"
"label": "Administrator"
}, },
{
"name": "agent",
"label": "Agent"
}
],
"LIST": { "LIST": {
"404": "Diesem Konto sind keine Agenten zugeordnet", "404": "Diesem Konto sind keine Agenten zugeordnet",
"TITLE": "Verwalten Sie Agenten in Ihrem Team", "TITLE": "Verwalten Sie Agenten in Ihrem Team",

View file

@ -3,38 +3,32 @@
"HEADER": "Berichte", "HEADER": "Berichte",
"LOADING_CHART": "Diagrammdaten laden ...", "LOADING_CHART": "Diagrammdaten laden ...",
"NO_ENOUGH_DATA": "Wir haben nicht genügend Datenpunkte erhalten, um einen Bericht zu erstellen. Bitte versuchen Sie es später erneut.", "NO_ENOUGH_DATA": "Wir haben nicht genügend Datenpunkte erhalten, um einen Bericht zu erstellen. Bitte versuchen Sie es später erneut.",
"METRICS": [ "METRICS": {
{ "CONVERSATIONS": {
"NAME": "Gespräche", "NAME": "Gespräche",
"KEY": "conversations_count",
"DESC": "( Total )" "DESC": "( Total )"
}, },
{ "INCOMING_MESSAGES": {
"NAME": "Eingehende Nachrichten", "NAME": "Eingehende Nachrichten",
"KEY": "incoming_messages_count",
"DESC": "( Total )" "DESC": "( Total )"
}, },
{ "OUTGOING_MESSAGES": {
"NAME": "Ausgehende Nachrichten", "NAME": "Ausgehende Nachrichten",
"KEY": "outgoing_messages_count",
"DESC": "( Total )" "DESC": "( Total )"
}, },
{ "FIRST_RESPONSE_TIME": {
"NAME": "Erste Antwortzeit", "NAME": "Erste Antwortzeit",
"KEY": "avg_first_response_time",
"DESC": "( Avg )" "DESC": "( Avg )"
}, },
{ "RESOLUTION_TIME": {
"NAME": "Lösungszeit", "NAME": "Lösungszeit",
"KEY": "avg_resolution_time",
"DESC": "( Avg )" "DESC": "( Avg )"
}, },
{ "RESOLUTION_COUNT": {
"NAME": "Auflösungsanzahl", "NAME": "Auflösungsanzahl",
"KEY": "resolutions_count",
"DESC": "( Total )" "DESC": "( Total )"
} }
], },
"DATE_RANGE": [ "DATE_RANGE": [
{ {
"id": 0, "id": 0,

View file

@ -88,6 +88,7 @@
} }
}, },
"SIDEBAR_ITEMS": { "SIDEBAR_ITEMS": {
"CHANGE_AVAILABILITY_STATUS": "Wechseln",
"CHANGE_ACCOUNTS": "Switch Account", "CHANGE_ACCOUNTS": "Switch Account",
"SELECTOR_SUBTITLE": "Select an account from the following list", "SELECTOR_SUBTITLE": "Select an account from the following list",
"PROFILE_SETTINGS": "Profileinstellungen", "PROFILE_SETTINGS": "Profileinstellungen",

View file

@ -4,16 +4,10 @@
"HEADER_BTN_TXT": "Προσθήκη Πράκτορα", "HEADER_BTN_TXT": "Προσθήκη Πράκτορα",
"LOADING": "Λήψη της λίστα των Πρακτόρων", "LOADING": "Λήψη της λίστα των Πρακτόρων",
"SIDEBAR_TXT": "<p><b>Πράκτορες</b></p> <p> Ένας <b>Πράκτορας</b> είναι ένα μέλος της ομάδας υποστήριξής σας. </p><p> Οι πράκτορες θα μπορούν να δουν και να απαντήσουν στα μηνύματα των χρηστών. Στην λίστα φαίνονται όλοι οι πράκτορες που συμμετέχουν στον λογαριασμό σας. </p><p> Πατήστε στο <b>Προσθήκη Πράκτορα</b> για να προσθέσετε έναν νέο. Ο πράκτορας θα λάβει ένα email με σύνδεσμο επιβεβαίωσης για να ενεργοποιήσει τον λογαριασμό του, ύστερα θα μπορούν να δουν το Chatwoot και να ανταποκρίνονται στα μηνύματά τους. </p><p> Η πρόσβαση στις δυνατότητες του Chatwoot βασίζεται στους παρακάτω ρόλους. </p><p> <b>Πράκτορας</b> - Οι χρήστες με αυτόν τον ρόλο έχουν πρόσβαση μόνο στα εισερχόμενα, αναφορές και τις συζητήσεις. Μπορούν επίσης να αναθέσουν συζητήσεις σε άλλους πράκτορες ή τον εαυτό τους και να τις ολοκληρώσουν.</p><p> <b>Διαχειριστής</b> - Ο διαχειριστής θα έχει πρόσβαση σε όλες τις δυνατότητες του Chatwoot που έχουν ενεργοποιηθεί για τον λογαριασμό, συμπεριλαμβανομένων των ρυθμίσεων της εφαρμογής, όπως επίσης και όλα τα δικαιώματα που έχει ένας πράκτορας.</p>", "SIDEBAR_TXT": "<p><b>Πράκτορες</b></p> <p> Ένας <b>Πράκτορας</b> είναι ένα μέλος της ομάδας υποστήριξής σας. </p><p> Οι πράκτορες θα μπορούν να δουν και να απαντήσουν στα μηνύματα των χρηστών. Στην λίστα φαίνονται όλοι οι πράκτορες που συμμετέχουν στον λογαριασμό σας. </p><p> Πατήστε στο <b>Προσθήκη Πράκτορα</b> για να προσθέσετε έναν νέο. Ο πράκτορας θα λάβει ένα email με σύνδεσμο επιβεβαίωσης για να ενεργοποιήσει τον λογαριασμό του, ύστερα θα μπορούν να δουν το Chatwoot και να ανταποκρίνονται στα μηνύματά τους. </p><p> Η πρόσβαση στις δυνατότητες του Chatwoot βασίζεται στους παρακάτω ρόλους. </p><p> <b>Πράκτορας</b> - Οι χρήστες με αυτόν τον ρόλο έχουν πρόσβαση μόνο στα εισερχόμενα, αναφορές και τις συζητήσεις. Μπορούν επίσης να αναθέσουν συζητήσεις σε άλλους πράκτορες ή τον εαυτό τους και να τις ολοκληρώσουν.</p><p> <b>Διαχειριστής</b> - Ο διαχειριστής θα έχει πρόσβαση σε όλες τις δυνατότητες του Chatwoot που έχουν ενεργοποιηθεί για τον λογαριασμό, συμπεριλαμβανομένων των ρυθμίσεων της εφαρμογής, όπως επίσης και όλα τα δικαιώματα που έχει ένας πράκτορας.</p>",
"AGENT_TYPES": [ "AGENT_TYPES": {
{ "ADMINISTRATOR": "Διαχειριστής",
"name": "administrator", "AGENT": "Πράκτορας"
"label": "Διαχειριστής"
}, },
{
"name": "agent",
"label": "Πράκτορας"
}
],
"LIST": { "LIST": {
"404": "Δεν υπάρχουν πράκτορες σε αυτόν τον λογαριασμό", "404": "Δεν υπάρχουν πράκτορες σε αυτόν τον λογαριασμό",
"TITLE": "Διαχείριση πρακτόρων της ομάδας σας", "TITLE": "Διαχείριση πρακτόρων της ομάδας σας",

View file

@ -3,38 +3,32 @@
"HEADER": "Αναφορές", "HEADER": "Αναφορές",
"LOADING_CHART": "Φόρτωση δεδομένων γραφήματος...", "LOADING_CHART": "Φόρτωση δεδομένων γραφήματος...",
"NO_ENOUGH_DATA": "Δεν έχουν ληφθεί αρκετά σημεία δεδομένων για την δημιουργία της αναφοράς, Παρακαλώ προσπαθήστε αργότερα.", "NO_ENOUGH_DATA": "Δεν έχουν ληφθεί αρκετά σημεία δεδομένων για την δημιουργία της αναφοράς, Παρακαλώ προσπαθήστε αργότερα.",
"METRICS": [ "METRICS": {
{ "CONVERSATIONS": {
"NAME": "Συζητήσεις", "NAME": "Συζητήσεις",
"KEY": "conversations_count",
"DESC": "(Σύνολο)" "DESC": "(Σύνολο)"
}, },
{ "INCOMING_MESSAGES": {
"NAME": "Εισερχόμενα Μηνύματα", "NAME": "Εισερχόμενα Μηνύματα",
"KEY": "incoming_messages_count",
"DESC": "(Σύνολο)" "DESC": "(Σύνολο)"
}, },
{ "OUTGOING_MESSAGES": {
"NAME": "Εξερχόμενα Μηνύματα", "NAME": "Εξερχόμενα Μηνύματα",
"KEY": "outgoing_messages_count",
"DESC": "(Σύνολο)" "DESC": "(Σύνολο)"
}, },
{ "FIRST_RESPONSE_TIME": {
"NAME": "Χρόνος πρώτης ανταπόκρισης", "NAME": "Χρόνος πρώτης ανταπόκρισης",
"KEY": "avg_first_response_time",
"DESC": "(Μ.Ο.)" "DESC": "(Μ.Ο.)"
}, },
{ "RESOLUTION_TIME": {
"NAME": "Χρόνος ανάλυσης", "NAME": "Χρόνος ανάλυσης",
"KEY": "avg_resolution_time",
"DESC": "(Μ.Ο.)" "DESC": "(Μ.Ο.)"
}, },
{ "RESOLUTION_COUNT": {
"NAME": "Αριθμός Αναλύσεων", "NAME": "Αριθμός Αναλύσεων",
"KEY": "resolutions_count",
"DESC": "(Σύνολο)" "DESC": "(Σύνολο)"
} }
], },
"DATE_RANGE": [ "DATE_RANGE": [
{ {
"id": 0, "id": 0,

View file

@ -88,6 +88,7 @@
} }
}, },
"SIDEBAR_ITEMS": { "SIDEBAR_ITEMS": {
"CHANGE_AVAILABILITY_STATUS": "Να αλλάξει",
"CHANGE_ACCOUNTS": "Αλλαγή Λογαριασμού", "CHANGE_ACCOUNTS": "Αλλαγή Λογαριασμού",
"SELECTOR_SUBTITLE": "Επιλέξτε ένα λογαριασμό από την Λίστα", "SELECTOR_SUBTITLE": "Επιλέξτε ένα λογαριασμό από την Λίστα",
"PROFILE_SETTINGS": "Ρυθμίσεις Προφίλ", "PROFILE_SETTINGS": "Ρυθμίσεις Προφίλ",

View file

@ -4,16 +4,10 @@
"HEADER_BTN_TXT": "Add Agent", "HEADER_BTN_TXT": "Add Agent",
"LOADING": "Fetching Agent List", "LOADING": "Fetching Agent List",
"SIDEBAR_TXT": "<p><b>Agents</b></p> <p> An <b>Agent</b> is a member of your Customer Support team. </p><p> Agents will be able to view and reply to messages from your users. The list shows all agents currently in your account. </p><p> Click on <b>Add Agent</b> to add a new agent. Agent you add will receive an email with a confirmation link to activate their account, after which they can access Chatwoot and respond to messages. </p><p> Access to Chatwoot's features are based on following roles. </p><p> <b>Agent</b> - Agents with this role can only access inboxes, reports and conversations. They can assign conversations to other agents or themselves and resolve conversations.</p><p> <b>Administrator</b> - Administrator will have access to all Chatwoot features enabled for your account, including settings, along with all of a normal agents' privileges.</p>", "SIDEBAR_TXT": "<p><b>Agents</b></p> <p> An <b>Agent</b> is a member of your Customer Support team. </p><p> Agents will be able to view and reply to messages from your users. The list shows all agents currently in your account. </p><p> Click on <b>Add Agent</b> to add a new agent. Agent you add will receive an email with a confirmation link to activate their account, after which they can access Chatwoot and respond to messages. </p><p> Access to Chatwoot's features are based on following roles. </p><p> <b>Agent</b> - Agents with this role can only access inboxes, reports and conversations. They can assign conversations to other agents or themselves and resolve conversations.</p><p> <b>Administrator</b> - Administrator will have access to all Chatwoot features enabled for your account, including settings, along with all of a normal agents' privileges.</p>",
"AGENT_TYPES": [ "AGENT_TYPES": {
{ "ADMINISTRATOR": "Administrator",
"name": "administrator", "AGENT": "Agent"
"label": "Administrator"
}, },
{
"name": "agent",
"label": "Agent"
}
],
"LIST": { "LIST": {
"404": "There are no agents associated to this account", "404": "There are no agents associated to this account",
"TITLE": "Manage agents in your team", "TITLE": "Manage agents in your team",
@ -35,9 +29,9 @@
"PLACEHOLDER": "Please enter a name of the agent" "PLACEHOLDER": "Please enter a name of the agent"
}, },
"AGENT_TYPE": { "AGENT_TYPE": {
"LABEL": "Agent Type", "LABEL": "Role",
"PLACEHOLDER": "Please select a type", "PLACEHOLDER": "Please select a role",
"ERROR": "Agent type is required" "ERROR": "Role is required"
}, },
"EMAIL": { "EMAIL": {
"LABEL": "Email Address", "LABEL": "Email Address",
@ -72,9 +66,9 @@
"PLACEHOLDER": "Please enter a name of the agent" "PLACEHOLDER": "Please enter a name of the agent"
}, },
"AGENT_TYPE": { "AGENT_TYPE": {
"LABEL": "Agent Type", "LABEL": "Role",
"PLACEHOLDER": "Please select a type", "PLACEHOLDER": "Please select a role",
"ERROR": "Agent type is required" "ERROR": "Role is required"
}, },
"EMAIL": { "EMAIL": {
"LABEL": "Email Address", "LABEL": "Email Address",

View file

@ -3,6 +3,7 @@
"NOT_AVAILABLE": "Not Available", "NOT_AVAILABLE": "Not Available",
"EMAIL_ADDRESS": "Email Address", "EMAIL_ADDRESS": "Email Address",
"PHONE_NUMBER": "Phone number", "PHONE_NUMBER": "Phone number",
"COPY_SUCCESSFUL": "Copied to clipboard successfully",
"COMPANY": "Company", "COMPANY": "Company",
"LOCATION": "Location", "LOCATION": "Location",
"CONVERSATION_TITLE": "Conversation Details", "CONVERSATION_TITLE": "Conversation Details",
@ -32,7 +33,9 @@
"NO_AVAILABLE_LABELS": "There are no labels added to this conversation." "NO_AVAILABLE_LABELS": "There are no labels added to this conversation."
}, },
"MUTE_CONTACT": "Mute Conversation", "MUTE_CONTACT": "Mute Conversation",
"UNMUTE_CONTACT": "Unmute Conversation",
"MUTED_SUCCESS": "This conversation is muted for 6 hours", "MUTED_SUCCESS": "This conversation is muted for 6 hours",
"UNMUTED_SUCCESS": "This conversation is unmuted",
"SEND_TRANSCRIPT": "Send Transcript", "SEND_TRANSCRIPT": "Send Transcript",
"EDIT_LABEL": "Edit" "EDIT_LABEL": "Edit"
}, },

View file

@ -73,6 +73,13 @@
"ENABLED": "Enabled", "ENABLED": "Enabled",
"DISABLED": "Disabled" "DISABLED": "Disabled"
}, },
"REPLY_TIME": {
"TITLE": "Set Reply time",
"IN_A_FEW_MINUTES": "In a few minutes",
"IN_A_FEW_HOURS": "In a few hours",
"IN_A_DAY": "In a day",
"HELP_TEXT": "This reply time will be displayed on the live chat widget"
},
"WIDGET_COLOR": { "WIDGET_COLOR": {
"LABEL": "Widget Color", "LABEL": "Widget Color",
"PLACEHOLDER": "Update the widget color used in widget" "PLACEHOLDER": "Update the widget color used in widget"
@ -233,6 +240,12 @@
"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."
},
"FACEBOOK_REAUTHORIZE": {
"TITLE": "Reauthorize",
"SUBTITLE": "Your Facebook connection has expired, please reconnect your Facebook page to continue services",
"MESSAGE_SUCCESS": "Reconnection successful",
"MESSAGE_ERROR": "There was an error, please try again"
} }
} }
} }

View file

@ -3,17 +3,41 @@
"HEADER": "Reports", "HEADER": "Reports",
"LOADING_CHART": "Loading chart data...", "LOADING_CHART": "Loading chart data...",
"NO_ENOUGH_DATA": "We've not received enough data points to generate report, Please try again later.", "NO_ENOUGH_DATA": "We've not received enough data points to generate report, Please try again later.",
"METRICS": [ "METRICS": {
{ "NAME": "Conversations", "KEY": "conversations_count", "DESC": "( Total )" }, "CONVERSATIONS": {
{ "NAME": "Incoming Messages", "KEY": "incoming_messages_count", "DESC": "( Total )" }, "NAME": "Conversations",
{ "NAME": "Outgoing Messages", "KEY": "outgoing_messages_count", "DESC": "( Total )" }, "DESC": "( Total )"
{ "NAME": "First response time", "KEY": "avg_first_response_time", "DESC": "( Avg )" }, },
{ "NAME": "Resolution Time", "KEY": "avg_resolution_time", "DESC": "( Avg )" }, "INCOMING_MESSAGES": {
{ "NAME": "Resolution Count", "KEY": "resolutions_count", "DESC": "( Total )" } "NAME": "Incoming Messages",
], "DESC": "( Total )"
},
"OUTGOING_MESSAGES": {
"NAME": "Outgoing Messages",
"DESC": "( Total )"
},
"FIRST_RESPONSE_TIME": {
"NAME": "First response time",
"DESC": "( Avg )"
},
"RESOLUTION_TIME": {
"NAME": "Resolution Time",
"DESC": "( Avg )"
},
"RESOLUTION_COUNT": {
"NAME": "Resolution Count",
"DESC": "( Total )"
}
},
"DATE_RANGE": [ "DATE_RANGE": [
{ "id": 0, "name": "Last 7 days" }, {
{ "id": 1, "name": "Last 30 days" } "id": 0,
"name": "Last 7 days"
},
{
"id": 1,
"name": "Last 30 days"
}
] ]
} }
} }

View file

@ -90,6 +90,7 @@
} }
}, },
"SIDEBAR_ITEMS": { "SIDEBAR_ITEMS": {
"CHANGE_AVAILABILITY_STATUS": "Change",
"CHANGE_ACCOUNTS": "Switch Account", "CHANGE_ACCOUNTS": "Switch Account",
"SELECTOR_SUBTITLE": "Select an account from the following list", "SELECTOR_SUBTITLE": "Select an account from the following list",
"PROFILE_SETTINGS": "Profile Settings", "PROFILE_SETTINGS": "Profile Settings",

View file

@ -3,21 +3,15 @@
"HEADER": "Agentes", "HEADER": "Agentes",
"HEADER_BTN_TXT": "Añadir agente", "HEADER_BTN_TXT": "Añadir agente",
"LOADING": "Se están listando los agentes", "LOADING": "Se están listando los agentes",
"SIDEBAR_TXT": "<p><b>Agentes</b></p> <p> Un <b>Agente</b> es miembro de su equipo de Atención al Cliente. </p><p> Los agentes podrán ver y responder a los mensajes de sus usuarios. La lista muestra todos los agentes actualmente en tu cuenta. </p><p> Haga clic en <b>Añadir agente</b> para añadir un nuevo agente. El agente que añadas recibirá un correo electrónico con un enlace de confirmación para activar su cuenta, después de lo cual podrá acceder a Chatwoot y responder a los mensajes. </p><p> El acceso a las características de Chatwoot se basa en los siguientes roles. </p><p> <b>Agente</b> - Los agentes con este rol solamente pueden acceder a bandejas, informes y conversaciones. Pueden asignar conversaciones a otros agentes o a sí mismos y resolver conversaciones.</p><p> <b>Administrador</b> - El administrador tendrá acceso a todas las características de Chatwoot habilitadas para su cuenta, incluyendo configuración y facturación, junto con todos los privilegios de los agentes normales.</p>", "SIDEBAR_TXT": "<p><b>Agentes</b></p> <p> Un <b>Agente</b> es miembro de su equipo de Atención al Cliente. </p><p> Los agentes podrán ver y responder a los mensajes de sus usuarios. La lista muestra todos los agentes actualmente en su cuenta. </p><p> Haga clic en <b>Añadir agente</b> para añadir un nuevo agente. El agente que añada recibirá un correo electrónico con un enlace de confirmación para activar la cuenta, después de lo cual podrá acceder a Chatwoot y responder los mensajes. </p><p> El acceso a las características de Chatwoot se basa en los siguientes roles. </p><p> <b>Agente</b> - Los agentes con este rol solamente pueden acceder a bandejas, informes y conversaciones. Pueden asignar conversaciones a otros agentes o a sí mismos y resolver conversaciones.</p><p> <b>Administrador</b> - El administrador tendrá acceso a todas las características de Chatwoot habilitadas para su cuenta, incluyendo configuración y facturación, junto con todos los privilegios de los agentes normales.</p>",
"AGENT_TYPES": [ "AGENT_TYPES": {
{ "ADMINISTRATOR": "Administrador",
"name": "administrator", "AGENT": "Agente"
"label": "Administrador"
}, },
{
"name": "agent",
"label": "Agente"
}
],
"LIST": { "LIST": {
"404": "No hay agentes asociados a esta cuenta", "404": "No hay agentes asociados a esta cuenta",
"TITLE": "Administrar agentes en tu equipo", "TITLE": "Administrar agentes en su equipo",
"DESC": "Puedes añadir/eliminar agentes a/en tu equipo.", "DESC": "Puede añadir/eliminar agentes a/de su equipo.",
"NAME": "Nombre", "NAME": "Nombre",
"EMAIL": "Correo electrónico", "EMAIL": "Correo electrónico",
"STATUS": "Estado", "STATUS": "Estado",
@ -26,13 +20,13 @@
"VERIFICATION_PENDING": "Verificación pendiente" "VERIFICATION_PENDING": "Verificación pendiente"
}, },
"ADD": { "ADD": {
"TITLE": "Añadir agente a tu equipo", "TITLE": "Añadir agente a su equipo",
"DESC": "Puedes añadir personas que podrán manejar el soporte para tus bandejas de entrada.", "DESC": "Puede añadir personas que podrán manejar el soporte para sus bandejas de entrada.",
"CANCEL_BUTTON_TEXT": "Cancelar", "CANCEL_BUTTON_TEXT": "Cancelar",
"FORM": { "FORM": {
"NAME": { "NAME": {
"LABEL": "Nombre del agente", "LABEL": "Nombre del agente",
"PLACEHOLDER": "Introduce el nombre del agente" "PLACEHOLDER": "Introduzca el nombre del agente"
}, },
"AGENT_TYPE": { "AGENT_TYPE": {
"LABEL": "Tipo de agente", "LABEL": "Tipo de agente",
@ -41,21 +35,21 @@
}, },
"EMAIL": { "EMAIL": {
"LABEL": "Dirección de correo", "LABEL": "Dirección de correo",
"PLACEHOLDER": "Por favor, introduzca una dirección de correo electrónico del agente" "PLACEHOLDER": "Por favor, introduzca la dirección de correo electrónico del agente"
}, },
"SUBMIT": "Añadir agente" "SUBMIT": "Añadir agente"
}, },
"API": { "API": {
"SUCCESS_MESSAGE": "Agente añadido correctamente", "SUCCESS_MESSAGE": "Agente añadido correctamente",
"EXIST_MESSAGE": "El correo electrónico del agente ya está en uso, por favor intente otra dirección de correo electrónico", "EXIST_MESSAGE": "El correo electrónico del agente ya está en uso, por favor intente otra dirección de correo electrónico",
"ERROR_MESSAGE": "No se pudo conectar al servidor Woot, por favor inténtalo de nuevo más tarde" "ERROR_MESSAGE": "No se pudo conectar al servidor Woot, por favor inténtelo de nuevo más tarde"
} }
}, },
"DELETE": { "DELETE": {
"BUTTON_TEXT": "Eliminar", "BUTTON_TEXT": "Eliminar",
"API": { "API": {
"SUCCESS_MESSAGE": "Agente eliminado correctamente", "SUCCESS_MESSAGE": "Agente eliminado correctamente",
"ERROR_MESSAGE": "No se pudo conectar al servidor Woot, por favor inténtalo de nuevo más tarde" "ERROR_MESSAGE": "No se pudo conectar al servidor Woot, por favor inténtelo de nuevo más tarde"
}, },
"CONFIRM": { "CONFIRM": {
"TITLE": "Confirmar eliminación", "TITLE": "Confirmar eliminación",
@ -69,16 +63,16 @@
"FORM": { "FORM": {
"NAME": { "NAME": {
"LABEL": "Nombre del agente", "LABEL": "Nombre del agente",
"PLACEHOLDER": "Por favor, introduzca un nombre del agente" "PLACEHOLDER": "Por favor, introduzca el nombre del agente"
}, },
"AGENT_TYPE": { "AGENT_TYPE": {
"LABEL": "Tipo de agente", "LABEL": "Tipo de agente",
"PLACEHOLDER": "Por favor, seleccione un tipo", "PLACEHOLDER": "Por favor, seleccione un tipo",
"ERROR": "El tipo de agente es requerido" "ERROR": "El tipo de agente es obligatorio"
}, },
"EMAIL": { "EMAIL": {
"LABEL": "Dirección de email", "LABEL": "Dirección de email",
"PLACEHOLDER": "Por favor, introduzca una dirección de correo electrónico del agente" "PLACEHOLDER": "Por favor, introduzca la dirección de correo electrónico del agente"
}, },
"SUBMIT": "Editar agente" "SUBMIT": "Editar agente"
}, },
@ -86,13 +80,13 @@
"CANCEL_BUTTON_TEXT": "Cancelar", "CANCEL_BUTTON_TEXT": "Cancelar",
"API": { "API": {
"SUCCESS_MESSAGE": "Agente actualizado correctamente", "SUCCESS_MESSAGE": "Agente actualizado correctamente",
"ERROR_MESSAGE": "No se pudo conectar al servidor Woot, por favor inténtalo de nuevo más tarde" "ERROR_MESSAGE": "No se pudo conectar al servidor Woot, por favor inténtelo de nuevo más tarde"
}, },
"PASSWORD_RESET": { "PASSWORD_RESET": {
"ADMIN_RESET_BUTTON": "Restablecer contraseña", "ADMIN_RESET_BUTTON": "Restablecer contraseña",
"ADMIN_SUCCESS_MESSAGE": "Se ha enviado un correo electrónico con instrucciones para restablecer la contraseña al agente", "ADMIN_SUCCESS_MESSAGE": "Se ha enviado un correo electrónico con instrucciones para restablecer la contraseña del agente",
"SUCCESS_MESSAGE": "Contraseña del agente restablecida con éxito", "SUCCESS_MESSAGE": "Contraseña del agente restablecida con éxito",
"ERROR_MESSAGE": "No se pudo conectar al servidor Woot, por favor inténtalo de nuevo más tarde" "ERROR_MESSAGE": "No se pudo conectar al servidor Woot, por favor inténtelo de nuevo más tarde"
} }
}, },
"SEARCH": { "SEARCH": {

View file

@ -6,7 +6,7 @@
"SEARCH_404": "No hay elementos que coincidan con esta consulta", "SEARCH_404": "No hay elementos que coincidan con esta consulta",
"SIDEBAR_TXT": "<p><b>Respuestas predefinidas</b> </p><p> Respuestas predefinidas son plantillas de respuesta guardadas que pueden utilizarse para enviar rápidamente una respuesta a una conversación. </p><p> Para crear una respuesta predefinida, simplemente haga clic en <b>Añadir respuesta predefinida</b>. También puede editar o eliminar una respuesta predefinida haciendo clic en el botón Editar o Borrar </p><p> Las respuestas predefinidas se utilizan con la ayuda de <b>Códigos cortos</b>. Los agentes pueden acceder a las respuestas predefinidas mientras están en un chat escribiendo <b>'/'</b> seguido del código corto. </p>", "SIDEBAR_TXT": "<p><b>Respuestas predefinidas</b> </p><p> Respuestas predefinidas son plantillas de respuesta guardadas que pueden utilizarse para enviar rápidamente una respuesta a una conversación. </p><p> Para crear una respuesta predefinida, simplemente haga clic en <b>Añadir respuesta predefinida</b>. También puede editar o eliminar una respuesta predefinida haciendo clic en el botón Editar o Borrar </p><p> Las respuestas predefinidas se utilizan con la ayuda de <b>Códigos cortos</b>. Los agentes pueden acceder a las respuestas predefinidas mientras están en un chat escribiendo <b>'/'</b> seguido del código corto. </p>",
"LIST": { "LIST": {
"404": "No hay respuestas enlatadas disponibles en esta cuenta.", "404": "No hay respuestas predefinidas disponibles en esta cuenta.",
"TITLE": "Administrar respuestas predefinidas", "TITLE": "Administrar respuestas predefinidas",
"DESC": "Las respuestas predefinidas son plantillas de respuesta predefinidas que se pueden utilizar para enviar rápidamente respuestas a los Tickets.", "DESC": "Las respuestas predefinidas son plantillas de respuesta predefinidas que se pueden utilizar para enviar rápidamente respuestas a los Tickets.",
"TABLE_HEADER": [ "TABLE_HEADER": [
@ -17,7 +17,7 @@
}, },
"ADD": { "ADD": {
"TITLE": "Añadir respuesta predefinida", "TITLE": "Añadir respuesta predefinida",
"DESC": "Las respuestas predefinidas son plantillas de respuesta guardadas que se pueden utilizar para enviar rápidamente la respuesta a la conversación .", "DESC": "Las respuestas predefinidas son plantillas de respuesta guardadas que se pueden utilizar para enviar rápidamente la respuesta a la conversación.",
"CANCEL_BUTTON_TEXT": "Cancelar", "CANCEL_BUTTON_TEXT": "Cancelar",
"FORM": { "FORM": {
"SHORT_CODE": { "SHORT_CODE": {
@ -34,7 +34,7 @@
}, },
"API": { "API": {
"SUCCESS_MESSAGE": "Respuesta predefinida añadida correctamente", "SUCCESS_MESSAGE": "Respuesta predefinida añadida correctamente",
"ERROR_MESSAGE": "No se pudo conectar al servidor Woot, por favor inténtalo de nuevo más tarde" "ERROR_MESSAGE": "No se pudo conectar al servidor Woot, por favor inténtelo de nuevo más tarde"
} }
}, },
"EDIT": { "EDIT": {
@ -56,14 +56,14 @@
"BUTTON_TEXT": "Editar", "BUTTON_TEXT": "Editar",
"API": { "API": {
"SUCCESS_MESSAGE": "Respuesta predefinida actualizada correctamente", "SUCCESS_MESSAGE": "Respuesta predefinida actualizada correctamente",
"ERROR_MESSAGE": "No se pudo conectar al servidor Woot, por favor inténtalo de nuevo más tarde" "ERROR_MESSAGE": "No se pudo conectar al servidor Woot, por favor inténtelo de nuevo más tarde"
} }
}, },
"DELETE": { "DELETE": {
"BUTTON_TEXT": "Eliminar", "BUTTON_TEXT": "Eliminar",
"API": { "API": {
"SUCCESS_MESSAGE": "Respuesta predefinida eliminada correctamente", "SUCCESS_MESSAGE": "Respuesta predefinida eliminada correctamente",
"ERROR_MESSAGE": "No se pudo conectar al servidor Woot, por favor inténtalo de nuevo más tarde" "ERROR_MESSAGE": "No se pudo conectar al servidor Woot, por favor inténtelo de nuevo más tarde"
}, },
"CONFIRM": { "CONFIRM": {
"TITLE": "Confirmar eliminación", "TITLE": "Confirmar eliminación",

View file

@ -12,17 +12,17 @@
}, },
"STATUS_TABS": [ "STATUS_TABS": [
{ {
"NAME": "Abrir", "NAME": "Abiertas",
"KEY": "openCount" "KEY": "openCount"
}, },
{ {
"NAME": "Resuelto", "NAME": "Resueltas",
"KEY": "allConvCount" "KEY": "allConvCount"
} }
], ],
"ASSIGNEE_TYPE_TABS": [ "ASSIGNEE_TYPE_TABS": [
{ {
"NAME": "Mina", "NAME": "Mías",
"KEY": "me", "KEY": "me",
"COUNT_KEY": "mineCount" "COUNT_KEY": "mineCount"
}, },
@ -32,18 +32,18 @@
"COUNT_KEY": "unAssignedCount" "COUNT_KEY": "unAssignedCount"
}, },
{ {
"NAME": "Todos", "NAME": "Todas",
"KEY": "all", "KEY": "all",
"COUNT_KEY": "allCount" "COUNT_KEY": "allCount"
} }
], ],
"CHAT_STATUS_ITEMS": [ "CHAT_STATUS_ITEMS": [
{ {
"TEXT": "Abrir", "TEXT": "Abiertas",
"VALUE": "open" "VALUE": "open"
}, },
{ {
"TEXT": "Resuelto", "TEXT": "Resueltas",
"VALUE": "resolved" "VALUE": "resolved"
}, },
{ {
@ -78,7 +78,7 @@
} }
}, },
"RECEIVED_VIA_EMAIL": "Recibido por email", "RECEIVED_VIA_EMAIL": "Recibido por email",
"VIEW_TWEET_IN_TWITTER": "View tweet in Twitter", "VIEW_TWEET_IN_TWITTER": "Ver trino en Twitter",
"REPLY_TO_TWEET": "Reply to this tweet" "REPLY_TO_TWEET": "Responder a éste trino"
} }
} }

View file

@ -1,9 +1,9 @@
{ {
"CONTACT_PANEL": { "CONTACT_PANEL": {
"NOT_AVAILABLE": "Not Available", "NOT_AVAILABLE": "No Disponible",
"EMAIL_ADDRESS": "Dirección de correo", "EMAIL_ADDRESS": "Dirección de correo",
"PHONE_NUMBER": "Número de teléfono", "PHONE_NUMBER": "Número de teléfono",
"COMPANY": "Company", "COMPANY": "Empresa",
"LOCATION": "Ubicación", "LOCATION": "Ubicación",
"CONVERSATION_TITLE": "Detalles de la conversación", "CONVERSATION_TITLE": "Detalles de la conversación",
"BROWSER": "Navegador", "BROWSER": "Navegador",
@ -15,7 +15,7 @@
"TITLE": "Conversaciones anteriores" "TITLE": "Conversaciones anteriores"
}, },
"CUSTOM_ATTRIBUTES": { "CUSTOM_ATTRIBUTES": {
"TITLE": "Custom Attributes" "TITLE": "Atributos personalizados"
}, },
"LABELS": { "LABELS": {
"TITLE": "Etiquetas de conversación", "TITLE": "Etiquetas de conversación",
@ -31,66 +31,66 @@
"NO_LABELS_TO_ADD": "No hay más etiquetas definidas en la cuenta.", "NO_LABELS_TO_ADD": "No hay más etiquetas definidas en la cuenta.",
"NO_AVAILABLE_LABELS": "No hay etiquetas añadidas a esta conversación." "NO_AVAILABLE_LABELS": "No hay etiquetas añadidas a esta conversación."
}, },
"MUTE_CONTACT": "Mute Conversation", "MUTE_CONTACT": "Silenciar Conversación",
"MUTED_SUCCESS": "This conversation is muted for 6 hours", "MUTED_SUCCESS": "Ésta conversación está silenciada por 6 horas",
"SEND_TRANSCRIPT": "Send Transcript", "SEND_TRANSCRIPT": "Enviar Transcripción",
"EDIT_LABEL": "Editar" "EDIT_LABEL": "Editar"
}, },
"EDIT_CONTACT": { "EDIT_CONTACT": {
"BUTTON_LABEL": "Edit Contact", "BUTTON_LABEL": "Editar Contacto",
"TITLE": "Edit contact", "TITLE": "Editar contacto",
"DESC": "Edit contact details", "DESC": "Editar detalles del contacto",
"FORM": { "FORM": {
"SUBMIT": "Enviar", "SUBMIT": "Enviar",
"CANCEL": "Cancelar", "CANCEL": "Cancelar",
"AVATAR": { "AVATAR": {
"LABEL": "Contact Avatar" "LABEL": "Avatar"
}, },
"NAME": { "NAME": {
"PLACEHOLDER": "Enter the full name of the contact", "PLACEHOLDER": "Escriba el nombre completo del contacto",
"LABEL": "Full Name" "LABEL": "Nombre"
}, },
"BIO": { "BIO": {
"PLACEHOLDER": "Enter the bio of the contact", "PLACEHOLDER": "Escriba la bio del contacto",
"LABEL": "Bio" "LABEL": "Bio"
}, },
"EMAIL_ADDRESS": { "EMAIL_ADDRESS": {
"PLACEHOLDER": "Enter the email address of the contact", "PLACEHOLDER": "Escriba la dirección email del contacto",
"LABEL": "Dirección de correo" "LABEL": "Dirección de correo"
}, },
"PHONE_NUMBER": { "PHONE_NUMBER": {
"PLACEHOLDER": "Enter the phone number of the contact", "PLACEHOLDER": "Escriba el número de teléfono del contacto",
"LABEL": "Phone Number" "LABEL": "Número telefónico"
}, },
"LOCATION": { "LOCATION": {
"PLACEHOLDER": "Enter the location of the contact", "PLACEHOLDER": "Escriba la ubicación del contacto",
"LABEL": "Ubicación" "LABEL": "Ubicación"
}, },
"COMPANY_NAME": { "COMPANY_NAME": {
"PLACEHOLDER": "Enter the company name", "PLACEHOLDER": "Escriba el nombre de la empresa",
"LABEL": "Company Name" "LABEL": "Empresa"
}, },
"SOCIAL_PROFILES": { "SOCIAL_PROFILES": {
"FACEBOOK": { "FACEBOOK": {
"PLACEHOLDER": "Enter the Facebook username", "PLACEHOLDER": "Escriba el usuario de Facebook",
"LABEL": "Facebook" "LABEL": "Facebook"
}, },
"TWITTER": { "TWITTER": {
"PLACEHOLDER": "Enter the Twitter username", "PLACEHOLDER": "Escriba el usuario de Twitter",
"LABEL": "Twitter" "LABEL": "Twitter"
}, },
"LINKEDIN": { "LINKEDIN": {
"PLACEHOLDER": "Enter the LinkedIn username", "PLACEHOLDER": "Escriba el usuario de LinkedIn",
"LABEL": "LinkedIn" "LABEL": "LinkedIn"
}, },
"GITHUB": { "GITHUB": {
"PLACEHOLDER": "Enter the Github username", "PLACEHOLDER": "Escriba el usuario de Github",
"LABEL": "Github" "LABEL": "Github"
} }
} }
}, },
"SUCCESS_MESSAGE": "Updated contact successfully", "SUCCESS_MESSAGE": "El contacto se actualizó",
"CONTACT_ALREADY_EXIST": "This email address is in use for another contact.", "CONTACT_ALREADY_EXIST": "Ésta dirección de correo está siendo utilizada por otro contacto.",
"ERROR_MESSAGE": "There was an error updating the contact, please try again" "ERROR_MESSAGE": "Se presento un error actualizando el contacto. Por favor inténtelo nuevamente"
} }
} }

View file

@ -1,19 +1,19 @@
{ {
"CONVERSATION": { "CONVERSATION": {
"404": "Por favor, selecciona una conversación del panel izquierdo", "404": "Por favor, seleccione una conversación del panel izquierdo",
"NO_MESSAGE_1": "¡Oh oh! Parece que no hay mensajes de los clientes en tu bandeja de entrada.", "NO_MESSAGE_1": "¡Oh oh! Parece que no hay mensajes de los clientes en su bandeja de entrada.",
"NO_MESSAGE_2": " para enviar un mensaje a tu página!", "NO_MESSAGE_2": " para enviar un mensaje a su página!",
"NO_INBOX_1": "¡Hola! Parece que aún no has añadido ninguna bandeja de entrada.", "NO_INBOX_1": "¡Hola! Parece que aún no ha añadido ninguna bandeja de entrada.",
"NO_INBOX_2": " para empezar", "NO_INBOX_2": " para empezar",
"NO_INBOX_AGENT": Uh Oh! Parece que no eres parte de ninguna bandeja de entrada. Por favor, contacta con tu administrador", "NO_INBOX_AGENT": Oh Oh! Parece que no es parte de ninguna bandeja de entrada. Por favor, contacte con su administrador",
"CLICK_HERE": "Haz clic aquí", "CLICK_HERE": "Haga clic aquí",
"LOADING_INBOXES": "Cargando bandeja de entrada", "LOADING_INBOXES": "Cargando bandeja de entrada",
"LOADING_CONVERSATIONS": "Cargando conversaciones", "LOADING_CONVERSATIONS": "Cargando conversaciones",
"CANNOT_REPLY": "No puedes responder debido a", "CANNOT_REPLY": "No puede responder debido a",
"24_HOURS_WINDOW": "Restricción de la ventana de mensajes de 24 horas", "24_HOURS_WINDOW": "Restricción de la ventana de mensajes de 24 horas",
"LAST_INCOMING_TWEET": "You are replying to the last incoming tweet", "LAST_INCOMING_TWEET": "Esta respondiendo al último trino",
"REPLYING_TO": "You are replying to:", "REPLYING_TO": "Esta respondiendo a:",
"REMOVE_SELECTION": "Remove Selection", "REMOVE_SELECTION": "Quitar Selección",
"DOWNLOAD": "Descargar", "DOWNLOAD": "Descargar",
"HEADER": { "HEADER": {
"RESOLVE_ACTION": "Resolver", "RESOLVE_ACTION": "Resolver",
@ -23,7 +23,7 @@
"DETAILS": "detalles" "DETAILS": "detalles"
}, },
"FOOTER": { "FOOTER": {
"MSG_INPUT": "Shift + enter for new line. Comience con '/' para seleccionar una respuesta predefinida.", "MSG_INPUT": "Shift + enter para una nueva línea. Comience con '/' para seleccionar una respuesta predefinida.",
"PRIVATE_MSG_INPUT": "Mayús + entrar para una nueva línea. Esto será visible sólo para los agentes" "PRIVATE_MSG_INPUT": "Mayús + entrar para una nueva línea. Esto será visible sólo para los agentes"
}, },
"REPLYBOX": { "REPLYBOX": {
@ -31,25 +31,25 @@
"PRIVATE_NOTE": "Nota privada", "PRIVATE_NOTE": "Nota privada",
"SEND": "Enviar", "SEND": "Enviar",
"CREATE": "Añadir nota", "CREATE": "Añadir nota",
"TWEET": "Tweet" "TWEET": "Trino"
}, },
"VISIBLE_TO_AGENTS": "Nota privada: solo visible para ti y tu equipo", "VISIBLE_TO_AGENTS": "Nota privada: solo visible para usted y su equipo",
"CHANGE_STATUS": "Estado de la conversación cambiado", "CHANGE_STATUS": "Estado de la conversación cambiado",
"CHANGE_AGENT": "Conversación cambiada de asignatario" "CHANGE_AGENT": "Conversación cambiada de asignatario"
}, },
"EMAIL_TRANSCRIPT": { "EMAIL_TRANSCRIPT": {
"TITLE": "Send conversation transcript", "TITLE": "Enviar transcripción de la conversación",
"DESC": "Send a copy of the conversation transcript to the specified email address", "DESC": "Enviar un copia de la transcripción a un dirección de correo especificada",
"SUBMIT": "Enviar", "SUBMIT": "Enviar",
"CANCEL": "Cancelar", "CANCEL": "Cancelar",
"SEND_EMAIL_SUCCESS": "The chat transcript was sent successfully", "SEND_EMAIL_SUCCESS": "La transcripción ha sido enviada",
"SEND_EMAIL_ERROR": "Hubo un error, por favor inténtalo de nuevo", "SEND_EMAIL_ERROR": "Hubo un error, por favor inténtelo de nuevo",
"FORM": { "FORM": {
"SEND_TO_CONTACT": "Send the transcript to the customer", "SEND_TO_CONTACT": "Enviar la transcripción al cliente",
"SEND_TO_AGENT": "Send the transcript of the assigned agent", "SEND_TO_AGENT": "Enviar la transcripción al agente asignado",
"SEND_TO_OTHER_EMAIL_ADDRESS": "Send the transcript to another email address", "SEND_TO_OTHER_EMAIL_ADDRESS": "Enviar la transcripción a otra dirección de correo",
"EMAIL": { "EMAIL": {
"PLACEHOLDER": "Enter an email address", "PLACEHOLDER": "Escriba la dirección de correo",
"ERROR": "Por favor, introduzca una dirección de correo válida" "ERROR": "Por favor, introduzca una dirección de correo válida"
} }
} }

View file

@ -4,7 +4,7 @@
"SUBMIT": "Actualizar ajustes", "SUBMIT": "Actualizar ajustes",
"BACK": "Atrás", "BACK": "Atrás",
"UPDATE": { "UPDATE": {
"ERROR": "No se pudo actualizar la configuración, ¡inténtalo de nuevo!", "ERROR": "No se pudo actualizar la configuración, ¡inténtelo de nuevo!",
"SUCCESS": "Configuración de cuenta actualizada correctamente" "SUCCESS": "Configuración de cuenta actualizada correctamente"
}, },
"FORM": { "FORM": {
@ -15,27 +15,27 @@
}, },
"NAME": { "NAME": {
"LABEL": "Nombre de cuenta", "LABEL": "Nombre de cuenta",
"PLACEHOLDER": "Tu nombre de cuenta", "PLACEHOLDER": "Su nombre de cuenta",
"ERROR": "Por favor, introduzca un nombre de cuenta válido" "ERROR": "Por favor, introduzca un nombre de cuenta válido"
}, },
"LANGUAGE": { "LANGUAGE": {
"LABEL": "Idioma del sitio (Beta)", "LABEL": "Idioma del sitio (Beta)",
"PLACEHOLDER": "Tu nombre de cuenta", "PLACEHOLDER": "Su nombre de cuenta",
"ERROR": "" "ERROR": ""
}, },
"DOMAIN": { "DOMAIN": {
"LABEL": "Dominio de email entrante", "LABEL": "Dominio de email entrante",
"PLACEHOLDER": "El dominio donde recibirás los emails", "PLACEHOLDER": "El dominio donde recibirá los emails",
"ERROR": "" "ERROR": ""
}, },
"SUPPORT_EMAIL": { "SUPPORT_EMAIL": {
"LABEL": "Email de soporte", "LABEL": "Email de soporte",
"PLACEHOLDER": "Email de soporte de tu empresa", "PLACEHOLDER": "Email de soporte de su empresa",
"ERROR": "" "ERROR": ""
}, },
"FEATURES": { "FEATURES": {
"INBOUND_EMAIL_ENABLED": "Continuidad de la conversación con emails está habilitada para tu cuenta.", "INBOUND_EMAIL_ENABLED": "Continuidad de la conversación con emails está habilitada para su cuenta.",
"CUSTOM_EMAIL_DOMAIN_ENABLED": "Ahora puedes recibir emails en tu dominio personalizado." "CUSTOM_EMAIL_DOMAIN_ENABLED": "Ahora puede recibir emails en su dominio personalizado."
} }
} }
} }

View file

@ -1,7 +1,7 @@
{ {
"INBOX_MGMT": { "INBOX_MGMT": {
"HEADER": "Entradas", "HEADER": "Entradas",
"SIDEBAR_TXT": "<p><b>Bandeja de entrada</b></p> <p> Cuando conectas un sitio web o una página de Facebook a Chatwoot, se llama una <b>Bandeja de entrada</b>. Puedes tener bandejas de entrada ilimitadas en tu cuenta de Chatwoot. </p><p> Haga clic en <b>Añadir bandeja de entrada</b> para conectar un sitio web o una página de Facebook. </p><p> en el panel, puedes ver todas las conversaciones de todas tus bandejas de entrada en un solo lugar y responder a ellas en la pestaña `Conversaciones`. </p><p> También puedes ver conversaciones específicas de una bandeja de entrada haciendo clic en el nombre de la bandeja de entrada en el menú izquierdo del panel. </p>", "SIDEBAR_TXT": "<p><b>Bandeja de entrada</b></p> <p> Cuando conecta un sitio web o una página de Facebook a Chatwoot, se llama una <b>Bandeja de entrada</b>. Puede tener bandejas de entrada ilimitadas en su cuenta de Chatwoot. </p><p> Haga clic en <b>Añadir bandeja de entrada</b> para conectar un sitio web o una página de Facebook. </p><p> en el panel, puede ver todas las conversaciones de todas su bandejas de entrada en un solo lugar y responder a ellas en la pestaña `Conversaciones`. </p><p> También puede ver conversaciones específicas de una bandeja de entrada haciendo clic en el nombre de la bandeja de entrada en el menú izquierdo del panel. </p>",
"LIST": { "LIST": {
"404": "No hay entradas adjuntas a esta cuenta." "404": "No hay entradas adjuntas a esta cuenta."
}, },
@ -14,7 +14,7 @@
{ {
"title": "Crear bandeja de entrada", "title": "Crear bandeja de entrada",
"route": "settings_inboxes_page_channel", "route": "settings_inboxes_page_channel",
"body": "Autenticar tu cuenta y crear una bandeja de entrada." "body": "Autenticar su cuenta y crear una bandeja de entrada."
}, },
{ {
"title": "Añadir agentes", "title": "Añadir agentes",
@ -29,20 +29,20 @@
], ],
"ADD": { "ADD": {
"FB": { "FB": {
"HELP": "PS: Al iniciar sesión, sólo tenemos acceso a los mensajes de tu Página. Tus mensajes privados nunca pueden ser accedidos por Chatwoot.", "HELP": "PS: Al iniciar sesión, sólo tenemos acceso a los mensajes de su Página. Sus mensajes privados nunca pueden ser accedidos por Chatwoot.",
"CHOOSE_PAGE": "Elegir página", "CHOOSE_PAGE": "Elegir página",
"CHOOSE_PLACEHOLDER": "Seleccione una página de la lista", "CHOOSE_PLACEHOLDER": "Seleccione una página de la lista",
"INBOX_NAME": "Nombre de la bandeja de entrada", "INBOX_NAME": "Nombre de la bandeja de entrada",
"ADD_NAME": "Añade un nombre para tu bandeja de entrada", "ADD_NAME": "Añada un nombre para su bandeja de entrada",
"PICK_NAME": "Elige un nombre para tu bandeja de entrada", "PICK_NAME": "Elija un nombre para su bandeja de entrada",
"PICK_A_VALUE": "Elige un valor" "PICK_A_VALUE": "Elija un valor"
}, },
"TWITTER": { "TWITTER": {
"HELP": "Para añadir tu perfil de Twitter como un canal, necesitas autenticar tu perfil de Twitter haciendo clic en 'Iniciar sesión con Twitter' " "HELP": "Para añadir su perfil de Twitter como un canal, necesita autenticar su perfil de Twitter haciendo clic en 'Iniciar sesión con Twitter' "
}, },
"WEBSITE_CHANNEL": { "WEBSITE_CHANNEL": {
"TITLE": "Canal del sitio web", "TITLE": "Canal del sitio web",
"DESC": "Cree un canal para su sitio web y comience a apoyar a sus clientes a través de nuestro widget de sitio web.", "DESC": "Cree un canal para su sitio web y comienze a apoyar a sus clientes a través de nuestro widget de sitio web.",
"LOADING_MESSAGE": "Creando Canal de Soporte al Sitio Web", "LOADING_MESSAGE": "Creando Canal de Soporte al Sitio Web",
"CHANNEL_AVATAR": { "CHANNEL_AVATAR": {
"LABEL": "Avatar del canal" "LABEL": "Avatar del canal"
@ -61,7 +61,7 @@
}, },
"CHANNEL_WELCOME_TAGLINE": { "CHANNEL_WELCOME_TAGLINE": {
"LABEL": "Bienvenido Tagline", "LABEL": "Bienvenido Tagline",
"PLACEHOLDER": "Facilitamos la conexión con nosotros. Pídanos cualquier cosa o comparte tus comentarios." "PLACEHOLDER": "Facilitamos la conexión con nosotros. Pídanos cualquier cosa o comparta sus comentarios."
}, },
"CHANNEL_GREETING_MESSAGE": { "CHANNEL_GREETING_MESSAGE": {
"LABEL": "Mensaje de bienvenida del canal", "LABEL": "Mensaje de bienvenida del canal",
@ -81,10 +81,10 @@
}, },
"TWILIO": { "TWILIO": {
"TITLE": "Twilio SMS/Canal de Whatsapp", "TITLE": "Twilio SMS/Canal de Whatsapp",
"DESC": "Integre Twilio y comience a darle soporte a sus clientes a través de SMS o WhatsApp.", "DESC": "Integre Twilio y comienze a darle soporte a sus clientes a través de SMS o WhatsApp.",
"ACCOUNT_SID": { "ACCOUNT_SID": {
"LABEL": "Cuenta SID", "LABEL": "Cuenta SID",
"PLACEHOLDER": "Introduce tu SID de cuenta de Twilio", "PLACEHOLDER": "Introduzca su SID de cuenta de Twilio",
"ERROR": "Este campo es obligatorio" "ERROR": "Este campo es obligatorio"
}, },
"CHANNEL_TYPE": { "CHANNEL_TYPE": {
@ -104,20 +104,20 @@
"PHONE_NUMBER": { "PHONE_NUMBER": {
"LABEL": "Número de teléfono", "LABEL": "Número de teléfono",
"PLACEHOLDER": "Por favor, introduzca el número de teléfono desde el que se enviará el mensaje.", "PLACEHOLDER": "Por favor, introduzca el número de teléfono desde el que se enviará el mensaje.",
"ERROR": "Por favor, introduzca un valor válido. El número de teléfono debe comenzar con la firma `+`." "ERROR": "Por favor, introduzca un valor válido. El número de teléfono debe comenzar con `+`."
}, },
"API_CALLBACK": { "API_CALLBACK": {
"TITLE": "URL de devolución de llamada", "TITLE": "URL de devolución de llamada",
"SUBTITLE": "Tienes que configurar la URL de devolución de llamada de mensaje en Twilio con la URL mencionada aquí." "SUBTITLE": "Tiene que configurar la URL de devolución de llamada de mensaje en Twilio con la URL mencionada aquí."
}, },
"SUBMIT_BUTTON": "Crear Canal Twilio", "SUBMIT_BUTTON": "Crear Canal Twilio",
"API": { "API": {
"ERROR_MESSAGE": "No pudimos autenticar credenciales de Twilio, por favor inténtalo de nuevo" "ERROR_MESSAGE": "No pudimos autenticar credenciales de Twilio, por favor inténtelo de nuevo"
} }
}, },
"API_CHANNEL": { "API_CHANNEL": {
"TITLE": "Canal API", "TITLE": "Canal API",
"DESC": "Integrate with API channel and start supporting your customers.", "DESC": "Integre con API channel y comienze a dar soporte a sus clientes.",
"CHANNEL_NAME": { "CHANNEL_NAME": {
"LABEL": "Nombre del canal", "LABEL": "Nombre del canal",
"PLACEHOLDER": "Por favor, introduzca un nombre de canal", "PLACEHOLDER": "Por favor, introduzca un nombre de canal",
@ -125,17 +125,17 @@
}, },
"WEBHOOK_URL": { "WEBHOOK_URL": {
"LABEL": "URL de Webhook", "LABEL": "URL de Webhook",
"SUBTITLE": "Configure the URL where you want to recieve callbacks on events.", "SUBTITLE": "Configure la URL donde recibirá las respuestas a los eventos.",
"PLACEHOLDER": "URL de Webhook" "PLACEHOLDER": "URL de Webhook"
}, },
"SUBMIT_BUTTON": "Crear canal de API", "SUBMIT_BUTTON": "Crear canal de API",
"API": { "API": {
"ERROR_MESSAGE": "No pudimos guardar el canal api" "ERROR_MESSAGE": "No pudimos guardar el canal API"
} }
}, },
"EMAIL_CHANNEL": { "EMAIL_CHANNEL": {
"TITLE": "Canal de Email", "TITLE": "Canal de Email",
"DESC": "Integrate you email inbox.", "DESC": "Integre su bandeja de entrada del email.",
"CHANNEL_NAME": { "CHANNEL_NAME": {
"LABEL": "Nombre del canal", "LABEL": "Nombre del canal",
"PLACEHOLDER": "Por favor, introduzca un nombre de canal", "PLACEHOLDER": "Por favor, introduzca un nombre de canal",
@ -143,14 +143,14 @@
}, },
"EMAIL": { "EMAIL": {
"LABEL": "E-mail", "LABEL": "E-mail",
"SUBTITLE": "Email donde tus clientes te envían tickets de soporte", "SUBTITLE": "Email donde sus clientes le envían tickets de soporte",
"PLACEHOLDER": "E-mail" "PLACEHOLDER": "E-mail"
}, },
"SUBMIT_BUTTON": "Crear canal de email", "SUBMIT_BUTTON": "Crear canal de email",
"API": { "API": {
"ERROR_MESSAGE": "No pudimos guardar el canal de email" "ERROR_MESSAGE": "No pudimos guardar el canal de email"
}, },
"FINISH_MESSAGE": "Empieza a reenviar tus emails a la siguiente dirección de email." "FINISH_MESSAGE": "Empieze a reenviar su emails a la siguiente dirección de email."
}, },
"AUTH": { "AUTH": {
"TITLE": "Canales", "TITLE": "Canales",
@ -158,33 +158,33 @@
}, },
"AGENTS": { "AGENTS": {
"TITLE": "Agentes", "TITLE": "Agentes",
"DESC": "Aquí puede agregar agentes para administrar su recién creada bandeja de entrada. Sólo estos agentes seleccionados tendrán acceso a su bandeja de entrada. Los agentes que no forman parte de esta bandeja de entrada no podrán ver o responder a los mensajes de esta bandeja de entrada cuando inicien sesión. <br> <b>PS:</b> Como administrador, si necesita acceso a todas las bandejas, debes añadirte como agente a todas las bandejas de entrada que crees." "DESC": "Aquí puede agregar agentes para administrar su recién creada bandeja de entrada. Sólo estos agentes seleccionados tendrán acceso a su bandeja de entrada. Los agentes que no forman parte de esta bandeja de entrada no podrán ver o responder a los mensajes de esta bandeja de entrada cuando inicien sesión. <br> <b>PS:</b> Como administrador, si necesita acceso a todas las bandejas, debe añadirze como agente a todas las bandejas de entrada que cree."
}, },
"DETAILS": { "DETAILS": {
"TITLE": "Detalles de la bandeja de entrada", "TITLE": "Detalles de la bandeja de entrada",
"DESC": "En el menú desplegable de abajo, selecciona la página de Facebook que quieres conectar a Chatwoot. También puede dar un nombre personalizado a su bandeja de entrada para una mejor identificación." "DESC": "En el menú desplegable de abajo, seleccione la página de Facebook que quiere conectar a Chatwoot. También puede dar un nombre personalizado a su bandeja de entrada para una mejor identificación."
}, },
"FINISH": { "FINISH": {
"TITLE": "¡Se ha clavado!", "TITLE": "¡Se ha clavado!",
"DESC": "Has terminado de integrar correctamente tu página de Facebook con Chatwoot. La próxima vez que un cliente envíe un mensaje a tu Página, la conversación aparecerá automáticamente en tu bandeja de entrada.<br>También le estamos proporcionando un script de widget que puede agregar fácilmente a su sitio web. Una vez que esto está en vivo en tu sitio web, los clientes pueden enviarle mensajes directamente desde su sitio web sin la ayuda de ninguna herramienta externa y la conversación aparecerá aquí, en Chatwoot.<br>¿Genial, eh? Bueno, estamos seguros de que intentaremos ser :)" "DESC": "Has terminado de integrar correctamente su página de Facebook con Chatwoot. La próxima vez que un cliente envíe un mensaje a su Página, la conversación aparecerá automáticamente en su bandeja de entrada.<br>También le estamos proporcionando un script de widget que puede agregar fácilmente a su sitio web. Una vez que esto esté en vivo en su sitio web, los clientes pueden enviarle mensajes directamente desde su sitio web sin la ayuda de ninguna herramienta externa y la conversación aparecerá aquí, en Chatwoot.<br>¿Genial, eh? Bueno, estamos seguros de que intentaremos serlo :)"
} }
}, },
"DETAILS": { "DETAILS": {
"LOADING_FB": "Autenticándote con Facebook...", "LOADING_FB": "Autenticándote con Facebook...",
"ERROR_FB_AUTH": "Algo salió mal, Por favor actualiza la página...", "ERROR_FB_AUTH": "Algo salió mal, Por favor actualize la página...",
"CREATING_CHANNEL": "Creando tu bandeja de entrada...", "CREATING_CHANNEL": "Creando su bandeja de entrada...",
"TITLE": "Configurar detalles de la Bandeja de Entrada", "TITLE": "Configurar detalles de la Bandeja de Entrada",
"DESC": "" "DESC": ""
}, },
"AGENTS": { "AGENTS": {
"BUTTON_TEXT": "Añadir agentes", "BUTTON_TEXT": "Añadir agentes",
"ADD_AGENTS": "Añadiendo agentes a tu bandeja de entrada..." "ADD_AGENTS": "Añadiendo agentes a su bandeja de entrada..."
}, },
"FINISH": { "FINISH": {
"TITLE": Tu bandeja de entrada está lista!", "TITLE": Su bandeja de entrada está lista!",
"MESSAGE": "Ahora puedes colaborar con tus clientes a través de tu nuevo canal. Feliz soporte ", "MESSAGE": "Ahora puede colaborar con sus clientes a través de su nuevo canal. Feliz soporte ",
"BUTTON_TEXT": "Llévame allí", "BUTTON_TEXT": "Llévame allí",
"WEBSITE_SUCCESS": "Has terminado de crear un canal del sitio web. Copia el código que se muestra a continuación y pégalo en tu sitio web. La próxima vez que un cliente use el chat en vivo, la conversación aparecerá automáticamente en su bandeja de entrada." "WEBSITE_SUCCESS": "Ha terminado de crear un canal del sitio web. Copie el código que se muestra a continuación y pégelo en su sitio web. La próxima vez que un cliente use el chat en vivo, la conversación aparecerá automáticamente en su bandeja de entrada."
}, },
"REAUTH": "Reautorizar", "REAUTH": "Reautorizar",
"VIEW": "Ver", "VIEW": "Ver",
@ -192,7 +192,7 @@
"API": { "API": {
"SUCCESS_MESSAGE": "Configuración de bandeja de entrada actualizada correctamente", "SUCCESS_MESSAGE": "Configuración de bandeja de entrada actualizada correctamente",
"AUTO_ASSIGNMENT_SUCCESS_MESSAGE": "Auto-asignación actualizada correctamente", "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." "ERROR_MESSAGE": "No se pudo actualizar el color del widget. Inténtelo de nuevo más tarde."
}, },
"AUTO_ASSIGNMENT": { "AUTO_ASSIGNMENT": {
"ENABLED": "Activado", "ENABLED": "Activado",
@ -209,29 +209,29 @@
}, },
"API": { "API": {
"SUCCESS_MESSAGE": "Bandeja de entrada eliminada correctamente", "SUCCESS_MESSAGE": "Bandeja de entrada eliminada correctamente",
"ERROR_MESSAGE": "No se pudo eliminar la bandeja de entrada. Inténtalo de nuevo más tarde." "ERROR_MESSAGE": "No se pudo eliminar la bandeja de entrada. Inténtelo de nuevo más tarde."
} }
}, },
"TABS": { "TABS": {
"SETTINGS": "Ajustes", "SETTINGS": "Ajustes",
"COLLABORATORS": "Collaborators", "COLLABORATORS": "Colaboradores",
"CONFIGURATION": "Configuration" "CONFIGURATION": "Configuración"
}, },
"SETTINGS": "Ajustes", "SETTINGS": "Ajustes",
"FEATURES": { "FEATURES": {
"LABEL": "Features", "LABEL": "Características",
"DISPLAY_FILE_PICKER": "Display file picker on the widget", "DISPLAY_FILE_PICKER": "Mostrar el selector de archivos en el widget",
"DISPLAY_EMOJI_PICKER": "Display emoji picker on the widget" "DISPLAY_EMOJI_PICKER": "Mostrar el selector de emoji en el widget"
}, },
"SETTINGS_POPUP": { "SETTINGS_POPUP": {
"MESSENGER_HEADING": "Script de Messenger", "MESSENGER_HEADING": "Script de Messenger",
"MESSENGER_SUB_HEAD": "Coloca este botón dentro de tu etiqueta cuerpo", "MESSENGER_SUB_HEAD": "Coloque este botón dentro de la etiqueta body",
"INBOX_AGENTS": "Agentes", "INBOX_AGENTS": "Agentes",
"INBOX_AGENTS_SUB_TEXT": "Añadir o quitar agentes de esta bandeja de entrada", "INBOX_AGENTS_SUB_TEXT": "Añadir o quitar agentes de esta bandeja de entrada",
"UPDATE": "Actualizar", "UPDATE": "Actualizar",
"AUTO_ASSIGNMENT": "Activar asignación automática", "AUTO_ASSIGNMENT": "Activar asignación automática",
"INBOX_UPDATE_TITLE": "Ajustes de la Bandeja de Entrada", "INBOX_UPDATE_TITLE": "Ajustes de la Bandeja de Entrada",
"INBOX_UPDATE_SUB_TEXT": "Actualizar la configuración de tu bandeja de entrada", "INBOX_UPDATE_SUB_TEXT": "Actualizar la configuración de su bandeja de entrada",
"AUTO_ASSIGNMENT_SUB_TEXT": "Activar o desactivar la asignación automática de nuevas conversaciones a los agentes añadidos a esta bandeja de entrada." "AUTO_ASSIGNMENT_SUB_TEXT": "Activar o desactivar la asignación automática de nuevas conversaciones a los agentes añadidos a esta bandeja de entrada."
} }
} }

View file

@ -6,10 +6,10 @@
"CONFIGURE": "Configurar", "CONFIGURE": "Configurar",
"HEADER": "Configuración de Webhook", "HEADER": "Configuración de Webhook",
"HEADER_BTN_TXT": "Añadir nuevo webhook", "HEADER_BTN_TXT": "Añadir nuevo webhook",
"INTEGRATION_TXT": "Los eventos Webhook le proporcionan la información en tiempo real sobre lo que está sucediendo en su cuenta de Chatwoot. Puede hacer uso de los webhooks para comunicar los eventos a sus aplicaciones favoritas como Slack o Github. Haga clic en Configurar para configurar sus webhooks.", "INTEGRATION_TXT": "Los eventos Webhook proporcionan información en tiempo real sobre lo que está sucediendo en su cuenta de Chatwoot. Puede hacer uso de los webhooks para comunicar los eventos a sus aplicaciones favoritas como Slack o Github. Haga clic en Configurar para configurar sus webhooks.",
"LOADING": "Obteniendo webhooks adjuntos", "LOADING": "Obteniendo webhooks adjuntos",
"SEARCH_404": "No hay elementos que coincidan con esta consulta", "SEARCH_404": "No hay elementos que coincidan con esta consulta",
"SIDEBAR_TXT": "<p><b>Webhooks</b> </p> <p>Webhooks son callbacks HTTP que se pueden definir para cada cuenta. Son activados por eventos como la creación de mensajes en Chatwoot. Puede crear más de un webhook para esta cuenta. <br /><br /> Para crear un webhook <b></b>, haga clic en el <b>Añadir un nuevo webhook</b> botón. También puede eliminar cualquier webhook existente haciendo clic en el botón Borrar.</p>", "SIDEBAR_TXT": "<p><b>Webhooks</b> </p> <p>Webhooks son callbacks HTTP que se pueden definir para cada cuenta. Son activados por eventos como la creación de mensajes en Chatwoot. Puede crear más de un webhook para esta cuenta. <br /><br /> Para crear un webhook <b></b>, Haga clic en el botón <b>Añadir un nuevo webhook</b>. También puede eliminar cualquier webhook existente haciendo clic en el botón Borrar.</p>",
"LIST": { "LIST": {
"404": "No hay webhooks configurados para esta cuenta.", "404": "No hay webhooks configurados para esta cuenta.",
"TITLE": "Administrar webhooks", "TITLE": "Administrar webhooks",
@ -22,7 +22,7 @@
"ADD": { "ADD": {
"CANCEL": "Cancelar", "CANCEL": "Cancelar",
"TITLE": "Añadir nuevo webhook", "TITLE": "Añadir nuevo webhook",
"DESC": "Los eventos Webhook te proporcionan la información en tiempo real sobre lo que está sucediendo en tu cuenta de Chatwoot. Por favor, introduce una URL válida para configurar un callback.", "DESC": "Los eventos Webhook proporcionan información en tiempo real sobre lo que está sucediendo en su cuenta de Chatwoot. Por favor, introduzca una URL válida para configurar un callback.",
"FORM": { "FORM": {
"END_POINT": { "END_POINT": {
"LABEL": "URL de Webhook", "LABEL": "URL de Webhook",
@ -33,14 +33,14 @@
}, },
"API": { "API": {
"SUCCESS_MESSAGE": "Webhook añadido correctamente", "SUCCESS_MESSAGE": "Webhook añadido correctamente",
"ERROR_MESSAGE": "No se pudo conectar al servidor Woot, por favor inténtalo de nuevo más tarde" "ERROR_MESSAGE": "No se pudo conectar al servidor Woot, por favor inténtelo de nuevo más tarde"
} }
}, },
"DELETE": { "DELETE": {
"BUTTON_TEXT": "Eliminar", "BUTTON_TEXT": "Eliminar",
"API": { "API": {
"SUCCESS_MESSAGE": "Webhook eliminado correctamente", "SUCCESS_MESSAGE": "Webhook eliminado correctamente",
"ERROR_MESSAGE": "No se pudo conectar al servidor Woot, por favor inténtalo de nuevo más tarde" "ERROR_MESSAGE": "No se pudo conectar al servidor Woot, por favor inténtelo de nuevo más tarde"
}, },
"CONFIRM": { "CONFIRM": {
"TITLE": "Confirmar eliminación", "TITLE": "Confirmar eliminación",

View file

@ -4,11 +4,11 @@
"HEADER_BTN_TXT": "Añadir etiqueta", "HEADER_BTN_TXT": "Añadir etiqueta",
"LOADING": "Obteniendo etiquetas", "LOADING": "Obteniendo etiquetas",
"SEARCH_404": "No hay elementos que coincidan con esta consulta", "SEARCH_404": "No hay elementos que coincidan con esta consulta",
"SIDEBAR_TXT": "<p><b>Etiquetas</b> <p>Las etiquetas le ayudan a categorizar las conversaciones y priorizarlas. Puede asignar la etiqueta a una conversación desde el panel latera. <br /><br />Las etiquetas están vinculadas a la cuenta y pueden utilizarse para crear flujos de trabajo personalizados en su organización. Puede asignar un color personalizado a una etiqueta, hace más fácil identificarla. Podrás mostrar la etiqueta en la barra lateral para filtrar las conversaciones fácilmente.</p>", "SIDEBAR_TXT": "<p><b>Etiquetas</b> <p>Las etiquetas le ayudan a categorizar las conversaciones y priorizarlas. Puede asignar la etiqueta a una conversación desde el panel lateral. <br /><br />Las etiquetas están vinculadas a la cuenta y pueden utilizarse para crear flujos de trabajo personalizados en su organización. Puede asignar un color personalizado a una etiqueta, hace más fácil identificarla. Podrá mostrar la etiqueta en la barra lateral para filtrar las conversaciones fácilmente.</p>",
"LIST": { "LIST": {
"404": "No hay etiquetas disponibles en esta cuenta.", "404": "No hay etiquetas disponibles en esta cuenta.",
"TITLE": "Gestionar etiquetas", "TITLE": "Gestionar etiquetas",
"DESC": "Las etiquetas le permiten agrupar las conversaciones.", "DESC": "Las etiquetas permiten agrupar las conversaciones.",
"TABLE_HEADER": [ "TABLE_HEADER": [
"Nombre", "Nombre",
"Descripción", "Descripción",
@ -17,8 +17,8 @@
}, },
"FORM": { "FORM": {
"NAME": { "NAME": {
"LABEL": "Nombre de etiqueta", "LABEL": "Nombre de la etiqueta",
"PLACEHOLDER": "Nombre de etiqueta", "PLACEHOLDER": "Nombre de la etiqueta",
"ERROR": "Nombre de la etiqueta es obligatorio" "ERROR": "Nombre de la etiqueta es obligatorio"
}, },
"DESCRIPTION": { "DESCRIPTION": {
@ -38,24 +38,24 @@
}, },
"ADD": { "ADD": {
"TITLE": "Añadir etiqueta", "TITLE": "Añadir etiqueta",
"DESC": "Las etiquetas le permiten agrupar las conversaciones.", "DESC": "Las etiquetas permiten agrupar las conversaciones.",
"API": { "API": {
"SUCCESS_MESSAGE": "Etiqueta añadida correctamente", "SUCCESS_MESSAGE": "Etiqueta añadida correctamente",
"ERROR_MESSAGE": "Hubo un error, por favor inténtalo de nuevo" "ERROR_MESSAGE": "Hubo un error, por favor inténtelo de nuevo"
} }
}, },
"EDIT": { "EDIT": {
"TITLE": "Editar etiqueta", "TITLE": "Editar etiqueta",
"API": { "API": {
"SUCCESS_MESSAGE": "Etiqueta actualizada correctamente", "SUCCESS_MESSAGE": "Etiqueta actualizada correctamente",
"ERROR_MESSAGE": "Hubo un error, por favor inténtalo de nuevo" "ERROR_MESSAGE": "Hubo un error, por favor inténtelo de nuevo"
} }
}, },
"DELETE": { "DELETE": {
"BUTTON_TEXT": "Eliminar", "BUTTON_TEXT": "Eliminar",
"API": { "API": {
"SUCCESS_MESSAGE": "Etiqueta actualizada correctamente", "SUCCESS_MESSAGE": "Etiqueta actualizada correctamente",
"ERROR_MESSAGE": "Hubo un error, por favor inténtalo de nuevo" "ERROR_MESSAGE": "Hubo un error, por favor inténtelo de nuevo"
}, },
"CONFIRM": { "CONFIRM": {
"TITLE": "Confirmar eliminación", "TITLE": "Confirmar eliminación",

View file

@ -11,10 +11,10 @@
}, },
"API": { "API": {
"SUCCESS_MESSAGE": "Inicio de sesión exitoso", "SUCCESS_MESSAGE": "Inicio de sesión exitoso",
"ERROR_MESSAGE": "No se pudo conectar al servidor Woot, por favor inténtalo de nuevo más tarde", "ERROR_MESSAGE": "No se pudo conectar al servidor Woot, por favor inténtelo de nuevo más tarde",
"UNAUTH": "Nombre de usuario / Contraseña incorrecto. Inténtelo de nuevo" "UNAUTH": "Nombre de usuario / Contraseña incorrecto. Inténtelo de nuevo"
}, },
"FORGOT_PASSWORD": "¿Olvidaste tu contraseña?", "FORGOT_PASSWORD": "¿Olvidó su contraseña?",
"CREATE_NEW_ACCOUNT": "Crear nueva cuenta", "CREATE_NEW_ACCOUNT": "Crear nueva cuenta",
"SUBMIT": "Iniciar sesión" "SUBMIT": "Iniciar sesión"
} }

View file

@ -2,39 +2,33 @@
"REPORT": { "REPORT": {
"HEADER": "Informes", "HEADER": "Informes",
"LOADING_CHART": "Cargando datos del gráfico...", "LOADING_CHART": "Cargando datos del gráfico...",
"NO_ENOUGH_DATA": "No hemos recibido suficientes puntos de datos para generar el informe. Inténtalo de nuevo más tarde.", "NO_ENOUGH_DATA": "No hemos recibido suficientes puntos de datos para generar el informe. Inténtelo de nuevo más tarde.",
"METRICS": [ "METRICS": {
{ "CONVERSATIONS": {
"NAME": "Conversaciones", "NAME": "Conversaciones",
"KEY": "conversations_count",
"DESC": "( Total )" "DESC": "( Total )"
}, },
{ "INCOMING_MESSAGES": {
"NAME": "Mensajes entrantes", "NAME": "Mensajes entrantes",
"KEY": "incoming_messages_count",
"DESC": "( Total )" "DESC": "( Total )"
}, },
{ "OUTGOING_MESSAGES": {
"NAME": "Mensajes salientes", "NAME": "Mensajes salientes",
"KEY": "outgoing_messages_count",
"DESC": "( Total )" "DESC": "( Total )"
}, },
{ "FIRST_RESPONSE_TIME": {
"NAME": "Primera respuesta", "NAME": "Primera respuesta",
"KEY": "avg_first_response_time",
"DESC": "( Media )" "DESC": "( Media )"
}, },
{ "RESOLUTION_TIME": {
"NAME": "Tiempo de resolución", "NAME": "Tiempo de resolución",
"KEY": "avg_resolution_time",
"DESC": "( Media )" "DESC": "( Media )"
}, },
{ "RESOLUTION_COUNT": {
"NAME": "Número de resoluciones", "NAME": "Número de resoluciones",
"KEY": "resolutions_count",
"DESC": "( Total )" "DESC": "( Total )"
} }
], },
"DATE_RANGE": [ "DATE_RANGE": [
{ {
"id": 0, "id": 0,

View file

@ -7,8 +7,8 @@
"ERROR": "Por favor ingrese un email válido" "ERROR": "Por favor ingrese un email válido"
}, },
"API": { "API": {
"SUCCESS_MESSAGE": "El enlace para restablecer la contraseña ha sido enviado a tu correo electrónico", "SUCCESS_MESSAGE": "El enlace para restablecer la contraseña ha sido enviado a su correo electrónico",
"ERROR_MESSAGE": "No se pudo conectar al servidor Woot, por favor inténtalo de nuevo más tarde" "ERROR_MESSAGE": "No se pudo conectar al servidor Woot, por favor inténtelo de nuevo más tarde"
}, },
"SUBMIT": "Enviar" "SUBMIT": "Enviar"
} }

View file

@ -13,7 +13,7 @@
}, },
"API": { "API": {
"SUCCESS_MESSAGE": "Contraseña cambiada con éxito", "SUCCESS_MESSAGE": "Contraseña cambiada con éxito",
"ERROR_MESSAGE": "No se pudo conectar al servidor Woot, por favor inténtalo de nuevo más tarde" "ERROR_MESSAGE": "No se pudo conectar al servidor Woot, por favor inténtelo de nuevo más tarde"
}, },
"SUBMIT": "Enviar" "SUBMIT": "Enviar"
} }

View file

@ -16,15 +16,15 @@
}, },
"PASSWORD_SECTION": { "PASSWORD_SECTION": {
"TITLE": "Contraseña", "TITLE": "Contraseña",
"NOTE": "Actualizar tu contraseña restablecería tus entradas en varios dispositivos." "NOTE": "Actualizar su contraseña restablecería sus entradas en varios dispositivos."
}, },
"ACCESS_TOKEN": { "ACCESS_TOKEN": {
"TITLE": "Token de acceso", "TITLE": "Token de acceso",
"NOTE": "Este token puede ser usado si estás construyendo una integración basada en API" "NOTE": "Este token puede ser usado si está construyendo una integración basada en API"
}, },
"EMAIL_NOTIFICATIONS_SECTION": { "EMAIL_NOTIFICATIONS_SECTION": {
"TITLE": "Notificaciones por email", "TITLE": "Notificaciones por email",
"NOTE": "Actualiza tus preferencias de notificación por correo electrónico aquí", "NOTE": "Actualize sus preferencias de notificación por correo electrónico aquí",
"CONVERSATION_ASSIGNMENT": "Enviar notificaciones por correo electrónico cuando se me ha asignado una conversación", "CONVERSATION_ASSIGNMENT": "Enviar notificaciones por correo electrónico cuando se me ha asignado una conversación",
"CONVERSATION_CREATION": "Enviar notificaciones por correo electrónico cuando se crea una nueva conversación" "CONVERSATION_CREATION": "Enviar notificaciones por correo electrónico cuando se crea una nueva conversación"
}, },
@ -34,7 +34,7 @@
}, },
"PUSH_NOTIFICATIONS_SECTION": { "PUSH_NOTIFICATIONS_SECTION": {
"TITLE": "Notificaciones push", "TITLE": "Notificaciones push",
"NOTE": "Actualiza tus preferencias de notificaciones push aquí", "NOTE": "Actualize sus preferencias de notificaciones push aquí",
"CONVERSATION_ASSIGNMENT": "Enviar notificaciones push cuando se me ha asignado una conversación", "CONVERSATION_ASSIGNMENT": "Enviar notificaciones push cuando se me ha asignado una conversación",
"CONVERSATION_CREATION": "Enviar notificaciones push cuando se crea una nueva conversación", "CONVERSATION_CREATION": "Enviar notificaciones push cuando se crea una nueva conversación",
"HAS_ENABLED_PUSH": "Has habilitado notificaciones push para este navegador.", "HAS_ENABLED_PUSH": "Has habilitado notificaciones push para este navegador.",
@ -44,14 +44,14 @@
"LABEL": "Imagen de perfil" "LABEL": "Imagen de perfil"
}, },
"NAME": { "NAME": {
"LABEL": "Tu nombre completo", "LABEL": "Su nombre completo",
"ERROR": "Introduce un nombre válido por favor", "ERROR": "Introduzca un nombre válido por favor",
"PLACEHOLDER": "Introduce tu nombre completo por favor" "PLACEHOLDER": "Introduzca su nombre completo por favor"
}, },
"DISPLAY_NAME": { "DISPLAY_NAME": {
"LABEL": "Nombre a mostrar", "LABEL": "Nombre a mostrar",
"ERROR": "Introduce un nombre válido por favor", "ERROR": "Introduzca un nombre válido por favor",
"PLACEHOLDER": "Introduce un nombre a mostrar por favor, esto se mostrará en las conversaciones" "PLACEHOLDER": "Introduzca un nombre a mostrar por favor, esto se mostrará en las conversaciones"
}, },
"AVAILABILITY": { "AVAILABILITY": {
"LABEL": "Disponibilidad", "LABEL": "Disponibilidad",
@ -71,7 +71,7 @@
] ]
}, },
"EMAIL": { "EMAIL": {
"LABEL": "Tu dirección de correo", "LABEL": "Su dirección de correo",
"ERROR": "Por favor, introduzca una dirección de correo válida", "ERROR": "Por favor, introduzca una dirección de correo válida",
"PLACEHOLDER": "Por favor, introduzca su dirección de correo electrónico, esto se mostrará en las conversaciones" "PLACEHOLDER": "Por favor, introduzca su dirección de correo electrónico, esto se mostrará en las conversaciones"
}, },
@ -88,6 +88,7 @@
} }
}, },
"SIDEBAR_ITEMS": { "SIDEBAR_ITEMS": {
"CHANGE_AVAILABILITY_STATUS": "Cambiar",
"CHANGE_ACCOUNTS": "Cambiar de cuenta", "CHANGE_ACCOUNTS": "Cambiar de cuenta",
"SELECTOR_SUBTITLE": "Seleccione una cuenta de la siguiente lista", "SELECTOR_SUBTITLE": "Seleccione una cuenta de la siguiente lista",
"PROFILE_SETTINGS": "Ajustes del perfil", "PROFILE_SETTINGS": "Ajustes del perfil",
@ -134,7 +135,7 @@
"API": { "API": {
"SUCCESS_MESSAGE": "Cuenta creada con éxito", "SUCCESS_MESSAGE": "Cuenta creada con éxito",
"EXIST_MESSAGE": "La cuenta ya existe", "EXIST_MESSAGE": "La cuenta ya existe",
"ERROR_MESSAGE": "No se pudo conectar al servidor Woot, por favor inténtalo de nuevo más tarde" "ERROR_MESSAGE": "No se pudo conectar al servidor Woot, por favor inténtelo de nuevo más tarde"
}, },
"FORM": { "FORM": {
"NAME": { "NAME": {

View file

@ -2,10 +2,10 @@
"REGISTER": { "REGISTER": {
"TRY_WOOT": "Registrar una cuenta", "TRY_WOOT": "Registrar una cuenta",
"TITLE": "Registrarse", "TITLE": "Registrarse",
"TERMS_ACCEPT": "Al registrarte, aceptas nuestra <a href=\"https://www.chatwoot.com/terms\">T & C</a> y nuestra <a href=\"https://www.chatwoot.com/privacy-policy\">política de privacidad</a>", "TERMS_ACCEPT": "Al registrarse, acepta nuestra <a href=\"https://www.chatwoot.com/terms\">T & C</a> y nuestra <a href=\"https://www.chatwoot.com/privacy-policy\">política de privacidad</a>",
"ACCOUNT_NAME": { "ACCOUNT_NAME": {
"LABEL": "Nombre de cuenta", "LABEL": "Nombre de cuenta",
"PLACEHOLDER": "Empresas de Wayne", "PLACEHOLDER": "Empresas Wayne",
"ERROR": "El nombre de la cuenta es demasiado corto" "ERROR": "El nombre de la cuenta es demasiado corto"
}, },
"EMAIL": { "EMAIL": {
@ -25,7 +25,7 @@
}, },
"API": { "API": {
"SUCCESS_MESSAGE": "Registro Exitoso", "SUCCESS_MESSAGE": "Registro Exitoso",
"ERROR_MESSAGE": "No se pudo conectar al servidor Woot, por favor inténtalo de nuevo más tarde" "ERROR_MESSAGE": "No se pudo conectar al servidor Woot, por favor inténtelo de nuevo más tarde"
}, },
"SUBMIT": "Enviar" "SUBMIT": "Enviar"
} }

View file

@ -4,16 +4,10 @@
"HEADER_BTN_TXT": "اضافه کردن اپراتور", "HEADER_BTN_TXT": "اضافه کردن اپراتور",
"LOADING": "دریافت لیست اپراتورها", "LOADING": "دریافت لیست اپراتورها",
"SIDEBAR_TXT": "<p><b>اپراتورها</b></p> <p> یک <b>اپراتور</b> یکی از اعضای تیم پشتیبانی است. </p><p> اپراتورها می‌توانند پیام‌های کاربران را ببینند و به آن‌ها پاسخ بدهند. این لیست حاوی تمام اپراتورهایی است که در حساب شما تعریف شده اند. </p><p> با زدن روی دکمه <b>اضافه کردن اپراتور</b> می‌توانید یک اپراتور جدید معرفی کنید. به ایمیل اپراتوری که معرفی می‌کنید یک دعوتنامه ارسال می‌شود که بعد از پذیرفتن آن اپراتور می‌تواند به پیام‌های کاربران پاسخ بدهد. </p><p> بسته به سطح دسترسی تعیین شده یک اپراتور می‌تواند به بخش‌های مشخصی از اکانت دسترسی پیدا کند </p><p> <b>اپراتور</b> - اپراتورهایی که این نقش را داشته باشند تنها می‌توانند به صندوق‌های ورودی، گزارشات و گفتگوها دسترسی داشته باشند. آن‌ها می‌توانند یک مکالمه را به اپراتور دیگر یا خودشان تخصیص دهند و یا یک مکالمه را حل شده اعلام کنند.</p><p> <b>مدیر</b> - مدیران می‌توانند علاوه بر تمام بخش‌هایی که یک اپراتور دسترسی دارد، به تمام بخش‌هایی که در حساب کاربری شما وجود دارد دسترسی داشته باشند.</p>", "SIDEBAR_TXT": "<p><b>اپراتورها</b></p> <p> یک <b>اپراتور</b> یکی از اعضای تیم پشتیبانی است. </p><p> اپراتورها می‌توانند پیام‌های کاربران را ببینند و به آن‌ها پاسخ بدهند. این لیست حاوی تمام اپراتورهایی است که در حساب شما تعریف شده اند. </p><p> با زدن روی دکمه <b>اضافه کردن اپراتور</b> می‌توانید یک اپراتور جدید معرفی کنید. به ایمیل اپراتوری که معرفی می‌کنید یک دعوتنامه ارسال می‌شود که بعد از پذیرفتن آن اپراتور می‌تواند به پیام‌های کاربران پاسخ بدهد. </p><p> بسته به سطح دسترسی تعیین شده یک اپراتور می‌تواند به بخش‌های مشخصی از اکانت دسترسی پیدا کند </p><p> <b>اپراتور</b> - اپراتورهایی که این نقش را داشته باشند تنها می‌توانند به صندوق‌های ورودی، گزارشات و گفتگوها دسترسی داشته باشند. آن‌ها می‌توانند یک مکالمه را به اپراتور دیگر یا خودشان تخصیص دهند و یا یک مکالمه را حل شده اعلام کنند.</p><p> <b>مدیر</b> - مدیران می‌توانند علاوه بر تمام بخش‌هایی که یک اپراتور دسترسی دارد، به تمام بخش‌هایی که در حساب کاربری شما وجود دارد دسترسی داشته باشند.</p>",
"AGENT_TYPES": [ "AGENT_TYPES": {
{ "ADMINISTRATOR": "مدیر",
"name": "administrator", "AGENT": "اپراتور"
"label": "مدیر"
}, },
{
"name": "agent",
"label": "اپراتور"
}
],
"LIST": { "LIST": {
"404": "در حال حاضر هیچ اپراتوری برای این حساب معرفی نشده است.", "404": "در حال حاضر هیچ اپراتوری برای این حساب معرفی نشده است.",
"TITLE": "مدیریت اپراتورها", "TITLE": "مدیریت اپراتورها",

View file

@ -3,38 +3,32 @@
"HEADER": "گزارشات", "HEADER": "گزارشات",
"LOADING_CHART": "در حال دریافت اطلاعات...", "LOADING_CHART": "در حال دریافت اطلاعات...",
"NO_ENOUGH_DATA": "متاسفانه اطلاعات کافی دریافت نشد، لطفا بعدا دوباره امتحان کنید", "NO_ENOUGH_DATA": "متاسفانه اطلاعات کافی دریافت نشد، لطفا بعدا دوباره امتحان کنید",
"METRICS": [ "METRICS": {
{ "CONVERSATIONS": {
"NAME": "گفتگوها", "NAME": "گفتگوها",
"KEY": "conversations_count",
"DESC": "( جمع کل )" "DESC": "( جمع کل )"
}, },
{ "INCOMING_MESSAGES": {
"NAME": "پیام‌های ورودی", "NAME": "پیام‌های ورودی",
"KEY": "incoming_messages_count",
"DESC": "( جمع کل )" "DESC": "( جمع کل )"
}, },
{ "OUTGOING_MESSAGES": {
"NAME": "پیام‌های خروجی", "NAME": "پیام‌های خروجی",
"KEY": "outgoing_messages_count",
"DESC": "( جمع کل )" "DESC": "( جمع کل )"
}, },
{ "FIRST_RESPONSE_TIME": {
"NAME": "زمان تا اولین پاسخ", "NAME": "زمان تا اولین پاسخ",
"KEY": "avg_first_response_time",
"DESC": "( میانگین )" "DESC": "( میانگین )"
}, },
{ "RESOLUTION_TIME": {
"NAME": "زمان تا حل شدن مساله", "NAME": "زمان تا حل شدن مساله",
"KEY": "avg_resolution_time",
"DESC": "( میانگین )" "DESC": "( میانگین )"
}, },
{ "RESOLUTION_COUNT": {
"NAME": "تعداد مسائل حل شده", "NAME": "تعداد مسائل حل شده",
"KEY": "resolutions_count",
"DESC": "( جمع کل )" "DESC": "( جمع کل )"
} }
], },
"DATE_RANGE": [ "DATE_RANGE": [
{ {
"id": 0, "id": 0,

View file

@ -88,6 +88,7 @@
} }
}, },
"SIDEBAR_ITEMS": { "SIDEBAR_ITEMS": {
"CHANGE_AVAILABILITY_STATUS": "عوض شدن",
"CHANGE_ACCOUNTS": "سوییچ به یک حساب دیگر", "CHANGE_ACCOUNTS": "سوییچ به یک حساب دیگر",
"SELECTOR_SUBTITLE": "از لیست یکی از حساب‌ها را انتخاب کنید", "SELECTOR_SUBTITLE": "از لیست یکی از حساب‌ها را انتخاب کنید",
"PROFILE_SETTINGS": "تنظیمات پروفایل", "PROFILE_SETTINGS": "تنظیمات پروفایل",

View file

@ -4,16 +4,10 @@
"HEADER_BTN_TXT": "Add Agent", "HEADER_BTN_TXT": "Add Agent",
"LOADING": "Fetching Agent List", "LOADING": "Fetching Agent List",
"SIDEBAR_TXT": "<p><b>Agents</b></p> <p> An <b>Agent</b> is a member of your Customer Support team. </p><p> Agents will be able to view and reply to messages from your users. The list shows all agents currently in your account. </p><p> Click on <b>Add Agent</b> to add a new agent. Agent you add will receive an email with a confirmation link to activate their account, after which they can access Chatwoot and respond to messages. </p><p> Access to Chatwoot's features are based on following roles. </p><p> <b>Agent</b> - Agents with this role can only access inboxes, reports and conversations. They can assign conversations to other agents or themselves and resolve conversations.</p><p> <b>Administrator</b> - Administrator will have access to all Chatwoot features enabled for your account, including settings, along with all of a normal agents' privileges.</p>", "SIDEBAR_TXT": "<p><b>Agents</b></p> <p> An <b>Agent</b> is a member of your Customer Support team. </p><p> Agents will be able to view and reply to messages from your users. The list shows all agents currently in your account. </p><p> Click on <b>Add Agent</b> to add a new agent. Agent you add will receive an email with a confirmation link to activate their account, after which they can access Chatwoot and respond to messages. </p><p> Access to Chatwoot's features are based on following roles. </p><p> <b>Agent</b> - Agents with this role can only access inboxes, reports and conversations. They can assign conversations to other agents or themselves and resolve conversations.</p><p> <b>Administrator</b> - Administrator will have access to all Chatwoot features enabled for your account, including settings, along with all of a normal agents' privileges.</p>",
"AGENT_TYPES": [ "AGENT_TYPES": {
{ "ADMINISTRATOR": "Administrator",
"name": "administrator", "AGENT": "Agent"
"label": "Administrator"
}, },
{
"name": "agent",
"label": "Agent"
}
],
"LIST": { "LIST": {
"404": "There are no agents associated to this account", "404": "There are no agents associated to this account",
"TITLE": "Manage agents in your team", "TITLE": "Manage agents in your team",

View file

@ -3,38 +3,32 @@
"HEADER": "Reports", "HEADER": "Reports",
"LOADING_CHART": "Loading chart data...", "LOADING_CHART": "Loading chart data...",
"NO_ENOUGH_DATA": "We've not received enough data points to generate report, Please try again later.", "NO_ENOUGH_DATA": "We've not received enough data points to generate report, Please try again later.",
"METRICS": [ "METRICS": {
{ "CONVERSATIONS": {
"NAME": "Conversations", "NAME": "Conversations",
"KEY": "conversations_count",
"DESC": "( Total )" "DESC": "( Total )"
}, },
{ "INCOMING_MESSAGES": {
"NAME": "Incoming Messages", "NAME": "Incoming Messages",
"KEY": "incoming_messages_count",
"DESC": "( Total )" "DESC": "( Total )"
}, },
{ "OUTGOING_MESSAGES": {
"NAME": "Outgoing Messages", "NAME": "Outgoing Messages",
"KEY": "outgoing_messages_count",
"DESC": "( Total )" "DESC": "( Total )"
}, },
{ "FIRST_RESPONSE_TIME": {
"NAME": "First response time", "NAME": "First response time",
"KEY": "avg_first_response_time",
"DESC": "( Avg )" "DESC": "( Avg )"
}, },
{ "RESOLUTION_TIME": {
"NAME": "Resolution Time", "NAME": "Resolution Time",
"KEY": "avg_resolution_time",
"DESC": "( Avg )" "DESC": "( Avg )"
}, },
{ "RESOLUTION_COUNT": {
"NAME": "Resolution Count", "NAME": "Resolution Count",
"KEY": "resolutions_count",
"DESC": "( Total )" "DESC": "( Total )"
} }
], },
"DATE_RANGE": [ "DATE_RANGE": [
{ {
"id": 0, "id": 0,

View file

@ -88,6 +88,7 @@
} }
}, },
"SIDEBAR_ITEMS": { "SIDEBAR_ITEMS": {
"CHANGE_AVAILABILITY_STATUS": "Change",
"CHANGE_ACCOUNTS": "Switch Account", "CHANGE_ACCOUNTS": "Switch Account",
"SELECTOR_SUBTITLE": "Select an account from the following list", "SELECTOR_SUBTITLE": "Select an account from the following list",
"PROFILE_SETTINGS": "Profile Settings", "PROFILE_SETTINGS": "Profile Settings",

View file

@ -4,16 +4,10 @@
"HEADER_BTN_TXT": "Ajouter un agent", "HEADER_BTN_TXT": "Ajouter un agent",
"LOADING": "Récupération de la liste des agents", "LOADING": "Récupération de la liste des agents",
"SIDEBAR_TXT": "<p><b>Agents</b></p> <p> Un <b>agent</b> est un membre de votre équipe d'assistance clientèle. </p><p> Les agents pourront voir et répondre aux messages de vos utilisateurs. La liste montre tous les agents actuellement dans votre compte. </p><p> Cliquez sur <b>Ajouter un agent</b> pour ajouter un nouvel agent. L'agent que vous ajoutez recevra un courriel avec un lien de confirmation pour activer son compte, après quoi il pourra accéder à Chatwoot et répondre aux messages. </p><p> L'accès aux fonctionnalités de Chatwoot est basé sur les rôles suivants. </p><p> <b>Agent</b> - Les agents ayant ce rôle ne peuvent accéder qu'aux boîtes de réception, aux rapports et aux conversations. Ils peuvent assigner des conversations à d'autres agents ou eux-mêmes et résoudre des conversations.</p><p> <b>Administrateur</b> - Administrateur aura accès à toutes les fonctionnalités de Chatwoot activées pour votre compte, y compris les paramètres, ainsi que tous les privilèges d'un agent normal.</p>", "SIDEBAR_TXT": "<p><b>Agents</b></p> <p> Un <b>agent</b> est un membre de votre équipe d'assistance clientèle. </p><p> Les agents pourront voir et répondre aux messages de vos utilisateurs. La liste montre tous les agents actuellement dans votre compte. </p><p> Cliquez sur <b>Ajouter un agent</b> pour ajouter un nouvel agent. L'agent que vous ajoutez recevra un courriel avec un lien de confirmation pour activer son compte, après quoi il pourra accéder à Chatwoot et répondre aux messages. </p><p> L'accès aux fonctionnalités de Chatwoot est basé sur les rôles suivants. </p><p> <b>Agent</b> - Les agents ayant ce rôle ne peuvent accéder qu'aux boîtes de réception, aux rapports et aux conversations. Ils peuvent assigner des conversations à d'autres agents ou eux-mêmes et résoudre des conversations.</p><p> <b>Administrateur</b> - Administrateur aura accès à toutes les fonctionnalités de Chatwoot activées pour votre compte, y compris les paramètres, ainsi que tous les privilèges d'un agent normal.</p>",
"AGENT_TYPES": [ "AGENT_TYPES": {
{ "ADMINISTRATOR": "Administrateur",
"name": "administrateur", "AGENT": "Agent"
"label": "Administrateur"
}, },
{
"name": "agent",
"label": "Agent"
}
],
"LIST": { "LIST": {
"404": "Il n'y a aucun agent associé à ce compte", "404": "Il n'y a aucun agent associé à ce compte",
"TITLE": "Gérer les agents de votre équipe", "TITLE": "Gérer les agents de votre équipe",

View file

@ -3,38 +3,32 @@
"HEADER": "Rapports", "HEADER": "Rapports",
"LOADING_CHART": "Chargement des données du graphique ...", "LOADING_CHART": "Chargement des données du graphique ...",
"NO_ENOUGH_DATA": "Nous n'avons pas reçu assez de points de données pour générer un rapport. Veuillez réessayer plus tard.", "NO_ENOUGH_DATA": "Nous n'avons pas reçu assez de points de données pour générer un rapport. Veuillez réessayer plus tard.",
"METRICS": [ "METRICS": {
{ "CONVERSATIONS": {
"NAME": "Conversations", "NAME": "Conversations",
"KEY": "conversations_count",
"DESC": "(Total)" "DESC": "(Total)"
}, },
{ "INCOMING_MESSAGES": {
"NAME": "Messages entrants", "NAME": "Messages entrants",
"KEY": "incoming_messages_count",
"DESC": "(Total)" "DESC": "(Total)"
}, },
{ "OUTGOING_MESSAGES": {
"NAME": "Messages sortants", "NAME": "Messages sortants",
"KEY": "outgoing_messages_count",
"DESC": "(Total)" "DESC": "(Total)"
}, },
{ "FIRST_RESPONSE_TIME": {
"NAME": "Délai de la première réponse", "NAME": "Délai de la première réponse",
"KEY": "avg_first_response_time",
"DESC": "(Moy.)" "DESC": "(Moy.)"
}, },
{ "RESOLUTION_TIME": {
"NAME": "Temps de résolution", "NAME": "Temps de résolution",
"KEY": "avg_resolution_time",
"DESC": "(Moy.)" "DESC": "(Moy.)"
}, },
{ "RESOLUTION_COUNT": {
"NAME": "Nombre de résolutions", "NAME": "Nombre de résolutions",
"KEY": "resolutions_count",
"DESC": "(Total)" "DESC": "(Total)"
} }
], },
"DATE_RANGE": [ "DATE_RANGE": [
{ {
"id": 0, "id": 0,

View file

@ -88,6 +88,7 @@
} }
}, },
"SIDEBAR_ITEMS": { "SIDEBAR_ITEMS": {
"CHANGE_AVAILABILITY_STATUS": "Changer",
"CHANGE_ACCOUNTS": "Changer de compte", "CHANGE_ACCOUNTS": "Changer de compte",
"SELECTOR_SUBTITLE": "Sélectionnez un compte dans la liste suivante", "SELECTOR_SUBTITLE": "Sélectionnez un compte dans la liste suivante",
"PROFILE_SETTINGS": "Paramètres de profil", "PROFILE_SETTINGS": "Paramètres de profil",

View file

@ -4,16 +4,10 @@
"HEADER_BTN_TXT": "Add Agent", "HEADER_BTN_TXT": "Add Agent",
"LOADING": "Fetching Agent List", "LOADING": "Fetching Agent List",
"SIDEBAR_TXT": "<p><b>Agents</b></p> <p> An <b>Agent</b> is a member of your Customer Support team. </p><p> Agents will be able to view and reply to messages from your users. The list shows all agents currently in your account. </p><p> Click on <b>Add Agent</b> to add a new agent. Agent you add will receive an email with a confirmation link to activate their account, after which they can access Chatwoot and respond to messages. </p><p> Access to Chatwoot's features are based on following roles. </p><p> <b>Agent</b> - Agents with this role can only access inboxes, reports and conversations. They can assign conversations to other agents or themselves and resolve conversations.</p><p> <b>Administrator</b> - Administrator will have access to all Chatwoot features enabled for your account, including settings, along with all of a normal agents' privileges.</p>", "SIDEBAR_TXT": "<p><b>Agents</b></p> <p> An <b>Agent</b> is a member of your Customer Support team. </p><p> Agents will be able to view and reply to messages from your users. The list shows all agents currently in your account. </p><p> Click on <b>Add Agent</b> to add a new agent. Agent you add will receive an email with a confirmation link to activate their account, after which they can access Chatwoot and respond to messages. </p><p> Access to Chatwoot's features are based on following roles. </p><p> <b>Agent</b> - Agents with this role can only access inboxes, reports and conversations. They can assign conversations to other agents or themselves and resolve conversations.</p><p> <b>Administrator</b> - Administrator will have access to all Chatwoot features enabled for your account, including settings, along with all of a normal agents' privileges.</p>",
"AGENT_TYPES": [ "AGENT_TYPES": {
{ "ADMINISTRATOR": "Administrator",
"name": "administrator", "AGENT": "Agent"
"label": "Administrator"
}, },
{
"name": "agent",
"label": "Agent"
}
],
"LIST": { "LIST": {
"404": "There are no agents associated to this account", "404": "There are no agents associated to this account",
"TITLE": "Manage agents in your team", "TITLE": "Manage agents in your team",

View file

@ -3,38 +3,32 @@
"HEADER": "Reports", "HEADER": "Reports",
"LOADING_CHART": "Loading chart data...", "LOADING_CHART": "Loading chart data...",
"NO_ENOUGH_DATA": "We've not received enough data points to generate report, Please try again later.", "NO_ENOUGH_DATA": "We've not received enough data points to generate report, Please try again later.",
"METRICS": [ "METRICS": {
{ "CONVERSATIONS": {
"NAME": "Conversations", "NAME": "Conversations",
"KEY": "conversations_count",
"DESC": "( Total )" "DESC": "( Total )"
}, },
{ "INCOMING_MESSAGES": {
"NAME": "Incoming Messages", "NAME": "Incoming Messages",
"KEY": "incoming_messages_count",
"DESC": "( Total )" "DESC": "( Total )"
}, },
{ "OUTGOING_MESSAGES": {
"NAME": "Outgoing Messages", "NAME": "Outgoing Messages",
"KEY": "outgoing_messages_count",
"DESC": "( Total )" "DESC": "( Total )"
}, },
{ "FIRST_RESPONSE_TIME": {
"NAME": "First response time", "NAME": "First response time",
"KEY": "avg_first_response_time",
"DESC": "( Avg )" "DESC": "( Avg )"
}, },
{ "RESOLUTION_TIME": {
"NAME": "Resolution Time", "NAME": "Resolution Time",
"KEY": "avg_resolution_time",
"DESC": "( Avg )" "DESC": "( Avg )"
}, },
{ "RESOLUTION_COUNT": {
"NAME": "Resolution Count", "NAME": "Resolution Count",
"KEY": "resolutions_count",
"DESC": "( Total )" "DESC": "( Total )"
} }
], },
"DATE_RANGE": [ "DATE_RANGE": [
{ {
"id": 0, "id": 0,

View file

@ -88,6 +88,7 @@
} }
}, },
"SIDEBAR_ITEMS": { "SIDEBAR_ITEMS": {
"CHANGE_AVAILABILITY_STATUS": "Change",
"CHANGE_ACCOUNTS": "Switch Account", "CHANGE_ACCOUNTS": "Switch Account",
"SELECTOR_SUBTITLE": "Select an account from the following list", "SELECTOR_SUBTITLE": "Select an account from the following list",
"PROFILE_SETTINGS": "Profile Settings", "PROFILE_SETTINGS": "Profile Settings",

View file

@ -4,16 +4,10 @@
"HEADER_BTN_TXT": "Add Agent", "HEADER_BTN_TXT": "Add Agent",
"LOADING": "Fetching Agent List", "LOADING": "Fetching Agent List",
"SIDEBAR_TXT": "<p><b>Agents</b></p> <p> An <b>Agent</b> is a member of your Customer Support team. </p><p> Agents will be able to view and reply to messages from your users. The list shows all agents currently in your account. </p><p> Click on <b>Add Agent</b> to add a new agent. Agent you add will receive an email with a confirmation link to activate their account, after which they can access Chatwoot and respond to messages. </p><p> Access to Chatwoot's features are based on following roles. </p><p> <b>Agent</b> - Agents with this role can only access inboxes, reports and conversations. They can assign conversations to other agents or themselves and resolve conversations.</p><p> <b>Administrator</b> - Administrator will have access to all Chatwoot features enabled for your account, including settings, along with all of a normal agents' privileges.</p>", "SIDEBAR_TXT": "<p><b>Agents</b></p> <p> An <b>Agent</b> is a member of your Customer Support team. </p><p> Agents will be able to view and reply to messages from your users. The list shows all agents currently in your account. </p><p> Click on <b>Add Agent</b> to add a new agent. Agent you add will receive an email with a confirmation link to activate their account, after which they can access Chatwoot and respond to messages. </p><p> Access to Chatwoot's features are based on following roles. </p><p> <b>Agent</b> - Agents with this role can only access inboxes, reports and conversations. They can assign conversations to other agents or themselves and resolve conversations.</p><p> <b>Administrator</b> - Administrator will have access to all Chatwoot features enabled for your account, including settings, along with all of a normal agents' privileges.</p>",
"AGENT_TYPES": [ "AGENT_TYPES": {
{ "ADMINISTRATOR": "Administrator",
"name": "administrator", "AGENT": "Agent"
"label": "Administrator"
}, },
{
"name": "agent",
"label": "Agent"
}
],
"LIST": { "LIST": {
"404": "There are no agents associated to this account", "404": "There are no agents associated to this account",
"TITLE": "Manage agents in your team", "TITLE": "Manage agents in your team",

View file

@ -3,38 +3,32 @@
"HEADER": "Reports", "HEADER": "Reports",
"LOADING_CHART": "Loading chart data...", "LOADING_CHART": "Loading chart data...",
"NO_ENOUGH_DATA": "We've not received enough data points to generate report, Please try again later.", "NO_ENOUGH_DATA": "We've not received enough data points to generate report, Please try again later.",
"METRICS": [ "METRICS": {
{ "CONVERSATIONS": {
"NAME": "Conversations", "NAME": "Conversations",
"KEY": "conversations_count",
"DESC": "( Total )" "DESC": "( Total )"
}, },
{ "INCOMING_MESSAGES": {
"NAME": "Incoming Messages", "NAME": "Incoming Messages",
"KEY": "incoming_messages_count",
"DESC": "( Total )" "DESC": "( Total )"
}, },
{ "OUTGOING_MESSAGES": {
"NAME": "Outgoing Messages", "NAME": "Outgoing Messages",
"KEY": "outgoing_messages_count",
"DESC": "( Total )" "DESC": "( Total )"
}, },
{ "FIRST_RESPONSE_TIME": {
"NAME": "First response time", "NAME": "First response time",
"KEY": "avg_first_response_time",
"DESC": "( Avg )" "DESC": "( Avg )"
}, },
{ "RESOLUTION_TIME": {
"NAME": "Resolution Time", "NAME": "Resolution Time",
"KEY": "avg_resolution_time",
"DESC": "( Avg )" "DESC": "( Avg )"
}, },
{ "RESOLUTION_COUNT": {
"NAME": "Resolution Count", "NAME": "Resolution Count",
"KEY": "resolutions_count",
"DESC": "( Total )" "DESC": "( Total )"
} }
], },
"DATE_RANGE": [ "DATE_RANGE": [
{ {
"id": 0, "id": 0,

View file

@ -88,6 +88,7 @@
} }
}, },
"SIDEBAR_ITEMS": { "SIDEBAR_ITEMS": {
"CHANGE_AVAILABILITY_STATUS": "Change",
"CHANGE_ACCOUNTS": "Switch Account", "CHANGE_ACCOUNTS": "Switch Account",
"SELECTOR_SUBTITLE": "Select an account from the following list", "SELECTOR_SUBTITLE": "Select an account from the following list",
"PROFILE_SETTINGS": "Profile Settings", "PROFILE_SETTINGS": "Profile Settings",

View file

@ -4,16 +4,10 @@
"HEADER_BTN_TXT": "Aggiungi Agente", "HEADER_BTN_TXT": "Aggiungi Agente",
"LOADING": "Recupero elenco Operatori", "LOADING": "Recupero elenco Operatori",
"SIDEBAR_TXT": "<p><b>Agenti</b></p> <p> Un <b>agente</b> è membro del tuo team di assistenza clienti. </p><p> Gli agenti saranno in grado di visualizzare e rispondere ai messaggi dei tuoi utenti. L'elenco mostra tutti gli agenti attualmente presenti nel tuo account. </p><p> Clicca su <b>Aggiungi agente</b> per aggiungere un nuovo agente. Ogni agente che aggiungi riceverà un'email con un link di conferma per attivare il loro account, dopo di che possono accedere a Chatwoot e rispondere ai messaggi. </p><p> L'accesso alle funzionalità di Chatwoot si basa sui seguenti ruoli. </p><p> <b>Agente</b> - Gli agenti con questo ruolo possono accedere solo a messaggi, report e conversazioni. Possono assegnare conversazioni ad altri agenti o a se stessi e risolvere le conversazioni.</p><p> <b>Amministratore</b> - L'amministratore avrà accesso a tutte le funzionalità di Chatwoot abilitate per il tuo account, comprese le impostazioni, insieme a tutti i privilegi di un agente normale.</p>", "SIDEBAR_TXT": "<p><b>Agenti</b></p> <p> Un <b>agente</b> è membro del tuo team di assistenza clienti. </p><p> Gli agenti saranno in grado di visualizzare e rispondere ai messaggi dei tuoi utenti. L'elenco mostra tutti gli agenti attualmente presenti nel tuo account. </p><p> Clicca su <b>Aggiungi agente</b> per aggiungere un nuovo agente. Ogni agente che aggiungi riceverà un'email con un link di conferma per attivare il loro account, dopo di che possono accedere a Chatwoot e rispondere ai messaggi. </p><p> L'accesso alle funzionalità di Chatwoot si basa sui seguenti ruoli. </p><p> <b>Agente</b> - Gli agenti con questo ruolo possono accedere solo a messaggi, report e conversazioni. Possono assegnare conversazioni ad altri agenti o a se stessi e risolvere le conversazioni.</p><p> <b>Amministratore</b> - L'amministratore avrà accesso a tutte le funzionalità di Chatwoot abilitate per il tuo account, comprese le impostazioni, insieme a tutti i privilegi di un agente normale.</p>",
"AGENT_TYPES": [ "AGENT_TYPES": {
{ "ADMINISTRATOR": "Amministratore",
"name": "amministratore", "AGENT": "Agente"
"label": "Amministratore"
}, },
{
"name": "agente",
"label": "Agente"
}
],
"LIST": { "LIST": {
"404": "Non ci sono agenti associati a questo account", "404": "Non ci sono agenti associati a questo account",
"TITLE": "Gestisci gli agenti nel tuo team", "TITLE": "Gestisci gli agenti nel tuo team",

View file

@ -3,38 +3,32 @@
"HEADER": "Segnalazioni", "HEADER": "Segnalazioni",
"LOADING_CHART": "Caricamento dati grafici...", "LOADING_CHART": "Caricamento dati grafici...",
"NO_ENOUGH_DATA": "Non abbiamo ricevuto abbastanza dati per generare la segnalazione, riprova più tardi.", "NO_ENOUGH_DATA": "Non abbiamo ricevuto abbastanza dati per generare la segnalazione, riprova più tardi.",
"METRICS": [ "METRICS": {
{ "CONVERSATIONS": {
"NAME": "Conversazioni", "NAME": "Conversazioni",
"KEY": "Conteggio",
"DESC": "(Totale )" "DESC": "(Totale )"
}, },
{ "INCOMING_MESSAGES": {
"NAME": "Messaggi in arrivo", "NAME": "Messaggi in arrivo",
"KEY": "in entrata_conto_messaggi",
"DESC": "(Totale )" "DESC": "(Totale )"
}, },
{ "OUTGOING_MESSAGES": {
"NAME": "Messaggi in uscita", "NAME": "Messaggi in uscita",
"KEY": "conto_messaggi",
"DESC": "(Totale )" "DESC": "(Totale )"
}, },
{ "FIRST_RESPONSE_TIME": {
"NAME": "Tempo di prima risposta", "NAME": "Tempo di prima risposta",
"KEY": "orario_risposta",
"DESC": "( Media )" "DESC": "( Media )"
}, },
{ "RESOLUTION_TIME": {
"NAME": "Risoluzione Tempo", "NAME": "Risoluzione Tempo",
"KEY": "tempo_risoluzione",
"DESC": "( Media )" "DESC": "( Media )"
}, },
{ "RESOLUTION_COUNT": {
"NAME": "Conteggio risoluzioni", "NAME": "Conteggio risoluzioni",
"KEY": "risoluzioni_conteggio",
"DESC": "(Totale )" "DESC": "(Totale )"
} }
], },
"DATE_RANGE": [ "DATE_RANGE": [
{ {
"id": 0, "id": 0,

View file

@ -88,6 +88,7 @@
} }
}, },
"SIDEBAR_ITEMS": { "SIDEBAR_ITEMS": {
"CHANGE_AVAILABILITY_STATUS": "Cambia",
"CHANGE_ACCOUNTS": "Cambia Profilo/Account", "CHANGE_ACCOUNTS": "Cambia Profilo/Account",
"SELECTOR_SUBTITLE": "Seleziona un account dal seguente elenco", "SELECTOR_SUBTITLE": "Seleziona un account dal seguente elenco",
"PROFILE_SETTINGS": "Impostazioni profilo", "PROFILE_SETTINGS": "Impostazioni profilo",

View file

@ -4,16 +4,10 @@
"HEADER_BTN_TXT": "Add Agent", "HEADER_BTN_TXT": "Add Agent",
"LOADING": "Fetching Agent List", "LOADING": "Fetching Agent List",
"SIDEBAR_TXT": "<p><b>Agents</b></p> <p> An <b>Agent</b> is a member of your Customer Support team. </p><p> Agents will be able to view and reply to messages from your users. The list shows all agents currently in your account. </p><p> Click on <b>Add Agent</b> to add a new agent. Agent you add will receive an email with a confirmation link to activate their account, after which they can access Chatwoot and respond to messages. </p><p> Access to Chatwoot's features are based on following roles. </p><p> <b>Agent</b> - Agents with this role can only access inboxes, reports and conversations. They can assign conversations to other agents or themselves and resolve conversations.</p><p> <b>Administrator</b> - Administrator will have access to all Chatwoot features enabled for your account, including settings, along with all of a normal agents' privileges.</p>", "SIDEBAR_TXT": "<p><b>Agents</b></p> <p> An <b>Agent</b> is a member of your Customer Support team. </p><p> Agents will be able to view and reply to messages from your users. The list shows all agents currently in your account. </p><p> Click on <b>Add Agent</b> to add a new agent. Agent you add will receive an email with a confirmation link to activate their account, after which they can access Chatwoot and respond to messages. </p><p> Access to Chatwoot's features are based on following roles. </p><p> <b>Agent</b> - Agents with this role can only access inboxes, reports and conversations. They can assign conversations to other agents or themselves and resolve conversations.</p><p> <b>Administrator</b> - Administrator will have access to all Chatwoot features enabled for your account, including settings, along with all of a normal agents' privileges.</p>",
"AGENT_TYPES": [ "AGENT_TYPES": {
{ "ADMINISTRATOR": "Administrator",
"name": "administrator", "AGENT": "Agent"
"label": "Administrator"
}, },
{
"name": "agent",
"label": "Agent"
}
],
"LIST": { "LIST": {
"404": "There are no agents associated to this account", "404": "There are no agents associated to this account",
"TITLE": "Manage agents in your team", "TITLE": "Manage agents in your team",

View file

@ -3,38 +3,32 @@
"HEADER": "Reports", "HEADER": "Reports",
"LOADING_CHART": "Loading chart data...", "LOADING_CHART": "Loading chart data...",
"NO_ENOUGH_DATA": "We've not received enough data points to generate report, Please try again later.", "NO_ENOUGH_DATA": "We've not received enough data points to generate report, Please try again later.",
"METRICS": [ "METRICS": {
{ "CONVERSATIONS": {
"NAME": "Conversations", "NAME": "Conversations",
"KEY": "conversations_count",
"DESC": "( Total )" "DESC": "( Total )"
}, },
{ "INCOMING_MESSAGES": {
"NAME": "Incoming Messages", "NAME": "Incoming Messages",
"KEY": "incoming_messages_count",
"DESC": "( Total )" "DESC": "( Total )"
}, },
{ "OUTGOING_MESSAGES": {
"NAME": "Outgoing Messages", "NAME": "Outgoing Messages",
"KEY": "outgoing_messages_count",
"DESC": "( Total )" "DESC": "( Total )"
}, },
{ "FIRST_RESPONSE_TIME": {
"NAME": "First response time", "NAME": "First response time",
"KEY": "avg_first_response_time",
"DESC": "( Avg )" "DESC": "( Avg )"
}, },
{ "RESOLUTION_TIME": {
"NAME": "Resolution Time", "NAME": "Resolution Time",
"KEY": "avg_resolution_time",
"DESC": "( Avg )" "DESC": "( Avg )"
}, },
{ "RESOLUTION_COUNT": {
"NAME": "Resolution Count", "NAME": "Resolution Count",
"KEY": "resolutions_count",
"DESC": "( Total )" "DESC": "( Total )"
} }
], },
"DATE_RANGE": [ "DATE_RANGE": [
{ {
"id": 0, "id": 0,

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