Compare commits
26
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6e9942fd67 | ||
|
|
d75702c6b2 | ||
|
|
89bcef4623 | ||
|
|
25a0c9ed91 | ||
|
|
dc77b5bb2b | ||
|
|
5487d4c615 | ||
|
|
b4b2b0bdc2 | ||
|
|
16dbcabaac | ||
|
|
b87b7972c1 | ||
|
|
149dab239a | ||
|
|
f4381e3b5d | ||
|
|
58380c6d01 | ||
|
|
e54e80a936 | ||
|
|
ac3bce3932 | ||
|
|
6baca40597 | ||
|
|
f28bb70d67 | ||
|
|
b76ec878f1 | ||
|
|
a954e1eaca | ||
|
|
bc5f1722e1 | ||
|
|
8f39e62570 | ||
|
|
7520ca7a99 | ||
|
|
35f4e63605 | ||
|
|
5773089865 | ||
|
|
d01c7d3fa7 | ||
|
|
959d2c0d8c | ||
|
|
622f29a0b7 |
@@ -10,7 +10,8 @@ function toggleSecretField(e) {
|
||||
if (!textElement) return;
|
||||
|
||||
if (textElement.dataset.secretMasked === 'false') {
|
||||
textElement.textContent = '•'.repeat(10);
|
||||
const maskedLength = secretField.dataset.secretText?.length || 10;
|
||||
textElement.textContent = '•'.repeat(maskedLength);
|
||||
textElement.dataset.secretMasked = 'true';
|
||||
toggler.querySelector('svg use').setAttribute('xlink:href', '#eye-show');
|
||||
|
||||
@@ -32,3 +33,13 @@ function copySecretField(e) {
|
||||
|
||||
navigator.clipboard.writeText(secretField.dataset.secretText);
|
||||
}
|
||||
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
document.querySelectorAll('.cell-data__secret-field').forEach(field => {
|
||||
const span = field.querySelector('[data-secret-masked]');
|
||||
if (span && span.dataset.secretMasked === 'true') {
|
||||
const len = field.dataset.secretText?.length || 10;
|
||||
span.textContent = '•'.repeat(len);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
@@ -46,17 +46,25 @@
|
||||
|
||||
.cell-data__secret-field {
|
||||
align-items: center;
|
||||
color: $hint-grey;
|
||||
display: flex;
|
||||
|
||||
span {
|
||||
flex: 1;
|
||||
flex: 0 0 auto;
|
||||
}
|
||||
|
||||
button {
|
||||
margin-left: 5px;
|
||||
[data-secret-toggler],
|
||||
[data-secret-copier] {
|
||||
background: transparent;
|
||||
border: 0;
|
||||
color: inherit;
|
||||
margin-left: 0.5rem;
|
||||
padding: 0;
|
||||
|
||||
svg {
|
||||
fill: currentColor;
|
||||
height: 1.25rem;
|
||||
width: 1.25rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,7 +31,7 @@ class V2::Reports::LabelSummaryBuilder < V2::Reports::BaseSummaryBuilder
|
||||
resolved_counts: fetch_resolved_counts(conversation_filter),
|
||||
resolution_metrics: fetch_metrics(conversation_filter, 'conversation_resolved', use_business_hours),
|
||||
first_response_metrics: fetch_metrics(conversation_filter, 'first_response', use_business_hours),
|
||||
reply_metrics: fetch_metrics(conversation_filter, 'reply', use_business_hours)
|
||||
reply_metrics: fetch_metrics(conversation_filter, 'reply_time', use_business_hours)
|
||||
}
|
||||
end
|
||||
|
||||
@@ -63,7 +63,9 @@ class V2::Reports::LabelSummaryBuilder < V2::Reports::BaseSummaryBuilder
|
||||
end
|
||||
|
||||
def fetch_resolved_counts(conversation_filter)
|
||||
fetch_counts(conversation_filter.merge(status: :resolved))
|
||||
# since the base query is ActsAsTaggableOn,
|
||||
# the status :resolved won't automatically be converted to integer status
|
||||
fetch_counts(conversation_filter.merge(status: Conversation.statuses[:resolved]))
|
||||
end
|
||||
|
||||
def fetch_counts(conversation_filter)
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
class Api::V1::Accounts::Integrations::GithubController < Api::V1::Accounts::BaseController
|
||||
before_action :check_authorization
|
||||
|
||||
def show
|
||||
@github_integration = Current.account.hooks.find_by(app_id: 'github')
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def check_authorization
|
||||
authorize ::Webhook, :show?
|
||||
end
|
||||
end
|
||||
@@ -1,5 +1,5 @@
|
||||
class Api::V1::Accounts::Integrations::LinearController < Api::V1::Accounts::BaseController
|
||||
before_action :fetch_conversation, only: [:link_issue, :linked_issues]
|
||||
before_action :fetch_conversation, only: [:create_issue, :link_issue, :unlink_issue, :linked_issues]
|
||||
before_action :fetch_hook, only: [:destroy]
|
||||
|
||||
def destroy
|
||||
@@ -31,6 +31,12 @@ class Api::V1::Accounts::Integrations::LinearController < Api::V1::Accounts::Bas
|
||||
if issue[:error]
|
||||
render json: { error: issue[:error] }, status: :unprocessable_entity
|
||||
else
|
||||
Linear::ActivityMessageService.new(
|
||||
conversation: @conversation,
|
||||
action_type: :issue_created,
|
||||
issue_data: { id: issue[:data][:identifier] },
|
||||
user: Current.user
|
||||
).perform
|
||||
render json: issue[:data], status: :ok
|
||||
end
|
||||
end
|
||||
@@ -42,17 +48,30 @@ class Api::V1::Accounts::Integrations::LinearController < Api::V1::Accounts::Bas
|
||||
if issue[:error]
|
||||
render json: { error: issue[:error] }, status: :unprocessable_entity
|
||||
else
|
||||
Linear::ActivityMessageService.new(
|
||||
conversation: @conversation,
|
||||
action_type: :issue_linked,
|
||||
issue_data: { id: issue_id },
|
||||
user: Current.user
|
||||
).perform
|
||||
render json: issue[:data], status: :ok
|
||||
end
|
||||
end
|
||||
|
||||
def unlink_issue
|
||||
link_id = permitted_params[:link_id]
|
||||
issue_id = permitted_params[:issue_id]
|
||||
issue = linear_processor_service.unlink_issue(link_id)
|
||||
|
||||
if issue[:error]
|
||||
render json: { error: issue[:error] }, status: :unprocessable_entity
|
||||
else
|
||||
Linear::ActivityMessageService.new(
|
||||
conversation: @conversation,
|
||||
action_type: :issue_unlinked,
|
||||
issue_data: { id: issue_id },
|
||||
user: Current.user
|
||||
).perform
|
||||
render json: issue[:data], status: :ok
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,70 +0,0 @@
|
||||
class Github::CallbacksController < ApplicationController
|
||||
include Github::IntegrationHelper
|
||||
before_action :authenticate_user!
|
||||
before_action :set_account
|
||||
|
||||
def show
|
||||
if params[:error].present?
|
||||
redirect_to app_account_integrations_path(account_id: @account.id), alert: params[:error_description]
|
||||
return
|
||||
end
|
||||
|
||||
if params[:code].present?
|
||||
response = exchange_code_for_token(params[:code])
|
||||
|
||||
if response[:access_token].present?
|
||||
hook = @account.hooks.find_or_initialize_by(app_id: 'github')
|
||||
hook.access_token = response[:access_token]
|
||||
hook.status = 'enabled'
|
||||
|
||||
if hook.save
|
||||
redirect_to app_account_integrations_path(account_id: @account.id), notice: 'GitHub integration connected successfully!'
|
||||
else
|
||||
redirect_to app_account_integrations_path(account_id: @account.id), alert: 'Failed to save GitHub integration'
|
||||
end
|
||||
else
|
||||
redirect_to app_account_integrations_path(account_id: @account.id), alert: 'Failed to get access token from GitHub'
|
||||
end
|
||||
else
|
||||
redirect_to app_account_integrations_path(account_id: @account.id), alert: 'GitHub authorization failed'
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def set_account
|
||||
@account = Current.user.accounts.find(params[:account_id]) if params[:account_id].present?
|
||||
@account ||= Current.user.accounts.first
|
||||
|
||||
return if @account
|
||||
|
||||
redirect_to root_path, alert: 'Account not found'
|
||||
end
|
||||
|
||||
def exchange_code_for_token(code)
|
||||
client_id = GlobalConfigService.load('GITHUB_CLIENT_ID', nil)
|
||||
client_secret = GlobalConfigService.load('GITHUB_CLIENT_SECRET', nil)
|
||||
|
||||
return {} unless client_id && client_secret
|
||||
|
||||
response = HTTParty.post('https://github.com/login/oauth/access_token', {
|
||||
body: {
|
||||
client_id: client_id,
|
||||
client_secret: client_secret,
|
||||
code: code
|
||||
},
|
||||
headers: {
|
||||
'Accept' => 'application/json'
|
||||
}
|
||||
})
|
||||
|
||||
if response.success?
|
||||
JSON.parse(response.body).with_indifferent_access
|
||||
else
|
||||
{}
|
||||
end
|
||||
rescue StandardError => e
|
||||
Rails.logger.error "GitHub OAuth error: #{e.message}"
|
||||
{}
|
||||
end
|
||||
end
|
||||
@@ -39,8 +39,7 @@ class SuperAdmin::AppConfigsController < SuperAdmin::ApplicationController
|
||||
'email' => ['MAILER_INBOUND_EMAIL_DOMAIN'],
|
||||
'linear' => %w[LINEAR_CLIENT_ID LINEAR_CLIENT_SECRET],
|
||||
'slack' => %w[SLACK_CLIENT_ID SLACK_CLIENT_SECRET],
|
||||
'instagram' => %w[INSTAGRAM_APP_ID INSTAGRAM_APP_SECRET INSTAGRAM_VERIFY_TOKEN INSTAGRAM_API_VERSION ENABLE_INSTAGRAM_CHANNEL_HUMAN_AGENT],
|
||||
'github' => %w[GITHUB_CLIENT_ID GITHUB_CLIENT_SECRET]
|
||||
'instagram' => %w[INSTAGRAM_APP_ID INSTAGRAM_APP_SECRET INSTAGRAM_VERIFY_TOKEN INSTAGRAM_API_VERSION ENABLE_INSTAGRAM_CHANNEL_HUMAN_AGENT]
|
||||
}
|
||||
|
||||
@allowed_configs = mapping.fetch(@config, %w[ENABLE_ACCOUNT_SIGNUP FIREBASE_PROJECT_ID FIREBASE_CREDENTIALS])
|
||||
|
||||
@@ -1,71 +0,0 @@
|
||||
module Github::IntegrationHelper
|
||||
def github_integration_url(account_id)
|
||||
"#{ENV.fetch('FRONTEND_URL', nil)}/github/callback?account_id=#{account_id}"
|
||||
end
|
||||
|
||||
def github_oauth_url(account_id)
|
||||
client_id = GlobalConfigService.load('GITHUB_CLIENT_ID', nil)
|
||||
return nil unless client_id
|
||||
|
||||
params = {
|
||||
client_id: client_id,
|
||||
redirect_uri: github_integration_url(account_id),
|
||||
scope: 'repo',
|
||||
state: generate_state_token(account_id)
|
||||
}
|
||||
|
||||
"https://github.com/login/oauth/authorize?#{params.to_query}"
|
||||
end
|
||||
|
||||
def github_configured?
|
||||
GlobalConfigService.load('GITHUB_CLIENT_ID', nil).present? &&
|
||||
GlobalConfigService.load('GITHUB_CLIENT_SECRET', nil).present?
|
||||
end
|
||||
|
||||
def github_integration_enabled?(account)
|
||||
return false unless github_configured?
|
||||
|
||||
account.hooks.exists?(app_id: 'github', status: 'enabled')
|
||||
end
|
||||
|
||||
def github_repositories(access_token)
|
||||
return [] unless access_token
|
||||
|
||||
response = HTTParty.get('https://api.github.com/user/repos', {
|
||||
headers: {
|
||||
'Authorization' => "token #{access_token}",
|
||||
'Accept' => 'application/vnd.github.v3+json'
|
||||
},
|
||||
query: {
|
||||
per_page: 100,
|
||||
sort: 'updated'
|
||||
}
|
||||
})
|
||||
|
||||
if response.success?
|
||||
JSON.parse(response.body)
|
||||
else
|
||||
[]
|
||||
end
|
||||
rescue StandardError => e
|
||||
Rails.logger.error "GitHub API error: #{e.message}"
|
||||
[]
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def generate_state_token(account_id)
|
||||
payload = {
|
||||
account_id: account_id,
|
||||
timestamp: Time.current.to_i
|
||||
}
|
||||
|
||||
JWT.encode(payload, Rails.application.secret_key_base, 'HS256')
|
||||
end
|
||||
|
||||
def verify_state_token(state)
|
||||
JWT.decode(state, Rails.application.secret_key_base, true, { algorithm: 'HS256' })
|
||||
rescue JWT::DecodeError
|
||||
nil
|
||||
end
|
||||
end
|
||||
@@ -33,9 +33,11 @@ class LinearAPI extends ApiClient {
|
||||
);
|
||||
}
|
||||
|
||||
unlinkIssue(linkId) {
|
||||
unlinkIssue(linkId, issueIdentifier, conversationId) {
|
||||
return axios.post(`${this.url}/unlink_issue`, {
|
||||
link_id: linkId,
|
||||
issue_id: issueIdentifier,
|
||||
conversation_id: conversationId,
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -91,6 +91,19 @@ describe('#linearAPI', () => {
|
||||
issueData
|
||||
);
|
||||
});
|
||||
|
||||
it('creates a valid request with conversation_id', () => {
|
||||
const issueData = {
|
||||
title: 'New Issue',
|
||||
description: 'Issue description',
|
||||
conversation_id: 123,
|
||||
};
|
||||
LinearAPIClient.createIssue(issueData);
|
||||
expect(axiosMock.post).toHaveBeenCalledWith(
|
||||
'/api/v1/integrations/linear/create_issue',
|
||||
issueData
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
describe('link_issue', () => {
|
||||
@@ -120,6 +133,18 @@ describe('#linearAPI', () => {
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
it('creates a valid request with title', () => {
|
||||
LinearAPIClient.link_issue(1, 'ENG-123', 'Sample Issue');
|
||||
expect(axiosMock.post).toHaveBeenCalledWith(
|
||||
'/api/v1/integrations/linear/link_issue',
|
||||
{
|
||||
issue_id: 'ENG-123',
|
||||
conversation_id: 1,
|
||||
title: 'Sample Issue',
|
||||
}
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
describe('getLinkedIssue', () => {
|
||||
@@ -164,12 +189,26 @@ describe('#linearAPI', () => {
|
||||
window.axios = originalAxios;
|
||||
});
|
||||
|
||||
it('creates a valid request', () => {
|
||||
LinearAPIClient.unlinkIssue(1);
|
||||
it('creates a valid request with link_id only', () => {
|
||||
LinearAPIClient.unlinkIssue('link123');
|
||||
expect(axiosMock.post).toHaveBeenCalledWith(
|
||||
'/api/v1/integrations/linear/unlink_issue',
|
||||
{
|
||||
link_id: 1,
|
||||
link_id: 'link123',
|
||||
issue_id: undefined,
|
||||
conversation_id: undefined,
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
it('creates a valid request with all parameters', () => {
|
||||
LinearAPIClient.unlinkIssue('link123', 'ENG-456', 789);
|
||||
expect(axiosMock.post).toHaveBeenCalledWith(
|
||||
'/api/v1/integrations/linear/unlink_issue',
|
||||
{
|
||||
link_id: 'link123',
|
||||
issue_id: 'ENG-456',
|
||||
conversation_id: 789,
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
@@ -19,6 +19,7 @@ const isConversationRoute = computed(() => {
|
||||
'conversation_through_mentions',
|
||||
'conversation_through_unattended',
|
||||
'conversation_through_participating',
|
||||
'inbox_view_conversation',
|
||||
];
|
||||
return CONVERSATION_ROUTES.includes(route.name);
|
||||
});
|
||||
|
||||
@@ -14,7 +14,8 @@ const fromEmail = computed(() => {
|
||||
});
|
||||
|
||||
const toEmail = computed(() => {
|
||||
return contentAttributes.value?.email?.to ?? [];
|
||||
const { toEmails, email } = contentAttributes.value;
|
||||
return email?.to ?? toEmails ?? [];
|
||||
});
|
||||
|
||||
const ccEmail = computed(() => {
|
||||
|
||||
@@ -854,7 +854,7 @@ watch(conversationFilters, (newVal, oldVal) => {
|
||||
:active-status="activeStatus"
|
||||
:is-on-expanded-layout="isOnExpandedLayout"
|
||||
:conversation-stats="conversationStats"
|
||||
:is-list-loading="chatListLoading"
|
||||
:is-list-loading="chatListLoading && !conversationList.length"
|
||||
@add-folders="onClickOpenAddFoldersModal"
|
||||
@delete-folders="onClickOpenDeleteFoldersModal"
|
||||
@filters-modal="onToggleAdvanceFiltersModal"
|
||||
|
||||
@@ -183,13 +183,18 @@ const createIssue = async () => {
|
||||
state_id: formState.stateId || undefined,
|
||||
priority: formState.priority || undefined,
|
||||
label_ids: formState.labelId ? [formState.labelId] : undefined,
|
||||
conversation_id: props.conversationId,
|
||||
};
|
||||
|
||||
try {
|
||||
isCreating.value = true;
|
||||
const response = await LinearAPI.createIssue(payload);
|
||||
const { id: issueId } = response.data;
|
||||
await LinearAPI.link_issue(props.conversationId, issueId, props.title);
|
||||
const { identifier: issueIdentifier } = response.data;
|
||||
await LinearAPI.link_issue(
|
||||
props.conversationId,
|
||||
issueIdentifier,
|
||||
props.title
|
||||
);
|
||||
useAlert(t('INTEGRATION_SETTINGS.LINEAR.ADD_OR_LINK.CREATE_SUCCESS'));
|
||||
useTrack(LINEAR_EVENTS.CREATE_ISSUE);
|
||||
onClose();
|
||||
|
||||
@@ -46,9 +46,9 @@ const loadLinkedIssues = async () => {
|
||||
}
|
||||
};
|
||||
|
||||
const unlinkIssue = async linkId => {
|
||||
const unlinkIssue = async (linkId, issueIdentifier) => {
|
||||
try {
|
||||
await LinearAPI.unlinkIssue(linkId);
|
||||
await LinearAPI.unlinkIssue(linkId, issueIdentifier, props.conversationId);
|
||||
useTrack(LINEAR_EVENTS.UNLINK_ISSUE);
|
||||
linkedIssues.value = linkedIssues.value.filter(
|
||||
issue => issue.id !== linkId
|
||||
@@ -110,7 +110,7 @@ onMounted(() => {
|
||||
<LinearIssueItem
|
||||
v-for="linkedIssue in linkedIssues"
|
||||
:key="linkedIssue.id"
|
||||
class="pt-3 px-4 pb-4 border-b border-n-weak last:border-b-0"
|
||||
class="px-4 pt-3 pb-4 border-b border-n-weak last:border-b-0"
|
||||
:linked-issue="linkedIssue"
|
||||
@unlink-issue="unlinkIssue"
|
||||
/>
|
||||
|
||||
@@ -14,6 +14,8 @@ const props = defineProps({
|
||||
|
||||
const emit = defineEmits(['unlinkIssue']);
|
||||
|
||||
const { linkedIssue } = props;
|
||||
|
||||
const priorityMap = {
|
||||
1: 'Urgent',
|
||||
2: 'High',
|
||||
@@ -21,7 +23,7 @@ const priorityMap = {
|
||||
4: 'Low',
|
||||
};
|
||||
|
||||
const issue = computed(() => props.linkedIssue.issue);
|
||||
const issue = computed(() => linkedIssue.issue);
|
||||
|
||||
const assignee = computed(() => {
|
||||
const assigneeDetails = issue.value.assignee;
|
||||
@@ -37,7 +39,7 @@ const labels = computed(() => issue.value.labels?.nodes || []);
|
||||
const priorityLabel = computed(() => priorityMap[issue.value.priority]);
|
||||
|
||||
const unlinkIssue = () => {
|
||||
emit('unlinkIssue', props.linkedIssue.id);
|
||||
emit('unlinkIssue', linkedIssue.id, linkedIssue.issue.identifier);
|
||||
};
|
||||
</script>
|
||||
|
||||
|
||||
@@ -63,7 +63,7 @@ const onSearch = async value => {
|
||||
isFetching.value = true;
|
||||
const response = await LinearAPI.searchIssues(value);
|
||||
issues.value = response.data.map(issue => ({
|
||||
id: issue.id,
|
||||
id: issue.identifier,
|
||||
name: `${issue.identifier} ${issue.title}`,
|
||||
icon: 'status',
|
||||
iconColor: issue.state.color,
|
||||
|
||||
@@ -328,28 +328,6 @@
|
||||
"DESCRIPTION": "Linear workspace is not connected. Click the button below to connect your workspace to use this integration.",
|
||||
"BUTTON_TEXT": "Connect Linear workspace"
|
||||
}
|
||||
},
|
||||
"GITHUB": {
|
||||
"TITLE": "GitHub Integration",
|
||||
"DESCRIPTION": "Connect your GitHub repositories to create issues directly from customer conversations. This integration helps you track bugs, feature requests, and development tasks seamlessly.",
|
||||
"NOT_CONFIGURED": {
|
||||
"TITLE": "GitHub Integration Not Configured",
|
||||
"DESCRIPTION": "Contact your administrator to configure GitHub OAuth settings."
|
||||
},
|
||||
"CONNECT": {
|
||||
"TITLE": "Connect GitHub",
|
||||
"DESCRIPTION": "Connect your GitHub account to start creating issues from conversations.",
|
||||
"BUTTON": "Connect GitHub"
|
||||
},
|
||||
"CONNECTED": {
|
||||
"TITLE": "GitHub Connected",
|
||||
"DESCRIPTION": "Your GitHub account is successfully connected. You can now create issues from conversations."
|
||||
},
|
||||
"DISCONNECT": {
|
||||
"BUTTON": "Disconnect",
|
||||
"SUCCESS": "GitHub integration disconnected successfully",
|
||||
"ERROR": "Failed to disconnect GitHub integration"
|
||||
}
|
||||
}
|
||||
},
|
||||
"CAPTAIN": {
|
||||
|
||||
@@ -152,7 +152,7 @@
|
||||
"ATTRIBUTES": {
|
||||
"MESSAGE_TYPE": "Tipo da Mensagem",
|
||||
"MESSAGE_CONTAINS": "A mensagem contém",
|
||||
"EMAIL": "e-mail",
|
||||
"EMAIL": "E-mail",
|
||||
"INBOX": "Caixa de Entrada",
|
||||
"CONVERSATION_LANGUAGE": "Idioma da conversa",
|
||||
"PHONE_NUMBER": "Número de Telefone",
|
||||
|
||||
@@ -71,6 +71,12 @@ export default {
|
||||
FEATURE_FLAGS.AUTO_RESOLVE_CONVERSATIONS
|
||||
);
|
||||
},
|
||||
showAudioTranscriptionConfig() {
|
||||
return this.isFeatureEnabledonAccount(
|
||||
this.accountId,
|
||||
FEATURE_FLAGS.CAPTAIN
|
||||
);
|
||||
},
|
||||
languagesSortedByCode() {
|
||||
const enabledLanguages = [...this.enabledLanguages];
|
||||
return enabledLanguages.sort((l1, l2) =>
|
||||
@@ -237,7 +243,7 @@ export default {
|
||||
<woot-loading-state v-if="uiFlags.isFetchingItem" />
|
||||
</div>
|
||||
<AutoResolve v-if="showAutoResolutionConfig" />
|
||||
<AudioTranscription v-if="isOnChatwootCloud" />
|
||||
<AudioTranscription v-if="showAudioTranscriptionConfig" />
|
||||
<AccountId />
|
||||
<div v-if="!uiFlags.isFetchingItem && isOnChatwootCloud">
|
||||
<AccountDelete />
|
||||
|
||||
@@ -1,57 +0,0 @@
|
||||
<script setup>
|
||||
import { ref, computed, onMounted } from 'vue';
|
||||
import {
|
||||
useFunctionGetter,
|
||||
useMapGetter,
|
||||
useStore,
|
||||
} from 'dashboard/composables/store';
|
||||
|
||||
import Integration from './Integration.vue';
|
||||
import Spinner from 'shared/components/Spinner.vue';
|
||||
|
||||
const store = useStore();
|
||||
|
||||
const integrationLoaded = ref(false);
|
||||
|
||||
const integration = useFunctionGetter('integrations/getIntegration', 'github');
|
||||
|
||||
const uiFlags = useMapGetter('integrations/getUIFlags');
|
||||
|
||||
const integrationAction = computed(() => {
|
||||
if (integration.value.enabled) {
|
||||
return 'disconnect';
|
||||
}
|
||||
return integration.value.action;
|
||||
});
|
||||
|
||||
const initializeGithubIntegration = async () => {
|
||||
await store.dispatch('integrations/get', 'github');
|
||||
integrationLoaded.value = true;
|
||||
};
|
||||
|
||||
onMounted(() => {
|
||||
initializeGithubIntegration();
|
||||
});
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="flex-grow flex-shrink max-w-6xl p-4 mx-auto overflow-auto">
|
||||
<div v-if="integrationLoaded && !uiFlags.isCreatingGithub">
|
||||
<Integration
|
||||
:integration-id="integration.id"
|
||||
:integration-logo="integration.logo"
|
||||
:integration-name="integration.name"
|
||||
:integration-description="integration.description"
|
||||
:integration-enabled="integration.enabled"
|
||||
:integration-action="integrationAction"
|
||||
:delete-confirmation-text="{
|
||||
title: $t('INTEGRATION_SETTINGS.GITHUB.DELETE.TITLE'),
|
||||
message: $t('INTEGRATION_SETTINGS.GITHUB.DELETE.MESSAGE'),
|
||||
}"
|
||||
/>
|
||||
</div>
|
||||
<div v-else class="flex items-center justify-center flex-1">
|
||||
<Spinner size="" color-scheme="primary" />
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
@@ -9,7 +9,6 @@ import Slack from './Slack.vue';
|
||||
import SettingsContent from '../Wrapper.vue';
|
||||
import Linear from './Linear.vue';
|
||||
import Shopify from './Shopify.vue';
|
||||
import Github from './Github.vue';
|
||||
|
||||
export default {
|
||||
routes: [
|
||||
@@ -101,14 +100,6 @@ export default {
|
||||
},
|
||||
props: route => ({ error: route.query.error }),
|
||||
},
|
||||
{
|
||||
path: 'github',
|
||||
name: 'settings_integrations_github',
|
||||
component: Github,
|
||||
meta: {
|
||||
permissions: ['administrator'],
|
||||
},
|
||||
},
|
||||
{
|
||||
path: ':integration_id',
|
||||
name: 'settings_applications_integration',
|
||||
|
||||
@@ -35,7 +35,7 @@ class Webhooks::TelegramEventsJob < ApplicationJob
|
||||
def process_event_params(channel, params)
|
||||
return unless params[:telegram]
|
||||
|
||||
if params.dig(:telegram, :edited_message).present?
|
||||
if params.dig(:telegram, :edited_message).present? || params.dig(:telegram, :edited_business_message).present?
|
||||
Telegram::UpdateMessageService.new(inbox: channel.inbox, params: params['telegram'].with_indifferent_access).perform
|
||||
else
|
||||
Telegram::IncomingMessageService.new(inbox: channel.inbox, params: params['telegram'].with_indifferent_access).perform
|
||||
|
||||
@@ -69,6 +69,10 @@ class Channel::Telegram < ApplicationRecord
|
||||
message.conversation[:additional_attributes]['chat_id']
|
||||
end
|
||||
|
||||
def business_connection_id(message)
|
||||
message.conversation[:additional_attributes]['business_connection_id']
|
||||
end
|
||||
|
||||
def reply_to_message_id(message)
|
||||
message.content_attributes['in_reply_to_external_id']
|
||||
end
|
||||
@@ -95,7 +99,13 @@ class Channel::Telegram < ApplicationRecord
|
||||
end
|
||||
|
||||
def send_message(message)
|
||||
response = message_request(chat_id(message), message.outgoing_content, reply_markup(message), reply_to_message_id(message))
|
||||
response = message_request(
|
||||
chat_id(message),
|
||||
message.outgoing_content,
|
||||
reply_markup(message),
|
||||
reply_to_message_id(message),
|
||||
business_connection_id: business_connection_id(message)
|
||||
)
|
||||
process_error(message, response)
|
||||
response.parsed_response['result']['message_id'] if response.success?
|
||||
end
|
||||
@@ -131,9 +141,12 @@ class Channel::Telegram < ApplicationRecord
|
||||
stripped_html.gsub('<br>', "\n")
|
||||
end
|
||||
|
||||
def message_request(chat_id, text, reply_markup = nil, reply_to_message_id = nil)
|
||||
def message_request(chat_id, text, reply_markup = nil, reply_to_message_id = nil, business_connection_id: nil)
|
||||
text_payload = convert_markdown_to_telegram_html(text)
|
||||
|
||||
business_body = {}
|
||||
business_body[:business_connection_id] = business_connection_id if business_connection_id
|
||||
|
||||
HTTParty.post("#{telegram_api_url}/sendMessage",
|
||||
body: {
|
||||
chat_id: chat_id,
|
||||
@@ -141,6 +154,6 @@ class Channel::Telegram < ApplicationRecord
|
||||
reply_markup: reply_markup,
|
||||
parse_mode: 'HTML',
|
||||
reply_to_message_id: reply_to_message_id
|
||||
})
|
||||
}.merge(business_body))
|
||||
end
|
||||
end
|
||||
|
||||
@@ -43,8 +43,6 @@ class Integrations::App
|
||||
"#{params[:action]}&client_id=#{client_id}&redirect_uri=#{self.class.slack_integration_url}"
|
||||
when 'linear'
|
||||
build_linear_action
|
||||
when 'github'
|
||||
build_github_action
|
||||
else
|
||||
params[:action]
|
||||
end
|
||||
@@ -60,8 +58,6 @@ class Integrations::App
|
||||
account.feature_enabled?('shopify_integration') && GlobalConfigService.load('SHOPIFY_CLIENT_ID', nil).present?
|
||||
when 'leadsquared'
|
||||
account.feature_enabled?('crm_integration')
|
||||
when 'github'
|
||||
GlobalConfigService.load('GITHUB_CLIENT_ID', nil).present?
|
||||
else
|
||||
true
|
||||
end
|
||||
@@ -79,16 +75,6 @@ class Integrations::App
|
||||
].join('&')
|
||||
end
|
||||
|
||||
def build_github_action
|
||||
client_id = GlobalConfigService.load('GITHUB_CLIENT_ID', nil)
|
||||
[
|
||||
'https://github.com/login/oauth/authorize?response_type=code',
|
||||
"client_id=#{client_id}",
|
||||
"redirect_uri=#{self.class.github_integration_url}",
|
||||
'scope=repo'
|
||||
].join('&')
|
||||
end
|
||||
|
||||
def enabled?(account)
|
||||
case params[:id]
|
||||
when 'webhook'
|
||||
@@ -112,10 +98,6 @@ class Integrations::App
|
||||
"#{ENV.fetch('FRONTEND_URL', nil)}/linear/callback"
|
||||
end
|
||||
|
||||
def self.github_integration_url
|
||||
"#{ENV.fetch('FRONTEND_URL', nil)}/github/callback"
|
||||
end
|
||||
|
||||
class << self
|
||||
def apps
|
||||
Hashie::Mash.new(APPS_CONFIG)
|
||||
|
||||
@@ -167,7 +167,7 @@ class Message < ApplicationRecord
|
||||
additional_attributes: additional_attributes,
|
||||
content_attributes: content_attributes,
|
||||
content_type: content_type,
|
||||
content: content,
|
||||
content: outgoing_content,
|
||||
conversation: conversation.webhook_data,
|
||||
created_at: created_at,
|
||||
id: id,
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
class Linear::ActivityMessageService
|
||||
attr_reader :conversation, :action_type, :issue_data, :user
|
||||
|
||||
def initialize(conversation:, action_type:, user:, issue_data: {})
|
||||
@conversation = conversation
|
||||
@action_type = action_type
|
||||
@issue_data = issue_data
|
||||
@user = user
|
||||
end
|
||||
|
||||
def perform
|
||||
return unless conversation && issue_data[:id] && user
|
||||
|
||||
content = generate_activity_content
|
||||
return unless content
|
||||
|
||||
::Conversations::ActivityMessageJob.perform_later(conversation, activity_message_params(content))
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def generate_activity_content
|
||||
case action_type.to_sym
|
||||
when :issue_created
|
||||
I18n.t('conversations.activity.linear.issue_created', user_name: user.name, issue_id: issue_data[:id])
|
||||
when :issue_linked
|
||||
I18n.t('conversations.activity.linear.issue_linked', user_name: user.name, issue_id: issue_data[:id])
|
||||
when :issue_unlinked
|
||||
I18n.t('conversations.activity.linear.issue_unlinked', user_name: user.name, issue_id: issue_data[:id])
|
||||
end
|
||||
end
|
||||
|
||||
def activity_message_params(content)
|
||||
{
|
||||
account_id: conversation.account_id,
|
||||
inbox_id: conversation.inbox_id,
|
||||
message_type: :activity,
|
||||
content: content
|
||||
}
|
||||
end
|
||||
end
|
||||
@@ -8,17 +8,25 @@ class Telegram::IncomingMessageService
|
||||
|
||||
def perform
|
||||
# chatwoot doesn't support group conversations at the moment
|
||||
transform_business_message!
|
||||
return unless private_message?
|
||||
|
||||
set_contact
|
||||
update_contact_avatar
|
||||
set_conversation
|
||||
# TODO: Since the recent Telegram Business update, we need to explicitly mark messages as read using an additional request.
|
||||
# Otherwise, the client will see their messages as unread.
|
||||
# Chatwoot defines a 'read' status in its enum but does not currently update this status for Telegram conversations.
|
||||
# We have two options:
|
||||
# 1. Send the read request to Telegram here, immediately when the message is created.
|
||||
# 2. Properly update the read status in the Chatwoot UI and trigger the Telegram request when the agent actually reads the message.
|
||||
# See: https://core.telegram.org/bots/api#readbusinessmessage
|
||||
@message = @conversation.messages.build(
|
||||
content: telegram_params_message_content,
|
||||
account_id: @inbox.account_id,
|
||||
inbox_id: @inbox.id,
|
||||
message_type: :incoming,
|
||||
sender: @contact,
|
||||
message_type: message_type,
|
||||
sender: message_sender,
|
||||
content_attributes: telegram_params_content_attributes,
|
||||
source_id: telegram_params_message_id.to_s
|
||||
)
|
||||
@@ -36,6 +44,11 @@ class Telegram::IncomingMessageService
|
||||
contact_attributes: contact_attributes
|
||||
).perform
|
||||
|
||||
# TODO: Should we update contact_attributes when the user changes their first or last name?
|
||||
# In business chats, when our Telegram bot initiates the conversation,
|
||||
# the message does not include a language code.
|
||||
# This is critical for AI assistants and translation plugins.
|
||||
|
||||
@contact_inbox = contact_inbox
|
||||
@contact = contact_inbox.contact
|
||||
end
|
||||
@@ -89,10 +102,19 @@ class Telegram::IncomingMessageService
|
||||
|
||||
def conversation_additional_attributes
|
||||
{
|
||||
chat_id: telegram_params_chat_id
|
||||
chat_id: telegram_params_chat_id,
|
||||
business_connection_id: telegram_params_business_connection_id
|
||||
}
|
||||
end
|
||||
|
||||
def message_type
|
||||
business_message_outgoing? ? :outgoing : :incoming
|
||||
end
|
||||
|
||||
def message_sender
|
||||
business_message_outgoing? ? nil : @contact
|
||||
end
|
||||
|
||||
def file_content_type
|
||||
return :image if image_message?
|
||||
return :audio if audio_message?
|
||||
@@ -191,4 +213,8 @@ class Telegram::IncomingMessageService
|
||||
params[:message][:video].presence ||
|
||||
params[:message][:video_note].presence
|
||||
end
|
||||
|
||||
def transform_business_message!
|
||||
params[:message] = params[:business_message] if params[:business_message] && !params[:message]
|
||||
end
|
||||
end
|
||||
|
||||
@@ -13,6 +13,17 @@ module Telegram::ParamHelpers
|
||||
{}
|
||||
end
|
||||
|
||||
def business_message?
|
||||
telegram_params_business_connection_id.present?
|
||||
end
|
||||
|
||||
# In business bot mode we will receive messages from our telegram.
|
||||
# This is our messages posted via telegram client.
|
||||
# Such messages should be outgoing (from us to client)
|
||||
def business_message_outgoing?
|
||||
business_message? && telegram_params_base_object[:chat][:id] != telegram_params_base_object[:from][:id]
|
||||
end
|
||||
|
||||
def message_params?
|
||||
params[:message].present?
|
||||
end
|
||||
@@ -29,24 +40,34 @@ module Telegram::ParamHelpers
|
||||
end
|
||||
end
|
||||
|
||||
def contact_params
|
||||
if business_message_outgoing?
|
||||
telegram_params_base_object[:chat]
|
||||
else
|
||||
telegram_params_base_object[:from]
|
||||
end
|
||||
end
|
||||
|
||||
def telegram_params_from_id
|
||||
return telegram_params_base_object[:chat][:id] if business_message?
|
||||
|
||||
telegram_params_base_object[:from][:id]
|
||||
end
|
||||
|
||||
def telegram_params_first_name
|
||||
telegram_params_base_object[:from][:first_name]
|
||||
contact_params[:first_name]
|
||||
end
|
||||
|
||||
def telegram_params_last_name
|
||||
telegram_params_base_object[:from][:last_name]
|
||||
contact_params[:last_name]
|
||||
end
|
||||
|
||||
def telegram_params_username
|
||||
telegram_params_base_object[:from][:username]
|
||||
contact_params[:username]
|
||||
end
|
||||
|
||||
def telegram_params_language_code
|
||||
telegram_params_base_object[:from][:language_code]
|
||||
contact_params[:language_code]
|
||||
end
|
||||
|
||||
def telegram_params_chat_id
|
||||
@@ -57,6 +78,14 @@ module Telegram::ParamHelpers
|
||||
end
|
||||
end
|
||||
|
||||
def telegram_params_business_connection_id
|
||||
if callback_query_params?
|
||||
params[:callback_query][:message][:business_connection_id]
|
||||
else
|
||||
telegram_params_base_object[:business_connection_id]
|
||||
end
|
||||
end
|
||||
|
||||
def telegram_params_message_content
|
||||
if callback_query_params?
|
||||
params[:callback_query][:data]
|
||||
|
||||
@@ -71,6 +71,7 @@ class Telegram::SendAttachmentsService
|
||||
HTTParty.post("#{channel.telegram_api_url}/sendMediaGroup",
|
||||
body: {
|
||||
chat_id: chat_id,
|
||||
**business_connection_body,
|
||||
media: attachments.map { |hash| hash.except(:attachment) }.to_json,
|
||||
reply_to_message_id: reply_to_message_id
|
||||
})
|
||||
@@ -108,6 +109,7 @@ class Telegram::SendAttachmentsService
|
||||
HTTParty.post("#{channel.telegram_api_url}/sendDocument",
|
||||
body: {
|
||||
chat_id: chat_id,
|
||||
**business_connection_body,
|
||||
document: file,
|
||||
reply_to_message_id: reply_to_message_id
|
||||
},
|
||||
@@ -135,4 +137,14 @@ class Telegram::SendAttachmentsService
|
||||
def channel
|
||||
@channel ||= message.inbox.channel
|
||||
end
|
||||
|
||||
def business_connection_id
|
||||
@business_connection_id ||= channel.business_connection_id(message)
|
||||
end
|
||||
|
||||
def business_connection_body
|
||||
body = {}
|
||||
body[:business_connection_id] = business_connection_id if business_connection_id
|
||||
body
|
||||
end
|
||||
end
|
||||
|
||||
@@ -5,6 +5,7 @@ class Telegram::UpdateMessageService
|
||||
pattr_initialize [:inbox!, :params!]
|
||||
|
||||
def perform
|
||||
transform_business_message!
|
||||
find_contact_inbox
|
||||
find_conversation
|
||||
find_message
|
||||
@@ -36,4 +37,8 @@ class Telegram::UpdateMessageService
|
||||
@message.update!(content: edited_message[:caption])
|
||||
end
|
||||
end
|
||||
|
||||
def transform_business_message!
|
||||
params[:edited_message] = params[:edited_business_message] if params[:edited_business_message].present?
|
||||
end
|
||||
end
|
||||
|
||||
@@ -4,7 +4,9 @@
|
||||
I18n.t('reports.label_csv.label_title'),
|
||||
I18n.t('reports.label_csv.conversations_count'),
|
||||
I18n.t('reports.label_csv.avg_first_response_time'),
|
||||
I18n.t('reports.label_csv.avg_resolution_time')
|
||||
I18n.t('reports.label_csv.avg_resolution_time'),
|
||||
I18n.t('reports.label_csv.avg_reply_time'),
|
||||
I18n.t('reports.label_csv.resolution_count'),
|
||||
]
|
||||
%>
|
||||
<%= CSVSafe.generate_line headers -%>
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
%>
|
||||
<%= javascript_include_tag "secretField" %>
|
||||
<div data-secret-text="<%= field.data %>" class="cell-data__secret-field">
|
||||
<span data-secret-masked="true">••••••••••</span>
|
||||
<span data-secret-masked="true"></span>
|
||||
<button onclick="toggleSecretField(event)" data-secret-toggler>
|
||||
<svg width="20" height="20">
|
||||
<use xlink:href="#eye-show" />
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<%= javascript_include_tag "secretField" %>
|
||||
|
||||
<div data-secret-text="<%= field.data %>" class="cell-data__secret-field">
|
||||
<span data-secret-masked="true">••••••••••</span>
|
||||
<span data-secret-masked="true"></span>
|
||||
<button onclick="toggleSecretField(event)" data-secret-toggler>
|
||||
<svg width="20" height="20">
|
||||
<use xlink:href="#eye-show" />
|
||||
|
||||
@@ -1,18 +1,18 @@
|
||||
<header class="sticky top-0 z-50 w-full bg-white shadow-sm dark:bg-slate-900">
|
||||
<nav class="hidden sm:flex max-w-5xl px-4 mx-auto md:px-8" aria-label="Top">
|
||||
<div class="flex items-center w-full py-5 overflow-hidden">
|
||||
<a href="<%= generate_home_link(@portal.slug, @portal.config['default_locale'] || params[:locale], @theme_from_params, @is_plain_layout_enabled) %>" class="flex items-center h-10">
|
||||
<a href="<%= generate_home_link(@portal.slug, @portal.config['default_locale'] || params[:locale], @theme_from_params, @is_plain_layout_enabled) %>" class="flex items-center min-w-0 h-10">
|
||||
<% if @portal.logo.present? %>
|
||||
<img src="<%= url_for(@portal.logo) %>" class="w-auto h-10 ltr:mr-2 rtl:ml-2" />
|
||||
<img src="<%= url_for(@portal.logo) %>" class="w-auto h-10 ltr:mr-2 rtl:ml-2" draggable="false" />
|
||||
<% end %>
|
||||
<span class="text-lg font-semibold text-slate-900 dark:text-white <%= @portal.logo.present? ? 'hidden' : 'hidden sm:block' %>"><%= @portal.name %></span>
|
||||
<span class="text-lg font-semibold text-slate-900 truncate dark:text-white <%= @portal.logo.present? ? 'hidden lg:block' : 'hidden sm:block' %>"><%= @portal.name %></span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<%# Go to homepage link section %>
|
||||
<div class="flex items-center justify-between gap-2 sm:gap-5">
|
||||
<% if @portal.homepage_link %>
|
||||
<div class="hidden px-1 py-2 ltr:ml-8 rtl:mr-8 cursor-pointer md:block">
|
||||
<div class="px-1 py-2 ltr:ml-8 rtl:mr-8 cursor-pointer block">
|
||||
<div class="flex-grow flex-shrink-0">
|
||||
<a id="header-action-button" target="_blank" rel="noopener noreferrer nofollow" href="<%= @portal.homepage_link %>" class="flex flex-row items-center gap-1 text-sm font-medium whitespace-nowrap text-slate-800 dark:text-slate-100 stroke-slate-700 dark:stroke-slate-200">
|
||||
<%= render partial: 'icons/redirect' %>
|
||||
@@ -99,11 +99,11 @@
|
||||
|
||||
<nav class="flex sm:hidden max-w-5xl px-4 mx-auto" aria-label="Mobile Top">
|
||||
<div class="flex items-center justify-between w-full py-5">
|
||||
<a href="<%= generate_home_link(@portal.slug, @portal.config['default_locale'] || params[:locale], @theme_from_params, @is_plain_layout_enabled) %>" class="flex items-center h-10 text-lg font-semibold text-slate-900 dark:text-white">
|
||||
<a href="<%= generate_home_link(@portal.slug, @portal.config['default_locale'] || params[:locale], @theme_from_params, @is_plain_layout_enabled) %>" class="flex items-center min-w-0 h-10 text-lg font-semibold text-slate-900 dark:text-white">
|
||||
<% if @portal.logo.present? %>
|
||||
<img src="<%= url_for(@portal.logo) %>" class="w-auto h-10 ltr:mr-2 rtl:ml-2" />
|
||||
<img src="<%= url_for(@portal.logo) %>" class="w-auto h-10 ltr:mr-2 rtl:ml-2" draggable="false" />
|
||||
<% end %>
|
||||
<span class="text-lg font-semibold text-slate-900 dark:text-white <%= @portal.logo.present? ? 'hidden' : 'sm:hidden block' %>"><%= @portal.name %></span>
|
||||
<span class="text-lg font-semibold text-slate-900 truncate dark:text-white <%= @portal.logo.present? ? 'hidden' : 'sm:hidden block' %>"><%= @portal.name %></span>
|
||||
</a>
|
||||
|
||||
<!-- Mobile Menu Component -->
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<section id="portal-bg" class="w-full bg-white dark:bg-slate-900 shadow-inner">
|
||||
<div id="portal-bg-gradient" class="pt-8 pb-8 md:pt-14 md:pb-6 min-h-[240px] md:min-h-[260px]">
|
||||
<div class="mx-auto max-w-5xl px-4 md:px-8 flex flex-col items-start">
|
||||
<span class="text-sm leading-[24px] font-semibold text-slate-600 dark:text-slate-300 mb-1 <%= @portal.logo.present? ? 'block' : 'hidden' %>"><%= @portal.name %></span>
|
||||
<span class="text-sm leading-[24px] font-semibold text-slate-600 dark:text-slate-300 mb-1 <%= @portal.logo.present? ? 'block lg:hidden' : 'hidden' %>"><%= @portal.name %></span>
|
||||
<h1 class="text-2xl md:text-4xl text-slate-900 dark:text-white font-semibold leading-normal">
|
||||
<%= portal.header_text %>
|
||||
</h1>
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
<% has_multiple_locales = @portal.config["allowed_locales"].length > 1 %>
|
||||
|
||||
<input type="checkbox" id="mobile-menu-toggle" class="peer/menu hidden" />
|
||||
|
||||
@@ -46,10 +47,12 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<span class="h-px bg-slate-100/70 dark:bg-slate-800/70 w-full"></span>
|
||||
<% if has_multiple_locales %>
|
||||
<span class="h-px bg-slate-100/70 dark:bg-slate-800/70 w-full"></span>
|
||||
<% end %>
|
||||
|
||||
<!-- Locale Switcher -->
|
||||
<% if @portal.config["allowed_locales"].length > 1 %>
|
||||
<% if has_multiple_locales %>
|
||||
<div id="header-action-button" class="flex flex-col gap-2">
|
||||
<h3 class="text-base font-medium text-slate-700 dark:text-slate-300 my-2">
|
||||
<%= I18n.t('public_portal.header.language', default: 'Language') %>
|
||||
|
||||
@@ -159,9 +159,6 @@
|
||||
<symbol id="icon-shopify" viewBox="0 0 32 32">
|
||||
<path fill="currentColor" d="m20.448 31.974l9.625-2.083s-3.474-23.484-3.5-23.641s-.156-.255-.281-.255c-.13 0-2.573-.182-2.573-.182s-1.703-1.698-1.922-1.88a.4.4 0 0 0-.161-.099l-1.219 28.141zm-4.833-16.901s-1.083-.563-2.365-.563c-1.932 0-2.005 1.203-2.005 1.521c0 1.641 4.318 2.286 4.318 6.172c0 3.057-1.922 5.01-4.542 5.01c-3.141 0-4.719-1.953-4.719-1.953l.859-2.781s1.661 1.422 3.042 1.422c.901 0 1.302-.724 1.302-1.245c0-2.156-3.542-2.255-3.542-5.807c-.047-2.984 2.094-5.891 6.438-5.891c1.677 0 2.5.479 2.5.479l-1.26 3.625zm-.719-13.969c.177 0 .359.052.536.182c-1.313.62-2.75 2.188-3.344 5.323a76 76 0 0 1-2.516.771c.688-2.38 2.359-6.26 5.323-6.26zm1.646 3.932v.182c-1.005.307-2.115.646-3.193.979c.62-2.37 1.776-3.526 2.781-3.958c.255.667.411 1.568.411 2.797zm.718-2.973c.922.094 1.521 1.151 1.901 2.339c-.464.151-.979.307-1.542.484v-.333c0-1.005-.13-1.828-.359-2.495zm3.99 1.718c-.031 0-.083.026-.104.026c-.026 0-.385.099-.953.281C19.63 2.442 18.625.927 16.849.927h-.156C16.183.281 15.558 0 15.021 0c-4.141 0-6.12 5.172-6.74 7.797c-1.594.484-2.75.844-2.88.896c-.901.286-.927.313-1.031 1.161c-.099.615-2.438 18.75-2.438 18.75L20.01 32z"/>
|
||||
</symbol>
|
||||
<symbol id="icon-github" viewBox="0 0 24 24">
|
||||
<path fill="currentColor" d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"/>
|
||||
</symbol>
|
||||
<symbol id="icon-slack" viewBox="0 0 24 24">
|
||||
<path fill="currentColor" d="M6.527 14.514A1.973 1.973 0 0 1 4.56 16.48a1.973 1.973 0 0 1-1.968-1.967c0-1.083.885-1.968 1.968-1.968h1.967zm.992 0c0-1.083.885-1.968 1.968-1.968s1.967.885 1.967 1.968v4.927a1.973 1.973 0 0 1-1.967 1.968a1.973 1.973 0 0 1-1.968-1.968zm1.968-7.987A1.973 1.973 0 0 1 7.519 4.56c0-1.083.885-1.967 1.968-1.967s1.967.884 1.967 1.967v1.968zm0 .992c1.083 0 1.967.884 1.967 1.967a1.973 1.973 0 0 1-1.967 1.968H4.56a1.973 1.973 0 0 1-1.968-1.968c0-1.083.885-1.967 1.968-1.967zm7.986 1.967c0-1.083.885-1.967 1.968-1.967s1.968.884 1.968 1.967a1.973 1.973 0 0 1-1.968 1.968h-1.968zm-.991 0a1.973 1.973 0 0 1-1.968 1.968a1.973 1.973 0 0 1-1.968-1.968V4.56c0-1.083.885-1.967 1.968-1.967s1.968.884 1.968 1.967zm-1.968 7.987c1.083 0 1.968.885 1.968 1.968a1.973 1.973 0 0 1-1.968 1.968a1.973 1.973 0 0 1-1.968-1.968v-1.968zm0-.992a1.973 1.973 0 0 1-1.968-1.967c0-1.083.885-1.968 1.968-1.968h4.927c1.083 0 1.968.885 1.968 1.968a1.973 1.973 0 0 1-1.968 1.967z"/>
|
||||
</symbol>
|
||||
|
||||
|
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 41 KiB |
@@ -22,27 +22,36 @@
|
||||
<% end %>
|
||||
|
||||
<div class="bg-white py-2 px-4 xl:px-0">
|
||||
<div class="mb-4">
|
||||
<div class="flex items-center gap-2">
|
||||
<h2 class="h-5 leading-5 text-n-slate-12 font-medium">Current plan</h2>
|
||||
<a href="<%= refresh_super_admin_settings_url %>" class="inline-flex gap-1 text-xs font-medium items-center text-woot-500 hover:text-woot-700">
|
||||
<svg width="16" height="16"><use xlink:href="#icon-refresh-line" /></svg>
|
||||
<span>Refresh</span>
|
||||
</a>
|
||||
</div>
|
||||
<p class="text-n-slate-11 mt-1"><%= SuperAdmin::FeaturesHelper.plan_details.html_safe %></p>
|
||||
<div class="flex items-center mt-6">
|
||||
<h4 class="text-sm font-medium leading-5 h-5 text-n-slate-12 mr-4">Installation Identifier</h4>
|
||||
<span class="text-sm leading-5 h-5 text-n-slate-11"><%= ChatwootHub.installation_identifier %></span>
|
||||
<%= javascript_include_tag "secretField" %>
|
||||
<div class="flex items-center mb-6">
|
||||
<h4 class="text-sm font-medium leading-5 h-5 text-n-slate-12 mr-4">Installation Identifier</h4>
|
||||
<div data-secret-text="<%= ChatwootHub.installation_identifier %>" class="cell-data__secret-field text-sm leading-5 h-5 text-n-slate-11">
|
||||
<span data-secret-masked="true" class="select-none"></span>
|
||||
<button type="button" onclick="toggleSecretField(event)" data-secret-toggler class="inline-flex items-center justify-center h-5 w-5 p-0 rounded text-n-slate-11 hover:text-n-slate-12 transition-colors focus:outline-none">
|
||||
<svg width="20" height="20" class="w-5 h-5 fill-current">
|
||||
<use xlink:href="#eye-show" />
|
||||
</svg>
|
||||
</button>
|
||||
<button type="button" onclick="copySecretField(event)" data-secret-copier class="inline-flex items-center justify-center h-5 w-5 p-0 rounded text-n-slate-11 hover:text-n-slate-12 transition-colors focus:outline-none">
|
||||
<svg width="20" height="20" class="w-5 h-5 fill-current">
|
||||
<use xlink:href="#icon-copy" />
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex p-4 outline outline-1 outline-n-container rounded-lg mt-8 items-start md:items-center shadow-sm flex-col md:flex-row">
|
||||
<div class="flex p-4 outline outline-1 outline-n-container rounded-lg items-start md:items-center shadow-sm flex-col md:flex-row">
|
||||
<div class="flex flex-col flex-grow gap-1">
|
||||
<h2 class="h-5 leading-5 text-n-slate-12 text-sm font-medium">Current plan</h2>
|
||||
<div class="flex items-center gap-2">
|
||||
<h2 class="h-5 leading-5 text-n-slate-12 text-sm font-medium">Current plan</h2>
|
||||
<a href="<%= refresh_super_admin_settings_url %>" class="inline-flex gap-1 text-xs font-medium items-center text-woot-500 hover:text-woot-700">
|
||||
<svg width="16" height="16"><use xlink:href="#icon-refresh-line" /></svg>
|
||||
<span>Refresh</span>
|
||||
</a>
|
||||
</div>
|
||||
<p class="text-n-slate-11 m-0 text-sm"><%= SuperAdmin::FeaturesHelper.plan_details.html_safe %></p>
|
||||
</div>
|
||||
<a href="<%= ChatwootHub.billing_url %>" target="_blank" rel="noopener noreferrer">
|
||||
<button class="mt-4 md:mt-0 flex gap-1 items-center bg-transparent shadow-sm h-9 hover:text-n-slate-12 hover:bg-slate-50 outline outline-1 outline-n-container rounded text-n-slate-11 font-medium p-2">
|
||||
<button class="mt-4 md:mt-0 flex gap-1 items-center bg-transparent shadow-sm h-9 hover:text-n-slate-12 hover:bg-slate-50 outline outline-1 outline-n-container rounded text-n-slate-11 font-medium p-2 focus:outline-none">
|
||||
<svg width="16" height="16"><use xlink:href="#icon-settings-2-line" /></svg>
|
||||
<span class="px-1">Manage</span>
|
||||
</button>
|
||||
@@ -64,14 +73,14 @@
|
||||
<p class="text-n-slate-11 m-0 text-sm">Do you face any issues? We are here to help.</p>
|
||||
</div>
|
||||
<a href="https://discord.gg/cJXdrwS" target="_blank">
|
||||
<button class="flex mt-4 md:mt-0 gap-1 items-center bg-transparent shadow-sm h-9 bg-violet-500 hover:bg-violet-600 text-white border border-solid border-violet-600 rounded font-medium p-2">
|
||||
<svg class="h-4 w-4" width="24" height="24" fill="none" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M12 2c5.523 0 10 4.477 10 10s-4.477 10-10 10a9.96 9.96 0 0 1-4.587-1.112l-3.826 1.067a1.25 1.25 0 0 1-1.54-1.54l1.068-3.823A9.96 9.96 0 0 1 2 12C2 6.477 6.477 2 12 2Zm0 1.5A8.5 8.5 0 0 0 3.5 12c0 1.47.373 2.883 1.073 4.137l.15.27-1.112 3.984 3.987-1.112.27.15A8.5 8.5 0 1 0 12 3.5ZM8.75 13h4.498a.75.75 0 0 1 .102 1.493l-.102.007H8.75a.75.75 0 0 1-.102-1.493L8.75 13h4.498H8.75Zm0-3.5h6.505a.75.75 0 0 1 .101 1.493l-.101.007H8.75a.75.75 0 0 1-.102-1.493L8.75 9.5h6.505H8.75Z" fill="currentColor"/></svg>
|
||||
<button class="flex mt-4 md:mt-0 gap-1 items-center bg-transparent shadow-sm h-9 bg-violet-500 hover:bg-violet-600 text-white border border-solid border-violet-600 rounded font-medium p-2 focus:outline-none">
|
||||
<svg class="h-4 w-4" width="24" height="24" fill="none" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M13.209 3.103c-.495-1.004-1.926-1.004-2.421 0L8.43 7.88l-5.273.766c-1.107.161-1.55 1.522-.748 2.303l3.815 3.72-.9 5.25c-.19 1.103.968 1.944 1.959 1.424l4.715-2.48 4.716 2.48c.99.52 2.148-.32 1.96-1.424l-.902-5.25 3.816-3.72c.8-.78.359-2.142-.748-2.303l-5.273-.766-2.358-4.777ZM9.74 8.615l2.258-4.576 2.259 4.576a1.35 1.35 0 0 0 1.016.738l5.05.734-3.654 3.562a1.35 1.35 0 0 0-.388 1.195l.862 5.03-4.516-2.375a1.35 1.35 0 0 0-1.257 0l-4.516 2.374.862-5.029a1.35 1.35 0 0 0-.388-1.195l-3.654-3.562 5.05-.734c.44-.063.82-.34 1.016-.738ZM1.164 3.782a.75.75 0 0 0 .118 1.054l2.5 2a.75.75 0 1 0 .937-1.172l-2.5-2a.75.75 0 0 0-1.055.118Z" fill="currentColor"/><path d="M22.836 18.218a.75.75 0 0 0-.117-1.054l-2.5-2a.75.75 0 0 0-.938 1.172l2.5 2a.75.75 0 0 0 1.055-.117ZM1.282 17.164a.75.75 0 1 0 .937 1.172l2.5-2a.75.75 0 0 0-.937-1.172l-2.5 2ZM22.836 3.782a.75.75 0 0 1-.117 1.054l-2.5 2a.75.75 0 0 1-.938-1.172l2.5-2a.75.75 0 0 1 1.055.118Z" fill="currentColor"/></svg>
|
||||
<span class="px-1">Community Support</span>
|
||||
</button>
|
||||
</a>
|
||||
<% if ChatwootHub.pricing_plan !='community' %>
|
||||
<button class="ml-4 flex gap-1 items-center bg-transparent h-9 hover:text-n-slate-12 hover:bg-slate-50 border border-solid border-slate-100 rounded text-n-slate-11 font-medium p-2" onclick="window.$chatwoot.toggle('open')">
|
||||
<svg class="h-4 w-4" width="24" height="24" fill="none" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M12 2c5.523 0 10 4.477 10 10s-4.477 10-10 10a9.96 9.96 0 0 1-4.587-1.112l-3.826 1.067a1.25 1.25 0 0 1-1.54-1.54l1.068-3.823A9.96 9.96 0 0 1 2 12C2 6.477 6.477 2 12 2Zm0 1.5A8.5 8.5 0 0 0 3.5 12c0 1.47.373 2.883 1.073 4.137l.15.27-1.112 3.984 3.987-1.112.27.15A8.5 8.5 0 1 0 12 3.5ZM8.75 13h4.498a.75.75 0 0 1 .102 1.493l-.102.007H8.75a.75.75 0 0 1-.102-1.493L8.75 13h4.498H8.75Zm0-3.5h6.505a.75.75 0 0 1 .101 1.493l-.101.007H8.75a.75.75 0 0 1-.102-1.493L8.75 9.5h6.505H8.75Z" fill="currentColor"/></svg>
|
||||
<button class="ml-4 flex gap-1 items-center bg-transparent h-9 hover:text-n-slate-12 hover:bg-slate-50 border border-solid border-slate-100 rounded text-n-slate-11 font-medium p-2 focus:outline-none" onclick="window.$chatwoot.toggle('open')">
|
||||
<svg class="h-4 w-4" width="24" height="24" fill="none" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M13.209 3.103c-.495-1.004-1.926-1.004-2.421 0L8.43 7.88l-5.273.766c-1.107.161-1.55 1.522-.748 2.303l3.815 3.72-.9 5.25c-.19 1.103.968 1.944 1.959 1.424l4.715-2.48 4.716 2.48c.99.52 2.148-.32 1.96-1.424l-.902-5.25 3.816-3.72c.8-.78.359-2.142-.748-2.303l-5.273-.766-2.358-4.777ZM9.74 8.615l2.258-4.576 2.259 4.576a1.35 1.35 0 0 0 1.016.738l5.05.734-3.654 3.562a1.35 1.35 0 0 0-.388 1.195l.862 5.03-4.516-2.375a1.35 1.35 0 0 0-1.257 0l-4.516 2.374.862-5.029a1.35 1.35 0 0 0-.388-1.195l-3.654-3.562 5.05-.734c.44-.063.82-.34 1.016-.738ZM1.164 3.782a.75.75 0 0 0 .118 1.054l2.5 2a.75.75 0 1 0 .937-1.172l-2.5-2a.75.75 0 0 0-1.055.118Z" fill="currentColor"/><path d="M22.836 18.218a.75.75 0 0 0-.117-1.054l-2.5-2a.75.75 0 0 0-.938 1.172l2.5 2a.75.75 0 0 0 1.055-.117ZM1.282 17.164a.75.75 0 1 0 .937 1.172l2.5-2a.75.75 0 0 0-.937-1.172l-2.5 2ZM22.836 3.782a.75.75 0 0 1-.117 1.054l-2.5 2a.75.75 0 0 1-.938-1.172l2.5-2a.75.75 0 0 1 1.055.118Z" fill="currentColor"/></svg>
|
||||
<span class="px-1">Chat Support</span>
|
||||
</button>
|
||||
<% end %>
|
||||
@@ -90,7 +99,7 @@
|
||||
</div>
|
||||
<% if !attrs[:enabled] %>
|
||||
<div class="flex h-9 absolute top-5 items-center invisible group-hover:visible">
|
||||
<a href="<%= ChatwootHub.billing_url %>" target="_blank" rel="noopener noreferrer" class="flex gap-1 items-center bg-slate-100 h-9 hover:bg-slate-300 hover:text-n-slate-12 border border-solid border-slate-100 rounded text-n-slate-11 font-medium p-2">
|
||||
<a href="<%= ChatwootHub.billing_url %>" target="_blank" rel="noopener noreferrer" class="flex gap-1 items-center bg-slate-100 h-9 hover:bg-slate-300 hover:text-n-slate-12 border border-solid border-slate-100 rounded text-n-slate-11 font-medium p-2 focus:outline-none">
|
||||
<svg class="h-4 w-4" width="24" height="24" fill="none" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M13.209 3.103c-.495-1.004-1.926-1.004-2.421 0L8.43 7.88l-5.273.766c-1.107.161-1.55 1.522-.748 2.303l3.815 3.72-.9 5.25c-.19 1.103.968 1.944 1.959 1.424l4.715-2.48 4.716 2.48c.99.52 2.148-.32 1.96-1.424l-.902-5.25 3.816-3.72c.8-.78.359-2.142-.748-2.303l-5.273-.766-2.358-4.777ZM9.74 8.615l2.258-4.576 2.259 4.576a1.35 1.35 0 0 0 1.016.738l5.05.734-3.654 3.562a1.35 1.35 0 0 0-.388 1.195l.862 5.03-4.516-2.375a1.35 1.35 0 0 0-1.257 0l-4.516 2.374.862-5.029a1.35 1.35 0 0 0-.388-1.195l-3.654-3.562 5.05-.734c.44-.063.82-.34 1.016-.738ZM1.164 3.782a.75.75 0 0 0 .118 1.054l2.5 2a.75.75 0 1 0 .937-1.172l-2.5-2a.75.75 0 0 0-1.055.118Z" fill="currentColor"/><path d="M22.836 18.218a.75.75 0 0 0-.117-1.054l-2.5-2a.75.75 0 0 0-.938 1.172l2.5 2a.75.75 0 0 0 1.055-.117ZM1.282 17.164a.75.75 0 1 0 .937 1.172l2.5-2a.75.75 0 0 0-.937-1.172l-2.5 2ZM22.836 3.782a.75.75 0 0 1-.117 1.054l-2.5 2a.75.75 0 0 1-.938-1.172l2.5-2a.75.75 0 0 1 1.055.118Z" fill="currentColor"/></svg>
|
||||
<span class="px-1">Upgrade now</span>
|
||||
</a>
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
shared: &shared
|
||||
version: '4.2.0'
|
||||
version: '4.3.0'
|
||||
|
||||
development:
|
||||
<<: *shared
|
||||
|
||||
@@ -168,7 +168,4 @@
|
||||
enabled: true
|
||||
- name: crm_integration
|
||||
display_name: CRM Integration
|
||||
enabled: false
|
||||
- name: github_integration
|
||||
display_name: Github Integration
|
||||
enabled: false
|
||||
@@ -341,17 +341,3 @@
|
||||
value: 'v22.0'
|
||||
locked: true
|
||||
# ------- End of Instagram Channel Related Config ------- #
|
||||
|
||||
## ------ Configs added for GitHub ------ ##
|
||||
- name: GITHUB_CLIENT_ID
|
||||
display_title: 'GitHub Client ID'
|
||||
value:
|
||||
locked: false
|
||||
description: 'GitHub OAuth app client ID'
|
||||
- name: GITHUB_CLIENT_SECRET
|
||||
display_title: 'GitHub Client Secret'
|
||||
value:
|
||||
locked: false
|
||||
description: 'GitHub OAuth app client secret'
|
||||
type: secret
|
||||
## ------ End of Configs added for GitHub ------ ##
|
||||
|
||||
@@ -278,10 +278,3 @@ leadsquared:
|
||||
'conversation_activity_score',
|
||||
'transcript_activity_score',
|
||||
]
|
||||
|
||||
github:
|
||||
id: github
|
||||
logo: github.png
|
||||
i18n_key: github
|
||||
hook_type: account
|
||||
allow_multiple_hooks: false
|
||||
|
||||
@@ -91,6 +91,8 @@ am:
|
||||
conversations_count: No. of conversations
|
||||
avg_first_response_time: Avg first response time
|
||||
avg_resolution_time: Avg resolution time
|
||||
avg_reply_time: Avg reply time
|
||||
resolution_count: Resolution Count
|
||||
team_csv:
|
||||
team_name: Team name
|
||||
conversations_count: Conversations count
|
||||
@@ -138,6 +140,8 @@ am:
|
||||
instagram_story_content: '%{story_sender} mentioned you in the story: '
|
||||
instagram_deleted_story_content: This story is no longer available.
|
||||
deleted: This message was deleted
|
||||
whatsapp:
|
||||
list_button_label: 'Choose an item'
|
||||
delivery_status:
|
||||
error_code: 'Error code: %{error_code}'
|
||||
activity:
|
||||
@@ -172,6 +176,10 @@ am:
|
||||
sla:
|
||||
added: '%{user_name} added SLA policy %{sla_name}'
|
||||
removed: '%{user_name} removed SLA policy %{sla_name}'
|
||||
linear:
|
||||
issue_created: 'Linear issue %{issue_id} was created by %{user_name}'
|
||||
issue_linked: 'Linear issue %{issue_id} was linked by %{user_name}'
|
||||
issue_unlinked: 'Linear issue %{issue_id} was unlinked by %{user_name}'
|
||||
csat:
|
||||
not_sent_due_to_messaging_window: 'CSAT survey not sent due to outgoing message restrictions'
|
||||
muted: '%{user_name} has muted the conversation'
|
||||
|
||||
@@ -91,6 +91,8 @@ ar:
|
||||
conversations_count: عدد المحادثات
|
||||
avg_first_response_time: متوسط وقت الرد الأول
|
||||
avg_resolution_time: متوسط وقت الحل
|
||||
avg_reply_time: Avg reply time
|
||||
resolution_count: عدد مرات الإغلاق
|
||||
team_csv:
|
||||
team_name: اسم الفريق
|
||||
conversations_count: عدد المحادثات
|
||||
@@ -138,6 +140,8 @@ ar:
|
||||
instagram_story_content: 'أشار %{story_sender} إليك في القصة: '
|
||||
instagram_deleted_story_content: هذه القصة لم تعد متاحة.
|
||||
deleted: تم حذف هذه الرسالة
|
||||
whatsapp:
|
||||
list_button_label: 'Choose an item'
|
||||
delivery_status:
|
||||
error_code: 'رمز الخطأ: %{error_code}'
|
||||
activity:
|
||||
@@ -172,6 +176,10 @@ ar:
|
||||
sla:
|
||||
added: '%{user_name} أضاف سياسة مستوى الخدمة %{sla_name}'
|
||||
removed: '%{user_name} أزال سياسة مستوى الخدمة %{sla_name}'
|
||||
linear:
|
||||
issue_created: 'Linear issue %{issue_id} was created by %{user_name}'
|
||||
issue_linked: 'Linear issue %{issue_id} was linked by %{user_name}'
|
||||
issue_unlinked: 'Linear issue %{issue_id} was unlinked by %{user_name}'
|
||||
csat:
|
||||
not_sent_due_to_messaging_window: 'CSAT survey not sent due to outgoing message restrictions'
|
||||
muted: '%{user_name} كتم صوت المحادثة'
|
||||
|
||||
@@ -91,6 +91,8 @@ az:
|
||||
conversations_count: No. of conversations
|
||||
avg_first_response_time: Avg first response time
|
||||
avg_resolution_time: Avg resolution time
|
||||
avg_reply_time: Avg reply time
|
||||
resolution_count: Resolution Count
|
||||
team_csv:
|
||||
team_name: Team name
|
||||
conversations_count: Conversations count
|
||||
@@ -138,6 +140,8 @@ az:
|
||||
instagram_story_content: '%{story_sender} mentioned you in the story: '
|
||||
instagram_deleted_story_content: This story is no longer available.
|
||||
deleted: This message was deleted
|
||||
whatsapp:
|
||||
list_button_label: 'Choose an item'
|
||||
delivery_status:
|
||||
error_code: 'Error code: %{error_code}'
|
||||
activity:
|
||||
@@ -172,6 +176,10 @@ az:
|
||||
sla:
|
||||
added: '%{user_name} added SLA policy %{sla_name}'
|
||||
removed: '%{user_name} removed SLA policy %{sla_name}'
|
||||
linear:
|
||||
issue_created: 'Linear issue %{issue_id} was created by %{user_name}'
|
||||
issue_linked: 'Linear issue %{issue_id} was linked by %{user_name}'
|
||||
issue_unlinked: 'Linear issue %{issue_id} was unlinked by %{user_name}'
|
||||
csat:
|
||||
not_sent_due_to_messaging_window: 'CSAT survey not sent due to outgoing message restrictions'
|
||||
muted: '%{user_name} has muted the conversation'
|
||||
|
||||
@@ -91,6 +91,8 @@ bg:
|
||||
conversations_count: No. of conversations
|
||||
avg_first_response_time: Avg first response time
|
||||
avg_resolution_time: Avg resolution time
|
||||
avg_reply_time: Avg reply time
|
||||
resolution_count: Resolution Count
|
||||
team_csv:
|
||||
team_name: Team name
|
||||
conversations_count: Conversations count
|
||||
@@ -138,6 +140,8 @@ bg:
|
||||
instagram_story_content: '%{story_sender} mentioned you in the story: '
|
||||
instagram_deleted_story_content: This story is no longer available.
|
||||
deleted: This message was deleted
|
||||
whatsapp:
|
||||
list_button_label: 'Choose an item'
|
||||
delivery_status:
|
||||
error_code: 'Error code: %{error_code}'
|
||||
activity:
|
||||
@@ -172,6 +176,10 @@ bg:
|
||||
sla:
|
||||
added: '%{user_name} added SLA policy %{sla_name}'
|
||||
removed: '%{user_name} removed SLA policy %{sla_name}'
|
||||
linear:
|
||||
issue_created: 'Linear issue %{issue_id} was created by %{user_name}'
|
||||
issue_linked: 'Linear issue %{issue_id} was linked by %{user_name}'
|
||||
issue_unlinked: 'Linear issue %{issue_id} was unlinked by %{user_name}'
|
||||
csat:
|
||||
not_sent_due_to_messaging_window: 'CSAT survey not sent due to outgoing message restrictions'
|
||||
muted: '%{user_name} has muted the conversation'
|
||||
|
||||
@@ -91,6 +91,8 @@ ca:
|
||||
conversations_count: Nre. de converses
|
||||
avg_first_response_time: Temps mitjà de primera resposta
|
||||
avg_resolution_time: Temps mitjà de resolució
|
||||
avg_reply_time: Avg reply time
|
||||
resolution_count: Total de resolucions
|
||||
team_csv:
|
||||
team_name: Nom de l'equip
|
||||
conversations_count: Recompte de converses
|
||||
@@ -138,6 +140,8 @@ ca:
|
||||
instagram_story_content: '%{story_sender} t''ha mencionat a la història: '
|
||||
instagram_deleted_story_content: Aquesta història ja no està disponible.
|
||||
deleted: Aquest missatge a sigut eliminat
|
||||
whatsapp:
|
||||
list_button_label: 'Choose an item'
|
||||
delivery_status:
|
||||
error_code: 'Codi d''error: %{error_code}'
|
||||
activity:
|
||||
@@ -172,6 +176,10 @@ ca:
|
||||
sla:
|
||||
added: '%{user_name} ha afegit la política de SLA %{sla_name}'
|
||||
removed: '%{user_name} ha eliminat la política de SLA %{sla_name}'
|
||||
linear:
|
||||
issue_created: 'Linear issue %{issue_id} was created by %{user_name}'
|
||||
issue_linked: 'Linear issue %{issue_id} was linked by %{user_name}'
|
||||
issue_unlinked: 'Linear issue %{issue_id} was unlinked by %{user_name}'
|
||||
csat:
|
||||
not_sent_due_to_messaging_window: 'CSAT survey not sent due to outgoing message restrictions'
|
||||
muted: '%{user_name} ha silenciat la conversa'
|
||||
|
||||
@@ -91,6 +91,8 @@ cs:
|
||||
conversations_count: No. of conversations
|
||||
avg_first_response_time: Avg first response time
|
||||
avg_resolution_time: Avg resolution time
|
||||
avg_reply_time: Avg reply time
|
||||
resolution_count: Počet rozlišení
|
||||
team_csv:
|
||||
team_name: Team name
|
||||
conversations_count: Conversations count
|
||||
@@ -138,6 +140,8 @@ cs:
|
||||
instagram_story_content: '%{story_sender} mentioned you in the story: '
|
||||
instagram_deleted_story_content: This story is no longer available.
|
||||
deleted: Tato zpráva byla smazána
|
||||
whatsapp:
|
||||
list_button_label: 'Choose an item'
|
||||
delivery_status:
|
||||
error_code: 'Error code: %{error_code}'
|
||||
activity:
|
||||
@@ -172,6 +176,10 @@ cs:
|
||||
sla:
|
||||
added: '%{user_name} added SLA policy %{sla_name}'
|
||||
removed: '%{user_name} removed SLA policy %{sla_name}'
|
||||
linear:
|
||||
issue_created: 'Linear issue %{issue_id} was created by %{user_name}'
|
||||
issue_linked: 'Linear issue %{issue_id} was linked by %{user_name}'
|
||||
issue_unlinked: 'Linear issue %{issue_id} was unlinked by %{user_name}'
|
||||
csat:
|
||||
not_sent_due_to_messaging_window: 'CSAT survey not sent due to outgoing message restrictions'
|
||||
muted: '%{user_name} ztlumil/a konverzaci'
|
||||
|
||||
@@ -91,6 +91,8 @@ da:
|
||||
conversations_count: Antal samtaler
|
||||
avg_first_response_time: Avg first response time
|
||||
avg_resolution_time: Avg resolution time
|
||||
avg_reply_time: Avg reply time
|
||||
resolution_count: Antal Afsluttede
|
||||
team_csv:
|
||||
team_name: Team navn
|
||||
conversations_count: Samtaler tæller
|
||||
@@ -138,6 +140,8 @@ da:
|
||||
instagram_story_content: '%{story_sender} nævnte dig i historien: '
|
||||
instagram_deleted_story_content: Denne historie er ikke længere tilgængelig.
|
||||
deleted: Denne besked blev slettet
|
||||
whatsapp:
|
||||
list_button_label: 'Choose an item'
|
||||
delivery_status:
|
||||
error_code: 'Error code: %{error_code}'
|
||||
activity:
|
||||
@@ -172,6 +176,10 @@ da:
|
||||
sla:
|
||||
added: '%{user_name} added SLA policy %{sla_name}'
|
||||
removed: '%{user_name} removed SLA policy %{sla_name}'
|
||||
linear:
|
||||
issue_created: 'Linear issue %{issue_id} was created by %{user_name}'
|
||||
issue_linked: 'Linear issue %{issue_id} was linked by %{user_name}'
|
||||
issue_unlinked: 'Linear issue %{issue_id} was unlinked by %{user_name}'
|
||||
csat:
|
||||
not_sent_due_to_messaging_window: 'CSAT survey not sent due to outgoing message restrictions'
|
||||
muted: '%{user_name} har slukket for samtalen'
|
||||
|
||||
@@ -91,6 +91,8 @@ de:
|
||||
conversations_count: Anzahl der Konversationen
|
||||
avg_first_response_time: Durchschnittliche Zeit bis zur ersten Antwort
|
||||
avg_resolution_time: Durchschnittliche Auflösung
|
||||
avg_reply_time: Avg reply time
|
||||
resolution_count: Auflösungsanzahl
|
||||
team_csv:
|
||||
team_name: Teamname
|
||||
conversations_count: Anzahl Gespräche
|
||||
@@ -138,6 +140,8 @@ de:
|
||||
instagram_story_content: '%{story_sender} erwähnte sie in der Geschichte: '
|
||||
instagram_deleted_story_content: Diese Geschichte ist nicht mehr verfügbar.
|
||||
deleted: Diese Nachricht wurde gelöscht
|
||||
whatsapp:
|
||||
list_button_label: 'Choose an item'
|
||||
delivery_status:
|
||||
error_code: 'Fehlercode: %{error_code}'
|
||||
activity:
|
||||
@@ -172,6 +176,10 @@ de:
|
||||
sla:
|
||||
added: '%{user_name} hat SLA-Richtlinie %{sla_name} hinzugefügt'
|
||||
removed: '%{user_name} hat SLA-Richtlinie %{sla_name} entfernt'
|
||||
linear:
|
||||
issue_created: 'Linear issue %{issue_id} was created by %{user_name}'
|
||||
issue_linked: 'Linear issue %{issue_id} was linked by %{user_name}'
|
||||
issue_unlinked: 'Linear issue %{issue_id} was unlinked by %{user_name}'
|
||||
csat:
|
||||
not_sent_due_to_messaging_window: 'CSAT survey not sent due to outgoing message restrictions'
|
||||
muted: '%{user_name} hat das Gespräch stumm geschaltet'
|
||||
|
||||
@@ -91,6 +91,8 @@ el:
|
||||
conversations_count: Αριθμός συνομιλιών
|
||||
avg_first_response_time: Avg first response time
|
||||
avg_resolution_time: Avg resolution time
|
||||
avg_reply_time: Avg reply time
|
||||
resolution_count: Αριθμός Αναλύσεων
|
||||
team_csv:
|
||||
team_name: Όνομα ομάδας
|
||||
conversations_count: Αριθμός συνομιλιών
|
||||
@@ -138,6 +140,8 @@ el:
|
||||
instagram_story_content: 'Ο %{story_sender} σας ανέφερε στην ιστορία: '
|
||||
instagram_deleted_story_content: Η ιστορία δεν είναι πλέον διαθέσιμη.
|
||||
deleted: Το μήνυμα διαγράφηκε
|
||||
whatsapp:
|
||||
list_button_label: 'Choose an item'
|
||||
delivery_status:
|
||||
error_code: 'Error code: %{error_code}'
|
||||
activity:
|
||||
@@ -172,6 +176,10 @@ el:
|
||||
sla:
|
||||
added: '%{user_name} added SLA policy %{sla_name}'
|
||||
removed: '%{user_name} removed SLA policy %{sla_name}'
|
||||
linear:
|
||||
issue_created: 'Linear issue %{issue_id} was created by %{user_name}'
|
||||
issue_linked: 'Linear issue %{issue_id} was linked by %{user_name}'
|
||||
issue_unlinked: 'Linear issue %{issue_id} was unlinked by %{user_name}'
|
||||
csat:
|
||||
not_sent_due_to_messaging_window: 'CSAT survey not sent due to outgoing message restrictions'
|
||||
muted: 'Ο χρήστης %{user_name} σίγασε την συνομιλία'
|
||||
|
||||
@@ -105,6 +105,8 @@ en:
|
||||
conversations_count: No. of conversations
|
||||
avg_first_response_time: Avg first response time
|
||||
avg_resolution_time: Avg resolution time
|
||||
avg_reply_time: Avg reply time
|
||||
resolution_count: Resolution Count
|
||||
team_csv:
|
||||
team_name: Team name
|
||||
conversations_count: Conversations count
|
||||
@@ -188,6 +190,10 @@ en:
|
||||
sla:
|
||||
added: '%{user_name} added SLA policy %{sla_name}'
|
||||
removed: '%{user_name} removed SLA policy %{sla_name}'
|
||||
linear:
|
||||
issue_created: 'Linear issue %{issue_id} was created by %{user_name}'
|
||||
issue_linked: 'Linear issue %{issue_id} was linked by %{user_name}'
|
||||
issue_unlinked: 'Linear issue %{issue_id} was unlinked by %{user_name}'
|
||||
csat:
|
||||
not_sent_due_to_messaging_window: 'CSAT survey not sent due to outgoing message restrictions'
|
||||
muted: '%{user_name} has muted the conversation'
|
||||
@@ -257,10 +263,6 @@ en:
|
||||
name: 'LeadSquared'
|
||||
short_description: 'Sync your contacts and conversations with LeadSquared CRM.'
|
||||
description: 'Sync your contacts and conversations with LeadSquared CRM. This integration automatically creates leads in LeadSquared when new contacts are added, and logs conversation activity to provide your sales team with complete context.'
|
||||
github:
|
||||
name: 'GitHub'
|
||||
short_description: 'Create and manage GitHub issues directly from conversations.'
|
||||
description: 'Connect your GitHub repositories to create issues directly from customer conversations. This integration helps you track bugs, feature requests, and development tasks seamlessly.'
|
||||
captain:
|
||||
copilot_error: 'Please connect an assistant to this inbox to use Copilot'
|
||||
copilot_limit: 'You are out of Copilot credits. You can buy more credits from the billing section.'
|
||||
|
||||
@@ -91,6 +91,8 @@ es:
|
||||
conversations_count: Núm. de conversaciones
|
||||
avg_first_response_time: Promedio de tiempo de la primera respuesta
|
||||
avg_resolution_time: Tiempo promedio de resolución
|
||||
avg_reply_time: Avg reply time
|
||||
resolution_count: Número de resoluciones
|
||||
team_csv:
|
||||
team_name: Nombre del equipo
|
||||
conversations_count: Cantidad de conversaciones
|
||||
@@ -138,6 +140,8 @@ es:
|
||||
instagram_story_content: '%{story_sender} te mencionó en la historia: '
|
||||
instagram_deleted_story_content: Esta historia ya no está disponible.
|
||||
deleted: Este mensaje se ha eliminado
|
||||
whatsapp:
|
||||
list_button_label: 'Choose an item'
|
||||
delivery_status:
|
||||
error_code: 'Código de error: %{error_code}'
|
||||
activity:
|
||||
@@ -172,6 +176,10 @@ es:
|
||||
sla:
|
||||
added: '%{user_name} agregó la política de SLA %{sla_name}'
|
||||
removed: '%{user_name} eliminó la política de SLA %{sla_name}'
|
||||
linear:
|
||||
issue_created: 'Linear issue %{issue_id} was created by %{user_name}'
|
||||
issue_linked: 'Linear issue %{issue_id} was linked by %{user_name}'
|
||||
issue_unlinked: 'Linear issue %{issue_id} was unlinked by %{user_name}'
|
||||
csat:
|
||||
not_sent_due_to_messaging_window: 'CSAT survey not sent due to outgoing message restrictions'
|
||||
muted: '%{user_name} ha silenciado la conversación'
|
||||
|
||||
@@ -91,6 +91,8 @@ fa:
|
||||
conversations_count: تعداد گفتگوها
|
||||
avg_first_response_time: میانگین زمان تا اولین پاسخ
|
||||
avg_resolution_time: میانگین زمان حل مشکل
|
||||
avg_reply_time: Avg reply time
|
||||
resolution_count: تعداد مسائل حل شده
|
||||
team_csv:
|
||||
team_name: نام تیم
|
||||
conversations_count: Conversations count
|
||||
@@ -138,6 +140,8 @@ fa:
|
||||
instagram_story_content: '%{story_sender} در داستان به شما اشاره کرده: '
|
||||
instagram_deleted_story_content: این داستان دیگر در دسترس نیست.
|
||||
deleted: این پیام حذف شد
|
||||
whatsapp:
|
||||
list_button_label: 'Choose an item'
|
||||
delivery_status:
|
||||
error_code: 'کد خطا " %{error_code}'
|
||||
activity:
|
||||
@@ -172,6 +176,10 @@ fa:
|
||||
sla:
|
||||
added: '%{user_name} سیاست SLA %{sla_name} را اضافه کرد'
|
||||
removed: '%{user_name} سیاست SLA %{sla_name} را حذف کرد'
|
||||
linear:
|
||||
issue_created: 'Linear issue %{issue_id} was created by %{user_name}'
|
||||
issue_linked: 'Linear issue %{issue_id} was linked by %{user_name}'
|
||||
issue_unlinked: 'Linear issue %{issue_id} was unlinked by %{user_name}'
|
||||
csat:
|
||||
not_sent_due_to_messaging_window: 'CSAT survey not sent due to outgoing message restrictions'
|
||||
muted: '%{user_name} مکالمه را بی صدا کرد'
|
||||
|
||||
@@ -91,6 +91,8 @@ fi:
|
||||
conversations_count: No. of conversations
|
||||
avg_first_response_time: Avg first response time
|
||||
avg_resolution_time: Avg resolution time
|
||||
avg_reply_time: Avg reply time
|
||||
resolution_count: Selvitysmäärä
|
||||
team_csv:
|
||||
team_name: Team name
|
||||
conversations_count: Conversations count
|
||||
@@ -138,6 +140,8 @@ fi:
|
||||
instagram_story_content: '%{story_sender} mentioned you in the story: '
|
||||
instagram_deleted_story_content: This story is no longer available.
|
||||
deleted: This message was deleted
|
||||
whatsapp:
|
||||
list_button_label: 'Choose an item'
|
||||
delivery_status:
|
||||
error_code: 'Error code: %{error_code}'
|
||||
activity:
|
||||
@@ -172,6 +176,10 @@ fi:
|
||||
sla:
|
||||
added: '%{user_name} added SLA policy %{sla_name}'
|
||||
removed: '%{user_name} removed SLA policy %{sla_name}'
|
||||
linear:
|
||||
issue_created: 'Linear issue %{issue_id} was created by %{user_name}'
|
||||
issue_linked: 'Linear issue %{issue_id} was linked by %{user_name}'
|
||||
issue_unlinked: 'Linear issue %{issue_id} was unlinked by %{user_name}'
|
||||
csat:
|
||||
not_sent_due_to_messaging_window: 'CSAT survey not sent due to outgoing message restrictions'
|
||||
muted: '%{user_name} mykisti keskustelun'
|
||||
|
||||
@@ -91,6 +91,8 @@ fr:
|
||||
conversations_count: Nbre de conversations
|
||||
avg_first_response_time: Temps moyen pour une première réponse
|
||||
avg_resolution_time: Temps nécessaire pour résoudre une demande (en moyenne)
|
||||
avg_reply_time: Avg reply time
|
||||
resolution_count: Nombre de résolutions
|
||||
team_csv:
|
||||
team_name: Nom de l'équipe
|
||||
conversations_count: Nombre de conversations
|
||||
@@ -138,6 +140,8 @@ fr:
|
||||
instagram_story_content: '%{story_sender} vous a mentionné dans la story: '
|
||||
instagram_deleted_story_content: Cette Story n'est plus disponible.
|
||||
deleted: Ce message a été supprimé
|
||||
whatsapp:
|
||||
list_button_label: 'Choose an item'
|
||||
delivery_status:
|
||||
error_code: 'Code d''erreur : %{error_code}'
|
||||
activity:
|
||||
@@ -172,6 +176,10 @@ fr:
|
||||
sla:
|
||||
added: '%{user_name} added SLA policy %{sla_name}'
|
||||
removed: '%{user_name} removed SLA policy %{sla_name}'
|
||||
linear:
|
||||
issue_created: 'Linear issue %{issue_id} was created by %{user_name}'
|
||||
issue_linked: 'Linear issue %{issue_id} was linked by %{user_name}'
|
||||
issue_unlinked: 'Linear issue %{issue_id} was unlinked by %{user_name}'
|
||||
csat:
|
||||
not_sent_due_to_messaging_window: 'CSAT survey not sent due to outgoing message restrictions'
|
||||
muted: '%{user_name} a mis la conversation en sourdine'
|
||||
|
||||
@@ -91,6 +91,8 @@ he:
|
||||
conversations_count: No. of conversations
|
||||
avg_first_response_time: Avg first response time
|
||||
avg_resolution_time: Avg resolution time
|
||||
avg_reply_time: Avg reply time
|
||||
resolution_count: ספירת רזולוציות
|
||||
team_csv:
|
||||
team_name: שם קבוצה
|
||||
conversations_count: Conversations count
|
||||
@@ -138,6 +140,8 @@ he:
|
||||
instagram_story_content: '%{story_sender} mentioned you in the story: '
|
||||
instagram_deleted_story_content: This story is no longer available.
|
||||
deleted: This message was deleted
|
||||
whatsapp:
|
||||
list_button_label: 'Choose an item'
|
||||
delivery_status:
|
||||
error_code: 'Error code: %{error_code}'
|
||||
activity:
|
||||
@@ -172,6 +176,10 @@ he:
|
||||
sla:
|
||||
added: '%{user_name} added SLA policy %{sla_name}'
|
||||
removed: '%{user_name} removed SLA policy %{sla_name}'
|
||||
linear:
|
||||
issue_created: 'Linear issue %{issue_id} was created by %{user_name}'
|
||||
issue_linked: 'Linear issue %{issue_id} was linked by %{user_name}'
|
||||
issue_unlinked: 'Linear issue %{issue_id} was unlinked by %{user_name}'
|
||||
csat:
|
||||
not_sent_due_to_messaging_window: 'CSAT survey not sent due to outgoing message restrictions'
|
||||
muted: '%{user_name} has muted the conversation'
|
||||
|
||||
@@ -91,6 +91,8 @@ hi:
|
||||
conversations_count: No. of conversations
|
||||
avg_first_response_time: Avg first response time
|
||||
avg_resolution_time: Avg resolution time
|
||||
avg_reply_time: Avg reply time
|
||||
resolution_count: Resolution Count
|
||||
team_csv:
|
||||
team_name: Team name
|
||||
conversations_count: Conversations count
|
||||
@@ -138,6 +140,8 @@ hi:
|
||||
instagram_story_content: '%{story_sender} mentioned you in the story: '
|
||||
instagram_deleted_story_content: This story is no longer available.
|
||||
deleted: This message was deleted
|
||||
whatsapp:
|
||||
list_button_label: 'Choose an item'
|
||||
delivery_status:
|
||||
error_code: 'Error code: %{error_code}'
|
||||
activity:
|
||||
@@ -172,6 +176,10 @@ hi:
|
||||
sla:
|
||||
added: '%{user_name} added SLA policy %{sla_name}'
|
||||
removed: '%{user_name} removed SLA policy %{sla_name}'
|
||||
linear:
|
||||
issue_created: 'Linear issue %{issue_id} was created by %{user_name}'
|
||||
issue_linked: 'Linear issue %{issue_id} was linked by %{user_name}'
|
||||
issue_unlinked: 'Linear issue %{issue_id} was unlinked by %{user_name}'
|
||||
csat:
|
||||
not_sent_due_to_messaging_window: 'CSAT survey not sent due to outgoing message restrictions'
|
||||
muted: '%{user_name} has muted the conversation'
|
||||
|
||||
@@ -91,6 +91,8 @@ hr:
|
||||
conversations_count: No. of conversations
|
||||
avg_first_response_time: Avg first response time
|
||||
avg_resolution_time: Avg resolution time
|
||||
avg_reply_time: Avg reply time
|
||||
resolution_count: Resolution Count
|
||||
team_csv:
|
||||
team_name: Team name
|
||||
conversations_count: Conversations count
|
||||
@@ -138,6 +140,8 @@ hr:
|
||||
instagram_story_content: '%{story_sender} mentioned you in the story: '
|
||||
instagram_deleted_story_content: This story is no longer available.
|
||||
deleted: This message was deleted
|
||||
whatsapp:
|
||||
list_button_label: 'Choose an item'
|
||||
delivery_status:
|
||||
error_code: 'Error code: %{error_code}'
|
||||
activity:
|
||||
@@ -172,6 +176,10 @@ hr:
|
||||
sla:
|
||||
added: '%{user_name} added SLA policy %{sla_name}'
|
||||
removed: '%{user_name} removed SLA policy %{sla_name}'
|
||||
linear:
|
||||
issue_created: 'Linear issue %{issue_id} was created by %{user_name}'
|
||||
issue_linked: 'Linear issue %{issue_id} was linked by %{user_name}'
|
||||
issue_unlinked: 'Linear issue %{issue_id} was unlinked by %{user_name}'
|
||||
csat:
|
||||
not_sent_due_to_messaging_window: 'CSAT survey not sent due to outgoing message restrictions'
|
||||
muted: '%{user_name} has muted the conversation'
|
||||
|
||||
@@ -91,6 +91,8 @@ hu:
|
||||
conversations_count: Beszélgetések száma
|
||||
avg_first_response_time: Avg first response time
|
||||
avg_resolution_time: Avg resolution time
|
||||
avg_reply_time: Avg reply time
|
||||
resolution_count: Megoldások száma
|
||||
team_csv:
|
||||
team_name: Csapatnév
|
||||
conversations_count: Beszélgetésszám
|
||||
@@ -138,6 +140,8 @@ hu:
|
||||
instagram_story_content: '%{story_sender} megemlített egy storyban: '
|
||||
instagram_deleted_story_content: Ez a story már nem érhető el.
|
||||
deleted: Az üzenet törölve lett
|
||||
whatsapp:
|
||||
list_button_label: 'Choose an item'
|
||||
delivery_status:
|
||||
error_code: 'Hibakód: %{error_code}'
|
||||
activity:
|
||||
@@ -172,6 +176,10 @@ hu:
|
||||
sla:
|
||||
added: '%{user_name} added SLA policy %{sla_name}'
|
||||
removed: '%{user_name} removed SLA policy %{sla_name}'
|
||||
linear:
|
||||
issue_created: 'Linear issue %{issue_id} was created by %{user_name}'
|
||||
issue_linked: 'Linear issue %{issue_id} was linked by %{user_name}'
|
||||
issue_unlinked: 'Linear issue %{issue_id} was unlinked by %{user_name}'
|
||||
csat:
|
||||
not_sent_due_to_messaging_window: 'CSAT survey not sent due to outgoing message restrictions'
|
||||
muted: '%{user_name} elnémította a beszélgetést'
|
||||
|
||||
@@ -91,6 +91,8 @@ hy:
|
||||
conversations_count: No. of conversations
|
||||
avg_first_response_time: Avg first response time
|
||||
avg_resolution_time: Avg resolution time
|
||||
avg_reply_time: Avg reply time
|
||||
resolution_count: Resolution Count
|
||||
team_csv:
|
||||
team_name: Team name
|
||||
conversations_count: Conversations count
|
||||
@@ -138,6 +140,8 @@ hy:
|
||||
instagram_story_content: '%{story_sender} mentioned you in the story: '
|
||||
instagram_deleted_story_content: This story is no longer available.
|
||||
deleted: This message was deleted
|
||||
whatsapp:
|
||||
list_button_label: 'Choose an item'
|
||||
delivery_status:
|
||||
error_code: 'Error code: %{error_code}'
|
||||
activity:
|
||||
@@ -172,6 +176,10 @@ hy:
|
||||
sla:
|
||||
added: '%{user_name} added SLA policy %{sla_name}'
|
||||
removed: '%{user_name} removed SLA policy %{sla_name}'
|
||||
linear:
|
||||
issue_created: 'Linear issue %{issue_id} was created by %{user_name}'
|
||||
issue_linked: 'Linear issue %{issue_id} was linked by %{user_name}'
|
||||
issue_unlinked: 'Linear issue %{issue_id} was unlinked by %{user_name}'
|
||||
csat:
|
||||
not_sent_due_to_messaging_window: 'CSAT survey not sent due to outgoing message restrictions'
|
||||
muted: '%{user_name} has muted the conversation'
|
||||
|
||||
@@ -91,6 +91,8 @@ id:
|
||||
conversations_count: Jumlah percakapan
|
||||
avg_first_response_time: Avg first response time
|
||||
avg_resolution_time: Avg resolution time
|
||||
avg_reply_time: Avg reply time
|
||||
resolution_count: Jumlah Terselesaikan
|
||||
team_csv:
|
||||
team_name: Nama Tim
|
||||
conversations_count: Jumlah percakapan
|
||||
@@ -138,6 +140,8 @@ id:
|
||||
instagram_story_content: '%{story_sender} menyebutmu dalam story: '
|
||||
instagram_deleted_story_content: Story ini tidak lagi tersedia.
|
||||
deleted: Pesan ini telah terhapus
|
||||
whatsapp:
|
||||
list_button_label: 'Choose an item'
|
||||
delivery_status:
|
||||
error_code: 'Error code: %{error_code}'
|
||||
activity:
|
||||
@@ -172,6 +176,10 @@ id:
|
||||
sla:
|
||||
added: '%{user_name} added SLA policy %{sla_name}'
|
||||
removed: '%{user_name} removed SLA policy %{sla_name}'
|
||||
linear:
|
||||
issue_created: 'Linear issue %{issue_id} was created by %{user_name}'
|
||||
issue_linked: 'Linear issue %{issue_id} was linked by %{user_name}'
|
||||
issue_unlinked: 'Linear issue %{issue_id} was unlinked by %{user_name}'
|
||||
csat:
|
||||
not_sent_due_to_messaging_window: 'CSAT survey not sent due to outgoing message restrictions'
|
||||
muted: '%{user_name} me-mute percakapan'
|
||||
|
||||
@@ -91,6 +91,8 @@ is:
|
||||
conversations_count: No. of conversations
|
||||
avg_first_response_time: Avg first response time
|
||||
avg_resolution_time: Avg resolution time
|
||||
avg_reply_time: Avg reply time
|
||||
resolution_count: Resolution Count
|
||||
team_csv:
|
||||
team_name: Team name
|
||||
conversations_count: Conversations count
|
||||
@@ -138,6 +140,8 @@ is:
|
||||
instagram_story_content: '%{story_sender} minntist á þig í sögunni: '
|
||||
instagram_deleted_story_content: This story is no longer available.
|
||||
deleted: This message was deleted
|
||||
whatsapp:
|
||||
list_button_label: 'Choose an item'
|
||||
delivery_status:
|
||||
error_code: 'Error code: %{error_code}'
|
||||
activity:
|
||||
@@ -172,6 +176,10 @@ is:
|
||||
sla:
|
||||
added: '%{user_name} added SLA policy %{sla_name}'
|
||||
removed: '%{user_name} removed SLA policy %{sla_name}'
|
||||
linear:
|
||||
issue_created: 'Linear issue %{issue_id} was created by %{user_name}'
|
||||
issue_linked: 'Linear issue %{issue_id} was linked by %{user_name}'
|
||||
issue_unlinked: 'Linear issue %{issue_id} was unlinked by %{user_name}'
|
||||
csat:
|
||||
not_sent_due_to_messaging_window: 'CSAT survey not sent due to outgoing message restrictions'
|
||||
muted: '%{user_name} has muted the conversation'
|
||||
|
||||
@@ -91,6 +91,8 @@ it:
|
||||
conversations_count: Numero di conversazioni
|
||||
avg_first_response_time: Avg first response time
|
||||
avg_resolution_time: Avg resolution time
|
||||
avg_reply_time: Avg reply time
|
||||
resolution_count: Conteggio risoluzioni
|
||||
team_csv:
|
||||
team_name: Nome del team
|
||||
conversations_count: Numero di conversazioni
|
||||
@@ -138,6 +140,8 @@ it:
|
||||
instagram_story_content: '%{story_sender} ti ha menzionato nella storia: '
|
||||
instagram_deleted_story_content: Questa storia non è più disponibile.
|
||||
deleted: Questo messaggio è stato eliminato
|
||||
whatsapp:
|
||||
list_button_label: 'Choose an item'
|
||||
delivery_status:
|
||||
error_code: 'Error code: %{error_code}'
|
||||
activity:
|
||||
@@ -172,6 +176,10 @@ it:
|
||||
sla:
|
||||
added: '%{user_name} added SLA policy %{sla_name}'
|
||||
removed: '%{user_name} removed SLA policy %{sla_name}'
|
||||
linear:
|
||||
issue_created: 'Linear issue %{issue_id} was created by %{user_name}'
|
||||
issue_linked: 'Linear issue %{issue_id} was linked by %{user_name}'
|
||||
issue_unlinked: 'Linear issue %{issue_id} was unlinked by %{user_name}'
|
||||
csat:
|
||||
not_sent_due_to_messaging_window: 'CSAT survey not sent due to outgoing message restrictions'
|
||||
muted: '%{user_name} ha silenziato la conversazione'
|
||||
|
||||
@@ -91,6 +91,8 @@ ja:
|
||||
conversations_count: 会話数
|
||||
avg_first_response_time: 初回応答の平均時間
|
||||
avg_resolution_time: 解決までの平均時間
|
||||
avg_reply_time: Avg reply time
|
||||
resolution_count: 処理件数
|
||||
team_csv:
|
||||
team_name: チーム名
|
||||
conversations_count: 会話回数
|
||||
@@ -138,6 +140,8 @@ ja:
|
||||
instagram_story_content: '%{story_sender} さんがストーリーであなたについて言及しました: '
|
||||
instagram_deleted_story_content: このストーリーはもう利用できません。
|
||||
deleted: このメッセージは削除されました
|
||||
whatsapp:
|
||||
list_button_label: 'Choose an item'
|
||||
delivery_status:
|
||||
error_code: 'エラーコード: %{error_code}'
|
||||
activity:
|
||||
@@ -172,6 +176,10 @@ ja:
|
||||
sla:
|
||||
added: '%{user_name} がSLAポリシー "%{sla_name}" を追加しました'
|
||||
removed: '%{user_name} がSLAポリシー "%{sla_name}" を削除しました'
|
||||
linear:
|
||||
issue_created: 'Linear issue %{issue_id} was created by %{user_name}'
|
||||
issue_linked: 'Linear issue %{issue_id} was linked by %{user_name}'
|
||||
issue_unlinked: 'Linear issue %{issue_id} was unlinked by %{user_name}'
|
||||
csat:
|
||||
not_sent_due_to_messaging_window: 'CSAT survey not sent due to outgoing message restrictions'
|
||||
muted: '%{user_name} が会話をミュートしました'
|
||||
|
||||
@@ -91,6 +91,8 @@ ka:
|
||||
conversations_count: No. of conversations
|
||||
avg_first_response_time: Avg first response time
|
||||
avg_resolution_time: Avg resolution time
|
||||
avg_reply_time: Avg reply time
|
||||
resolution_count: Resolution Count
|
||||
team_csv:
|
||||
team_name: Team name
|
||||
conversations_count: Conversations count
|
||||
@@ -138,6 +140,8 @@ ka:
|
||||
instagram_story_content: '%{story_sender} mentioned you in the story: '
|
||||
instagram_deleted_story_content: This story is no longer available.
|
||||
deleted: This message was deleted
|
||||
whatsapp:
|
||||
list_button_label: 'Choose an item'
|
||||
delivery_status:
|
||||
error_code: 'Error code: %{error_code}'
|
||||
activity:
|
||||
@@ -172,6 +176,10 @@ ka:
|
||||
sla:
|
||||
added: '%{user_name} added SLA policy %{sla_name}'
|
||||
removed: '%{user_name} removed SLA policy %{sla_name}'
|
||||
linear:
|
||||
issue_created: 'Linear issue %{issue_id} was created by %{user_name}'
|
||||
issue_linked: 'Linear issue %{issue_id} was linked by %{user_name}'
|
||||
issue_unlinked: 'Linear issue %{issue_id} was unlinked by %{user_name}'
|
||||
csat:
|
||||
not_sent_due_to_messaging_window: 'CSAT survey not sent due to outgoing message restrictions'
|
||||
muted: '%{user_name} has muted the conversation'
|
||||
|
||||
@@ -91,6 +91,8 @@ ko:
|
||||
conversations_count: No. of conversations
|
||||
avg_first_response_time: Avg first response time
|
||||
avg_resolution_time: Avg resolution time
|
||||
avg_reply_time: Avg reply time
|
||||
resolution_count: 해결 수
|
||||
team_csv:
|
||||
team_name: Team name
|
||||
conversations_count: Conversations count
|
||||
@@ -138,6 +140,8 @@ ko:
|
||||
instagram_story_content: '%{story_sender} mentioned you in the story: '
|
||||
instagram_deleted_story_content: This story is no longer available.
|
||||
deleted: This message was deleted
|
||||
whatsapp:
|
||||
list_button_label: 'Choose an item'
|
||||
delivery_status:
|
||||
error_code: 'Error code: %{error_code}'
|
||||
activity:
|
||||
@@ -172,6 +176,10 @@ ko:
|
||||
sla:
|
||||
added: '%{user_name} added SLA policy %{sla_name}'
|
||||
removed: '%{user_name} removed SLA policy %{sla_name}'
|
||||
linear:
|
||||
issue_created: 'Linear issue %{issue_id} was created by %{user_name}'
|
||||
issue_linked: 'Linear issue %{issue_id} was linked by %{user_name}'
|
||||
issue_unlinked: 'Linear issue %{issue_id} was unlinked by %{user_name}'
|
||||
csat:
|
||||
not_sent_due_to_messaging_window: 'CSAT survey not sent due to outgoing message restrictions'
|
||||
muted: '%{user_name} has muted the conversation'
|
||||
|
||||
@@ -91,6 +91,8 @@ lt:
|
||||
conversations_count: Pokalbių kiekis
|
||||
avg_first_response_time: Avg first response time
|
||||
avg_resolution_time: Avg resolution time
|
||||
avg_reply_time: Avg reply time
|
||||
resolution_count: Sprendimų skaičius
|
||||
team_csv:
|
||||
team_name: Komandos pavadinimas
|
||||
conversations_count: Pokalbių skaičius
|
||||
@@ -138,6 +140,8 @@ lt:
|
||||
instagram_story_content: '%{story_sender} paminėjo jus pasakojime: '
|
||||
instagram_deleted_story_content: Šis pasakojimas nebepasiekiamas.
|
||||
deleted: Šis pranešimas buvo ištrintas
|
||||
whatsapp:
|
||||
list_button_label: 'Choose an item'
|
||||
delivery_status:
|
||||
error_code: 'Klaidos kodas: %{error_code}'
|
||||
activity:
|
||||
@@ -172,6 +176,10 @@ lt:
|
||||
sla:
|
||||
added: '%{user_name} added SLA policy %{sla_name}'
|
||||
removed: '%{user_name} removed SLA policy %{sla_name}'
|
||||
linear:
|
||||
issue_created: 'Linear issue %{issue_id} was created by %{user_name}'
|
||||
issue_linked: 'Linear issue %{issue_id} was linked by %{user_name}'
|
||||
issue_unlinked: 'Linear issue %{issue_id} was unlinked by %{user_name}'
|
||||
csat:
|
||||
not_sent_due_to_messaging_window: 'CSAT survey not sent due to outgoing message restrictions'
|
||||
muted: '%{user_name} nutildė pokalbį'
|
||||
|
||||
@@ -91,6 +91,8 @@ lv:
|
||||
conversations_count: Sarunu skaits
|
||||
avg_first_response_time: Vidējais pirmās reakcijas laiks
|
||||
avg_resolution_time: Vidējais atrisināšanas laiks
|
||||
avg_reply_time: Avg reply time
|
||||
resolution_count: Atrisināšanas Skaits
|
||||
team_csv:
|
||||
team_name: Komandas nosaukums
|
||||
conversations_count: Sarunu skaits
|
||||
@@ -138,6 +140,8 @@ lv:
|
||||
instagram_story_content: '%{story_sender} pieminēja jūs stāstā: '
|
||||
instagram_deleted_story_content: Šis stāsts vairs nav pieejams.
|
||||
deleted: Šis ziņojums ir izdzēsts
|
||||
whatsapp:
|
||||
list_button_label: 'Choose an item'
|
||||
delivery_status:
|
||||
error_code: 'Kļūdas kods: %{error_code}'
|
||||
activity:
|
||||
@@ -172,6 +176,10 @@ lv:
|
||||
sla:
|
||||
added: '%{user_name} pievienoja SLA politiku %{sla_name}'
|
||||
removed: '%{user_name} noņēma SLA politiku %{sla_name}'
|
||||
linear:
|
||||
issue_created: 'Linear issue %{issue_id} was created by %{user_name}'
|
||||
issue_linked: 'Linear issue %{issue_id} was linked by %{user_name}'
|
||||
issue_unlinked: 'Linear issue %{issue_id} was unlinked by %{user_name}'
|
||||
csat:
|
||||
not_sent_due_to_messaging_window: 'CSAT survey not sent due to outgoing message restrictions'
|
||||
muted: '%{user_name} izslēdza sarunu'
|
||||
|
||||
@@ -91,6 +91,8 @@ ml:
|
||||
conversations_count: No. of conversations
|
||||
avg_first_response_time: Avg first response time
|
||||
avg_resolution_time: Avg resolution time
|
||||
avg_reply_time: Avg reply time
|
||||
resolution_count: മിഴിവ് എണ്ണം
|
||||
team_csv:
|
||||
team_name: ടീമിന്റെ പേര്
|
||||
conversations_count: സംഭാഷണങ്ങളുടെ എണ്ണം
|
||||
@@ -138,6 +140,8 @@ ml:
|
||||
instagram_story_content: '%{story_sender} mentioned you in the story: '
|
||||
instagram_deleted_story_content: This story is no longer available.
|
||||
deleted: ഈ സന്ദേശം ഇല്ലാതാക്കി
|
||||
whatsapp:
|
||||
list_button_label: 'Choose an item'
|
||||
delivery_status:
|
||||
error_code: 'Error code: %{error_code}'
|
||||
activity:
|
||||
@@ -172,6 +176,10 @@ ml:
|
||||
sla:
|
||||
added: '%{user_name} added SLA policy %{sla_name}'
|
||||
removed: '%{user_name} removed SLA policy %{sla_name}'
|
||||
linear:
|
||||
issue_created: 'Linear issue %{issue_id} was created by %{user_name}'
|
||||
issue_linked: 'Linear issue %{issue_id} was linked by %{user_name}'
|
||||
issue_unlinked: 'Linear issue %{issue_id} was unlinked by %{user_name}'
|
||||
csat:
|
||||
not_sent_due_to_messaging_window: 'CSAT survey not sent due to outgoing message restrictions'
|
||||
muted: '%{user_name} has muted the conversation'
|
||||
|
||||
@@ -91,6 +91,8 @@ ms:
|
||||
conversations_count: No. of conversations
|
||||
avg_first_response_time: Avg first response time
|
||||
avg_resolution_time: Avg resolution time
|
||||
avg_reply_time: Avg reply time
|
||||
resolution_count: Resolution Count
|
||||
team_csv:
|
||||
team_name: Team name
|
||||
conversations_count: Conversations count
|
||||
@@ -138,6 +140,8 @@ ms:
|
||||
instagram_story_content: '%{story_sender} mentioned you in the story: '
|
||||
instagram_deleted_story_content: This story is no longer available.
|
||||
deleted: This message was deleted
|
||||
whatsapp:
|
||||
list_button_label: 'Choose an item'
|
||||
delivery_status:
|
||||
error_code: 'Error code: %{error_code}'
|
||||
activity:
|
||||
@@ -172,6 +176,10 @@ ms:
|
||||
sla:
|
||||
added: '%{user_name} added SLA policy %{sla_name}'
|
||||
removed: '%{user_name} removed SLA policy %{sla_name}'
|
||||
linear:
|
||||
issue_created: 'Linear issue %{issue_id} was created by %{user_name}'
|
||||
issue_linked: 'Linear issue %{issue_id} was linked by %{user_name}'
|
||||
issue_unlinked: 'Linear issue %{issue_id} was unlinked by %{user_name}'
|
||||
csat:
|
||||
not_sent_due_to_messaging_window: 'CSAT survey not sent due to outgoing message restrictions'
|
||||
muted: '%{user_name} has muted the conversation'
|
||||
|
||||
@@ -91,6 +91,8 @@ ne:
|
||||
conversations_count: No. of conversations
|
||||
avg_first_response_time: Avg first response time
|
||||
avg_resolution_time: Avg resolution time
|
||||
avg_reply_time: Avg reply time
|
||||
resolution_count: Resolution Count
|
||||
team_csv:
|
||||
team_name: Team name
|
||||
conversations_count: Conversations count
|
||||
@@ -138,6 +140,8 @@ ne:
|
||||
instagram_story_content: '%{story_sender} mentioned you in the story: '
|
||||
instagram_deleted_story_content: This story is no longer available.
|
||||
deleted: This message was deleted
|
||||
whatsapp:
|
||||
list_button_label: 'Choose an item'
|
||||
delivery_status:
|
||||
error_code: 'Error code: %{error_code}'
|
||||
activity:
|
||||
@@ -172,6 +176,10 @@ ne:
|
||||
sla:
|
||||
added: '%{user_name} added SLA policy %{sla_name}'
|
||||
removed: '%{user_name} removed SLA policy %{sla_name}'
|
||||
linear:
|
||||
issue_created: 'Linear issue %{issue_id} was created by %{user_name}'
|
||||
issue_linked: 'Linear issue %{issue_id} was linked by %{user_name}'
|
||||
issue_unlinked: 'Linear issue %{issue_id} was unlinked by %{user_name}'
|
||||
csat:
|
||||
not_sent_due_to_messaging_window: 'CSAT survey not sent due to outgoing message restrictions'
|
||||
muted: '%{user_name} has muted the conversation'
|
||||
|
||||
@@ -91,6 +91,8 @@ nl:
|
||||
conversations_count: Aantal conversaties
|
||||
avg_first_response_time: Avg first response time
|
||||
avg_resolution_time: Avg resolution time
|
||||
avg_reply_time: Avg reply time
|
||||
resolution_count: Aantal Resoluties
|
||||
team_csv:
|
||||
team_name: Team Naam
|
||||
conversations_count: Aantal gesprekken
|
||||
@@ -138,6 +140,8 @@ nl:
|
||||
instagram_story_content: '%{story_sender} heeft je genoemd in het verhaal: '
|
||||
instagram_deleted_story_content: Dit verhaal is niet meer beschikbaar.
|
||||
deleted: Dit bericht werd verwijderd
|
||||
whatsapp:
|
||||
list_button_label: 'Choose an item'
|
||||
delivery_status:
|
||||
error_code: 'Error code: %{error_code}'
|
||||
activity:
|
||||
@@ -172,6 +176,10 @@ nl:
|
||||
sla:
|
||||
added: '%{user_name} added SLA policy %{sla_name}'
|
||||
removed: '%{user_name} removed SLA policy %{sla_name}'
|
||||
linear:
|
||||
issue_created: 'Linear issue %{issue_id} was created by %{user_name}'
|
||||
issue_linked: 'Linear issue %{issue_id} was linked by %{user_name}'
|
||||
issue_unlinked: 'Linear issue %{issue_id} was unlinked by %{user_name}'
|
||||
csat:
|
||||
not_sent_due_to_messaging_window: 'CSAT survey not sent due to outgoing message restrictions'
|
||||
muted: '%{user_name} has muted the conversation'
|
||||
|
||||
@@ -91,6 +91,8 @@
|
||||
conversations_count: Antall samtaler
|
||||
avg_first_response_time: Første svartid
|
||||
avg_resolution_time: Gjennomsnittstid for løsning
|
||||
avg_reply_time: Avg reply time
|
||||
resolution_count: Antall løsninger
|
||||
team_csv:
|
||||
team_name: Gruppe navn
|
||||
conversations_count: Antall samtaler
|
||||
@@ -138,6 +140,8 @@
|
||||
instagram_story_content: '%{story_sender} nevnte deg i historien: '
|
||||
instagram_deleted_story_content: Denne historien er ikke lenger tilgjengelig.
|
||||
deleted: Denne meldingen er slettet
|
||||
whatsapp:
|
||||
list_button_label: 'Choose an item'
|
||||
delivery_status:
|
||||
error_code: 'Feilkode: %{error_code}'
|
||||
activity:
|
||||
@@ -172,6 +176,10 @@
|
||||
sla:
|
||||
added: '%{user_name} added SLA policy %{sla_name}'
|
||||
removed: '%{user_name} removed SLA policy %{sla_name}'
|
||||
linear:
|
||||
issue_created: 'Linear issue %{issue_id} was created by %{user_name}'
|
||||
issue_linked: 'Linear issue %{issue_id} was linked by %{user_name}'
|
||||
issue_unlinked: 'Linear issue %{issue_id} was unlinked by %{user_name}'
|
||||
csat:
|
||||
not_sent_due_to_messaging_window: 'CSAT survey not sent due to outgoing message restrictions'
|
||||
muted: '%{user_name} har dempet samtalen'
|
||||
|
||||
@@ -91,6 +91,8 @@ pl:
|
||||
conversations_count: Ilość rozmów
|
||||
avg_first_response_time: Avg first response time
|
||||
avg_resolution_time: Avg resolution time
|
||||
avg_reply_time: Avg reply time
|
||||
resolution_count: Liczba rozwiązań
|
||||
team_csv:
|
||||
team_name: Nazwa zespołu
|
||||
conversations_count: Liczba rozmów
|
||||
@@ -138,6 +140,8 @@ pl:
|
||||
instagram_story_content: '%{story_sender} wspomniał o Tobie w historii: '
|
||||
instagram_deleted_story_content: Ta historia już nie jest dostępna.
|
||||
deleted: Ta wiadomość została usunięta
|
||||
whatsapp:
|
||||
list_button_label: 'Choose an item'
|
||||
delivery_status:
|
||||
error_code: 'Error code: %{error_code}'
|
||||
activity:
|
||||
@@ -172,6 +176,10 @@ pl:
|
||||
sla:
|
||||
added: '%{user_name} added SLA policy %{sla_name}'
|
||||
removed: '%{user_name} removed SLA policy %{sla_name}'
|
||||
linear:
|
||||
issue_created: 'Linear issue %{issue_id} was created by %{user_name}'
|
||||
issue_linked: 'Linear issue %{issue_id} was linked by %{user_name}'
|
||||
issue_unlinked: 'Linear issue %{issue_id} was unlinked by %{user_name}'
|
||||
csat:
|
||||
not_sent_due_to_messaging_window: 'CSAT survey not sent due to outgoing message restrictions'
|
||||
muted: '%{user_name} wyciszył/a rozmowę'
|
||||
|
||||
@@ -91,6 +91,8 @@ pt:
|
||||
conversations_count: Num de conversas
|
||||
avg_first_response_time: Média de tempo da primeira resposta
|
||||
avg_resolution_time: Média de tempo de resolução
|
||||
avg_reply_time: Avg reply time
|
||||
resolution_count: Contagem de resolução
|
||||
team_csv:
|
||||
team_name: Nome da equipa
|
||||
conversations_count: Número de conversas
|
||||
@@ -138,6 +140,8 @@ pt:
|
||||
instagram_story_content: '%{story_sender} mencionou você na história: '
|
||||
instagram_deleted_story_content: Esta história já não está disponível.
|
||||
deleted: Esta mensagem foi apagada
|
||||
whatsapp:
|
||||
list_button_label: 'Choose an item'
|
||||
delivery_status:
|
||||
error_code: 'Código de erro: %{error_code}'
|
||||
activity:
|
||||
@@ -172,6 +176,10 @@ pt:
|
||||
sla:
|
||||
added: '%{user_name} adicionou uma política de SLA %{sla_name}'
|
||||
removed: '%{user_name} removeu a política de SLA de %{sla_name}'
|
||||
linear:
|
||||
issue_created: 'Linear issue %{issue_id} was created by %{user_name}'
|
||||
issue_linked: 'Linear issue %{issue_id} was linked by %{user_name}'
|
||||
issue_unlinked: 'Linear issue %{issue_id} was unlinked by %{user_name}'
|
||||
csat:
|
||||
not_sent_due_to_messaging_window: 'CSAT survey not sent due to outgoing message restrictions'
|
||||
muted: '%{user_name} bloqueou a conversa'
|
||||
|
||||
@@ -91,6 +91,8 @@ pt_BR:
|
||||
conversations_count: Nº de Conversas
|
||||
avg_first_response_time: Tempo médio de primeira resposta
|
||||
avg_resolution_time: Tempo médio de resolução
|
||||
avg_reply_time: Avg reply time
|
||||
resolution_count: Contagem de Resolução
|
||||
team_csv:
|
||||
team_name: Nome do Time
|
||||
conversations_count: Contagem de conversas
|
||||
@@ -139,7 +141,7 @@ pt_BR:
|
||||
instagram_deleted_story_content: Este Story não está mais disponível.
|
||||
deleted: Esta mensagem foi excluída
|
||||
whatsapp:
|
||||
list_button_label: 'Escolha um item'
|
||||
list_button_label: 'Choose an item'
|
||||
delivery_status:
|
||||
error_code: 'Código de erro: %{error_code}'
|
||||
activity:
|
||||
@@ -174,6 +176,10 @@ pt_BR:
|
||||
sla:
|
||||
added: '%{user_name} adicionou política de SLA %{sla_name}'
|
||||
removed: '%{user_name} removeu a política de SLA %{sla_name}'
|
||||
linear:
|
||||
issue_created: 'Linear issue %{issue_id} was created by %{user_name}'
|
||||
issue_linked: 'Linear issue %{issue_id} was linked by %{user_name}'
|
||||
issue_unlinked: 'Linear issue %{issue_id} was unlinked by %{user_name}'
|
||||
csat:
|
||||
not_sent_due_to_messaging_window: 'Pesquisa CSAT não foi enviada devido a restrições de envio de mensagens'
|
||||
muted: '%{user_name} silenciou a conversa'
|
||||
@@ -215,7 +221,7 @@ pt_BR:
|
||||
slack:
|
||||
name: 'Slack'
|
||||
short_description: 'Receba notificações e responda as conversas diretamente no Slack.'
|
||||
description: 'Integre Chatwoot com Slack para manter seu time em sincronia. Essa integração permite que você receba notificações de novas conversas e as responda diretamente na interface do Slack.'
|
||||
description: "Integre Chatwoot com Slack para manter seu time em sincronia. Essa integração permite que você receba notificações de novas conversas e as responda diretamente na interface do Slack."
|
||||
webhooks:
|
||||
name: 'Webhooks'
|
||||
description: 'Eventos webhook fornecem atualizações sobre atividades em tempo real na sua conta Chatwoot. Você pode se inscrever em seus eventos preferidos, e o Chatwoot enviará as chamadas HTTP com as atualizações.'
|
||||
@@ -226,7 +232,7 @@ pt_BR:
|
||||
google_translate:
|
||||
name: 'Tradutor do Google'
|
||||
short_description: 'Traduzir automaticamente mensagens de clientes para agentes.'
|
||||
description: 'Integre o Google Tradutor para ajudar os agentes a traduzir facilmente as mensagens dos clientes. Esta integração detecta automaticamente o idioma e o converte para o idioma preferido do agente ou do administrador.'
|
||||
description: "Integre o Google Tradutor para ajudar os agentes a traduzir facilmente as mensagens dos clientes. Esta integração detecta automaticamente o idioma e o converte para o idioma preferido do agente ou do administrador."
|
||||
openai:
|
||||
name: 'OpenAI'
|
||||
short_description: 'Sugestões, resumos e aprimoramento de mensagem e resposta com IA.'
|
||||
|
||||
@@ -91,6 +91,8 @@ ro:
|
||||
conversations_count: Conversații
|
||||
avg_first_response_time: Avg first response time
|
||||
avg_resolution_time: Avg resolution time
|
||||
avg_reply_time: Avg reply time
|
||||
resolution_count: Număr de rezoluții
|
||||
team_csv:
|
||||
team_name: Numele echipei
|
||||
conversations_count: Conversațiile contează
|
||||
@@ -138,6 +140,8 @@ ro:
|
||||
instagram_story_content: '%{story_sender} menționat în poveste: '
|
||||
instagram_deleted_story_content: Această poveste nu mai este disponibilă.
|
||||
deleted: Acest mesaj a fost șters
|
||||
whatsapp:
|
||||
list_button_label: 'Choose an item'
|
||||
delivery_status:
|
||||
error_code: 'Error code: %{error_code}'
|
||||
activity:
|
||||
@@ -172,6 +176,10 @@ ro:
|
||||
sla:
|
||||
added: '%{user_name} added SLA policy %{sla_name}'
|
||||
removed: '%{user_name} removed SLA policy %{sla_name}'
|
||||
linear:
|
||||
issue_created: 'Linear issue %{issue_id} was created by %{user_name}'
|
||||
issue_linked: 'Linear issue %{issue_id} was linked by %{user_name}'
|
||||
issue_unlinked: 'Linear issue %{issue_id} was unlinked by %{user_name}'
|
||||
csat:
|
||||
not_sent_due_to_messaging_window: 'CSAT survey not sent due to outgoing message restrictions'
|
||||
muted: '%{user_name} a dezactivat conversația'
|
||||
|
||||
@@ -91,6 +91,8 @@ ru:
|
||||
conversations_count: Количество диалогов
|
||||
avg_first_response_time: Среднее время первого ответа
|
||||
avg_resolution_time: Среднее время завершения
|
||||
avg_reply_time: Avg reply time
|
||||
resolution_count: Количество завершенных
|
||||
team_csv:
|
||||
team_name: Название команды
|
||||
conversations_count: Количество бесед
|
||||
@@ -138,6 +140,8 @@ ru:
|
||||
instagram_story_content: '%{story_sender} упомянул Вас в истории: '
|
||||
instagram_deleted_story_content: Эта история больше недоступна.
|
||||
deleted: Это сообщение было удалено
|
||||
whatsapp:
|
||||
list_button_label: 'Choose an item'
|
||||
delivery_status:
|
||||
error_code: 'Код ошибки: %{error_code}'
|
||||
activity:
|
||||
@@ -172,6 +176,10 @@ ru:
|
||||
sla:
|
||||
added: '%{user_name} добавил политику SLA %{sla_name}'
|
||||
removed: '%{user_name} удалил политику SLA %{sla_name}'
|
||||
linear:
|
||||
issue_created: 'Linear issue %{issue_id} was created by %{user_name}'
|
||||
issue_linked: 'Linear issue %{issue_id} was linked by %{user_name}'
|
||||
issue_unlinked: 'Linear issue %{issue_id} was unlinked by %{user_name}'
|
||||
csat:
|
||||
not_sent_due_to_messaging_window: 'CSAT survey not sent due to outgoing message restrictions'
|
||||
muted: '%{user_name} заглушил(а) этот разговор'
|
||||
|
||||
@@ -91,6 +91,8 @@ sh:
|
||||
conversations_count: No. of conversations
|
||||
avg_first_response_time: Avg first response time
|
||||
avg_resolution_time: Avg resolution time
|
||||
avg_reply_time: Avg reply time
|
||||
resolution_count: Resolution Count
|
||||
team_csv:
|
||||
team_name: Team name
|
||||
conversations_count: Conversations count
|
||||
@@ -138,6 +140,8 @@ sh:
|
||||
instagram_story_content: '%{story_sender} mentioned you in the story: '
|
||||
instagram_deleted_story_content: This story is no longer available.
|
||||
deleted: This message was deleted
|
||||
whatsapp:
|
||||
list_button_label: 'Choose an item'
|
||||
delivery_status:
|
||||
error_code: 'Error code: %{error_code}'
|
||||
activity:
|
||||
@@ -172,6 +176,10 @@ sh:
|
||||
sla:
|
||||
added: '%{user_name} added SLA policy %{sla_name}'
|
||||
removed: '%{user_name} removed SLA policy %{sla_name}'
|
||||
linear:
|
||||
issue_created: 'Linear issue %{issue_id} was created by %{user_name}'
|
||||
issue_linked: 'Linear issue %{issue_id} was linked by %{user_name}'
|
||||
issue_unlinked: 'Linear issue %{issue_id} was unlinked by %{user_name}'
|
||||
csat:
|
||||
not_sent_due_to_messaging_window: 'CSAT survey not sent due to outgoing message restrictions'
|
||||
muted: '%{user_name} has muted the conversation'
|
||||
|
||||
@@ -91,6 +91,8 @@ sk:
|
||||
conversations_count: No. of conversations
|
||||
avg_first_response_time: Avg first response time
|
||||
avg_resolution_time: Avg resolution time
|
||||
avg_reply_time: Avg reply time
|
||||
resolution_count: Počet vyriešených problémov
|
||||
team_csv:
|
||||
team_name: Názov tímu
|
||||
conversations_count: Conversations count
|
||||
@@ -138,6 +140,8 @@ sk:
|
||||
instagram_story_content: '%{story_sender} mentioned you in the story: '
|
||||
instagram_deleted_story_content: This story is no longer available.
|
||||
deleted: This message was deleted
|
||||
whatsapp:
|
||||
list_button_label: 'Choose an item'
|
||||
delivery_status:
|
||||
error_code: 'Error code: %{error_code}'
|
||||
activity:
|
||||
@@ -172,6 +176,10 @@ sk:
|
||||
sla:
|
||||
added: '%{user_name} added SLA policy %{sla_name}'
|
||||
removed: '%{user_name} removed SLA policy %{sla_name}'
|
||||
linear:
|
||||
issue_created: 'Linear issue %{issue_id} was created by %{user_name}'
|
||||
issue_linked: 'Linear issue %{issue_id} was linked by %{user_name}'
|
||||
issue_unlinked: 'Linear issue %{issue_id} was unlinked by %{user_name}'
|
||||
csat:
|
||||
not_sent_due_to_messaging_window: 'CSAT survey not sent due to outgoing message restrictions'
|
||||
muted: '%{user_name} stlmil konverzáciu'
|
||||
|
||||
@@ -91,6 +91,8 @@ sl:
|
||||
conversations_count: Število pogovorov
|
||||
avg_first_response_time: Povprečni prvi odzivni čas
|
||||
avg_resolution_time: Povprečni čas razrešitve
|
||||
avg_reply_time: Avg reply time
|
||||
resolution_count: Resolution Count
|
||||
team_csv:
|
||||
team_name: Ime ekipe
|
||||
conversations_count: Število pogovorov
|
||||
@@ -138,6 +140,8 @@ sl:
|
||||
instagram_story_content: '%{story_sender} vas je omenil v zgodbi: '
|
||||
instagram_deleted_story_content: Ta zgodba ni več na voljo.
|
||||
deleted: To sporočilo je bilo izbrisano
|
||||
whatsapp:
|
||||
list_button_label: 'Choose an item'
|
||||
delivery_status:
|
||||
error_code: 'Koda napake: %{error_code}'
|
||||
activity:
|
||||
@@ -172,6 +176,10 @@ sl:
|
||||
sla:
|
||||
added: '%{user_name} je dodal politiko SLA %{sla_name}'
|
||||
removed: '%{user_name} je odstranil politiko SLA %{sla_name}'
|
||||
linear:
|
||||
issue_created: 'Linear issue %{issue_id} was created by %{user_name}'
|
||||
issue_linked: 'Linear issue %{issue_id} was linked by %{user_name}'
|
||||
issue_unlinked: 'Linear issue %{issue_id} was unlinked by %{user_name}'
|
||||
csat:
|
||||
not_sent_due_to_messaging_window: 'CSAT survey not sent due to outgoing message restrictions'
|
||||
muted: '%{user_name} je utišal pogovor'
|
||||
|
||||
@@ -91,6 +91,8 @@ sq:
|
||||
conversations_count: No. of conversations
|
||||
avg_first_response_time: Avg first response time
|
||||
avg_resolution_time: Avg resolution time
|
||||
avg_reply_time: Avg reply time
|
||||
resolution_count: Resolution Count
|
||||
team_csv:
|
||||
team_name: Team name
|
||||
conversations_count: Conversations count
|
||||
@@ -138,6 +140,8 @@ sq:
|
||||
instagram_story_content: '%{story_sender} mentioned you in the story: '
|
||||
instagram_deleted_story_content: This story is no longer available.
|
||||
deleted: This message was deleted
|
||||
whatsapp:
|
||||
list_button_label: 'Choose an item'
|
||||
delivery_status:
|
||||
error_code: 'Error code: %{error_code}'
|
||||
activity:
|
||||
@@ -172,6 +176,10 @@ sq:
|
||||
sla:
|
||||
added: '%{user_name} added SLA policy %{sla_name}'
|
||||
removed: '%{user_name} removed SLA policy %{sla_name}'
|
||||
linear:
|
||||
issue_created: 'Linear issue %{issue_id} was created by %{user_name}'
|
||||
issue_linked: 'Linear issue %{issue_id} was linked by %{user_name}'
|
||||
issue_unlinked: 'Linear issue %{issue_id} was unlinked by %{user_name}'
|
||||
csat:
|
||||
not_sent_due_to_messaging_window: 'CSAT survey not sent due to outgoing message restrictions'
|
||||
muted: '%{user_name} has muted the conversation'
|
||||
|
||||
@@ -91,6 +91,8 @@ sr-Latn:
|
||||
conversations_count: Broj razgovora
|
||||
avg_first_response_time: Avg first response time
|
||||
avg_resolution_time: Avg resolution time
|
||||
avg_reply_time: Avg reply time
|
||||
resolution_count: Broj rešenih
|
||||
team_csv:
|
||||
team_name: Naziv tima
|
||||
conversations_count: Broj razgovora
|
||||
@@ -138,6 +140,8 @@ sr-Latn:
|
||||
instagram_story_content: '%{story_sender} vas je pomenuo u priči: '
|
||||
instagram_deleted_story_content: Ova priča više nije dostupna.
|
||||
deleted: Poruka je obrisana
|
||||
whatsapp:
|
||||
list_button_label: 'Choose an item'
|
||||
delivery_status:
|
||||
error_code: 'Error code: %{error_code}'
|
||||
activity:
|
||||
@@ -172,6 +176,10 @@ sr-Latn:
|
||||
sla:
|
||||
added: '%{user_name} added SLA policy %{sla_name}'
|
||||
removed: '%{user_name} removed SLA policy %{sla_name}'
|
||||
linear:
|
||||
issue_created: 'Linear issue %{issue_id} was created by %{user_name}'
|
||||
issue_linked: 'Linear issue %{issue_id} was linked by %{user_name}'
|
||||
issue_unlinked: 'Linear issue %{issue_id} was unlinked by %{user_name}'
|
||||
csat:
|
||||
not_sent_due_to_messaging_window: 'CSAT survey not sent due to outgoing message restrictions'
|
||||
muted: '%{user_name} je utišao razgovor'
|
||||
|
||||
@@ -91,6 +91,8 @@ sv:
|
||||
conversations_count: No. of conversations
|
||||
avg_first_response_time: Avg first response time
|
||||
avg_resolution_time: Avg resolution time
|
||||
avg_reply_time: Avg reply time
|
||||
resolution_count: Antal lösta
|
||||
team_csv:
|
||||
team_name: Team name
|
||||
conversations_count: Conversations count
|
||||
@@ -138,6 +140,8 @@ sv:
|
||||
instagram_story_content: '%{story_sender} mentioned you in the story: '
|
||||
instagram_deleted_story_content: This story is no longer available.
|
||||
deleted: Detta meddelande har tagits bort
|
||||
whatsapp:
|
||||
list_button_label: 'Choose an item'
|
||||
delivery_status:
|
||||
error_code: 'Felkod: %{error_code}'
|
||||
activity:
|
||||
@@ -172,6 +176,10 @@ sv:
|
||||
sla:
|
||||
added: '%{user_name} added SLA policy %{sla_name}'
|
||||
removed: '%{user_name} removed SLA policy %{sla_name}'
|
||||
linear:
|
||||
issue_created: 'Linear issue %{issue_id} was created by %{user_name}'
|
||||
issue_linked: 'Linear issue %{issue_id} was linked by %{user_name}'
|
||||
issue_unlinked: 'Linear issue %{issue_id} was unlinked by %{user_name}'
|
||||
csat:
|
||||
not_sent_due_to_messaging_window: 'CSAT survey not sent due to outgoing message restrictions'
|
||||
muted: '%{user_name} har tystat konversationen'
|
||||
|
||||
@@ -91,6 +91,8 @@ ta:
|
||||
conversations_count: No. of conversations
|
||||
avg_first_response_time: Avg first response time
|
||||
avg_resolution_time: Avg resolution time
|
||||
avg_reply_time: Avg reply time
|
||||
resolution_count: தீர்மான எண்ணிக்கை
|
||||
team_csv:
|
||||
team_name: Team name
|
||||
conversations_count: Conversations count
|
||||
@@ -138,6 +140,8 @@ ta:
|
||||
instagram_story_content: '%{story_sender} mentioned you in the story: '
|
||||
instagram_deleted_story_content: This story is no longer available.
|
||||
deleted: This message was deleted
|
||||
whatsapp:
|
||||
list_button_label: 'Choose an item'
|
||||
delivery_status:
|
||||
error_code: 'Error code: %{error_code}'
|
||||
activity:
|
||||
@@ -172,6 +176,10 @@ ta:
|
||||
sla:
|
||||
added: '%{user_name} added SLA policy %{sla_name}'
|
||||
removed: '%{user_name} removed SLA policy %{sla_name}'
|
||||
linear:
|
||||
issue_created: 'Linear issue %{issue_id} was created by %{user_name}'
|
||||
issue_linked: 'Linear issue %{issue_id} was linked by %{user_name}'
|
||||
issue_unlinked: 'Linear issue %{issue_id} was unlinked by %{user_name}'
|
||||
csat:
|
||||
not_sent_due_to_messaging_window: 'CSAT survey not sent due to outgoing message restrictions'
|
||||
muted: '%{user_name} has muted the conversation'
|
||||
|
||||
@@ -91,6 +91,8 @@ th:
|
||||
conversations_count: No. of conversations
|
||||
avg_first_response_time: Avg first response time
|
||||
avg_resolution_time: Avg resolution time
|
||||
avg_reply_time: Avg reply time
|
||||
resolution_count: จำนวนความละเอียด
|
||||
team_csv:
|
||||
team_name: ชื่อทีม
|
||||
conversations_count: Conversations count
|
||||
@@ -138,6 +140,8 @@ th:
|
||||
instagram_story_content: '%{story_sender} mentioned you in the story: '
|
||||
instagram_deleted_story_content: This story is no longer available.
|
||||
deleted: This message was deleted
|
||||
whatsapp:
|
||||
list_button_label: 'Choose an item'
|
||||
delivery_status:
|
||||
error_code: 'Error code: %{error_code}'
|
||||
activity:
|
||||
@@ -172,6 +176,10 @@ th:
|
||||
sla:
|
||||
added: '%{user_name} added SLA policy %{sla_name}'
|
||||
removed: '%{user_name} removed SLA policy %{sla_name}'
|
||||
linear:
|
||||
issue_created: 'Linear issue %{issue_id} was created by %{user_name}'
|
||||
issue_linked: 'Linear issue %{issue_id} was linked by %{user_name}'
|
||||
issue_unlinked: 'Linear issue %{issue_id} was unlinked by %{user_name}'
|
||||
csat:
|
||||
not_sent_due_to_messaging_window: 'CSAT survey not sent due to outgoing message restrictions'
|
||||
muted: '%{user_name} has muted the conversation'
|
||||
|
||||
@@ -91,6 +91,8 @@ tl:
|
||||
conversations_count: No. of conversations
|
||||
avg_first_response_time: Avg first response time
|
||||
avg_resolution_time: Avg resolution time
|
||||
avg_reply_time: Avg reply time
|
||||
resolution_count: Resolution Count
|
||||
team_csv:
|
||||
team_name: Team name
|
||||
conversations_count: Conversations count
|
||||
@@ -138,6 +140,8 @@ tl:
|
||||
instagram_story_content: '%{story_sender} mentioned you in the story: '
|
||||
instagram_deleted_story_content: This story is no longer available.
|
||||
deleted: This message was deleted
|
||||
whatsapp:
|
||||
list_button_label: 'Choose an item'
|
||||
delivery_status:
|
||||
error_code: 'Error code: %{error_code}'
|
||||
activity:
|
||||
@@ -172,6 +176,10 @@ tl:
|
||||
sla:
|
||||
added: '%{user_name} added SLA policy %{sla_name}'
|
||||
removed: '%{user_name} removed SLA policy %{sla_name}'
|
||||
linear:
|
||||
issue_created: 'Linear issue %{issue_id} was created by %{user_name}'
|
||||
issue_linked: 'Linear issue %{issue_id} was linked by %{user_name}'
|
||||
issue_unlinked: 'Linear issue %{issue_id} was unlinked by %{user_name}'
|
||||
csat:
|
||||
not_sent_due_to_messaging_window: 'CSAT survey not sent due to outgoing message restrictions'
|
||||
muted: '%{user_name} has muted the conversation'
|
||||
|
||||
@@ -91,6 +91,8 @@ tr:
|
||||
conversations_count: Konuşma sayısı
|
||||
avg_first_response_time: Avg first response time
|
||||
avg_resolution_time: Avg resolution time
|
||||
avg_reply_time: Avg reply time
|
||||
resolution_count: Çözünürlük Sayısı
|
||||
team_csv:
|
||||
team_name: Ekip adı
|
||||
conversations_count: Konuşma sayısı
|
||||
@@ -138,6 +140,8 @@ tr:
|
||||
instagram_story_content: '%{story_sender} hikayesinde senden bahsetti: '
|
||||
instagram_deleted_story_content: Bu hikaye artık mevcut değil.
|
||||
deleted: Bu mesaj silinmiş
|
||||
whatsapp:
|
||||
list_button_label: 'Choose an item'
|
||||
delivery_status:
|
||||
error_code: 'Hata kodu: %{error_code}'
|
||||
activity:
|
||||
@@ -172,6 +176,10 @@ tr:
|
||||
sla:
|
||||
added: '%{user_name} added SLA policy %{sla_name}'
|
||||
removed: '%{user_name} removed SLA policy %{sla_name}'
|
||||
linear:
|
||||
issue_created: 'Linear issue %{issue_id} was created by %{user_name}'
|
||||
issue_linked: 'Linear issue %{issue_id} was linked by %{user_name}'
|
||||
issue_unlinked: 'Linear issue %{issue_id} was unlinked by %{user_name}'
|
||||
csat:
|
||||
not_sent_due_to_messaging_window: 'CSAT survey not sent due to outgoing message restrictions'
|
||||
muted: '%{user_name}, sohbeti sessize aldı'
|
||||
|
||||
@@ -91,6 +91,8 @@ uk:
|
||||
conversations_count: '№ розмов'
|
||||
avg_first_response_time: Середній час першої відповіді
|
||||
avg_resolution_time: Середній час вирішення
|
||||
avg_reply_time: Avg reply time
|
||||
resolution_count: Кількість вирішень
|
||||
team_csv:
|
||||
team_name: Назва команди
|
||||
conversations_count: Кількість бесід
|
||||
@@ -138,6 +140,8 @@ uk:
|
||||
instagram_story_content: '%{story_sender} згадав вас у сторіс: '
|
||||
instagram_deleted_story_content: Ця історія більше не доступна.
|
||||
deleted: Це повідомлення було видалено
|
||||
whatsapp:
|
||||
list_button_label: 'Choose an item'
|
||||
delivery_status:
|
||||
error_code: 'Код помилки: %{error_code}'
|
||||
activity:
|
||||
@@ -172,6 +176,10 @@ uk:
|
||||
sla:
|
||||
added: '%{user_name} додав політику SLA %{sla_name}'
|
||||
removed: '%{user_name} видалив політику SLA %{sla_name}'
|
||||
linear:
|
||||
issue_created: 'Linear issue %{issue_id} was created by %{user_name}'
|
||||
issue_linked: 'Linear issue %{issue_id} was linked by %{user_name}'
|
||||
issue_unlinked: 'Linear issue %{issue_id} was unlinked by %{user_name}'
|
||||
csat:
|
||||
not_sent_due_to_messaging_window: 'CSAT survey not sent due to outgoing message restrictions'
|
||||
muted: '%{user_name} включив безвучний режим'
|
||||
|
||||
@@ -91,6 +91,8 @@ ur:
|
||||
conversations_count: No. of conversations
|
||||
avg_first_response_time: Avg first response time
|
||||
avg_resolution_time: Avg resolution time
|
||||
avg_reply_time: Avg reply time
|
||||
resolution_count: Resolution Count
|
||||
team_csv:
|
||||
team_name: Team name
|
||||
conversations_count: Conversations count
|
||||
@@ -138,6 +140,8 @@ ur:
|
||||
instagram_story_content: '%{story_sender} mentioned you in the story: '
|
||||
instagram_deleted_story_content: This story is no longer available.
|
||||
deleted: This message was deleted
|
||||
whatsapp:
|
||||
list_button_label: 'Choose an item'
|
||||
delivery_status:
|
||||
error_code: 'Error code: %{error_code}'
|
||||
activity:
|
||||
@@ -172,6 +176,10 @@ ur:
|
||||
sla:
|
||||
added: '%{user_name} added SLA policy %{sla_name}'
|
||||
removed: '%{user_name} removed SLA policy %{sla_name}'
|
||||
linear:
|
||||
issue_created: 'Linear issue %{issue_id} was created by %{user_name}'
|
||||
issue_linked: 'Linear issue %{issue_id} was linked by %{user_name}'
|
||||
issue_unlinked: 'Linear issue %{issue_id} was unlinked by %{user_name}'
|
||||
csat:
|
||||
not_sent_due_to_messaging_window: 'CSAT survey not sent due to outgoing message restrictions'
|
||||
muted: '%{user_name} has muted the conversation'
|
||||
|
||||
@@ -91,6 +91,8 @@ ur:
|
||||
conversations_count: No. of conversations
|
||||
avg_first_response_time: Avg first response time
|
||||
avg_resolution_time: Avg resolution time
|
||||
avg_reply_time: Avg reply time
|
||||
resolution_count: Resolution Count
|
||||
team_csv:
|
||||
team_name: Team name
|
||||
conversations_count: Conversations count
|
||||
@@ -138,6 +140,8 @@ ur:
|
||||
instagram_story_content: '%{story_sender} mentioned you in the story: '
|
||||
instagram_deleted_story_content: This story is no longer available.
|
||||
deleted: This message was deleted
|
||||
whatsapp:
|
||||
list_button_label: 'Choose an item'
|
||||
delivery_status:
|
||||
error_code: 'Error code: %{error_code}'
|
||||
activity:
|
||||
@@ -172,6 +176,10 @@ ur:
|
||||
sla:
|
||||
added: '%{user_name} added SLA policy %{sla_name}'
|
||||
removed: '%{user_name} removed SLA policy %{sla_name}'
|
||||
linear:
|
||||
issue_created: 'Linear issue %{issue_id} was created by %{user_name}'
|
||||
issue_linked: 'Linear issue %{issue_id} was linked by %{user_name}'
|
||||
issue_unlinked: 'Linear issue %{issue_id} was unlinked by %{user_name}'
|
||||
csat:
|
||||
not_sent_due_to_messaging_window: 'CSAT survey not sent due to outgoing message restrictions'
|
||||
muted: '%{user_name} has muted the conversation'
|
||||
|
||||
@@ -91,6 +91,8 @@ vi:
|
||||
conversations_count: Số hội thoại
|
||||
avg_first_response_time: Avg first response time
|
||||
avg_resolution_time: Avg resolution time
|
||||
avg_reply_time: Avg reply time
|
||||
resolution_count: Số lượng giải quyết
|
||||
team_csv:
|
||||
team_name: Tên nhóm
|
||||
conversations_count: Số hội thoại
|
||||
@@ -138,6 +140,8 @@ vi:
|
||||
instagram_story_content: '%{story_sender} đã đề cập đến bạn trong hội thoại: '
|
||||
instagram_deleted_story_content: Hội thoại này không còn nữa.
|
||||
deleted: Tin nhắn đã bị xoá
|
||||
whatsapp:
|
||||
list_button_label: 'Choose an item'
|
||||
delivery_status:
|
||||
error_code: 'Error code: %{error_code}'
|
||||
activity:
|
||||
@@ -172,6 +176,10 @@ vi:
|
||||
sla:
|
||||
added: '%{user_name} added SLA policy %{sla_name}'
|
||||
removed: '%{user_name} removed SLA policy %{sla_name}'
|
||||
linear:
|
||||
issue_created: 'Linear issue %{issue_id} was created by %{user_name}'
|
||||
issue_linked: 'Linear issue %{issue_id} was linked by %{user_name}'
|
||||
issue_unlinked: 'Linear issue %{issue_id} was unlinked by %{user_name}'
|
||||
csat:
|
||||
not_sent_due_to_messaging_window: 'CSAT survey not sent due to outgoing message restrictions'
|
||||
muted: '%{user_name} đã tắt tiếng hội thoại'
|
||||
|
||||
@@ -91,6 +91,8 @@ zh_CN:
|
||||
conversations_count: 对话数量
|
||||
avg_first_response_time: 平均首次响应时间
|
||||
avg_resolution_time: 平均解决时间
|
||||
avg_reply_time: Avg reply time
|
||||
resolution_count: 已解决的数量
|
||||
team_csv:
|
||||
team_name: 团队名称
|
||||
conversations_count: 对话数量
|
||||
@@ -138,6 +140,8 @@ zh_CN:
|
||||
instagram_story_content: '%{story_sender} 会话中提到了你: '
|
||||
instagram_deleted_story_content: 本信息不存在
|
||||
deleted: 此消息已被删除
|
||||
whatsapp:
|
||||
list_button_label: 'Choose an item'
|
||||
delivery_status:
|
||||
error_code: '错误代码: %{error_code}'
|
||||
activity:
|
||||
@@ -172,6 +176,10 @@ zh_CN:
|
||||
sla:
|
||||
added: '%{user_name} 添加了 SLA 策略 %{sla_name}'
|
||||
removed: '%{user_name} 移除了 SLA 策略 %{sla_name}'
|
||||
linear:
|
||||
issue_created: 'Linear issue %{issue_id} was created by %{user_name}'
|
||||
issue_linked: 'Linear issue %{issue_id} was linked by %{user_name}'
|
||||
issue_unlinked: 'Linear issue %{issue_id} was unlinked by %{user_name}'
|
||||
csat:
|
||||
not_sent_due_to_messaging_window: 'CSAT survey not sent due to outgoing message restrictions'
|
||||
muted: '%{user_name} 已将会话静音'
|
||||
|
||||
@@ -91,6 +91,8 @@ zh_TW:
|
||||
conversations_count: No. of conversations
|
||||
avg_first_response_time: Avg first response time
|
||||
avg_resolution_time: Avg resolution time
|
||||
avg_reply_time: Avg reply time
|
||||
resolution_count: 已解決的數量
|
||||
team_csv:
|
||||
team_name: 團隊名稱
|
||||
conversations_count: 對話數量
|
||||
@@ -138,6 +140,8 @@ zh_TW:
|
||||
instagram_story_content: '%{story_sender} mentioned you in the story: '
|
||||
instagram_deleted_story_content: This story is no longer available.
|
||||
deleted: 訊息已被刪除
|
||||
whatsapp:
|
||||
list_button_label: 'Choose an item'
|
||||
delivery_status:
|
||||
error_code: 'Error code: %{error_code}'
|
||||
activity:
|
||||
@@ -172,6 +176,10 @@ zh_TW:
|
||||
sla:
|
||||
added: '%{user_name} added SLA policy %{sla_name}'
|
||||
removed: '%{user_name} removed SLA policy %{sla_name}'
|
||||
linear:
|
||||
issue_created: 'Linear issue %{issue_id} was created by %{user_name}'
|
||||
issue_linked: 'Linear issue %{issue_id} was linked by %{user_name}'
|
||||
issue_unlinked: 'Linear issue %{issue_id} was unlinked by %{user_name}'
|
||||
csat:
|
||||
not_sent_due_to_messaging_window: 'CSAT survey not sent due to outgoing message restrictions'
|
||||
muted: '%{user_name} 已將對話靜音'
|
||||
|
||||
+1
-5
@@ -265,9 +265,6 @@ Rails.application.routes.draw do
|
||||
get :linked_issues
|
||||
end
|
||||
end
|
||||
namespace :integrations do
|
||||
resource :github, only: [:show]
|
||||
end
|
||||
end
|
||||
resources :working_hours, only: [:update]
|
||||
|
||||
@@ -496,7 +493,6 @@ Rails.application.routes.draw do
|
||||
get 'microsoft/callback', to: 'microsoft/callbacks#show'
|
||||
get 'google/callback', to: 'google/callbacks#show'
|
||||
get 'instagram/callback', to: 'instagram/callbacks#show'
|
||||
get 'github/callback', to: 'github/callbacks#show'
|
||||
# ----------------------------------------------------------------------
|
||||
# Routes for external service verifications
|
||||
get '.well-known/assetlinks.json' => 'android_app#assetlinks'
|
||||
@@ -527,7 +523,7 @@ Rails.application.routes.draw do
|
||||
|
||||
resources :access_tokens, only: [:index, :show]
|
||||
resources :installation_configs, only: [:index, :new, :create, :show, :edit, :update]
|
||||
resources :agent_bots, only: [:index, :new, :create, :show, :edit, :update] do
|
||||
resources :agent_bots, only: [:index, :new, :create, :show, :edit, :update, :destroy] do
|
||||
delete :avatar, on: :member, action: :destroy_avatar
|
||||
end
|
||||
resources :platform_apps, only: [:index, :new, :create, :show, :edit, :update, :destroy]
|
||||
|
||||
@@ -103,9 +103,3 @@ shopify:
|
||||
enabled: true
|
||||
icon: 'icon-shopify'
|
||||
config_key: 'shopify'
|
||||
github:
|
||||
name: 'GitHub'
|
||||
description: 'Configuration for setting up GitHub Integration'
|
||||
enabled: true
|
||||
icon: 'icon-github'
|
||||
config_key: 'github'
|
||||
|
||||
@@ -20,7 +20,10 @@ class Messages::AudioTranscriptionService < Llm::BaseOpenAiService
|
||||
private
|
||||
|
||||
def can_transcribe?
|
||||
account.audio_transcriptions.present? && account.usage_limits[:captain][:responses][:current_available].positive?
|
||||
return false if account.feature_enabled?('captain_integration')
|
||||
return false if account.audio_transcriptions.blank?
|
||||
|
||||
account.usage_limits[:captain][:responses][:current_available].positive?
|
||||
end
|
||||
|
||||
def fetch_audio_file
|
||||
|
||||
@@ -28,7 +28,8 @@ class Integrations::Linear::ProcessorService
|
||||
|
||||
{
|
||||
data: { id: response['issueCreate']['issue']['id'],
|
||||
title: response['issueCreate']['issue']['title'] }
|
||||
title: response['issueCreate']['issue']['title'],
|
||||
identifier: response['issueCreate']['issue']['identifier'] }
|
||||
}
|
||||
end
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user