Compare commits
85
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9def5f80a3 | ||
|
|
a8c8b38f51 | ||
|
|
f422c83c26 | ||
|
|
722e68eecb | ||
|
|
0592cccca9 | ||
|
|
45b6ea6b3f | ||
|
|
de0bd8e71b | ||
|
|
224b1f98b0 | ||
|
|
3190b29fe9 | ||
|
|
42163946eb | ||
|
|
f13f3ba446 | ||
|
|
f1da7b8afa | ||
|
|
bd14e96ed9 | ||
|
|
00837019b5 | ||
|
|
45124c3b41 | ||
|
|
699b12b1d3 | ||
|
|
e5107604a0 | ||
|
|
871f2f4d56 | ||
|
|
d92b278b60 | ||
|
|
d26b6e0e64 | ||
|
|
4f94ad4a75 | ||
|
|
fbe3560b7a | ||
|
|
118270d2e8 | ||
|
|
8c0c0fd32c | ||
|
|
50d6ebaaca | ||
|
|
95463230cb | ||
|
|
dd641aeef3 | ||
|
|
f4d66566d0 | ||
|
|
9119e947f0 | ||
|
|
5fd3d5e036 | ||
|
|
ac60784f95 | ||
|
|
9ab45ad50e | ||
|
|
1e3be0ac24 | ||
|
|
35715ae841 | ||
|
|
27fd2b8d86 | ||
|
|
6f5ad8f372 | ||
|
|
441fe4db11 | ||
|
|
b9b5a18767 | ||
|
|
b815eb9ce0 | ||
|
|
b3d0af84c4 | ||
|
|
d83beb2148 | ||
|
|
c71bcc2428 | ||
|
|
8daf6cf6cb | ||
|
|
211fb1102d | ||
|
|
7b09b033ef | ||
|
|
65867b8b36 | ||
|
|
4cce7f6ad8 | ||
|
|
f2cb23d6e9 | ||
|
|
8824efe0e1 | ||
|
|
5de7ae492c | ||
|
|
b5db3c9512 | ||
|
|
b4b5de9b46 | ||
|
|
1987ac3d97 | ||
|
|
0012fa2c35 | ||
|
|
b4ce59eea8 | ||
|
|
42441dbd28 | ||
|
|
b9f824b43b | ||
|
|
7651c18b48 | ||
|
|
04acc16609 | ||
|
|
44a7a13117 | ||
|
|
9efd554693 | ||
|
|
2b296c06fb | ||
|
|
4381be5f3e | ||
|
|
127ac0a6b2 | ||
|
|
5d9d754961 | ||
|
|
cac7438fff | ||
|
|
0b41d7f483 | ||
|
|
4517c50227 | ||
|
|
4c4b70da25 | ||
|
|
d84ef4cfd6 | ||
|
|
23786bcb52 | ||
|
|
e4c3f0ac2f | ||
|
|
742c5cc1f4 | ||
|
|
d9e732c005 | ||
|
|
e0e321b8e2 | ||
|
|
ecc66e064d | ||
|
|
7144d55334 | ||
|
|
250650dd7a | ||
|
|
608be1036b | ||
|
|
6ff643b045 | ||
|
|
775b73d1f9 | ||
|
|
14df7b3bc1 | ||
|
|
6946859ba4 | ||
|
|
c129ab00ba | ||
|
|
7edae93ee8 |
@@ -2,3 +2,8 @@
|
|||||||
ignore:
|
ignore:
|
||||||
- CVE-2021-41098 # https://github.com/chatwoot/chatwoot/issues/3097 (update once azure blob storage is updated)
|
- CVE-2021-41098 # https://github.com/chatwoot/chatwoot/issues/3097 (update once azure blob storage is updated)
|
||||||
- GHSA-57hq-95w6-v4fc # Devise confirmable race condition — patched locally in User model (remove once on Devise 5+)
|
- GHSA-57hq-95w6-v4fc # Devise confirmable race condition — patched locally in User model (remove once on Devise 5+)
|
||||||
|
# Chatwoot defaults to Active Storage redirect-style URLs, and its recommended
|
||||||
|
# storage setup uses local/cloud storage with optional direct uploads to the
|
||||||
|
# storage provider rather than Rails proxy mode. Revisit if we enable
|
||||||
|
# rails_storage_proxy or other app-served Active Storage proxy routes.
|
||||||
|
- CVE-2026-33658
|
||||||
|
|||||||
@@ -40,6 +40,8 @@ gem 'json_refs'
|
|||||||
gem 'rack-attack', '>= 6.7.0'
|
gem 'rack-attack', '>= 6.7.0'
|
||||||
# a utility tool for streaming, flexible and safe downloading of remote files
|
# a utility tool for streaming, flexible and safe downloading of remote files
|
||||||
gem 'down'
|
gem 'down'
|
||||||
|
# SSRF-safe URL fetching
|
||||||
|
gem 'ssrf_filter', '~> 1.5'
|
||||||
# authentication type to fetch and send mail over oauth2.0
|
# authentication type to fetch and send mail over oauth2.0
|
||||||
gem 'gmail_xoauth'
|
gem 'gmail_xoauth'
|
||||||
# Lock net-smtp to 0.3.4 to avoid issues with gmail_xoauth2
|
# Lock net-smtp to 0.3.4 to avoid issues with gmail_xoauth2
|
||||||
|
|||||||
@@ -942,6 +942,7 @@ GEM
|
|||||||
activesupport (>= 5.2)
|
activesupport (>= 5.2)
|
||||||
sprockets (>= 3.0.0)
|
sprockets (>= 3.0.0)
|
||||||
squasher (0.7.2)
|
squasher (0.7.2)
|
||||||
|
ssrf_filter (1.5.0)
|
||||||
stackprof (0.2.25)
|
stackprof (0.2.25)
|
||||||
statsd-ruby (1.5.0)
|
statsd-ruby (1.5.0)
|
||||||
stripe (18.0.1)
|
stripe (18.0.1)
|
||||||
@@ -1158,6 +1159,7 @@ DEPENDENCIES
|
|||||||
spring
|
spring
|
||||||
spring-watcher-listen
|
spring-watcher-listen
|
||||||
squasher
|
squasher
|
||||||
|
ssrf_filter (~> 1.5)
|
||||||
stackprof
|
stackprof
|
||||||
stripe (~> 18.0)
|
stripe (~> 18.0)
|
||||||
telephone_number
|
telephone_number
|
||||||
|
|||||||
+1
-1
@@ -1 +1 @@
|
|||||||
4.12.0
|
4.12.1
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
class Email::BaseBuilder
|
class Email::BaseBuilder
|
||||||
|
include EmailAddressParseable
|
||||||
|
|
||||||
pattr_initialize [:inbox!]
|
pattr_initialize [:inbox!]
|
||||||
|
|
||||||
private
|
private
|
||||||
@@ -47,8 +49,4 @@ class Email::BaseBuilder
|
|||||||
# can save it in the format "Name <email@domain.com>"
|
# can save it in the format "Name <email@domain.com>"
|
||||||
parse_email(account.support_email)
|
parse_email(account.support_email)
|
||||||
end
|
end
|
||||||
|
|
||||||
def parse_email(email_string)
|
|
||||||
Mail::Address.new(email_string).address
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -34,6 +34,10 @@ class Api::V1::Accounts::AgentBotsController < Api::V1::Accounts::BaseController
|
|||||||
@agent_bot.reload
|
@agent_bot.reload
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def reset_secret
|
||||||
|
@agent_bot.reset_secret!
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def agent_bot
|
def agent_bot
|
||||||
|
|||||||
+3
-1
@@ -57,7 +57,7 @@ class Api::V1::Accounts::Captain::TasksController < Api::V1::Accounts::BaseContr
|
|||||||
if result.nil?
|
if result.nil?
|
||||||
render json: { message: nil }
|
render json: { message: nil }
|
||||||
elsif result[:error]
|
elsif result[:error]
|
||||||
render json: { error: result[:error] }, status: :unprocessable_entity
|
render json: { error: result[:error] }, status: :unprocessable_content
|
||||||
else
|
else
|
||||||
response_data = { message: result[:message] }
|
response_data = { message: result[:message] }
|
||||||
response_data[:follow_up_context] = result[:follow_up_context] if result[:follow_up_context]
|
response_data[:follow_up_context] = result[:follow_up_context] if result[:follow_up_context]
|
||||||
@@ -69,3 +69,5 @@ class Api::V1::Accounts::Captain::TasksController < Api::V1::Accounts::BaseContr
|
|||||||
authorize(:'captain/tasks')
|
authorize(:'captain/tasks')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
Api::V1::Accounts::Captain::TasksController.prepend_mod_with('Api::V1::Accounts::Captain::TasksController')
|
||||||
@@ -116,6 +116,8 @@ class Api::V1::Accounts::ConversationsController < Api::V1::Accounts::BaseContro
|
|||||||
# High-traffic accounts generate excessive DB writes when agents frequently switch between conversations.
|
# High-traffic accounts generate excessive DB writes when agents frequently switch between conversations.
|
||||||
# Throttle last_seen updates to once per hour when there are no unread messages to reduce DB load.
|
# Throttle last_seen updates to once per hour when there are no unread messages to reduce DB load.
|
||||||
# Always update immediately if there are unread messages to maintain accurate read/unread state.
|
# Always update immediately if there are unread messages to maintain accurate read/unread state.
|
||||||
|
# Visiting a conversation should clear any unread inbox notifications for this conversation.
|
||||||
|
Notification::MarkConversationReadService.new(user: Current.user, account: Current.account, conversation: @conversation).perform
|
||||||
return update_last_seen_on_conversation(DateTime.now.utc, true) if assignee? && @conversation.assignee_unread_messages.any?
|
return update_last_seen_on_conversation(DateTime.now.utc, true) if assignee? && @conversation.assignee_unread_messages.any?
|
||||||
return update_last_seen_on_conversation(DateTime.now.utc, false) if !assignee? && @conversation.unread_messages.any?
|
return update_last_seen_on_conversation(DateTime.now.utc, false) if !assignee? && @conversation.unread_messages.any?
|
||||||
|
|
||||||
|
|||||||
@@ -66,6 +66,12 @@ class Api::V1::Accounts::InboxesController < Api::V1::Accounts::BaseController
|
|||||||
head :ok
|
head :ok
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def reset_secret
|
||||||
|
return head :not_found unless @inbox.api?
|
||||||
|
|
||||||
|
@inbox.channel.reset_secret!
|
||||||
|
end
|
||||||
|
|
||||||
def destroy
|
def destroy
|
||||||
::DeleteObjectJob.perform_later(@inbox, Current.user, request.ip) if @inbox.present?
|
::DeleteObjectJob.perform_later(@inbox, Current.user, request.ip) if @inbox.present?
|
||||||
render status: :ok, json: { message: I18n.t('messages.inbox_deletetion_response') }
|
render status: :ok, json: { message: I18n.t('messages.inbox_deletetion_response') }
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ class Api::V1::Accounts::UploadController < Api::V1::Accounts::BaseController
|
|||||||
elsif params[:external_url].present?
|
elsif params[:external_url].present?
|
||||||
create_from_url
|
create_from_url
|
||||||
else
|
else
|
||||||
render_error('No file or URL provided', :unprocessable_entity)
|
render_error(I18n.t('errors.upload.missing_input'), :unprocessable_entity)
|
||||||
end
|
end
|
||||||
|
|
||||||
render_success(result) if result.is_a?(ActiveStorage::Blob)
|
render_success(result) if result.is_a?(ActiveStorage::Blob)
|
||||||
@@ -19,35 +19,21 @@ class Api::V1::Accounts::UploadController < Api::V1::Accounts::BaseController
|
|||||||
end
|
end
|
||||||
|
|
||||||
def create_from_url
|
def create_from_url
|
||||||
uri = parse_uri(params[:external_url])
|
SafeFetch.fetch(params[:external_url].to_s) do |result|
|
||||||
return if performed?
|
create_and_save_blob(result.tempfile, result.filename, result.content_type)
|
||||||
|
|
||||||
fetch_and_process_file_from_uri(uri)
|
|
||||||
end
|
|
||||||
|
|
||||||
def parse_uri(url)
|
|
||||||
uri = URI.parse(url)
|
|
||||||
validate_uri(uri)
|
|
||||||
uri
|
|
||||||
rescue URI::InvalidURIError, SocketError
|
|
||||||
render_error('Invalid URL provided', :unprocessable_entity)
|
|
||||||
nil
|
|
||||||
end
|
|
||||||
|
|
||||||
def validate_uri(uri)
|
|
||||||
raise URI::InvalidURIError unless uri.is_a?(URI::HTTP) || uri.is_a?(URI::HTTPS)
|
|
||||||
end
|
|
||||||
|
|
||||||
def fetch_and_process_file_from_uri(uri)
|
|
||||||
uri.open do |file|
|
|
||||||
create_and_save_blob(file, File.basename(uri.path), file.content_type)
|
|
||||||
end
|
end
|
||||||
rescue OpenURI::HTTPError => e
|
rescue SafeFetch::HttpError => e
|
||||||
render_error("Failed to fetch file from URL: #{e.message}", :unprocessable_entity)
|
render_error(I18n.t('errors.upload.fetch_failed_with_message', message: e.message), :unprocessable_entity)
|
||||||
rescue SocketError
|
rescue SafeFetch::FetchError
|
||||||
render_error('Invalid URL provided', :unprocessable_entity)
|
render_error(I18n.t('errors.upload.fetch_failed'), :unprocessable_entity)
|
||||||
|
rescue SafeFetch::FileTooLargeError
|
||||||
|
render_error(I18n.t('errors.upload.file_too_large'), :unprocessable_entity)
|
||||||
|
rescue SafeFetch::UnsupportedContentTypeError
|
||||||
|
render_error(I18n.t('errors.upload.unsupported_content_type'), :unprocessable_entity)
|
||||||
|
rescue SafeFetch::Error
|
||||||
|
render_error(I18n.t('errors.upload.invalid_url'), :unprocessable_entity)
|
||||||
rescue StandardError
|
rescue StandardError
|
||||||
render_error('An unexpected error occurred', :internal_server_error)
|
render_error(I18n.t('errors.upload.unexpected'), :internal_server_error)
|
||||||
end
|
end
|
||||||
|
|
||||||
def create_and_save_blob(io, filename, content_type)
|
def create_and_save_blob(io, filename, content_type)
|
||||||
|
|||||||
@@ -30,9 +30,20 @@ class Api::V1::AccountsController < Api::BaseController
|
|||||||
locale: account_params[:locale],
|
locale: account_params[:locale],
|
||||||
user: current_user
|
user: current_user
|
||||||
).perform
|
).perform
|
||||||
|
enqueue_branding_enrichment
|
||||||
if @user
|
if @user
|
||||||
send_auth_headers(@user)
|
# Authenticated users (dashboard "add account") and api_only signups
|
||||||
render 'api/v1/accounts/create', format: :json, locals: { resource: @user }
|
# need the full response with account_id. API-only deployments have no
|
||||||
|
# frontend to handle the email confirmation flow, so they need auth
|
||||||
|
# tokens to proceed.
|
||||||
|
# Unauthenticated web signup returns only the email — no session is
|
||||||
|
# created until the user confirms via the email link.
|
||||||
|
if current_user || api_only_signup?
|
||||||
|
send_auth_headers(@user)
|
||||||
|
render 'api/v1/accounts/create', format: :json, locals: { resource: @user }
|
||||||
|
else
|
||||||
|
render json: { email: @user.email }
|
||||||
|
end
|
||||||
else
|
else
|
||||||
render_error_response(CustomExceptions::Account::SignupFailed.new({}))
|
render_error_response(CustomExceptions::Account::SignupFailed.new({}))
|
||||||
end
|
end
|
||||||
@@ -59,6 +70,16 @@ class Api::V1::AccountsController < Api::BaseController
|
|||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
|
def enqueue_branding_enrichment
|
||||||
|
return if account_params[:email].blank?
|
||||||
|
|
||||||
|
Account::BrandingEnrichmentJob.perform_later(@account.id, account_params[:email])
|
||||||
|
Redis::Alfred.set(format(Redis::Alfred::ACCOUNT_ONBOARDING_ENRICHMENT, account_id: @account.id), '1', ex: 30)
|
||||||
|
rescue StandardError => e
|
||||||
|
# Enrichment is optional — never let queue/Redis failures abort signup
|
||||||
|
ChatwootExceptionTracker.new(e).capture_exception
|
||||||
|
end
|
||||||
|
|
||||||
def ensure_account_name
|
def ensure_account_name
|
||||||
# ensure that account_name and user_full_name is present
|
# ensure that account_name and user_full_name is present
|
||||||
# this is becuase the account builder and the models validations are not triggered
|
# this is becuase the account builder and the models validations are not triggered
|
||||||
@@ -103,6 +124,15 @@ class Api::V1::AccountsController < Api::BaseController
|
|||||||
raise ActionController::RoutingError, 'Not Found' unless GlobalConfigService.account_signup_enabled?
|
raise ActionController::RoutingError, 'Not Found' unless GlobalConfigService.account_signup_enabled?
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def api_only_signup?
|
||||||
|
# CW_API_ONLY_SERVER is the canonical flag for API-only deployments.
|
||||||
|
# ENABLE_ACCOUNT_SIGNUP='api_only' is a legacy sentinel for the same purpose.
|
||||||
|
# Read ENABLE_ACCOUNT_SIGNUP raw from InstallationConfig because GlobalConfig.get
|
||||||
|
# typecasts it to boolean, coercing 'api_only' to true.
|
||||||
|
ActiveModel::Type::Boolean.new.cast(ENV.fetch('CW_API_ONLY_SERVER', false)) ||
|
||||||
|
InstallationConfig.find_by(name: 'ENABLE_ACCOUNT_SIGNUP')&.value.to_s == 'api_only'
|
||||||
|
end
|
||||||
|
|
||||||
def validate_captcha
|
def validate_captcha
|
||||||
raise ActionController::InvalidAuthenticityToken, 'Invalid Captcha' unless ChatwootCaptcha.new(params[:h_captcha_client_response]).valid?
|
raise ActionController::InvalidAuthenticityToken, 'Invalid Captcha' unless ChatwootCaptcha.new(params[:h_captcha_client_response]).valid?
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -43,7 +43,15 @@ class Api::V1::Widget::MessagesController < Api::V1::Widget::BaseController
|
|||||||
end
|
end
|
||||||
|
|
||||||
def set_conversation
|
def set_conversation
|
||||||
@conversation = create_conversation if conversation.nil?
|
return unless conversation.nil?
|
||||||
|
|
||||||
|
@conversation = create_conversation
|
||||||
|
apply_labels if permitted_params[:labels].present?
|
||||||
|
end
|
||||||
|
|
||||||
|
def apply_labels
|
||||||
|
valid_labels = inbox.account.labels.where(title: permitted_params[:labels]).pluck(:title)
|
||||||
|
@conversation.update_labels(valid_labels) if valid_labels.present?
|
||||||
end
|
end
|
||||||
|
|
||||||
def message_finder_params
|
def message_finder_params
|
||||||
@@ -64,7 +72,14 @@ class Api::V1::Widget::MessagesController < Api::V1::Widget::BaseController
|
|||||||
|
|
||||||
def permitted_params
|
def permitted_params
|
||||||
# timestamp parameter is used in create conversation method
|
# timestamp parameter is used in create conversation method
|
||||||
params.permit(:id, :before, :after, :website_token, contact: [:name, :email], message: [:content, :referer_url, :timestamp, :echo_id, :reply_to])
|
# custom_attributes and labels are applied when a new conversation is created alongside the first message
|
||||||
|
params.permit(
|
||||||
|
:id, :before, :after, :website_token,
|
||||||
|
contact: [:name, :email],
|
||||||
|
message: [:content, :referer_url, :timestamp, :echo_id, :reply_to],
|
||||||
|
custom_attributes: {},
|
||||||
|
labels: []
|
||||||
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
def set_message
|
def set_message
|
||||||
|
|||||||
@@ -0,0 +1,18 @@
|
|||||||
|
# Unauthenticated endpoint for resending confirmation emails during signup.
|
||||||
|
# This is a standalone controller (not on DeviseOverrides::ConfirmationsController)
|
||||||
|
# because OmniAuth middleware intercepts all POST /auth/* routes as provider
|
||||||
|
# callbacks, and Devise controller filters cause 307 redirects for custom actions.
|
||||||
|
# Inherits from ActionController::API to avoid both issues entirely.
|
||||||
|
# Rate-limited by Rack::Attack (IP + email) and gated by hCaptcha.
|
||||||
|
class Auth::ResendConfirmationsController < ActionController::API
|
||||||
|
def create
|
||||||
|
return head(:ok) unless ChatwootCaptcha.new(params[:h_captcha_client_response]).valid?
|
||||||
|
|
||||||
|
email = params[:email]
|
||||||
|
return head(:ok) unless email.is_a?(String)
|
||||||
|
|
||||||
|
user = User.from_email(email.strip.downcase)
|
||||||
|
user&.send_confirmation_instructions unless user&.confirmed?
|
||||||
|
head :ok
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -10,7 +10,12 @@ class DeviseOverrides::OmniauthCallbacksController < DeviseTokenAuth::OmniauthCa
|
|||||||
private
|
private
|
||||||
|
|
||||||
def sign_in_user
|
def sign_in_user
|
||||||
|
# Capture before skip_confirmation! sets confirmed_at, which would
|
||||||
|
# make oauth_user_needs_password_reset? return false and skip the
|
||||||
|
# password reset for persisted unconfirmed users.
|
||||||
|
needs_password_reset = oauth_user_needs_password_reset?
|
||||||
@resource.skip_confirmation! if confirmable_enabled?
|
@resource.skip_confirmation! if confirmable_enabled?
|
||||||
|
set_random_password_if_oauth_user if needs_password_reset
|
||||||
|
|
||||||
# once the resource is found and verified
|
# once the resource is found and verified
|
||||||
# we can just send them to the login page again with the SSO params
|
# we can just send them to the login page again with the SSO params
|
||||||
@@ -20,7 +25,10 @@ class DeviseOverrides::OmniauthCallbacksController < DeviseTokenAuth::OmniauthCa
|
|||||||
end
|
end
|
||||||
|
|
||||||
def sign_in_user_on_mobile
|
def sign_in_user_on_mobile
|
||||||
|
# See comment in sign_in_user for why this is captured before skip_confirmation!
|
||||||
|
needs_password_reset = oauth_user_needs_password_reset?
|
||||||
@resource.skip_confirmation! if confirmable_enabled?
|
@resource.skip_confirmation! if confirmable_enabled?
|
||||||
|
set_random_password_if_oauth_user if needs_password_reset
|
||||||
|
|
||||||
# once the resource is found and verified
|
# once the resource is found and verified
|
||||||
# we can just send them to the login page again with the SSO params
|
# we can just send them to the login page again with the SSO params
|
||||||
@@ -37,6 +45,7 @@ class DeviseOverrides::OmniauthCallbacksController < DeviseTokenAuth::OmniauthCa
|
|||||||
return redirect_to login_page_url(error: 'business-account-only') unless validate_signup_email_is_business_domain?
|
return redirect_to login_page_url(error: 'business-account-only') unless validate_signup_email_is_business_domain?
|
||||||
|
|
||||||
create_account_for_user
|
create_account_for_user
|
||||||
|
set_random_password_if_oauth_user
|
||||||
token = @resource.send(:set_reset_password_token)
|
token = @resource.send(:set_reset_password_token)
|
||||||
frontend_url = ENV.fetch('FRONTEND_URL', nil)
|
frontend_url = ENV.fetch('FRONTEND_URL', nil)
|
||||||
redirect_to "#{frontend_url}/app/auth/password/edit?config=default&reset_password_token=#{token}"
|
redirect_to "#{frontend_url}/app/auth/password/edit?config=default&reset_password_token=#{token}"
|
||||||
@@ -81,6 +90,15 @@ class DeviseOverrides::OmniauthCallbacksController < DeviseTokenAuth::OmniauthCa
|
|||||||
Avatar::AvatarFromUrlJob.perform_later(@resource, auth_hash['info']['image'])
|
Avatar::AvatarFromUrlJob.perform_later(@resource, auth_hash['info']['image'])
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def oauth_user_needs_password_reset?
|
||||||
|
@resource.present? && (@resource.new_record? || !@resource.confirmed?)
|
||||||
|
end
|
||||||
|
|
||||||
|
def set_random_password_if_oauth_user
|
||||||
|
# Password must satisfy secure_password requirements (uppercase, lowercase, number, special char)
|
||||||
|
@resource.update(password: "#{SecureRandom.hex(16)}aA1!") if @resource.persisted?
|
||||||
|
end
|
||||||
|
|
||||||
def default_devise_mapping
|
def default_devise_mapping
|
||||||
'user'
|
'user'
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -0,0 +1,101 @@
|
|||||||
|
class Platform::Api::V1::EmailChannelMigrationsController < PlatformController
|
||||||
|
before_action :set_account
|
||||||
|
before_action :validate_account_permissible
|
||||||
|
before_action :validate_feature_flag
|
||||||
|
before_action :validate_params
|
||||||
|
|
||||||
|
def create
|
||||||
|
results = migrate_email_channels
|
||||||
|
render json: { results: results }, status: :ok
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def set_account
|
||||||
|
@account = Account.find(params[:account_id])
|
||||||
|
end
|
||||||
|
|
||||||
|
def validate_account_permissible
|
||||||
|
return if @platform_app.platform_app_permissibles.find_by(permissible: @account)
|
||||||
|
|
||||||
|
render json: { error: 'Non permissible resource' }, status: :unauthorized
|
||||||
|
end
|
||||||
|
|
||||||
|
def validate_feature_flag
|
||||||
|
return if ActiveModel::Type::Boolean.new.cast(ENV.fetch('EMAIL_CHANNEL_MIGRATION', false))
|
||||||
|
|
||||||
|
render json: { error: 'Email channel migration is not enabled' }, status: :forbidden
|
||||||
|
end
|
||||||
|
|
||||||
|
def validate_params
|
||||||
|
return render json: { error: 'Missing migrations parameter' }, status: :unprocessable_entity if migration_params.blank?
|
||||||
|
|
||||||
|
return unless migration_params.size > MAX_MIGRATIONS
|
||||||
|
|
||||||
|
return render json: { error: "Too many migrations (max #{MAX_MIGRATIONS})" },
|
||||||
|
status: :unprocessable_entity
|
||||||
|
end
|
||||||
|
|
||||||
|
def migrate_email_channels
|
||||||
|
migration_params.map { |entry| migrate_single(entry) }
|
||||||
|
end
|
||||||
|
|
||||||
|
MAX_MIGRATIONS = 25
|
||||||
|
SUPPORTED_PROVIDERS = %w[google microsoft].freeze
|
||||||
|
|
||||||
|
def migrate_single(entry)
|
||||||
|
validate_provider!(entry[:provider])
|
||||||
|
|
||||||
|
ActiveRecord::Base.transaction do
|
||||||
|
channel = create_channel(entry)
|
||||||
|
inbox = create_inbox(channel, entry)
|
||||||
|
|
||||||
|
{ email: entry[:email], inbox_id: inbox.id, channel_id: channel.id, status: 'success' }
|
||||||
|
end
|
||||||
|
rescue StandardError => e
|
||||||
|
{ email: entry[:email], status: 'error', message: e.message }
|
||||||
|
end
|
||||||
|
|
||||||
|
def create_channel(entry)
|
||||||
|
Channel::Email.create!(
|
||||||
|
account_id: @account.id,
|
||||||
|
email: entry[:email],
|
||||||
|
provider: entry[:provider],
|
||||||
|
provider_config: entry[:provider_config]&.to_h,
|
||||||
|
imap_enabled: entry.fetch(:imap_enabled, true),
|
||||||
|
imap_address: entry[:imap_address] || default_imap_address(entry[:provider]),
|
||||||
|
imap_port: entry[:imap_port] || 993,
|
||||||
|
imap_login: entry[:imap_login] || entry[:email],
|
||||||
|
imap_enable_ssl: entry.fetch(:imap_enable_ssl, true)
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
def create_inbox(channel, entry)
|
||||||
|
@account.inboxes.create!(
|
||||||
|
name: entry[:inbox_name] || "Migrated #{entry[:provider]&.capitalize}: #{entry[:email]}",
|
||||||
|
channel: channel
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
def validate_provider!(provider)
|
||||||
|
return if SUPPORTED_PROVIDERS.include?(provider)
|
||||||
|
|
||||||
|
raise ArgumentError, "Unsupported provider '#{provider}'. Must be one of: #{SUPPORTED_PROVIDERS.join(', ')}"
|
||||||
|
end
|
||||||
|
|
||||||
|
def default_imap_address(provider)
|
||||||
|
case provider
|
||||||
|
when 'google' then 'imap.gmail.com'
|
||||||
|
when 'microsoft' then 'outlook.office365.com'
|
||||||
|
else ''
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def migration_params
|
||||||
|
params.permit(migrations: [
|
||||||
|
:email, :provider, :inbox_name,
|
||||||
|
:imap_enabled, :imap_address, :imap_port, :imap_login, :imap_enable_ssl,
|
||||||
|
{ provider_config: {} }
|
||||||
|
])[:migrations]
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
class Public::Api::V1::Portals::ArticlesController < Public::Api::V1::Portals::BaseController
|
class Public::Api::V1::Portals::ArticlesController < Public::Api::V1::Portals::BaseController
|
||||||
before_action :ensure_custom_domain_request, only: [:show, :index]
|
before_action :ensure_custom_domain_request, only: [:show, :index]
|
||||||
before_action :portal
|
before_action :portal
|
||||||
|
before_action :ensure_portal_feature_enabled
|
||||||
before_action :set_category, except: [:index, :show, :tracking_pixel]
|
before_action :set_category, except: [:index, :show, :tracking_pixel]
|
||||||
before_action :set_article, only: [:show]
|
before_action :set_article, only: [:show]
|
||||||
layout 'portal'
|
layout 'portal'
|
||||||
@@ -61,7 +62,7 @@ class Public::Api::V1::Portals::ArticlesController < Public::Api::V1::Portals::B
|
|||||||
|
|
||||||
def set_article
|
def set_article
|
||||||
@article = @portal.articles.find_by(slug: permitted_params[:article_slug])
|
@article = @portal.articles.find_by(slug: permitted_params[:article_slug])
|
||||||
@parsed_content = render_article_content(@article.content)
|
@parsed_content = render_article_content(@article.content.to_s)
|
||||||
end
|
end
|
||||||
|
|
||||||
def set_category
|
def set_category
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
class Public::Api::V1::Portals::CategoriesController < Public::Api::V1::Portals::BaseController
|
class Public::Api::V1::Portals::CategoriesController < Public::Api::V1::Portals::BaseController
|
||||||
before_action :ensure_custom_domain_request, only: [:show, :index]
|
before_action :ensure_custom_domain_request, only: [:show, :index]
|
||||||
before_action :portal
|
before_action :portal
|
||||||
|
before_action :ensure_portal_feature_enabled
|
||||||
before_action :set_category, only: [:show]
|
before_action :set_category, only: [:show]
|
||||||
layout 'portal'
|
layout 'portal'
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
class Public::Api::V1::PortalsController < Public::Api::V1::Portals::BaseController
|
class Public::Api::V1::PortalsController < Public::Api::V1::Portals::BaseController
|
||||||
before_action :ensure_custom_domain_request, only: [:show]
|
before_action :ensure_custom_domain_request, only: [:show]
|
||||||
before_action :portal
|
|
||||||
before_action :redirect_to_portal_with_locale, only: [:show]
|
before_action :redirect_to_portal_with_locale, only: [:show]
|
||||||
|
before_action :portal
|
||||||
|
before_action :ensure_portal_feature_enabled
|
||||||
layout 'portal'
|
layout 'portal'
|
||||||
|
|
||||||
def show
|
def show
|
||||||
@@ -24,6 +25,7 @@ class Public::Api::V1::PortalsController < Public::Api::V1::Portals::BaseControl
|
|||||||
def redirect_to_portal_with_locale
|
def redirect_to_portal_with_locale
|
||||||
return if params[:locale].present?
|
return if params[:locale].present?
|
||||||
|
|
||||||
|
portal
|
||||||
redirect_to "/hc/#{@portal.slug}/#{@portal.default_locale}"
|
redirect_to "/hc/#{@portal.slug}/#{@portal.default_locale}"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -18,4 +18,11 @@ class PublicController < ActionController::Base
|
|||||||
Please send us an email at support@chatwoot.com with the custom domain name and account API key"
|
Please send us an email at support@chatwoot.com with the custom domain name and account API key"
|
||||||
}, status: :unauthorized and return
|
}, status: :unauthorized and return
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def ensure_portal_feature_enabled
|
||||||
|
return unless ChatwootApp.chatwoot_cloud?
|
||||||
|
return if @portal.account.feature_enabled?('help_center')
|
||||||
|
|
||||||
|
render 'public/api/v1/portals/not_active', status: :payment_required
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -98,7 +98,9 @@ export default {
|
|||||||
mql.onchange = e => setColorTheme(e.matches);
|
mql.onchange = e => setColorTheme(e.matches);
|
||||||
},
|
},
|
||||||
setLocale(locale) {
|
setLocale(locale) {
|
||||||
this.$root.$i18n.locale = locale;
|
if (locale) {
|
||||||
|
this.$root.$i18n.locale = locale;
|
||||||
|
}
|
||||||
},
|
},
|
||||||
async initializeAccount() {
|
async initializeAccount() {
|
||||||
await this.$store.dispatch('accounts/get');
|
await this.$store.dispatch('accounts/get');
|
||||||
|
|||||||
@@ -25,6 +25,10 @@ class AgentBotsAPI extends ApiClient {
|
|||||||
resetAccessToken(botId) {
|
resetAccessToken(botId) {
|
||||||
return axios.post(`${this.url}/${botId}/reset_access_token`);
|
return axios.post(`${this.url}/${botId}/reset_access_token`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
resetSecret(botId) {
|
||||||
|
return axios.post(`${this.url}/${botId}/reset_secret`);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default new AgentBotsAPI();
|
export default new AgentBotsAPI();
|
||||||
|
|||||||
@@ -31,6 +31,12 @@ class CaptainCustomTools extends ApiClient {
|
|||||||
delete(id) {
|
delete(id) {
|
||||||
return axios.delete(`${this.url}/${id}`);
|
return axios.delete(`${this.url}/${id}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
test(data = {}) {
|
||||||
|
return axios.post(`${this.url}/test`, {
|
||||||
|
custom_tool: data,
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default new CaptainCustomTools();
|
export default new CaptainCustomTools();
|
||||||
|
|||||||
@@ -48,6 +48,10 @@ class Inboxes extends CacheEnabledApiClient {
|
|||||||
template,
|
template,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
resetSecret(inboxId) {
|
||||||
|
return axios.post(`${this.url}/${inboxId}/reset_secret`);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default new Inboxes();
|
export default new Inboxes();
|
||||||
|
|||||||
@@ -106,6 +106,10 @@ select {
|
|||||||
&[disabled] {
|
&[disabled] {
|
||||||
@apply field-disabled;
|
@apply field-disabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
option:not(:disabled) {
|
||||||
|
@apply bg-n-solid-2 text-n-slate-12;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Textarea
|
// Textarea
|
||||||
|
|||||||
+3
-3
@@ -20,11 +20,11 @@ const excludedLabels = defineModel('excludedLabels', {
|
|||||||
|
|
||||||
const excludeOlderThanMinutes = defineModel('excludeOlderThanMinutes', {
|
const excludeOlderThanMinutes = defineModel('excludeOlderThanMinutes', {
|
||||||
type: Number,
|
type: Number,
|
||||||
default: 10,
|
default: null,
|
||||||
});
|
});
|
||||||
|
|
||||||
// Duration limits: 10 minutes to 999 days (in minutes)
|
// Duration limits: 1 minute to 999 days (in minutes)
|
||||||
const MIN_DURATION_MINUTES = 10;
|
const MIN_DURATION_MINUTES = 1;
|
||||||
const MAX_DURATION_MINUTES = 1438560; // 999 days * 24 hours * 60 minutes
|
const MAX_DURATION_MINUTES = 1438560; // 999 days * 24 hours * 60 minutes
|
||||||
|
|
||||||
const { t } = useI18n();
|
const { t } = useI18n();
|
||||||
|
|||||||
+2
-1
@@ -27,7 +27,7 @@ const { t } = useI18n();
|
|||||||
|
|
||||||
const BASE_KEY = 'ASSIGNMENT_POLICY.AGENT_CAPACITY_POLICY';
|
const BASE_KEY = 'ASSIGNMENT_POLICY.AGENT_CAPACITY_POLICY';
|
||||||
const DEFAULT_CONVERSATION_LIMIT = 10;
|
const DEFAULT_CONVERSATION_LIMIT = 10;
|
||||||
const MIN_CONVERSATION_LIMIT = 1;
|
const MIN_CONVERSATION_LIMIT = 0;
|
||||||
const MAX_CONVERSATION_LIMIT = 100000;
|
const MAX_CONVERSATION_LIMIT = 100000;
|
||||||
|
|
||||||
const selectedInboxIds = computed(
|
const selectedInboxIds = computed(
|
||||||
@@ -42,6 +42,7 @@ const availableInboxes = computed(() =>
|
|||||||
|
|
||||||
const isLimitValid = limit => {
|
const isLimitValid = limit => {
|
||||||
return (
|
return (
|
||||||
|
Number.isInteger(limit.conversationLimit) &&
|
||||||
limit.conversationLimit >= MIN_CONVERSATION_LIMIT &&
|
limit.conversationLimit >= MIN_CONVERSATION_LIMIT &&
|
||||||
limit.conversationLimit <= MAX_CONVERSATION_LIMIT
|
limit.conversationLimit <= MAX_CONVERSATION_LIMIT
|
||||||
);
|
);
|
||||||
|
|||||||
+51
-195
@@ -1,207 +1,63 @@
|
|||||||
<script setup>
|
<script setup>
|
||||||
|
import { computed } from 'vue';
|
||||||
|
import { useI18n } from 'vue-i18n';
|
||||||
import { CONVERSATION_PRIORITY } from 'shared/constants/messages';
|
import { CONVERSATION_PRIORITY } from 'shared/constants/messages';
|
||||||
|
|
||||||
defineProps({
|
import Icon from 'dashboard/components-next/icon/Icon.vue';
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
priority: {
|
priority: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '',
|
default: '',
|
||||||
},
|
},
|
||||||
|
showEmpty: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const { t } = useI18n();
|
||||||
|
|
||||||
|
const icons = {
|
||||||
|
[CONVERSATION_PRIORITY.URGENT]: 'i-woot-priority-urgent',
|
||||||
|
[CONVERSATION_PRIORITY.HIGH]: 'i-woot-priority-high',
|
||||||
|
[CONVERSATION_PRIORITY.MEDIUM]: 'i-woot-priority-medium',
|
||||||
|
[CONVERSATION_PRIORITY.LOW]: 'i-woot-priority-low',
|
||||||
|
};
|
||||||
|
|
||||||
|
const priorityLabels = {
|
||||||
|
[CONVERSATION_PRIORITY.URGENT]: 'CONVERSATION.PRIORITY.OPTIONS.URGENT',
|
||||||
|
[CONVERSATION_PRIORITY.HIGH]: 'CONVERSATION.PRIORITY.OPTIONS.HIGH',
|
||||||
|
[CONVERSATION_PRIORITY.MEDIUM]: 'CONVERSATION.PRIORITY.OPTIONS.MEDIUM',
|
||||||
|
[CONVERSATION_PRIORITY.LOW]: 'CONVERSATION.PRIORITY.OPTIONS.LOW',
|
||||||
|
};
|
||||||
|
|
||||||
|
const iconName = computed(() => {
|
||||||
|
if (props.priority && icons[props.priority]) {
|
||||||
|
return icons[props.priority];
|
||||||
|
}
|
||||||
|
return props.showEmpty ? 'i-woot-priority-empty' : '';
|
||||||
|
});
|
||||||
|
|
||||||
|
const tooltipContent = computed(() => {
|
||||||
|
if (props.priority && priorityLabels[props.priority]) {
|
||||||
|
return t(priorityLabels[props.priority]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (props.showEmpty) {
|
||||||
|
return t('CONVERSATION.PRIORITY.OPTIONS.NONE');
|
||||||
|
}
|
||||||
|
|
||||||
|
return '';
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<!-- eslint-disable vue/no-static-inline-styles -->
|
|
||||||
<template>
|
<template>
|
||||||
<div class="inline-flex items-center justify-center rounded-md">
|
<Icon
|
||||||
<!-- Low Priority -->
|
v-tooltip.top="{
|
||||||
<svg
|
content: tooltipContent,
|
||||||
v-if="priority === CONVERSATION_PRIORITY.LOW"
|
delay: { show: 500, hide: 0 },
|
||||||
width="20"
|
}"
|
||||||
height="20"
|
:icon="iconName"
|
||||||
viewBox="0 0 20 20"
|
class="size-4 text-n-slate-5"
|
||||||
fill="none"
|
/>
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
>
|
|
||||||
<mask
|
|
||||||
id="mask0_2030_12879"
|
|
||||||
style="mask-type: alpha"
|
|
||||||
maskUnits="userSpaceOnUse"
|
|
||||||
x="0"
|
|
||||||
y="0"
|
|
||||||
width="20"
|
|
||||||
height="20"
|
|
||||||
>
|
|
||||||
<rect width="20" height="20" fill="#D9D9D9" />
|
|
||||||
</mask>
|
|
||||||
<g mask="url(#mask0_2030_12879)">
|
|
||||||
<rect
|
|
||||||
x="3.33301"
|
|
||||||
y="10"
|
|
||||||
width="3.33333"
|
|
||||||
height="6.66667"
|
|
||||||
rx="1.66667"
|
|
||||||
class="fill-n-amber-9"
|
|
||||||
/>
|
|
||||||
<rect
|
|
||||||
x="8.33301"
|
|
||||||
y="6.6665"
|
|
||||||
width="3.33333"
|
|
||||||
height="10"
|
|
||||||
rx="1.66667"
|
|
||||||
class="fill-n-slate-6"
|
|
||||||
/>
|
|
||||||
<rect
|
|
||||||
x="13.333"
|
|
||||||
y="3.3335"
|
|
||||||
width="3.33333"
|
|
||||||
height="13.3333"
|
|
||||||
rx="1.66667"
|
|
||||||
class="fill-n-slate-6"
|
|
||||||
/>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
||||||
|
|
||||||
<!-- Medium Priority -->
|
|
||||||
<svg
|
|
||||||
v-if="priority === CONVERSATION_PRIORITY.MEDIUM"
|
|
||||||
width="20"
|
|
||||||
height="20"
|
|
||||||
viewBox="0 0 20 20"
|
|
||||||
fill="none"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
>
|
|
||||||
<mask
|
|
||||||
id="mask0_2030_12879"
|
|
||||||
style="mask-type: alpha"
|
|
||||||
maskUnits="userSpaceOnUse"
|
|
||||||
x="0"
|
|
||||||
y="0"
|
|
||||||
width="20"
|
|
||||||
height="20"
|
|
||||||
>
|
|
||||||
<rect width="20" height="20" fill="#D9D9D9" />
|
|
||||||
</mask>
|
|
||||||
<g mask="url(#mask0_2030_12879)">
|
|
||||||
<rect
|
|
||||||
x="3.33301"
|
|
||||||
y="10"
|
|
||||||
width="3.33333"
|
|
||||||
height="6.66667"
|
|
||||||
rx="1.66667"
|
|
||||||
class="fill-n-amber-9"
|
|
||||||
/>
|
|
||||||
<rect
|
|
||||||
x="8.33301"
|
|
||||||
y="6.6665"
|
|
||||||
width="3.33333"
|
|
||||||
height="10"
|
|
||||||
rx="1.66667"
|
|
||||||
class="fill-n-amber-9"
|
|
||||||
/>
|
|
||||||
<rect
|
|
||||||
x="13.333"
|
|
||||||
y="3.3335"
|
|
||||||
width="3.33333"
|
|
||||||
height="13.3333"
|
|
||||||
rx="1.66667"
|
|
||||||
class="fill-n-slate-6"
|
|
||||||
/>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
||||||
|
|
||||||
<!-- High Priority -->
|
|
||||||
<svg
|
|
||||||
v-if="priority === CONVERSATION_PRIORITY.HIGH"
|
|
||||||
width="20"
|
|
||||||
height="20"
|
|
||||||
viewBox="0 0 20 20"
|
|
||||||
fill="none"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
>
|
|
||||||
<mask
|
|
||||||
id="mask0_2030_12879"
|
|
||||||
style="mask-type: alpha"
|
|
||||||
maskUnits="userSpaceOnUse"
|
|
||||||
x="0"
|
|
||||||
y="0"
|
|
||||||
width="20"
|
|
||||||
height="20"
|
|
||||||
>
|
|
||||||
<rect width="20" height="20" fill="#D9D9D9" />
|
|
||||||
</mask>
|
|
||||||
<g mask="url(#mask0_2030_12879)">
|
|
||||||
<rect
|
|
||||||
x="3.33301"
|
|
||||||
y="10"
|
|
||||||
width="3.33333"
|
|
||||||
height="6.66667"
|
|
||||||
rx="1.66667"
|
|
||||||
class="fill-n-amber-9"
|
|
||||||
/>
|
|
||||||
<rect
|
|
||||||
x="8.33301"
|
|
||||||
y="6.6665"
|
|
||||||
width="3.33333"
|
|
||||||
height="10"
|
|
||||||
rx="1.66667"
|
|
||||||
class="fill-n-amber-9"
|
|
||||||
/>
|
|
||||||
<rect
|
|
||||||
x="13.333"
|
|
||||||
y="3.3335"
|
|
||||||
width="3.33333"
|
|
||||||
height="13.3333"
|
|
||||||
rx="1.66667"
|
|
||||||
class="fill-n-amber-9"
|
|
||||||
/>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
||||||
|
|
||||||
<!-- Urgent Priority -->
|
|
||||||
<svg
|
|
||||||
v-if="priority === CONVERSATION_PRIORITY.URGENT"
|
|
||||||
width="20"
|
|
||||||
height="20"
|
|
||||||
viewBox="0 0 20 20"
|
|
||||||
fill="none"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
>
|
|
||||||
<mask
|
|
||||||
id="mask0_2030_12879"
|
|
||||||
style="mask-type: alpha"
|
|
||||||
maskUnits="userSpaceOnUse"
|
|
||||||
x="0"
|
|
||||||
y="0"
|
|
||||||
width="20"
|
|
||||||
height="20"
|
|
||||||
>
|
|
||||||
<rect width="20" height="20" fill="#D9D9D9" />
|
|
||||||
</mask>
|
|
||||||
<g mask="url(#mask0_2030_12879)">
|
|
||||||
<rect
|
|
||||||
x="3.33301"
|
|
||||||
y="10"
|
|
||||||
width="3.33333"
|
|
||||||
height="6.66667"
|
|
||||||
rx="1.66667"
|
|
||||||
class="fill-n-ruby-9"
|
|
||||||
/>
|
|
||||||
<rect
|
|
||||||
x="8.33301"
|
|
||||||
y="6.6665"
|
|
||||||
width="3.33333"
|
|
||||||
height="10"
|
|
||||||
rx="1.66667"
|
|
||||||
class="fill-n-ruby-9"
|
|
||||||
/>
|
|
||||||
<rect
|
|
||||||
x="13.333"
|
|
||||||
y="3.3335"
|
|
||||||
width="3.33333"
|
|
||||||
height="13.3333"
|
|
||||||
rx="1.66667"
|
|
||||||
class="fill-n-ruby-9"
|
|
||||||
/>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
+17
-10
@@ -1,5 +1,5 @@
|
|||||||
<script setup>
|
<script setup>
|
||||||
import { computed } from 'vue';
|
import { computed, ref } from 'vue';
|
||||||
import { debounce } from '@chatwoot/utils';
|
import { debounce } from '@chatwoot/utils';
|
||||||
import { useI18n } from 'vue-i18n';
|
import { useI18n } from 'vue-i18n';
|
||||||
import { ARTICLE_EDITOR_MENU_OPTIONS } from 'dashboard/constants/editor';
|
import { ARTICLE_EDITOR_MENU_OPTIONS } from 'dashboard/constants/editor';
|
||||||
@@ -32,6 +32,7 @@ const emit = defineEmits([
|
|||||||
'setAuthor',
|
'setAuthor',
|
||||||
'setCategory',
|
'setCategory',
|
||||||
'previewArticle',
|
'previewArticle',
|
||||||
|
'createArticle',
|
||||||
]);
|
]);
|
||||||
|
|
||||||
const { t } = useI18n();
|
const { t } = useI18n();
|
||||||
@@ -57,16 +58,10 @@ const quickSave = debounce(
|
|||||||
// Only use to save for existing articles
|
// Only use to save for existing articles
|
||||||
const saveAndSyncDebounced = debounce(saveAndSync, 2500, false);
|
const saveAndSyncDebounced = debounce(saveAndSync, 2500, false);
|
||||||
|
|
||||||
// Debounced save for new articles
|
|
||||||
const quickSaveNewArticle = debounce(saveAndSync, 400, false);
|
|
||||||
|
|
||||||
const handleSave = value => {
|
const handleSave = value => {
|
||||||
if (isNewArticle.value) {
|
if (isNewArticle.value) return;
|
||||||
quickSaveNewArticle(value);
|
quickSave(value);
|
||||||
} else {
|
saveAndSyncDebounced(value);
|
||||||
quickSave(value);
|
|
||||||
saveAndSyncDebounced(value);
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const articleTitle = computed({
|
const articleTitle = computed({
|
||||||
@@ -76,9 +71,12 @@ const articleTitle = computed({
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const localContent = ref(props.article.content || '');
|
||||||
|
|
||||||
const articleContent = computed({
|
const articleContent = computed({
|
||||||
get: () => props.article.content,
|
get: () => props.article.content,
|
||||||
set: content => {
|
set: content => {
|
||||||
|
localContent.value = content;
|
||||||
handleSave({ content });
|
handleSave({ content });
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
@@ -98,6 +96,14 @@ const setCategoryId = categoryId => {
|
|||||||
const previewArticle = () => {
|
const previewArticle = () => {
|
||||||
emit('previewArticle');
|
emit('previewArticle');
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const handleCreateArticle = event => {
|
||||||
|
if (!isNewArticle.value) return;
|
||||||
|
const title = event?.target?.value || '';
|
||||||
|
if (title.trim()) {
|
||||||
|
emit('createArticle', { title, content: localContent.value });
|
||||||
|
}
|
||||||
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
@@ -122,6 +128,7 @@ const previewArticle = () => {
|
|||||||
custom-text-area-wrapper-class="border-0 !bg-transparent dark:!bg-transparent !py-0 !px-0"
|
custom-text-area-wrapper-class="border-0 !bg-transparent dark:!bg-transparent !py-0 !px-0"
|
||||||
placeholder="Title"
|
placeholder="Title"
|
||||||
autofocus
|
autofocus
|
||||||
|
@blur="handleCreateArticle"
|
||||||
/>
|
/>
|
||||||
<ArticleEditorControls
|
<ArticleEditorControls
|
||||||
:article="article"
|
:article="article"
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import {
|
|||||||
import CardLayout from 'dashboard/components-next/CardLayout.vue';
|
import CardLayout from 'dashboard/components-next/CardLayout.vue';
|
||||||
import DropdownMenu from 'dashboard/components-next/dropdown-menu/DropdownMenu.vue';
|
import DropdownMenu from 'dashboard/components-next/dropdown-menu/DropdownMenu.vue';
|
||||||
import Button from 'dashboard/components-next/button/Button.vue';
|
import Button from 'dashboard/components-next/button/Button.vue';
|
||||||
|
import Checkbox from 'dashboard/components-next/checkbox/Checkbox.vue';
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
id: {
|
id: {
|
||||||
@@ -34,14 +35,34 @@ const props = defineProps({
|
|||||||
type: Number,
|
type: Number,
|
||||||
required: true,
|
required: true,
|
||||||
},
|
},
|
||||||
|
isSelected: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
|
selectable: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
|
showSelectionControl: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
|
showMenu: {
|
||||||
|
type: Boolean,
|
||||||
|
default: true,
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const emit = defineEmits(['action']);
|
const emit = defineEmits(['action', 'select', 'hover']);
|
||||||
const { checkPermissions } = usePolicy();
|
const { checkPermissions } = usePolicy();
|
||||||
|
|
||||||
const { t } = useI18n();
|
const { t } = useI18n();
|
||||||
|
|
||||||
const [showActionsDropdown, toggleDropdown] = useToggle();
|
const [showActionsDropdown, toggleDropdown] = useToggle();
|
||||||
|
const modelValue = computed({
|
||||||
|
get: () => props.isSelected,
|
||||||
|
set: () => emit('select', props.id),
|
||||||
|
});
|
||||||
|
|
||||||
const menuItems = computed(() => {
|
const menuItems = computed(() => {
|
||||||
const allOptions = [
|
const allOptions = [
|
||||||
@@ -79,12 +100,23 @@ const handleAction = ({ action, value }) => {
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<CardLayout>
|
<CardLayout
|
||||||
|
:selectable="selectable"
|
||||||
|
class="relative"
|
||||||
|
@mouseenter="emit('hover', true)"
|
||||||
|
@mouseleave="emit('hover', false)"
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
v-show="showSelectionControl"
|
||||||
|
class="absolute top-7 ltr:left-3 rtl:right-3"
|
||||||
|
>
|
||||||
|
<Checkbox v-model="modelValue" />
|
||||||
|
</div>
|
||||||
<div class="flex gap-1 justify-between w-full">
|
<div class="flex gap-1 justify-between w-full">
|
||||||
<span class="text-base text-n-slate-12 line-clamp-1">
|
<span class="text-base text-n-slate-12 line-clamp-1">
|
||||||
{{ name }}
|
{{ name }}
|
||||||
</span>
|
</span>
|
||||||
<div class="flex gap-2 items-center">
|
<div v-if="showMenu" class="flex gap-2 items-center">
|
||||||
<div
|
<div
|
||||||
v-on-clickaway="() => toggleDropdown(false)"
|
v-on-clickaway="() => toggleDropdown(false)"
|
||||||
class="flex relative items-center group"
|
class="flex relative items-center group"
|
||||||
|
|||||||
+11
-5
@@ -21,16 +21,22 @@ const emit = defineEmits(['deleteSuccess']);
|
|||||||
const { t } = useI18n();
|
const { t } = useI18n();
|
||||||
const store = useStore();
|
const store = useStore();
|
||||||
const bulkDeleteDialogRef = ref(null);
|
const bulkDeleteDialogRef = ref(null);
|
||||||
const i18nKey = computed(() => props.type.toUpperCase());
|
const i18nKey = computed(() => {
|
||||||
|
const i18nTypeMap = {
|
||||||
|
AssistantResponse: 'RESPONSES',
|
||||||
|
AssistantDocument: 'DOCUMENTS',
|
||||||
|
};
|
||||||
|
return i18nTypeMap[props.type];
|
||||||
|
});
|
||||||
|
|
||||||
const handleBulkDelete = async ids => {
|
const handleBulkDelete = async ids => {
|
||||||
if (!ids) return;
|
if (!ids) return;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await store.dispatch(
|
await store.dispatch('captainBulkActions/handleBulkDelete', {
|
||||||
'captainBulkActions/handleBulkDelete',
|
ids: Array.from(props.bulkIds),
|
||||||
Array.from(props.bulkIds)
|
type: props.type,
|
||||||
);
|
});
|
||||||
|
|
||||||
emit('deleteSuccess');
|
emit('deleteSuccess');
|
||||||
useAlert(t(`CAPTAIN.${i18nKey.value}.BULK_DELETE.SUCCESS_MESSAGE`));
|
useAlert(t(`CAPTAIN.${i18nKey.value}.BULK_DELETE.SUCCESS_MESSAGE`));
|
||||||
|
|||||||
@@ -6,6 +6,13 @@ import { useAccount } from 'dashboard/composables/useAccount';
|
|||||||
|
|
||||||
import BasePaywallModal from 'dashboard/routes/dashboard/settings/components/BasePaywallModal.vue';
|
import BasePaywallModal from 'dashboard/routes/dashboard/settings/components/BasePaywallModal.vue';
|
||||||
|
|
||||||
|
defineProps({
|
||||||
|
featurePrefix: {
|
||||||
|
type: String,
|
||||||
|
default: 'CAPTAIN',
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
const currentUser = useMapGetter('getCurrentUser');
|
const currentUser = useMapGetter('getCurrentUser');
|
||||||
|
|
||||||
@@ -31,7 +38,7 @@ const openBilling = () => {
|
|||||||
>
|
>
|
||||||
<BasePaywallModal
|
<BasePaywallModal
|
||||||
class="mx-auto"
|
class="mx-auto"
|
||||||
feature-prefix="CAPTAIN"
|
:feature-prefix="featurePrefix"
|
||||||
:i18n-key="i18nKey"
|
:i18n-key="i18nKey"
|
||||||
:is-super-admin="isSuperAdmin"
|
:is-super-admin="isSuperAdmin"
|
||||||
:is-on-chatwoot-cloud="isOnChatwootCloud"
|
:is-on-chatwoot-cloud="isOnChatwootCloud"
|
||||||
|
|||||||
+3
-6
@@ -101,12 +101,9 @@ const authTypeLabel = computed(() => {
|
|||||||
</Policy>
|
</Policy>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex items-center justify-between w-full gap-4">
|
<div class="flex items-center justify-between w-full gap-4 min-w-0">
|
||||||
<div class="flex items-center gap-3 flex-1">
|
<div class="flex items-center gap-3 flex-1 min-w-0">
|
||||||
<span
|
<span v-if="description" class="text-sm truncate text-n-slate-11">
|
||||||
v-if="description"
|
|
||||||
class="text-sm truncate text-n-slate-11 flex-1"
|
|
||||||
>
|
|
||||||
{{ description }}
|
{{ description }}
|
||||||
</span>
|
</span>
|
||||||
<span
|
<span
|
||||||
|
|||||||
+80
-6
@@ -1,9 +1,10 @@
|
|||||||
<script setup>
|
<script setup>
|
||||||
import { reactive, computed, useTemplateRef, watch } from 'vue';
|
import { reactive, computed, ref, useTemplateRef, watch } from 'vue';
|
||||||
import { useI18n } from 'vue-i18n';
|
import { useI18n } from 'vue-i18n';
|
||||||
import { useVuelidate } from '@vuelidate/core';
|
import { useVuelidate } from '@vuelidate/core';
|
||||||
import { required } from '@vuelidate/validators';
|
import { required, maxLength } from '@vuelidate/validators';
|
||||||
import { useMapGetter } from 'dashboard/composables/store';
|
import { useMapGetter } from 'dashboard/composables/store';
|
||||||
|
import CustomToolsAPI from 'dashboard/api/captain/customTools';
|
||||||
|
|
||||||
import Input from 'dashboard/components-next/input/Input.vue';
|
import Input from 'dashboard/components-next/input/Input.vue';
|
||||||
import TextArea from 'dashboard/components-next/textarea/TextArea.vue';
|
import TextArea from 'dashboard/components-next/textarea/TextArea.vue';
|
||||||
@@ -72,8 +73,12 @@ const DEFAULT_PARAM = {
|
|||||||
required: false,
|
required: false,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// OpenAI enforces a 64-char limit on function names. The backend slug is
|
||||||
|
// "custom_" (7 chars) + parameterized title, so cap the title conservatively.
|
||||||
|
const MAX_TOOL_NAME_LENGTH = 55;
|
||||||
|
|
||||||
const validationRules = {
|
const validationRules = {
|
||||||
title: { required },
|
title: { required, maxLength: maxLength(MAX_TOOL_NAME_LENGTH) },
|
||||||
endpoint_url: { required },
|
endpoint_url: { required },
|
||||||
http_method: { required },
|
http_method: { required },
|
||||||
auth_type: { required },
|
auth_type: { required },
|
||||||
@@ -103,9 +108,15 @@ const isLoading = computed(() =>
|
|||||||
);
|
);
|
||||||
|
|
||||||
const getErrorMessage = (field, errorKey) => {
|
const getErrorMessage = (field, errorKey) => {
|
||||||
return v$.value[field].$error
|
if (!v$.value[field].$error) return '';
|
||||||
? t(`CAPTAIN.CUSTOM_TOOLS.FORM.${errorKey}.ERROR`)
|
|
||||||
: '';
|
const failedRule = v$.value[field].$errors[0]?.$validator;
|
||||||
|
if (failedRule === 'maxLength') {
|
||||||
|
return t(`CAPTAIN.CUSTOM_TOOLS.FORM.${errorKey}.MAX_LENGTH_ERROR`, {
|
||||||
|
max: MAX_TOOL_NAME_LENGTH,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return t(`CAPTAIN.CUSTOM_TOOLS.FORM.${errorKey}.ERROR`);
|
||||||
};
|
};
|
||||||
|
|
||||||
const formErrors = computed(() => ({
|
const formErrors = computed(() => ({
|
||||||
@@ -140,6 +151,30 @@ const handleSubmit = async () => {
|
|||||||
|
|
||||||
emit('submit', state);
|
emit('submit', state);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const isTesting = ref(false);
|
||||||
|
const testResult = ref(null);
|
||||||
|
const isTestDisabled = computed(
|
||||||
|
() => state.endpoint_url.includes('{{') || !!state.request_template
|
||||||
|
);
|
||||||
|
|
||||||
|
const handleTest = async () => {
|
||||||
|
if (!state.endpoint_url) return;
|
||||||
|
|
||||||
|
isTesting.value = true;
|
||||||
|
testResult.value = null;
|
||||||
|
try {
|
||||||
|
const { data } = await CustomToolsAPI.test(state);
|
||||||
|
const isOk = data.status >= 200 && data.status < 300;
|
||||||
|
testResult.value = { success: isOk, status: data.status };
|
||||||
|
} catch (e) {
|
||||||
|
const message =
|
||||||
|
e.response?.data?.error || t('CAPTAIN.CUSTOM_TOOLS.TEST.ERROR');
|
||||||
|
testResult.value = { success: false, message };
|
||||||
|
} finally {
|
||||||
|
isTesting.value = false;
|
||||||
|
}
|
||||||
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
@@ -248,6 +283,45 @@ const handleSubmit = async () => {
|
|||||||
class="[&_textarea]:font-mono"
|
class="[&_textarea]:font-mono"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
<div class="flex flex-col gap-2">
|
||||||
|
<Button
|
||||||
|
type="button"
|
||||||
|
variant="faded"
|
||||||
|
color="slate"
|
||||||
|
icon="i-lucide-play"
|
||||||
|
:label="t('CAPTAIN.CUSTOM_TOOLS.TEST.BUTTON')"
|
||||||
|
:is-loading="isTesting"
|
||||||
|
:disabled="isTesting || !state.endpoint_url || isTestDisabled"
|
||||||
|
@click="handleTest"
|
||||||
|
/>
|
||||||
|
<p v-if="isTestDisabled" class="text-xs text-n-slate-11">
|
||||||
|
{{ t('CAPTAIN.CUSTOM_TOOLS.TEST.DISABLED_HINT') }}
|
||||||
|
</p>
|
||||||
|
<div
|
||||||
|
v-if="testResult"
|
||||||
|
class="flex items-center gap-2 px-3 py-2 text-xs rounded-lg"
|
||||||
|
:class="
|
||||||
|
testResult.success
|
||||||
|
? 'bg-n-teal-2 text-n-teal-11'
|
||||||
|
: 'bg-n-ruby-2 text-n-ruby-11'
|
||||||
|
"
|
||||||
|
>
|
||||||
|
<span
|
||||||
|
:class="
|
||||||
|
testResult.success ? 'i-lucide-check-circle' : 'i-lucide-x-circle'
|
||||||
|
"
|
||||||
|
class="size-3.5 shrink-0"
|
||||||
|
/>
|
||||||
|
{{
|
||||||
|
testResult.status
|
||||||
|
? t('CAPTAIN.CUSTOM_TOOLS.TEST.SUCCESS', {
|
||||||
|
status: testResult.status,
|
||||||
|
})
|
||||||
|
: testResult.message
|
||||||
|
}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="flex gap-3 justify-between items-center w-full">
|
<div class="flex gap-3 justify-between items-center w-full">
|
||||||
<Button
|
<Button
|
||||||
type="button"
|
type="button"
|
||||||
|
|||||||
+12
@@ -1,8 +1,11 @@
|
|||||||
<script setup>
|
<script setup>
|
||||||
|
import { useAccount } from 'dashboard/composables/useAccount';
|
||||||
import EmptyStateLayout from 'dashboard/components-next/EmptyStateLayout.vue';
|
import EmptyStateLayout from 'dashboard/components-next/EmptyStateLayout.vue';
|
||||||
|
import FeatureSpotlight from 'dashboard/components-next/feature-spotlight/FeatureSpotlight.vue';
|
||||||
import Button from 'dashboard/components-next/button/Button.vue';
|
import Button from 'dashboard/components-next/button/Button.vue';
|
||||||
|
|
||||||
const emit = defineEmits(['click']);
|
const emit = defineEmits(['click']);
|
||||||
|
const { isOnChatwootCloud } = useAccount();
|
||||||
|
|
||||||
const onClick = () => {
|
const onClick = () => {
|
||||||
emit('click');
|
emit('click');
|
||||||
@@ -10,6 +13,15 @@ const onClick = () => {
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
|
<FeatureSpotlight
|
||||||
|
:title="$t('CAPTAIN.CUSTOM_TOOLS.EMPTY_STATE.FEATURE_SPOTLIGHT.TITLE')"
|
||||||
|
:note="$t('CAPTAIN.CUSTOM_TOOLS.EMPTY_STATE.FEATURE_SPOTLIGHT.NOTE')"
|
||||||
|
fallback-thumbnail="/assets/images/dashboard/captain/assistant-light.svg"
|
||||||
|
fallback-thumbnail-dark="/assets/images/dashboard/captain/assistant-dark.svg"
|
||||||
|
learn-more-url="https://chwt.app/hc/captain-tools"
|
||||||
|
class="mb-8"
|
||||||
|
:hide-actions="!isOnChatwootCloud"
|
||||||
|
/>
|
||||||
<EmptyStateLayout
|
<EmptyStateLayout
|
||||||
:title="$t('CAPTAIN.CUSTOM_TOOLS.EMPTY_STATE.TITLE')"
|
:title="$t('CAPTAIN.CUSTOM_TOOLS.EMPTY_STATE.TITLE')"
|
||||||
:subtitle="$t('CAPTAIN.CUSTOM_TOOLS.EMPTY_STATE.SUBTITLE')"
|
:subtitle="$t('CAPTAIN.CUSTOM_TOOLS.EMPTY_STATE.SUBTITLE')"
|
||||||
|
|||||||
@@ -36,7 +36,13 @@ const props = defineProps({
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const emit = defineEmits(['enterPress', 'input', 'blur', 'focus']);
|
const emit = defineEmits([
|
||||||
|
'enterPress',
|
||||||
|
'escapePress',
|
||||||
|
'input',
|
||||||
|
'blur',
|
||||||
|
'focus',
|
||||||
|
]);
|
||||||
|
|
||||||
const modelValue = defineModel({
|
const modelValue = defineModel({
|
||||||
type: [String, Number],
|
type: [String, Number],
|
||||||
@@ -49,6 +55,10 @@ const onEnterPress = () => {
|
|||||||
emit('enterPress');
|
emit('enterPress');
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const onEscapePress = () => {
|
||||||
|
emit('escapePress');
|
||||||
|
};
|
||||||
|
|
||||||
const handleInput = event => {
|
const handleInput = event => {
|
||||||
emit('input', event.target.value);
|
emit('input', event.target.value);
|
||||||
modelValue.value = event.target.value;
|
modelValue.value = event.target.value;
|
||||||
@@ -102,6 +112,7 @@ defineExpose({
|
|||||||
@focus="handleFocus"
|
@focus="handleFocus"
|
||||||
@blur="handleBlur"
|
@blur="handleBlur"
|
||||||
@keydown.enter.prevent="onEnterPress"
|
@keydown.enter.prevent="onEnterPress"
|
||||||
|
@keydown.escape.prevent="onEscapePress"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ const convertToMinutes = newValue => {
|
|||||||
|
|
||||||
const transformedValue = computed({
|
const transformedValue = computed({
|
||||||
get() {
|
get() {
|
||||||
|
if (duration.value == null) return null;
|
||||||
if (unit.value === DURATION_UNITS.MINUTES) return duration.value;
|
if (unit.value === DURATION_UNITS.MINUTES) return duration.value;
|
||||||
if (unit.value === DURATION_UNITS.HOURS)
|
if (unit.value === DURATION_UNITS.HOURS)
|
||||||
return Math.floor(duration.value / 60);
|
return Math.floor(duration.value / 60);
|
||||||
@@ -41,6 +42,10 @@ const transformedValue = computed({
|
|||||||
return 0;
|
return 0;
|
||||||
},
|
},
|
||||||
set(newValue) {
|
set(newValue) {
|
||||||
|
if (newValue == null || newValue === '') {
|
||||||
|
duration.value = null;
|
||||||
|
return;
|
||||||
|
}
|
||||||
let minuteValue = convertToMinutes(newValue);
|
let minuteValue = convertToMinutes(newValue);
|
||||||
|
|
||||||
duration.value = Math.min(Math.max(minuteValue, props.min), props.max);
|
duration.value = Math.min(Math.max(minuteValue, props.min), props.max);
|
||||||
@@ -53,6 +58,7 @@ const transformedValue = computed({
|
|||||||
// this might create some confusion, especially when saving
|
// this might create some confusion, especially when saving
|
||||||
// this watcher fixes it by rounding the duration basically, to the nearest unit value
|
// this watcher fixes it by rounding the duration basically, to the nearest unit value
|
||||||
watch(unit, () => {
|
watch(unit, () => {
|
||||||
|
if (duration.value == null) return;
|
||||||
let adjustedValue = convertToMinutes(transformedValue.value);
|
let adjustedValue = convertToMinutes(transformedValue.value);
|
||||||
duration.value = Math.min(Math.max(adjustedValue, props.min), props.max);
|
duration.value = Math.min(Math.max(adjustedValue, props.min), props.max);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -313,7 +313,12 @@ const plugins = computed(() => {
|
|||||||
const sendWithSignature = computed(() => {
|
const sendWithSignature = computed(() => {
|
||||||
// this is considered the source of truth, we watch this property
|
// this is considered the source of truth, we watch this property
|
||||||
// on change, we toggle the signature in the editor
|
// on change, we toggle the signature in the editor
|
||||||
if (props.allowSignature && !props.isPrivate && props.channelType) {
|
if (
|
||||||
|
props.allowSignature &&
|
||||||
|
!props.isPrivate &&
|
||||||
|
props.channelType &&
|
||||||
|
!props.disabled
|
||||||
|
) {
|
||||||
return fetchSignatureFlagFromUISettings(props.channelType);
|
return fetchSignatureFlagFromUISettings(props.channelType);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -436,6 +441,7 @@ function reloadState(content = props.modelValue) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function addSignature() {
|
function addSignature() {
|
||||||
|
if (props.disabled) return;
|
||||||
let content = props.modelValue;
|
let content = props.modelValue;
|
||||||
// see if the content is empty, if it is before appending the signature
|
// see if the content is empty, if it is before appending the signature
|
||||||
// we need to add a paragraph node and move the cursor at the start of the editor
|
// we need to add a paragraph node and move the cursor at the start of the editor
|
||||||
@@ -454,6 +460,7 @@ function addSignature() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function removeSignature() {
|
function removeSignature() {
|
||||||
|
if (props.disabled) return;
|
||||||
if (!props.signature) return;
|
if (!props.signature) return;
|
||||||
let content = props.modelValue;
|
let content = props.modelValue;
|
||||||
content = removeSignatureHelper(
|
content = removeSignatureHelper(
|
||||||
@@ -806,7 +813,7 @@ watch(
|
|||||||
|
|
||||||
watch(sendWithSignature, newValue => {
|
watch(sendWithSignature, newValue => {
|
||||||
// see if the allowSignature flag is true
|
// see if the allowSignature flag is true
|
||||||
if (props.allowSignature) {
|
if (props.allowSignature && !props.disabled) {
|
||||||
toggleSignatureInEditor(newValue);
|
toggleSignatureInEditor(newValue);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -79,7 +79,7 @@ export default {
|
|||||||
|
|
||||||
created() {
|
created() {
|
||||||
state = createState(
|
state = createState(
|
||||||
this.modelValue,
|
this.modelValue || '',
|
||||||
this.placeholder,
|
this.placeholder,
|
||||||
this.plugins,
|
this.plugins,
|
||||||
{ onImageUpload: this.openFileBrowser },
|
{ onImageUpload: this.openFileBrowser },
|
||||||
@@ -170,7 +170,7 @@ export default {
|
|||||||
},
|
},
|
||||||
reloadState() {
|
reloadState() {
|
||||||
state = createState(
|
state = createState(
|
||||||
this.modelValue,
|
this.modelValue || '',
|
||||||
this.placeholder,
|
this.placeholder,
|
||||||
this.plugins,
|
this.plugins,
|
||||||
{ onImageUpload: this.openFileBrowser },
|
{ onImageUpload: this.openFileBrowser },
|
||||||
|
|||||||
@@ -128,7 +128,6 @@ export default {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
emits: [
|
emits: [
|
||||||
'replaceText',
|
|
||||||
'toggleInsertArticle',
|
'toggleInsertArticle',
|
||||||
'selectWhatsappTemplate',
|
'selectWhatsappTemplate',
|
||||||
'selectContentTemplate',
|
'selectContentTemplate',
|
||||||
@@ -277,9 +276,6 @@ export default {
|
|||||||
toggleMessageSignature() {
|
toggleMessageSignature() {
|
||||||
this.setSignatureFlagForInbox(this.channelType, !this.sendWithSignature);
|
this.setSignatureFlagForInbox(this.channelType, !this.sendWithSignature);
|
||||||
},
|
},
|
||||||
replaceText(text) {
|
|
||||||
this.$emit('replaceText', text);
|
|
||||||
},
|
|
||||||
toggleInsertArticle() {
|
toggleInsertArticle() {
|
||||||
this.$emit('toggleInsertArticle');
|
this.$emit('toggleInsertArticle');
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import InboxName from '../InboxName.vue';
|
|||||||
import ConversationContextMenu from './contextMenu/Index.vue';
|
import ConversationContextMenu from './contextMenu/Index.vue';
|
||||||
import TimeAgo from 'dashboard/components/ui/TimeAgo.vue';
|
import TimeAgo from 'dashboard/components/ui/TimeAgo.vue';
|
||||||
import CardLabels from './conversationCardComponents/CardLabels.vue';
|
import CardLabels from './conversationCardComponents/CardLabels.vue';
|
||||||
import PriorityMark from './PriorityMark.vue';
|
import CardPriorityIcon from 'dashboard/components-next/Conversation/ConversationCard/CardPriorityIcon.vue';
|
||||||
import SLACardLabel from './components/SLACardLabel.vue';
|
import SLACardLabel from './components/SLACardLabel.vue';
|
||||||
import ContextMenu from 'dashboard/components/ui/ContextMenu.vue';
|
import ContextMenu from 'dashboard/components/ui/ContextMenu.vue';
|
||||||
import VoiceCallStatus from './VoiceCallStatus.vue';
|
import VoiceCallStatus from './VoiceCallStatus.vue';
|
||||||
@@ -305,7 +305,7 @@ const deleteConversation = () => {
|
|||||||
>
|
>
|
||||||
<InboxName v-if="showInboxName" :inbox="inbox" class="flex-1 min-w-0" />
|
<InboxName v-if="showInboxName" :inbox="inbox" class="flex-1 min-w-0" />
|
||||||
<div
|
<div
|
||||||
class="flex items-center gap-2 flex-shrink-0"
|
class="flex items-baseline gap-2 flex-shrink-0"
|
||||||
:class="{
|
:class="{
|
||||||
'flex-1 justify-between': !showInboxName,
|
'flex-1 justify-between': !showInboxName,
|
||||||
}"
|
}"
|
||||||
@@ -317,7 +317,10 @@ const deleteConversation = () => {
|
|||||||
<fluent-icon icon="person" size="12" class="text-n-slate-11" />
|
<fluent-icon icon="person" size="12" class="text-n-slate-11" />
|
||||||
{{ assignee.name }}
|
{{ assignee.name }}
|
||||||
</span>
|
</span>
|
||||||
<PriorityMark :priority="chat.priority" class="flex-shrink-0" />
|
<CardPriorityIcon
|
||||||
|
:priority="chat.priority"
|
||||||
|
class="flex-shrink-0 !size-3.5"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<h4
|
<h4
|
||||||
|
|||||||
@@ -1,53 +0,0 @@
|
|||||||
<script>
|
|
||||||
import { CONVERSATION_PRIORITY } from '../../../../shared/constants/messages';
|
|
||||||
|
|
||||||
export default {
|
|
||||||
name: 'PriorityMark',
|
|
||||||
props: {
|
|
||||||
priority: {
|
|
||||||
type: String,
|
|
||||||
default: '',
|
|
||||||
validate: value =>
|
|
||||||
[...Object.values(CONVERSATION_PRIORITY), ''].includes(value),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
CONVERSATION_PRIORITY,
|
|
||||||
};
|
|
||||||
},
|
|
||||||
computed: {
|
|
||||||
tooltipText() {
|
|
||||||
return this.$t(
|
|
||||||
`CONVERSATION.PRIORITY.OPTIONS.${this.priority.toUpperCase()}`
|
|
||||||
);
|
|
||||||
},
|
|
||||||
isUrgent() {
|
|
||||||
return this.priority === CONVERSATION_PRIORITY.URGENT;
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<!-- eslint-disable-next-line vue/no-root-v-if -->
|
|
||||||
<template>
|
|
||||||
<span
|
|
||||||
v-if="priority"
|
|
||||||
v-tooltip="{
|
|
||||||
content: tooltipText,
|
|
||||||
delay: { show: 1500, hide: 0 },
|
|
||||||
}"
|
|
||||||
class="shrink-0 rounded-sm inline-flex items-center justify-center w-3.5 h-3.5"
|
|
||||||
:class="{
|
|
||||||
'bg-n-ruby-4 text-n-ruby-10': isUrgent,
|
|
||||||
'bg-n-slate-4 text-n-slate-11': !isUrgent,
|
|
||||||
}"
|
|
||||||
>
|
|
||||||
<fluent-icon
|
|
||||||
:icon="`priority-${priority.toLowerCase()}`"
|
|
||||||
:size="isUrgent ? 12 : 14"
|
|
||||||
class="flex-shrink-0"
|
|
||||||
view-box="0 0 14 14"
|
|
||||||
/>
|
|
||||||
</span>
|
|
||||||
</template>
|
|
||||||
@@ -27,7 +27,6 @@ import { CMD_AI_ASSIST } from 'dashboard/helper/commandbar/events';
|
|||||||
import {
|
import {
|
||||||
getMessageVariables,
|
getMessageVariables,
|
||||||
getUndefinedVariablesInMessage,
|
getUndefinedVariablesInMessage,
|
||||||
replaceVariablesInMessage,
|
|
||||||
} from '@chatwoot/utils';
|
} from '@chatwoot/utils';
|
||||||
import WhatsappTemplates from './WhatsappTemplates/Modal.vue';
|
import WhatsappTemplates from './WhatsappTemplates/Modal.vue';
|
||||||
import ContentTemplates from './ContentTemplates/ContentTemplatesModal.vue';
|
import ContentTemplates from './ContentTemplates/ContentTemplatesModal.vue';
|
||||||
@@ -253,6 +252,9 @@ export default {
|
|||||||
if (this.isAnInstagramChannel) {
|
if (this.isAnInstagramChannel) {
|
||||||
return MESSAGE_MAX_LENGTH.INSTAGRAM;
|
return MESSAGE_MAX_LENGTH.INSTAGRAM;
|
||||||
}
|
}
|
||||||
|
if (this.isATelegramChannel) {
|
||||||
|
return MESSAGE_MAX_LENGTH.TELEGRAM;
|
||||||
|
}
|
||||||
if (this.isATiktokChannel) {
|
if (this.isATiktokChannel) {
|
||||||
return MESSAGE_MAX_LENGTH.TIKTOK;
|
return MESSAGE_MAX_LENGTH.TIKTOK;
|
||||||
}
|
}
|
||||||
@@ -545,7 +547,10 @@ export default {
|
|||||||
},
|
},
|
||||||
setCopilotAcceptedMessage(message, replyType = this.replyType) {
|
setCopilotAcceptedMessage(message, replyType = this.replyType) {
|
||||||
const key = this.getDraftKey(this.conversationIdByRoute, replyType);
|
const key = this.getDraftKey(this.conversationIdByRoute, replyType);
|
||||||
this.copilotAcceptedMessages[key] = trimContent(message || '');
|
this.copilotAcceptedMessages[key] = trimContent(
|
||||||
|
message || '',
|
||||||
|
this.maxLength
|
||||||
|
);
|
||||||
},
|
},
|
||||||
clearCopilotAcceptedMessage(replyType = this.replyType) {
|
clearCopilotAcceptedMessage(replyType = this.replyType) {
|
||||||
const key = this.getDraftKey(this.conversationIdByRoute, replyType);
|
const key = this.getDraftKey(this.conversationIdByRoute, replyType);
|
||||||
@@ -603,7 +608,7 @@ export default {
|
|||||||
saveDraft(conversationId, replyType) {
|
saveDraft(conversationId, replyType) {
|
||||||
if (this.message || this.message === '') {
|
if (this.message || this.message === '') {
|
||||||
const key = this.getDraftKey(conversationId, replyType);
|
const key = this.getDraftKey(conversationId, replyType);
|
||||||
const draftToSave = trimContent(this.message || '');
|
const draftToSave = trimContent(this.message || '', this.maxLength);
|
||||||
|
|
||||||
this.$store.dispatch('draftMessages/set', {
|
this.$store.dispatch('draftMessages/set', {
|
||||||
key,
|
key,
|
||||||
@@ -630,10 +635,17 @@ export default {
|
|||||||
return message;
|
return message;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Even when editor is disabled (e.g. WhatsApp/API can't reply), we must
|
||||||
|
// still normalize stale signatures out of drafts when signature is off.
|
||||||
|
if (this.isEditorDisabled && this.sendWithSignature) {
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
|
||||||
const effectiveChannelType = getEffectiveChannelType(
|
const effectiveChannelType = getEffectiveChannelType(
|
||||||
this.channelType,
|
this.channelType,
|
||||||
this.inbox?.medium || ''
|
this.inbox?.medium || ''
|
||||||
);
|
);
|
||||||
|
|
||||||
return this.sendWithSignature
|
return this.sendWithSignature
|
||||||
? appendSignature(message, this.messageSignature, effectiveChannelType)
|
? appendSignature(message, this.messageSignature, effectiveChannelType)
|
||||||
: removeSignature(message, this.messageSignature, effectiveChannelType);
|
: removeSignature(message, this.messageSignature, effectiveChannelType);
|
||||||
@@ -905,32 +917,6 @@ export default {
|
|||||||
});
|
});
|
||||||
this.hideContentTemplatesModal();
|
this.hideContentTemplatesModal();
|
||||||
},
|
},
|
||||||
replaceText(message) {
|
|
||||||
if (this.sendWithSignature && !this.private) {
|
|
||||||
// if signature is enabled, append it to the message
|
|
||||||
// appendSignature ensures that the signature is not duplicated
|
|
||||||
// so we don't need to check if the signature is already present
|
|
||||||
const effectiveChannelType = getEffectiveChannelType(
|
|
||||||
this.channelType,
|
|
||||||
this.inbox?.medium || ''
|
|
||||||
);
|
|
||||||
message = appendSignature(
|
|
||||||
message,
|
|
||||||
this.messageSignature,
|
|
||||||
effectiveChannelType
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
const updatedMessage = replaceVariablesInMessage({
|
|
||||||
message,
|
|
||||||
variables: this.messageVariables,
|
|
||||||
});
|
|
||||||
|
|
||||||
setTimeout(() => {
|
|
||||||
useTrack(CONVERSATION_EVENTS.INSERTED_A_CANNED_RESPONSE);
|
|
||||||
this.message = updatedMessage;
|
|
||||||
}, 100);
|
|
||||||
},
|
|
||||||
setReplyMode(mode = REPLY_EDITOR_MODES.REPLY) {
|
setReplyMode(mode = REPLY_EDITOR_MODES.REPLY) {
|
||||||
// Clear attachments when switching between private note and reply modes
|
// Clear attachments when switching between private note and reply modes
|
||||||
// This is to prevent from breaking the upload rules
|
// This is to prevent from breaking the upload rules
|
||||||
@@ -1429,7 +1415,6 @@ export default {
|
|||||||
:new-conversation-modal-active="newConversationModalActive"
|
:new-conversation-modal-active="newConversationModalActive"
|
||||||
@select-whatsapp-template="openWhatsappTemplateModal"
|
@select-whatsapp-template="openWhatsappTemplateModal"
|
||||||
@select-content-template="openContentTemplateModal"
|
@select-content-template="openContentTemplateModal"
|
||||||
@replace-text="replaceText"
|
|
||||||
@toggle-insert-article="toggleInsertArticle"
|
@toggle-insert-article="toggleInsertArticle"
|
||||||
@toggle-quoted-reply="toggleQuotedReply"
|
@toggle-quoted-reply="toggleQuotedReply"
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import {
|
|||||||
agents,
|
agents,
|
||||||
teams,
|
teams,
|
||||||
labels,
|
labels,
|
||||||
|
booleanFilterOptions,
|
||||||
statusFilterOptions,
|
statusFilterOptions,
|
||||||
messageTypeOptions,
|
messageTypeOptions,
|
||||||
priorityOptions,
|
priorityOptions,
|
||||||
@@ -73,6 +74,8 @@ describe('useAutomation', () => {
|
|||||||
return countries;
|
return countries;
|
||||||
case 'message_type':
|
case 'message_type':
|
||||||
return messageTypeOptions;
|
return messageTypeOptions;
|
||||||
|
case 'private_note':
|
||||||
|
return booleanFilterOptions;
|
||||||
case 'priority':
|
case 'priority':
|
||||||
return priorityOptions;
|
return priorityOptions;
|
||||||
default:
|
default:
|
||||||
@@ -226,6 +229,9 @@ describe('useAutomation', () => {
|
|||||||
expect(getConditionDropdownValues('message_type')).toEqual(
|
expect(getConditionDropdownValues('message_type')).toEqual(
|
||||||
messageTypeOptions
|
messageTypeOptions
|
||||||
);
|
);
|
||||||
|
expect(getConditionDropdownValues('private_note')).toEqual(
|
||||||
|
booleanFilterOptions
|
||||||
|
);
|
||||||
expect(getConditionDropdownValues('priority')).toEqual(priorityOptions);
|
expect(getConditionDropdownValues('priority')).toEqual(priorityOptions);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,54 @@
|
|||||||
|
import { useEditableAutomation } from '../useEditableAutomation';
|
||||||
|
import useAutomationValues from '../useAutomationValues';
|
||||||
|
|
||||||
|
vi.mock('../useAutomationValues');
|
||||||
|
|
||||||
|
describe('useEditableAutomation', () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
useAutomationValues.mockReturnValue({
|
||||||
|
getConditionDropdownValues: vi.fn(attributeKey => {
|
||||||
|
if (attributeKey === 'private_note') {
|
||||||
|
return [
|
||||||
|
{ id: true, name: 'True' },
|
||||||
|
{ id: false, name: 'False' },
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
return [];
|
||||||
|
}),
|
||||||
|
getActionDropdownValues: vi.fn(),
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('rehydrates boolean conditions as a single selected option', () => {
|
||||||
|
const automation = {
|
||||||
|
event_name: 'message_created',
|
||||||
|
conditions: [
|
||||||
|
{
|
||||||
|
attribute_key: 'private_note',
|
||||||
|
filter_operator: 'equal_to',
|
||||||
|
values: [false],
|
||||||
|
query_operator: null,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
actions: [],
|
||||||
|
};
|
||||||
|
const automationTypes = {
|
||||||
|
message_created: {
|
||||||
|
conditions: [{ key: 'private_note', inputType: 'search_select' }],
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
const { formatAutomation } = useEditableAutomation();
|
||||||
|
const result = formatAutomation(automation, [], automationTypes, []);
|
||||||
|
|
||||||
|
expect(result.conditions).toEqual([
|
||||||
|
{
|
||||||
|
attribute_key: 'private_note',
|
||||||
|
filter_operator: 'equal_to',
|
||||||
|
values: { id: false, name: 'False' },
|
||||||
|
query_operator: 'and',
|
||||||
|
},
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -46,11 +46,26 @@ export function useEditableAutomation() {
|
|||||||
if (inputType === 'comma_separated_plain_text') {
|
if (inputType === 'comma_separated_plain_text') {
|
||||||
return { ...condition, values: condition.values.join(',') };
|
return { ...condition, values: condition.values.join(',') };
|
||||||
}
|
}
|
||||||
|
const dropdownValues = getConditionDropdownValues(
|
||||||
|
condition.attribute_key
|
||||||
|
);
|
||||||
|
const hasBooleanOptions =
|
||||||
|
inputType === 'search_select' &&
|
||||||
|
dropdownValues.length &&
|
||||||
|
dropdownValues.every(item => typeof item.id === 'boolean');
|
||||||
|
|
||||||
|
if (hasBooleanOptions) {
|
||||||
|
return {
|
||||||
|
...condition,
|
||||||
|
query_operator: condition.query_operator || 'and',
|
||||||
|
values: dropdownValues.find(item => item.id === condition.values[0]),
|
||||||
|
};
|
||||||
|
}
|
||||||
return {
|
return {
|
||||||
...condition,
|
...condition,
|
||||||
query_operator: condition.query_operator || 'and',
|
query_operator: condition.query_operator || 'and',
|
||||||
values: [...getConditionDropdownValues(condition.attribute_key)].filter(
|
values: [...dropdownValues].filter(item =>
|
||||||
item => [...condition.values].includes(item.id)
|
[...condition.values].includes(item.id)
|
||||||
),
|
),
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ export const FEATURE_FLAGS = {
|
|||||||
CHANNEL_INSTAGRAM: 'channel_instagram',
|
CHANNEL_INSTAGRAM: 'channel_instagram',
|
||||||
CHANNEL_TIKTOK: 'channel_tiktok',
|
CHANNEL_TIKTOK: 'channel_tiktok',
|
||||||
CONTACT_CHATWOOT_SUPPORT_TEAM: 'contact_chatwoot_support_team',
|
CONTACT_CHATWOOT_SUPPORT_TEAM: 'contact_chatwoot_support_team',
|
||||||
|
CAPTAIN_CUSTOM_TOOLS: 'custom_tools',
|
||||||
CAPTAIN_V2: 'captain_integration_v2',
|
CAPTAIN_V2: 'captain_integration_v2',
|
||||||
CAPTAIN_TASKS: 'captain_tasks',
|
CAPTAIN_TASKS: 'captain_tasks',
|
||||||
SAML: 'saml',
|
SAML: 'saml',
|
||||||
@@ -49,6 +50,7 @@ export const FEATURE_FLAGS = {
|
|||||||
export const PREMIUM_FEATURES = [
|
export const PREMIUM_FEATURES = [
|
||||||
FEATURE_FLAGS.SLA,
|
FEATURE_FLAGS.SLA,
|
||||||
FEATURE_FLAGS.CAPTAIN,
|
FEATURE_FLAGS.CAPTAIN,
|
||||||
|
FEATURE_FLAGS.CAPTAIN_CUSTOM_TOOLS,
|
||||||
FEATURE_FLAGS.CUSTOM_ROLES,
|
FEATURE_FLAGS.CUSTOM_ROLES,
|
||||||
FEATURE_FLAGS.AUDIT_LOGS,
|
FEATURE_FLAGS.AUDIT_LOGS,
|
||||||
FEATURE_FLAGS.HELP_CENTER,
|
FEATURE_FLAGS.HELP_CENTER,
|
||||||
|
|||||||
@@ -150,6 +150,7 @@ export const getConditionOptions = ({
|
|||||||
conversation_language: languages,
|
conversation_language: languages,
|
||||||
country_code: countries,
|
country_code: countries,
|
||||||
message_type: messageTypeOptions,
|
message_type: messageTypeOptions,
|
||||||
|
private_note: booleanFilterOptions,
|
||||||
priority: priorityOptions,
|
priority: priorityOptions,
|
||||||
labels: generateConditionOptions(labels, 'title'),
|
labels: generateConditionOptions(labels, 'title'),
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -32,6 +32,25 @@ export function extractTextFromMarkdown(markdown) {
|
|||||||
.trim(); // Trim any extra space
|
.trim(); // Trim any extra space
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes inline base64 markdown images from signature content.
|
||||||
|
*
|
||||||
|
* @param {string} content
|
||||||
|
* @returns {{ sanitizedContent: string, hasInlineImages: boolean }}
|
||||||
|
*/
|
||||||
|
export function stripInlineBase64Images(content) {
|
||||||
|
if (!content || typeof content !== 'string') {
|
||||||
|
return { sanitizedContent: content || '', hasInlineImages: false };
|
||||||
|
}
|
||||||
|
|
||||||
|
const markdownInlineBase64ImageRegex =
|
||||||
|
/!\[[^\]]*]\(\s*data:image\/[a-zA-Z0-9.+-]+;base64,[^)]+\s*\)/gi;
|
||||||
|
const sanitizedContent = content.replace(markdownInlineBase64ImageRegex, '');
|
||||||
|
const hasInlineImages = sanitizedContent !== content;
|
||||||
|
|
||||||
|
return { sanitizedContent, hasInlineImages };
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Strip unsupported markdown formatting based on channel capabilities.
|
* Strip unsupported markdown formatting based on channel capabilities.
|
||||||
* Uses MARKDOWN_PATTERNS from editor constants.
|
* Uses MARKDOWN_PATTERNS from editor constants.
|
||||||
|
|||||||
@@ -166,6 +166,8 @@ const TOD_TO_MERIDIEM = {
|
|||||||
evening: 'pm',
|
evening: 'pm',
|
||||||
night: 'pm',
|
night: 'pm',
|
||||||
};
|
};
|
||||||
|
const CJK_CHAR_RE =
|
||||||
|
/[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}]/u;
|
||||||
|
|
||||||
// ─── Translation Cache ──────────────────────────────────────────────────────
|
// ─── Translation Cache ──────────────────────────────────────────────────────
|
||||||
|
|
||||||
@@ -278,8 +280,13 @@ const escapeRegex = s => s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|||||||
const substituteLocalTokens = (text, pairs) => {
|
const substituteLocalTokens = (text, pairs) => {
|
||||||
let r = text;
|
let r = text;
|
||||||
pairs.forEach(([local, en]) => {
|
pairs.forEach(([local, en]) => {
|
||||||
const re = new RegExp(`(?<=^|\\s)${escapeRegex(local)}(?=\\s|$)`, 'g');
|
if (CJK_CHAR_RE.test(local)) {
|
||||||
r = r.replace(re, en);
|
const re = new RegExp(escapeRegex(local), 'g');
|
||||||
|
r = r.replace(re, ` ${en} `);
|
||||||
|
} else {
|
||||||
|
const re = new RegExp(`(?<=^|\\s)${escapeRegex(local)}(?=\\s|$)`, 'g');
|
||||||
|
r = r.replace(re, en);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
return r;
|
return r;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -82,6 +82,9 @@ const ORDINAL_RE = `(\\d{1,2}(?:st|nd|rd|th)?|${ORDINAL_WORDS})`;
|
|||||||
|
|
||||||
const HALF_UNIT_RE = /^(?:in\s+)?half\s+(?:an?\s+)?(hour|day|week|month|year)$/;
|
const HALF_UNIT_RE = /^(?:in\s+)?half\s+(?:an?\s+)?(hour|day|week|month|year)$/;
|
||||||
const RELATIVE_DURATION_RE = new RegExp(`^(?:in\\s+)?${NUM_RE}\\s+${UNIT_RE}$`);
|
const RELATIVE_DURATION_RE = new RegExp(`^(?:in\\s+)?${NUM_RE}\\s+${UNIT_RE}$`);
|
||||||
|
const RELATIVE_DURATION_AFTER_RE = new RegExp(
|
||||||
|
`^(?:in\\s+)?${NUM_RE}\\s+${UNIT_RE}\\s+after$`
|
||||||
|
);
|
||||||
const DURATION_FROM_NOW_RE = new RegExp(
|
const DURATION_FROM_NOW_RE = new RegExp(
|
||||||
`^${NUM_RE}\\s+${UNIT_RE}\\s+from\\s+now$`
|
`^${NUM_RE}\\s+${UNIT_RE}\\s+from\\s+now$`
|
||||||
);
|
);
|
||||||
@@ -89,6 +92,9 @@ const RELATIVE_DAY_ONLY_RE = new RegExp(`^(${RELATIVE_DAYS})$`);
|
|||||||
const RELATIVE_DAY_TOD_RE = new RegExp(
|
const RELATIVE_DAY_TOD_RE = new RegExp(
|
||||||
`^(${RELATIVE_DAYS})\\s+(?:at\\s+)?(${TIME_OF_DAY_NAMES})$`
|
`^(${RELATIVE_DAYS})\\s+(?:at\\s+)?(${TIME_OF_DAY_NAMES})$`
|
||||||
);
|
);
|
||||||
|
const RELATIVE_DAY_MERIDIEM_RE = new RegExp(
|
||||||
|
`^(${RELATIVE_DAYS})\\s+(?:at\\s+)?(am|pm)$`
|
||||||
|
);
|
||||||
const RELATIVE_DAY_TOD_TIME_RE = new RegExp(
|
const RELATIVE_DAY_TOD_TIME_RE = new RegExp(
|
||||||
`^(${RELATIVE_DAYS})\\s+(?:at\\s+)?(${TIME_OF_DAY_NAMES})\\s+(\\d{1,2}(?::\\d{2})?)$`
|
`^(${RELATIVE_DAYS})\\s+(?:at\\s+)?(${TIME_OF_DAY_NAMES})\\s+(\\d{1,2}(?::\\d{2})?)$`
|
||||||
);
|
);
|
||||||
@@ -245,6 +251,7 @@ const matchDuration = (text, now) => {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
parseDuration(text.match(DURATION_FROM_NOW_RE), now) ||
|
parseDuration(text.match(DURATION_FROM_NOW_RE), now) ||
|
||||||
|
parseDuration(text.match(RELATIVE_DURATION_AFTER_RE), now) ||
|
||||||
parseDuration(text.match(RELATIVE_DURATION_RE), now)
|
parseDuration(text.match(RELATIVE_DURATION_RE), now)
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
@@ -303,6 +310,13 @@ const matchRelativeDay = (text, now) => {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const dayMeridiemMatch = text.match(RELATIVE_DAY_MERIDIEM_RE);
|
||||||
|
if (dayMeridiemMatch) {
|
||||||
|
const [, dayKey, meridiem] = dayMeridiemMatch;
|
||||||
|
const hours = meridiem === 'am' ? 9 : 14;
|
||||||
|
return applyTimeWithRollover(RELATIVE_DAY_MAP[dayKey], hours, 0, now);
|
||||||
|
}
|
||||||
|
|
||||||
const dayAtTimeMatch = text.match(RELATIVE_DAY_AT_TIME_RE);
|
const dayAtTimeMatch = text.match(RELATIVE_DAY_AT_TIME_RE);
|
||||||
if (dayAtTimeMatch) {
|
if (dayAtTimeMatch) {
|
||||||
const [, dayKey, timeRaw] = dayAtTimeMatch;
|
const [, dayKey, timeRaw] = dayAtTimeMatch;
|
||||||
|
|||||||
@@ -178,6 +178,21 @@ describe('getConditionOptions', () => {
|
|||||||
})
|
})
|
||||||
).toEqual(testOptions);
|
).toEqual(testOptions);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('returns boolean options for private_note', () => {
|
||||||
|
const booleanOptions = [
|
||||||
|
{ id: true, name: 'True' },
|
||||||
|
{ id: false, name: 'False' },
|
||||||
|
];
|
||||||
|
|
||||||
|
expect(
|
||||||
|
helpers.getConditionOptions({
|
||||||
|
booleanFilterOptions: booleanOptions,
|
||||||
|
customAttributes,
|
||||||
|
type: 'private_note',
|
||||||
|
})
|
||||||
|
).toEqual(booleanOptions);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('getFileName', () => {
|
describe('getFileName', () => {
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ import {
|
|||||||
getMenuAnchor,
|
getMenuAnchor,
|
||||||
calculateMenuPosition,
|
calculateMenuPosition,
|
||||||
stripUnsupportedFormatting,
|
stripUnsupportedFormatting,
|
||||||
|
stripInlineBase64Images,
|
||||||
} from '../editorHelper';
|
} from '../editorHelper';
|
||||||
import { FORMATTING } from 'dashboard/constants/editor';
|
import { FORMATTING } from 'dashboard/constants/editor';
|
||||||
import { EditorState } from '@chatwoot/prosemirror-schema';
|
import { EditorState } from '@chatwoot/prosemirror-schema';
|
||||||
@@ -423,6 +424,36 @@ describe('extractTextFromMarkdown', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('stripInlineBase64Images', () => {
|
||||||
|
it('removes markdown data:image base64 images and sets hasInlineImages', () => {
|
||||||
|
const content =
|
||||||
|
'Hello\n\nWorld';
|
||||||
|
const { sanitizedContent, hasInlineImages } =
|
||||||
|
stripInlineBase64Images(content);
|
||||||
|
|
||||||
|
expect(hasInlineImages).toBe(true);
|
||||||
|
expect(sanitizedContent).not.toContain('data:image/png;base64');
|
||||||
|
expect(sanitizedContent).toContain('Hello');
|
||||||
|
expect(sanitizedContent).toContain('World');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('leaves hosted image markdown unchanged', () => {
|
||||||
|
const content = '';
|
||||||
|
const { sanitizedContent, hasInlineImages } =
|
||||||
|
stripInlineBase64Images(content);
|
||||||
|
|
||||||
|
expect(hasInlineImages).toBe(false);
|
||||||
|
expect(sanitizedContent).toBe(content);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('returns empty hasInlineImages for empty input', () => {
|
||||||
|
expect(stripInlineBase64Images('')).toEqual({
|
||||||
|
sanitizedContent: '',
|
||||||
|
hasInlineImages: false,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
describe('insertAtCursor', () => {
|
describe('insertAtCursor', () => {
|
||||||
it('should return undefined if editorView is not provided', () => {
|
it('should return undefined if editorView is not provided', () => {
|
||||||
const result = insertAtCursor(undefined, schema.text('Hello'), 0);
|
const result = insertAtCursor(undefined, schema.text('Hello'), 0);
|
||||||
|
|||||||
@@ -1626,6 +1626,24 @@ describe('generateDateSuggestions — localized input regressions', () => {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const zhTWSnoozeTranslations = {
|
||||||
|
UNITS: {
|
||||||
|
HOUR: '小時',
|
||||||
|
HOURS: '小時',
|
||||||
|
DAY: '天',
|
||||||
|
DAYS: '天',
|
||||||
|
},
|
||||||
|
HALF: '半',
|
||||||
|
RELATIVE: {
|
||||||
|
TOMORROW: '明天',
|
||||||
|
},
|
||||||
|
MERIDIEM: {
|
||||||
|
AM: '上午',
|
||||||
|
PM: '下午',
|
||||||
|
},
|
||||||
|
AFTER: '後',
|
||||||
|
};
|
||||||
|
|
||||||
describe('P1: short non-English tokens must NOT produce spurious half-duration suggestions', () => {
|
describe('P1: short non-English tokens must NOT produce spurious half-duration suggestions', () => {
|
||||||
it('Arabic "غد" does not produce half-duration suggestions', () => {
|
it('Arabic "غد" does not produce half-duration suggestions', () => {
|
||||||
const results = generateDateSuggestions('غد', now, {
|
const results = generateDateSuggestions('غد', now, {
|
||||||
@@ -1721,6 +1739,37 @@ describe('generateDateSuggestions — localized input regressions', () => {
|
|||||||
expect(results[0].date.getHours()).toBe(6);
|
expect(results[0].date.getHours()).toBe(6);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('zh_TW compact CJK inputs', () => {
|
||||||
|
const options = {
|
||||||
|
translations: zhTWSnoozeTranslations,
|
||||||
|
locale: 'zh-TW',
|
||||||
|
};
|
||||||
|
|
||||||
|
it('parses "2小時後" (2 hours from now) without spaces', () => {
|
||||||
|
const results = generateDateSuggestions('2小時後', now, options);
|
||||||
|
expect(results.length).toBeGreaterThan(0);
|
||||||
|
expect(results[0].date.getDate()).toBe(16);
|
||||||
|
expect(results[0].date.getHours()).toBe(12);
|
||||||
|
expect(results[0].date.getMinutes()).toBe(0);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('parses "半天" (half day) without spaces', () => {
|
||||||
|
const results = generateDateSuggestions('半天', now, options);
|
||||||
|
expect(results.length).toBeGreaterThan(0);
|
||||||
|
expect(results[0].date.getDate()).toBe(16);
|
||||||
|
expect(results[0].date.getHours()).toBe(22);
|
||||||
|
expect(results[0].date.getMinutes()).toBe(0);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('parses "明天 上午" (tomorrow AM) into tomorrow 9am', () => {
|
||||||
|
const results = generateDateSuggestions('明天 上午', now, options);
|
||||||
|
expect(results.length).toBeGreaterThan(0);
|
||||||
|
expect(results[0].date.getDate()).toBe(17);
|
||||||
|
expect(results[0].date.getHours()).toBe(9);
|
||||||
|
expect(results[0].date.getMinutes()).toBe(0);
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('no-space duration suggestions', () => {
|
describe('no-space duration suggestions', () => {
|
||||||
|
|||||||
@@ -6,12 +6,12 @@
|
|||||||
"SWITCH_VIEW_LAYOUT": "Switch the layout",
|
"SWITCH_VIEW_LAYOUT": "Switch the layout",
|
||||||
"DASHBOARD_APP_TAB_MESSAGES": "Messages",
|
"DASHBOARD_APP_TAB_MESSAGES": "Messages",
|
||||||
"UNVERIFIED_SESSION": "The identity of this user is not verified",
|
"UNVERIFIED_SESSION": "The identity of this user is not verified",
|
||||||
"NO_MESSAGE_1": "Uh oh! Looks like there are no messages from customers in your inbox.",
|
"NO_MESSAGE_1": "የደንበኞች መልእክቶች በኢንቦክስዎ አልተገኙም።",
|
||||||
"NO_MESSAGE_2": " to send a message to your page!",
|
"NO_MESSAGE_2": " ወደ ገፅዎ መልእክት ለመላክ!",
|
||||||
"NO_INBOX_1": "Hola! Looks like you haven't added any inboxes yet.",
|
"NO_INBOX_1": "እሺ! አሁን ምንም ኢንቦክስ አልጨመሩም።",
|
||||||
"NO_INBOX_2": " to get started",
|
"NO_INBOX_2": " ለመጀመር",
|
||||||
"NO_INBOX_AGENT": "Uh Oh! Looks like you are not part of any inbox. Please contact your administrator",
|
"NO_INBOX_AGENT": "ወይ! ምንም ኢንቦክስ አባል አይደለህም። እባክዎ አስተዳዳሪዎን ያነጋግሩ",
|
||||||
"SEARCH_MESSAGES": "Search for messages in conversations",
|
"SEARCH_MESSAGES": "መልእክቶችን በውይይቶች ውስጥ ይፈልጉ",
|
||||||
"VIEW_ORIGINAL": "View original",
|
"VIEW_ORIGINAL": "View original",
|
||||||
"VIEW_TRANSLATED": "View translated",
|
"VIEW_TRANSLATED": "View translated",
|
||||||
"EMPTY_STATE": {
|
"EMPTY_STATE": {
|
||||||
@@ -19,19 +19,19 @@
|
|||||||
"KEYBOARD_SHORTCUTS": "to view keyboard shortcuts"
|
"KEYBOARD_SHORTCUTS": "to view keyboard shortcuts"
|
||||||
},
|
},
|
||||||
"SEARCH": {
|
"SEARCH": {
|
||||||
"TITLE": "Search messages",
|
"TITLE": "መልእክቶችን ይፈልጉ",
|
||||||
"RESULT_TITLE": "Search Results",
|
"RESULT_TITLE": "Search Results",
|
||||||
"LOADING_MESSAGE": "Crunching data...",
|
"LOADING_MESSAGE": "መረጃ በማስተናገድ ላይ...",
|
||||||
"PLACEHOLDER": "Type any text to search messages",
|
"PLACEHOLDER": "Type any text to search messages",
|
||||||
"NO_MATCHING_RESULTS": "No results found."
|
"NO_MATCHING_RESULTS": "No results found."
|
||||||
},
|
},
|
||||||
"UNREAD_MESSAGES": "Unread Messages",
|
"UNREAD_MESSAGES": "Unread Messages",
|
||||||
"UNREAD_MESSAGE": "Unread Message",
|
"UNREAD_MESSAGE": "Unread Message",
|
||||||
"CLICK_HERE": "Click here",
|
"CLICK_HERE": "እዚህ ጠቅ ያድርጉ",
|
||||||
"LOADING_INBOXES": "Loading inboxes",
|
"LOADING_INBOXES": "ኢንቦክሶች በመጫን ላይ",
|
||||||
"LOADING_CONVERSATIONS": "Loading Conversations",
|
"LOADING_CONVERSATIONS": "ውይይቶች በመጫን ላይ",
|
||||||
"CANNOT_REPLY": "You cannot reply due to",
|
"CANNOT_REPLY": "ምክንያቱን በመነሳት መልስ ማድረግ አይችሉም",
|
||||||
"24_HOURS_WINDOW": "24 hour message window restriction",
|
"24_HOURS_WINDOW": "የ24 ሰዓት መልእክት ጊዜ ገደብ",
|
||||||
"48_HOURS_WINDOW": "48 hour message window restriction",
|
"48_HOURS_WINDOW": "48 hour message window restriction",
|
||||||
"API_HOURS_WINDOW": "ለዚህ ውይይት መመለስ በ{hours} ሰአታት ውስጥ ብቻ ይቻላል",
|
"API_HOURS_WINDOW": "ለዚህ ውይይት መመለስ በ{hours} ሰአታት ውስጥ ብቻ ይቻላል",
|
||||||
"NOT_ASSIGNED_TO_YOU": "This conversation is not assigned to you. Would you like to assign this conversation to yourself?",
|
"NOT_ASSIGNED_TO_YOU": "This conversation is not assigned to you. Would you like to assign this conversation to yourself?",
|
||||||
@@ -44,9 +44,9 @@
|
|||||||
"TWILIO_WHATSAPP_CAN_REPLY": "You can only reply to this conversation using a template message due to",
|
"TWILIO_WHATSAPP_CAN_REPLY": "You can only reply to this conversation using a template message due to",
|
||||||
"TWILIO_WHATSAPP_24_HOURS_WINDOW": "24 hour message window restriction",
|
"TWILIO_WHATSAPP_24_HOURS_WINDOW": "24 hour message window restriction",
|
||||||
"OLD_INSTAGRAM_INBOX_REPLY_BANNER": "ይህ የInstagram መለያ ወደ አዲሱ የInstagram ቻናል ገቢ ሳጥን ተዛውሯል። ሁሉም አዲስ መልዕክቶች በዚያ ይታያሉ። ከአሁን ጀምሮ ከዚህ ውይይት መልዕክቶች መላክ አትችሉም።",
|
"OLD_INSTAGRAM_INBOX_REPLY_BANNER": "ይህ የInstagram መለያ ወደ አዲሱ የInstagram ቻናል ገቢ ሳጥን ተዛውሯል። ሁሉም አዲስ መልዕክቶች በዚያ ይታያሉ። ከአሁን ጀምሮ ከዚህ ውይይት መልዕክቶች መላክ አትችሉም።",
|
||||||
"REPLYING_TO": "You are replying to:",
|
"REPLYING_TO": "ለዚህ ትመልሳለህ፦",
|
||||||
"REMOVE_SELECTION": "Remove Selection",
|
"REMOVE_SELECTION": "ምርጫ አስወግድ",
|
||||||
"DOWNLOAD": "Download",
|
"DOWNLOAD": "አውርድ",
|
||||||
"UNKNOWN_FILE_TYPE": "Unknown File",
|
"UNKNOWN_FILE_TYPE": "Unknown File",
|
||||||
"SAVE_CONTACT": "Save Contact",
|
"SAVE_CONTACT": "Save Contact",
|
||||||
"NO_CONTENT": "No content to display",
|
"NO_CONTENT": "No content to display",
|
||||||
@@ -85,13 +85,13 @@
|
|||||||
"YOU_ANSWERED": "You answered"
|
"YOU_ANSWERED": "You answered"
|
||||||
},
|
},
|
||||||
"HEADER": {
|
"HEADER": {
|
||||||
"RESOLVE_ACTION": "Resolve",
|
"RESOLVE_ACTION": "ተፈትኗል",
|
||||||
"REOPEN_ACTION": "Reopen",
|
"REOPEN_ACTION": "እንደገና ክፈት",
|
||||||
"OPEN_ACTION": "Open",
|
"OPEN_ACTION": "Open",
|
||||||
"MORE_ACTIONS": "ተጨማሪ እርምጃዎች",
|
"MORE_ACTIONS": "ተጨማሪ እርምጃዎች",
|
||||||
"OPEN": "More",
|
"OPEN": "ተጨማሪ",
|
||||||
"CLOSE": "Close",
|
"CLOSE": "ዝጋ",
|
||||||
"DETAILS": "details",
|
"DETAILS": "ዝርዝሮች",
|
||||||
"SNOOZED_UNTIL": "Snoozed until",
|
"SNOOZED_UNTIL": "Snoozed until",
|
||||||
"SNOOZED_UNTIL_TOMORROW": "Snoozed until tomorrow",
|
"SNOOZED_UNTIL_TOMORROW": "Snoozed until tomorrow",
|
||||||
"SNOOZED_UNTIL_NEXT_WEEK": "Snoozed until next week",
|
"SNOOZED_UNTIL_NEXT_WEEK": "Snoozed until next week",
|
||||||
@@ -188,21 +188,21 @@
|
|||||||
"MESSAGE_SIGN_TOOLTIP": "Message signature",
|
"MESSAGE_SIGN_TOOLTIP": "Message signature",
|
||||||
"ENABLE_SIGN_TOOLTIP": "Enable signature",
|
"ENABLE_SIGN_TOOLTIP": "Enable signature",
|
||||||
"DISABLE_SIGN_TOOLTIP": "Disable signature",
|
"DISABLE_SIGN_TOOLTIP": "Disable signature",
|
||||||
"MSG_INPUT": "Shift + enter for new line. Start with '/' to select a Canned Response.",
|
"MSG_INPUT": "አዲስ መስመር ለማስገባት Shift + enter ይጠቀሙ። '/' በመጀመር የተዘጋጀ ምላሽ ይምረጡ።",
|
||||||
"PRIVATE_MSG_INPUT": "Shift + enter for new line. This will be visible only to Agents",
|
"PRIVATE_MSG_INPUT": "አዲስ መስመር ለማስገባት Shift + enter ይጠቀሙ። ይህ ለወኪሎች ብቻ ይታያል",
|
||||||
"MESSAGING_RESTRICTED": "You cannot reply to this conversation",
|
"MESSAGING_RESTRICTED": "You cannot reply to this conversation",
|
||||||
"MESSAGING_RESTRICTED_WHATSAPP": "You can only reply using a template message due to 24-hour message window restriction",
|
"MESSAGING_RESTRICTED_WHATSAPP": "You can only reply using a template message due to 24-hour message window restriction",
|
||||||
"MESSAGING_RESTRICTED_API": "You can only reply using a template message due to message window restriction",
|
"MESSAGING_RESTRICTED_API": "You can only reply using a template message due to message window restriction",
|
||||||
"MESSAGE_SIGNATURE_NOT_CONFIGURED": "Message signature is not configured, please configure it in profile settings.",
|
"MESSAGE_SIGNATURE_NOT_CONFIGURED": "Message signature is not configured, please configure it in profile settings.",
|
||||||
"COPILOT_MSG_INPUT": "Give copilot additional prompts, or ask anything else... Press enter to send follow-up",
|
"COPILOT_MSG_INPUT": "ኮፒሎት ተጨማሪ እባብነቶች ስጡው, ወይም ሌላ ማንኛውንም ጥያቄ ያቀርቡ... ተከትሎ ለማስተላለፊያ ኤንተር ይጫኑ።",
|
||||||
"CLICK_HERE": "Click here to update",
|
"CLICK_HERE": "Click here to update",
|
||||||
"WHATSAPP_TEMPLATES": "Whatsapp Templates"
|
"WHATSAPP_TEMPLATES": "Whatsapp Templates"
|
||||||
},
|
},
|
||||||
"REPLYBOX": {
|
"REPLYBOX": {
|
||||||
"REPLY": "Reply",
|
"REPLY": "መልስ",
|
||||||
"PRIVATE_NOTE": "Private Note",
|
"PRIVATE_NOTE": "የግል ማስታወሻ",
|
||||||
"SEND": "Send",
|
"SEND": "ላክ",
|
||||||
"CREATE": "Add Note",
|
"CREATE": "ማስታወሻ አክል",
|
||||||
"INSERT_READ_MORE": "Read more",
|
"INSERT_READ_MORE": "Read more",
|
||||||
"DISMISS_REPLY": "Dismiss reply",
|
"DISMISS_REPLY": "Dismiss reply",
|
||||||
"REPLYING_TO": "Replying to:",
|
"REPLYING_TO": "Replying to:",
|
||||||
@@ -214,7 +214,7 @@
|
|||||||
"DRAG_DROP": "Drag and drop here to attach",
|
"DRAG_DROP": "Drag and drop here to attach",
|
||||||
"START_AUDIO_RECORDING": "Start audio recording",
|
"START_AUDIO_RECORDING": "Start audio recording",
|
||||||
"STOP_AUDIO_RECORDING": "Stop audio recording",
|
"STOP_AUDIO_RECORDING": "Stop audio recording",
|
||||||
"COPILOT_THINKING": "Copilot is thinking",
|
"COPILOT_THINKING": "ኮፒሎት እየሰማራ ነው",
|
||||||
"EMAIL_HEAD": {
|
"EMAIL_HEAD": {
|
||||||
"TO": "TO",
|
"TO": "TO",
|
||||||
"ADD_BCC": "Add bcc",
|
"ADD_BCC": "Add bcc",
|
||||||
@@ -245,10 +245,10 @@
|
|||||||
"EXPAND": "Expand preview"
|
"EXPAND": "Expand preview"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"VISIBLE_TO_AGENTS": "Private Note: Only visible to you and your team",
|
"VISIBLE_TO_AGENTS": "የግል ማስታወሻ፡ ለአንተና ቡድንህ ብቻ ይታያል",
|
||||||
"CHANGE_STATUS": "Conversation status changed",
|
"CHANGE_STATUS": "የውይይቱ ሁኔታ ተቀይሯል",
|
||||||
"CHANGE_STATUS_FAILED": "Conversation status change failed",
|
"CHANGE_STATUS_FAILED": "Conversation status change failed",
|
||||||
"CHANGE_AGENT": "Conversation Assignee changed",
|
"CHANGE_AGENT": "የውይይቱ ተመድብ ተቀይሯል",
|
||||||
"CHANGE_AGENT_FAILED": "Assignee change failed",
|
"CHANGE_AGENT_FAILED": "Assignee change failed",
|
||||||
"ASSIGN_LABEL_SUCCESFUL": "Label assigned successfully",
|
"ASSIGN_LABEL_SUCCESFUL": "Label assigned successfully",
|
||||||
"ASSIGN_LABEL_FAILED": "Label assignment failed",
|
"ASSIGN_LABEL_FAILED": "Label assignment failed",
|
||||||
@@ -300,20 +300,20 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"EMAIL_TRANSCRIPT": {
|
"EMAIL_TRANSCRIPT": {
|
||||||
"TITLE": "Send conversation transcript",
|
"TITLE": "የውይይት ጽሑፍ ላክ",
|
||||||
"DESC": "Send a copy of the conversation transcript to the specified email address",
|
"DESC": "የውይይቱን ጽሑፍ ቅጂ ወደ ተጠቃሚው ኢሜይል ላክ",
|
||||||
"SUBMIT": "Submit",
|
"SUBMIT": "አስገባ",
|
||||||
"CANCEL": "Cancel",
|
"CANCEL": "ይቅር",
|
||||||
"SEND_EMAIL_SUCCESS": "The chat transcript was sent successfully",
|
"SEND_EMAIL_SUCCESS": "የቻት አጭር መግለጫው በተሳካ ሁኔታ ተልኳል",
|
||||||
"SEND_EMAIL_ERROR": "There was an error, please try again",
|
"SEND_EMAIL_ERROR": "ስህተት ተፈጥሯል፣ እባክዎ ደግመው ይሞክሩ",
|
||||||
"SEND_EMAIL_PAYMENT_REQUIRED": "Email transcript is not available on your current plan. Please upgrade to use this feature.",
|
"SEND_EMAIL_PAYMENT_REQUIRED": "Email transcript is not available on your current plan. Please upgrade to use this feature.",
|
||||||
"FORM": {
|
"FORM": {
|
||||||
"SEND_TO_CONTACT": "Send the transcript to the customer",
|
"SEND_TO_CONTACT": "መግለጫውን ለደንበኛው ይላኩ",
|
||||||
"SEND_TO_AGENT": "Send the transcript to the assigned agent",
|
"SEND_TO_AGENT": "Send the transcript to the assigned agent",
|
||||||
"SEND_TO_OTHER_EMAIL_ADDRESS": "Send the transcript to another email address",
|
"SEND_TO_OTHER_EMAIL_ADDRESS": "መግለጫውን ወደ ሌላ ኢሜይል አድራሻ ይላኩ",
|
||||||
"EMAIL": {
|
"EMAIL": {
|
||||||
"PLACEHOLDER": "Enter an email address",
|
"PLACEHOLDER": "ኢሜይል አድራሻ ያስገቡ",
|
||||||
"ERROR": "Please enter a valid email address"
|
"ERROR": "ትክክለኛ ኢሜይል አድራሻ ያስገቡ"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -316,6 +316,18 @@
|
|||||||
"SUCCESS_MESSAGE": "ቋንቋው ከፖርታል በተሳካ ሁኔታ ተሰርዟል",
|
"SUCCESS_MESSAGE": "ቋንቋው ከፖርታል በተሳካ ሁኔታ ተሰርዟል",
|
||||||
"ERROR_MESSAGE": "ከፖርታሉ ቋንቋ ማስወገድ አልተቻለም። እባክዎ ደግመው ይሞክሩ።."
|
"ERROR_MESSAGE": "ከፖርታሉ ቋንቋ ማስወገድ አልተቻለም። እባክዎ ደግመው ይሞክሩ።."
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"DRAFT_LOCALE": {
|
||||||
|
"API": {
|
||||||
|
"SUCCESS_MESSAGE": "Locale moved to draft successfully",
|
||||||
|
"ERROR_MESSAGE": "Unable to move locale to draft. Try again."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"PUBLISH_LOCALE": {
|
||||||
|
"API": {
|
||||||
|
"SUCCESS_MESSAGE": "Locale published successfully",
|
||||||
|
"ERROR_MESSAGE": "Unable to publish locale. Try again."
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"TABLE": {
|
"TABLE": {
|
||||||
@@ -644,8 +656,11 @@
|
|||||||
"ARTICLES_COUNT": "{count} ጽሑፍ | {count} ጽሑፎች",
|
"ARTICLES_COUNT": "{count} ጽሑፍ | {count} ጽሑፎች",
|
||||||
"CATEGORIES_COUNT": "{count} ምድብ | {count} ምድቦች",
|
"CATEGORIES_COUNT": "{count} ምድብ | {count} ምድቦች",
|
||||||
"DEFAULT": "ነባሪ",
|
"DEFAULT": "ነባሪ",
|
||||||
|
"DRAFT": "እቅድ",
|
||||||
"DROPDOWN_MENU": {
|
"DROPDOWN_MENU": {
|
||||||
"MAKE_DEFAULT": "እንደ ነባሪ አድርግ",
|
"MAKE_DEFAULT": "እንደ ነባሪ አድርግ",
|
||||||
|
"MOVE_TO_DRAFT": "Move to draft",
|
||||||
|
"PUBLISH_LOCALE": "Publish locale",
|
||||||
"DELETE": "ሰርዝ"
|
"DELETE": "ሰርዝ"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -655,6 +670,13 @@
|
|||||||
"COMBOBOX": {
|
"COMBOBOX": {
|
||||||
"PLACEHOLDER": "ቋንቋ ይምረጡ..."
|
"PLACEHOLDER": "ቋንቋ ይምረጡ..."
|
||||||
},
|
},
|
||||||
|
"STATUS": {
|
||||||
|
"LABEL": "Status",
|
||||||
|
"OPTIONS": {
|
||||||
|
"LIVE": "ተለቀቀ",
|
||||||
|
"DRAFT": "እቅድ"
|
||||||
|
}
|
||||||
|
},
|
||||||
"API": {
|
"API": {
|
||||||
"SUCCESS_MESSAGE": "ቋንቋ በተሳካ ሁኔታ ተጨምሯል",
|
"SUCCESS_MESSAGE": "ቋንቋ በተሳካ ሁኔታ ተጨምሯል",
|
||||||
"ERROR_MESSAGE": "ቋንቋውን ማክሰኞ አልተቻለም። እባክዎ ደግመው ይሞክሩ።."
|
"ERROR_MESSAGE": "ቋንቋውን ማክሰኞ አልተቻለም። እባክዎ ደግመው ይሞክሩ።."
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
"WHATSAPP_REGISTRATION_INCOMPLETE": "የWhatsApp ንግድ ምዝገባዎ አልተጠናቀቀም። እባክዎ ከመገናኛ ባለሥልጣን ጋር በMeta Business Manager ውስጥ የሚታይ ስም ሁኔታዎን ያረጋግጡ።.",
|
"WHATSAPP_REGISTRATION_INCOMPLETE": "የWhatsApp ንግድ ምዝገባዎ አልተጠናቀቀም። እባክዎ ከመገናኛ ባለሥልጣን ጋር በMeta Business Manager ውስጥ የሚታይ ስም ሁኔታዎን ያረጋግጡ።.",
|
||||||
"COMPLETE_REGISTRATION": "ምዝገባ አሟልት",
|
"COMPLETE_REGISTRATION": "ምዝገባ አሟልት",
|
||||||
"LIST": {
|
"LIST": {
|
||||||
"404": "Այս հաշվի հետ կապված մուտքային արկղեր չկան։"
|
"404": "ወደዚህ መለያ የተያዙ ኢንቦክሶች የሉም።"
|
||||||
},
|
},
|
||||||
"CREATE_FLOW": {
|
"CREATE_FLOW": {
|
||||||
"CHANNEL": {
|
"CHANNEL": {
|
||||||
@@ -42,7 +42,7 @@
|
|||||||
"PLACEHOLDER": "የድር ጣቢያ ስምዎን ያስገቡ (ለምሳሌ፡ Acme Inc)"
|
"PLACEHOLDER": "የድር ጣቢያ ስምዎን ያስገቡ (ለምሳሌ፡ Acme Inc)"
|
||||||
},
|
},
|
||||||
"FB": {
|
"FB": {
|
||||||
"HELP": "Հիշեցում․ Մուտք գործելով մենք միայն հասանելիություն ենք ստանում Ձեր էջի հաղորդագրություններին։ Ձեր անձնական հաղորդագրություններին Chatwoot-ը երբեք չի կարող հասանելիություն ունենալ։",
|
"HELP": "ማስታወሻ፡ በመግባት ብቻ የገጹ መልእክቶችን ብቻ እንደምንያዝ ነው። የግል መልእክቶችዎን በChatwoot ማድረስ አይቻልም።",
|
||||||
"CHOOSE_PAGE": "ገጽ ይምረጡ",
|
"CHOOSE_PAGE": "ገጽ ይምረጡ",
|
||||||
"CHOOSE_PLACEHOLDER": "ከዝርዝር ገጽ ይምረጡ",
|
"CHOOSE_PLACEHOLDER": "ከዝርዝር ገጽ ይምረጡ",
|
||||||
"INBOX_NAME": "የኢንቦክስ ስም",
|
"INBOX_NAME": "የኢንቦክስ ስም",
|
||||||
@@ -76,7 +76,7 @@
|
|||||||
},
|
},
|
||||||
"WEBSITE_CHANNEL": {
|
"WEBSITE_CHANNEL": {
|
||||||
"TITLE": "የድር ጣቢያ ቻናል",
|
"TITLE": "የድር ጣቢያ ቻናል",
|
||||||
"DESC": "Ստեղծեք ալիք Ձեր կայքի համար և սկսեք աջակցել Ձեր հաճախորդներին մեր կայքի վիջեթի միջոցով։",
|
"DESC": "ለድህረ ገጹ ቻናል ይፍጠሩ እና በድህረ ገጻችን ዊጅት ደንበኞቻችሁን ይደግፉ።",
|
||||||
"LOADING_MESSAGE": "የድር ጣቢያ ድጋፍ ቻናል እየተፈጠረ ነው",
|
"LOADING_MESSAGE": "የድር ጣቢያ ድጋፍ ቻናል እየተፈጠረ ነው",
|
||||||
"CHANNEL_AVATAR": {
|
"CHANNEL_AVATAR": {
|
||||||
"LABEL": "የቻናል ፎቶ"
|
"LABEL": "የቻናል ፎቶ"
|
||||||
@@ -96,11 +96,11 @@
|
|||||||
},
|
},
|
||||||
"CHANNEL_WELCOME_TAGLINE": {
|
"CHANNEL_WELCOME_TAGLINE": {
|
||||||
"LABEL": "የእንኳን ደህና መጡ መልዕክት",
|
"LABEL": "የእንኳን ደህና መጡ መልዕክት",
|
||||||
"PLACEHOLDER": "Մենք հեշտացնում ենք կապվել մեզ հետ։ Հարցրեք ցանկացած բան կամ կիսվեք Ձեր կարծիքով։"
|
"PLACEHOLDER": "ከእኛ ጋር ቀላል መገናኘት እንደምንሠራ ነው። ማንኛውንም ጥያቄ ያቀርቡ ወይም አስተያየትዎን ያጋሩ።"
|
||||||
},
|
},
|
||||||
"CHANNEL_GREETING_MESSAGE": {
|
"CHANNEL_GREETING_MESSAGE": {
|
||||||
"LABEL": "የቻናል ደስታ መልእክት",
|
"LABEL": "የቻናል ደስታ መልእክት",
|
||||||
"PLACEHOLDER": "Acme Inc սովորաբար պատասխանում է մի քանի ժամվա ընթացքում։"
|
"PLACEHOLDER": "Acme Inc በተለምዶ በጥቂት ሰዓታት ውስጥ ይመልሳል።"
|
||||||
},
|
},
|
||||||
"CHANNEL_GREETING_TOGGLE": {
|
"CHANNEL_GREETING_TOGGLE": {
|
||||||
"LABEL": "የቻናል ደስታ አንቀሳቅስ",
|
"LABEL": "የቻናል ደስታ አንቀሳቅስ",
|
||||||
@@ -126,7 +126,7 @@
|
|||||||
},
|
},
|
||||||
"TWILIO": {
|
"TWILIO": {
|
||||||
"TITLE": "Twilio SMS/WhatsApp ቻናል",
|
"TITLE": "Twilio SMS/WhatsApp ቻናል",
|
||||||
"DESC": "Միացրեք Twilio-ն և սկսեք աջակցել Ձեր հաճախորդներին SMS կամ WhatsApp միջոցով։",
|
"DESC": "Twilio ያገናኙ እና በSMS ወይም WhatsApp ደንበኞቻችሁን ይደግፉ።",
|
||||||
"ACCOUNT_SID": {
|
"ACCOUNT_SID": {
|
||||||
"LABEL": "አካውንት SID",
|
"LABEL": "አካውንት SID",
|
||||||
"PLACEHOLDER": "እባክዎ የTwilio መለያ መለያዎን ያስገቡ",
|
"PLACEHOLDER": "እባክዎ የTwilio መለያ መለያዎን ያስገቡ",
|
||||||
@@ -165,12 +165,12 @@
|
|||||||
},
|
},
|
||||||
"PHONE_NUMBER": {
|
"PHONE_NUMBER": {
|
||||||
"LABEL": "ስልክ ቁጥር",
|
"LABEL": "ስልክ ቁጥር",
|
||||||
"PLACEHOLDER": "Խնդրում ենք մուտքագրել այն հեռախոսահամարը, որտեղից կուղարկվի հաղորդագրությունը։",
|
"PLACEHOLDER": "ከዚህ መልእክት የሚልከው የስልክ ቁጥር እባክዎ ያስገቡ።",
|
||||||
"ERROR": "እባክዎ በ`+` ምልክት የሚጀምር እና ቦታ ያልያዘ ትክክለኛ የስልክ ቁጥር ያቀርቡ።."
|
"ERROR": "እባክዎ በ`+` ምልክት የሚጀምር እና ቦታ ያልያዘ ትክክለኛ የስልክ ቁጥር ያቀርቡ።."
|
||||||
},
|
},
|
||||||
"API_CALLBACK": {
|
"API_CALLBACK": {
|
||||||
"TITLE": "ካልባክ URL",
|
"TITLE": "ካልባክ URL",
|
||||||
"SUBTITLE": "Twilio-ում պետք է կարգավորեք հաղորդագրության պատասխան URL-ը՝ օգտագործելով այստեղ նշված հասցեն։"
|
"SUBTITLE": "በTwilio ውስጥ የመልእክት እንደገና መግባት አድራሻን ከዚህ በተጠቀሰው አድራሻ ጋር መቀነባበር አለብዎት።"
|
||||||
},
|
},
|
||||||
"SUBMIT_BUTTON": "የTwilio ቻናል ይፍጠሩ",
|
"SUBMIT_BUTTON": "የTwilio ቻናል ይፍጠሩ",
|
||||||
"API": {
|
"API": {
|
||||||
@@ -179,7 +179,7 @@
|
|||||||
},
|
},
|
||||||
"SMS": {
|
"SMS": {
|
||||||
"TITLE": "SMS ቻናል",
|
"TITLE": "SMS ቻናል",
|
||||||
"DESC": "Սկսեք աջակցել Ձեր հաճախորդներին SMS-ի միջոցով։",
|
"DESC": "በSMS ደንበኞቻችሁን ይደግፉ።",
|
||||||
"PROVIDERS": {
|
"PROVIDERS": {
|
||||||
"LABEL": "API አቅራቢ",
|
"LABEL": "API አቅራቢ",
|
||||||
"TWILIO": "Twilio",
|
"TWILIO": "Twilio",
|
||||||
@@ -231,7 +231,7 @@
|
|||||||
},
|
},
|
||||||
"WHATSAPP": {
|
"WHATSAPP": {
|
||||||
"TITLE": "WhatsApp ቻናል",
|
"TITLE": "WhatsApp ቻናል",
|
||||||
"DESC": "Սկսեք աջակցել Ձեր հաճախորդներին WhatsApp-ի միջոցով։",
|
"DESC": "በWhatsApp ደንበኞቻችሁን ይደግፉ።",
|
||||||
"PROVIDERS": {
|
"PROVIDERS": {
|
||||||
"LABEL": "API አቅራቢ",
|
"LABEL": "API አቅራቢ",
|
||||||
"WHATSAPP_EMBEDDED": "WhatsApp ቢዝነስ",
|
"WHATSAPP_EMBEDDED": "WhatsApp ቢዝነስ",
|
||||||
@@ -252,7 +252,7 @@
|
|||||||
},
|
},
|
||||||
"PHONE_NUMBER": {
|
"PHONE_NUMBER": {
|
||||||
"LABEL": "የስልክ ቁጥር",
|
"LABEL": "የስልክ ቁጥር",
|
||||||
"PLACEHOLDER": "Խնդրում ենք մուտքագրել այն հեռախոսահամարը, որտեղից կուղարկվի հաղորդագրությունը։",
|
"PLACEHOLDER": "ከዚህ መልእክት የሚልከው የስልክ ቁጥር እባክዎ ያስገቡ።",
|
||||||
"ERROR": "እባክዎ በ`+` ምልክት የሚጀምር እና ቦታ ያልያዘ ትክክለኛ የስልክ ቁጥር ያቀርቡ።."
|
"ERROR": "እባክዎ በ`+` ምልክት የሚጀምር እና ቦታ ያልያዘ ትክክለኛ የስልክ ቁጥር ያቀርቡ።."
|
||||||
},
|
},
|
||||||
"PHONE_NUMBER_ID": {
|
"PHONE_NUMBER_ID": {
|
||||||
@@ -272,9 +272,9 @@
|
|||||||
},
|
},
|
||||||
"API_KEY": {
|
"API_KEY": {
|
||||||
"LABEL": "API ቁልፍ",
|
"LABEL": "API ቁልፍ",
|
||||||
"SUBTITLE": "Կարգավորեք WhatsApp API բանալին։",
|
"SUBTITLE": "የWhatsApp API ቁልፍን ያቀናብሩ።",
|
||||||
"PLACEHOLDER": "API ቁልፍ",
|
"PLACEHOLDER": "API ቁልፍ",
|
||||||
"ERROR": "Խնդրում ենք մուտքագրել վավեր արժեք։"
|
"ERROR": "እባክዎ ትክክለኛ እሴት ያስገቡ።"
|
||||||
},
|
},
|
||||||
"API_CALLBACK": {
|
"API_CALLBACK": {
|
||||||
"TITLE": "የተመለሰ አድራሻ URL",
|
"TITLE": "የተመለሰ አድራሻ URL",
|
||||||
@@ -358,7 +358,7 @@
|
|||||||
},
|
},
|
||||||
"API_CHANNEL": {
|
"API_CHANNEL": {
|
||||||
"TITLE": "የAPI ቻናል",
|
"TITLE": "የAPI ቻናል",
|
||||||
"DESC": "Միացրեք API ալիքը և սկսեք աջակցել Ձեր հաճախորդներին։",
|
"DESC": "ከAPI ቻናል ጋር ያገናኙ እና ደንበኞቻችሁን ይደግፉ።",
|
||||||
"CHANNEL_NAME": {
|
"CHANNEL_NAME": {
|
||||||
"LABEL": "የቻናል ስም",
|
"LABEL": "የቻናል ስም",
|
||||||
"PLACEHOLDER": "እባክዎ የቻናል ስም ያስገቡ",
|
"PLACEHOLDER": "እባክዎ የቻናል ስም ያስገቡ",
|
||||||
@@ -371,7 +371,7 @@
|
|||||||
},
|
},
|
||||||
"SUBMIT_BUTTON": "API ቻናል ፍጠር",
|
"SUBMIT_BUTTON": "API ቻናል ፍጠር",
|
||||||
"API": {
|
"API": {
|
||||||
"ERROR_MESSAGE": "Չհաջողվեց պահպանել API ալիքը"
|
"ERROR_MESSAGE": "API ቻናሉን ማስቀመጥ አልተቻለንም"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"EMAIL_CHANNEL": {
|
"EMAIL_CHANNEL": {
|
||||||
@@ -399,7 +399,7 @@
|
|||||||
},
|
},
|
||||||
"LINE_CHANNEL": {
|
"LINE_CHANNEL": {
|
||||||
"TITLE": "LINE ቻናል",
|
"TITLE": "LINE ቻናል",
|
||||||
"DESC": "Միացրեք LINE ալիքը և սկսեք աջակցել Ձեր հաճախորդներին։",
|
"DESC": "ከLINE ቻናል ጋር ያገናኙ እና ደንበኞቻችሁን ይደግፉ።",
|
||||||
"CHANNEL_NAME": {
|
"CHANNEL_NAME": {
|
||||||
"LABEL": "የቻናል ስም",
|
"LABEL": "የቻናል ስም",
|
||||||
"PLACEHOLDER": "እባክዎ የቻናል ስም ያስገቡ",
|
"PLACEHOLDER": "እባክዎ የቻናል ስም ያስገቡ",
|
||||||
@@ -423,15 +423,15 @@
|
|||||||
},
|
},
|
||||||
"API_CALLBACK": {
|
"API_CALLBACK": {
|
||||||
"TITLE": "የእንደገና ጥሪ አድራሻ",
|
"TITLE": "የእንደገና ጥሪ አድራሻ",
|
||||||
"SUBTITLE": "LINE հավելվածում պետք է կարգավորեք webhook URL-ը՝ օգտագործելով այստեղ նշված հասցեն։"
|
"SUBTITLE": "በLINE መተግበሪያ ውስጥ የwebhook አድራሻን ከዚህ በተጠቀሰው አድራሻ ጋር መቀነባበር አለብዎት።"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"TELEGRAM_CHANNEL": {
|
"TELEGRAM_CHANNEL": {
|
||||||
"TITLE": "Telegram ቻናል",
|
"TITLE": "Telegram ቻናል",
|
||||||
"DESC": "Միացրեք Telegram ալիքը և սկսեք աջակցել Ձեր հաճախորդներին։",
|
"DESC": "ከTelegram ቻናል ጋር ያገናኙ እና ደንበኞቻችሁን ይደግፉ።",
|
||||||
"BOT_TOKEN": {
|
"BOT_TOKEN": {
|
||||||
"LABEL": "የቦት ቶክን",
|
"LABEL": "የቦት ቶክን",
|
||||||
"SUBTITLE": "Կարգավորեք Telegram BotFather-ից ստացած բոտի տոկենը։",
|
"SUBTITLE": "ከTelegram BotFather ያገኙትን የቦት ቶክን ያቀናብሩ።",
|
||||||
"PLACEHOLDER": "የቦት ቶክን"
|
"PLACEHOLDER": "የቦት ቶክን"
|
||||||
},
|
},
|
||||||
"SUBMIT_BUTTON": "Telegram ቻናል ፍጠር",
|
"SUBMIT_BUTTON": "Telegram ቻናል ፍጠር",
|
||||||
@@ -493,13 +493,13 @@
|
|||||||
},
|
},
|
||||||
"AGENTS": {
|
"AGENTS": {
|
||||||
"TITLE": "Agent-ዎች",
|
"TITLE": "Agent-ዎች",
|
||||||
"DESC": "Այստեղ կարող եք ավելացնել գործակալներ՝ նոր ստեղծված մուտքային արկղը կառավարելու համար։ Միայն այս ընտրված գործակալները կունենան մուտք դեպի Ձեր մուտքային արկղը։ Գործակալները, որոնք չեն պատկանում այս մուտքային արկղին, չեն կարողանա տեսնել կամ պատասխանել հաղորդագրություններին մուտք գործելիս։ <br> <b>Հիշեցում․</b> Որպես ադմինիստրատոր, եթե Ձեզ անհրաժեշտ է մուտք բոլոր մուտքային արկղերին, պետք է ինքներդ Ձեզ ավելացնեք որպես գործակալ բոլոր ստեղծած մուտքային արկղերում։",
|
"DESC": "እዚህ አዲስ የተፈጠረውን ኢንቦክስ ለመቆጣጠር ወኪሎችን ማከል ይችላሉ። እነዚህ የተመረጡ ወኪሎች ብቻ ወደ ኢንቦክስዎ መዳረሻ አላቸው። ከዚህ ኢንቦክስ አካል ያልሆኑ ወኪሎች ሲግቡ መልእክቶችን ማየት ወይም መልስ ማድረግ አይችሉም። <br> <b>ማስታወሻ፡</b> እንደ አስተዳደር ባለስልጣን ሁሉንም ኢንቦክሶች ለመዳረሻ ከፈለጉ ራስዎን እንደ ወኪል ወደ ሁሉም የሚፈጥሩት ኢንቦክሶች መጨመር አለብዎት።",
|
||||||
"VALIDATION_ERROR": "ከአዲሱ ኢንቦክስዎ ቢያንስ አንድ ወኪል ያክሉ",
|
"VALIDATION_ERROR": "ከአዲሱ ኢንቦክስዎ ቢያንስ አንድ ወኪል ያክሉ",
|
||||||
"PICK_AGENTS": "ለኢንቦክሱ ወኪሎችን ይምረጡ"
|
"PICK_AGENTS": "ለኢንቦክሱ ወኪሎችን ይምረጡ"
|
||||||
},
|
},
|
||||||
"DETAILS": {
|
"DETAILS": {
|
||||||
"TITLE": "የኢንቦክስ ዝርዝሮች",
|
"TITLE": "የኢንቦክስ ዝርዝሮች",
|
||||||
"DESC": "Ընտրեք ներքևի բացվող ցանկից այն Facebook էջը, որը ցանկանում եք կապել Chatwoot-ի հետ։ Կարող եք նաև մուտքային արկղին տալ հատուկ անուն՝ ավելի լավ ճանաչման համար։"
|
"DESC": "ከታች ያለው ከዝርዝር ማስተካከያ በተጠቃሚው ፌስቡክ ገጽ ወደ Chatwoot ለመገናኘት ይምረጡ። ለምርጥ መለያየት የእርስዎን ኢንቦክስ በተለየ ስም ማቅረብ ይችላሉ።"
|
||||||
},
|
},
|
||||||
"FINISH": {
|
"FINISH": {
|
||||||
"TITLE": "ተሳክቷል!",
|
"TITLE": "ተሳክቷል!",
|
||||||
@@ -543,7 +543,7 @@
|
|||||||
"MESSAGE": "ከአዲሱ ቻናልዎ ጋር ከደንበኞችዎ ጋር እንዲገናኙ አሁን ትችላላችሁ። ደስታ ያለው ድጋፍ",
|
"MESSAGE": "ከአዲሱ ቻናልዎ ጋር ከደንበኞችዎ ጋር እንዲገናኙ አሁን ትችላላችሁ። ደስታ ያለው ድጋፍ",
|
||||||
"BUTTON_TEXT": "ወደ እዚያ ይውሰዱኝ",
|
"BUTTON_TEXT": "ወደ እዚያ ይውሰዱኝ",
|
||||||
"MORE_SETTINGS": "ተጨማሪ ቅንብሮች",
|
"MORE_SETTINGS": "ተጨማሪ ቅንብሮች",
|
||||||
"WEBSITE_SUCCESS": "Դուք հաջողությամբ ստեղծել եք կայքի ալիք։ Նշված կոդը պատճենեք և տեղադրեք Ձեր կայքում։ Հաջորդ անգամ, երբ հաճախորդը օգտագործի ուղիղ զրույցը, հաղորդակցությունը ավտոմատ կհայտնվի Ձեր մուտքային արկղում։",
|
"WEBSITE_SUCCESS": "የድር ጣቢያ ቻናል መፍጠር በተሳካ ሁኔታ ተጠናቋል። ከታች የተሳየውን ኮድ ቅዳት እና በድር ጣቢያዎ ያስገቡ። ቀጣዩ ጊዜ ደንበኛ በላይቭ ቻት ሲጠቀም ውይይቱ በራሱ በኢንቦክስዎ ይታያል።",
|
||||||
"WHATSAPP_QR_INSTRUCTION": "ለፈጣን ሙከራ የ WhatsApp ጥቅል ላይ ከላይ ያለውን QR ኮድ ይስካን ያድርጉ",
|
"WHATSAPP_QR_INSTRUCTION": "ለፈጣን ሙከራ የ WhatsApp ጥቅል ላይ ከላይ ያለውን QR ኮድ ይስካን ያድርጉ",
|
||||||
"MESSENGER_QR_INSTRUCTION": "ለፈጣን ሙከራ የ Facebook Messenger ጥቅል ላይ ከላይ ያለውን QR ኮድ ይስካን ያድርጉ",
|
"MESSENGER_QR_INSTRUCTION": "ለፈጣን ሙከራ የ Facebook Messenger ጥቅል ላይ ከላይ ያለውን QR ኮድ ይስካን ያድርጉ",
|
||||||
"TELEGRAM_QR_INSTRUCTION": "ለፈጣን ሙከራ የ Telegram ጥቅል ላይ ከላይ ያለውን QR ኮድ ይስካን ያድርጉ"
|
"TELEGRAM_QR_INSTRUCTION": "ለፈጣን ሙከራ የ Telegram ጥቅል ላይ ከላይ ያለውን QR ኮድ ይስካን ያድርጉ"
|
||||||
@@ -613,9 +613,9 @@
|
|||||||
},
|
},
|
||||||
"API": {
|
"API": {
|
||||||
"SUCCESS_MESSAGE": "ኢንቦክስ በተሳካ ሁኔታ ተሰርዟል",
|
"SUCCESS_MESSAGE": "ኢንቦክስ በተሳካ ሁኔታ ተሰርዟል",
|
||||||
"ERROR_MESSAGE": "Չհաջողվեց ջնջել մուտքային արկղը։ Խնդրում ենք փորձել ավելի ուշ։",
|
"ERROR_MESSAGE": "ኢንቦክስ ማጥፋት አልተቻለም። እባክዎ በኋላ ደግመው ይሞክሩ።",
|
||||||
"AVATAR_SUCCESS_MESSAGE": "የኢንቦክስ አቫታር በተሳካ ሁኔታ ተሰርዟል",
|
"AVATAR_SUCCESS_MESSAGE": "የኢንቦክስ አቫታር በተሳካ ሁኔታ ተሰርዟል",
|
||||||
"AVATAR_ERROR_MESSAGE": "Չհաջողվեց ջնջել մուտքային արկղի պատկերակը։ Խնդրում ենք փորձել ավելի ուշ։"
|
"AVATAR_ERROR_MESSAGE": "የኢንቦክስ አቫታር ማጥፋት አልተቻለም። እባክዎ በኋላ ደግመው ይሞክሩ።"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"TABS": {
|
"TABS": {
|
||||||
@@ -736,24 +736,24 @@
|
|||||||
"SENDER_NAME_SECTION": "በኢሜይል ውስጥ የAgent ስም አርግ",
|
"SENDER_NAME_SECTION": "በኢሜይል ውስጥ የAgent ስም አርግ",
|
||||||
"SENDER_NAME_SECTION_TEXT": "በኢሜይል ውስጥ የAgent ስም እንዲታይ/እንዳይታይ አርግ፣ ካልተከናወነ የንግድ ስም ይታያል",
|
"SENDER_NAME_SECTION_TEXT": "በኢሜይል ውስጥ የAgent ስም እንዲታይ/እንዳይታይ አርግ፣ ካልተከናወነ የንግድ ስም ይታያል",
|
||||||
"ENABLE_CONTINUITY_VIA_EMAIL": "በኢሜል የውይይት ቀጥታነት አንቀሳቅስ",
|
"ENABLE_CONTINUITY_VIA_EMAIL": "በኢሜል የውይይት ቀጥታነት አንቀሳቅስ",
|
||||||
"ENABLE_CONTINUITY_VIA_EMAIL_SUB_TEXT": "Եթե կոնտակտի էլ.փոստի հասցեն հասանելի է, զրույցները կշարունակվեն էլ.փոստով։",
|
"ENABLE_CONTINUITY_VIA_EMAIL_SUB_TEXT": "ከኮንታክት ኢሜይል አድራሻ ካለ ውይይቶች በኢሜይል ይቀጥላሉ።",
|
||||||
"LOCK_TO_SINGLE_CONVERSATION": "የውይይት መላኪያ",
|
"LOCK_TO_SINGLE_CONVERSATION": "የውይይት መላኪያ",
|
||||||
"LOCK_TO_SINGLE_CONVERSATION_SUB_TEXT": "ለአሁን ያሉ እውቂያዎች ውይይት ፍጠራ ያስተካክሉ",
|
"LOCK_TO_SINGLE_CONVERSATION_SUB_TEXT": "ለአሁን ያሉ እውቂያዎች ውይይት ፍጠራ ያስተካክሉ",
|
||||||
"INBOX_UPDATE_TITLE": "የኢንቦክስ ቅንብሮች",
|
"INBOX_UPDATE_TITLE": "የኢንቦክስ ቅንብሮች",
|
||||||
"INBOX_UPDATE_SUB_TEXT": "የኢንቦክስዎን ቅንብሮች ያዘምኑ",
|
"INBOX_UPDATE_SUB_TEXT": "የኢንቦክስዎን ቅንብሮች ያዘምኑ",
|
||||||
"AUTO_ASSIGNMENT_SUB_TEXT": "Միացրեք կամ անջատեք նոր հաղորդակցությունները ավտոմատ նշանակումը այս մուտքային արկղին ավելացված գործակալներին։",
|
"AUTO_ASSIGNMENT_SUB_TEXT": "አዲስ ውይይቶችን ወደ ይህ ኢንቦክስ የተጨመሩ ወኪሎች በራስሰር ማድረግን አቅርቦ ወይም አቋርጦ ያድርጉ።",
|
||||||
"HMAC_VERIFICATION": "የተጠቃሚ መለያ ማረጋገጫ",
|
"HMAC_VERIFICATION": "የተጠቃሚ መለያ ማረጋገጫ",
|
||||||
"HMAC_DESCRIPTION": "በዚህ ቁልፍ የተለየ ቶክን ማመንጨት ይችላሉ ይህም የተጠቃሚዎችዎን መለያ ለማረጋገጥ ይጠቅማል።.",
|
"HMAC_DESCRIPTION": "በዚህ ቁልፍ የተለየ ቶክን ማመንጨት ይችላሉ ይህም የተጠቃሚዎችዎን መለያ ለማረጋገጥ ይጠቅማል።.",
|
||||||
"HMAC_LINK_TO_DOCS": "እንደ ተጨማሪ መረጃ እዚህ ማንበብ ይችላሉ።.",
|
"HMAC_LINK_TO_DOCS": "እንደ ተጨማሪ መረጃ እዚህ ማንበብ ይችላሉ።.",
|
||||||
"HMAC_MANDATORY_VERIFICATION": "የተጠቃሚ መለያ ማረጋገጫን አጽድቅ",
|
"HMAC_MANDATORY_VERIFICATION": "የተጠቃሚ መለያ ማረጋገጫን አጽድቅ",
|
||||||
"HMAC_MANDATORY_DESCRIPTION": "ከተከፈተ ግምገማዎች ካልተረጋገጡ ጥያቄዎች ይተንቀሳቀሳሉ።.",
|
"HMAC_MANDATORY_DESCRIPTION": "ከተከፈተ ግምገማዎች ካልተረጋገጡ ጥያቄዎች ይተንቀሳቀሳሉ።.",
|
||||||
"INBOX_IDENTIFIER": "የኢንቦክስ መለያ",
|
"INBOX_IDENTIFIER": "የኢንቦክስ መለያ",
|
||||||
"INBOX_IDENTIFIER_SUB_TEXT": "Օգտագործեք այստեղ նշված `inbox_identifier` տոկենը՝ Ձեր API հաճախորդների վավերացման համար։",
|
"INBOX_IDENTIFIER_SUB_TEXT": "የ API ደንበኞችዎን ማረጋገጫ ለማድረግ እዚህ የተሳየውን `inbox_identifier` ቶክን ይጠቀሙ።",
|
||||||
"FORWARD_EMAIL_TITLE": "ወደ ኢሜይል አስቀምጥ",
|
"FORWARD_EMAIL_TITLE": "ወደ ኢሜይል አስቀምጥ",
|
||||||
"FORWARD_EMAIL_SUB_TEXT": "Սկսեք Ձեր էլ.փոստերը ուղարկել հետևյալ էլ.փոստի հասցեին։",
|
"FORWARD_EMAIL_SUB_TEXT": "ኢሜይሎችዎን ወደ ቀጣዩ ኢሜይል አድራሻ መላክ ይጀምሩ።",
|
||||||
"FORWARD_EMAIL_NOT_CONFIGURED": "ኢሜይሎችን ወደ ኢንቦክስዎ መቀላቀል በዚህ መገናኛ አሁን አልተፈቀደም። ይህን ባህሪ ለመጠቀም ከአስተዳደሩ መፍቀድ አለቦት። እባክዎ ለመቀጠል ከእነርሱ ጋር ያገናኙ።.",
|
"FORWARD_EMAIL_NOT_CONFIGURED": "ኢሜይሎችን ወደ ኢንቦክስዎ መቀላቀል በዚህ መገናኛ አሁን አልተፈቀደም። ይህን ባህሪ ለመጠቀም ከአስተዳደሩ መፍቀድ አለቦት። እባክዎ ለመቀጠል ከእነርሱ ጋር ያገናኙ።.",
|
||||||
"ALLOW_MESSAGES_AFTER_RESOLVED": "ከውይይት መፍታት በኋላ መልእክቶችን እንዲፈቀድ",
|
"ALLOW_MESSAGES_AFTER_RESOLVED": "ከውይይት መፍታት በኋላ መልእክቶችን እንዲፈቀድ",
|
||||||
"ALLOW_MESSAGES_AFTER_RESOLVED_SUB_TEXT": "Թույլ տվեք վերջնական օգտատերերին ուղարկել հաղորդագրություններ նույնիսկ զրույցի լուծումից հետո։",
|
"ALLOW_MESSAGES_AFTER_RESOLVED_SUB_TEXT": "ውይይቱ ከተፈታ በኋላም እንደገና መልእክቶችን ለመላክ ለመጠቀሚያ ተጠቃሚዎች ፈቃድ ይስጡ።",
|
||||||
"WHATSAPP_SECTION_SUBHEADER": "ይህ የAPI ቁልፍ ለWhatsApp API ጋር ለመያዝ ይጠቅማል።.",
|
"WHATSAPP_SECTION_SUBHEADER": "ይህ የAPI ቁልፍ ለWhatsApp API ጋር ለመያዝ ይጠቅማል።.",
|
||||||
"WHATSAPP_SECTION_UPDATE_SUBHEADER": "ለWhatsApp API ጋር ለመያዝ አዲሱን የAPI ቁልፍ ያስገቡ።.",
|
"WHATSAPP_SECTION_UPDATE_SUBHEADER": "ለWhatsApp API ጋር ለመያዝ አዲሱን የAPI ቁልፍ ያስገቡ።.",
|
||||||
"WHATSAPP_SECTION_TITLE": "API ቁልፍ",
|
"WHATSAPP_SECTION_TITLE": "API ቁልፍ",
|
||||||
@@ -850,7 +850,7 @@
|
|||||||
"MESSAGE_ERROR": "ስህተት አጋጥሟል፣ እባክዎ እንደገና ይሞክሩ"
|
"MESSAGE_ERROR": "ስህተት አጋጥሟል፣ እባክዎ እንደገና ይሞክሩ"
|
||||||
},
|
},
|
||||||
"PRE_CHAT_FORM": {
|
"PRE_CHAT_FORM": {
|
||||||
"DESCRIPTION": "Նախնական զրույցի ձևերը թույլ են տալիս հավաքել օգտատիրոջ տեղեկությունները նախքան զրույցի սկսելը։",
|
"DESCRIPTION": "የቀድሞ ቻት ቅጥያዎች ተጠቃሚ መረጃ ከመደምደሚያ በፊት ለመሰብሰብ ይፈቅዳሉ።",
|
||||||
"SET_FIELDS": "የቀደም የውይይት ቅጽ መስኮች",
|
"SET_FIELDS": "የቀደም የውይይት ቅጽ መስኮች",
|
||||||
"SET_FIELDS_HEADER": {
|
"SET_FIELDS_HEADER": {
|
||||||
"FIELDS": "መስኮች",
|
"FIELDS": "መስኮች",
|
||||||
@@ -960,7 +960,7 @@
|
|||||||
"HOURS": "ሰዓታት",
|
"HOURS": "ሰዓታት",
|
||||||
"ENABLE": "ለዚህ ቀን እንደሚገኙ አንቀሳቅስ",
|
"ENABLE": "ለዚህ ቀን እንደሚገኙ አንቀሳቅስ",
|
||||||
"UNAVAILABLE": "አይገኝም",
|
"UNAVAILABLE": "አይገኝም",
|
||||||
"VALIDATION_ERROR": "Սկիզբի ժամանակը պետք է լինի փակման ժամանակից առաջ։",
|
"VALIDATION_ERROR": "የመጀመሪያ ሰዓት ከመዝጊያ ሰዓት በፊት መሆን አለበት።",
|
||||||
"CHOOSE": "ይምረጡ"
|
"CHOOSE": "ይምረጡ"
|
||||||
},
|
},
|
||||||
"ALL_DAY": "ቀኑን ሙሉ"
|
"ALL_DAY": "ቀኑን ሙሉ"
|
||||||
|
|||||||
@@ -738,6 +738,17 @@
|
|||||||
"DOCUMENTS": {
|
"DOCUMENTS": {
|
||||||
"HEADER": "ሰነዶች",
|
"HEADER": "ሰነዶች",
|
||||||
"ADD_NEW": "አዲስ ሰነድ ፍጠር",
|
"ADD_NEW": "አዲስ ሰነድ ፍጠር",
|
||||||
|
"SELECTED": "{count} ተመረጡ",
|
||||||
|
"SELECT_ALL": "ሁሉንም ይምረጡ ({count})",
|
||||||
|
"UNSELECT_ALL": "ሁሉንም አልምረጥም ({count})",
|
||||||
|
"BULK_DELETE_BUTTON": "Delete",
|
||||||
|
"BULK_DELETE": {
|
||||||
|
"TITLE": "Delete documents?",
|
||||||
|
"DESCRIPTION": "Are you sure you want to delete the selected documents? This action cannot be undone.",
|
||||||
|
"CONFIRM": "አዎን፣ ሁሉንም አጥፋ",
|
||||||
|
"SUCCESS_MESSAGE": "Documents deleted successfully",
|
||||||
|
"ERROR_MESSAGE": "There was an error deleting the documents, please try again."
|
||||||
|
},
|
||||||
"RELATED_RESPONSES": {
|
"RELATED_RESPONSES": {
|
||||||
"TITLE": "ተዛማጅ የFAQ ጥያቄዎች",
|
"TITLE": "ተዛማጅ የFAQ ጥያቄዎች",
|
||||||
"DESCRIPTION": "እነዚህ የFAQ ጥያቄዎች ቀጥተኛ ከሰነዱ ተፈጥረዋል።"
|
"DESCRIPTION": "እነዚህ የFAQ ጥያቄዎች ቀጥተኛ ከሰነዱ ተፈጥረዋል።"
|
||||||
@@ -795,6 +806,7 @@
|
|||||||
"CUSTOM_TOOLS": {
|
"CUSTOM_TOOLS": {
|
||||||
"HEADER": "መሣሪያዎች",
|
"HEADER": "መሣሪያዎች",
|
||||||
"ADD_NEW": "አዲስ መሣሪያ ይፍጠሩ",
|
"ADD_NEW": "አዲስ መሣሪያ ይፍጠሩ",
|
||||||
|
"SOFT_LIMIT_WARNING": "Having more than 10 tools may reduce the assistant's reliability in selecting the right tool. Consider removing unused tools for better results.",
|
||||||
"EMPTY_STATE": {
|
"EMPTY_STATE": {
|
||||||
"TITLE": "ምንም የተለየ መሣሪያዎች አልተገኙም",
|
"TITLE": "ምንም የተለየ መሣሪያዎች አልተገኙም",
|
||||||
"SUBTITLE": "እርስዎን ከውጭ ኤፒአይዎችና አገልግሎቶች ጋር ለማገናኘት የተለየ መሣሪያዎችን ይፍጠሩ፣ እንዲሁም እርስዎን በአካል ውስጥ መረጃ ለማግኘትና ለማከናወን ይፈቅዱ።",
|
"SUBTITLE": "እርስዎን ከውጭ ኤፒአይዎችና አገልግሎቶች ጋር ለማገናኘት የተለየ መሣሪያዎችን ይፍጠሩ፣ እንዲሁም እርስዎን በአካል ውስጥ መረጃ ለማግኘትና ለማከናወን ይፈቅዱ።",
|
||||||
@@ -825,11 +837,18 @@
|
|||||||
"SUCCESS_MESSAGE": "ብልጽግና ተጠቃሚ መሣሪያ ተሰርዟል",
|
"SUCCESS_MESSAGE": "ብልጽግና ተጠቃሚ መሣሪያ ተሰርዟል",
|
||||||
"ERROR_MESSAGE": "ብልጽግና መሣሪያውን ማስወገድ አልተሳካም"
|
"ERROR_MESSAGE": "ብልጽግና መሣሪያውን ማስወገድ አልተሳካም"
|
||||||
},
|
},
|
||||||
|
"TEST": {
|
||||||
|
"BUTTON": "Test connection",
|
||||||
|
"SUCCESS": "Endpoint returned HTTP {status}",
|
||||||
|
"ERROR": "Connection failed",
|
||||||
|
"DISABLED_HINT": "Testing is only available for endpoints without templates or request bodies."
|
||||||
|
},
|
||||||
"FORM": {
|
"FORM": {
|
||||||
"TITLE": {
|
"TITLE": {
|
||||||
"LABEL": "የመሣሪያ ስም",
|
"LABEL": "የመሣሪያ ስም",
|
||||||
"PLACEHOLDER": "የትዕዛዝ ፍለጋ",
|
"PLACEHOLDER": "የትዕዛዝ ፍለጋ",
|
||||||
"ERROR": "የመሣሪያ ስም አስፈላጊ ነው"
|
"ERROR": "የመሣሪያ ስም አስፈላጊ ነው",
|
||||||
|
"MAX_LENGTH_ERROR": "Tool name must be {max} characters or fewer"
|
||||||
},
|
},
|
||||||
"DESCRIPTION": {
|
"DESCRIPTION": {
|
||||||
"LABEL": "መግለጫ",
|
"LABEL": "መግለጫ",
|
||||||
|
|||||||
@@ -158,54 +158,54 @@
|
|||||||
"TOOLTIP_TEXT": "First Response Time is {metricValue} (based on {conversationCount} conversations)"
|
"TOOLTIP_TEXT": "First Response Time is {metricValue} (based on {conversationCount} conversations)"
|
||||||
},
|
},
|
||||||
"RESOLUTION_TIME": {
|
"RESOLUTION_TIME": {
|
||||||
"NAME": "Resolution Time",
|
"NAME": "የመፍትሄ ጊዜ",
|
||||||
"DESC": "( Avg )",
|
"DESC": "( አማካይ )",
|
||||||
"INFO_TEXT": "Total number of conversations used for computation:",
|
"INFO_TEXT": "Total number of conversations used for computation:",
|
||||||
"TOOLTIP_TEXT": "Resolution Time is {metricValue} (based on {conversationCount} conversations)"
|
"TOOLTIP_TEXT": "Resolution Time is {metricValue} (based on {conversationCount} conversations)"
|
||||||
},
|
},
|
||||||
"RESOLUTION_COUNT": {
|
"RESOLUTION_COUNT": {
|
||||||
"NAME": "Resolution Count",
|
"NAME": "የተፈታ ብዛት",
|
||||||
"DESC": "( Total )"
|
"DESC": "( ጠቅላላ )"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"DATE_RANGE": [
|
"DATE_RANGE": [
|
||||||
{
|
{
|
||||||
"id": 0,
|
"id": 0,
|
||||||
"name": "Last 7 days"
|
"name": "ያለፉት 7 ቀናት"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 1,
|
"id": 1,
|
||||||
"name": "Last 30 days"
|
"name": "ያለፉት 30 ቀናት"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 2,
|
"id": 2,
|
||||||
"name": "Last 3 months"
|
"name": "ያለፉት 3 ወራት"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 3,
|
"id": 3,
|
||||||
"name": "Last 6 months"
|
"name": "ያለፉት 6 ወራት"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 4,
|
"id": 4,
|
||||||
"name": "Last year"
|
"name": "ያለፈው ዓመት"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 5,
|
"id": 5,
|
||||||
"name": "Custom date range"
|
"name": "በተለይ የተመረጠ ቀን ክልል"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"CUSTOM_DATE_RANGE": {
|
"CUSTOM_DATE_RANGE": {
|
||||||
"CONFIRM": "Apply",
|
"CONFIRM": "ተግባሩን ተፈጽም",
|
||||||
"PLACEHOLDER": "Select date range"
|
"PLACEHOLDER": "የቀን ክልል ይምረጡ"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"LABEL_REPORTS": {
|
"LABEL_REPORTS": {
|
||||||
"HEADER": "Labels Overview",
|
"HEADER": "የመለያ አጠቃላይ እይታ",
|
||||||
"DESCRIPTION": "Track label performance with key metrics including conversations, response times, resolution times, and resolved cases. Click a label name for detailed insights.",
|
"DESCRIPTION": "Track label performance with key metrics including conversations, response times, resolution times, and resolved cases. Click a label name for detailed insights.",
|
||||||
"LOADING_CHART": "Loading chart data...",
|
"LOADING_CHART": "የገበታ ውሂብ በመጫን ላይ...",
|
||||||
"NO_ENOUGH_DATA": "We've not received enough data points to generate report, Please try again later.",
|
"NO_ENOUGH_DATA": "የበቂ ውሂብ አልተሰበሰበም፣ እባክዎ በኋላ ይሞክሩ።",
|
||||||
"DOWNLOAD_LABEL_REPORTS": "Download label reports",
|
"DOWNLOAD_LABEL_REPORTS": "የመለያ ሪፖርቶችን ይውሰዱ",
|
||||||
"FILTER_DROPDOWN_LABEL": "Select Label",
|
"FILTER_DROPDOWN_LABEL": "መለያ ይምረጡ",
|
||||||
"FILTERS": {
|
"FILTERS": {
|
||||||
"INPUT_PLACEHOLDER": {
|
"INPUT_PLACEHOLDER": {
|
||||||
"LABELS": "Search labels"
|
"LABELS": "Search labels"
|
||||||
@@ -213,71 +213,71 @@
|
|||||||
},
|
},
|
||||||
"METRICS": {
|
"METRICS": {
|
||||||
"CONVERSATIONS": {
|
"CONVERSATIONS": {
|
||||||
"NAME": "Conversations",
|
"NAME": "ውይይቶች",
|
||||||
"DESC": "( Total )"
|
"DESC": "( ድምር )"
|
||||||
},
|
},
|
||||||
"INCOMING_MESSAGES": {
|
"INCOMING_MESSAGES": {
|
||||||
"NAME": "Incoming Messages",
|
"NAME": "የሚገቡ መልእክቶች",
|
||||||
"DESC": "( Total )"
|
"DESC": "( ድምር )"
|
||||||
},
|
},
|
||||||
"OUTGOING_MESSAGES": {
|
"OUTGOING_MESSAGES": {
|
||||||
"NAME": "Outgoing Messages",
|
"NAME": "የወጪ መልእክቶች",
|
||||||
"DESC": "( Total )"
|
"DESC": "( ድምር )"
|
||||||
},
|
},
|
||||||
"FIRST_RESPONSE_TIME": {
|
"FIRST_RESPONSE_TIME": {
|
||||||
"NAME": "First Response Time",
|
"NAME": "First Response Time",
|
||||||
"DESC": "( Avg )",
|
"DESC": "( አማካይ )",
|
||||||
"INFO_TEXT": "Total number of conversations used for computation:",
|
"INFO_TEXT": "Total number of conversations used for computation:",
|
||||||
"TOOLTIP_TEXT": "First Response Time is {metricValue} (based on {conversationCount} conversations)"
|
"TOOLTIP_TEXT": "First Response Time is {metricValue} (based on {conversationCount} conversations)"
|
||||||
},
|
},
|
||||||
"RESOLUTION_TIME": {
|
"RESOLUTION_TIME": {
|
||||||
"NAME": "Resolution Time",
|
"NAME": "የመፍትሄ ጊዜ",
|
||||||
"DESC": "( Avg )",
|
"DESC": "( አማካይ )",
|
||||||
"INFO_TEXT": "Total number of conversations used for computation:",
|
"INFO_TEXT": "Total number of conversations used for computation:",
|
||||||
"TOOLTIP_TEXT": "Resolution Time is {metricValue} (based on {conversationCount} conversations)"
|
"TOOLTIP_TEXT": "Resolution Time is {metricValue} (based on {conversationCount} conversations)"
|
||||||
},
|
},
|
||||||
"RESOLUTION_COUNT": {
|
"RESOLUTION_COUNT": {
|
||||||
"NAME": "Resolution Count",
|
"NAME": "የመፍትሄ ብዛት",
|
||||||
"DESC": "( Total )"
|
"DESC": "( ድምር )"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"DATE_RANGE": [
|
"DATE_RANGE": [
|
||||||
{
|
{
|
||||||
"id": 0,
|
"id": 0,
|
||||||
"name": "Last 7 days"
|
"name": "ያለፉ 7 ቀናት"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 1,
|
"id": 1,
|
||||||
"name": "Last 30 days"
|
"name": "ያለፉ 30 ቀናት"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 2,
|
"id": 2,
|
||||||
"name": "Last 3 months"
|
"name": "ያለፉት 3 ወራት"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 3,
|
"id": 3,
|
||||||
"name": "Last 6 months"
|
"name": "ያለፉት 6 ወራት"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 4,
|
"id": 4,
|
||||||
"name": "Last year"
|
"name": "ያለፈው ዓመት"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 5,
|
"id": 5,
|
||||||
"name": "Custom date range"
|
"name": "በተፈጥሮ የተመረጠ የቀን ክልል"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"CUSTOM_DATE_RANGE": {
|
"CUSTOM_DATE_RANGE": {
|
||||||
"CONFIRM": "Apply",
|
"CONFIRM": "ተግባር አድርግ",
|
||||||
"PLACEHOLDER": "Select date range"
|
"PLACEHOLDER": "የቀን ክልል ይምረጡ"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"INBOX_REPORTS": {
|
"INBOX_REPORTS": {
|
||||||
"HEADER": "Inbox Overview",
|
"HEADER": "የኢንቦክስ አጠቃላይ እይታ",
|
||||||
"DESCRIPTION": "Quickly view your inbox performance with key metrics like conversations, response times, resolution times, and resolved cases—all in one place. Click an inbox name for more details.",
|
"DESCRIPTION": "Quickly view your inbox performance with key metrics like conversations, response times, resolution times, and resolved cases—all in one place. Click an inbox name for more details.",
|
||||||
"LOADING_CHART": "Loading chart data...",
|
"LOADING_CHART": "የገቢ ግምገማ መረጃ በመጫን ላይ...",
|
||||||
"NO_ENOUGH_DATA": "We've not received enough data points to generate report, Please try again later.",
|
"NO_ENOUGH_DATA": "ሪፖርት ለማዘጋጀት በቂ መረጃ አልተደረሰም። እባክዎ በኋላ ይሞክሩ።",
|
||||||
"DOWNLOAD_INBOX_REPORTS": "Download inbox reports",
|
"DOWNLOAD_INBOX_REPORTS": "የኢንቦክስ ሪፖርቶችን ይውሰዱ",
|
||||||
"FILTER_DROPDOWN_LABEL": "Select Inbox",
|
"FILTER_DROPDOWN_LABEL": "Select Inbox",
|
||||||
"ALL_INBOXES": "All Inboxes",
|
"ALL_INBOXES": "All Inboxes",
|
||||||
"SEARCH_INBOX": "Search Inbox",
|
"SEARCH_INBOX": "Search Inbox",
|
||||||
|
|||||||
@@ -316,6 +316,18 @@
|
|||||||
"SUCCESS_MESSAGE": "تم إزالة اللغة من البوابة بنجاح",
|
"SUCCESS_MESSAGE": "تم إزالة اللغة من البوابة بنجاح",
|
||||||
"ERROR_MESSAGE": "غير قادر على إزالة اللغة من البوابة. حاول مرة أخرى."
|
"ERROR_MESSAGE": "غير قادر على إزالة اللغة من البوابة. حاول مرة أخرى."
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"DRAFT_LOCALE": {
|
||||||
|
"API": {
|
||||||
|
"SUCCESS_MESSAGE": "Locale moved to draft successfully",
|
||||||
|
"ERROR_MESSAGE": "Unable to move locale to draft. Try again."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"PUBLISH_LOCALE": {
|
||||||
|
"API": {
|
||||||
|
"SUCCESS_MESSAGE": "Locale published successfully",
|
||||||
|
"ERROR_MESSAGE": "Unable to publish locale. Try again."
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"TABLE": {
|
"TABLE": {
|
||||||
@@ -644,8 +656,11 @@
|
|||||||
"ARTICLES_COUNT": "{count} article | {count} articles",
|
"ARTICLES_COUNT": "{count} article | {count} articles",
|
||||||
"CATEGORIES_COUNT": "{count} category | {count} categories",
|
"CATEGORIES_COUNT": "{count} category | {count} categories",
|
||||||
"DEFAULT": "افتراضي",
|
"DEFAULT": "افتراضي",
|
||||||
|
"DRAFT": "مسودة",
|
||||||
"DROPDOWN_MENU": {
|
"DROPDOWN_MENU": {
|
||||||
"MAKE_DEFAULT": "Make default",
|
"MAKE_DEFAULT": "Make default",
|
||||||
|
"MOVE_TO_DRAFT": "Move to draft",
|
||||||
|
"PUBLISH_LOCALE": "Publish locale",
|
||||||
"DELETE": "حذف"
|
"DELETE": "حذف"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -655,6 +670,13 @@
|
|||||||
"COMBOBOX": {
|
"COMBOBOX": {
|
||||||
"PLACEHOLDER": "حدد اللغة..."
|
"PLACEHOLDER": "حدد اللغة..."
|
||||||
},
|
},
|
||||||
|
"STATUS": {
|
||||||
|
"LABEL": "الحالة",
|
||||||
|
"OPTIONS": {
|
||||||
|
"LIVE": "نُشرت",
|
||||||
|
"DRAFT": "مسودة"
|
||||||
|
}
|
||||||
|
},
|
||||||
"API": {
|
"API": {
|
||||||
"SUCCESS_MESSAGE": "تمت إضافة اللغة بنجاح",
|
"SUCCESS_MESSAGE": "تمت إضافة اللغة بنجاح",
|
||||||
"ERROR_MESSAGE": "غير قادر على إضافة اللغة . حاول مرة أخرى."
|
"ERROR_MESSAGE": "غير قادر على إضافة اللغة . حاول مرة أخرى."
|
||||||
|
|||||||
@@ -715,7 +715,7 @@
|
|||||||
},
|
},
|
||||||
"ALLOW_MOBILE_WEBVIEW": {
|
"ALLOW_MOBILE_WEBVIEW": {
|
||||||
"LABEL": "Enable widget in mobile apps",
|
"LABEL": "Enable widget in mobile apps",
|
||||||
"SUBTITLE": "Check this if you embed the widget in iOS or Android apps. Mobile apps don't send domain information, so they would be blocked by domain restrictions unless this is enabled."
|
"SUBTITLE": "حدد هذا الخيار إذا كنت تقوم بتضمين الأداة في تطبيقات iOS أو Android. لا ترسل تطبيقات الجوال معلومات النطاق، لذا سيتم حظرها بسبب قيود النطاق ما لم يتم تفعيل هذا الخيار."
|
||||||
},
|
},
|
||||||
"IDENTITY_VALIDATION": {
|
"IDENTITY_VALIDATION": {
|
||||||
"TITLE": "Identity Validation",
|
"TITLE": "Identity Validation",
|
||||||
|
|||||||
@@ -126,7 +126,7 @@
|
|||||||
},
|
},
|
||||||
"HELP_TEXT": {
|
"HELP_TEXT": {
|
||||||
"TITLE": "استخدام تكامل Slack",
|
"TITLE": "استخدام تكامل Slack",
|
||||||
"BODY": "With this integration, all of your incoming conversations will be synced to the ***{selectedChannelName}*** channel in your Slack workspace. You can manage all your customer conversations right within the channel and never miss a message.\n\nHere are the main features of the integration:\n\n**Respond to conversations from within Slack:** To respond to a conversation in the ***{selectedChannelName}*** Slack channel, simply type out your message and send it as a thread. This will create a response back to the customer through Chatwoot. It's that simple!\n\n **Create private notes:** If you want to create private notes instead of replies, start your message with ***`note:`***. This ensures that your message is kept private and won't be visible to the customer.\n\n**Associate an agent profile:** If the person who replied on Slack has an agent profile in Chatwoot under the same email, the replies will be associated with that agent profile automatically. This means you can easily track who said what and when. On the other hand, when the replier doesn't have an associated agent profile, the replies will appear from the bot profile to the customer.",
|
"BODY": "باستخدام هذا التكامل، ستتم مزامنة جميع محادثاتك الواردة مع قناة ***{selectedChannelName}*** في مساحة عمل Slack الخاصة بك. يمكنك إدارة جميع محادثات عملائك مباشرة من داخل القناة ولن تفوّت أي رسالة.\n\nفيما يلي الميزات الرئيسية لهذا التكامل:\n\n**الرد على المحادثات من داخل Slack:** للرد على محادثة في قناة Slack ***{selectedChannelName}***، ما عليك سوى كتابة رسالتك وإرسالها كسلسلة رسائل. سيؤدي ذلك إلى إنشاء رد للعميل عبر Chatwoot. الأمر بهذه البساطة!\n\n **إنشاء ملاحظات خاصة:** إذا كنت تريد إنشاء ملاحظات خاصة بدلاً من الردود، فابدأ رسالتك بـ ***`note:`***. يضمن ذلك بقاء رسالتك خاصة وعدم ظهورها للعميل.\n\n**ربط ملف وكيل:** إذا كان الشخص الذي ردّ في Slack لديه ملف وكيل في Chatwoot تحت البريد الإلكتروني نفسه، فسيتم ربط الردود تلقائيًا بذلك الملف. وهذا يعني أنه يمكنك بسهولة تتبع من قال ماذا ومتى. من ناحية أخرى، إذا لم يكن لدى الشخص الذي ردّ ملف وكيل مرتبط، فستظهر الردود للعميل على أنها صادرة من ملف البوت.",
|
||||||
"SELECTED": "selected"
|
"SELECTED": "selected"
|
||||||
},
|
},
|
||||||
"SELECT_CHANNEL": {
|
"SELECT_CHANNEL": {
|
||||||
@@ -390,72 +390,72 @@
|
|||||||
},
|
},
|
||||||
"CAPTAIN": {
|
"CAPTAIN": {
|
||||||
"NAME": "قائد",
|
"NAME": "قائد",
|
||||||
"HEADER_KNOW_MORE": "Know more",
|
"HEADER_KNOW_MORE": "اعرف المزيد",
|
||||||
"ASSISTANT_SWITCHER": {
|
"ASSISTANT_SWITCHER": {
|
||||||
"ASSISTANTS": "Assistants",
|
"ASSISTANTS": "المساعدون",
|
||||||
"SWITCH_ASSISTANT": "Switch between assistants",
|
"SWITCH_ASSISTANT": "التبديل بين المساعدين",
|
||||||
"NEW_ASSISTANT": "Create Assistant",
|
"NEW_ASSISTANT": "إنشاء مساعد",
|
||||||
"EMPTY_LIST": "No assistants found, please create one to get started"
|
"EMPTY_LIST": "لم يتم العثور على مساعدين، يرجى إنشاء واحد للبدء"
|
||||||
},
|
},
|
||||||
"COPILOT": {
|
"COPILOT": {
|
||||||
"TITLE": "Copilot",
|
"TITLE": "Copilot",
|
||||||
"TRY_THESE_PROMPTS": "Try these prompts",
|
"TRY_THESE_PROMPTS": "Try these prompts",
|
||||||
"PANEL_TITLE": "Get started with Copilot",
|
"PANEL_TITLE": "ابدأ مع Copilot",
|
||||||
"KICK_OFF_MESSAGE": "Need a quick summary, want to check past conversations, or draft a better reply? Copilot’s here to speed things up.",
|
"KICK_OFF_MESSAGE": "هل تحتاج إلى ملخص سريع، ترغب في مراجعة المحادثات السابقة، أو صياغة رد أفضل؟ Copilot هنا لتسريع الأمور.",
|
||||||
"SEND_MESSAGE": "إرسال الرسالة...",
|
"SEND_MESSAGE": "إرسال الرسالة...",
|
||||||
"EMPTY_MESSAGE": "There was an error generating the response. Please try again.",
|
"EMPTY_MESSAGE": "حدث خطأ أثناء توليد الاستجابة. يرجى المحاولة مرة أخرى.",
|
||||||
"LOADER": "Captain is thinking",
|
"LOADER": "يقوم Captain بالتفكير",
|
||||||
"YOU": "أنت",
|
"YOU": "أنت",
|
||||||
"USE": "Use this",
|
"USE": "استخدام هذا",
|
||||||
"RESET": "Reset",
|
"RESET": "إعادة تعيين",
|
||||||
"SHOW_STEPS": "Show steps",
|
"SHOW_STEPS": "عرض الخطوات",
|
||||||
"SELECT_ASSISTANT": "Select Assistant",
|
"SELECT_ASSISTANT": "اختر المساعد",
|
||||||
"PROMPTS": {
|
"PROMPTS": {
|
||||||
"SUMMARIZE": {
|
"SUMMARIZE": {
|
||||||
"LABEL": "Summarize this conversation",
|
"LABEL": "لخص هذه المحادثة",
|
||||||
"CONTENT": "Summarize the key points discussed between the customer and the support agent, including the customer's concerns, questions, and the solutions or responses provided by the support agent"
|
"CONTENT": "لخص النقاط الرئيسية التي نوقشت بين العميل ووكيل الدعم، بما في ذلك مخاوف العميل، أسئلته، والحلول أو الردود المقدمة من الوكيل."
|
||||||
},
|
},
|
||||||
"SUGGEST": {
|
"SUGGEST": {
|
||||||
"LABEL": "Suggest an answer",
|
"LABEL": "اقترح إجابة",
|
||||||
"CONTENT": "Analyze the customer's inquiry, and draft a response that effectively addresses their concerns or questions. Ensure the reply is clear, concise, and provides helpful information."
|
"CONTENT": "حلل استفسار العميل وقم بصياغة رد يعالج مخاوفه أو أسئلته بفعالية. تأكد من أن الرد واضح، موجز، ويوفر معلومات مفيدة."
|
||||||
},
|
},
|
||||||
"RATE": {
|
"RATE": {
|
||||||
"LABEL": "Rate this conversation",
|
"LABEL": "قم بتقييم هذه المحادثة",
|
||||||
"CONTENT": "Review the conversation to see how well it meets the customer's needs. Share a rating out of 5 based on tone, clarity, and effectiveness."
|
"CONTENT": "راجع المحادثة لترى مدى تلبيتها لاحتياجات العميل. شارك تقييمًا من 5 بناءً على النغمة، الوضوح، والفعالية."
|
||||||
},
|
},
|
||||||
"HIGH_PRIORITY": {
|
"HIGH_PRIORITY": {
|
||||||
"LABEL": "High priority conversations",
|
"LABEL": "المحادثات ذات الأولوية العالية",
|
||||||
"CONTENT": "Give me a summary of all high priority open conversations. Include the conversation ID, customer name (if available), last message content, and assigned agent. Group by status if relevant."
|
"CONTENT": "اعطني ملخصًا لجميع المحادثات المفتوحة ذات الأولوية العالية. تضمّن معرف المحادثة، اسم العميل (إن وُجد)، محتوى آخر رسالة، والوكيل المعين. قم بالتجميع حسب الحالة إذا كان ذلك مناسبًا."
|
||||||
},
|
},
|
||||||
"LIST_CONTACTS": {
|
"LIST_CONTACTS": {
|
||||||
"LABEL": "List contacts",
|
"LABEL": "قائمة جهات الاتصال",
|
||||||
"CONTENT": "Show me the list of top 10 contacts. Include name, email or phone number (if available), last seen time, tags (if any)."
|
"CONTENT": "اعرض لي قائمة بأفضل 10 جهات اتصال. تضمّن الاسم، البريد الإلكتروني أو رقم الهاتف (إن وُجد)، آخر وقت مشاهدة، العلامات (إن وجدت)."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"PLAYGROUND": {
|
"PLAYGROUND": {
|
||||||
"USER": "أنت",
|
"USER": "أنت",
|
||||||
"ASSISTANT": "Assistant",
|
"ASSISTANT": "مساعد",
|
||||||
"MESSAGE_PLACEHOLDER": "أكتب رسالتك...",
|
"MESSAGE_PLACEHOLDER": "أكتب رسالتك...",
|
||||||
"HEADER": "Playground",
|
"HEADER": "ساحة اللعب",
|
||||||
"DESCRIPTION": "Use this playground to send messages to your assistant and check if it responds accurately, quickly, and in the tone you expect.",
|
"DESCRIPTION": "استخدم هذه الساحة لإرسال رسائل إلى مساعدك والتحقق مما إذا كان يرد بدقة وسرعة وبالنغمة التي تتوقعها.",
|
||||||
"CREDIT_NOTE": "Messages sent here will count toward your Captain credits."
|
"CREDIT_NOTE": "الرسائل المرسلة هنا ستُحتسب ضمن رصيد Captain الخاص بك."
|
||||||
},
|
},
|
||||||
"PAYWALL": {
|
"PAYWALL": {
|
||||||
"TITLE": "Upgrade to use Captain AI",
|
"TITLE": "قم بالترقية لاستخدام Captain AI",
|
||||||
"AVAILABLE_ON": "Captain is not available on the free plan.",
|
"AVAILABLE_ON": "Captain غير متاح على الخطة المجانية.",
|
||||||
"UPGRADE_PROMPT": "Upgrade your plan to get access to our assistants, copilot and more.",
|
"UPGRADE_PROMPT": "قم بترقية خطتك للحصول على الوصول إلى مساعدينا، وcopilot، والمزيد.",
|
||||||
"UPGRADE_NOW": "Upgrade now",
|
"UPGRADE_NOW": "Upgrade now",
|
||||||
"CANCEL_ANYTIME": "You can change or cancel your plan anytime"
|
"CANCEL_ANYTIME": "You can change or cancel your plan anytime"
|
||||||
},
|
},
|
||||||
"ENTERPRISE_PAYWALL": {
|
"ENTERPRISE_PAYWALL": {
|
||||||
"AVAILABLE_ON": "ولا يتوفر الكابتن AI إلا في خطط المؤسسة.",
|
"AVAILABLE_ON": "ولا يتوفر الكابتن AI إلا في خطط المؤسسة.",
|
||||||
"UPGRADE_PROMPT": "Upgrade your plan to get access to our assistants, copilot and more.",
|
"UPGRADE_PROMPT": "قم بترقية خطتك للحصول على الوصول إلى مساعدينا، وcopilot، والمزيد.",
|
||||||
"ASK_ADMIN": "Please reach out to your administrator for the upgrade."
|
"ASK_ADMIN": "Please reach out to your administrator for the upgrade."
|
||||||
},
|
},
|
||||||
"BANNER": {
|
"BANNER": {
|
||||||
"RESPONSES": "You've used over 80% of your response limit. To continue using Captain AI, please upgrade.",
|
"RESPONSES": "لقد استخدمت أكثر من 80٪ من حد الاستجابات الخاص بك. للاستمرار في استخدام Captain AI، يرجى الترقية.",
|
||||||
"DOCUMENTS": "Document limit reached. Upgrade to continue using Captain AI."
|
"DOCUMENTS": "تم الوصول إلى حد المستندات. قم بالترقية للاستمرار في استخدام Captain AI."
|
||||||
},
|
},
|
||||||
"FORM": {
|
"FORM": {
|
||||||
"CANCEL": "إلغاء",
|
"CANCEL": "إلغاء",
|
||||||
@@ -738,6 +738,17 @@
|
|||||||
"DOCUMENTS": {
|
"DOCUMENTS": {
|
||||||
"HEADER": "Documents",
|
"HEADER": "Documents",
|
||||||
"ADD_NEW": "Create a new document",
|
"ADD_NEW": "Create a new document",
|
||||||
|
"SELECTED": "{count} selected",
|
||||||
|
"SELECT_ALL": "Select all ({count})",
|
||||||
|
"UNSELECT_ALL": "Unselect all ({count})",
|
||||||
|
"BULK_DELETE_BUTTON": "حذف",
|
||||||
|
"BULK_DELETE": {
|
||||||
|
"TITLE": "Delete documents?",
|
||||||
|
"DESCRIPTION": "Are you sure you want to delete the selected documents? This action cannot be undone.",
|
||||||
|
"CONFIRM": "Yes, delete all",
|
||||||
|
"SUCCESS_MESSAGE": "Documents deleted successfully",
|
||||||
|
"ERROR_MESSAGE": "There was an error deleting the documents, please try again."
|
||||||
|
},
|
||||||
"RELATED_RESPONSES": {
|
"RELATED_RESPONSES": {
|
||||||
"TITLE": "Related FAQs",
|
"TITLE": "Related FAQs",
|
||||||
"DESCRIPTION": "These FAQs are generated directly from the document."
|
"DESCRIPTION": "These FAQs are generated directly from the document."
|
||||||
@@ -795,6 +806,7 @@
|
|||||||
"CUSTOM_TOOLS": {
|
"CUSTOM_TOOLS": {
|
||||||
"HEADER": "Tools",
|
"HEADER": "Tools",
|
||||||
"ADD_NEW": "Create a new tool",
|
"ADD_NEW": "Create a new tool",
|
||||||
|
"SOFT_LIMIT_WARNING": "Having more than 10 tools may reduce the assistant's reliability in selecting the right tool. Consider removing unused tools for better results.",
|
||||||
"EMPTY_STATE": {
|
"EMPTY_STATE": {
|
||||||
"TITLE": "No custom tools available",
|
"TITLE": "No custom tools available",
|
||||||
"SUBTITLE": "Create custom tools to connect your assistant with external APIs and services, enabling it to fetch data and perform actions on your behalf.",
|
"SUBTITLE": "Create custom tools to connect your assistant with external APIs and services, enabling it to fetch data and perform actions on your behalf.",
|
||||||
@@ -825,11 +837,18 @@
|
|||||||
"SUCCESS_MESSAGE": "Custom tool deleted successfully",
|
"SUCCESS_MESSAGE": "Custom tool deleted successfully",
|
||||||
"ERROR_MESSAGE": "Failed to delete custom tool"
|
"ERROR_MESSAGE": "Failed to delete custom tool"
|
||||||
},
|
},
|
||||||
|
"TEST": {
|
||||||
|
"BUTTON": "Test connection",
|
||||||
|
"SUCCESS": "Endpoint returned HTTP {status}",
|
||||||
|
"ERROR": "Connection failed",
|
||||||
|
"DISABLED_HINT": "Testing is only available for endpoints without templates or request bodies."
|
||||||
|
},
|
||||||
"FORM": {
|
"FORM": {
|
||||||
"TITLE": {
|
"TITLE": {
|
||||||
"LABEL": "Tool Name",
|
"LABEL": "Tool Name",
|
||||||
"PLACEHOLDER": "Order Lookup",
|
"PLACEHOLDER": "Order Lookup",
|
||||||
"ERROR": "Tool name is required"
|
"ERROR": "Tool name is required",
|
||||||
|
"MAX_LENGTH_ERROR": "Tool name must be {max} characters or fewer"
|
||||||
},
|
},
|
||||||
"DESCRIPTION": {
|
"DESCRIPTION": {
|
||||||
"LABEL": "الوصف",
|
"LABEL": "الوصف",
|
||||||
|
|||||||
@@ -316,6 +316,18 @@
|
|||||||
"SUCCESS_MESSAGE": "Dil portaldan uğurla silindi",
|
"SUCCESS_MESSAGE": "Dil portaldan uğurla silindi",
|
||||||
"ERROR_MESSAGE": "Dili portaldan silmək mümkün olmadı. Yenidən cəhd edin."
|
"ERROR_MESSAGE": "Dili portaldan silmək mümkün olmadı. Yenidən cəhd edin."
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"DRAFT_LOCALE": {
|
||||||
|
"API": {
|
||||||
|
"SUCCESS_MESSAGE": "Locale moved to draft successfully",
|
||||||
|
"ERROR_MESSAGE": "Unable to move locale to draft. Try again."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"PUBLISH_LOCALE": {
|
||||||
|
"API": {
|
||||||
|
"SUCCESS_MESSAGE": "Locale published successfully",
|
||||||
|
"ERROR_MESSAGE": "Unable to publish locale. Try again."
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"TABLE": {
|
"TABLE": {
|
||||||
@@ -644,8 +656,11 @@
|
|||||||
"ARTICLES_COUNT": "{count} article | {count} articles",
|
"ARTICLES_COUNT": "{count} article | {count} articles",
|
||||||
"CATEGORIES_COUNT": "{count} category | {count} categories",
|
"CATEGORIES_COUNT": "{count} category | {count} categories",
|
||||||
"DEFAULT": "Default",
|
"DEFAULT": "Default",
|
||||||
|
"DRAFT": "Qaralama",
|
||||||
"DROPDOWN_MENU": {
|
"DROPDOWN_MENU": {
|
||||||
"MAKE_DEFAULT": "Make default",
|
"MAKE_DEFAULT": "Make default",
|
||||||
|
"MOVE_TO_DRAFT": "Move to draft",
|
||||||
|
"PUBLISH_LOCALE": "Publish locale",
|
||||||
"DELETE": "Delete"
|
"DELETE": "Delete"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -655,6 +670,13 @@
|
|||||||
"COMBOBOX": {
|
"COMBOBOX": {
|
||||||
"PLACEHOLDER": "Select locale..."
|
"PLACEHOLDER": "Select locale..."
|
||||||
},
|
},
|
||||||
|
"STATUS": {
|
||||||
|
"LABEL": "Status",
|
||||||
|
"OPTIONS": {
|
||||||
|
"LIVE": "Yayımlanıb",
|
||||||
|
"DRAFT": "Qaralama"
|
||||||
|
}
|
||||||
|
},
|
||||||
"API": {
|
"API": {
|
||||||
"SUCCESS_MESSAGE": "Locale added successfully",
|
"SUCCESS_MESSAGE": "Locale added successfully",
|
||||||
"ERROR_MESSAGE": "Unable to add locale. Try again."
|
"ERROR_MESSAGE": "Unable to add locale. Try again."
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -194,7 +194,7 @@
|
|||||||
"MESSAGING_RESTRICTED_WHATSAPP": "You can only reply using a template message due to 24-hour message window restriction",
|
"MESSAGING_RESTRICTED_WHATSAPP": "You can only reply using a template message due to 24-hour message window restriction",
|
||||||
"MESSAGING_RESTRICTED_API": "You can only reply using a template message due to message window restriction",
|
"MESSAGING_RESTRICTED_API": "You can only reply using a template message due to message window restriction",
|
||||||
"MESSAGE_SIGNATURE_NOT_CONFIGURED": "Message signature is not configured, please configure it in profile settings.",
|
"MESSAGE_SIGNATURE_NOT_CONFIGURED": "Message signature is not configured, please configure it in profile settings.",
|
||||||
"COPILOT_MSG_INPUT": "Give copilot additional prompts, or ask anything else... Press enter to send follow-up",
|
"COPILOT_MSG_INPUT": "Дайте на copilot допълнителни инструкции или питайте нещо друго... Натиснете enter, за да изпратите последващо съобщение",
|
||||||
"CLICK_HERE": "Click here to update",
|
"CLICK_HERE": "Click here to update",
|
||||||
"WHATSAPP_TEMPLATES": "Whatsapp Templates"
|
"WHATSAPP_TEMPLATES": "Whatsapp Templates"
|
||||||
},
|
},
|
||||||
@@ -214,7 +214,7 @@
|
|||||||
"DRAG_DROP": "Drag and drop here to attach",
|
"DRAG_DROP": "Drag and drop here to attach",
|
||||||
"START_AUDIO_RECORDING": "Start audio recording",
|
"START_AUDIO_RECORDING": "Start audio recording",
|
||||||
"STOP_AUDIO_RECORDING": "Stop audio recording",
|
"STOP_AUDIO_RECORDING": "Stop audio recording",
|
||||||
"COPILOT_THINKING": "Copilot is thinking",
|
"COPILOT_THINKING": "Copilot мисли",
|
||||||
"EMAIL_HEAD": {
|
"EMAIL_HEAD": {
|
||||||
"TO": "TO",
|
"TO": "TO",
|
||||||
"ADD_BCC": "Add bcc",
|
"ADD_BCC": "Add bcc",
|
||||||
|
|||||||
@@ -316,6 +316,18 @@
|
|||||||
"SUCCESS_MESSAGE": "Locale removed from portal successfully",
|
"SUCCESS_MESSAGE": "Locale removed from portal successfully",
|
||||||
"ERROR_MESSAGE": "Unable to remove locale from portal. Try again."
|
"ERROR_MESSAGE": "Unable to remove locale from portal. Try again."
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"DRAFT_LOCALE": {
|
||||||
|
"API": {
|
||||||
|
"SUCCESS_MESSAGE": "Locale moved to draft successfully",
|
||||||
|
"ERROR_MESSAGE": "Unable to move locale to draft. Try again."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"PUBLISH_LOCALE": {
|
||||||
|
"API": {
|
||||||
|
"SUCCESS_MESSAGE": "Locale published successfully",
|
||||||
|
"ERROR_MESSAGE": "Unable to publish locale. Try again."
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"TABLE": {
|
"TABLE": {
|
||||||
@@ -644,8 +656,11 @@
|
|||||||
"ARTICLES_COUNT": "{count} article | {count} articles",
|
"ARTICLES_COUNT": "{count} article | {count} articles",
|
||||||
"CATEGORIES_COUNT": "{count} category | {count} categories",
|
"CATEGORIES_COUNT": "{count} category | {count} categories",
|
||||||
"DEFAULT": "Default",
|
"DEFAULT": "Default",
|
||||||
|
"DRAFT": "Draft",
|
||||||
"DROPDOWN_MENU": {
|
"DROPDOWN_MENU": {
|
||||||
"MAKE_DEFAULT": "Make default",
|
"MAKE_DEFAULT": "Make default",
|
||||||
|
"MOVE_TO_DRAFT": "Move to draft",
|
||||||
|
"PUBLISH_LOCALE": "Publish locale",
|
||||||
"DELETE": "Изтрий"
|
"DELETE": "Изтрий"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -655,6 +670,13 @@
|
|||||||
"COMBOBOX": {
|
"COMBOBOX": {
|
||||||
"PLACEHOLDER": "Select locale..."
|
"PLACEHOLDER": "Select locale..."
|
||||||
},
|
},
|
||||||
|
"STATUS": {
|
||||||
|
"LABEL": "Статус",
|
||||||
|
"OPTIONS": {
|
||||||
|
"LIVE": "Published",
|
||||||
|
"DRAFT": "Draft"
|
||||||
|
}
|
||||||
|
},
|
||||||
"API": {
|
"API": {
|
||||||
"SUCCESS_MESSAGE": "Locale added successfully",
|
"SUCCESS_MESSAGE": "Locale added successfully",
|
||||||
"ERROR_MESSAGE": "Unable to add locale. Try again."
|
"ERROR_MESSAGE": "Unable to add locale. Try again."
|
||||||
|
|||||||
@@ -390,72 +390,72 @@
|
|||||||
},
|
},
|
||||||
"CAPTAIN": {
|
"CAPTAIN": {
|
||||||
"NAME": "Captain",
|
"NAME": "Captain",
|
||||||
"HEADER_KNOW_MORE": "Know more",
|
"HEADER_KNOW_MORE": "Научете повече",
|
||||||
"ASSISTANT_SWITCHER": {
|
"ASSISTANT_SWITCHER": {
|
||||||
"ASSISTANTS": "Assistants",
|
"ASSISTANTS": "Асистенти",
|
||||||
"SWITCH_ASSISTANT": "Switch between assistants",
|
"SWITCH_ASSISTANT": "Превключване между асистенти",
|
||||||
"NEW_ASSISTANT": "Create Assistant",
|
"NEW_ASSISTANT": "Създайте асистент",
|
||||||
"EMPTY_LIST": "No assistants found, please create one to get started"
|
"EMPTY_LIST": "Не са намерени асистенти, моля създайте един, за да започнете"
|
||||||
},
|
},
|
||||||
"COPILOT": {
|
"COPILOT": {
|
||||||
"TITLE": "Copilot",
|
"TITLE": "Copilot",
|
||||||
"TRY_THESE_PROMPTS": "Try these prompts",
|
"TRY_THESE_PROMPTS": "Try these prompts",
|
||||||
"PANEL_TITLE": "Get started with Copilot",
|
"PANEL_TITLE": "Започнете с Copilot",
|
||||||
"KICK_OFF_MESSAGE": "Need a quick summary, want to check past conversations, or draft a better reply? Copilot’s here to speed things up.",
|
"KICK_OFF_MESSAGE": "Имате нужда от бързо резюме, искате да проверите минали разговори или да създадете по-добър отговор? Copilot е тук, за да ускори нещата.",
|
||||||
"SEND_MESSAGE": "Изпрати съобщение...",
|
"SEND_MESSAGE": "Изпрати съобщение...",
|
||||||
"EMPTY_MESSAGE": "There was an error generating the response. Please try again.",
|
"EMPTY_MESSAGE": "Възникна грешка при генериране на отговора. Моля, опитайте отново.",
|
||||||
"LOADER": "Captain is thinking",
|
"LOADER": "Captain мисли",
|
||||||
"YOU": "You",
|
"YOU": "You",
|
||||||
"USE": "Use this",
|
"USE": "Използвай това",
|
||||||
"RESET": "Reset",
|
"RESET": "Нулиране",
|
||||||
"SHOW_STEPS": "Show steps",
|
"SHOW_STEPS": "Покажи стъпки",
|
||||||
"SELECT_ASSISTANT": "Select Assistant",
|
"SELECT_ASSISTANT": "Изберете асистент",
|
||||||
"PROMPTS": {
|
"PROMPTS": {
|
||||||
"SUMMARIZE": {
|
"SUMMARIZE": {
|
||||||
"LABEL": "Summarize this conversation",
|
"LABEL": "Обобщете този разговор",
|
||||||
"CONTENT": "Summarize the key points discussed between the customer and the support agent, including the customer's concerns, questions, and the solutions or responses provided by the support agent"
|
"CONTENT": "Обобщете основните точки, обсъдени между клиента и поддържащия агент, включително притесненията на клиента, въпросите и решенията или отговорите, предоставени от агента."
|
||||||
},
|
},
|
||||||
"SUGGEST": {
|
"SUGGEST": {
|
||||||
"LABEL": "Suggest an answer",
|
"LABEL": "Предложете отговор",
|
||||||
"CONTENT": "Analyze the customer's inquiry, and draft a response that effectively addresses their concerns or questions. Ensure the reply is clear, concise, and provides helpful information."
|
"CONTENT": "Анализирайте запитването на клиента и създайте отговор, който ефективно адресира техните притеснения или въпроси. Уверете се, че отговорът е ясен, кратък и предоставя полезна информация."
|
||||||
},
|
},
|
||||||
"RATE": {
|
"RATE": {
|
||||||
"LABEL": "Rate this conversation",
|
"LABEL": "Оценете този разговор",
|
||||||
"CONTENT": "Review the conversation to see how well it meets the customer's needs. Share a rating out of 5 based on tone, clarity, and effectiveness."
|
"CONTENT": "Прегледайте разговора, за да видите доколко отговаря на нуждите на клиента. Споделете оценка от 5 въз основа на тон, яснота и ефективност."
|
||||||
},
|
},
|
||||||
"HIGH_PRIORITY": {
|
"HIGH_PRIORITY": {
|
||||||
"LABEL": "High priority conversations",
|
"LABEL": "Разговори с висок приоритет",
|
||||||
"CONTENT": "Give me a summary of all high priority open conversations. Include the conversation ID, customer name (if available), last message content, and assigned agent. Group by status if relevant."
|
"CONTENT": "Дайте ми резюме на всички отворени разговори с висок приоритет. Включете ID на разговора, името на клиента (ако е налично), съдържанието на последното съобщение и назначен агент. Групирайте по статус, ако е приложимо."
|
||||||
},
|
},
|
||||||
"LIST_CONTACTS": {
|
"LIST_CONTACTS": {
|
||||||
"LABEL": "List contacts",
|
"LABEL": "Списък с контакти",
|
||||||
"CONTENT": "Show me the list of top 10 contacts. Include name, email or phone number (if available), last seen time, tags (if any)."
|
"CONTENT": "Покажете ми списък с топ 10 контакта. Включете име, имейл или телефонен номер (ако е наличен), време на последно виждане, етикети (ако има такива)."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"PLAYGROUND": {
|
"PLAYGROUND": {
|
||||||
"USER": "You",
|
"USER": "You",
|
||||||
"ASSISTANT": "Assistant",
|
"ASSISTANT": "Асистент",
|
||||||
"MESSAGE_PLACEHOLDER": "Напишете вашето съобщение...",
|
"MESSAGE_PLACEHOLDER": "Напишете вашето съобщение...",
|
||||||
"HEADER": "Playground",
|
"HEADER": "Площадка",
|
||||||
"DESCRIPTION": "Use this playground to send messages to your assistant and check if it responds accurately, quickly, and in the tone you expect.",
|
"DESCRIPTION": "Използвайте тази площадка, за да изпращате съобщения до вашия асистент и да проверите дали отговаря точно, бързо и в очаквания тон.",
|
||||||
"CREDIT_NOTE": "Messages sent here will count toward your Captain credits."
|
"CREDIT_NOTE": "Изпратените съобщения тук ще се броят към вашите кредити на Captain."
|
||||||
},
|
},
|
||||||
"PAYWALL": {
|
"PAYWALL": {
|
||||||
"TITLE": "Upgrade to use Captain AI",
|
"TITLE": "Надградете, за да използвате Captain AI",
|
||||||
"AVAILABLE_ON": "Captain is not available on the free plan.",
|
"AVAILABLE_ON": "Captain не е наличен в безплатния план.",
|
||||||
"UPGRADE_PROMPT": "Upgrade your plan to get access to our assistants, copilot and more.",
|
"UPGRADE_PROMPT": "Надградете вашия план, за да получите достъп до нашите асистенти, copilot и още.",
|
||||||
"UPGRADE_NOW": "Upgrade now",
|
"UPGRADE_NOW": "Upgrade now",
|
||||||
"CANCEL_ANYTIME": "You can change or cancel your plan anytime"
|
"CANCEL_ANYTIME": "You can change or cancel your plan anytime"
|
||||||
},
|
},
|
||||||
"ENTERPRISE_PAYWALL": {
|
"ENTERPRISE_PAYWALL": {
|
||||||
"AVAILABLE_ON": "Captain AI is only available in the Enterprise plans.",
|
"AVAILABLE_ON": "Captain AI е наличен само в Enterprise плановете.",
|
||||||
"UPGRADE_PROMPT": "Upgrade your plan to get access to our assistants, copilot and more.",
|
"UPGRADE_PROMPT": "Надградете вашия план, за да получите достъп до нашите асистенти, copilot и още.",
|
||||||
"ASK_ADMIN": "Please reach out to your administrator for the upgrade."
|
"ASK_ADMIN": "Please reach out to your administrator for the upgrade."
|
||||||
},
|
},
|
||||||
"BANNER": {
|
"BANNER": {
|
||||||
"RESPONSES": "You've used over 80% of your response limit. To continue using Captain AI, please upgrade.",
|
"RESPONSES": "Използвали сте над 80% от лимита си за отговори. За да продължите да използвате Captain AI, моля надградете.",
|
||||||
"DOCUMENTS": "Document limit reached. Upgrade to continue using Captain AI."
|
"DOCUMENTS": "Достигнат е лимитът за документи. Надградете, за да продължите да използвате Captain AI."
|
||||||
},
|
},
|
||||||
"FORM": {
|
"FORM": {
|
||||||
"CANCEL": "Отмени",
|
"CANCEL": "Отмени",
|
||||||
@@ -738,6 +738,17 @@
|
|||||||
"DOCUMENTS": {
|
"DOCUMENTS": {
|
||||||
"HEADER": "Documents",
|
"HEADER": "Documents",
|
||||||
"ADD_NEW": "Create a new document",
|
"ADD_NEW": "Create a new document",
|
||||||
|
"SELECTED": "{count} selected",
|
||||||
|
"SELECT_ALL": "Select all ({count})",
|
||||||
|
"UNSELECT_ALL": "Unselect all ({count})",
|
||||||
|
"BULK_DELETE_BUTTON": "Изтрий",
|
||||||
|
"BULK_DELETE": {
|
||||||
|
"TITLE": "Delete documents?",
|
||||||
|
"DESCRIPTION": "Are you sure you want to delete the selected documents? This action cannot be undone.",
|
||||||
|
"CONFIRM": "Yes, delete all",
|
||||||
|
"SUCCESS_MESSAGE": "Documents deleted successfully",
|
||||||
|
"ERROR_MESSAGE": "There was an error deleting the documents, please try again."
|
||||||
|
},
|
||||||
"RELATED_RESPONSES": {
|
"RELATED_RESPONSES": {
|
||||||
"TITLE": "Related FAQs",
|
"TITLE": "Related FAQs",
|
||||||
"DESCRIPTION": "These FAQs are generated directly from the document."
|
"DESCRIPTION": "These FAQs are generated directly from the document."
|
||||||
@@ -795,6 +806,7 @@
|
|||||||
"CUSTOM_TOOLS": {
|
"CUSTOM_TOOLS": {
|
||||||
"HEADER": "Tools",
|
"HEADER": "Tools",
|
||||||
"ADD_NEW": "Create a new tool",
|
"ADD_NEW": "Create a new tool",
|
||||||
|
"SOFT_LIMIT_WARNING": "Having more than 10 tools may reduce the assistant's reliability in selecting the right tool. Consider removing unused tools for better results.",
|
||||||
"EMPTY_STATE": {
|
"EMPTY_STATE": {
|
||||||
"TITLE": "No custom tools available",
|
"TITLE": "No custom tools available",
|
||||||
"SUBTITLE": "Create custom tools to connect your assistant with external APIs and services, enabling it to fetch data and perform actions on your behalf.",
|
"SUBTITLE": "Create custom tools to connect your assistant with external APIs and services, enabling it to fetch data and perform actions on your behalf.",
|
||||||
@@ -825,11 +837,18 @@
|
|||||||
"SUCCESS_MESSAGE": "Custom tool deleted successfully",
|
"SUCCESS_MESSAGE": "Custom tool deleted successfully",
|
||||||
"ERROR_MESSAGE": "Failed to delete custom tool"
|
"ERROR_MESSAGE": "Failed to delete custom tool"
|
||||||
},
|
},
|
||||||
|
"TEST": {
|
||||||
|
"BUTTON": "Test connection",
|
||||||
|
"SUCCESS": "Endpoint returned HTTP {status}",
|
||||||
|
"ERROR": "Connection failed",
|
||||||
|
"DISABLED_HINT": "Testing is only available for endpoints without templates or request bodies."
|
||||||
|
},
|
||||||
"FORM": {
|
"FORM": {
|
||||||
"TITLE": {
|
"TITLE": {
|
||||||
"LABEL": "Tool Name",
|
"LABEL": "Tool Name",
|
||||||
"PLACEHOLDER": "Order Lookup",
|
"PLACEHOLDER": "Order Lookup",
|
||||||
"ERROR": "Tool name is required"
|
"ERROR": "Tool name is required",
|
||||||
|
"MAX_LENGTH_ERROR": "Tool name must be {max} characters or fewer"
|
||||||
},
|
},
|
||||||
"DESCRIPTION": {
|
"DESCRIPTION": {
|
||||||
"LABEL": "Описание",
|
"LABEL": "Описание",
|
||||||
|
|||||||
@@ -316,6 +316,18 @@
|
|||||||
"SUCCESS_MESSAGE": "লোকেল সফলভাবে পোর্টাল থেকে সরানো হয়েছে",
|
"SUCCESS_MESSAGE": "লোকেল সফলভাবে পোর্টাল থেকে সরানো হয়েছে",
|
||||||
"ERROR_MESSAGE": "লোকেল পোর্টাল থেকে সরানো যায়নি। আবার চেষ্টা করুন।."
|
"ERROR_MESSAGE": "লোকেল পোর্টাল থেকে সরানো যায়নি। আবার চেষ্টা করুন।."
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"DRAFT_LOCALE": {
|
||||||
|
"API": {
|
||||||
|
"SUCCESS_MESSAGE": "Locale moved to draft successfully",
|
||||||
|
"ERROR_MESSAGE": "Unable to move locale to draft. Try again."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"PUBLISH_LOCALE": {
|
||||||
|
"API": {
|
||||||
|
"SUCCESS_MESSAGE": "Locale published successfully",
|
||||||
|
"ERROR_MESSAGE": "Unable to publish locale. Try again."
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"TABLE": {
|
"TABLE": {
|
||||||
@@ -644,8 +656,11 @@
|
|||||||
"ARTICLES_COUNT": "{count} নিবন্ধ | {count} নিবন্ধসমূহ",
|
"ARTICLES_COUNT": "{count} নিবন্ধ | {count} নিবন্ধসমূহ",
|
||||||
"CATEGORIES_COUNT": "{count} বিভাগ | {count} বিভাগসমূহ",
|
"CATEGORIES_COUNT": "{count} বিভাগ | {count} বিভাগসমূহ",
|
||||||
"DEFAULT": "ডিফল্ট",
|
"DEFAULT": "ডিফল্ট",
|
||||||
|
"DRAFT": "খসড়া",
|
||||||
"DROPDOWN_MENU": {
|
"DROPDOWN_MENU": {
|
||||||
"MAKE_DEFAULT": "ডিফল্ট করুন",
|
"MAKE_DEFAULT": "ডিফল্ট করুন",
|
||||||
|
"MOVE_TO_DRAFT": "Move to draft",
|
||||||
|
"PUBLISH_LOCALE": "Publish locale",
|
||||||
"DELETE": "মুছে ফেলুন"
|
"DELETE": "মুছে ফেলুন"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -655,6 +670,13 @@
|
|||||||
"COMBOBOX": {
|
"COMBOBOX": {
|
||||||
"PLACEHOLDER": "লোকেল নির্বাচন করুন..."
|
"PLACEHOLDER": "লোকেল নির্বাচন করুন..."
|
||||||
},
|
},
|
||||||
|
"STATUS": {
|
||||||
|
"LABEL": "অবস্থা",
|
||||||
|
"OPTIONS": {
|
||||||
|
"LIVE": "প্রকাশিত",
|
||||||
|
"DRAFT": "খসড়া"
|
||||||
|
}
|
||||||
|
},
|
||||||
"API": {
|
"API": {
|
||||||
"SUCCESS_MESSAGE": "লোকেল সফলভাবে যোগ করা হয়েছে",
|
"SUCCESS_MESSAGE": "লোকেল সফলভাবে যোগ করা হয়েছে",
|
||||||
"ERROR_MESSAGE": "লোকেল যোগ করা যায়নি. আবার চেষ্টা করুন."
|
"ERROR_MESSAGE": "লোকেল যোগ করা যায়নি. আবার চেষ্টা করুন."
|
||||||
|
|||||||
@@ -738,6 +738,17 @@
|
|||||||
"DOCUMENTS": {
|
"DOCUMENTS": {
|
||||||
"HEADER": "নথিপত্র",
|
"HEADER": "নথিপত্র",
|
||||||
"ADD_NEW": "নতুন নথি তৈরি করুন",
|
"ADD_NEW": "নতুন নথি তৈরি করুন",
|
||||||
|
"SELECTED": "{count} নির্বাচিত",
|
||||||
|
"SELECT_ALL": "সব নির্বাচন করুন ({count})",
|
||||||
|
"UNSELECT_ALL": "সব নির্বাচন বাতিল করুন ({count})",
|
||||||
|
"BULK_DELETE_BUTTON": "মুছে ফেলুন",
|
||||||
|
"BULK_DELETE": {
|
||||||
|
"TITLE": "Delete documents?",
|
||||||
|
"DESCRIPTION": "Are you sure you want to delete the selected documents? This action cannot be undone.",
|
||||||
|
"CONFIRM": "হ্যাঁ, সব মুছে ফেলুন",
|
||||||
|
"SUCCESS_MESSAGE": "Documents deleted successfully",
|
||||||
|
"ERROR_MESSAGE": "There was an error deleting the documents, please try again."
|
||||||
|
},
|
||||||
"RELATED_RESPONSES": {
|
"RELATED_RESPONSES": {
|
||||||
"TITLE": "সম্পর্কিত FAQ",
|
"TITLE": "সম্পর্কিত FAQ",
|
||||||
"DESCRIPTION": "এই FAQ গুলো সরাসরি ডকুমেন্ট থেকে তৈরি হয়েছে।"
|
"DESCRIPTION": "এই FAQ গুলো সরাসরি ডকুমেন্ট থেকে তৈরি হয়েছে।"
|
||||||
@@ -795,6 +806,7 @@
|
|||||||
"CUSTOM_TOOLS": {
|
"CUSTOM_TOOLS": {
|
||||||
"HEADER": "টুলস",
|
"HEADER": "টুলস",
|
||||||
"ADD_NEW": "নতুন টুল তৈরি করুন",
|
"ADD_NEW": "নতুন টুল তৈরি করুন",
|
||||||
|
"SOFT_LIMIT_WARNING": "Having more than 10 tools may reduce the assistant's reliability in selecting the right tool. Consider removing unused tools for better results.",
|
||||||
"EMPTY_STATE": {
|
"EMPTY_STATE": {
|
||||||
"TITLE": "কোনো কাস্টম টুল নেই",
|
"TITLE": "কোনো কাস্টম টুল নেই",
|
||||||
"SUBTITLE": "আপনার অ্যাসিস্ট্যান্টকে বাহ্যিক API ও সার্ভিসের সাথে সংযুক্ত করতে কাস্টম টুল তৈরি করুন, যাতে এটি আপনার পক্ষ থেকে ডেটা সংগ্রহ ও বিভিন্ন কাজ করতে পারে।.",
|
"SUBTITLE": "আপনার অ্যাসিস্ট্যান্টকে বাহ্যিক API ও সার্ভিসের সাথে সংযুক্ত করতে কাস্টম টুল তৈরি করুন, যাতে এটি আপনার পক্ষ থেকে ডেটা সংগ্রহ ও বিভিন্ন কাজ করতে পারে।.",
|
||||||
@@ -825,11 +837,18 @@
|
|||||||
"SUCCESS_MESSAGE": "কাস্টম টুল সফলভাবে মুছে ফেলা হয়েছে",
|
"SUCCESS_MESSAGE": "কাস্টম টুল সফলভাবে মুছে ফেলা হয়েছে",
|
||||||
"ERROR_MESSAGE": "কাস্টম টুল মুছে ফেলা যায়নি"
|
"ERROR_MESSAGE": "কাস্টম টুল মুছে ফেলা যায়নি"
|
||||||
},
|
},
|
||||||
|
"TEST": {
|
||||||
|
"BUTTON": "Test connection",
|
||||||
|
"SUCCESS": "Endpoint returned HTTP {status}",
|
||||||
|
"ERROR": "Connection failed",
|
||||||
|
"DISABLED_HINT": "Testing is only available for endpoints without templates or request bodies."
|
||||||
|
},
|
||||||
"FORM": {
|
"FORM": {
|
||||||
"TITLE": {
|
"TITLE": {
|
||||||
"LABEL": "টুলের নাম",
|
"LABEL": "টুলের নাম",
|
||||||
"PLACEHOLDER": "অর্ডার অনুসন্ধান",
|
"PLACEHOLDER": "অর্ডার অনুসন্ধান",
|
||||||
"ERROR": "টুলের নাম আবশ্যক"
|
"ERROR": "টুলের নাম আবশ্যক",
|
||||||
|
"MAX_LENGTH_ERROR": "Tool name must be {max} characters or fewer"
|
||||||
},
|
},
|
||||||
"DESCRIPTION": {
|
"DESCRIPTION": {
|
||||||
"LABEL": "বর্ণনা",
|
"LABEL": "বর্ণনা",
|
||||||
|
|||||||
@@ -194,7 +194,7 @@
|
|||||||
"MESSAGING_RESTRICTED_WHATSAPP": "You can only reply using a template message due to 24-hour message window restriction",
|
"MESSAGING_RESTRICTED_WHATSAPP": "You can only reply using a template message due to 24-hour message window restriction",
|
||||||
"MESSAGING_RESTRICTED_API": "You can only reply using a template message due to message window restriction",
|
"MESSAGING_RESTRICTED_API": "You can only reply using a template message due to message window restriction",
|
||||||
"MESSAGE_SIGNATURE_NOT_CONFIGURED": "La signatura del missatge no està configurada, configura-la a la configuració del perfil.",
|
"MESSAGE_SIGNATURE_NOT_CONFIGURED": "La signatura del missatge no està configurada, configura-la a la configuració del perfil.",
|
||||||
"COPILOT_MSG_INPUT": "Give copilot additional prompts, or ask anything else... Press enter to send follow-up",
|
"COPILOT_MSG_INPUT": "Dóna instruccions addicionals a copilot o pregunta qualsevol altra cosa... Prem enter per enviar un seguiment",
|
||||||
"CLICK_HERE": "Fes clic aquí per actualitzar",
|
"CLICK_HERE": "Fes clic aquí per actualitzar",
|
||||||
"WHATSAPP_TEMPLATES": "Plantilles de Whatsapp"
|
"WHATSAPP_TEMPLATES": "Plantilles de Whatsapp"
|
||||||
},
|
},
|
||||||
@@ -214,7 +214,7 @@
|
|||||||
"DRAG_DROP": "Arrossega i deixa anar aquí per adjuntar-lo",
|
"DRAG_DROP": "Arrossega i deixa anar aquí per adjuntar-lo",
|
||||||
"START_AUDIO_RECORDING": "Inicia la gravació d'àudio",
|
"START_AUDIO_RECORDING": "Inicia la gravació d'àudio",
|
||||||
"STOP_AUDIO_RECORDING": "Atura la gravació d'àudio",
|
"STOP_AUDIO_RECORDING": "Atura la gravació d'àudio",
|
||||||
"COPILOT_THINKING": "Copilot is thinking",
|
"COPILOT_THINKING": "Copilot està pensant",
|
||||||
"EMAIL_HEAD": {
|
"EMAIL_HEAD": {
|
||||||
"TO": "A",
|
"TO": "A",
|
||||||
"ADD_BCC": "Afegeix cco",
|
"ADD_BCC": "Afegeix cco",
|
||||||
|
|||||||
@@ -316,6 +316,18 @@
|
|||||||
"SUCCESS_MESSAGE": "La localització s'ha eliminat del portal correctament",
|
"SUCCESS_MESSAGE": "La localització s'ha eliminat del portal correctament",
|
||||||
"ERROR_MESSAGE": "No es pot eliminar la localització del portal. Torna-ho a provar."
|
"ERROR_MESSAGE": "No es pot eliminar la localització del portal. Torna-ho a provar."
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"DRAFT_LOCALE": {
|
||||||
|
"API": {
|
||||||
|
"SUCCESS_MESSAGE": "Locale moved to draft successfully",
|
||||||
|
"ERROR_MESSAGE": "Unable to move locale to draft. Try again."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"PUBLISH_LOCALE": {
|
||||||
|
"API": {
|
||||||
|
"SUCCESS_MESSAGE": "Locale published successfully",
|
||||||
|
"ERROR_MESSAGE": "Unable to publish locale. Try again."
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"TABLE": {
|
"TABLE": {
|
||||||
@@ -644,8 +656,11 @@
|
|||||||
"ARTICLES_COUNT": "{count} article | {count} articles",
|
"ARTICLES_COUNT": "{count} article | {count} articles",
|
||||||
"CATEGORIES_COUNT": "{count} category | {count} categories",
|
"CATEGORIES_COUNT": "{count} category | {count} categories",
|
||||||
"DEFAULT": "Per defecte",
|
"DEFAULT": "Per defecte",
|
||||||
|
"DRAFT": "Esborrany",
|
||||||
"DROPDOWN_MENU": {
|
"DROPDOWN_MENU": {
|
||||||
"MAKE_DEFAULT": "Make default",
|
"MAKE_DEFAULT": "Make default",
|
||||||
|
"MOVE_TO_DRAFT": "Move to draft",
|
||||||
|
"PUBLISH_LOCALE": "Publish locale",
|
||||||
"DELETE": "Esborrar"
|
"DELETE": "Esborrar"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -655,6 +670,13 @@
|
|||||||
"COMBOBOX": {
|
"COMBOBOX": {
|
||||||
"PLACEHOLDER": "Selecciona localització..."
|
"PLACEHOLDER": "Selecciona localització..."
|
||||||
},
|
},
|
||||||
|
"STATUS": {
|
||||||
|
"LABEL": "Estat",
|
||||||
|
"OPTIONS": {
|
||||||
|
"LIVE": "Publicat",
|
||||||
|
"DRAFT": "Esborrany"
|
||||||
|
}
|
||||||
|
},
|
||||||
"API": {
|
"API": {
|
||||||
"SUCCESS_MESSAGE": "La localització s'ha afegit correctament",
|
"SUCCESS_MESSAGE": "La localització s'ha afegit correctament",
|
||||||
"ERROR_MESSAGE": "No es pot afegir la localització. Torna-ho a provar."
|
"ERROR_MESSAGE": "No es pot afegir la localització. Torna-ho a provar."
|
||||||
|
|||||||
@@ -390,72 +390,72 @@
|
|||||||
},
|
},
|
||||||
"CAPTAIN": {
|
"CAPTAIN": {
|
||||||
"NAME": "Captain",
|
"NAME": "Captain",
|
||||||
"HEADER_KNOW_MORE": "Know more",
|
"HEADER_KNOW_MORE": "Saber més",
|
||||||
"ASSISTANT_SWITCHER": {
|
"ASSISTANT_SWITCHER": {
|
||||||
"ASSISTANTS": "Assistants",
|
"ASSISTANTS": "Assistents",
|
||||||
"SWITCH_ASSISTANT": "Switch between assistants",
|
"SWITCH_ASSISTANT": "Canvia entre assistents",
|
||||||
"NEW_ASSISTANT": "Create Assistant",
|
"NEW_ASSISTANT": "Crea un assistent",
|
||||||
"EMPTY_LIST": "No assistants found, please create one to get started"
|
"EMPTY_LIST": "No s'ha trobat cap assistent, si us plau crea'n un per començar"
|
||||||
},
|
},
|
||||||
"COPILOT": {
|
"COPILOT": {
|
||||||
"TITLE": "Copilot",
|
"TITLE": "Copilot",
|
||||||
"TRY_THESE_PROMPTS": "Try these prompts",
|
"TRY_THESE_PROMPTS": "Try these prompts",
|
||||||
"PANEL_TITLE": "Get started with Copilot",
|
"PANEL_TITLE": "Comença amb Copilot",
|
||||||
"KICK_OFF_MESSAGE": "Need a quick summary, want to check past conversations, or draft a better reply? Copilot’s here to speed things up.",
|
"KICK_OFF_MESSAGE": "Necessites un resum ràpid, vols revisar converses anteriors o redactar una resposta millor? Copilot és aquí per accelerar-ho.",
|
||||||
"SEND_MESSAGE": "Envia missatge...",
|
"SEND_MESSAGE": "Envia missatge...",
|
||||||
"EMPTY_MESSAGE": "There was an error generating the response. Please try again.",
|
"EMPTY_MESSAGE": "Hi ha hagut un error generant la resposta. Torna-ho a provar.",
|
||||||
"LOADER": "Captain is thinking",
|
"LOADER": "Captain està pensant",
|
||||||
"YOU": "Tu",
|
"YOU": "Tu",
|
||||||
"USE": "Use this",
|
"USE": "Utilitza això",
|
||||||
"RESET": "Reset",
|
"RESET": "Reinicia",
|
||||||
"SHOW_STEPS": "Show steps",
|
"SHOW_STEPS": "Mostra passos",
|
||||||
"SELECT_ASSISTANT": "Select Assistant",
|
"SELECT_ASSISTANT": "Selecciona Assistente",
|
||||||
"PROMPTS": {
|
"PROMPTS": {
|
||||||
"SUMMARIZE": {
|
"SUMMARIZE": {
|
||||||
"LABEL": "Summarize this conversation",
|
"LABEL": "Resumeix aquesta conversa",
|
||||||
"CONTENT": "Summarize the key points discussed between the customer and the support agent, including the customer's concerns, questions, and the solutions or responses provided by the support agent"
|
"CONTENT": "Resumeix els punts claus que s'han discutit entre el client i l'agent de suport, incloent les preocupacions, preguntes del client i les solucions o respostes aportades per l'agent."
|
||||||
},
|
},
|
||||||
"SUGGEST": {
|
"SUGGEST": {
|
||||||
"LABEL": "Suggest an answer",
|
"LABEL": "Suggerir una resposta",
|
||||||
"CONTENT": "Analyze the customer's inquiry, and draft a response that effectively addresses their concerns or questions. Ensure the reply is clear, concise, and provides helpful information."
|
"CONTENT": "Analitza la consulta del client i redacta una resposta que atiqui eficaçment les seves preocupacions o preguntes. Assegura que la resposta sigui clara, concisa i ofereixi informació útil."
|
||||||
},
|
},
|
||||||
"RATE": {
|
"RATE": {
|
||||||
"LABEL": "Rate this conversation",
|
"LABEL": "Valora aquesta conversa",
|
||||||
"CONTENT": "Review the conversation to see how well it meets the customer's needs. Share a rating out of 5 based on tone, clarity, and effectiveness."
|
"CONTENT": "Revisa la conversa per veure com de bé s'adapta a les necessitats del client. Comparteix una valoració de 5 punts basada en to, claredat i efectivitat."
|
||||||
},
|
},
|
||||||
"HIGH_PRIORITY": {
|
"HIGH_PRIORITY": {
|
||||||
"LABEL": "High priority conversations",
|
"LABEL": "Converses d'alta prioritat",
|
||||||
"CONTENT": "Give me a summary of all high priority open conversations. Include the conversation ID, customer name (if available), last message content, and assigned agent. Group by status if relevant."
|
"CONTENT": "Dóna'm un resum de totes les converses obertes d'alta prioritat. Inclou la ID de la conversa, nom del client (si està disponible), contingut de l'últim missatge i agent assignat. Agrupa per estat si és rellevant."
|
||||||
},
|
},
|
||||||
"LIST_CONTACTS": {
|
"LIST_CONTACTS": {
|
||||||
"LABEL": "List contacts",
|
"LABEL": "Llista de contactes",
|
||||||
"CONTENT": "Show me the list of top 10 contacts. Include name, email or phone number (if available), last seen time, tags (if any)."
|
"CONTENT": "Mostra'm la llista dels 10 contactes principals. Inclou nom, correu electrònic o telèfon (si està disponible), última vegada que es va veure, etiquetes (si n'hi ha)."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"PLAYGROUND": {
|
"PLAYGROUND": {
|
||||||
"USER": "Tu",
|
"USER": "Tu",
|
||||||
"ASSISTANT": "Assistant",
|
"ASSISTANT": "Assistent",
|
||||||
"MESSAGE_PLACEHOLDER": "Escriu el missatge...",
|
"MESSAGE_PLACEHOLDER": "Escriu el missatge...",
|
||||||
"HEADER": "Playground",
|
"HEADER": "Zona de proves",
|
||||||
"DESCRIPTION": "Use this playground to send messages to your assistant and check if it responds accurately, quickly, and in the tone you expect.",
|
"DESCRIPTION": "Utilitza aquest espai de proves per enviar missatges al teu assistent i comprovar si respon de manera precisa, ràpida i amb el to que esperes.",
|
||||||
"CREDIT_NOTE": "Messages sent here will count toward your Captain credits."
|
"CREDIT_NOTE": "Els missatges enviats aquí comptaran per als teus crèdits de Captain."
|
||||||
},
|
},
|
||||||
"PAYWALL": {
|
"PAYWALL": {
|
||||||
"TITLE": "Upgrade to use Captain AI",
|
"TITLE": "Actualitza per usar Captain AI",
|
||||||
"AVAILABLE_ON": "Captain is not available on the free plan.",
|
"AVAILABLE_ON": "Captain no està disponible en el pla gratuït.",
|
||||||
"UPGRADE_PROMPT": "Upgrade your plan to get access to our assistants, copilot and more.",
|
"UPGRADE_PROMPT": "Actualitza el teu pla per accedir als nostres assistents, copilot i més.",
|
||||||
"UPGRADE_NOW": "Actualitza ara",
|
"UPGRADE_NOW": "Actualitza ara",
|
||||||
"CANCEL_ANYTIME": "Pots canviar o cancel·lar el teu pla en qualsevol moment"
|
"CANCEL_ANYTIME": "Pots canviar o cancel·lar el teu pla en qualsevol moment"
|
||||||
},
|
},
|
||||||
"ENTERPRISE_PAYWALL": {
|
"ENTERPRISE_PAYWALL": {
|
||||||
"AVAILABLE_ON": "Captain AI is only available in the Enterprise plans.",
|
"AVAILABLE_ON": "Captain AI només està disponible en els plans Enterprise.",
|
||||||
"UPGRADE_PROMPT": "Upgrade your plan to get access to our assistants, copilot and more.",
|
"UPGRADE_PROMPT": "Actualitza el teu pla per accedir als nostres assistents, copilot i més.",
|
||||||
"ASK_ADMIN": "Posa't en contacte amb el vostre administrador per obtenir l'actualització."
|
"ASK_ADMIN": "Posa't en contacte amb el vostre administrador per obtenir l'actualització."
|
||||||
},
|
},
|
||||||
"BANNER": {
|
"BANNER": {
|
||||||
"RESPONSES": "You've used over 80% of your response limit. To continue using Captain AI, please upgrade.",
|
"RESPONSES": "Has utilitzat més del 80% del teu límit de respostes. Per continuar utilitzant Captain AI, si us plau actualitza.",
|
||||||
"DOCUMENTS": "Document limit reached. Upgrade to continue using Captain AI."
|
"DOCUMENTS": "S'ha arribat al límit de documents. Actualitza per continuar utilitzant Captain AI."
|
||||||
},
|
},
|
||||||
"FORM": {
|
"FORM": {
|
||||||
"CANCEL": "Cancel·la",
|
"CANCEL": "Cancel·la",
|
||||||
@@ -738,6 +738,17 @@
|
|||||||
"DOCUMENTS": {
|
"DOCUMENTS": {
|
||||||
"HEADER": "Documents",
|
"HEADER": "Documents",
|
||||||
"ADD_NEW": "Create a new document",
|
"ADD_NEW": "Create a new document",
|
||||||
|
"SELECTED": "{count} selected",
|
||||||
|
"SELECT_ALL": "Select all ({count})",
|
||||||
|
"UNSELECT_ALL": "Unselect all ({count})",
|
||||||
|
"BULK_DELETE_BUTTON": "Esborrar",
|
||||||
|
"BULK_DELETE": {
|
||||||
|
"TITLE": "Delete documents?",
|
||||||
|
"DESCRIPTION": "Are you sure you want to delete the selected documents? This action cannot be undone.",
|
||||||
|
"CONFIRM": "Yes, delete all",
|
||||||
|
"SUCCESS_MESSAGE": "Documents deleted successfully",
|
||||||
|
"ERROR_MESSAGE": "There was an error deleting the documents, please try again."
|
||||||
|
},
|
||||||
"RELATED_RESPONSES": {
|
"RELATED_RESPONSES": {
|
||||||
"TITLE": "Related FAQs",
|
"TITLE": "Related FAQs",
|
||||||
"DESCRIPTION": "These FAQs are generated directly from the document."
|
"DESCRIPTION": "These FAQs are generated directly from the document."
|
||||||
@@ -795,6 +806,7 @@
|
|||||||
"CUSTOM_TOOLS": {
|
"CUSTOM_TOOLS": {
|
||||||
"HEADER": "Tools",
|
"HEADER": "Tools",
|
||||||
"ADD_NEW": "Create a new tool",
|
"ADD_NEW": "Create a new tool",
|
||||||
|
"SOFT_LIMIT_WARNING": "Having more than 10 tools may reduce the assistant's reliability in selecting the right tool. Consider removing unused tools for better results.",
|
||||||
"EMPTY_STATE": {
|
"EMPTY_STATE": {
|
||||||
"TITLE": "No custom tools available",
|
"TITLE": "No custom tools available",
|
||||||
"SUBTITLE": "Create custom tools to connect your assistant with external APIs and services, enabling it to fetch data and perform actions on your behalf.",
|
"SUBTITLE": "Create custom tools to connect your assistant with external APIs and services, enabling it to fetch data and perform actions on your behalf.",
|
||||||
@@ -825,11 +837,18 @@
|
|||||||
"SUCCESS_MESSAGE": "Custom tool deleted successfully",
|
"SUCCESS_MESSAGE": "Custom tool deleted successfully",
|
||||||
"ERROR_MESSAGE": "Failed to delete custom tool"
|
"ERROR_MESSAGE": "Failed to delete custom tool"
|
||||||
},
|
},
|
||||||
|
"TEST": {
|
||||||
|
"BUTTON": "Test connection",
|
||||||
|
"SUCCESS": "Endpoint returned HTTP {status}",
|
||||||
|
"ERROR": "Connection failed",
|
||||||
|
"DISABLED_HINT": "Testing is only available for endpoints without templates or request bodies."
|
||||||
|
},
|
||||||
"FORM": {
|
"FORM": {
|
||||||
"TITLE": {
|
"TITLE": {
|
||||||
"LABEL": "Tool Name",
|
"LABEL": "Tool Name",
|
||||||
"PLACEHOLDER": "Order Lookup",
|
"PLACEHOLDER": "Order Lookup",
|
||||||
"ERROR": "Tool name is required"
|
"ERROR": "Tool name is required",
|
||||||
|
"MAX_LENGTH_ERROR": "Tool name must be {max} characters or fewer"
|
||||||
},
|
},
|
||||||
"DESCRIPTION": {
|
"DESCRIPTION": {
|
||||||
"LABEL": "Descripció",
|
"LABEL": "Descripció",
|
||||||
|
|||||||
@@ -194,7 +194,7 @@
|
|||||||
"MESSAGING_RESTRICTED_WHATSAPP": "You can only reply using a template message due to 24-hour message window restriction",
|
"MESSAGING_RESTRICTED_WHATSAPP": "You can only reply using a template message due to 24-hour message window restriction",
|
||||||
"MESSAGING_RESTRICTED_API": "You can only reply using a template message due to message window restriction",
|
"MESSAGING_RESTRICTED_API": "You can only reply using a template message due to message window restriction",
|
||||||
"MESSAGE_SIGNATURE_NOT_CONFIGURED": "Podpis zprávy není nakonfigurován, prosím nakonfigurujte jej v nastavení profilu.",
|
"MESSAGE_SIGNATURE_NOT_CONFIGURED": "Podpis zprávy není nakonfigurován, prosím nakonfigurujte jej v nastavení profilu.",
|
||||||
"COPILOT_MSG_INPUT": "Give copilot additional prompts, or ask anything else... Press enter to send follow-up",
|
"COPILOT_MSG_INPUT": "Dejte copilotu další podněty nebo se zeptejte na cokoliv dalšího... Stiskněte Enter pro odeslání pokračování",
|
||||||
"CLICK_HERE": "Klikněte zde pro aktualizaci",
|
"CLICK_HERE": "Klikněte zde pro aktualizaci",
|
||||||
"WHATSAPP_TEMPLATES": "Whatsapp Templates"
|
"WHATSAPP_TEMPLATES": "Whatsapp Templates"
|
||||||
},
|
},
|
||||||
@@ -214,7 +214,7 @@
|
|||||||
"DRAG_DROP": "Přetažením sem připojíte",
|
"DRAG_DROP": "Přetažením sem připojíte",
|
||||||
"START_AUDIO_RECORDING": "Spustit nahrávání zvuku",
|
"START_AUDIO_RECORDING": "Spustit nahrávání zvuku",
|
||||||
"STOP_AUDIO_RECORDING": "Zastavit nahrávání zvuku",
|
"STOP_AUDIO_RECORDING": "Zastavit nahrávání zvuku",
|
||||||
"COPILOT_THINKING": "Copilot is thinking",
|
"COPILOT_THINKING": "Copilot přemýšlí",
|
||||||
"EMAIL_HEAD": {
|
"EMAIL_HEAD": {
|
||||||
"TO": "TO",
|
"TO": "TO",
|
||||||
"ADD_BCC": "Přidat bcc",
|
"ADD_BCC": "Přidat bcc",
|
||||||
|
|||||||
@@ -316,6 +316,18 @@
|
|||||||
"SUCCESS_MESSAGE": "Locale removed from portal successfully",
|
"SUCCESS_MESSAGE": "Locale removed from portal successfully",
|
||||||
"ERROR_MESSAGE": "Unable to remove locale from portal. Try again."
|
"ERROR_MESSAGE": "Unable to remove locale from portal. Try again."
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"DRAFT_LOCALE": {
|
||||||
|
"API": {
|
||||||
|
"SUCCESS_MESSAGE": "Locale moved to draft successfully",
|
||||||
|
"ERROR_MESSAGE": "Unable to move locale to draft. Try again."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"PUBLISH_LOCALE": {
|
||||||
|
"API": {
|
||||||
|
"SUCCESS_MESSAGE": "Locale published successfully",
|
||||||
|
"ERROR_MESSAGE": "Unable to publish locale. Try again."
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"TABLE": {
|
"TABLE": {
|
||||||
@@ -644,8 +656,11 @@
|
|||||||
"ARTICLES_COUNT": "{count} article | {count} articles",
|
"ARTICLES_COUNT": "{count} article | {count} articles",
|
||||||
"CATEGORIES_COUNT": "{count} category | {count} categories",
|
"CATEGORIES_COUNT": "{count} category | {count} categories",
|
||||||
"DEFAULT": "Default",
|
"DEFAULT": "Default",
|
||||||
|
"DRAFT": "Koncept",
|
||||||
"DROPDOWN_MENU": {
|
"DROPDOWN_MENU": {
|
||||||
"MAKE_DEFAULT": "Make default",
|
"MAKE_DEFAULT": "Make default",
|
||||||
|
"MOVE_TO_DRAFT": "Move to draft",
|
||||||
|
"PUBLISH_LOCALE": "Publish locale",
|
||||||
"DELETE": "Vymazat"
|
"DELETE": "Vymazat"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -655,6 +670,13 @@
|
|||||||
"COMBOBOX": {
|
"COMBOBOX": {
|
||||||
"PLACEHOLDER": "Select locale..."
|
"PLACEHOLDER": "Select locale..."
|
||||||
},
|
},
|
||||||
|
"STATUS": {
|
||||||
|
"LABEL": "Stav",
|
||||||
|
"OPTIONS": {
|
||||||
|
"LIVE": "Publikované",
|
||||||
|
"DRAFT": "Koncept"
|
||||||
|
}
|
||||||
|
},
|
||||||
"API": {
|
"API": {
|
||||||
"SUCCESS_MESSAGE": "Locale added successfully",
|
"SUCCESS_MESSAGE": "Locale added successfully",
|
||||||
"ERROR_MESSAGE": "Unable to add locale. Try again."
|
"ERROR_MESSAGE": "Unable to add locale. Try again."
|
||||||
|
|||||||
@@ -390,72 +390,72 @@
|
|||||||
},
|
},
|
||||||
"CAPTAIN": {
|
"CAPTAIN": {
|
||||||
"NAME": "Captain",
|
"NAME": "Captain",
|
||||||
"HEADER_KNOW_MORE": "Know more",
|
"HEADER_KNOW_MORE": "Zjistit více",
|
||||||
"ASSISTANT_SWITCHER": {
|
"ASSISTANT_SWITCHER": {
|
||||||
"ASSISTANTS": "Assistants",
|
"ASSISTANTS": "Asistenti",
|
||||||
"SWITCH_ASSISTANT": "Switch between assistants",
|
"SWITCH_ASSISTANT": "Přepínání mezi asistenty",
|
||||||
"NEW_ASSISTANT": "Create Assistant",
|
"NEW_ASSISTANT": "Vytvořit asistenta",
|
||||||
"EMPTY_LIST": "No assistants found, please create one to get started"
|
"EMPTY_LIST": "Nebyli nalezeni žádní asistenti, prosím vytvořte si jednoho pro začátek"
|
||||||
},
|
},
|
||||||
"COPILOT": {
|
"COPILOT": {
|
||||||
"TITLE": "Copilot",
|
"TITLE": "Copilot",
|
||||||
"TRY_THESE_PROMPTS": "Try these prompts",
|
"TRY_THESE_PROMPTS": "Try these prompts",
|
||||||
"PANEL_TITLE": "Get started with Copilot",
|
"PANEL_TITLE": "Začněte s Copilotem",
|
||||||
"KICK_OFF_MESSAGE": "Need a quick summary, want to check past conversations, or draft a better reply? Copilot’s here to speed things up.",
|
"KICK_OFF_MESSAGE": "Potřebujete rychlý přehled, chcete zkontrolovat předchozí rozhovory, nebo vytvořit lepší odpověď? Copilot je tu, aby to zrychlil.",
|
||||||
"SEND_MESSAGE": "Send message...",
|
"SEND_MESSAGE": "Send message...",
|
||||||
"EMPTY_MESSAGE": "There was an error generating the response. Please try again.",
|
"EMPTY_MESSAGE": "Při generování odpovědi došlo k chybě. Zkuste to prosím znovu.",
|
||||||
"LOADER": "Captain is thinking",
|
"LOADER": "Captain přemýšlí",
|
||||||
"YOU": "Vy",
|
"YOU": "Vy",
|
||||||
"USE": "Use this",
|
"USE": "Použít toto",
|
||||||
"RESET": "Reset",
|
"RESET": "Resetovat",
|
||||||
"SHOW_STEPS": "Show steps",
|
"SHOW_STEPS": "Zobrazit kroky",
|
||||||
"SELECT_ASSISTANT": "Select Assistant",
|
"SELECT_ASSISTANT": "Vybrat asistenta",
|
||||||
"PROMPTS": {
|
"PROMPTS": {
|
||||||
"SUMMARIZE": {
|
"SUMMARIZE": {
|
||||||
"LABEL": "Summarize this conversation",
|
"LABEL": "Shrň tuto konverzaci",
|
||||||
"CONTENT": "Summarize the key points discussed between the customer and the support agent, including the customer's concerns, questions, and the solutions or responses provided by the support agent"
|
"CONTENT": "Shrň klíčové body diskutované mezi zákazníkem a podpůrným agentem, včetně obav zákazníka, otázek a řešení nebo odpovědí poskytnutých agentem podpory"
|
||||||
},
|
},
|
||||||
"SUGGEST": {
|
"SUGGEST": {
|
||||||
"LABEL": "Suggest an answer",
|
"LABEL": "Navrhni odpověď",
|
||||||
"CONTENT": "Analyze the customer's inquiry, and draft a response that effectively addresses their concerns or questions. Ensure the reply is clear, concise, and provides helpful information."
|
"CONTENT": "Analyzuj dotaz zákazníka a vytvoř odpověď, která efektivně řeší jeho obavy nebo otázky. Zajisti, aby byla odpověď jasná, stručná a poskytovala užitečné informace."
|
||||||
},
|
},
|
||||||
"RATE": {
|
"RATE": {
|
||||||
"LABEL": "Rate this conversation",
|
"LABEL": "Ohodnoť tuto konverzaci",
|
||||||
"CONTENT": "Review the conversation to see how well it meets the customer's needs. Share a rating out of 5 based on tone, clarity, and effectiveness."
|
"CONTENT": "Prohlédni konverzaci a zhodnoť, jak dobře odpovídá potřebám zákazníka. Sdílej hodnocení od 1 do 5 na základě tónu, srozumitelnosti a efektivity."
|
||||||
},
|
},
|
||||||
"HIGH_PRIORITY": {
|
"HIGH_PRIORITY": {
|
||||||
"LABEL": "High priority conversations",
|
"LABEL": "Konverzace s vysokou prioritou",
|
||||||
"CONTENT": "Give me a summary of all high priority open conversations. Include the conversation ID, customer name (if available), last message content, and assigned agent. Group by status if relevant."
|
"CONTENT": "Dej mi shrnutí všech otevřených konverzací s vysokou prioritou. Uveď ID konverzace, jméno zákazníka (pokud je k dispozici), obsah poslední zprávy a přiděleného agenta. Pokud je relevantní, seskup je podle stavu."
|
||||||
},
|
},
|
||||||
"LIST_CONTACTS": {
|
"LIST_CONTACTS": {
|
||||||
"LABEL": "List contacts",
|
"LABEL": "Seznam kontaktů",
|
||||||
"CONTENT": "Show me the list of top 10 contacts. Include name, email or phone number (if available), last seen time, tags (if any)."
|
"CONTENT": "Ukázat seznam 10 nejlepších kontaktů. Uveď jméno, email nebo telefonní číslo (pokud je k dispozici), čas posledního přístupu, štítky (pokud jsou)."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"PLAYGROUND": {
|
"PLAYGROUND": {
|
||||||
"USER": "Vy",
|
"USER": "Vy",
|
||||||
"ASSISTANT": "Assistant",
|
"ASSISTANT": "Asistent",
|
||||||
"MESSAGE_PLACEHOLDER": "Zde začněte psát...",
|
"MESSAGE_PLACEHOLDER": "Zde začněte psát...",
|
||||||
"HEADER": "Playground",
|
"HEADER": "Hřiště",
|
||||||
"DESCRIPTION": "Use this playground to send messages to your assistant and check if it responds accurately, quickly, and in the tone you expect.",
|
"DESCRIPTION": "Použijte toto hřiště pro odesílání zpráv vašemu asistentovi a ověřte, zda odpovídá přesně, rychle a v očekávaném tónu.",
|
||||||
"CREDIT_NOTE": "Messages sent here will count toward your Captain credits."
|
"CREDIT_NOTE": "Zprávy odeslané zde se budou počítat do vašich kreditů Captain."
|
||||||
},
|
},
|
||||||
"PAYWALL": {
|
"PAYWALL": {
|
||||||
"TITLE": "Upgrade to use Captain AI",
|
"TITLE": "Upgradujte pro používání Captain AI",
|
||||||
"AVAILABLE_ON": "Captain is not available on the free plan.",
|
"AVAILABLE_ON": "Captain není dostupný v bezplatném plánu.",
|
||||||
"UPGRADE_PROMPT": "Upgrade your plan to get access to our assistants, copilot and more.",
|
"UPGRADE_PROMPT": "Upgradujte svůj plán, abyste získali přístup k našim asistentům, copilotu a dalším funkcím.",
|
||||||
"UPGRADE_NOW": "Upgrade now",
|
"UPGRADE_NOW": "Upgrade now",
|
||||||
"CANCEL_ANYTIME": "You can change or cancel your plan anytime"
|
"CANCEL_ANYTIME": "You can change or cancel your plan anytime"
|
||||||
},
|
},
|
||||||
"ENTERPRISE_PAYWALL": {
|
"ENTERPRISE_PAYWALL": {
|
||||||
"AVAILABLE_ON": "Captain AI is only available in the Enterprise plans.",
|
"AVAILABLE_ON": "Captain AI je dostupný pouze v podnicích plánech.",
|
||||||
"UPGRADE_PROMPT": "Upgrade your plan to get access to our assistants, copilot and more.",
|
"UPGRADE_PROMPT": "Upgradujte svůj plán, abyste získali přístup k našim asistentům, copilotu a dalším funkcím.",
|
||||||
"ASK_ADMIN": "Please reach out to your administrator for the upgrade."
|
"ASK_ADMIN": "Please reach out to your administrator for the upgrade."
|
||||||
},
|
},
|
||||||
"BANNER": {
|
"BANNER": {
|
||||||
"RESPONSES": "You've used over 80% of your response limit. To continue using Captain AI, please upgrade.",
|
"RESPONSES": "Vyčerpali jste více než 80 % svého limitu odpovědí. Pro pokračování v používání Captain AI upgradujte.",
|
||||||
"DOCUMENTS": "Document limit reached. Upgrade to continue using Captain AI."
|
"DOCUMENTS": "Limit dokumentů byl dosažen. Pro pokračování v používání Captain AI upgradujte."
|
||||||
},
|
},
|
||||||
"FORM": {
|
"FORM": {
|
||||||
"CANCEL": "Zrušit",
|
"CANCEL": "Zrušit",
|
||||||
@@ -738,6 +738,17 @@
|
|||||||
"DOCUMENTS": {
|
"DOCUMENTS": {
|
||||||
"HEADER": "Documents",
|
"HEADER": "Documents",
|
||||||
"ADD_NEW": "Create a new document",
|
"ADD_NEW": "Create a new document",
|
||||||
|
"SELECTED": "{count} selected",
|
||||||
|
"SELECT_ALL": "Select all ({count})",
|
||||||
|
"UNSELECT_ALL": "Unselect all ({count})",
|
||||||
|
"BULK_DELETE_BUTTON": "Vymazat",
|
||||||
|
"BULK_DELETE": {
|
||||||
|
"TITLE": "Delete documents?",
|
||||||
|
"DESCRIPTION": "Are you sure you want to delete the selected documents? This action cannot be undone.",
|
||||||
|
"CONFIRM": "Yes, delete all",
|
||||||
|
"SUCCESS_MESSAGE": "Documents deleted successfully",
|
||||||
|
"ERROR_MESSAGE": "There was an error deleting the documents, please try again."
|
||||||
|
},
|
||||||
"RELATED_RESPONSES": {
|
"RELATED_RESPONSES": {
|
||||||
"TITLE": "Related FAQs",
|
"TITLE": "Related FAQs",
|
||||||
"DESCRIPTION": "These FAQs are generated directly from the document."
|
"DESCRIPTION": "These FAQs are generated directly from the document."
|
||||||
@@ -795,6 +806,7 @@
|
|||||||
"CUSTOM_TOOLS": {
|
"CUSTOM_TOOLS": {
|
||||||
"HEADER": "Tools",
|
"HEADER": "Tools",
|
||||||
"ADD_NEW": "Create a new tool",
|
"ADD_NEW": "Create a new tool",
|
||||||
|
"SOFT_LIMIT_WARNING": "Having more than 10 tools may reduce the assistant's reliability in selecting the right tool. Consider removing unused tools for better results.",
|
||||||
"EMPTY_STATE": {
|
"EMPTY_STATE": {
|
||||||
"TITLE": "No custom tools available",
|
"TITLE": "No custom tools available",
|
||||||
"SUBTITLE": "Create custom tools to connect your assistant with external APIs and services, enabling it to fetch data and perform actions on your behalf.",
|
"SUBTITLE": "Create custom tools to connect your assistant with external APIs and services, enabling it to fetch data and perform actions on your behalf.",
|
||||||
@@ -825,11 +837,18 @@
|
|||||||
"SUCCESS_MESSAGE": "Custom tool deleted successfully",
|
"SUCCESS_MESSAGE": "Custom tool deleted successfully",
|
||||||
"ERROR_MESSAGE": "Failed to delete custom tool"
|
"ERROR_MESSAGE": "Failed to delete custom tool"
|
||||||
},
|
},
|
||||||
|
"TEST": {
|
||||||
|
"BUTTON": "Test connection",
|
||||||
|
"SUCCESS": "Endpoint returned HTTP {status}",
|
||||||
|
"ERROR": "Connection failed",
|
||||||
|
"DISABLED_HINT": "Testing is only available for endpoints without templates or request bodies."
|
||||||
|
},
|
||||||
"FORM": {
|
"FORM": {
|
||||||
"TITLE": {
|
"TITLE": {
|
||||||
"LABEL": "Tool Name",
|
"LABEL": "Tool Name",
|
||||||
"PLACEHOLDER": "Order Lookup",
|
"PLACEHOLDER": "Order Lookup",
|
||||||
"ERROR": "Tool name is required"
|
"ERROR": "Tool name is required",
|
||||||
|
"MAX_LENGTH_ERROR": "Tool name must be {max} characters or fewer"
|
||||||
},
|
},
|
||||||
"DESCRIPTION": {
|
"DESCRIPTION": {
|
||||||
"LABEL": "Description",
|
"LABEL": "Description",
|
||||||
|
|||||||
@@ -194,7 +194,7 @@
|
|||||||
"MESSAGING_RESTRICTED_WHATSAPP": "You can only reply using a template message due to 24-hour message window restriction",
|
"MESSAGING_RESTRICTED_WHATSAPP": "You can only reply using a template message due to 24-hour message window restriction",
|
||||||
"MESSAGING_RESTRICTED_API": "You can only reply using a template message due to message window restriction",
|
"MESSAGING_RESTRICTED_API": "You can only reply using a template message due to message window restriction",
|
||||||
"MESSAGE_SIGNATURE_NOT_CONFIGURED": "Beskedsignatur er ikke konfigureret, konfigurer den i profilindstillinger.",
|
"MESSAGE_SIGNATURE_NOT_CONFIGURED": "Beskedsignatur er ikke konfigureret, konfigurer den i profilindstillinger.",
|
||||||
"COPILOT_MSG_INPUT": "Give copilot additional prompts, or ask anything else... Press enter to send follow-up",
|
"COPILOT_MSG_INPUT": "Giv copilot yderligere prompts, eller spørg om noget andet... Tryk enter for at sende opfølgning",
|
||||||
"CLICK_HERE": "Klik her for at opdatere",
|
"CLICK_HERE": "Klik her for at opdatere",
|
||||||
"WHATSAPP_TEMPLATES": "Whatsapp Skabeloner"
|
"WHATSAPP_TEMPLATES": "Whatsapp Skabeloner"
|
||||||
},
|
},
|
||||||
@@ -214,7 +214,7 @@
|
|||||||
"DRAG_DROP": "Træk og slip her for at vedhæfte",
|
"DRAG_DROP": "Træk og slip her for at vedhæfte",
|
||||||
"START_AUDIO_RECORDING": "Start lydoptagelse",
|
"START_AUDIO_RECORDING": "Start lydoptagelse",
|
||||||
"STOP_AUDIO_RECORDING": "Stop lydoptagelse",
|
"STOP_AUDIO_RECORDING": "Stop lydoptagelse",
|
||||||
"COPILOT_THINKING": "Copilot is thinking",
|
"COPILOT_THINKING": "Copilot tænker",
|
||||||
"EMAIL_HEAD": {
|
"EMAIL_HEAD": {
|
||||||
"TO": "TO",
|
"TO": "TO",
|
||||||
"ADD_BCC": "Tilføj bcc",
|
"ADD_BCC": "Tilføj bcc",
|
||||||
|
|||||||
@@ -316,6 +316,18 @@
|
|||||||
"SUCCESS_MESSAGE": "Landestandard fjernet fra portal",
|
"SUCCESS_MESSAGE": "Landestandard fjernet fra portal",
|
||||||
"ERROR_MESSAGE": "Kan ikke fjerne landestandard fra portalen. Prøv igen."
|
"ERROR_MESSAGE": "Kan ikke fjerne landestandard fra portalen. Prøv igen."
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"DRAFT_LOCALE": {
|
||||||
|
"API": {
|
||||||
|
"SUCCESS_MESSAGE": "Locale moved to draft successfully",
|
||||||
|
"ERROR_MESSAGE": "Unable to move locale to draft. Try again."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"PUBLISH_LOCALE": {
|
||||||
|
"API": {
|
||||||
|
"SUCCESS_MESSAGE": "Locale published successfully",
|
||||||
|
"ERROR_MESSAGE": "Unable to publish locale. Try again."
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"TABLE": {
|
"TABLE": {
|
||||||
@@ -644,8 +656,11 @@
|
|||||||
"ARTICLES_COUNT": "{count} article | {count} articles",
|
"ARTICLES_COUNT": "{count} article | {count} articles",
|
||||||
"CATEGORIES_COUNT": "{count} category | {count} categories",
|
"CATEGORIES_COUNT": "{count} category | {count} categories",
|
||||||
"DEFAULT": "Standard",
|
"DEFAULT": "Standard",
|
||||||
|
"DRAFT": "Kladde",
|
||||||
"DROPDOWN_MENU": {
|
"DROPDOWN_MENU": {
|
||||||
"MAKE_DEFAULT": "Make default",
|
"MAKE_DEFAULT": "Make default",
|
||||||
|
"MOVE_TO_DRAFT": "Move to draft",
|
||||||
|
"PUBLISH_LOCALE": "Publish locale",
|
||||||
"DELETE": "Slet"
|
"DELETE": "Slet"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -655,6 +670,13 @@
|
|||||||
"COMBOBOX": {
|
"COMBOBOX": {
|
||||||
"PLACEHOLDER": "Select locale..."
|
"PLACEHOLDER": "Select locale..."
|
||||||
},
|
},
|
||||||
|
"STATUS": {
|
||||||
|
"LABEL": "Status",
|
||||||
|
"OPTIONS": {
|
||||||
|
"LIVE": "Publiceret",
|
||||||
|
"DRAFT": "Kladde"
|
||||||
|
}
|
||||||
|
},
|
||||||
"API": {
|
"API": {
|
||||||
"SUCCESS_MESSAGE": "Landestandard tilføjet",
|
"SUCCESS_MESSAGE": "Landestandard tilføjet",
|
||||||
"ERROR_MESSAGE": "Kan ikke tilføje locale. Prøv igen."
|
"ERROR_MESSAGE": "Kan ikke tilføje locale. Prøv igen."
|
||||||
|
|||||||
@@ -390,72 +390,72 @@
|
|||||||
},
|
},
|
||||||
"CAPTAIN": {
|
"CAPTAIN": {
|
||||||
"NAME": "Captain",
|
"NAME": "Captain",
|
||||||
"HEADER_KNOW_MORE": "Know more",
|
"HEADER_KNOW_MORE": "Få mere at vide",
|
||||||
"ASSISTANT_SWITCHER": {
|
"ASSISTANT_SWITCHER": {
|
||||||
"ASSISTANTS": "Assistants",
|
"ASSISTANTS": "Assistenter",
|
||||||
"SWITCH_ASSISTANT": "Switch between assistants",
|
"SWITCH_ASSISTANT": "Skift mellem assistenter",
|
||||||
"NEW_ASSISTANT": "Create Assistant",
|
"NEW_ASSISTANT": "Opret assistent",
|
||||||
"EMPTY_LIST": "No assistants found, please create one to get started"
|
"EMPTY_LIST": "Ingen assistenter fundet, opret en for at komme i gang"
|
||||||
},
|
},
|
||||||
"COPILOT": {
|
"COPILOT": {
|
||||||
"TITLE": "Copilot",
|
"TITLE": "Copilot",
|
||||||
"TRY_THESE_PROMPTS": "Try these prompts",
|
"TRY_THESE_PROMPTS": "Try these prompts",
|
||||||
"PANEL_TITLE": "Get started with Copilot",
|
"PANEL_TITLE": "Kom godt i gang med Copilot",
|
||||||
"KICK_OFF_MESSAGE": "Need a quick summary, want to check past conversations, or draft a better reply? Copilot’s here to speed things up.",
|
"KICK_OFF_MESSAGE": "Brug for et hurtigt sammendrag, vil du tjekke tidligere samtaler eller udarbejde et bedre svar? Copilot er her for at fremskynde processen.",
|
||||||
"SEND_MESSAGE": "Send besked...",
|
"SEND_MESSAGE": "Send besked...",
|
||||||
"EMPTY_MESSAGE": "There was an error generating the response. Please try again.",
|
"EMPTY_MESSAGE": "Der opstod en fejl ved generering af svaret. Prøv igen.",
|
||||||
"LOADER": "Captain is thinking",
|
"LOADER": "Captain tænker",
|
||||||
"YOU": "Dig",
|
"YOU": "Dig",
|
||||||
"USE": "Use this",
|
"USE": "Brug dette",
|
||||||
"RESET": "Reset",
|
"RESET": "Nulstil",
|
||||||
"SHOW_STEPS": "Show steps",
|
"SHOW_STEPS": "Vis trin",
|
||||||
"SELECT_ASSISTANT": "Select Assistant",
|
"SELECT_ASSISTANT": "Vælg assistent",
|
||||||
"PROMPTS": {
|
"PROMPTS": {
|
||||||
"SUMMARIZE": {
|
"SUMMARIZE": {
|
||||||
"LABEL": "Summarize this conversation",
|
"LABEL": "Sammenfat denne samtale",
|
||||||
"CONTENT": "Summarize the key points discussed between the customer and the support agent, including the customer's concerns, questions, and the solutions or responses provided by the support agent"
|
"CONTENT": "Sammenfat hovedpunkterne diskuteret mellem kunden og supportagenten, inklusive kundens bekymringer, spørgsmål og de løsninger eller svar, supportagenten har givet"
|
||||||
},
|
},
|
||||||
"SUGGEST": {
|
"SUGGEST": {
|
||||||
"LABEL": "Suggest an answer",
|
"LABEL": "Foreslå et svar",
|
||||||
"CONTENT": "Analyze the customer's inquiry, and draft a response that effectively addresses their concerns or questions. Ensure the reply is clear, concise, and provides helpful information."
|
"CONTENT": "Analyser kundens forespørgsel, og udarbejd et svar, der effektivt imødekommer deres bekymringer eller spørgsmål. Sørg for, at svaret er klart, præcist og giver nyttige oplysninger."
|
||||||
},
|
},
|
||||||
"RATE": {
|
"RATE": {
|
||||||
"LABEL": "Rate this conversation",
|
"LABEL": "Vurder denne samtale",
|
||||||
"CONTENT": "Review the conversation to see how well it meets the customer's needs. Share a rating out of 5 based on tone, clarity, and effectiveness."
|
"CONTENT": "Gennemgå samtalen for at se, hvor godt den opfylder kundens behov. Del en vurdering ud af 5 baseret på tone, klarhed og effektivitet."
|
||||||
},
|
},
|
||||||
"HIGH_PRIORITY": {
|
"HIGH_PRIORITY": {
|
||||||
"LABEL": "High priority conversations",
|
"LABEL": "Samtaler med høj prioritet",
|
||||||
"CONTENT": "Give me a summary of all high priority open conversations. Include the conversation ID, customer name (if available), last message content, and assigned agent. Group by status if relevant."
|
"CONTENT": "Giv mig et sammendrag af alle åbne samtaler med høj prioritet. Inkluder samtale-ID, kundens navn (hvis tilgængeligt), indholdet af sidste besked og tildelt agent. Grupper efter status, hvis relevant."
|
||||||
},
|
},
|
||||||
"LIST_CONTACTS": {
|
"LIST_CONTACTS": {
|
||||||
"LABEL": "List contacts",
|
"LABEL": "Liste over kontakter",
|
||||||
"CONTENT": "Show me the list of top 10 contacts. Include name, email or phone number (if available), last seen time, tags (if any)."
|
"CONTENT": "Vis mig listen over de 10 bedste kontakter. Inkluder navn, e-mail eller telefonnummer (hvis tilgængeligt), sidst set tidspunkt, tags (hvis nogen)."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"PLAYGROUND": {
|
"PLAYGROUND": {
|
||||||
"USER": "Dig",
|
"USER": "Dig",
|
||||||
"ASSISTANT": "Assistant",
|
"ASSISTANT": "Assistent",
|
||||||
"MESSAGE_PLACEHOLDER": "Skriv din besked...",
|
"MESSAGE_PLACEHOLDER": "Skriv din besked...",
|
||||||
"HEADER": "Playground",
|
"HEADER": "Legeplads",
|
||||||
"DESCRIPTION": "Use this playground to send messages to your assistant and check if it responds accurately, quickly, and in the tone you expect.",
|
"DESCRIPTION": "Brug denne legeplads til at sende beskeder til din assistent og tjekke, om den svarer korrekt, hurtigt og i den tone, du forventer.",
|
||||||
"CREDIT_NOTE": "Messages sent here will count toward your Captain credits."
|
"CREDIT_NOTE": "Beskeder sendt her tæller mod dine Captain-kreditter."
|
||||||
},
|
},
|
||||||
"PAYWALL": {
|
"PAYWALL": {
|
||||||
"TITLE": "Upgrade to use Captain AI",
|
"TITLE": "Opgrader for at bruge Captain AI",
|
||||||
"AVAILABLE_ON": "Captain is not available on the free plan.",
|
"AVAILABLE_ON": "Captain er ikke tilgængelig på gratisplanen.",
|
||||||
"UPGRADE_PROMPT": "Upgrade your plan to get access to our assistants, copilot and more.",
|
"UPGRADE_PROMPT": "Opgrader din plan for at få adgang til vores assistenter, copilot og mere.",
|
||||||
"UPGRADE_NOW": "Upgrade now",
|
"UPGRADE_NOW": "Upgrade now",
|
||||||
"CANCEL_ANYTIME": "You can change or cancel your plan anytime"
|
"CANCEL_ANYTIME": "You can change or cancel your plan anytime"
|
||||||
},
|
},
|
||||||
"ENTERPRISE_PAYWALL": {
|
"ENTERPRISE_PAYWALL": {
|
||||||
"AVAILABLE_ON": "Captain AI is only available in the Enterprise plans.",
|
"AVAILABLE_ON": "Captain AI er kun tilgængelig i Enterprise-planerne.",
|
||||||
"UPGRADE_PROMPT": "Upgrade your plan to get access to our assistants, copilot and more.",
|
"UPGRADE_PROMPT": "Opgrader din plan for at få adgang til vores assistenter, copilot og mere.",
|
||||||
"ASK_ADMIN": "Please reach out to your administrator for the upgrade."
|
"ASK_ADMIN": "Please reach out to your administrator for the upgrade."
|
||||||
},
|
},
|
||||||
"BANNER": {
|
"BANNER": {
|
||||||
"RESPONSES": "You've used over 80% of your response limit. To continue using Captain AI, please upgrade.",
|
"RESPONSES": "Du har brugt over 80 % af din svargrænse. For at fortsætte med at bruge Captain AI skal du opgradere.",
|
||||||
"DOCUMENTS": "Document limit reached. Upgrade to continue using Captain AI."
|
"DOCUMENTS": "Dokumentgrænse nået. Opgrader for at fortsætte med at bruge Captain AI."
|
||||||
},
|
},
|
||||||
"FORM": {
|
"FORM": {
|
||||||
"CANCEL": "Annuller",
|
"CANCEL": "Annuller",
|
||||||
@@ -738,6 +738,17 @@
|
|||||||
"DOCUMENTS": {
|
"DOCUMENTS": {
|
||||||
"HEADER": "Documents",
|
"HEADER": "Documents",
|
||||||
"ADD_NEW": "Create a new document",
|
"ADD_NEW": "Create a new document",
|
||||||
|
"SELECTED": "{count} selected",
|
||||||
|
"SELECT_ALL": "Select all ({count})",
|
||||||
|
"UNSELECT_ALL": "Unselect all ({count})",
|
||||||
|
"BULK_DELETE_BUTTON": "Slet",
|
||||||
|
"BULK_DELETE": {
|
||||||
|
"TITLE": "Delete documents?",
|
||||||
|
"DESCRIPTION": "Are you sure you want to delete the selected documents? This action cannot be undone.",
|
||||||
|
"CONFIRM": "Yes, delete all",
|
||||||
|
"SUCCESS_MESSAGE": "Documents deleted successfully",
|
||||||
|
"ERROR_MESSAGE": "There was an error deleting the documents, please try again."
|
||||||
|
},
|
||||||
"RELATED_RESPONSES": {
|
"RELATED_RESPONSES": {
|
||||||
"TITLE": "Related FAQs",
|
"TITLE": "Related FAQs",
|
||||||
"DESCRIPTION": "These FAQs are generated directly from the document."
|
"DESCRIPTION": "These FAQs are generated directly from the document."
|
||||||
@@ -795,6 +806,7 @@
|
|||||||
"CUSTOM_TOOLS": {
|
"CUSTOM_TOOLS": {
|
||||||
"HEADER": "Tools",
|
"HEADER": "Tools",
|
||||||
"ADD_NEW": "Create a new tool",
|
"ADD_NEW": "Create a new tool",
|
||||||
|
"SOFT_LIMIT_WARNING": "Having more than 10 tools may reduce the assistant's reliability in selecting the right tool. Consider removing unused tools for better results.",
|
||||||
"EMPTY_STATE": {
|
"EMPTY_STATE": {
|
||||||
"TITLE": "No custom tools available",
|
"TITLE": "No custom tools available",
|
||||||
"SUBTITLE": "Create custom tools to connect your assistant with external APIs and services, enabling it to fetch data and perform actions on your behalf.",
|
"SUBTITLE": "Create custom tools to connect your assistant with external APIs and services, enabling it to fetch data and perform actions on your behalf.",
|
||||||
@@ -825,11 +837,18 @@
|
|||||||
"SUCCESS_MESSAGE": "Custom tool deleted successfully",
|
"SUCCESS_MESSAGE": "Custom tool deleted successfully",
|
||||||
"ERROR_MESSAGE": "Failed to delete custom tool"
|
"ERROR_MESSAGE": "Failed to delete custom tool"
|
||||||
},
|
},
|
||||||
|
"TEST": {
|
||||||
|
"BUTTON": "Test connection",
|
||||||
|
"SUCCESS": "Endpoint returned HTTP {status}",
|
||||||
|
"ERROR": "Connection failed",
|
||||||
|
"DISABLED_HINT": "Testing is only available for endpoints without templates or request bodies."
|
||||||
|
},
|
||||||
"FORM": {
|
"FORM": {
|
||||||
"TITLE": {
|
"TITLE": {
|
||||||
"LABEL": "Tool Name",
|
"LABEL": "Tool Name",
|
||||||
"PLACEHOLDER": "Order Lookup",
|
"PLACEHOLDER": "Order Lookup",
|
||||||
"ERROR": "Tool name is required"
|
"ERROR": "Tool name is required",
|
||||||
|
"MAX_LENGTH_ERROR": "Tool name must be {max} characters or fewer"
|
||||||
},
|
},
|
||||||
"DESCRIPTION": {
|
"DESCRIPTION": {
|
||||||
"LABEL": "Beskrivelse",
|
"LABEL": "Beskrivelse",
|
||||||
|
|||||||
@@ -194,7 +194,7 @@
|
|||||||
"MESSAGING_RESTRICTED_WHATSAPP": "You can only reply using a template message due to 24-hour message window restriction",
|
"MESSAGING_RESTRICTED_WHATSAPP": "You can only reply using a template message due to 24-hour message window restriction",
|
||||||
"MESSAGING_RESTRICTED_API": "You can only reply using a template message due to message window restriction",
|
"MESSAGING_RESTRICTED_API": "You can only reply using a template message due to message window restriction",
|
||||||
"MESSAGE_SIGNATURE_NOT_CONFIGURED": "Die Nachrichtensignatur ist nicht konfiguriert, bitte konfigurieren Sie sie in den Profileinstellungen.",
|
"MESSAGE_SIGNATURE_NOT_CONFIGURED": "Die Nachrichtensignatur ist nicht konfiguriert, bitte konfigurieren Sie sie in den Profileinstellungen.",
|
||||||
"COPILOT_MSG_INPUT": "Give copilot additional prompts, or ask anything else... Press enter to send follow-up",
|
"COPILOT_MSG_INPUT": "Geben Sie Copilot zusätzliche Aufforderungen oder fragen Sie etwas anderes ... Drücken Sie Enter, um eine Folgefrage zu senden",
|
||||||
"CLICK_HERE": "Klicken Sie hier, um zu aktualisieren",
|
"CLICK_HERE": "Klicken Sie hier, um zu aktualisieren",
|
||||||
"WHATSAPP_TEMPLATES": "WhatsApp-Vorlagen"
|
"WHATSAPP_TEMPLATES": "WhatsApp-Vorlagen"
|
||||||
},
|
},
|
||||||
@@ -214,7 +214,7 @@
|
|||||||
"DRAG_DROP": "Zum Anhängen hierher ziehen und ablegen",
|
"DRAG_DROP": "Zum Anhängen hierher ziehen und ablegen",
|
||||||
"START_AUDIO_RECORDING": "Audioaufzeichnung starten",
|
"START_AUDIO_RECORDING": "Audioaufzeichnung starten",
|
||||||
"STOP_AUDIO_RECORDING": "Audioaufzeichnung stoppen",
|
"STOP_AUDIO_RECORDING": "Audioaufzeichnung stoppen",
|
||||||
"COPILOT_THINKING": "Copilot is thinking",
|
"COPILOT_THINKING": "Copilot denkt",
|
||||||
"EMAIL_HEAD": {
|
"EMAIL_HEAD": {
|
||||||
"TO": "An",
|
"TO": "An",
|
||||||
"ADD_BCC": "BCC hinzufügen",
|
"ADD_BCC": "BCC hinzufügen",
|
||||||
|
|||||||
@@ -316,6 +316,18 @@
|
|||||||
"SUCCESS_MESSAGE": "Sprache wurde erfolgreich aus dem Portal entfernt",
|
"SUCCESS_MESSAGE": "Sprache wurde erfolgreich aus dem Portal entfernt",
|
||||||
"ERROR_MESSAGE": "Sprache kann nicht aus dem Portal entfernt werden. Versuchen Sie es nochmal."
|
"ERROR_MESSAGE": "Sprache kann nicht aus dem Portal entfernt werden. Versuchen Sie es nochmal."
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"DRAFT_LOCALE": {
|
||||||
|
"API": {
|
||||||
|
"SUCCESS_MESSAGE": "Locale moved to draft successfully",
|
||||||
|
"ERROR_MESSAGE": "Unable to move locale to draft. Try again."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"PUBLISH_LOCALE": {
|
||||||
|
"API": {
|
||||||
|
"SUCCESS_MESSAGE": "Locale published successfully",
|
||||||
|
"ERROR_MESSAGE": "Unable to publish locale. Try again."
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"TABLE": {
|
"TABLE": {
|
||||||
@@ -644,8 +656,11 @@
|
|||||||
"ARTICLES_COUNT": "{count} article | {count} articles",
|
"ARTICLES_COUNT": "{count} article | {count} articles",
|
||||||
"CATEGORIES_COUNT": "{count} category | {count} categories",
|
"CATEGORIES_COUNT": "{count} category | {count} categories",
|
||||||
"DEFAULT": "Standard",
|
"DEFAULT": "Standard",
|
||||||
|
"DRAFT": "Entwürfe",
|
||||||
"DROPDOWN_MENU": {
|
"DROPDOWN_MENU": {
|
||||||
"MAKE_DEFAULT": "Make default",
|
"MAKE_DEFAULT": "Make default",
|
||||||
|
"MOVE_TO_DRAFT": "Move to draft",
|
||||||
|
"PUBLISH_LOCALE": "Publish locale",
|
||||||
"DELETE": "Löschen"
|
"DELETE": "Löschen"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -655,6 +670,13 @@
|
|||||||
"COMBOBOX": {
|
"COMBOBOX": {
|
||||||
"PLACEHOLDER": "Sprache auswählen..."
|
"PLACEHOLDER": "Sprache auswählen..."
|
||||||
},
|
},
|
||||||
|
"STATUS": {
|
||||||
|
"LABEL": "Status",
|
||||||
|
"OPTIONS": {
|
||||||
|
"LIVE": "Veröffentlicht",
|
||||||
|
"DRAFT": "Entwürfe"
|
||||||
|
}
|
||||||
|
},
|
||||||
"API": {
|
"API": {
|
||||||
"SUCCESS_MESSAGE": "Sprache erfolgreich hinzugefügt",
|
"SUCCESS_MESSAGE": "Sprache erfolgreich hinzugefügt",
|
||||||
"ERROR_MESSAGE": "Sprache kann nicht hinzugefügt werden. Versuchen Sie es nochmal."
|
"ERROR_MESSAGE": "Sprache kann nicht hinzugefügt werden. Versuchen Sie es nochmal."
|
||||||
|
|||||||
@@ -390,71 +390,71 @@
|
|||||||
},
|
},
|
||||||
"CAPTAIN": {
|
"CAPTAIN": {
|
||||||
"NAME": "Kapitän",
|
"NAME": "Kapitän",
|
||||||
"HEADER_KNOW_MORE": "Know more",
|
"HEADER_KNOW_MORE": "Mehr erfahren",
|
||||||
"ASSISTANT_SWITCHER": {
|
"ASSISTANT_SWITCHER": {
|
||||||
"ASSISTANTS": "Assistants",
|
"ASSISTANTS": "Assistenten",
|
||||||
"SWITCH_ASSISTANT": "Switch between assistants",
|
"SWITCH_ASSISTANT": "Zwischen Assistenten wechseln",
|
||||||
"NEW_ASSISTANT": "Create Assistant",
|
"NEW_ASSISTANT": "Assistent erstellen",
|
||||||
"EMPTY_LIST": "No assistants found, please create one to get started"
|
"EMPTY_LIST": "Keine Assistenten gefunden, bitte erstellen Sie einen, um zu beginnen"
|
||||||
},
|
},
|
||||||
"COPILOT": {
|
"COPILOT": {
|
||||||
"TITLE": "Copilot",
|
"TITLE": "Copilot",
|
||||||
"TRY_THESE_PROMPTS": "Probiere diese Prompts",
|
"TRY_THESE_PROMPTS": "Probiere diese Prompts",
|
||||||
"PANEL_TITLE": "Get started with Copilot",
|
"PANEL_TITLE": "Starten Sie mit Copilot",
|
||||||
"KICK_OFF_MESSAGE": "Need a quick summary, want to check past conversations, or draft a better reply? Copilot’s here to speed things up.",
|
"KICK_OFF_MESSAGE": "Brauchen Sie eine schnelle Zusammenfassung, möchten Sie vergangene Gespräche prüfen oder eine bessere Antwort entwerfen? Copilot hilft Ihnen, schneller voranzukommen.",
|
||||||
"SEND_MESSAGE": "Nachricht senden...",
|
"SEND_MESSAGE": "Nachricht senden...",
|
||||||
"EMPTY_MESSAGE": "There was an error generating the response. Please try again.",
|
"EMPTY_MESSAGE": "Beim Generieren der Antwort ist ein Fehler aufgetreten. Bitte versuchen Sie es erneut.",
|
||||||
"LOADER": "Captain denkt nach",
|
"LOADER": "Captain denkt nach",
|
||||||
"YOU": "Sie",
|
"YOU": "Sie",
|
||||||
"USE": "Verwenden",
|
"USE": "Verwenden",
|
||||||
"RESET": "Zurücksetzen",
|
"RESET": "Zurücksetzen",
|
||||||
"SHOW_STEPS": "Show steps",
|
"SHOW_STEPS": "Schritte anzeigen",
|
||||||
"SELECT_ASSISTANT": "Assistent auswählen",
|
"SELECT_ASSISTANT": "Assistent auswählen",
|
||||||
"PROMPTS": {
|
"PROMPTS": {
|
||||||
"SUMMARIZE": {
|
"SUMMARIZE": {
|
||||||
"LABEL": "Summarize this conversation",
|
"LABEL": "Dieses Gespräch zusammenfassen",
|
||||||
"CONTENT": "Summarize the key points discussed between the customer and the support agent, including the customer's concerns, questions, and the solutions or responses provided by the support agent"
|
"CONTENT": "Fassen Sie die wichtigsten Punkte zusammen, die zwischen dem Kunden und dem Supportmitarbeiter besprochen wurden, einschließlich der Anliegen, Fragen des Kunden sowie der vom Supportmitarbeiter gegebenen Lösungen oder Antworten"
|
||||||
},
|
},
|
||||||
"SUGGEST": {
|
"SUGGEST": {
|
||||||
"LABEL": "Suggest an answer",
|
"LABEL": "Antwort vorschlagen",
|
||||||
"CONTENT": "Analyze the customer's inquiry, and draft a response that effectively addresses their concerns or questions. Ensure the reply is clear, concise, and provides helpful information."
|
"CONTENT": "Analysiere die Anfrage des Kunden und entwerfe eine Antwort, die seine Anliegen oder Fragen effektiv beantwortet. Stelle sicher, dass die Antwort klar, prägnant und hilfreich ist."
|
||||||
},
|
},
|
||||||
"RATE": {
|
"RATE": {
|
||||||
"LABEL": "Rate this conversation",
|
"LABEL": "Bewerten Sie dieses Gespräch",
|
||||||
"CONTENT": "Review the conversation to see how well it meets the customer's needs. Share a rating out of 5 based on tone, clarity, and effectiveness."
|
"CONTENT": "Bewerten Sie das Gespräch, um zu sehen, wie gut es die Bedürfnisse des Kunden erfüllt. Geben Sie eine Bewertung von 1 bis 5 basierend auf Ton, Klarheit und Effektivität ab."
|
||||||
},
|
},
|
||||||
"HIGH_PRIORITY": {
|
"HIGH_PRIORITY": {
|
||||||
"LABEL": "High priority conversations",
|
"LABEL": "Gespräche mit hoher Priorität",
|
||||||
"CONTENT": "Give me a summary of all high priority open conversations. Include the conversation ID, customer name (if available), last message content, and assigned agent. Group by status if relevant."
|
"CONTENT": "Gib mir eine Zusammenfassung aller offenen Gespräche mit hoher Priorität. Bitte die Gesprächs-ID, den Kundennamen (falls vorhanden), den Inhalt der letzten Nachricht und den zugewiesenen Mitarbeiter einschließen. Gruppiere nach Status, wenn relevant."
|
||||||
},
|
},
|
||||||
"LIST_CONTACTS": {
|
"LIST_CONTACTS": {
|
||||||
"LABEL": "List contacts",
|
"LABEL": "Kontakte auflisten",
|
||||||
"CONTENT": "Show me the list of top 10 contacts. Include name, email or phone number (if available), last seen time, tags (if any)."
|
"CONTENT": "Zeige mir die Liste der Top 10 Kontakte. Bitte Name, E-Mail oder Telefonnummer (falls vorhanden), zuletzt gesehen Zeit, Tags (falls vorhanden) einschließen."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"PLAYGROUND": {
|
"PLAYGROUND": {
|
||||||
"USER": "Sie",
|
"USER": "Sie",
|
||||||
"ASSISTANT": "Assistant",
|
"ASSISTANT": "Assistent",
|
||||||
"MESSAGE_PLACEHOLDER": "Schreiben Sie Ihre Nachricht...",
|
"MESSAGE_PLACEHOLDER": "Schreiben Sie Ihre Nachricht...",
|
||||||
"HEADER": "Playground",
|
"HEADER": "Spielwiese",
|
||||||
"DESCRIPTION": "Use this playground to send messages to your assistant and check if it responds accurately, quickly, and in the tone you expect.",
|
"DESCRIPTION": "Nutzen Sie diesen Playground, um Nachrichten an Ihren Assistenten zu senden und zu prüfen, ob dieser genau, schnell und im erwarteten Ton antwortet.",
|
||||||
"CREDIT_NOTE": "Messages sent here will count toward your Captain credits."
|
"CREDIT_NOTE": "Hier gesendete Nachrichten werden auf Ihre Captain-Guthaben angerechnet."
|
||||||
},
|
},
|
||||||
"PAYWALL": {
|
"PAYWALL": {
|
||||||
"TITLE": "Upgrade auf Captain AI",
|
"TITLE": "Upgrade auf Captain AI",
|
||||||
"AVAILABLE_ON": "Captain is not available on the free plan.",
|
"AVAILABLE_ON": "Captain ist im kostenlosen Tarif nicht verfügbar.",
|
||||||
"UPGRADE_PROMPT": "Tarif upgraden, um Zugang zu unseren Assistenten, Copilot und mehr zu erhalten.",
|
"UPGRADE_PROMPT": "Tarif upgraden, um Zugang zu unseren Assistenten, Copilot und mehr zu erhalten.",
|
||||||
"UPGRADE_NOW": "Jetzt upgraden",
|
"UPGRADE_NOW": "Jetzt upgraden",
|
||||||
"CANCEL_ANYTIME": "Sie können Ihr Paket jederzeit ändern oder kündigen"
|
"CANCEL_ANYTIME": "Sie können Ihr Paket jederzeit ändern oder kündigen"
|
||||||
},
|
},
|
||||||
"ENTERPRISE_PAYWALL": {
|
"ENTERPRISE_PAYWALL": {
|
||||||
"AVAILABLE_ON": "Captain AI is only available in the Enterprise plans.",
|
"AVAILABLE_ON": "Captain AI ist nur in den Enterprise-Tarifen verfügbar.",
|
||||||
"UPGRADE_PROMPT": "Tarif upgraden, um Zugang zu unseren Assistenten, Copilot und mehr zu erhalten.",
|
"UPGRADE_PROMPT": "Tarif upgraden, um Zugang zu unseren Assistenten, Copilot und mehr zu erhalten.",
|
||||||
"ASK_ADMIN": "Bitte kontaktieren Sie Ihren Administrator für das Upgrade."
|
"ASK_ADMIN": "Bitte kontaktieren Sie Ihren Administrator für das Upgrade."
|
||||||
},
|
},
|
||||||
"BANNER": {
|
"BANNER": {
|
||||||
"RESPONSES": "You've used over 80% of your response limit. To continue using Captain AI, please upgrade.",
|
"RESPONSES": "Sie haben über 80 % Ihres Antwortlimits verbraucht. Um Captain AI weiterhin zu nutzen, bitte upgraden.",
|
||||||
"DOCUMENTS": "Dokumentenlimit erreicht. Upgraden um Cpatain AI weiter zu verwenden."
|
"DOCUMENTS": "Dokumentenlimit erreicht. Upgraden um Cpatain AI weiter zu verwenden."
|
||||||
},
|
},
|
||||||
"FORM": {
|
"FORM": {
|
||||||
@@ -738,6 +738,17 @@
|
|||||||
"DOCUMENTS": {
|
"DOCUMENTS": {
|
||||||
"HEADER": "Documents",
|
"HEADER": "Documents",
|
||||||
"ADD_NEW": "Create a new document",
|
"ADD_NEW": "Create a new document",
|
||||||
|
"SELECTED": "{count} selected",
|
||||||
|
"SELECT_ALL": "Select all ({count})",
|
||||||
|
"UNSELECT_ALL": "Unselect all ({count})",
|
||||||
|
"BULK_DELETE_BUTTON": "Löschen",
|
||||||
|
"BULK_DELETE": {
|
||||||
|
"TITLE": "Delete documents?",
|
||||||
|
"DESCRIPTION": "Are you sure you want to delete the selected documents? This action cannot be undone.",
|
||||||
|
"CONFIRM": "Yes, delete all",
|
||||||
|
"SUCCESS_MESSAGE": "Documents deleted successfully",
|
||||||
|
"ERROR_MESSAGE": "There was an error deleting the documents, please try again."
|
||||||
|
},
|
||||||
"RELATED_RESPONSES": {
|
"RELATED_RESPONSES": {
|
||||||
"TITLE": "Related FAQs",
|
"TITLE": "Related FAQs",
|
||||||
"DESCRIPTION": "These FAQs are generated directly from the document."
|
"DESCRIPTION": "These FAQs are generated directly from the document."
|
||||||
@@ -795,6 +806,7 @@
|
|||||||
"CUSTOM_TOOLS": {
|
"CUSTOM_TOOLS": {
|
||||||
"HEADER": "Tools",
|
"HEADER": "Tools",
|
||||||
"ADD_NEW": "Create a new tool",
|
"ADD_NEW": "Create a new tool",
|
||||||
|
"SOFT_LIMIT_WARNING": "Having more than 10 tools may reduce the assistant's reliability in selecting the right tool. Consider removing unused tools for better results.",
|
||||||
"EMPTY_STATE": {
|
"EMPTY_STATE": {
|
||||||
"TITLE": "No custom tools available",
|
"TITLE": "No custom tools available",
|
||||||
"SUBTITLE": "Create custom tools to connect your assistant with external APIs and services, enabling it to fetch data and perform actions on your behalf.",
|
"SUBTITLE": "Create custom tools to connect your assistant with external APIs and services, enabling it to fetch data and perform actions on your behalf.",
|
||||||
@@ -825,11 +837,18 @@
|
|||||||
"SUCCESS_MESSAGE": "Custom tool deleted successfully",
|
"SUCCESS_MESSAGE": "Custom tool deleted successfully",
|
||||||
"ERROR_MESSAGE": "Failed to delete custom tool"
|
"ERROR_MESSAGE": "Failed to delete custom tool"
|
||||||
},
|
},
|
||||||
|
"TEST": {
|
||||||
|
"BUTTON": "Test connection",
|
||||||
|
"SUCCESS": "Endpoint returned HTTP {status}",
|
||||||
|
"ERROR": "Connection failed",
|
||||||
|
"DISABLED_HINT": "Testing is only available for endpoints without templates or request bodies."
|
||||||
|
},
|
||||||
"FORM": {
|
"FORM": {
|
||||||
"TITLE": {
|
"TITLE": {
|
||||||
"LABEL": "Tool Name",
|
"LABEL": "Tool Name",
|
||||||
"PLACEHOLDER": "Order Lookup",
|
"PLACEHOLDER": "Order Lookup",
|
||||||
"ERROR": "Tool name is required"
|
"ERROR": "Tool name is required",
|
||||||
|
"MAX_LENGTH_ERROR": "Tool name must be {max} characters or fewer"
|
||||||
},
|
},
|
||||||
"DESCRIPTION": {
|
"DESCRIPTION": {
|
||||||
"LABEL": "Beschreibung",
|
"LABEL": "Beschreibung",
|
||||||
|
|||||||
@@ -194,7 +194,7 @@
|
|||||||
"MESSAGING_RESTRICTED_WHATSAPP": "You can only reply using a template message due to 24-hour message window restriction",
|
"MESSAGING_RESTRICTED_WHATSAPP": "You can only reply using a template message due to 24-hour message window restriction",
|
||||||
"MESSAGING_RESTRICTED_API": "You can only reply using a template message due to message window restriction",
|
"MESSAGING_RESTRICTED_API": "You can only reply using a template message due to message window restriction",
|
||||||
"MESSAGE_SIGNATURE_NOT_CONFIGURED": "Δεν έχει ρυθμιστεί η υπογραφή μηνύματος, παρακαλώ ρυθμίστε την στις ρυθμίσεις προφίλ.",
|
"MESSAGE_SIGNATURE_NOT_CONFIGURED": "Δεν έχει ρυθμιστεί η υπογραφή μηνύματος, παρακαλώ ρυθμίστε την στις ρυθμίσεις προφίλ.",
|
||||||
"COPILOT_MSG_INPUT": "Give copilot additional prompts, or ask anything else... Press enter to send follow-up",
|
"COPILOT_MSG_INPUT": "Δώστε στον copilot επιπλέον εντολές ή ρωτήστε οτιδήποτε άλλο... Πατήστε enter για να στείλετε συνέχεια",
|
||||||
"CLICK_HERE": "Πατήστε εδώ για ενημέρωση",
|
"CLICK_HERE": "Πατήστε εδώ για ενημέρωση",
|
||||||
"WHATSAPP_TEMPLATES": "Πρότυπα Whatsapp"
|
"WHATSAPP_TEMPLATES": "Πρότυπα Whatsapp"
|
||||||
},
|
},
|
||||||
@@ -214,7 +214,7 @@
|
|||||||
"DRAG_DROP": "Σύρετε και αφήστε εδώ για επισύναψη",
|
"DRAG_DROP": "Σύρετε και αφήστε εδώ για επισύναψη",
|
||||||
"START_AUDIO_RECORDING": "Έναρξη ηχογράφησης",
|
"START_AUDIO_RECORDING": "Έναρξη ηχογράφησης",
|
||||||
"STOP_AUDIO_RECORDING": "Διακοπή ηχογράφησης",
|
"STOP_AUDIO_RECORDING": "Διακοπή ηχογράφησης",
|
||||||
"COPILOT_THINKING": "Copilot is thinking",
|
"COPILOT_THINKING": "Ο Copilot σκέφτεται",
|
||||||
"EMAIL_HEAD": {
|
"EMAIL_HEAD": {
|
||||||
"TO": "TO",
|
"TO": "TO",
|
||||||
"ADD_BCC": "Προσθήκη bcc",
|
"ADD_BCC": "Προσθήκη bcc",
|
||||||
|
|||||||
@@ -316,6 +316,18 @@
|
|||||||
"SUCCESS_MESSAGE": "Η γλώσσα αφαιρέθηκε επιτυχώς από την πύλη",
|
"SUCCESS_MESSAGE": "Η γλώσσα αφαιρέθηκε επιτυχώς από την πύλη",
|
||||||
"ERROR_MESSAGE": "Δεν είναι δυνατή η αφαίρεση γλώσσας από την πύλη. Δοκιμάστε ξανά."
|
"ERROR_MESSAGE": "Δεν είναι δυνατή η αφαίρεση γλώσσας από την πύλη. Δοκιμάστε ξανά."
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"DRAFT_LOCALE": {
|
||||||
|
"API": {
|
||||||
|
"SUCCESS_MESSAGE": "Locale moved to draft successfully",
|
||||||
|
"ERROR_MESSAGE": "Unable to move locale to draft. Try again."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"PUBLISH_LOCALE": {
|
||||||
|
"API": {
|
||||||
|
"SUCCESS_MESSAGE": "Locale published successfully",
|
||||||
|
"ERROR_MESSAGE": "Unable to publish locale. Try again."
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"TABLE": {
|
"TABLE": {
|
||||||
@@ -644,8 +656,11 @@
|
|||||||
"ARTICLES_COUNT": "{count} article | {count} articles",
|
"ARTICLES_COUNT": "{count} article | {count} articles",
|
||||||
"CATEGORIES_COUNT": "{count} category | {count} categories",
|
"CATEGORIES_COUNT": "{count} category | {count} categories",
|
||||||
"DEFAULT": "Προεπιλογή",
|
"DEFAULT": "Προεπιλογή",
|
||||||
|
"DRAFT": "Πρόχειρο",
|
||||||
"DROPDOWN_MENU": {
|
"DROPDOWN_MENU": {
|
||||||
"MAKE_DEFAULT": "Make default",
|
"MAKE_DEFAULT": "Make default",
|
||||||
|
"MOVE_TO_DRAFT": "Move to draft",
|
||||||
|
"PUBLISH_LOCALE": "Publish locale",
|
||||||
"DELETE": "Διαγραφή"
|
"DELETE": "Διαγραφή"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -655,6 +670,13 @@
|
|||||||
"COMBOBOX": {
|
"COMBOBOX": {
|
||||||
"PLACEHOLDER": "Select locale..."
|
"PLACEHOLDER": "Select locale..."
|
||||||
},
|
},
|
||||||
|
"STATUS": {
|
||||||
|
"LABEL": "Κατάσταση",
|
||||||
|
"OPTIONS": {
|
||||||
|
"LIVE": "Δημοσιευμένο",
|
||||||
|
"DRAFT": "Πρόχειρο"
|
||||||
|
}
|
||||||
|
},
|
||||||
"API": {
|
"API": {
|
||||||
"SUCCESS_MESSAGE": "Η γλώσσα προστέθηκε επιτυχώς",
|
"SUCCESS_MESSAGE": "Η γλώσσα προστέθηκε επιτυχώς",
|
||||||
"ERROR_MESSAGE": "Δεν είναι δυνατή η προσθήκη γλώσσας. Δοκιμάστε ξανά."
|
"ERROR_MESSAGE": "Δεν είναι δυνατή η προσθήκη γλώσσας. Δοκιμάστε ξανά."
|
||||||
|
|||||||
@@ -390,72 +390,72 @@
|
|||||||
},
|
},
|
||||||
"CAPTAIN": {
|
"CAPTAIN": {
|
||||||
"NAME": "Captain",
|
"NAME": "Captain",
|
||||||
"HEADER_KNOW_MORE": "Know more",
|
"HEADER_KNOW_MORE": "Μάθετε περισσότερα",
|
||||||
"ASSISTANT_SWITCHER": {
|
"ASSISTANT_SWITCHER": {
|
||||||
"ASSISTANTS": "Assistants",
|
"ASSISTANTS": "Βοηθοί",
|
||||||
"SWITCH_ASSISTANT": "Switch between assistants",
|
"SWITCH_ASSISTANT": "Εναλλαγή μεταξύ βοηθών",
|
||||||
"NEW_ASSISTANT": "Create Assistant",
|
"NEW_ASSISTANT": "Δημιουργία Βοηθού",
|
||||||
"EMPTY_LIST": "No assistants found, please create one to get started"
|
"EMPTY_LIST": "Δεν βρέθηκαν βοηθοί, παρακαλώ δημιουργήστε έναν για να ξεκινήσετε"
|
||||||
},
|
},
|
||||||
"COPILOT": {
|
"COPILOT": {
|
||||||
"TITLE": "Copilot",
|
"TITLE": "Copilot",
|
||||||
"TRY_THESE_PROMPTS": "Try these prompts",
|
"TRY_THESE_PROMPTS": "Try these prompts",
|
||||||
"PANEL_TITLE": "Get started with Copilot",
|
"PANEL_TITLE": "Ξεκινήστε με τον Copilot",
|
||||||
"KICK_OFF_MESSAGE": "Need a quick summary, want to check past conversations, or draft a better reply? Copilot’s here to speed things up.",
|
"KICK_OFF_MESSAGE": "Χρειάζεστε μια γρήγορη περίληψη, θέλετε να ελέγξετε παλιές συνομιλίες ή να συντάξετε μια καλύτερη απάντηση; Ο Copilot είναι εδώ για να επιταχύνει τα πράγματα.",
|
||||||
"SEND_MESSAGE": "Αποστολή μηνύματος...",
|
"SEND_MESSAGE": "Αποστολή μηνύματος...",
|
||||||
"EMPTY_MESSAGE": "There was an error generating the response. Please try again.",
|
"EMPTY_MESSAGE": "Παρουσιάστηκε σφάλμα κατά τη δημιουργία της απάντησης. Προσπαθήστε ξανά.",
|
||||||
"LOADER": "Captain is thinking",
|
"LOADER": "Ο Captain σκέφτεται",
|
||||||
"YOU": "You",
|
"YOU": "You",
|
||||||
"USE": "Use this",
|
"USE": "Χρησιμοποίησε αυτό",
|
||||||
"RESET": "Reset",
|
"RESET": "Επαναφορά",
|
||||||
"SHOW_STEPS": "Show steps",
|
"SHOW_STEPS": "Εμφάνιση βημάτων",
|
||||||
"SELECT_ASSISTANT": "Select Assistant",
|
"SELECT_ASSISTANT": "Επιλογή Βοηθού",
|
||||||
"PROMPTS": {
|
"PROMPTS": {
|
||||||
"SUMMARIZE": {
|
"SUMMARIZE": {
|
||||||
"LABEL": "Summarize this conversation",
|
"LABEL": "Συνοψίστε αυτή τη συνομιλία",
|
||||||
"CONTENT": "Summarize the key points discussed between the customer and the support agent, including the customer's concerns, questions, and the solutions or responses provided by the support agent"
|
"CONTENT": "Συνοψίστε τα βασικά σημεία που συζητήθηκαν μεταξύ του πελάτη και του εκπροσώπου υποστήριξης, συμπεριλαμβανομένων των ανησυχιών, των ερωτήσεων του πελάτη και των λύσεων ή απαντήσεων που παρείχε ο εκπρόσωπος υποστήριξης"
|
||||||
},
|
},
|
||||||
"SUGGEST": {
|
"SUGGEST": {
|
||||||
"LABEL": "Suggest an answer",
|
"LABEL": "Προτείνετε μια απάντηση",
|
||||||
"CONTENT": "Analyze the customer's inquiry, and draft a response that effectively addresses their concerns or questions. Ensure the reply is clear, concise, and provides helpful information."
|
"CONTENT": "Αναλύστε το ερώτημα του πελάτη και φτιάξτε μια απάντηση που αντιμετωπίζει αποτελεσματικά τις ανησυχίες ή ερωτήσεις του. Βεβαιωθείτε ότι η απάντηση είναι σαφής, συνοπτική και παρέχει χρήσιμες πληροφορίες."
|
||||||
},
|
},
|
||||||
"RATE": {
|
"RATE": {
|
||||||
"LABEL": "Rate this conversation",
|
"LABEL": "Βαθμολογήστε αυτή τη συνομιλία",
|
||||||
"CONTENT": "Review the conversation to see how well it meets the customer's needs. Share a rating out of 5 based on tone, clarity, and effectiveness."
|
"CONTENT": "Αξιολογήστε τη συνομιλία για το πόσο καλά ικανοποιεί τις ανάγκες του πελάτη. Μοιραστείτε μια βαθμολογία από 5 βασιζόμενοι στον τόνο, την καθαρότητα και την αποτελεσματικότητα."
|
||||||
},
|
},
|
||||||
"HIGH_PRIORITY": {
|
"HIGH_PRIORITY": {
|
||||||
"LABEL": "High priority conversations",
|
"LABEL": "Συνομιλίες υψηλής προτεραιότητας",
|
||||||
"CONTENT": "Give me a summary of all high priority open conversations. Include the conversation ID, customer name (if available), last message content, and assigned agent. Group by status if relevant."
|
"CONTENT": "Δώστε μου μια περίληψη όλων των ανοιχτών συνομιλιών υψηλής προτεραιότητας. Συμπεριλάβετε τον ID συνομιλίας, το όνομα πελάτη (αν είναι διαθέσιμο), το περιεχόμενο του τελευταίου μηνύματος και τον ανατεθέντα πράκτορα. Ομαδοποιήστε κατά κατάσταση εάν είναι σχετικό."
|
||||||
},
|
},
|
||||||
"LIST_CONTACTS": {
|
"LIST_CONTACTS": {
|
||||||
"LABEL": "List contacts",
|
"LABEL": "Καταχώρηση επαφών",
|
||||||
"CONTENT": "Show me the list of top 10 contacts. Include name, email or phone number (if available), last seen time, tags (if any)."
|
"CONTENT": "Δείξε μου τη λίστα με τις 10 κορυφαίες επαφές. Συμπεριλάβετε όνομα, email ή αριθμό τηλεφώνου (αν είναι διαθέσιμο), τελευταία φορά που εμφανίστηκαν, ετικέτες (αν υπάρχουν)."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"PLAYGROUND": {
|
"PLAYGROUND": {
|
||||||
"USER": "You",
|
"USER": "You",
|
||||||
"ASSISTANT": "Assistant",
|
"ASSISTANT": "Βοηθός",
|
||||||
"MESSAGE_PLACEHOLDER": "Πληκτρολογήστε το μήνυμά σας...",
|
"MESSAGE_PLACEHOLDER": "Πληκτρολογήστε το μήνυμά σας...",
|
||||||
"HEADER": "Playground",
|
"HEADER": "Παιδική Χαρά",
|
||||||
"DESCRIPTION": "Use this playground to send messages to your assistant and check if it responds accurately, quickly, and in the tone you expect.",
|
"DESCRIPTION": "Χρησιμοποιήστε αυτήν την παιδική χαρά για να στείλετε μηνύματα στον βοηθό σας και να ελέγξετε αν ανταποκρίνεται με ακρίβεια, γρήγορα και με τον τόνο που περιμένετε.",
|
||||||
"CREDIT_NOTE": "Messages sent here will count toward your Captain credits."
|
"CREDIT_NOTE": "Τα μηνύματα που στέλνονται εδώ θα μετρήσουν στα credits του Captain σας."
|
||||||
},
|
},
|
||||||
"PAYWALL": {
|
"PAYWALL": {
|
||||||
"TITLE": "Upgrade to use Captain AI",
|
"TITLE": "Αναβαθμίστε για να χρησιμοποιήσετε το Captain AI",
|
||||||
"AVAILABLE_ON": "Captain is not available on the free plan.",
|
"AVAILABLE_ON": "Ο Captain δεν είναι διαθέσιμος στο δωρεάν πακέτο.",
|
||||||
"UPGRADE_PROMPT": "Upgrade your plan to get access to our assistants, copilot and more.",
|
"UPGRADE_PROMPT": "Αναβαθμίστε το πακέτο σας για να αποκτήσετε πρόσβαση στους βοηθούς μας, τον copilot και άλλα.",
|
||||||
"UPGRADE_NOW": "Upgrade now",
|
"UPGRADE_NOW": "Upgrade now",
|
||||||
"CANCEL_ANYTIME": "You can change or cancel your plan anytime"
|
"CANCEL_ANYTIME": "You can change or cancel your plan anytime"
|
||||||
},
|
},
|
||||||
"ENTERPRISE_PAYWALL": {
|
"ENTERPRISE_PAYWALL": {
|
||||||
"AVAILABLE_ON": "Captain AI is only available in the Enterprise plans.",
|
"AVAILABLE_ON": "Το Captain AI είναι διαθέσιμο μόνο στα Enterprise πακέτα.",
|
||||||
"UPGRADE_PROMPT": "Upgrade your plan to get access to our assistants, copilot and more.",
|
"UPGRADE_PROMPT": "Αναβαθμίστε το πακέτο σας για να αποκτήσετε πρόσβαση στους βοηθούς μας, τον copilot και άλλα.",
|
||||||
"ASK_ADMIN": "Please reach out to your administrator for the upgrade."
|
"ASK_ADMIN": "Please reach out to your administrator for the upgrade."
|
||||||
},
|
},
|
||||||
"BANNER": {
|
"BANNER": {
|
||||||
"RESPONSES": "You've used over 80% of your response limit. To continue using Captain AI, please upgrade.",
|
"RESPONSES": "Έχετε χρησιμοποιήσει πάνω από το 80% του ορίου απαντήσεών σας. Για να συνεχίσετε να χρησιμοποιείτε το Captain AI, παρακαλώ αναβαθμίστε.",
|
||||||
"DOCUMENTS": "Document limit reached. Upgrade to continue using Captain AI."
|
"DOCUMENTS": "Έχετε φτάσει στο όριο εγγράφων. Αναβαθμίστε για να συνεχίσετε να χρησιμοποιείτε το Captain AI."
|
||||||
},
|
},
|
||||||
"FORM": {
|
"FORM": {
|
||||||
"CANCEL": "Άκυρο",
|
"CANCEL": "Άκυρο",
|
||||||
@@ -738,6 +738,17 @@
|
|||||||
"DOCUMENTS": {
|
"DOCUMENTS": {
|
||||||
"HEADER": "Documents",
|
"HEADER": "Documents",
|
||||||
"ADD_NEW": "Create a new document",
|
"ADD_NEW": "Create a new document",
|
||||||
|
"SELECTED": "{count} selected",
|
||||||
|
"SELECT_ALL": "Select all ({count})",
|
||||||
|
"UNSELECT_ALL": "Unselect all ({count})",
|
||||||
|
"BULK_DELETE_BUTTON": "Διαγραφή",
|
||||||
|
"BULK_DELETE": {
|
||||||
|
"TITLE": "Delete documents?",
|
||||||
|
"DESCRIPTION": "Are you sure you want to delete the selected documents? This action cannot be undone.",
|
||||||
|
"CONFIRM": "Yes, delete all",
|
||||||
|
"SUCCESS_MESSAGE": "Documents deleted successfully",
|
||||||
|
"ERROR_MESSAGE": "There was an error deleting the documents, please try again."
|
||||||
|
},
|
||||||
"RELATED_RESPONSES": {
|
"RELATED_RESPONSES": {
|
||||||
"TITLE": "Related FAQs",
|
"TITLE": "Related FAQs",
|
||||||
"DESCRIPTION": "These FAQs are generated directly from the document."
|
"DESCRIPTION": "These FAQs are generated directly from the document."
|
||||||
@@ -795,6 +806,7 @@
|
|||||||
"CUSTOM_TOOLS": {
|
"CUSTOM_TOOLS": {
|
||||||
"HEADER": "Tools",
|
"HEADER": "Tools",
|
||||||
"ADD_NEW": "Create a new tool",
|
"ADD_NEW": "Create a new tool",
|
||||||
|
"SOFT_LIMIT_WARNING": "Having more than 10 tools may reduce the assistant's reliability in selecting the right tool. Consider removing unused tools for better results.",
|
||||||
"EMPTY_STATE": {
|
"EMPTY_STATE": {
|
||||||
"TITLE": "No custom tools available",
|
"TITLE": "No custom tools available",
|
||||||
"SUBTITLE": "Create custom tools to connect your assistant with external APIs and services, enabling it to fetch data and perform actions on your behalf.",
|
"SUBTITLE": "Create custom tools to connect your assistant with external APIs and services, enabling it to fetch data and perform actions on your behalf.",
|
||||||
@@ -825,11 +837,18 @@
|
|||||||
"SUCCESS_MESSAGE": "Custom tool deleted successfully",
|
"SUCCESS_MESSAGE": "Custom tool deleted successfully",
|
||||||
"ERROR_MESSAGE": "Failed to delete custom tool"
|
"ERROR_MESSAGE": "Failed to delete custom tool"
|
||||||
},
|
},
|
||||||
|
"TEST": {
|
||||||
|
"BUTTON": "Test connection",
|
||||||
|
"SUCCESS": "Endpoint returned HTTP {status}",
|
||||||
|
"ERROR": "Connection failed",
|
||||||
|
"DISABLED_HINT": "Testing is only available for endpoints without templates or request bodies."
|
||||||
|
},
|
||||||
"FORM": {
|
"FORM": {
|
||||||
"TITLE": {
|
"TITLE": {
|
||||||
"LABEL": "Tool Name",
|
"LABEL": "Tool Name",
|
||||||
"PLACEHOLDER": "Order Lookup",
|
"PLACEHOLDER": "Order Lookup",
|
||||||
"ERROR": "Tool name is required"
|
"ERROR": "Tool name is required",
|
||||||
|
"MAX_LENGTH_ERROR": "Tool name must be {max} characters or fewer"
|
||||||
},
|
},
|
||||||
"DESCRIPTION": {
|
"DESCRIPTION": {
|
||||||
"LABEL": "Περιγραφή",
|
"LABEL": "Περιγραφή",
|
||||||
|
|||||||
@@ -63,6 +63,16 @@
|
|||||||
"ERROR_MESSAGE": "Could not update bot. Please try again."
|
"ERROR_MESSAGE": "Could not update bot. Please try again."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"SECRET": {
|
||||||
|
"LABEL": "Webhook Secret",
|
||||||
|
"COPY": "Copy secret to clipboard",
|
||||||
|
"COPY_SUCCESS": "Secret copied to clipboard",
|
||||||
|
"TOGGLE": "Toggle secret visibility",
|
||||||
|
"CREATED_DESC": "Use the secret below to verify webhook signatures. Please copy it now, you can also find it later in the bot settings.",
|
||||||
|
"DONE": "Done",
|
||||||
|
"RESET_SUCCESS": "Webhook secret regenerated successfully",
|
||||||
|
"RESET_ERROR": "Unable to regenerate webhook secret. Please try again"
|
||||||
|
},
|
||||||
"ACCESS_TOKEN": {
|
"ACCESS_TOKEN": {
|
||||||
"TITLE": "Access Token",
|
"TITLE": "Access Token",
|
||||||
"DESCRIPTION": "Copy the access token and save it securely",
|
"DESCRIPTION": "Copy the access token and save it securely",
|
||||||
|
|||||||
@@ -169,6 +169,7 @@
|
|||||||
},
|
},
|
||||||
"ATTRIBUTES": {
|
"ATTRIBUTES": {
|
||||||
"MESSAGE_TYPE": "Message Type",
|
"MESSAGE_TYPE": "Message Type",
|
||||||
|
"PRIVATE_NOTE": "Private Note",
|
||||||
"MESSAGE_CONTAINS": "Message Contains",
|
"MESSAGE_CONTAINS": "Message Contains",
|
||||||
"EMAIL": "Email",
|
"EMAIL": "Email",
|
||||||
"INBOX": "Inbox",
|
"INBOX": "Inbox",
|
||||||
|
|||||||
@@ -20,6 +20,7 @@
|
|||||||
"CALL": "Call",
|
"CALL": "Call",
|
||||||
"CALL_INITIATED": "Calling the contact…",
|
"CALL_INITIATED": "Calling the contact…",
|
||||||
"CALL_FAILED": "Unable to start the call. Please try again.",
|
"CALL_FAILED": "Unable to start the call. Please try again.",
|
||||||
|
"CLICK_TO_EDIT": "Click to edit",
|
||||||
"VOICE_INBOX_PICKER": {
|
"VOICE_INBOX_PICKER": {
|
||||||
"TITLE": "Choose a voice inbox"
|
"TITLE": "Choose a voice inbox"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -86,6 +86,14 @@
|
|||||||
"PLACEHOLDER": "Please enter your Webhook URL",
|
"PLACEHOLDER": "Please enter your Webhook URL",
|
||||||
"ERROR": "Please enter a valid URL"
|
"ERROR": "Please enter a valid URL"
|
||||||
},
|
},
|
||||||
|
"CHANNEL_WEBHOOK_SECRET": {
|
||||||
|
"LABEL": "Webhook Secret",
|
||||||
|
"COPY": "Copy secret to clipboard",
|
||||||
|
"COPY_SUCCESS": "Secret copied to clipboard",
|
||||||
|
"TOGGLE": "Toggle secret visibility",
|
||||||
|
"RESET_SUCCESS": "Webhook secret regenerated successfully",
|
||||||
|
"RESET_ERROR": "Unable to regenerate webhook secret. Please try again"
|
||||||
|
},
|
||||||
"CHANNEL_DOMAIN": {
|
"CHANNEL_DOMAIN": {
|
||||||
"LABEL": "Website Domain",
|
"LABEL": "Website Domain",
|
||||||
"PLACEHOLDER": "Enter your website domain (eg: acme.com)"
|
"PLACEHOLDER": "Enter your website domain (eg: acme.com)"
|
||||||
|
|||||||
@@ -738,6 +738,17 @@
|
|||||||
"DOCUMENTS": {
|
"DOCUMENTS": {
|
||||||
"HEADER": "Documents",
|
"HEADER": "Documents",
|
||||||
"ADD_NEW": "Create a new document",
|
"ADD_NEW": "Create a new document",
|
||||||
|
"SELECTED": "{count} selected",
|
||||||
|
"SELECT_ALL": "Select all ({count})",
|
||||||
|
"UNSELECT_ALL": "Unselect all ({count})",
|
||||||
|
"BULK_DELETE_BUTTON": "Delete",
|
||||||
|
"BULK_DELETE": {
|
||||||
|
"TITLE": "Delete documents?",
|
||||||
|
"DESCRIPTION": "Are you sure you want to delete the selected documents? This action cannot be undone.",
|
||||||
|
"CONFIRM": "Yes, delete all",
|
||||||
|
"SUCCESS_MESSAGE": "Documents deleted successfully",
|
||||||
|
"ERROR_MESSAGE": "There was an error deleting the documents, please try again."
|
||||||
|
},
|
||||||
"RELATED_RESPONSES": {
|
"RELATED_RESPONSES": {
|
||||||
"TITLE": "Related FAQs",
|
"TITLE": "Related FAQs",
|
||||||
"DESCRIPTION": "These FAQs are generated directly from the document."
|
"DESCRIPTION": "These FAQs are generated directly from the document."
|
||||||
@@ -796,6 +807,7 @@
|
|||||||
"CUSTOM_TOOLS": {
|
"CUSTOM_TOOLS": {
|
||||||
"HEADER": "Tools",
|
"HEADER": "Tools",
|
||||||
"ADD_NEW": "Create a new tool",
|
"ADD_NEW": "Create a new tool",
|
||||||
|
"SOFT_LIMIT_WARNING": "Having more than 10 tools may reduce the assistant's reliability in selecting the right tool. Consider removing unused tools for better results.",
|
||||||
"EMPTY_STATE": {
|
"EMPTY_STATE": {
|
||||||
"TITLE": "No custom tools available",
|
"TITLE": "No custom tools available",
|
||||||
"SUBTITLE": "Create custom tools to connect your assistant with external APIs and services, enabling it to fetch data and perform actions on your behalf.",
|
"SUBTITLE": "Create custom tools to connect your assistant with external APIs and services, enabling it to fetch data and perform actions on your behalf.",
|
||||||
@@ -826,11 +838,30 @@
|
|||||||
"SUCCESS_MESSAGE": "Custom tool deleted successfully",
|
"SUCCESS_MESSAGE": "Custom tool deleted successfully",
|
||||||
"ERROR_MESSAGE": "Failed to delete custom tool"
|
"ERROR_MESSAGE": "Failed to delete custom tool"
|
||||||
},
|
},
|
||||||
|
"PAYWALL": {
|
||||||
|
"TITLE": "Upgrade to use tools with Captain",
|
||||||
|
"AVAILABLE_ON": "Captain Tools are only available in Business and Enterprise plans. Please upgrade to Business plan to use the feature.",
|
||||||
|
"UPGRADE_PROMPT": "",
|
||||||
|
"UPGRADE_NOW": "Open billing",
|
||||||
|
"CANCEL_ANYTIME": ""
|
||||||
|
},
|
||||||
|
"ENTERPRISE_PAYWALL": {
|
||||||
|
"AVAILABLE_ON": "Captain Tools are only available in the paid plans.",
|
||||||
|
"UPGRADE_PROMPT": "Please upgrade to a paid plan to use this feature.",
|
||||||
|
"ASK_ADMIN": "Please reach out to your administrator for the upgrade."
|
||||||
|
},
|
||||||
|
"TEST": {
|
||||||
|
"BUTTON": "Test connection",
|
||||||
|
"SUCCESS": "Endpoint returned HTTP {status}",
|
||||||
|
"ERROR": "Connection failed",
|
||||||
|
"DISABLED_HINT": "Testing is only available for endpoints without templates or request bodies."
|
||||||
|
},
|
||||||
"FORM": {
|
"FORM": {
|
||||||
"TITLE": {
|
"TITLE": {
|
||||||
"LABEL": "Tool Name",
|
"LABEL": "Tool Name",
|
||||||
"PLACEHOLDER": "Order Lookup",
|
"PLACEHOLDER": "Order Lookup",
|
||||||
"ERROR": "Tool name is required"
|
"ERROR": "Tool name is required",
|
||||||
|
"MAX_LENGTH_ERROR": "Tool name must be {max} characters or fewer"
|
||||||
},
|
},
|
||||||
"DESCRIPTION": {
|
"DESCRIPTION": {
|
||||||
"LABEL": "Description",
|
"LABEL": "Description",
|
||||||
|
|||||||
@@ -68,7 +68,8 @@
|
|||||||
"API_SUCCESS": "Signature saved successfully",
|
"API_SUCCESS": "Signature saved successfully",
|
||||||
"IMAGE_UPLOAD_ERROR": "Couldn't upload image! Try again",
|
"IMAGE_UPLOAD_ERROR": "Couldn't upload image! Try again",
|
||||||
"IMAGE_UPLOAD_SUCCESS": "Image added successfully. Please click on save to save the signature",
|
"IMAGE_UPLOAD_SUCCESS": "Image added successfully. Please click on save to save the signature",
|
||||||
"IMAGE_UPLOAD_SIZE_ERROR": "Image size should be less than {size}MB"
|
"IMAGE_UPLOAD_SIZE_ERROR": "Image size should be less than {size}MB",
|
||||||
|
"INLINE_IMAGE_WARNING": "Pasted inline images were removed. Please use the image upload button to add images to your signature."
|
||||||
},
|
},
|
||||||
"MESSAGE_SIGNATURE": {
|
"MESSAGE_SIGNATURE": {
|
||||||
"LABEL": "Message Signature",
|
"LABEL": "Message Signature",
|
||||||
|
|||||||
@@ -45,6 +45,13 @@
|
|||||||
"ERROR_MESSAGE": "Could not connect to Woot server. Please try again."
|
"ERROR_MESSAGE": "Could not connect to Woot server. Please try again."
|
||||||
},
|
},
|
||||||
"SUBMIT": "Create account",
|
"SUBMIT": "Create account",
|
||||||
"HAVE_AN_ACCOUNT": "Already have an account?"
|
"HAVE_AN_ACCOUNT": "Already have an account?",
|
||||||
|
"VERIFY_EMAIL": {
|
||||||
|
"TITLE": "Check your inbox",
|
||||||
|
"DESCRIPTION": "We sent a verification link to {email}. Click the link to verify your email and get started.",
|
||||||
|
"RESEND": "Resend verification email",
|
||||||
|
"RESEND_SUCCESS": "Verification email sent. Please check your inbox.",
|
||||||
|
"RESEND_ERROR": "Could not send verification email. Please try again."
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -194,7 +194,7 @@
|
|||||||
"MESSAGING_RESTRICTED_WHATSAPP": "You can only reply using a template message due to 24-hour message window restriction",
|
"MESSAGING_RESTRICTED_WHATSAPP": "You can only reply using a template message due to 24-hour message window restriction",
|
||||||
"MESSAGING_RESTRICTED_API": "You can only reply using a template message due to message window restriction",
|
"MESSAGING_RESTRICTED_API": "You can only reply using a template message due to message window restriction",
|
||||||
"MESSAGE_SIGNATURE_NOT_CONFIGURED": "La firma del mensaje no está configurada, por favor configúrela en la configuración del perfil.",
|
"MESSAGE_SIGNATURE_NOT_CONFIGURED": "La firma del mensaje no está configurada, por favor configúrela en la configuración del perfil.",
|
||||||
"COPILOT_MSG_INPUT": "Give copilot additional prompts, or ask anything else... Press enter to send follow-up",
|
"COPILOT_MSG_INPUT": "Dale instrucciones adicionales a Copilot o pregúntale cualquier otra cosa... Pulsa Enter para enviar el seguimiento",
|
||||||
"CLICK_HERE": "Haga clic aquí para actualizar",
|
"CLICK_HERE": "Haga clic aquí para actualizar",
|
||||||
"WHATSAPP_TEMPLATES": "Plantillas de Whatsapp"
|
"WHATSAPP_TEMPLATES": "Plantillas de Whatsapp"
|
||||||
},
|
},
|
||||||
@@ -214,7 +214,7 @@
|
|||||||
"DRAG_DROP": "Arrastra y suelta aquí para adjuntar",
|
"DRAG_DROP": "Arrastra y suelta aquí para adjuntar",
|
||||||
"START_AUDIO_RECORDING": "Iniciar grabación de audio",
|
"START_AUDIO_RECORDING": "Iniciar grabación de audio",
|
||||||
"STOP_AUDIO_RECORDING": "Detener grabación de audio",
|
"STOP_AUDIO_RECORDING": "Detener grabación de audio",
|
||||||
"COPILOT_THINKING": "Copilot is thinking",
|
"COPILOT_THINKING": "Copilot está pensando",
|
||||||
"EMAIL_HEAD": {
|
"EMAIL_HEAD": {
|
||||||
"TO": "A",
|
"TO": "A",
|
||||||
"ADD_BCC": "Añadir bcc",
|
"ADD_BCC": "Añadir bcc",
|
||||||
|
|||||||
@@ -316,6 +316,18 @@
|
|||||||
"SUCCESS_MESSAGE": "Idioma eliminado del portal correctamente",
|
"SUCCESS_MESSAGE": "Idioma eliminado del portal correctamente",
|
||||||
"ERROR_MESSAGE": "No se puede eliminar el idioma del portal. Vuelve a intentarlo."
|
"ERROR_MESSAGE": "No se puede eliminar el idioma del portal. Vuelve a intentarlo."
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"DRAFT_LOCALE": {
|
||||||
|
"API": {
|
||||||
|
"SUCCESS_MESSAGE": "Locale moved to draft successfully",
|
||||||
|
"ERROR_MESSAGE": "Unable to move locale to draft. Try again."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"PUBLISH_LOCALE": {
|
||||||
|
"API": {
|
||||||
|
"SUCCESS_MESSAGE": "Locale published successfully",
|
||||||
|
"ERROR_MESSAGE": "Unable to publish locale. Try again."
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"TABLE": {
|
"TABLE": {
|
||||||
@@ -644,8 +656,11 @@
|
|||||||
"ARTICLES_COUNT": "{count} article | {count} articles",
|
"ARTICLES_COUNT": "{count} article | {count} articles",
|
||||||
"CATEGORIES_COUNT": "{count} category | {count} categories",
|
"CATEGORIES_COUNT": "{count} category | {count} categories",
|
||||||
"DEFAULT": "Predeterminado",
|
"DEFAULT": "Predeterminado",
|
||||||
|
"DRAFT": "Borrador",
|
||||||
"DROPDOWN_MENU": {
|
"DROPDOWN_MENU": {
|
||||||
"MAKE_DEFAULT": "Make default",
|
"MAKE_DEFAULT": "Make default",
|
||||||
|
"MOVE_TO_DRAFT": "Move to draft",
|
||||||
|
"PUBLISH_LOCALE": "Publish locale",
|
||||||
"DELETE": "Eliminar"
|
"DELETE": "Eliminar"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -655,6 +670,13 @@
|
|||||||
"COMBOBOX": {
|
"COMBOBOX": {
|
||||||
"PLACEHOLDER": "Seleccionar idioma..."
|
"PLACEHOLDER": "Seleccionar idioma..."
|
||||||
},
|
},
|
||||||
|
"STATUS": {
|
||||||
|
"LABEL": "Estado",
|
||||||
|
"OPTIONS": {
|
||||||
|
"LIVE": "Publicado",
|
||||||
|
"DRAFT": "Borrador"
|
||||||
|
}
|
||||||
|
},
|
||||||
"API": {
|
"API": {
|
||||||
"SUCCESS_MESSAGE": "Idioma añadido correctamente",
|
"SUCCESS_MESSAGE": "Idioma añadido correctamente",
|
||||||
"ERROR_MESSAGE": "No se puede añadir el idioma. Vuelve a intentarlo."
|
"ERROR_MESSAGE": "No se puede añadir el idioma. Vuelve a intentarlo."
|
||||||
|
|||||||
@@ -390,72 +390,72 @@
|
|||||||
},
|
},
|
||||||
"CAPTAIN": {
|
"CAPTAIN": {
|
||||||
"NAME": "Capitán",
|
"NAME": "Capitán",
|
||||||
"HEADER_KNOW_MORE": "Know more",
|
"HEADER_KNOW_MORE": "Más información",
|
||||||
"ASSISTANT_SWITCHER": {
|
"ASSISTANT_SWITCHER": {
|
||||||
"ASSISTANTS": "Assistants",
|
"ASSISTANTS": "Asistentes",
|
||||||
"SWITCH_ASSISTANT": "Switch between assistants",
|
"SWITCH_ASSISTANT": "Cambiar entre asistentes",
|
||||||
"NEW_ASSISTANT": "Create Assistant",
|
"NEW_ASSISTANT": "Crear asistente",
|
||||||
"EMPTY_LIST": "No assistants found, please create one to get started"
|
"EMPTY_LIST": "No se encontraron asistentes. Crea uno para comenzar"
|
||||||
},
|
},
|
||||||
"COPILOT": {
|
"COPILOT": {
|
||||||
"TITLE": "Copilot",
|
"TITLE": "Copilot",
|
||||||
"TRY_THESE_PROMPTS": "Prueba estas sugerencias",
|
"TRY_THESE_PROMPTS": "Prueba estas sugerencias",
|
||||||
"PANEL_TITLE": "Get started with Copilot",
|
"PANEL_TITLE": "Comienza con Copilot",
|
||||||
"KICK_OFF_MESSAGE": "Need a quick summary, want to check past conversations, or draft a better reply? Copilot’s here to speed things up.",
|
"KICK_OFF_MESSAGE": "¿Necesitas un resumen rápido, revisar conversaciones anteriores o redactar una mejor respuesta? Copilot está aquí para agilizarlo.",
|
||||||
"SEND_MESSAGE": "Enviar mensaje...",
|
"SEND_MESSAGE": "Enviar mensaje...",
|
||||||
"EMPTY_MESSAGE": "There was an error generating the response. Please try again.",
|
"EMPTY_MESSAGE": "Se produjo un error al generar la respuesta. Inténtalo de nuevo.",
|
||||||
"LOADER": "Captain is thinking",
|
"LOADER": "Captain está pensando",
|
||||||
"YOU": "Tú",
|
"YOU": "Tú",
|
||||||
"USE": "Use this",
|
"USE": "Usar esto",
|
||||||
"RESET": "Reset",
|
"RESET": "Restablecer",
|
||||||
"SHOW_STEPS": "Show steps",
|
"SHOW_STEPS": "Mostrar pasos",
|
||||||
"SELECT_ASSISTANT": "Select Assistant",
|
"SELECT_ASSISTANT": "Seleccionar asistente",
|
||||||
"PROMPTS": {
|
"PROMPTS": {
|
||||||
"SUMMARIZE": {
|
"SUMMARIZE": {
|
||||||
"LABEL": "Summarize this conversation",
|
"LABEL": "Resume esta conversación",
|
||||||
"CONTENT": "Summarize the key points discussed between the customer and the support agent, including the customer's concerns, questions, and the solutions or responses provided by the support agent"
|
"CONTENT": "Resume los puntos clave tratados entre el cliente y el agente de soporte, incluidas las inquietudes y preguntas del cliente, así como las soluciones o respuestas proporcionadas por el agente de soporte."
|
||||||
},
|
},
|
||||||
"SUGGEST": {
|
"SUGGEST": {
|
||||||
"LABEL": "Suggest an answer",
|
"LABEL": "Sugerir una respuesta",
|
||||||
"CONTENT": "Analyze the customer's inquiry, and draft a response that effectively addresses their concerns or questions. Ensure the reply is clear, concise, and provides helpful information."
|
"CONTENT": "Analiza la consulta del cliente y redacta una respuesta que aborde eficazmente sus dudas o preguntas. Asegúrate de que la respuesta sea clara, concisa y útil."
|
||||||
},
|
},
|
||||||
"RATE": {
|
"RATE": {
|
||||||
"LABEL": "Rate this conversation",
|
"LABEL": "Califica esta conversación",
|
||||||
"CONTENT": "Review the conversation to see how well it meets the customer's needs. Share a rating out of 5 based on tone, clarity, and effectiveness."
|
"CONTENT": "Revisa la conversación para evaluar qué tan bien satisface las necesidades del cliente. Comparte una calificación sobre 5 basada en el tono, la claridad y la eficacia."
|
||||||
},
|
},
|
||||||
"HIGH_PRIORITY": {
|
"HIGH_PRIORITY": {
|
||||||
"LABEL": "High priority conversations",
|
"LABEL": "Conversaciones de alta prioridad",
|
||||||
"CONTENT": "Give me a summary of all high priority open conversations. Include the conversation ID, customer name (if available), last message content, and assigned agent. Group by status if relevant."
|
"CONTENT": "Dame un resumen de todas las conversaciones abiertas de alta prioridad. Incluye el ID de la conversación, el nombre del cliente (si está disponible), el contenido del último mensaje y el agente asignado. Agrupa por estado si es relevante."
|
||||||
},
|
},
|
||||||
"LIST_CONTACTS": {
|
"LIST_CONTACTS": {
|
||||||
"LABEL": "List contacts",
|
"LABEL": "Listar contactos",
|
||||||
"CONTENT": "Show me the list of top 10 contacts. Include name, email or phone number (if available), last seen time, tags (if any)."
|
"CONTENT": "Muéstrame la lista de los 10 contactos principales. Incluye el nombre, el correo electrónico o número de teléfono (si está disponible), la hora de la última actividad y las etiquetas (si las hay)."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"PLAYGROUND": {
|
"PLAYGROUND": {
|
||||||
"USER": "Tú",
|
"USER": "Tú",
|
||||||
"ASSISTANT": "Assistant",
|
"ASSISTANT": "Asistente",
|
||||||
"MESSAGE_PLACEHOLDER": "Escribe tu mensaje...",
|
"MESSAGE_PLACEHOLDER": "Escribe tu mensaje...",
|
||||||
"HEADER": "Playground",
|
"HEADER": "Zona de pruebas",
|
||||||
"DESCRIPTION": "Use this playground to send messages to your assistant and check if it responds accurately, quickly, and in the tone you expect.",
|
"DESCRIPTION": "Usa esta zona de pruebas para enviar mensajes a tu asistente y comprobar si responde con precisión, rapidez y con el tono que esperas.",
|
||||||
"CREDIT_NOTE": "Messages sent here will count toward your Captain credits."
|
"CREDIT_NOTE": "Los mensajes enviados aquí contarán para tus créditos de Captain."
|
||||||
},
|
},
|
||||||
"PAYWALL": {
|
"PAYWALL": {
|
||||||
"TITLE": "Upgrade to use Captain AI",
|
"TITLE": "Actualiza para usar Captain AI",
|
||||||
"AVAILABLE_ON": "Captain is not available on the free plan.",
|
"AVAILABLE_ON": "Captain no está disponible en el plan gratuito.",
|
||||||
"UPGRADE_PROMPT": "Upgrade your plan to get access to our assistants, copilot and more.",
|
"UPGRADE_PROMPT": "Actualiza tu plan para obtener acceso a nuestros asistentes, Copilot y más.",
|
||||||
"UPGRADE_NOW": "Actualizar ahora",
|
"UPGRADE_NOW": "Actualizar ahora",
|
||||||
"CANCEL_ANYTIME": "Puede cambiar o cancelar su plan en cualquier momento"
|
"CANCEL_ANYTIME": "Puede cambiar o cancelar su plan en cualquier momento"
|
||||||
},
|
},
|
||||||
"ENTERPRISE_PAYWALL": {
|
"ENTERPRISE_PAYWALL": {
|
||||||
"AVAILABLE_ON": "Captain AI is only available in the Enterprise plans.",
|
"AVAILABLE_ON": "Captain AI solo está disponible en los planes Enterprise.",
|
||||||
"UPGRADE_PROMPT": "Upgrade your plan to get access to our assistants, copilot and more.",
|
"UPGRADE_PROMPT": "Actualiza tu plan para obtener acceso a nuestros asistentes, Copilot y más.",
|
||||||
"ASK_ADMIN": "Por favor, comuníquese con su administrador para la actualización."
|
"ASK_ADMIN": "Por favor, comuníquese con su administrador para la actualización."
|
||||||
},
|
},
|
||||||
"BANNER": {
|
"BANNER": {
|
||||||
"RESPONSES": "You've used over 80% of your response limit. To continue using Captain AI, please upgrade.",
|
"RESPONSES": "Has usado más del 80 % de tu límite de respuestas. Para seguir usando Captain AI, actualiza tu plan.",
|
||||||
"DOCUMENTS": "Document limit reached. Upgrade to continue using Captain AI."
|
"DOCUMENTS": "Se alcanzó el límite de documentos. Actualiza para seguir usando Captain AI."
|
||||||
},
|
},
|
||||||
"FORM": {
|
"FORM": {
|
||||||
"CANCEL": "Cancelar",
|
"CANCEL": "Cancelar",
|
||||||
@@ -738,6 +738,17 @@
|
|||||||
"DOCUMENTS": {
|
"DOCUMENTS": {
|
||||||
"HEADER": "Documents",
|
"HEADER": "Documents",
|
||||||
"ADD_NEW": "Create a new document",
|
"ADD_NEW": "Create a new document",
|
||||||
|
"SELECTED": "{count} selected",
|
||||||
|
"SELECT_ALL": "Select all ({count})",
|
||||||
|
"UNSELECT_ALL": "Unselect all ({count})",
|
||||||
|
"BULK_DELETE_BUTTON": "Eliminar",
|
||||||
|
"BULK_DELETE": {
|
||||||
|
"TITLE": "Delete documents?",
|
||||||
|
"DESCRIPTION": "Are you sure you want to delete the selected documents? This action cannot be undone.",
|
||||||
|
"CONFIRM": "Yes, delete all",
|
||||||
|
"SUCCESS_MESSAGE": "Documents deleted successfully",
|
||||||
|
"ERROR_MESSAGE": "There was an error deleting the documents, please try again."
|
||||||
|
},
|
||||||
"RELATED_RESPONSES": {
|
"RELATED_RESPONSES": {
|
||||||
"TITLE": "Related FAQs",
|
"TITLE": "Related FAQs",
|
||||||
"DESCRIPTION": "These FAQs are generated directly from the document."
|
"DESCRIPTION": "These FAQs are generated directly from the document."
|
||||||
@@ -795,6 +806,7 @@
|
|||||||
"CUSTOM_TOOLS": {
|
"CUSTOM_TOOLS": {
|
||||||
"HEADER": "Tools",
|
"HEADER": "Tools",
|
||||||
"ADD_NEW": "Create a new tool",
|
"ADD_NEW": "Create a new tool",
|
||||||
|
"SOFT_LIMIT_WARNING": "Having more than 10 tools may reduce the assistant's reliability in selecting the right tool. Consider removing unused tools for better results.",
|
||||||
"EMPTY_STATE": {
|
"EMPTY_STATE": {
|
||||||
"TITLE": "No custom tools available",
|
"TITLE": "No custom tools available",
|
||||||
"SUBTITLE": "Create custom tools to connect your assistant with external APIs and services, enabling it to fetch data and perform actions on your behalf.",
|
"SUBTITLE": "Create custom tools to connect your assistant with external APIs and services, enabling it to fetch data and perform actions on your behalf.",
|
||||||
@@ -825,11 +837,18 @@
|
|||||||
"SUCCESS_MESSAGE": "Custom tool deleted successfully",
|
"SUCCESS_MESSAGE": "Custom tool deleted successfully",
|
||||||
"ERROR_MESSAGE": "Failed to delete custom tool"
|
"ERROR_MESSAGE": "Failed to delete custom tool"
|
||||||
},
|
},
|
||||||
|
"TEST": {
|
||||||
|
"BUTTON": "Test connection",
|
||||||
|
"SUCCESS": "Endpoint returned HTTP {status}",
|
||||||
|
"ERROR": "Connection failed",
|
||||||
|
"DISABLED_HINT": "Testing is only available for endpoints without templates or request bodies."
|
||||||
|
},
|
||||||
"FORM": {
|
"FORM": {
|
||||||
"TITLE": {
|
"TITLE": {
|
||||||
"LABEL": "Tool Name",
|
"LABEL": "Tool Name",
|
||||||
"PLACEHOLDER": "Order Lookup",
|
"PLACEHOLDER": "Order Lookup",
|
||||||
"ERROR": "Tool name is required"
|
"ERROR": "Tool name is required",
|
||||||
|
"MAX_LENGTH_ERROR": "Tool name must be {max} characters or fewer"
|
||||||
},
|
},
|
||||||
"DESCRIPTION": {
|
"DESCRIPTION": {
|
||||||
"LABEL": "Descripción",
|
"LABEL": "Descripción",
|
||||||
|
|||||||
@@ -7,14 +7,14 @@
|
|||||||
"COPY_SUCCESSFUL": "Kopeerimine lõikelauale õnnestus",
|
"COPY_SUCCESSFUL": "Kopeerimine lõikelauale õnnestus",
|
||||||
"COMPANY": "Ettevõte",
|
"COMPANY": "Ettevõte",
|
||||||
"LOCATION": "Asukoht",
|
"LOCATION": "Asukoht",
|
||||||
"BROWSER_LANGUAGE": "Browser Language",
|
"BROWSER_LANGUAGE": "Brauseri keel",
|
||||||
"CONVERSATION_TITLE": "Vestluse üksikasjad",
|
"CONVERSATION_TITLE": "Vestluse üksikasjad",
|
||||||
"VIEW_PROFILE": "Vaata profiili",
|
"VIEW_PROFILE": "Vaata profiili",
|
||||||
"BROWSER": "Brauser",
|
"BROWSER": "Brauser",
|
||||||
"OS": "Operatsioonisüsteem",
|
"OS": "Operatsioonisüsteem",
|
||||||
"INITIATED_FROM": "Algatatud kohast",
|
"INITIATED_FROM": "Algatatud kohast",
|
||||||
"INITIATED_AT": "Algatatud ajal",
|
"INITIATED_AT": "Algatatud ajal",
|
||||||
"IP_ADDRESS": "IP Address",
|
"IP_ADDRESS": "IP-aadress",
|
||||||
"CREATED_AT_LABEL": "Loodud",
|
"CREATED_AT_LABEL": "Loodud",
|
||||||
"NEW_MESSAGE": "Uus sõnum",
|
"NEW_MESSAGE": "Uus sõnum",
|
||||||
"CALL": "Helista",
|
"CALL": "Helista",
|
||||||
@@ -91,7 +91,7 @@
|
|||||||
},
|
},
|
||||||
"BIO": {
|
"BIO": {
|
||||||
"PLACEHOLDER": "Sisesta kontakti elulugu",
|
"PLACEHOLDER": "Sisesta kontakti elulugu",
|
||||||
"LABEL": "Bio"
|
"LABEL": "Tutvustus"
|
||||||
},
|
},
|
||||||
"EMAIL_ADDRESS": {
|
"EMAIL_ADDRESS": {
|
||||||
"PLACEHOLDER": "Sisesta kontakti e-posti aadress",
|
"PLACEHOLDER": "Sisesta kontakti e-posti aadress",
|
||||||
@@ -128,19 +128,19 @@
|
|||||||
},
|
},
|
||||||
"SOCIAL_PROFILES": {
|
"SOCIAL_PROFILES": {
|
||||||
"FACEBOOK": {
|
"FACEBOOK": {
|
||||||
"PLACEHOLDER": "Enter the Facebook username",
|
"PLACEHOLDER": "Sisesta Facebooki kasutajanimi",
|
||||||
"LABEL": "Facebook"
|
"LABEL": "Facebook"
|
||||||
},
|
},
|
||||||
"TWITTER": {
|
"TWITTER": {
|
||||||
"PLACEHOLDER": "Enter the Twitter username",
|
"PLACEHOLDER": "Sisesta Twitteri kasutajanimi",
|
||||||
"LABEL": "Twitter"
|
"LABEL": "Twitter"
|
||||||
},
|
},
|
||||||
"LINKEDIN": {
|
"LINKEDIN": {
|
||||||
"PLACEHOLDER": "Enter the LinkedIn username",
|
"PLACEHOLDER": "Sisesta LinkedIni kasutajanimi",
|
||||||
"LABEL": "LinkedIn"
|
"LABEL": "LinkedIn"
|
||||||
},
|
},
|
||||||
"GITHUB": {
|
"GITHUB": {
|
||||||
"PLACEHOLDER": "Enter the Github username",
|
"PLACEHOLDER": "Sisesta GitHubi kasutajanimi",
|
||||||
"LABEL": "Github"
|
"LABEL": "Github"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -192,7 +192,7 @@
|
|||||||
"CONTACTS_PAGE": {
|
"CONTACTS_PAGE": {
|
||||||
"LIST": {
|
"LIST": {
|
||||||
"TABLE_HEADER": {
|
"TABLE_HEADER": {
|
||||||
"SOCIAL_PROFILES": "Social Profiles"
|
"SOCIAL_PROFILES": "Sotsiaalmeedia profiilid"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -215,7 +215,7 @@
|
|||||||
"CANCEL": "Tühista",
|
"CANCEL": "Tühista",
|
||||||
"NAME": {
|
"NAME": {
|
||||||
"LABEL": "Kohandatud atribuudi nimi",
|
"LABEL": "Kohandatud atribuudi nimi",
|
||||||
"PLACEHOLDER": "Eg: shopify id",
|
"PLACEHOLDER": "Nt: Shopify ID",
|
||||||
"ERROR": "Vigane kohandatud atribuudi nimi"
|
"ERROR": "Vigane kohandatud atribuudi nimi"
|
||||||
},
|
},
|
||||||
"VALUE": {
|
"VALUE": {
|
||||||
@@ -317,9 +317,9 @@
|
|||||||
"UNBLOCK_ERROR_MESSAGE": "Kontakti blokeeringust vabaks tegemine ebaõnnestus. Palun proovi hiljem uuesti.",
|
"UNBLOCK_ERROR_MESSAGE": "Kontakti blokeeringust vabaks tegemine ebaõnnestus. Palun proovi hiljem uuesti.",
|
||||||
"IMPORT_CONTACT": {
|
"IMPORT_CONTACT": {
|
||||||
"TITLE": "Impordi kontaktid",
|
"TITLE": "Impordi kontaktid",
|
||||||
"DESCRIPTION": "Import contacts through a CSV file.",
|
"DESCRIPTION": "Impordi kontaktid CSV-faili kaudu.",
|
||||||
"DOWNLOAD_LABEL": "Download a sample csv.",
|
"DOWNLOAD_LABEL": "Laadi alla näidis-CSV.",
|
||||||
"LABEL": "CSV File:",
|
"LABEL": "CSV-fail:",
|
||||||
"CHOOSE_FILE": "Vali fail",
|
"CHOOSE_FILE": "Vali fail",
|
||||||
"CHANGE": "Muuda",
|
"CHANGE": "Muuda",
|
||||||
"CANCEL": "Tühista",
|
"CANCEL": "Tühista",
|
||||||
@@ -435,7 +435,7 @@
|
|||||||
"PLACEHOLDER": "Vali riik"
|
"PLACEHOLDER": "Vali riik"
|
||||||
},
|
},
|
||||||
"BIO": {
|
"BIO": {
|
||||||
"PLACEHOLDER": "Enter the bio"
|
"PLACEHOLDER": "Sisesta tutvustus"
|
||||||
},
|
},
|
||||||
"COMPANY_NAME": {
|
"COMPANY_NAME": {
|
||||||
"PLACEHOLDER": "Sisesta ettevõtte nimi"
|
"PLACEHOLDER": "Sisesta ettevõtte nimi"
|
||||||
@@ -446,28 +446,28 @@
|
|||||||
"ERROR_MESSAGE": "Kontakti ei õnnestunud uuendada. Palun proovi hiljem uuesti."
|
"ERROR_MESSAGE": "Kontakti ei õnnestunud uuendada. Palun proovi hiljem uuesti."
|
||||||
},
|
},
|
||||||
"SOCIAL_MEDIA": {
|
"SOCIAL_MEDIA": {
|
||||||
"TITLE": "Edit social links",
|
"TITLE": "Muuda sotsiaalmeedia linke",
|
||||||
"FORM": {
|
"FORM": {
|
||||||
"FACEBOOK": {
|
"FACEBOOK": {
|
||||||
"PLACEHOLDER": "Add Facebook"
|
"PLACEHOLDER": "Lisa Facebook"
|
||||||
},
|
},
|
||||||
"GITHUB": {
|
"GITHUB": {
|
||||||
"PLACEHOLDER": "Add Github"
|
"PLACEHOLDER": "Lisa GitHub"
|
||||||
},
|
},
|
||||||
"INSTAGRAM": {
|
"INSTAGRAM": {
|
||||||
"PLACEHOLDER": "Add Instagram"
|
"PLACEHOLDER": "Lisa Instagram"
|
||||||
},
|
},
|
||||||
"TELEGRAM": {
|
"TELEGRAM": {
|
||||||
"PLACEHOLDER": "Add Telegram"
|
"PLACEHOLDER": "Lisa Telegram"
|
||||||
},
|
},
|
||||||
"TIKTOK": {
|
"TIKTOK": {
|
||||||
"PLACEHOLDER": "Add TikTok"
|
"PLACEHOLDER": "Lisa TikTok"
|
||||||
},
|
},
|
||||||
"LINKEDIN": {
|
"LINKEDIN": {
|
||||||
"PLACEHOLDER": "Add LinkedIn"
|
"PLACEHOLDER": "Lisa LinkedIn"
|
||||||
},
|
},
|
||||||
"TWITTER": {
|
"TWITTER": {
|
||||||
"PLACEHOLDER": "Add Twitter"
|
"PLACEHOLDER": "Lisa Twitter"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -492,12 +492,12 @@
|
|||||||
},
|
},
|
||||||
"AVATAR": {
|
"AVATAR": {
|
||||||
"UPLOAD": {
|
"UPLOAD": {
|
||||||
"ERROR_MESSAGE": "Could not upload avatar. Please try again later.",
|
"ERROR_MESSAGE": "Avatari üleslaadimine ebaõnnestus. Palun proovi hiljem uuesti.",
|
||||||
"SUCCESS_MESSAGE": "Avatar üles laaditud edukalt"
|
"SUCCESS_MESSAGE": "Avatar üles laaditud edukalt"
|
||||||
},
|
},
|
||||||
"DELETE": {
|
"DELETE": {
|
||||||
"SUCCESS_MESSAGE": "Avatar kustutatud edukalt",
|
"SUCCESS_MESSAGE": "Avatar kustutatud edukalt",
|
||||||
"ERROR_MESSAGE": "Could not delete avatar. Please try again later."
|
"ERROR_MESSAGE": "Avatari kustutamine ebaõnnestus. Palun proovi hiljem uuesti."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -538,7 +538,7 @@
|
|||||||
},
|
},
|
||||||
"MERGE": {
|
"MERGE": {
|
||||||
"TITLE": "Ühenda kontakt",
|
"TITLE": "Ühenda kontakt",
|
||||||
"DESCRIPTION": "Combine two profiles into one, including all attributes and conversations. In case of conflict, the primary contact’s attributes will take precedence.",
|
"DESCRIPTION": "Ühenda kaks profiili üheks, sealhulgas kõik atribuudid ja vestlused. Vastuolu korral eelistatakse peamise kontakti atribuute.",
|
||||||
"PRIMARY": "Peamine kontakt",
|
"PRIMARY": "Peamine kontakt",
|
||||||
"PRIMARY_HELP_LABEL": "Salvestamiseks",
|
"PRIMARY_HELP_LABEL": "Salvestamiseks",
|
||||||
"PRIMARY_REQUIRED_ERROR": "Palun valige ühendamiseks kontakt enne jätkamist",
|
"PRIMARY_REQUIRED_ERROR": "Palun valige ühendamiseks kontakt enne jätkamist",
|
||||||
|
|||||||
@@ -214,7 +214,7 @@
|
|||||||
"DRAG_DROP": "Lohista siia manusena lisamiseks",
|
"DRAG_DROP": "Lohista siia manusena lisamiseks",
|
||||||
"START_AUDIO_RECORDING": "Alusta heli salvestamist",
|
"START_AUDIO_RECORDING": "Alusta heli salvestamist",
|
||||||
"STOP_AUDIO_RECORDING": "Peata heli salvestamine",
|
"STOP_AUDIO_RECORDING": "Peata heli salvestamine",
|
||||||
"COPILOT_THINKING": "Copilot is thinking",
|
"COPILOT_THINKING": "Copilot mõtleb",
|
||||||
"EMAIL_HEAD": {
|
"EMAIL_HEAD": {
|
||||||
"TO": "SAJALE",
|
"TO": "SAJALE",
|
||||||
"ADD_BCC": "Add bcc",
|
"ADD_BCC": "Add bcc",
|
||||||
|
|||||||
@@ -316,6 +316,18 @@
|
|||||||
"SUCCESS_MESSAGE": "Keel on portaalist edukalt eemaldatud",
|
"SUCCESS_MESSAGE": "Keel on portaalist edukalt eemaldatud",
|
||||||
"ERROR_MESSAGE": "Keelt ei õnnestunud portaalist eemaldada. Proovi uuesti."
|
"ERROR_MESSAGE": "Keelt ei õnnestunud portaalist eemaldada. Proovi uuesti."
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"DRAFT_LOCALE": {
|
||||||
|
"API": {
|
||||||
|
"SUCCESS_MESSAGE": "Locale moved to draft successfully",
|
||||||
|
"ERROR_MESSAGE": "Unable to move locale to draft. Try again."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"PUBLISH_LOCALE": {
|
||||||
|
"API": {
|
||||||
|
"SUCCESS_MESSAGE": "Locale published successfully",
|
||||||
|
"ERROR_MESSAGE": "Unable to publish locale. Try again."
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"TABLE": {
|
"TABLE": {
|
||||||
@@ -644,8 +656,11 @@
|
|||||||
"ARTICLES_COUNT": "{count} artikkel | {count} artiklit",
|
"ARTICLES_COUNT": "{count} artikkel | {count} artiklit",
|
||||||
"CATEGORIES_COUNT": "{count} kategooria | {count} kategooriat",
|
"CATEGORIES_COUNT": "{count} kategooria | {count} kategooriat",
|
||||||
"DEFAULT": "Vaikimisi",
|
"DEFAULT": "Vaikimisi",
|
||||||
|
"DRAFT": "Mustand",
|
||||||
"DROPDOWN_MENU": {
|
"DROPDOWN_MENU": {
|
||||||
"MAKE_DEFAULT": "Määra vaikimisi",
|
"MAKE_DEFAULT": "Määra vaikimisi",
|
||||||
|
"MOVE_TO_DRAFT": "Move to draft",
|
||||||
|
"PUBLISH_LOCALE": "Publish locale",
|
||||||
"DELETE": "Kustuta"
|
"DELETE": "Kustuta"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -655,6 +670,13 @@
|
|||||||
"COMBOBOX": {
|
"COMBOBOX": {
|
||||||
"PLACEHOLDER": "Vali keel..."
|
"PLACEHOLDER": "Vali keel..."
|
||||||
},
|
},
|
||||||
|
"STATUS": {
|
||||||
|
"LABEL": "Status",
|
||||||
|
"OPTIONS": {
|
||||||
|
"LIVE": "Avaldatud",
|
||||||
|
"DRAFT": "Mustand"
|
||||||
|
}
|
||||||
|
},
|
||||||
"API": {
|
"API": {
|
||||||
"SUCCESS_MESSAGE": "Keel lisatud edukalt",
|
"SUCCESS_MESSAGE": "Keel lisatud edukalt",
|
||||||
"ERROR_MESSAGE": "Keelt ei õnnestunud lisada. Proovi uuesti."
|
"ERROR_MESSAGE": "Keelt ei õnnestunud lisada. Proovi uuesti."
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
{
|
{
|
||||||
"INBOX_MGMT": {
|
"INBOX_MGMT": {
|
||||||
"HEADER": "Postkastid",
|
"HEADER": "Postkastid",
|
||||||
"DESCRIPTION": "A channel is the mode of communication your customer chooses to interact with you. An inbox is where you manage interactions for a specific channel. It can include communications from various sources such as email, live chat, and social media.",
|
"DESCRIPTION": "Kanal on suhtlusviis, mille teie klient valib teiega suhtlemiseks. Postkast on koht, kus haldate konkreetse kanali suhtlusi. See võib sisaldada suhtlust eri allikatest, nagu e-post, reaalajas vestlus ja sotsiaalmeedia.",
|
||||||
"LEARN_MORE": "Learn more about inboxes",
|
"LEARN_MORE": "Lisateave postkastide kohta",
|
||||||
"COUNT": "{n} inbox | {n} inboxes",
|
"COUNT": "{n} inbox | {n} inboxes",
|
||||||
"SEARCH_PLACEHOLDER": "Search inboxes...",
|
"SEARCH_PLACEHOLDER": "Search inboxes...",
|
||||||
"NO_RESULTS": "No inboxes found matching your search",
|
"NO_RESULTS": "No inboxes found matching your search",
|
||||||
"RECONNECTION_REQUIRED": "Your inbox is disconnected. You won't receive new messages until you reauthorize it.",
|
"RECONNECTION_REQUIRED": "Teie postkast on lahti ühendatud. Te ei saa uusi sõnumeid enne, kui volitate selle uuesti.",
|
||||||
"CLICK_TO_RECONNECT": "Click here to reconnect.",
|
"CLICK_TO_RECONNECT": "Taasühendamiseks klõpsake siin.",
|
||||||
"WHATSAPP_REGISTRATION_INCOMPLETE": "Your WhatsApp Business registration isn’t complete. Please check your display name status in Meta Business Manager before reconnecting.",
|
"WHATSAPP_REGISTRATION_INCOMPLETE": "Your WhatsApp Business registration isn’t complete. Please check your display name status in Meta Business Manager before reconnecting.",
|
||||||
"COMPLETE_REGISTRATION": "Complete Registration",
|
"COMPLETE_REGISTRATION": "Complete Registration",
|
||||||
"LIST": {
|
"LIST": {
|
||||||
@@ -15,20 +15,20 @@
|
|||||||
},
|
},
|
||||||
"CREATE_FLOW": {
|
"CREATE_FLOW": {
|
||||||
"CHANNEL": {
|
"CHANNEL": {
|
||||||
"TITLE": "Choose Channel",
|
"TITLE": "Vali kanal",
|
||||||
"BODY": "Choose the provider you want to integrate with Chatwoot."
|
"BODY": "Valige teenusepakkuja, mille soovite Chatwootiga siduda."
|
||||||
},
|
},
|
||||||
"INBOX": {
|
"INBOX": {
|
||||||
"TITLE": "Create Inbox",
|
"TITLE": "Loo postkast",
|
||||||
"BODY": "Authenticate your account and create an inbox."
|
"BODY": "Autentige oma konto ja looge postkast."
|
||||||
},
|
},
|
||||||
"AGENT": {
|
"AGENT": {
|
||||||
"TITLE": "Add Agents",
|
"TITLE": "Lisa agendid",
|
||||||
"BODY": "Add agents to the created inbox."
|
"BODY": "Lisage loodud postkasti agendid."
|
||||||
},
|
},
|
||||||
"FINISH": {
|
"FINISH": {
|
||||||
"TITLE": "Voilà!",
|
"TITLE": "Valmis!",
|
||||||
"BODY": "You are all set to go!"
|
"BODY": "Kõik on valmis!"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ADD": {
|
"ADD": {
|
||||||
@@ -47,18 +47,18 @@
|
|||||||
"CHOOSE_PLACEHOLDER": "Valige nimekirjast leht",
|
"CHOOSE_PLACEHOLDER": "Valige nimekirjast leht",
|
||||||
"INBOX_NAME": "Postkasti nimi",
|
"INBOX_NAME": "Postkasti nimi",
|
||||||
"ADD_NAME": "Lisa oma postkastile nimi",
|
"ADD_NAME": "Lisa oma postkastile nimi",
|
||||||
"PICK_NAME": "Pick a Name for your Inbox",
|
"PICK_NAME": "Valige oma postkastile nimi",
|
||||||
"PICK_A_VALUE": "Vali väärtus",
|
"PICK_A_VALUE": "Vali väärtus",
|
||||||
"CREATE_INBOX": "Create Inbox"
|
"CREATE_INBOX": "Loo postkast"
|
||||||
},
|
},
|
||||||
"INSTAGRAM": {
|
"INSTAGRAM": {
|
||||||
"CONTINUE_WITH_INSTAGRAM": "Continue with Instagram",
|
"CONTINUE_WITH_INSTAGRAM": "Jätka Instagramiga",
|
||||||
"CONNECT_YOUR_INSTAGRAM_PROFILE": "Connect your Instagram Profile",
|
"CONNECT_YOUR_INSTAGRAM_PROFILE": "Ühenda oma Instagrami profiil",
|
||||||
"HELP": "To add your Instagram profile as a channel, you need to authenticate your Instagram Profile by clicking on 'Continue with Instagram' ",
|
"HELP": "Instagrami profiili kanali lisamiseks peate autentima oma Instagrami profiili, klõpsates nupul 'Jätka Instagramiga'.",
|
||||||
"ERROR_MESSAGE": "There was an error connecting to Instagram, please try again",
|
"ERROR_MESSAGE": "Instagramiga ühendamisel tekkis viga, palun proovige uuesti",
|
||||||
"ERROR_AUTH": "There was an error connecting to Instagram, please try again",
|
"ERROR_AUTH": "Instagramiga ühendamisel tekkis viga, palun proovige uuesti",
|
||||||
"NEW_INBOX_SUGGESTION": "This Instagram account was previously linked to a different inbox and has now been migrated here. All new messages will appear here. The old inbox will no longer be able to send or receive messages for this account.",
|
"NEW_INBOX_SUGGESTION": "See Instagrami konto oli varem seotud teise postkastiga ja on nüüd siia üle viidud. Kõik uued sõnumid kuvatakse siin. Vana postkast ei saa selle konto jaoks enam sõnumeid saata ega vastu võtta.",
|
||||||
"DUPLICATE_INBOX_BANNER": "This Instagram account was migrated to the new Instagram channel inbox. You won’t be able to send/receive Instagram messages from this inbox anymore."
|
"DUPLICATE_INBOX_BANNER": "See Instagrami konto viidi üle uue Instagrami kanali postkasti. Sellest postkastist ei saa te enam Instagrami sõnumeid saata ega vastu võtta."
|
||||||
},
|
},
|
||||||
"TIKTOK": {
|
"TIKTOK": {
|
||||||
"CONTINUE_WITH_TIKTOK": "Continue with TikTok",
|
"CONTINUE_WITH_TIKTOK": "Continue with TikTok",
|
||||||
@@ -83,7 +83,7 @@
|
|||||||
},
|
},
|
||||||
"CHANNEL_WEBHOOK_URL": {
|
"CHANNEL_WEBHOOK_URL": {
|
||||||
"LABEL": "Veebikonksu URL",
|
"LABEL": "Veebikonksu URL",
|
||||||
"PLACEHOLDER": "Please enter your Webhook URL",
|
"PLACEHOLDER": "Palun sisestage oma webhooki URL",
|
||||||
"ERROR": "Palun sisesta kehtiv URL"
|
"ERROR": "Palun sisesta kehtiv URL"
|
||||||
},
|
},
|
||||||
"CHANNEL_DOMAIN": {
|
"CHANNEL_DOMAIN": {
|
||||||
@@ -164,7 +164,7 @@
|
|||||||
"ERROR": "See väli on kohustuslik"
|
"ERROR": "See väli on kohustuslik"
|
||||||
},
|
},
|
||||||
"PHONE_NUMBER": {
|
"PHONE_NUMBER": {
|
||||||
"LABEL": "Phone Number",
|
"LABEL": "Telefoninumber",
|
||||||
"PLACEHOLDER": "Palun sisestage telefoninumber, millest sõnum saadetakse.",
|
"PLACEHOLDER": "Palun sisestage telefoninumber, millest sõnum saadetakse.",
|
||||||
"ERROR": "Palun sisestage kehtiv telefoninumber, mis algab märgiga `+` ja ei sisalda tühikuid."
|
"ERROR": "Palun sisestage kehtiv telefoninumber, mis algab märgiga `+` ja ei sisalda tühikuid."
|
||||||
},
|
},
|
||||||
@@ -196,12 +196,12 @@
|
|||||||
},
|
},
|
||||||
"API_KEY": {
|
"API_KEY": {
|
||||||
"LABEL": "API võti",
|
"LABEL": "API võti",
|
||||||
"PLACEHOLDER": "Please enter your Bandwidth API Key",
|
"PLACEHOLDER": "Palun sisestage oma Bandwidth API võti",
|
||||||
"ERROR": "See väli on kohustuslik"
|
"ERROR": "See väli on kohustuslik"
|
||||||
},
|
},
|
||||||
"API_SECRET": {
|
"API_SECRET": {
|
||||||
"LABEL": "API saladus",
|
"LABEL": "API saladus",
|
||||||
"PLACEHOLDER": "Please enter your Bandwidth API Secret",
|
"PLACEHOLDER": "Palun sisestage oma Bandwidth API saladus",
|
||||||
"ERROR": "See väli on kohustuslik"
|
"ERROR": "See väli on kohustuslik"
|
||||||
},
|
},
|
||||||
"APPLICATION_ID": {
|
"APPLICATION_ID": {
|
||||||
@@ -237,13 +237,13 @@
|
|||||||
"WHATSAPP_EMBEDDED": "WhatsApp Business",
|
"WHATSAPP_EMBEDDED": "WhatsApp Business",
|
||||||
"TWILIO": "Twilio",
|
"TWILIO": "Twilio",
|
||||||
"WHATSAPP_CLOUD": "WhatsApp Cloud",
|
"WHATSAPP_CLOUD": "WhatsApp Cloud",
|
||||||
"WHATSAPP_CLOUD_DESC": "Quick setup through Meta",
|
"WHATSAPP_CLOUD_DESC": "Kiire seadistus Meta kaudu",
|
||||||
"TWILIO_DESC": "Connect via Twilio credentials",
|
"TWILIO_DESC": "Ühenda Twilio andmetega",
|
||||||
"360_DIALOG": "360Dialog"
|
"360_DIALOG": "360Dialog"
|
||||||
},
|
},
|
||||||
"SELECT_PROVIDER": {
|
"SELECT_PROVIDER": {
|
||||||
"TITLE": "Select your API provider",
|
"TITLE": "Vali API pakkuja",
|
||||||
"DESCRIPTION": "Choose your WhatsApp provider. You can connect directly through Meta which requires no setup, or connect through Twilio using your account credentials."
|
"DESCRIPTION": "Vali oma WhatsAppi pakkuja. Saad ühendada otse Meta kaudu ilma seadistamiseta või kasutada Twilio kontotunnuseid."
|
||||||
},
|
},
|
||||||
"INBOX_NAME": {
|
"INBOX_NAME": {
|
||||||
"LABEL": "Sissetuleva postkasti nimi",
|
"LABEL": "Sissetuleva postkasti nimi",
|
||||||
@@ -267,7 +267,7 @@
|
|||||||
},
|
},
|
||||||
"WEBHOOK_VERIFY_TOKEN": {
|
"WEBHOOK_VERIFY_TOKEN": {
|
||||||
"LABEL": "Webhook kinnituse token",
|
"LABEL": "Webhook kinnituse token",
|
||||||
"PLACEHOLDER": "Enter a verify token which you want to configure for Facebook webhooks.",
|
"PLACEHOLDER": "Sisestage kinnitustoken, mida soovite Facebooki webhookide jaoks seadistada.",
|
||||||
"ERROR": "Palun sisesta kehtiv väärtus."
|
"ERROR": "Palun sisesta kehtiv väärtus."
|
||||||
},
|
},
|
||||||
"API_KEY": {
|
"API_KEY": {
|
||||||
@@ -287,16 +287,16 @@
|
|||||||
"TITLE": "Quick setup with Meta",
|
"TITLE": "Quick setup with Meta",
|
||||||
"DESC": "Use the WhatsApp Embedded Signup flow to quickly connect new numbers. You will be redirected to Meta to log into your WhatsApp Business account. Having admin access will help make the setup smooth and easy.",
|
"DESC": "Use the WhatsApp Embedded Signup flow to quickly connect new numbers. You will be redirected to Meta to log into your WhatsApp Business account. Having admin access will help make the setup smooth and easy.",
|
||||||
"BENEFITS": {
|
"BENEFITS": {
|
||||||
"TITLE": "Benefits of Embedded Signup:",
|
"TITLE": "Sisseehitatud registreerimise eelised:",
|
||||||
"EASY_SETUP": "No manual configuration required",
|
"EASY_SETUP": "Käsitsi seadistamine pole vajalik",
|
||||||
"SECURE_AUTH": "Secure OAuth based authentication",
|
"SECURE_AUTH": "Turvaline OAuth-põhine autentimine",
|
||||||
"AUTO_CONFIG": "Automatic webhook and phone number configuration"
|
"AUTO_CONFIG": "Automaatne webhooki ja telefoninumbri seadistus"
|
||||||
},
|
},
|
||||||
"LEARN_MORE": {
|
"LEARN_MORE": {
|
||||||
"TEXT": "To learn more about integrated signup, pricing, and limitations, visit {link}.",
|
"TEXT": "To learn more about integrated signup, pricing, and limitations, visit {link}.",
|
||||||
"LINK_TEXT": "this link"
|
"LINK_TEXT": "this link"
|
||||||
},
|
},
|
||||||
"SUBMIT_BUTTON": "Connect with WhatsApp Business",
|
"SUBMIT_BUTTON": "Ühenda WhatsApp Businessiga",
|
||||||
"AUTH_PROCESSING": "Authenticating with Meta",
|
"AUTH_PROCESSING": "Authenticating with Meta",
|
||||||
"WAITING_FOR_BUSINESS_INFO": "Please complete business setup in the Meta window...",
|
"WAITING_FOR_BUSINESS_INFO": "Please complete business setup in the Meta window...",
|
||||||
"PROCESSING": "Setting up your WhatsApp Business Account",
|
"PROCESSING": "Setting up your WhatsApp Business Account",
|
||||||
@@ -316,33 +316,33 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"VOICE": {
|
"VOICE": {
|
||||||
"TITLE": "Voice Channel",
|
"TITLE": "Kõnekanal",
|
||||||
"DESC": "Integrate Twilio Voice and start supporting your customers via phone calls.",
|
"DESC": "Integreeri Twilio Voice ja alusta klientide toetamist telefonikõnede kaudu.",
|
||||||
"PHONE_NUMBER": {
|
"PHONE_NUMBER": {
|
||||||
"LABEL": "Phone Number",
|
"LABEL": "Telefoninumber",
|
||||||
"PLACEHOLDER": "Enter your phone number (e.g. +1234567890)",
|
"PLACEHOLDER": "Sisesta oma telefoninumber (nt +1234567890)",
|
||||||
"ERROR": "Please provide a valid phone number in E.164 format (e.g. +1234567890)"
|
"ERROR": "Palun sisesta kehtiv telefoninumber E.164 formaadis (nt +1234567890)"
|
||||||
},
|
},
|
||||||
"TWILIO": {
|
"TWILIO": {
|
||||||
"ACCOUNT_SID": {
|
"ACCOUNT_SID": {
|
||||||
"LABEL": "Account SID",
|
"LABEL": "Konto SID",
|
||||||
"PLACEHOLDER": "Enter your Twilio Account SID",
|
"PLACEHOLDER": "Sisesta oma Twilio Account SID",
|
||||||
"REQUIRED": "Account SID is required"
|
"REQUIRED": "Account SID on kohustuslik"
|
||||||
},
|
},
|
||||||
"AUTH_TOKEN": {
|
"AUTH_TOKEN": {
|
||||||
"LABEL": "Auth Token",
|
"LABEL": "Autentimismärgis",
|
||||||
"PLACEHOLDER": "Enter your Twilio Auth Token",
|
"PLACEHOLDER": "Sisesta oma Twilio autentimismärgis",
|
||||||
"REQUIRED": "Auth Token is required"
|
"REQUIRED": "Autentimismärgis on kohustuslik"
|
||||||
},
|
},
|
||||||
"API_KEY_SID": {
|
"API_KEY_SID": {
|
||||||
"LABEL": "API Key SID",
|
"LABEL": "API võtme SID",
|
||||||
"PLACEHOLDER": "Enter your Twilio API Key SID",
|
"PLACEHOLDER": "Sisesta oma Twilio API võtme SID",
|
||||||
"REQUIRED": "API Key SID is required"
|
"REQUIRED": "API Key SID on kohustuslik"
|
||||||
},
|
},
|
||||||
"API_KEY_SECRET": {
|
"API_KEY_SECRET": {
|
||||||
"LABEL": "API Key Secret",
|
"LABEL": "API võtme saladus",
|
||||||
"PLACEHOLDER": "Enter your Twilio API Key Secret",
|
"PLACEHOLDER": "Sisesta oma Twilio API Key Secret",
|
||||||
"REQUIRED": "API Key Secret is required"
|
"REQUIRED": "API Key Secret on kohustuslik"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"CONFIGURATION": {
|
"CONFIGURATION": {
|
||||||
@@ -351,9 +351,9 @@
|
|||||||
"TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL",
|
"TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL",
|
||||||
"TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number."
|
"TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number."
|
||||||
},
|
},
|
||||||
"SUBMIT_BUTTON": "Create Voice Channel",
|
"SUBMIT_BUTTON": "Loo kõnekanal",
|
||||||
"API": {
|
"API": {
|
||||||
"ERROR_MESSAGE": "We were not able to create the voice channel"
|
"ERROR_MESSAGE": "Häälekanalit ei õnnestunud luua"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"API_CHANNEL": {
|
"API_CHANNEL": {
|
||||||
@@ -365,9 +365,9 @@
|
|||||||
"ERROR": "See väli on kohustuslik"
|
"ERROR": "See väli on kohustuslik"
|
||||||
},
|
},
|
||||||
"WEBHOOK_URL": {
|
"WEBHOOK_URL": {
|
||||||
"LABEL": "Webhook URL",
|
"LABEL": "Veebikonksu URL",
|
||||||
"SUBTITLE": "Configure the URL where you want to receive callbacks on events.",
|
"SUBTITLE": "Seadistage URL, kuhu soovite sündmuste tagasikutsed vastu võtta.",
|
||||||
"PLACEHOLDER": "Webhook URL"
|
"PLACEHOLDER": "Veebikonksu URL"
|
||||||
},
|
},
|
||||||
"SUBMIT_BUTTON": "Loo API kanal",
|
"SUBMIT_BUTTON": "Loo API kanal",
|
||||||
"API": {
|
"API": {
|
||||||
@@ -376,7 +376,7 @@
|
|||||||
},
|
},
|
||||||
"EMAIL_CHANNEL": {
|
"EMAIL_CHANNEL": {
|
||||||
"TITLE": "E-posti kanal",
|
"TITLE": "E-posti kanal",
|
||||||
"DESC": "Integrate your email inbox.",
|
"DESC": "Ühendage oma e-posti postkast.",
|
||||||
"CHANNEL_NAME": {
|
"CHANNEL_NAME": {
|
||||||
"LABEL": "Kanali nimi",
|
"LABEL": "Kanali nimi",
|
||||||
"PLACEHOLDER": "Palun sisesta kanali nimi",
|
"PLACEHOLDER": "Palun sisesta kanali nimi",
|
||||||
@@ -494,7 +494,7 @@
|
|||||||
"AGENTS": {
|
"AGENTS": {
|
||||||
"TITLE": "Agendid",
|
"TITLE": "Agendid",
|
||||||
"DESC": "Siin saate lisada agente, kes haldavad teie äsja loodud postkasti. Ainult valitud agendid pääsevad teie postkastile ligi. Agendid, kes ei kuulu sellesse postkasti, ei näe ega saa vastata selle postkasti sõnumitele, kui nad sisse logivad. <br> <b>PS:</b> Administraatorina, kui vajate ligipääsu kõigile postkastidele, peaksite lisama end agentideks kõigisse loodud postkastidesse.",
|
"DESC": "Siin saate lisada agente, kes haldavad teie äsja loodud postkasti. Ainult valitud agendid pääsevad teie postkastile ligi. Agendid, kes ei kuulu sellesse postkasti, ei näe ega saa vastata selle postkasti sõnumitele, kui nad sisse logivad. <br> <b>PS:</b> Administraatorina, kui vajate ligipääsu kõigile postkastidele, peaksite lisama end agentideks kõigisse loodud postkastidesse.",
|
||||||
"VALIDATION_ERROR": "Add at least one agent to your new Inbox",
|
"VALIDATION_ERROR": "Lisage oma uude postkasti vähemalt üks agent",
|
||||||
"PICK_AGENTS": "Vali postkasti agendid"
|
"PICK_AGENTS": "Vali postkasti agendid"
|
||||||
},
|
},
|
||||||
"DETAILS": {
|
"DETAILS": {
|
||||||
@@ -513,23 +513,23 @@
|
|||||||
"TITLE": "Microsofti e-post",
|
"TITLE": "Microsofti e-post",
|
||||||
"DESCRIPTION": "Alustamiseks klõpsake nuppu Logi sisse Microsoftiga. Teid suunatakse e-posti sisselogimise lehele. Kui aktsepteerite nõutud õigused, suunatakse teid tagasi postkasti loomise sammu juurde.",
|
"DESCRIPTION": "Alustamiseks klõpsake nuppu Logi sisse Microsoftiga. Teid suunatakse e-posti sisselogimise lehele. Kui aktsepteerite nõutud õigused, suunatakse teid tagasi postkasti loomise sammu juurde.",
|
||||||
"EMAIL_PLACEHOLDER": "Sisestage e-posti aadress",
|
"EMAIL_PLACEHOLDER": "Sisestage e-posti aadress",
|
||||||
"SIGN_IN": "Sign in with Microsoft",
|
"SIGN_IN": "Logi sisse Microsoftiga",
|
||||||
"ERROR_MESSAGE": "Microsoftiga ühendamisel tekkis viga, palun proovige uuesti"
|
"ERROR_MESSAGE": "Microsoftiga ühendamisel tekkis viga, palun proovige uuesti"
|
||||||
},
|
},
|
||||||
"GOOGLE": {
|
"GOOGLE": {
|
||||||
"TITLE": "Google Email",
|
"TITLE": "Google'i e-post",
|
||||||
"DESCRIPTION": "Click on the Sign in with Google button to get started. You will redirected to the email sign in page. Once you accept the requested permissions, you would be redirected back to the inbox creation step.",
|
"DESCRIPTION": "Alustamiseks klõpsake nuppu 'Logi sisse Google'iga'. Teid suunatakse e-posti sisselogimislehele. Kui olete nõutud õigused kinnitanud, suunatakse teid tagasi postkasti loomise sammu juurde.",
|
||||||
"SIGN_IN": "Sign in with Google",
|
"SIGN_IN": "Logi sisse Google'iga",
|
||||||
"EMAIL_PLACEHOLDER": "Enter email address",
|
"EMAIL_PLACEHOLDER": "Sisesta e-posti aadress",
|
||||||
"ERROR_MESSAGE": "There was an error connecting to Google, please try again"
|
"ERROR_MESSAGE": "Google'iga ühendamisel tekkis viga, palun proovige uuesti"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"DETAILS": {
|
"DETAILS": {
|
||||||
"LOADING_FB": "Autendime teid Facebookiga...",
|
"LOADING_FB": "Autendime teid Facebookiga...",
|
||||||
"ERROR_FB_LOADING": "Error loading Facebook SDK. Please disable any ad-blockers and try again from a different browser.",
|
"ERROR_FB_LOADING": "Facebooki SDK laadimisel tekkis viga. Palun keelake reklaamiblokeerijad ja proovige uuesti mõne teise brauseriga.",
|
||||||
"ERROR_FB_AUTH": "Midagi läks valesti, palun värskendage lehte...",
|
"ERROR_FB_AUTH": "Midagi läks valesti, palun värskendage lehte...",
|
||||||
"ERROR_FB_UNAUTHORIZED": "Teil ei ole selle toimingu tegemiseks õigusi. ",
|
"ERROR_FB_UNAUTHORIZED": "Teil ei ole selle toimingu tegemiseks õigusi. ",
|
||||||
"ERROR_FB_UNAUTHORIZED_HELP": "Please ensure you have access to the Facebook page with full control. You can read more about Facebook roles <a href=\" https://www.facebook.com/help/187316341316631\">here</a>.",
|
"ERROR_FB_UNAUTHORIZED_HELP": "Veenduge, et teil oleks täieliku juhtimisõigusega juurdepääs Facebooki lehele. Facebooki rollide kohta saate rohkem lugeda <a href=\" https://www.facebook.com/help/187316341316631\">siit</a>.",
|
||||||
"CREATING_CHANNEL": "Loomas teie postkasti...",
|
"CREATING_CHANNEL": "Loomas teie postkasti...",
|
||||||
"TITLE": "Seadista postkasti üksikasjad",
|
"TITLE": "Seadista postkasti üksikasjad",
|
||||||
"DESC": ""
|
"DESC": ""
|
||||||
@@ -566,7 +566,7 @@
|
|||||||
},
|
},
|
||||||
"SENDER_NAME_SECTION": {
|
"SENDER_NAME_SECTION": {
|
||||||
"TITLE": "Saatja nimi",
|
"TITLE": "Saatja nimi",
|
||||||
"SUB_TEXT": "Select the name shown to your customer when they receive emails from your agents.",
|
"SUB_TEXT": "Valige nimi, mida teie klient näeb, kui ta saab teie agentidelt e-kirju.",
|
||||||
"FOR_EG": "Näiteks:",
|
"FOR_EG": "Näiteks:",
|
||||||
"FRIENDLY": {
|
"FRIENDLY": {
|
||||||
"TITLE": "Sõbralik",
|
"TITLE": "Sõbralik",
|
||||||
@@ -755,7 +755,7 @@
|
|||||||
"ALLOW_MESSAGES_AFTER_RESOLVED": "Luba sõnumid pärast vestluse lahendamist",
|
"ALLOW_MESSAGES_AFTER_RESOLVED": "Luba sõnumid pärast vestluse lahendamist",
|
||||||
"ALLOW_MESSAGES_AFTER_RESOLVED_SUB_TEXT": "Luba lõppkasutajatel saata sõnumeid ka pärast vestluse lahendamist.",
|
"ALLOW_MESSAGES_AFTER_RESOLVED_SUB_TEXT": "Luba lõppkasutajatel saata sõnumeid ka pärast vestluse lahendamist.",
|
||||||
"WHATSAPP_SECTION_SUBHEADER": "Seda API võtit kasutatakse WhatsApp API-dega integreerimiseks.",
|
"WHATSAPP_SECTION_SUBHEADER": "Seda API võtit kasutatakse WhatsApp API-dega integreerimiseks.",
|
||||||
"WHATSAPP_SECTION_UPDATE_SUBHEADER": "Enter the new API key to be used for the integration with the WhatsApp APIs.",
|
"WHATSAPP_SECTION_UPDATE_SUBHEADER": "Sisestage uus API võti, mida kasutatakse WhatsAppi API-dega integreerimiseks.",
|
||||||
"WHATSAPP_SECTION_TITLE": "API võti",
|
"WHATSAPP_SECTION_TITLE": "API võti",
|
||||||
"WHATSAPP_SECTION_UPDATE_TITLE": "Uuenda API-võtit",
|
"WHATSAPP_SECTION_UPDATE_TITLE": "Uuenda API-võtit",
|
||||||
"WHATSAPP_SECTION_UPDATE_PLACEHOLDER": "Sisesta siia uus API-võti",
|
"WHATSAPP_SECTION_UPDATE_PLACEHOLDER": "Sisesta siia uus API-võti",
|
||||||
@@ -775,7 +775,7 @@
|
|||||||
"WHATSAPP_APP_ID_MISSING": "WhatsApp App ID is not configured. Please contact your administrator.",
|
"WHATSAPP_APP_ID_MISSING": "WhatsApp App ID is not configured. Please contact your administrator.",
|
||||||
"WHATSAPP_CONFIG_ID_MISSING": "WhatsApp Configuration ID is not configured. Please contact your administrator.",
|
"WHATSAPP_CONFIG_ID_MISSING": "WhatsApp Configuration ID is not configured. Please contact your administrator.",
|
||||||
"WHATSAPP_LOGIN_CANCELLED": "WhatsApp login was cancelled. Please try again.",
|
"WHATSAPP_LOGIN_CANCELLED": "WhatsApp login was cancelled. Please try again.",
|
||||||
"WHATSAPP_WEBHOOK_TITLE": "Webhook Verification Token",
|
"WHATSAPP_WEBHOOK_TITLE": "Webhooki kinnitustoken",
|
||||||
"WHATSAPP_WEBHOOK_SUBHEADER": "Seda märki kasutatakse veebikonksu lõpp-punkti autentsuse kontrollimiseks.",
|
"WHATSAPP_WEBHOOK_SUBHEADER": "Seda märki kasutatakse veebikonksu lõpp-punkti autentsuse kontrollimiseks.",
|
||||||
"WHATSAPP_TEMPLATES_SYNC_TITLE": "Sync Templates",
|
"WHATSAPP_TEMPLATES_SYNC_TITLE": "Sync Templates",
|
||||||
"WHATSAPP_TEMPLATES_SYNC_SUBHEADER": "Manually sync message templates from WhatsApp to update your available templates.",
|
"WHATSAPP_TEMPLATES_SYNC_SUBHEADER": "Manually sync message templates from WhatsApp to update your available templates.",
|
||||||
@@ -876,14 +876,14 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"CSAT": {
|
"CSAT": {
|
||||||
"TITLE": "Enable CSAT",
|
"TITLE": "Luba CSAT",
|
||||||
"SUBTITLE": "Automatically trigger CSAT surveys at the end of conversations to understand how customers feel about their support experience. Track satisfaction trends and identify areas for improvement over time.",
|
"SUBTITLE": "Käivitage vestluste lõpus automaatselt CSAT-küsitlused, et mõista, kuidas kliendid oma toe kogemust tajuvad. Jälgige rahulolu trende ja leidke aja jooksul parenduskohti.",
|
||||||
"DISPLAY_TYPE": {
|
"DISPLAY_TYPE": {
|
||||||
"LABEL": "Display type"
|
"LABEL": "Kuvamisviis"
|
||||||
},
|
},
|
||||||
"MESSAGE": {
|
"MESSAGE": {
|
||||||
"LABEL": "Message",
|
"LABEL": "Sõnum",
|
||||||
"PLACEHOLDER": "Please enter a message to show users with the form"
|
"PLACEHOLDER": "Palun sisestage sõnum, mida vormiga kasutajatele kuvada"
|
||||||
},
|
},
|
||||||
"BUTTON_TEXT": {
|
"BUTTON_TEXT": {
|
||||||
"LABEL": "Button text",
|
"LABEL": "Button text",
|
||||||
@@ -929,20 +929,20 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"SURVEY_RULE": {
|
"SURVEY_RULE": {
|
||||||
"LABEL": "Survey rule",
|
"LABEL": "Küsitluse reegel",
|
||||||
"DESCRIPTION_PREFIX": "Send the survey if the conversation",
|
"DESCRIPTION_PREFIX": "Saada küsitlus, kui vestlus",
|
||||||
"DESCRIPTION_SUFFIX": "any of the labels",
|
"DESCRIPTION_SUFFIX": "mõnda silti",
|
||||||
"OPERATOR": {
|
"OPERATOR": {
|
||||||
"CONTAINS": "contains",
|
"CONTAINS": "sisaldab",
|
||||||
"DOES_NOT_CONTAINS": "does not contain"
|
"DOES_NOT_CONTAINS": "ei sisalda"
|
||||||
},
|
},
|
||||||
"SELECT_PLACEHOLDER": "select labels"
|
"SELECT_PLACEHOLDER": "vali sildid"
|
||||||
},
|
},
|
||||||
"NOTE": "Note: CSAT surveys are sent only once per conversation",
|
"NOTE": "Märkus: CSAT-küsitlused saadetakse iga vestluse kohta vaid korra",
|
||||||
"WHATSAPP_NOTE": "Note: When you save, the system creates a dedicated CSAT template in WhatsApp (used to capture rating and feedback in reports) and submits it as Utility for approval. Meta may still classify it as Marketing based on content. After approval, surveys are sent only once per conversation as per the survey rule.",
|
"WHATSAPP_NOTE": "Note: When you save, the system creates a dedicated CSAT template in WhatsApp (used to capture rating and feedback in reports) and submits it as Utility for approval. Meta may still classify it as Marketing based on content. After approval, surveys are sent only once per conversation as per the survey rule.",
|
||||||
"API": {
|
"API": {
|
||||||
"SUCCESS_MESSAGE": "CSAT settings updated successfully",
|
"SUCCESS_MESSAGE": "CSAT-i seaded on edukalt uuendatud",
|
||||||
"ERROR_MESSAGE": "We couldn't update CSAT settings. Please try again later."
|
"ERROR_MESSAGE": "CSAT-i seadeid ei õnnestunud uuendada. Palun proovi hiljem uuesti."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"BUSINESS_HOURS": {
|
"BUSINESS_HOURS": {
|
||||||
@@ -953,7 +953,7 @@
|
|||||||
"UPDATE": "Uuenda tööaja seadeid",
|
"UPDATE": "Uuenda tööaja seadeid",
|
||||||
"TOGGLE_AVAILABILITY": "Luba selle postkasti tööaja kättesaadavus",
|
"TOGGLE_AVAILABILITY": "Luba selle postkasti tööaja kättesaadavus",
|
||||||
"UNAVAILABLE_MESSAGE_LABEL": "Külastajatele saadetav teade, kui pole saadaval",
|
"UNAVAILABLE_MESSAGE_LABEL": "Külastajatele saadetav teade, kui pole saadaval",
|
||||||
"TOGGLE_HELP": "Enabling business availability will show the available hours on live chat widget even if all the agents are offline. Outside available hours visitors can be warned with a message and a pre-chat form.",
|
"TOGGLE_HELP": "Tööaja kättesaadavuse lubamine kuvab reaalajas vestluse vidinas saadaval olevad ajad isegi siis, kui kõik agendid on võrguühenduseta. Väljaspool saadaolevaid aegu saab külastajaid hoiatada sõnumi ja vestluseelse vormiga.",
|
||||||
"DAY": {
|
"DAY": {
|
||||||
"DAY": "Day",
|
"DAY": "Day",
|
||||||
"AVAILABILITY": "Availability",
|
"AVAILABILITY": "Availability",
|
||||||
@@ -971,7 +971,7 @@
|
|||||||
"NOTE_TEXT": "SMTP lubamiseks seadistage palun IMAP.",
|
"NOTE_TEXT": "SMTP lubamiseks seadistage palun IMAP.",
|
||||||
"UPDATE": "Uuenda IMAP seadeid",
|
"UPDATE": "Uuenda IMAP seadeid",
|
||||||
"TOGGLE_AVAILABILITY": "Luba IMAP konfiguratsioon selle sissetuleva postkasti jaoks",
|
"TOGGLE_AVAILABILITY": "Luba IMAP konfiguratsioon selle sissetuleva postkasti jaoks",
|
||||||
"TOGGLE_HELP": "Enabling IMAP will help the user to receive email",
|
"TOGGLE_HELP": "IMAP-i lubamine aitab kasutajal e-kirju vastu võtta",
|
||||||
"EDIT": {
|
"EDIT": {
|
||||||
"SUCCESS_MESSAGE": "IMAP seaded uuendati edukalt",
|
"SUCCESS_MESSAGE": "IMAP seaded uuendati edukalt",
|
||||||
"ERROR_MESSAGE": "IMAP seadete uuendamine ebaõnnestus"
|
"ERROR_MESSAGE": "IMAP seadete uuendamine ebaõnnestus"
|
||||||
@@ -1134,18 +1134,18 @@
|
|||||||
},
|
},
|
||||||
"CHANNELS": {
|
"CHANNELS": {
|
||||||
"MESSENGER": "Messenger",
|
"MESSENGER": "Messenger",
|
||||||
"WEB_WIDGET": "Website",
|
"WEB_WIDGET": "Veebisait",
|
||||||
"TWITTER_PROFILE": "Twitter",
|
"TWITTER_PROFILE": "Twitter",
|
||||||
"TWILIO_SMS": "Twilio SMS",
|
"TWILIO_SMS": "Twilio SMS",
|
||||||
"WHATSAPP": "WhatsApp",
|
"WHATSAPP": "WhatsApp",
|
||||||
"SMS": "SMS",
|
"SMS": "SMS",
|
||||||
"EMAIL": "Email",
|
"EMAIL": "E-post",
|
||||||
"TELEGRAM": "Telegram",
|
"TELEGRAM": "Telegram",
|
||||||
"LINE": "Line",
|
"LINE": "Line",
|
||||||
"API": "API Channel",
|
"API": "API kanal",
|
||||||
"INSTAGRAM": "Instagram",
|
"INSTAGRAM": "Instagram",
|
||||||
"TIKTOK": "TikTok",
|
"TIKTOK": "TikTok",
|
||||||
"VOICE": "Voice"
|
"VOICE": "Hääl"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -392,10 +392,10 @@
|
|||||||
"NAME": "Kapten",
|
"NAME": "Kapten",
|
||||||
"HEADER_KNOW_MORE": "Lisateave",
|
"HEADER_KNOW_MORE": "Lisateave",
|
||||||
"ASSISTANT_SWITCHER": {
|
"ASSISTANT_SWITCHER": {
|
||||||
"ASSISTANTS": "Assistants",
|
"ASSISTANTS": "Abilised",
|
||||||
"SWITCH_ASSISTANT": "Switch between assistants",
|
"SWITCH_ASSISTANT": "Vaheta assistentide vahel",
|
||||||
"NEW_ASSISTANT": "Create Assistant",
|
"NEW_ASSISTANT": "Loo assistent",
|
||||||
"EMPTY_LIST": "No assistants found, please create one to get started"
|
"EMPTY_LIST": "Assistentide leidmine ebaõnnestus, alustamiseks loo palun üks."
|
||||||
},
|
},
|
||||||
"COPILOT": {
|
"COPILOT": {
|
||||||
"TITLE": "Kaaslane",
|
"TITLE": "Kaaslane",
|
||||||
@@ -449,7 +449,7 @@
|
|||||||
"CANCEL_ANYTIME": "Saate oma plaani igal ajal muuta või tühistada"
|
"CANCEL_ANYTIME": "Saate oma plaani igal ajal muuta või tühistada"
|
||||||
},
|
},
|
||||||
"ENTERPRISE_PAYWALL": {
|
"ENTERPRISE_PAYWALL": {
|
||||||
"AVAILABLE_ON": "Captain AI is only available in the Enterprise plans.",
|
"AVAILABLE_ON": "Captain AI on saadaval ainult ettevõtte plaanides.",
|
||||||
"UPGRADE_PROMPT": "Uuendage oma plaani, et saada ligipääs meie assistentidele, copiloti ja muule.",
|
"UPGRADE_PROMPT": "Uuendage oma plaani, et saada ligipääs meie assistentidele, copiloti ja muule.",
|
||||||
"ASK_ADMIN": "Palun pöörduge uuenduse saamiseks oma administraatori poole."
|
"ASK_ADMIN": "Palun pöörduge uuenduse saamiseks oma administraatori poole."
|
||||||
},
|
},
|
||||||
@@ -738,6 +738,17 @@
|
|||||||
"DOCUMENTS": {
|
"DOCUMENTS": {
|
||||||
"HEADER": "Dokumendid",
|
"HEADER": "Dokumendid",
|
||||||
"ADD_NEW": "Loo uus dokument",
|
"ADD_NEW": "Loo uus dokument",
|
||||||
|
"SELECTED": "{count} valitud",
|
||||||
|
"SELECT_ALL": "Select all ({count})",
|
||||||
|
"UNSELECT_ALL": "Unselect all ({count})",
|
||||||
|
"BULK_DELETE_BUTTON": "Delete",
|
||||||
|
"BULK_DELETE": {
|
||||||
|
"TITLE": "Delete documents?",
|
||||||
|
"DESCRIPTION": "Are you sure you want to delete the selected documents? This action cannot be undone.",
|
||||||
|
"CONFIRM": "Jah, kustuta kõik",
|
||||||
|
"SUCCESS_MESSAGE": "Documents deleted successfully",
|
||||||
|
"ERROR_MESSAGE": "There was an error deleting the documents, please try again."
|
||||||
|
},
|
||||||
"RELATED_RESPONSES": {
|
"RELATED_RESPONSES": {
|
||||||
"TITLE": "Seotud KKK-d",
|
"TITLE": "Seotud KKK-d",
|
||||||
"DESCRIPTION": "Need KKK-d on loodud otse dokumendist."
|
"DESCRIPTION": "Need KKK-d on loodud otse dokumendist."
|
||||||
@@ -795,6 +806,7 @@
|
|||||||
"CUSTOM_TOOLS": {
|
"CUSTOM_TOOLS": {
|
||||||
"HEADER": "Tools",
|
"HEADER": "Tools",
|
||||||
"ADD_NEW": "Create a new tool",
|
"ADD_NEW": "Create a new tool",
|
||||||
|
"SOFT_LIMIT_WARNING": "Having more than 10 tools may reduce the assistant's reliability in selecting the right tool. Consider removing unused tools for better results.",
|
||||||
"EMPTY_STATE": {
|
"EMPTY_STATE": {
|
||||||
"TITLE": "No custom tools available",
|
"TITLE": "No custom tools available",
|
||||||
"SUBTITLE": "Create custom tools to connect your assistant with external APIs and services, enabling it to fetch data and perform actions on your behalf.",
|
"SUBTITLE": "Create custom tools to connect your assistant with external APIs and services, enabling it to fetch data and perform actions on your behalf.",
|
||||||
@@ -825,11 +837,18 @@
|
|||||||
"SUCCESS_MESSAGE": "Custom tool deleted successfully",
|
"SUCCESS_MESSAGE": "Custom tool deleted successfully",
|
||||||
"ERROR_MESSAGE": "Failed to delete custom tool"
|
"ERROR_MESSAGE": "Failed to delete custom tool"
|
||||||
},
|
},
|
||||||
|
"TEST": {
|
||||||
|
"BUTTON": "Test connection",
|
||||||
|
"SUCCESS": "Endpoint returned HTTP {status}",
|
||||||
|
"ERROR": "Connection failed",
|
||||||
|
"DISABLED_HINT": "Testing is only available for endpoints without templates or request bodies."
|
||||||
|
},
|
||||||
"FORM": {
|
"FORM": {
|
||||||
"TITLE": {
|
"TITLE": {
|
||||||
"LABEL": "Tool Name",
|
"LABEL": "Tool Name",
|
||||||
"PLACEHOLDER": "Order Lookup",
|
"PLACEHOLDER": "Order Lookup",
|
||||||
"ERROR": "Tool name is required"
|
"ERROR": "Tool name is required",
|
||||||
|
"MAX_LENGTH_ERROR": "Tool name must be {max} characters or fewer"
|
||||||
},
|
},
|
||||||
"DESCRIPTION": {
|
"DESCRIPTION": {
|
||||||
"LABEL": "Description",
|
"LABEL": "Description",
|
||||||
|
|||||||
@@ -194,7 +194,7 @@
|
|||||||
"MESSAGING_RESTRICTED_WHATSAPP": "You can only reply using a template message due to 24-hour message window restriction",
|
"MESSAGING_RESTRICTED_WHATSAPP": "You can only reply using a template message due to 24-hour message window restriction",
|
||||||
"MESSAGING_RESTRICTED_API": "You can only reply using a template message due to message window restriction",
|
"MESSAGING_RESTRICTED_API": "You can only reply using a template message due to message window restriction",
|
||||||
"MESSAGE_SIGNATURE_NOT_CONFIGURED": "امضای پیام پیکربندی نشده است، لطفاً آن را در تنظیمات نمایه پیکربندی کنید.",
|
"MESSAGE_SIGNATURE_NOT_CONFIGURED": "امضای پیام پیکربندی نشده است، لطفاً آن را در تنظیمات نمایه پیکربندی کنید.",
|
||||||
"COPILOT_MSG_INPUT": "Give copilot additional prompts, or ask anything else... Press enter to send follow-up",
|
"COPILOT_MSG_INPUT": "دستورهای اضافی به Copilot بدهید، یا هر سوال دیگری بپرسید... برای ارسال پاسخ بعدی اینتر بزنید",
|
||||||
"CLICK_HERE": "برای به روز رسانی اینجا را کلیک کنید",
|
"CLICK_HERE": "برای به روز رسانی اینجا را کلیک کنید",
|
||||||
"WHATSAPP_TEMPLATES": "قالب های واتساپ"
|
"WHATSAPP_TEMPLATES": "قالب های واتساپ"
|
||||||
},
|
},
|
||||||
@@ -214,7 +214,7 @@
|
|||||||
"DRAG_DROP": "برای ضمیمه کردن درگ و درآپ کنید",
|
"DRAG_DROP": "برای ضمیمه کردن درگ و درآپ کنید",
|
||||||
"START_AUDIO_RECORDING": "در حال شروع ضبط صدا",
|
"START_AUDIO_RECORDING": "در حال شروع ضبط صدا",
|
||||||
"STOP_AUDIO_RECORDING": "در حال توقف ضبط صدا",
|
"STOP_AUDIO_RECORDING": "در حال توقف ضبط صدا",
|
||||||
"COPILOT_THINKING": "Copilot is thinking",
|
"COPILOT_THINKING": "Copilot در حال فکر کردن است",
|
||||||
"EMAIL_HEAD": {
|
"EMAIL_HEAD": {
|
||||||
"TO": "به",
|
"TO": "به",
|
||||||
"ADD_BCC": "افزودن رونوشت",
|
"ADD_BCC": "افزودن رونوشت",
|
||||||
|
|||||||
@@ -316,6 +316,18 @@
|
|||||||
"SUCCESS_MESSAGE": "زبان محلی با موفقیت از پورتال حذف شد",
|
"SUCCESS_MESSAGE": "زبان محلی با موفقیت از پورتال حذف شد",
|
||||||
"ERROR_MESSAGE": "حذف زبان محلی از پورتال ممکن نیست. دوباره امتحان کنید."
|
"ERROR_MESSAGE": "حذف زبان محلی از پورتال ممکن نیست. دوباره امتحان کنید."
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"DRAFT_LOCALE": {
|
||||||
|
"API": {
|
||||||
|
"SUCCESS_MESSAGE": "Locale moved to draft successfully",
|
||||||
|
"ERROR_MESSAGE": "Unable to move locale to draft. Try again."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"PUBLISH_LOCALE": {
|
||||||
|
"API": {
|
||||||
|
"SUCCESS_MESSAGE": "Locale published successfully",
|
||||||
|
"ERROR_MESSAGE": "Unable to publish locale. Try again."
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"TABLE": {
|
"TABLE": {
|
||||||
@@ -644,8 +656,11 @@
|
|||||||
"ARTICLES_COUNT": "{count} article | {count} articles",
|
"ARTICLES_COUNT": "{count} article | {count} articles",
|
||||||
"CATEGORIES_COUNT": "{count} category | {count} categories",
|
"CATEGORIES_COUNT": "{count} category | {count} categories",
|
||||||
"DEFAULT": "پیشفرض",
|
"DEFAULT": "پیشفرض",
|
||||||
|
"DRAFT": "پیشنویس",
|
||||||
"DROPDOWN_MENU": {
|
"DROPDOWN_MENU": {
|
||||||
"MAKE_DEFAULT": "Make default",
|
"MAKE_DEFAULT": "Make default",
|
||||||
|
"MOVE_TO_DRAFT": "Move to draft",
|
||||||
|
"PUBLISH_LOCALE": "Publish locale",
|
||||||
"DELETE": "حذف"
|
"DELETE": "حذف"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -655,6 +670,13 @@
|
|||||||
"COMBOBOX": {
|
"COMBOBOX": {
|
||||||
"PLACEHOLDER": "انتخاب زبان..."
|
"PLACEHOLDER": "انتخاب زبان..."
|
||||||
},
|
},
|
||||||
|
"STATUS": {
|
||||||
|
"LABEL": "وضعیت",
|
||||||
|
"OPTIONS": {
|
||||||
|
"LIVE": "منتشر شد",
|
||||||
|
"DRAFT": "پیشنویس"
|
||||||
|
}
|
||||||
|
},
|
||||||
"API": {
|
"API": {
|
||||||
"SUCCESS_MESSAGE": "زبان محلی با موفقیت اضافه شد",
|
"SUCCESS_MESSAGE": "زبان محلی با موفقیت اضافه شد",
|
||||||
"ERROR_MESSAGE": "امکان افزودن زبان محلی وجود ندارد. دوباره امتحان کنید."
|
"ERROR_MESSAGE": "امکان افزودن زبان محلی وجود ندارد. دوباره امتحان کنید."
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user