+
{{ $t('AGENT_MGMT.SEARCH.NO_RESULTS') }}
@@ -57,11 +65,13 @@
import { mapGetters } from 'vuex';
import MoreActions from './MoreActions';
import Thumbnail from '../Thumbnail';
+import AvailabilityStatusBadge from '../conversation/AvailabilityStatusBadge';
export default {
components: {
MoreActions,
Thumbnail,
+ AvailabilityStatusBadge,
},
props: {
@@ -83,8 +93,8 @@ export default {
computed: {
...mapGetters({
- getAgents: 'inboxMembers/getMembersByInbox',
- uiFlags: 'inboxMembers/getUIFlags',
+ getAgents: 'inboxAssignableAgents/getAssignableAgents',
+ uiFlags: 'inboxAssignableAgents/getUIFlags',
currentChat: 'getSelectedChat',
}),
@@ -126,7 +136,6 @@ export default {
bus.$emit('newToastMessage', this.$t('CONVERSATION.CHANGE_AGENT'));
});
},
-
removeAgent() {},
},
};
@@ -142,4 +151,17 @@ export default {
.conv-header {
flex: 0 0 var(--space-jumbo);
}
+
+.option__desc {
+ display: flex;
+ align-items: center;
+}
+
+.option__desc {
+ &::v-deep .status-badge {
+ margin-right: var(--space-small);
+ min-width: 0;
+ flex-shrink: 0;
+ }
+}
diff --git a/app/javascript/dashboard/components/widgets/conversation/Message.vue b/app/javascript/dashboard/components/widgets/conversation/Message.vue
index 00dc6a500a3..bf39087cf6a 100644
--- a/app/javascript/dashboard/components/widgets/conversation/Message.vue
+++ b/app/javascript/dashboard/components/widgets/conversation/Message.vue
@@ -109,12 +109,14 @@ export default {
);
const {
- email: { html_content: { full: fullHTMLContent } = {} } = {},
+ email: {
+ html_content: { full: fullHTMLContent, reply: replyHTMLContent } = {},
+ } = {},
} = this.contentAttributes;
- if (fullHTMLContent && this.isIncoming) {
+ if ((replyHTMLContent || fullHTMLContent) && this.isIncoming) {
let parsedContent = new DOMParser().parseFromString(
- fullHTMLContent || '',
+ replyHTMLContent || fullHTMLContent || '',
'text/html'
);
if (!parsedContent.getElementsByTagName('parsererror').length) {
diff --git a/app/javascript/dashboard/components/widgets/conversation/ReplyBox.vue b/app/javascript/dashboard/components/widgets/conversation/ReplyBox.vue
index ae3ba444a6f..81c94640f61 100644
--- a/app/javascript/dashboard/components/widgets/conversation/ReplyBox.vue
+++ b/app/javascript/dashboard/components/widgets/conversation/ReplyBox.vue
@@ -186,10 +186,12 @@ export default {
if (this.isPrivate) {
return MESSAGE_MAX_LENGTH.GENERAL;
}
-
if (this.isAFacebookInbox) {
return MESSAGE_MAX_LENGTH.FACEBOOK;
}
+ if (this.isATwilioWhatsappChannel) {
+ return MESSAGE_MAX_LENGTH.TWILIO_WHATSAPP;
+ }
if (this.isATwilioSMSChannel) {
return MESSAGE_MAX_LENGTH.TWILIO_SMS;
}
diff --git a/app/javascript/dashboard/helper/actionCable.js b/app/javascript/dashboard/helper/actionCable.js
index 73b3e721305..6103ee9155b 100644
--- a/app/javascript/dashboard/helper/actionCable.js
+++ b/app/javascript/dashboard/helper/actionCable.js
@@ -10,8 +10,7 @@ class ActionCableConnector extends BaseActionCableConnector {
'message.created': this.onMessageCreated,
'message.updated': this.onMessageUpdated,
'conversation.created': this.onConversationCreated,
- 'conversation.opened': this.onStatusChange,
- 'conversation.resolved': this.onStatusChange,
+ 'conversation.status_changed': this.onStatusChange,
'user:logout': this.onLogout,
'page:reload': this.onReload,
'assignee.changed': this.onAssigneeChanged,
diff --git a/app/javascript/dashboard/i18n/default-sidebar.js b/app/javascript/dashboard/i18n/default-sidebar.js
index 7faa7d2e895..6488c022ea5 100644
--- a/app/javascript/dashboard/i18n/default-sidebar.js
+++ b/app/javascript/dashboard/i18n/default-sidebar.js
@@ -8,6 +8,7 @@ export const getSidebarItems = accountId => ({
'inbox_conversation',
'conversation_through_inbox',
'contacts_dashboard',
+ 'contacts_dashboard_manage',
'notifications_dashboard',
'settings_account_reports',
'profile_settings',
diff --git a/app/javascript/dashboard/i18n/locale/ar/campaign.json b/app/javascript/dashboard/i18n/locale/ar/campaign.json
new file mode 100644
index 00000000000..d8943ac0f87
--- /dev/null
+++ b/app/javascript/dashboard/i18n/locale/ar/campaign.json
@@ -0,0 +1,79 @@
+{
+ "CAMPAIGN": {
+ "HEADER": "Campaigns",
+ "SIDEBAR_TXT": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations. Click on Add Campaign to create a new campaign. You can also edit or delete an existing campaign by clicking on the Edit or Delete button.",
+ "HEADER_BTN_TXT": "Create a campaign",
+ "ADD": {
+ "TITLE": "Create a campaign",
+ "DESC": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations.",
+ "CANCEL_BUTTON_TEXT": "إلغاء",
+ "CREATE_BUTTON_TEXT": "إنشاء",
+ "FORM": {
+ "TITLE": {
+ "LABEL": "Title",
+ "PLACEHOLDER": "Please enter the title of campaign",
+ "ERROR": "Title is required"
+ },
+ "MESSAGE": {
+ "LABEL": "رسالة",
+ "PLACEHOLDER": "Please enter the message of campaign",
+ "ERROR": "Message is required"
+ },
+ "SENT_BY": {
+ "LABEL": "أرسلت بواسطة",
+ "PLACEHOLDER": "Please select the the content of campaign",
+ "ERROR": "Sender is required"
+ },
+ "END_POINT": {
+ "LABEL": "URL",
+ "PLACEHOLDER": "Please enter the URL",
+ "ERROR": "الرجاء إدخال عنوان URL صالح"
+ },
+ "TIME_ON_PAGE": {
+ "LABEL": "Time on page(Seconds)",
+ "PLACEHOLDER": "Please enter the time",
+ "ERROR": "Time on page is required"
+ },
+ "ENABLED": "Enable campaign",
+ "SUBMIT": "Add Campaign"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Campaign created successfully",
+ "ERROR_MESSAGE": "There was an error. Please try again."
+ }
+ },
+ "EDIT": {
+ "TITLE": "Edit campaign",
+ "UPDATE_BUTTON_TEXT": "تحديث",
+ "API": {
+ "SUCCESS_MESSAGE": "Campaign updated successfully",
+ "ERROR_MESSAGE": "حدث خطأ، الرجاء المحاولة مرة أخرى"
+ }
+ },
+ "LIST": {
+ "LOADING_MESSAGE": "Loading campaigns...",
+ "404": "There are no campaigns created for this inbox.",
+ "TABLE_HEADER": {
+ "TITLE": "Title",
+ "MESSAGE": "رسالة",
+ "STATUS": "الحالة",
+ "SENDER": "Sender",
+ "URL": "URL",
+ "TIME_ON_PAGE": "Time(Seconds)",
+ "CREATED_AT": "Created at"
+ },
+ "BUTTONS": {
+ "ADD": "Add",
+ "EDIT": "تعديل",
+ "DELETE": "حذف"
+ },
+ "STATUS": {
+ "ENABLED": "مفعل",
+ "DISABLED": "معطّل"
+ },
+ "SENDER": {
+ "BOT": "رد آلي"
+ }
+ }
+ }
+}
diff --git a/app/javascript/dashboard/i18n/locale/ar/chatlist.json b/app/javascript/dashboard/i18n/locale/ar/chatlist.json
index bce751c6182..53fc3bd4e6a 100644
--- a/app/javascript/dashboard/i18n/locale/ar/chatlist.json
+++ b/app/javascript/dashboard/i18n/locale/ar/chatlist.json
@@ -80,6 +80,7 @@
"RECEIVED_VIA_EMAIL": "تم تلقيه عبر البريد الإلكتروني",
"VIEW_TWEET_IN_TWITTER": "عرض التغريدة في تويتر",
"REPLY_TO_TWEET": "الرد على هذه التغريدة",
- "NO_MESSAGES": "لا توجد رسائل"
+ "NO_MESSAGES": "لا توجد رسائل",
+ "NO_CONTENT": "No content available"
}
}
diff --git a/app/javascript/dashboard/i18n/locale/ar/contact.json b/app/javascript/dashboard/i18n/locale/ar/contact.json
index ca7b8e9a5f0..2218c93c40b 100644
--- a/app/javascript/dashboard/i18n/locale/ar/contact.json
+++ b/app/javascript/dashboard/i18n/locale/ar/contact.json
@@ -28,11 +28,17 @@
"INACTIVE_LABELS": "الوسوم المتاحة في الحساب",
"REMOVE": "انقر على أيقونة X لإزالة الوسم",
"ADD": "اضغط على أيقونة + لإضافة وسوم",
+ "ADD_BUTTON": "Add Labels",
"UPDATE_BUTTON": "تحديث الوسوم",
"UPDATE_ERROR": "تعذر تحديث الوسوم، الرجاء المحاولة مرة أخرى."
},
"NO_LABELS_TO_ADD": "لا يوجد وسوم في الحساب.",
- "NO_AVAILABLE_LABELS": "لا يوجد وسوم مضافة لهذه المحادثة."
+ "NO_AVAILABLE_LABELS": "لا يوجد وسوم مضافة لهذه المحادثة.",
+ "LABEL_SELECT": {
+ "TITLE": "Add Labels",
+ "PLACEHOLDER": "Search labels",
+ "NO_RESULT": "No labels found"
+ }
},
"MUTE_CONTACT": "كتم المحادثة",
"UNMUTE_CONTACT": "إلغاء كتم المحادثة",
@@ -151,5 +157,18 @@
},
"VIEW_DETAILS": "عرض التفاصيل"
}
+ },
+ "NOTES": {
+ "HEADER": {
+ "TITLE": "Notes"
+ },
+ "ADD": {
+ "BUTTON": "Add",
+ "PLACEHOLDER": "Add a note",
+ "TITLE": "Shift + Enter to create a note"
+ },
+ "FOOTER": {
+ "BUTTON": "View all notes"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/ar/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/ar/inboxMgmt.json
index e88239138dd..f438d84da1f 100644
--- a/app/javascript/dashboard/i18n/locale/ar/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/ar/inboxMgmt.json
@@ -227,6 +227,7 @@
"SETTINGS": "الإعدادات",
"COLLABORATORS": "المتعاونون",
"CONFIGURATION": "الإعدادات",
+ "CAMPAIGN": "Campaigns",
"PRE_CHAT_FORM": "نموذج ما قبل الدردشة",
"BUSINESS_HOURS": "ساعات العمل"
},
diff --git a/app/javascript/dashboard/i18n/locale/ar/index.js b/app/javascript/dashboard/i18n/locale/ar/index.js
index 5dfc44e4b47..cf1dda7fe57 100644
--- a/app/javascript/dashboard/i18n/locale/ar/index.js
+++ b/app/javascript/dashboard/i18n/locale/ar/index.js
@@ -1,33 +1,37 @@
import { default as _agentMgmt } from './agentMgmt.json';
-import { default as _labelsMgmt } from './labelsMgmt.json';
+import { default as _campaign } from './campaign.json';
import { default as _cannedMgmt } from './cannedMgmt.json';
import { default as _chatlist } from './chatlist.json';
import { default as _contact } from './contact.json';
import { default as _conversation } from './conversation.json';
+import { default as _generalSettings } from './generalSettings.json';
import { default as _inboxMgmt } from './inboxMgmt.json';
+import { default as _integrations } from './integrations.json';
+import { default as _labelsMgmt } from './labelsMgmt.json';
import { default as _login } from './login.json';
import { default as _report } from './report.json';
import { default as _resetPassword } from './resetPassword.json';
import { default as _setNewPassword } from './setNewPassword.json';
import { default as _settings } from './settings.json';
import { default as _signup } from './signup.json';
-import { default as _integrations } from './integrations.json';
-import { default as _generalSettings } from './generalSettings.json';
+import { default as _teamsSettings } from './teamsSettings.json';
export default {
..._agentMgmt,
+ ..._campaign,
..._cannedMgmt,
..._chatlist,
..._contact,
..._conversation,
+ ..._generalSettings,
..._inboxMgmt,
+ ..._integrations,
+ ..._labelsMgmt,
..._login,
..._report,
- ..._labelsMgmt,
..._resetPassword,
..._setNewPassword,
..._settings,
..._signup,
- ..._integrations,
- ..._generalSettings,
+ ..._teamsSettings,
};
diff --git a/app/javascript/dashboard/i18n/locale/ar/report.json b/app/javascript/dashboard/i18n/locale/ar/report.json
index 078d09bc1dc..4f153ec110d 100644
--- a/app/javascript/dashboard/i18n/locale/ar/report.json
+++ b/app/javascript/dashboard/i18n/locale/ar/report.json
@@ -38,6 +38,18 @@
{
"id": 1,
"name": "آخر 30 يوماً"
+ },
+ {
+ "id": 2,
+ "name": "Last 3 months"
+ },
+ {
+ "id": 3,
+ "name": "Last 6 months"
+ },
+ {
+ "id": 4,
+ "name": "Last year"
}
]
}
diff --git a/app/javascript/dashboard/i18n/locale/ca/campaign.json b/app/javascript/dashboard/i18n/locale/ca/campaign.json
new file mode 100644
index 00000000000..4ca3b69b821
--- /dev/null
+++ b/app/javascript/dashboard/i18n/locale/ca/campaign.json
@@ -0,0 +1,79 @@
+{
+ "CAMPAIGN": {
+ "HEADER": "Campaigns",
+ "SIDEBAR_TXT": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations. Click on Add Campaign to create a new campaign. You can also edit or delete an existing campaign by clicking on the Edit or Delete button.",
+ "HEADER_BTN_TXT": "Create a campaign",
+ "ADD": {
+ "TITLE": "Create a campaign",
+ "DESC": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations.",
+ "CANCEL_BUTTON_TEXT": "Cancel·la",
+ "CREATE_BUTTON_TEXT": "Crear",
+ "FORM": {
+ "TITLE": {
+ "LABEL": "Title",
+ "PLACEHOLDER": "Please enter the title of campaign",
+ "ERROR": "Title is required"
+ },
+ "MESSAGE": {
+ "LABEL": "Missatge",
+ "PLACEHOLDER": "Please enter the message of campaign",
+ "ERROR": "Message is required"
+ },
+ "SENT_BY": {
+ "LABEL": "Enviat per",
+ "PLACEHOLDER": "Please select the the content of campaign",
+ "ERROR": "Sender is required"
+ },
+ "END_POINT": {
+ "LABEL": "URL",
+ "PLACEHOLDER": "Please enter the URL",
+ "ERROR": "Introduïu una URL vàlid"
+ },
+ "TIME_ON_PAGE": {
+ "LABEL": "Time on page(Seconds)",
+ "PLACEHOLDER": "Please enter the time",
+ "ERROR": "Time on page is required"
+ },
+ "ENABLED": "Enable campaign",
+ "SUBMIT": "Add Campaign"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Campaign created successfully",
+ "ERROR_MESSAGE": "There was an error. Please try again."
+ }
+ },
+ "EDIT": {
+ "TITLE": "Edit campaign",
+ "UPDATE_BUTTON_TEXT": "Actualitza",
+ "API": {
+ "SUCCESS_MESSAGE": "Campaign updated successfully",
+ "ERROR_MESSAGE": "S'ha produït un error; tornau-ho a provar"
+ }
+ },
+ "LIST": {
+ "LOADING_MESSAGE": "Loading campaigns...",
+ "404": "There are no campaigns created for this inbox.",
+ "TABLE_HEADER": {
+ "TITLE": "Title",
+ "MESSAGE": "Missatge",
+ "STATUS": "Estat",
+ "SENDER": "Sender",
+ "URL": "URL",
+ "TIME_ON_PAGE": "Time(Seconds)",
+ "CREATED_AT": "Created at"
+ },
+ "BUTTONS": {
+ "ADD": "Add",
+ "EDIT": "Edita",
+ "DELETE": "Esborrar"
+ },
+ "STATUS": {
+ "ENABLED": "Habilita",
+ "DISABLED": "Inhabilita"
+ },
+ "SENDER": {
+ "BOT": "Bot"
+ }
+ }
+ }
+}
diff --git a/app/javascript/dashboard/i18n/locale/ca/chatlist.json b/app/javascript/dashboard/i18n/locale/ca/chatlist.json
index a6d6f335c43..d5af1965071 100644
--- a/app/javascript/dashboard/i18n/locale/ca/chatlist.json
+++ b/app/javascript/dashboard/i18n/locale/ca/chatlist.json
@@ -80,6 +80,7 @@
"RECEIVED_VIA_EMAIL": "Rebut per correu electrònic",
"VIEW_TWEET_IN_TWITTER": "Veure el tuit a Twitter",
"REPLY_TO_TWEET": "Respon a aquest tuit",
- "NO_MESSAGES": "Cap Missatge"
+ "NO_MESSAGES": "Cap Missatge",
+ "NO_CONTENT": "No content available"
}
}
diff --git a/app/javascript/dashboard/i18n/locale/ca/contact.json b/app/javascript/dashboard/i18n/locale/ca/contact.json
index 30849ca491d..996adbfc28a 100644
--- a/app/javascript/dashboard/i18n/locale/ca/contact.json
+++ b/app/javascript/dashboard/i18n/locale/ca/contact.json
@@ -28,11 +28,17 @@
"INACTIVE_LABELS": "Etiquetes disponibles al compte",
"REMOVE": "Fes clic a la icona X per eliminar l'etiqueta",
"ADD": "Fes clic a la icona + per afegir l'etiqueta",
+ "ADD_BUTTON": "Add Labels",
"UPDATE_BUTTON": "Actualitza les etiquetes",
"UPDATE_ERROR": "No s'han pogut actualitzar les etiquetes, torna-ho a provar."
},
"NO_LABELS_TO_ADD": "No hi ha cap etiqueta definida al compte.",
- "NO_AVAILABLE_LABELS": "No hi ha etiquetes afegides a aquesta conversa."
+ "NO_AVAILABLE_LABELS": "No hi ha etiquetes afegides a aquesta conversa.",
+ "LABEL_SELECT": {
+ "TITLE": "Add Labels",
+ "PLACEHOLDER": "Search labels",
+ "NO_RESULT": "No labels found"
+ }
},
"MUTE_CONTACT": "Silencia la conversa",
"UNMUTE_CONTACT": "Desactiva el silenci de la conversa",
@@ -151,5 +157,18 @@
},
"VIEW_DETAILS": "View details"
}
+ },
+ "NOTES": {
+ "HEADER": {
+ "TITLE": "Notes"
+ },
+ "ADD": {
+ "BUTTON": "Add",
+ "PLACEHOLDER": "Add a note",
+ "TITLE": "Shift + Enter to create a note"
+ },
+ "FOOTER": {
+ "BUTTON": "View all notes"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/ca/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/ca/inboxMgmt.json
index d5c18acf77a..04eaacf40aa 100644
--- a/app/javascript/dashboard/i18n/locale/ca/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/ca/inboxMgmt.json
@@ -227,6 +227,7 @@
"SETTINGS": "Configuracions",
"COLLABORATORS": "Col·laboradors",
"CONFIGURATION": "Configuració",
+ "CAMPAIGN": "Campaigns",
"PRE_CHAT_FORM": "Pre Chat Form",
"BUSINESS_HOURS": "Business Hours"
},
diff --git a/app/javascript/dashboard/i18n/locale/ca/index.js b/app/javascript/dashboard/i18n/locale/ca/index.js
index 5dfc44e4b47..cf1dda7fe57 100644
--- a/app/javascript/dashboard/i18n/locale/ca/index.js
+++ b/app/javascript/dashboard/i18n/locale/ca/index.js
@@ -1,33 +1,37 @@
import { default as _agentMgmt } from './agentMgmt.json';
-import { default as _labelsMgmt } from './labelsMgmt.json';
+import { default as _campaign } from './campaign.json';
import { default as _cannedMgmt } from './cannedMgmt.json';
import { default as _chatlist } from './chatlist.json';
import { default as _contact } from './contact.json';
import { default as _conversation } from './conversation.json';
+import { default as _generalSettings } from './generalSettings.json';
import { default as _inboxMgmt } from './inboxMgmt.json';
+import { default as _integrations } from './integrations.json';
+import { default as _labelsMgmt } from './labelsMgmt.json';
import { default as _login } from './login.json';
import { default as _report } from './report.json';
import { default as _resetPassword } from './resetPassword.json';
import { default as _setNewPassword } from './setNewPassword.json';
import { default as _settings } from './settings.json';
import { default as _signup } from './signup.json';
-import { default as _integrations } from './integrations.json';
-import { default as _generalSettings } from './generalSettings.json';
+import { default as _teamsSettings } from './teamsSettings.json';
export default {
..._agentMgmt,
+ ..._campaign,
..._cannedMgmt,
..._chatlist,
..._contact,
..._conversation,
+ ..._generalSettings,
..._inboxMgmt,
+ ..._integrations,
+ ..._labelsMgmt,
..._login,
..._report,
- ..._labelsMgmt,
..._resetPassword,
..._setNewPassword,
..._settings,
..._signup,
- ..._integrations,
- ..._generalSettings,
+ ..._teamsSettings,
};
diff --git a/app/javascript/dashboard/i18n/locale/ca/report.json b/app/javascript/dashboard/i18n/locale/ca/report.json
index 7dabbcb7e08..b4cdbb96bf0 100644
--- a/app/javascript/dashboard/i18n/locale/ca/report.json
+++ b/app/javascript/dashboard/i18n/locale/ca/report.json
@@ -38,6 +38,18 @@
{
"id": 1,
"name": "Últims 30 dies"
+ },
+ {
+ "id": 2,
+ "name": "Last 3 months"
+ },
+ {
+ "id": 3,
+ "name": "Last 6 months"
+ },
+ {
+ "id": 4,
+ "name": "Last year"
}
]
}
diff --git a/app/javascript/dashboard/i18n/locale/cs/campaign.json b/app/javascript/dashboard/i18n/locale/cs/campaign.json
new file mode 100644
index 00000000000..b6b1008cbba
--- /dev/null
+++ b/app/javascript/dashboard/i18n/locale/cs/campaign.json
@@ -0,0 +1,79 @@
+{
+ "CAMPAIGN": {
+ "HEADER": "Campaigns",
+ "SIDEBAR_TXT": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations. Click on Add Campaign to create a new campaign. You can also edit or delete an existing campaign by clicking on the Edit or Delete button.",
+ "HEADER_BTN_TXT": "Create a campaign",
+ "ADD": {
+ "TITLE": "Create a campaign",
+ "DESC": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations.",
+ "CANCEL_BUTTON_TEXT": "Zrušit",
+ "CREATE_BUTTON_TEXT": "Create",
+ "FORM": {
+ "TITLE": {
+ "LABEL": "Title",
+ "PLACEHOLDER": "Please enter the title of campaign",
+ "ERROR": "Title is required"
+ },
+ "MESSAGE": {
+ "LABEL": "Zpráva",
+ "PLACEHOLDER": "Please enter the message of campaign",
+ "ERROR": "Message is required"
+ },
+ "SENT_BY": {
+ "LABEL": "Odeslal",
+ "PLACEHOLDER": "Please select the the content of campaign",
+ "ERROR": "Sender is required"
+ },
+ "END_POINT": {
+ "LABEL": "URL",
+ "PLACEHOLDER": "Please enter the URL",
+ "ERROR": "Zadejte prosím platnou URL"
+ },
+ "TIME_ON_PAGE": {
+ "LABEL": "Time on page(Seconds)",
+ "PLACEHOLDER": "Please enter the time",
+ "ERROR": "Time on page is required"
+ },
+ "ENABLED": "Enable campaign",
+ "SUBMIT": "Add Campaign"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Campaign created successfully",
+ "ERROR_MESSAGE": "There was an error. Please try again."
+ }
+ },
+ "EDIT": {
+ "TITLE": "Edit campaign",
+ "UPDATE_BUTTON_TEXT": "Aktualizovat",
+ "API": {
+ "SUCCESS_MESSAGE": "Campaign updated successfully",
+ "ERROR_MESSAGE": "Došlo k chybě, zkuste to prosím znovu"
+ }
+ },
+ "LIST": {
+ "LOADING_MESSAGE": "Loading campaigns...",
+ "404": "There are no campaigns created for this inbox.",
+ "TABLE_HEADER": {
+ "TITLE": "Title",
+ "MESSAGE": "Zpráva",
+ "STATUS": "Stav",
+ "SENDER": "Sender",
+ "URL": "URL",
+ "TIME_ON_PAGE": "Time(Seconds)",
+ "CREATED_AT": "Created at"
+ },
+ "BUTTONS": {
+ "ADD": "Add",
+ "EDIT": "Upravit",
+ "DELETE": "Vymazat"
+ },
+ "STATUS": {
+ "ENABLED": "Povoleno",
+ "DISABLED": "Zakázáno"
+ },
+ "SENDER": {
+ "BOT": "Bot"
+ }
+ }
+ }
+}
diff --git a/app/javascript/dashboard/i18n/locale/cs/chatlist.json b/app/javascript/dashboard/i18n/locale/cs/chatlist.json
index 6c01bb3403c..5a9e42761f3 100644
--- a/app/javascript/dashboard/i18n/locale/cs/chatlist.json
+++ b/app/javascript/dashboard/i18n/locale/cs/chatlist.json
@@ -80,6 +80,7 @@
"RECEIVED_VIA_EMAIL": "Obdrženo e-mailem",
"VIEW_TWEET_IN_TWITTER": "Zobrazit tweet na Twitteru",
"REPLY_TO_TWEET": "Odpovědět na tento tweet",
- "NO_MESSAGES": "Žádné zprávy"
+ "NO_MESSAGES": "Žádné zprávy",
+ "NO_CONTENT": "No content available"
}
}
diff --git a/app/javascript/dashboard/i18n/locale/cs/contact.json b/app/javascript/dashboard/i18n/locale/cs/contact.json
index 3b6a25635e2..46bb5458099 100644
--- a/app/javascript/dashboard/i18n/locale/cs/contact.json
+++ b/app/javascript/dashboard/i18n/locale/cs/contact.json
@@ -28,11 +28,17 @@
"INACTIVE_LABELS": "Štítky dostupné v účtu",
"REMOVE": "Kliknutím na ikonu X odstraníte štítek",
"ADD": "Kliknutím na ikonu + přidáte štítek",
+ "ADD_BUTTON": "Add Labels",
"UPDATE_BUTTON": "Aktualizovat štítky",
"UPDATE_ERROR": "Nelze aktualizovat štítky, zkuste to znovu."
},
"NO_LABELS_TO_ADD": "V účtu nejsou definovány žádné další štítky.",
- "NO_AVAILABLE_LABELS": "Do této konverzace nebyly přidány žádné štítky."
+ "NO_AVAILABLE_LABELS": "Do této konverzace nebyly přidány žádné štítky.",
+ "LABEL_SELECT": {
+ "TITLE": "Add Labels",
+ "PLACEHOLDER": "Search labels",
+ "NO_RESULT": "No labels found"
+ }
},
"MUTE_CONTACT": "Ztlumit konverzaci",
"UNMUTE_CONTACT": "Zrušit ztlumení konverzace",
@@ -151,5 +157,18 @@
},
"VIEW_DETAILS": "Zobrazit detaily"
}
+ },
+ "NOTES": {
+ "HEADER": {
+ "TITLE": "Notes"
+ },
+ "ADD": {
+ "BUTTON": "Add",
+ "PLACEHOLDER": "Add a note",
+ "TITLE": "Shift + Enter to create a note"
+ },
+ "FOOTER": {
+ "BUTTON": "View all notes"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/cs/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/cs/inboxMgmt.json
index 6a0a8d00304..4cd8a58e261 100644
--- a/app/javascript/dashboard/i18n/locale/cs/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/cs/inboxMgmt.json
@@ -227,6 +227,7 @@
"SETTINGS": "Nastavení",
"COLLABORATORS": "Spolupracující",
"CONFIGURATION": "Nastavení",
+ "CAMPAIGN": "Campaigns",
"PRE_CHAT_FORM": "Formulář před chatem",
"BUSINESS_HOURS": "Pracovní doba"
},
diff --git a/app/javascript/dashboard/i18n/locale/cs/index.js b/app/javascript/dashboard/i18n/locale/cs/index.js
index 5dfc44e4b47..cf1dda7fe57 100644
--- a/app/javascript/dashboard/i18n/locale/cs/index.js
+++ b/app/javascript/dashboard/i18n/locale/cs/index.js
@@ -1,33 +1,37 @@
import { default as _agentMgmt } from './agentMgmt.json';
-import { default as _labelsMgmt } from './labelsMgmt.json';
+import { default as _campaign } from './campaign.json';
import { default as _cannedMgmt } from './cannedMgmt.json';
import { default as _chatlist } from './chatlist.json';
import { default as _contact } from './contact.json';
import { default as _conversation } from './conversation.json';
+import { default as _generalSettings } from './generalSettings.json';
import { default as _inboxMgmt } from './inboxMgmt.json';
+import { default as _integrations } from './integrations.json';
+import { default as _labelsMgmt } from './labelsMgmt.json';
import { default as _login } from './login.json';
import { default as _report } from './report.json';
import { default as _resetPassword } from './resetPassword.json';
import { default as _setNewPassword } from './setNewPassword.json';
import { default as _settings } from './settings.json';
import { default as _signup } from './signup.json';
-import { default as _integrations } from './integrations.json';
-import { default as _generalSettings } from './generalSettings.json';
+import { default as _teamsSettings } from './teamsSettings.json';
export default {
..._agentMgmt,
+ ..._campaign,
..._cannedMgmt,
..._chatlist,
..._contact,
..._conversation,
+ ..._generalSettings,
..._inboxMgmt,
+ ..._integrations,
+ ..._labelsMgmt,
..._login,
..._report,
- ..._labelsMgmt,
..._resetPassword,
..._setNewPassword,
..._settings,
..._signup,
- ..._integrations,
- ..._generalSettings,
+ ..._teamsSettings,
};
diff --git a/app/javascript/dashboard/i18n/locale/cs/report.json b/app/javascript/dashboard/i18n/locale/cs/report.json
index 87cd03db26f..fb8d544c54f 100644
--- a/app/javascript/dashboard/i18n/locale/cs/report.json
+++ b/app/javascript/dashboard/i18n/locale/cs/report.json
@@ -38,6 +38,18 @@
{
"id": 1,
"name": "Posledních 30 dní"
+ },
+ {
+ "id": 2,
+ "name": "Last 3 months"
+ },
+ {
+ "id": 3,
+ "name": "Last 6 months"
+ },
+ {
+ "id": 4,
+ "name": "Last year"
}
]
}
diff --git a/app/javascript/dashboard/i18n/locale/da/campaign.json b/app/javascript/dashboard/i18n/locale/da/campaign.json
new file mode 100644
index 00000000000..c1a829bc487
--- /dev/null
+++ b/app/javascript/dashboard/i18n/locale/da/campaign.json
@@ -0,0 +1,79 @@
+{
+ "CAMPAIGN": {
+ "HEADER": "Campaigns",
+ "SIDEBAR_TXT": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations. Click on Add Campaign to create a new campaign. You can also edit or delete an existing campaign by clicking on the Edit or Delete button.",
+ "HEADER_BTN_TXT": "Create a campaign",
+ "ADD": {
+ "TITLE": "Create a campaign",
+ "DESC": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations.",
+ "CANCEL_BUTTON_TEXT": "Annuller",
+ "CREATE_BUTTON_TEXT": "Opret",
+ "FORM": {
+ "TITLE": {
+ "LABEL": "Title",
+ "PLACEHOLDER": "Please enter the title of campaign",
+ "ERROR": "Title is required"
+ },
+ "MESSAGE": {
+ "LABEL": "Message",
+ "PLACEHOLDER": "Please enter the message of campaign",
+ "ERROR": "Message is required"
+ },
+ "SENT_BY": {
+ "LABEL": "Sent by",
+ "PLACEHOLDER": "Please select the the content of campaign",
+ "ERROR": "Sender is required"
+ },
+ "END_POINT": {
+ "LABEL": "URL",
+ "PLACEHOLDER": "Please enter the URL",
+ "ERROR": "Angiv en gyldig URL"
+ },
+ "TIME_ON_PAGE": {
+ "LABEL": "Time on page(Seconds)",
+ "PLACEHOLDER": "Please enter the time",
+ "ERROR": "Time on page is required"
+ },
+ "ENABLED": "Enable campaign",
+ "SUBMIT": "Add Campaign"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Campaign created successfully",
+ "ERROR_MESSAGE": "There was an error. Please try again."
+ }
+ },
+ "EDIT": {
+ "TITLE": "Edit campaign",
+ "UPDATE_BUTTON_TEXT": "Opdater",
+ "API": {
+ "SUCCESS_MESSAGE": "Campaign updated successfully",
+ "ERROR_MESSAGE": "Der opstod en fejl. Prøv venligst igen"
+ }
+ },
+ "LIST": {
+ "LOADING_MESSAGE": "Loading campaigns...",
+ "404": "There are no campaigns created for this inbox.",
+ "TABLE_HEADER": {
+ "TITLE": "Title",
+ "MESSAGE": "Message",
+ "STATUS": "Status",
+ "SENDER": "Sender",
+ "URL": "URL",
+ "TIME_ON_PAGE": "Time(Seconds)",
+ "CREATED_AT": "Created at"
+ },
+ "BUTTONS": {
+ "ADD": "Add",
+ "EDIT": "Rediger",
+ "DELETE": "Slet"
+ },
+ "STATUS": {
+ "ENABLED": "Aktiveret",
+ "DISABLED": "Deaktiveret"
+ },
+ "SENDER": {
+ "BOT": "Bot"
+ }
+ }
+ }
+}
diff --git a/app/javascript/dashboard/i18n/locale/da/chatlist.json b/app/javascript/dashboard/i18n/locale/da/chatlist.json
index 52a8f919cdc..862a19495e5 100644
--- a/app/javascript/dashboard/i18n/locale/da/chatlist.json
+++ b/app/javascript/dashboard/i18n/locale/da/chatlist.json
@@ -80,6 +80,7 @@
"RECEIVED_VIA_EMAIL": "Modtaget via e-mail",
"VIEW_TWEET_IN_TWITTER": "Se tweet på Twitter",
"REPLY_TO_TWEET": "Svar på dette tweet",
- "NO_MESSAGES": "No Messages"
+ "NO_MESSAGES": "No Messages",
+ "NO_CONTENT": "No content available"
}
}
diff --git a/app/javascript/dashboard/i18n/locale/da/contact.json b/app/javascript/dashboard/i18n/locale/da/contact.json
index 5e8068ce864..ef1f5595e82 100644
--- a/app/javascript/dashboard/i18n/locale/da/contact.json
+++ b/app/javascript/dashboard/i18n/locale/da/contact.json
@@ -28,11 +28,17 @@
"INACTIVE_LABELS": "Etiketter tilgængelige på kontoen",
"REMOVE": "Klik på X-ikonet for at fjerne etiketten",
"ADD": "Klik på + ikonet for at tilføje etiketten",
+ "ADD_BUTTON": "Add Labels",
"UPDATE_BUTTON": "Opdater etiketter",
"UPDATE_ERROR": "Etiketter kunne ikke opdateres. Prøv igen."
},
"NO_LABELS_TO_ADD": "Der er ikke defineret flere etiketter på kontoen.",
- "NO_AVAILABLE_LABELS": "Der er ingen etiketter tilføjet til denne samtale."
+ "NO_AVAILABLE_LABELS": "Der er ingen etiketter tilføjet til denne samtale.",
+ "LABEL_SELECT": {
+ "TITLE": "Add Labels",
+ "PLACEHOLDER": "Search labels",
+ "NO_RESULT": "No labels found"
+ }
},
"MUTE_CONTACT": "Gør Samtale Lydløs",
"UNMUTE_CONTACT": "Fjern Lydløs",
@@ -151,5 +157,18 @@
},
"VIEW_DETAILS": "View details"
}
+ },
+ "NOTES": {
+ "HEADER": {
+ "TITLE": "Notes"
+ },
+ "ADD": {
+ "BUTTON": "Add",
+ "PLACEHOLDER": "Add a note",
+ "TITLE": "Shift + Enter to create a note"
+ },
+ "FOOTER": {
+ "BUTTON": "View all notes"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/da/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/da/inboxMgmt.json
index bfc7121827d..f1930095bd9 100644
--- a/app/javascript/dashboard/i18n/locale/da/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/da/inboxMgmt.json
@@ -227,6 +227,7 @@
"SETTINGS": "Indstillinger",
"COLLABORATORS": "Samarbejdspartnere",
"CONFIGURATION": "Konfiguration",
+ "CAMPAIGN": "Campaigns",
"PRE_CHAT_FORM": "Pre Chat Form",
"BUSINESS_HOURS": "Business Hours"
},
diff --git a/app/javascript/dashboard/i18n/locale/da/index.js b/app/javascript/dashboard/i18n/locale/da/index.js
index 5dfc44e4b47..cf1dda7fe57 100644
--- a/app/javascript/dashboard/i18n/locale/da/index.js
+++ b/app/javascript/dashboard/i18n/locale/da/index.js
@@ -1,33 +1,37 @@
import { default as _agentMgmt } from './agentMgmt.json';
-import { default as _labelsMgmt } from './labelsMgmt.json';
+import { default as _campaign } from './campaign.json';
import { default as _cannedMgmt } from './cannedMgmt.json';
import { default as _chatlist } from './chatlist.json';
import { default as _contact } from './contact.json';
import { default as _conversation } from './conversation.json';
+import { default as _generalSettings } from './generalSettings.json';
import { default as _inboxMgmt } from './inboxMgmt.json';
+import { default as _integrations } from './integrations.json';
+import { default as _labelsMgmt } from './labelsMgmt.json';
import { default as _login } from './login.json';
import { default as _report } from './report.json';
import { default as _resetPassword } from './resetPassword.json';
import { default as _setNewPassword } from './setNewPassword.json';
import { default as _settings } from './settings.json';
import { default as _signup } from './signup.json';
-import { default as _integrations } from './integrations.json';
-import { default as _generalSettings } from './generalSettings.json';
+import { default as _teamsSettings } from './teamsSettings.json';
export default {
..._agentMgmt,
+ ..._campaign,
..._cannedMgmt,
..._chatlist,
..._contact,
..._conversation,
+ ..._generalSettings,
..._inboxMgmt,
+ ..._integrations,
+ ..._labelsMgmt,
..._login,
..._report,
- ..._labelsMgmt,
..._resetPassword,
..._setNewPassword,
..._settings,
..._signup,
- ..._integrations,
- ..._generalSettings,
+ ..._teamsSettings,
};
diff --git a/app/javascript/dashboard/i18n/locale/da/report.json b/app/javascript/dashboard/i18n/locale/da/report.json
index 44d645fbf20..3eeb40f7f6a 100644
--- a/app/javascript/dashboard/i18n/locale/da/report.json
+++ b/app/javascript/dashboard/i18n/locale/da/report.json
@@ -38,6 +38,18 @@
{
"id": 1,
"name": "Seneste 30 dage"
+ },
+ {
+ "id": 2,
+ "name": "Last 3 months"
+ },
+ {
+ "id": 3,
+ "name": "Last 6 months"
+ },
+ {
+ "id": 4,
+ "name": "Last year"
}
]
}
diff --git a/app/javascript/dashboard/i18n/locale/de/campaign.json b/app/javascript/dashboard/i18n/locale/de/campaign.json
new file mode 100644
index 00000000000..18b8cfe4cc7
--- /dev/null
+++ b/app/javascript/dashboard/i18n/locale/de/campaign.json
@@ -0,0 +1,79 @@
+{
+ "CAMPAIGN": {
+ "HEADER": "Kampagnen",
+ "SIDEBAR_TXT": "Proaktive Nachrichten erlauben dem Kunden, ausgehende Nachrichten an seine Kontakte zu senden, was weitere Unterhaltungen auslösen würde. Klicke auf Kampagne hinzufügen um eine neue Kampagne zu erstellen. Sie können auch eine bestehende Kampagne bearbeiten oder löschen, indem Sie auf die Schaltfläche Bearbeiten oder Löschen klicken.",
+ "HEADER_BTN_TXT": "Kampagne erstellen",
+ "ADD": {
+ "TITLE": "Kampagne erstellen",
+ "DESC": "Proaktive Nachrichten erlauben dem Kunden, ausgehende Nachrichten an seine Kontakte zu senden, was weitere Unterhaltungen auslösen würde.",
+ "CANCEL_BUTTON_TEXT": "Stornieren",
+ "CREATE_BUTTON_TEXT": "Erstellen",
+ "FORM": {
+ "TITLE": {
+ "LABEL": "Titel",
+ "PLACEHOLDER": "Bitte geben Sie den Titel der Kampagne ein",
+ "ERROR": "Titel ist erforderlich"
+ },
+ "MESSAGE": {
+ "LABEL": "Nachricht",
+ "PLACEHOLDER": "Bitte geben Sie die Nachricht der Kampagne ein",
+ "ERROR": "Nachricht ist erforderlich"
+ },
+ "SENT_BY": {
+ "LABEL": "Gesendet von",
+ "PLACEHOLDER": "Bitte wählen Sie den Inhalt der Kampagne aus",
+ "ERROR": "Absender ist erforderlich"
+ },
+ "END_POINT": {
+ "LABEL": "URL",
+ "PLACEHOLDER": "Bitte URL eingeben",
+ "ERROR": "Bitte geben Sie eine gültige URL ein"
+ },
+ "TIME_ON_PAGE": {
+ "LABEL": "Zeit auf Seite (Sekunden)",
+ "PLACEHOLDER": "Bitte die Uhrzeit eingeben",
+ "ERROR": "Uhrzeit auf Seite ist erforderlich"
+ },
+ "ENABLED": "Kampagne aktivieren",
+ "SUBMIT": "Kampagne hinzufügen"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Kampagne erfolgreich erstellt",
+ "ERROR_MESSAGE": "Es ist ein Fehler aufgetreten, bitte versuchen Sie es erneut."
+ }
+ },
+ "EDIT": {
+ "TITLE": "Kampagne bearbeiten",
+ "UPDATE_BUTTON_TEXT": "Aktualisieren",
+ "API": {
+ "SUCCESS_MESSAGE": "Kampagne erfolgreich aktualisiert",
+ "ERROR_MESSAGE": "Es ist ein Fehler aufgetreten, bitte versuchen Sie es erneut"
+ }
+ },
+ "LIST": {
+ "LOADING_MESSAGE": "Lade Kampagnen...",
+ "404": "There are no campaigns created for this inbox.",
+ "TABLE_HEADER": {
+ "TITLE": "Titel",
+ "MESSAGE": "Nachricht",
+ "STATUS": "Status",
+ "SENDER": "Absender",
+ "URL": "URL",
+ "TIME_ON_PAGE": "Zeit (Sekunden)",
+ "CREATED_AT": "Erstellt am"
+ },
+ "BUTTONS": {
+ "ADD": "Hinzufügen",
+ "EDIT": "Bearbeiten",
+ "DELETE": "Löschen"
+ },
+ "STATUS": {
+ "ENABLED": "Aktiviert",
+ "DISABLED": "Behindert"
+ },
+ "SENDER": {
+ "BOT": "Bot"
+ }
+ }
+ }
+}
diff --git a/app/javascript/dashboard/i18n/locale/de/chatlist.json b/app/javascript/dashboard/i18n/locale/de/chatlist.json
index 675427da400..874ed5f1924 100644
--- a/app/javascript/dashboard/i18n/locale/de/chatlist.json
+++ b/app/javascript/dashboard/i18n/locale/de/chatlist.json
@@ -80,6 +80,7 @@
"RECEIVED_VIA_EMAIL": "Per E-Mail empfangen",
"VIEW_TWEET_IN_TWITTER": "Tweet auf Twitter anzeigen",
"REPLY_TO_TWEET": "Auf diesen Tweet antworten",
- "NO_MESSAGES": "Keine Nachrichten"
+ "NO_MESSAGES": "Keine Nachrichten",
+ "NO_CONTENT": "Kein Inhalt verfügbar"
}
}
diff --git a/app/javascript/dashboard/i18n/locale/de/contact.json b/app/javascript/dashboard/i18n/locale/de/contact.json
index b208bc95b4f..341d905cbc4 100644
--- a/app/javascript/dashboard/i18n/locale/de/contact.json
+++ b/app/javascript/dashboard/i18n/locale/de/contact.json
@@ -12,7 +12,7 @@
"INITIATED_FROM": "Initiiert von",
"INITIATED_AT": "Initiiert bei",
"IP_ADDRESS": "IP-Adresse",
- "NEW_MESSAGE": "New message",
+ "NEW_MESSAGE": "Neue Nachricht",
"CONVERSATIONS": {
"NO_RECORDS_FOUND": "Es sind keine vorherigen Gespräche mit diesem Kontakt verbunden.",
"TITLE": "Vorherige Gespräche"
@@ -28,11 +28,17 @@
"INACTIVE_LABELS": "Verfügbare Labels im Konto",
"REMOVE": "Klicken Sie auf das X-Symbol, um das Label zu entfernen",
"ADD": "Klicken Sie auf das + Symbol, um ein Label hinzuzufügen",
+ "ADD_BUTTON": "Label hinzufügen",
"UPDATE_BUTTON": "Labels aktualisieren",
"UPDATE_ERROR": "Etiketten konnten nicht aktualisiert werden. Versuchen Sie es erneut."
},
"NO_LABELS_TO_ADD": "Es sind keine weiteren Labels im Konto definiert.",
- "NO_AVAILABLE_LABELS": "Zu dieser Unterhaltung wurden noch keine Labels hinzugefügt."
+ "NO_AVAILABLE_LABELS": "Zu dieser Unterhaltung wurden noch keine Labels hinzugefügt.",
+ "LABEL_SELECT": {
+ "TITLE": "Label hinzufügen",
+ "PLACEHOLDER": "Labels suchen",
+ "NO_RESULT": "Keine Labels gefunden"
+ }
},
"MUTE_CONTACT": "Unterhaltung stummschalten",
"UNMUTE_CONTACT": "Unterhaltung entmuten",
@@ -73,8 +79,8 @@
"PHONE_NUMBER": {
"PLACEHOLDER": "Geben Sie die Telefonnummer des Kontakts ein",
"LABEL": "Telefonnummer",
- "HELP": "Phone number should be of E.164 format eg: +1415555555 [+][country code][area code][local phone number]",
- "ERROR": "Phone number should be either empty or of E.164 format"
+ "HELP": "Telefonnummer sollte im E.164-Format sein, z. B.: +1415555555 [+][Landesvorwahl][Landesvorwahl][Ortsvorwahl]",
+ "ERROR": "Telefonnummer muss leer sein oder im E.164-Format"
},
"LOCATION": {
"PLACEHOLDER": "Geben Sie den Standort des Kontakts ein",
@@ -108,27 +114,27 @@
"ERROR_MESSAGE": "Es ist ein Fehler aufgetreten, bitte versuche es erneut"
},
"NEW_CONVERSATION": {
- "BUTTON_LABEL": "Start conversation",
+ "BUTTON_LABEL": "Gespräch starten",
"TITLE": "Neue Unterhaltung",
- "DESC": "Start a new conversation by sending a new message.",
- "NO_INBOX": "Couldn't find an inbox to initiate a new conversation with this contact.",
+ "DESC": "Starte eine Unterhaltung mit einer neuen Nachricht",
+ "NO_INBOX": "Konnte keinen Posteingang finden, um eine neue Unterhaltung mit diesem Kontakt zu starten.",
"FORM": {
"TO": {
- "LABEL": "To"
+ "LABEL": "An"
},
"INBOX": {
- "LABEL": "Inbox",
- "ERROR": "Select an inbox"
+ "LABEL": "Posteingang",
+ "ERROR": "Posteingang auswählen"
},
"MESSAGE": {
"LABEL": "Nachricht",
- "PLACEHOLDER": "Write your message here",
- "ERROR": "Message can't be empty"
+ "PLACEHOLDER": "Schreiben Sie Ihre Nachricht hier",
+ "ERROR": "Nachricht darf nicht leer sein"
},
- "SUBMIT": "Send message",
+ "SUBMIT": "Nachricht senden",
"CANCEL": "Stornieren",
- "SUCCESS_MESSAGE": "Message sent!",
- "ERROR_MESSAGE": "Couldn't send! try again"
+ "SUCCESS_MESSAGE": "Nachricht gesendet!",
+ "ERROR_MESSAGE": "Senden fehlgeschlagen! Bitte erneut versuchen"
}
},
"CONTACTS_PAGE": {
@@ -151,5 +157,18 @@
},
"VIEW_DETAILS": "Details anzeigen"
}
+ },
+ "NOTES": {
+ "HEADER": {
+ "TITLE": "Notizen"
+ },
+ "ADD": {
+ "BUTTON": "Hinzufügen",
+ "PLACEHOLDER": "Notiz hinzufügen",
+ "TITLE": "Shift + Enter um eine Notiz zu erstellen"
+ },
+ "FOOTER": {
+ "BUTTON": "Alle Notizen anzeigen"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/de/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/de/inboxMgmt.json
index 18dbd9505bd..36e162e7713 100644
--- a/app/javascript/dashboard/i18n/locale/de/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/de/inboxMgmt.json
@@ -227,6 +227,7 @@
"SETTINGS": "Einstellungen",
"COLLABORATORS": "Mitarbeitende",
"CONFIGURATION": "Konfiguration",
+ "CAMPAIGN": "Kampagnen",
"PRE_CHAT_FORM": "Pre-Chat-Formular",
"BUSINESS_HOURS": "Öffnungszeiten"
},
diff --git a/app/javascript/dashboard/i18n/locale/de/index.js b/app/javascript/dashboard/i18n/locale/de/index.js
index 5dfc44e4b47..cf1dda7fe57 100644
--- a/app/javascript/dashboard/i18n/locale/de/index.js
+++ b/app/javascript/dashboard/i18n/locale/de/index.js
@@ -1,33 +1,37 @@
import { default as _agentMgmt } from './agentMgmt.json';
-import { default as _labelsMgmt } from './labelsMgmt.json';
+import { default as _campaign } from './campaign.json';
import { default as _cannedMgmt } from './cannedMgmt.json';
import { default as _chatlist } from './chatlist.json';
import { default as _contact } from './contact.json';
import { default as _conversation } from './conversation.json';
+import { default as _generalSettings } from './generalSettings.json';
import { default as _inboxMgmt } from './inboxMgmt.json';
+import { default as _integrations } from './integrations.json';
+import { default as _labelsMgmt } from './labelsMgmt.json';
import { default as _login } from './login.json';
import { default as _report } from './report.json';
import { default as _resetPassword } from './resetPassword.json';
import { default as _setNewPassword } from './setNewPassword.json';
import { default as _settings } from './settings.json';
import { default as _signup } from './signup.json';
-import { default as _integrations } from './integrations.json';
-import { default as _generalSettings } from './generalSettings.json';
+import { default as _teamsSettings } from './teamsSettings.json';
export default {
..._agentMgmt,
+ ..._campaign,
..._cannedMgmt,
..._chatlist,
..._contact,
..._conversation,
+ ..._generalSettings,
..._inboxMgmt,
+ ..._integrations,
+ ..._labelsMgmt,
..._login,
..._report,
- ..._labelsMgmt,
..._resetPassword,
..._setNewPassword,
..._settings,
..._signup,
- ..._integrations,
- ..._generalSettings,
+ ..._teamsSettings,
};
diff --git a/app/javascript/dashboard/i18n/locale/de/report.json b/app/javascript/dashboard/i18n/locale/de/report.json
index 6afde7b6860..0d458f43c3e 100644
--- a/app/javascript/dashboard/i18n/locale/de/report.json
+++ b/app/javascript/dashboard/i18n/locale/de/report.json
@@ -38,6 +38,18 @@
{
"id": 1,
"name": "Letzte 30 Tage"
+ },
+ {
+ "id": 2,
+ "name": "Last 3 months"
+ },
+ {
+ "id": 3,
+ "name": "Last 6 months"
+ },
+ {
+ "id": 4,
+ "name": "Last year"
}
]
}
diff --git a/app/javascript/dashboard/i18n/locale/de/teamsSettings.json b/app/javascript/dashboard/i18n/locale/de/teamsSettings.json
index 1efb940b6c7..780baf22533 100644
--- a/app/javascript/dashboard/i18n/locale/de/teamsSettings.json
+++ b/app/javascript/dashboard/i18n/locale/de/teamsSettings.json
@@ -43,7 +43,7 @@
},
"AGENTS": {
"BUTTON_TEXT": "Agenten im Team aktualisieren",
- "TITLE": "Agenten zu Team hinzufügen - %{teamName}",
+ "TITLE": "Agenten zu Team %{teamName} hinzufügen",
"DESC": "Fügen Sie Agenten zu Ihrem neu erstellten Team hinzu. Alle hinzugefügten Agenten werden benachrichtigt, wenn diesem Team eine Unterhaltung zugewiesen wird."
},
"WIZARD": [
@@ -77,8 +77,8 @@
"SELECTED_COUNT": "%{selected} von %{total} Agenten ausgewählt."
},
"ADD": {
- "TITLE": "Agenten zu Team hinzufügen - %{teamName}",
- "DESC": "Fügen Sie Agenten zu Ihrem neu erstellten Team hinzu. So können Sie bei Gesprächen als Team zusammenarbeiten, erhalten Sie Benachrichtigungen über neue Ereignisse in der gleichen Unterhaltung.",
+ "TITLE": "Agenten zu Team %{teamName} hinzufügen",
+ "DESC": "Fügen Sie Agenten zu Ihrem neu erstellten Team hinzu. So können Sie bei Gesprächen als Team zusammenarbeiten und erhalten Benachrichtigungen über neue Ereignisse in der gleichen Unterhaltung.",
"SELECT": "auswählen",
"SELECT_ALL": "alle Agenten auswählen",
"SELECTED_COUNT": "%{selected} von %{total} Agenten ausgewählt.",
diff --git a/app/javascript/dashboard/i18n/locale/el/campaign.json b/app/javascript/dashboard/i18n/locale/el/campaign.json
new file mode 100644
index 00000000000..b44520dd463
--- /dev/null
+++ b/app/javascript/dashboard/i18n/locale/el/campaign.json
@@ -0,0 +1,79 @@
+{
+ "CAMPAIGN": {
+ "HEADER": "Καμπάνιες",
+ "SIDEBAR_TXT": "Τα προληπτικά μηνύματα επιτρέπουν την αποστολή εξερχόμενων μηνυμάτων στις επαφές, που θα ενεργοποιούν περισσότερες συνομιλίες. Κάντε κλικ στο Προσθήκη Καμπάνιας για να δημιουργήσετε μια νέα καμπάνια. Μπορείτε επίσης να επεξεργαστείτε ή να διαγράψετε μια ήδη υπάρχουσα καμπάνια κάνοντας κλικ στο κουμπί Επεξεργασία ή Διαγραφή.",
+ "HEADER_BTN_TXT": "Δημιουργία Καμπάνιας",
+ "ADD": {
+ "TITLE": "Δημιουργία Καμπάνιας",
+ "DESC": "Τα προληπτικά μηνύματα επιτρέπουν την αποστολή εξερχόμενων μηνυμάτων στις επαφές, που θα ενεργοποιούν περισσότερες συνομιλίες.",
+ "CANCEL_BUTTON_TEXT": "Άκυρο",
+ "CREATE_BUTTON_TEXT": "Δημιουργία",
+ "FORM": {
+ "TITLE": {
+ "LABEL": "Τίτλος",
+ "PLACEHOLDER": "Παρακαλώ εισάγετε τον τίτλο της καμπάνιας",
+ "ERROR": "Ο τίτλος είναι απαραίτητος"
+ },
+ "MESSAGE": {
+ "LABEL": "Μήνυμα",
+ "PLACEHOLDER": "Παρακαλώ εισάγετε το μήνυμα της καμπάνιας",
+ "ERROR": "Το μήνυμα είναι απαραίτητο"
+ },
+ "SENT_BY": {
+ "LABEL": "Αποστολή από",
+ "PLACEHOLDER": "Παρακαλώ επιλέξτε το περιεχόμενο της καμπάνιας",
+ "ERROR": "Ο αποστολέας είναι απαραίτητος"
+ },
+ "END_POINT": {
+ "LABEL": "URL",
+ "PLACEHOLDER": "Παρακαλώ εισάγετε το URL",
+ "ERROR": "Παρακαλώ εισάγετε ένα έγκυρο URL"
+ },
+ "TIME_ON_PAGE": {
+ "LABEL": "Χρόνος στη σελίδα(δευτερόλεπτα)",
+ "PLACEHOLDER": "Παρακαλώ εισάγετε το χρόνο",
+ "ERROR": "Ο χρόνος στη σελίδα είναι απαραίτητος"
+ },
+ "ENABLED": "Ενεργοποίηση καμπάνιας",
+ "SUBMIT": "Προσθήκη Καμπάνιας"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Η καμπάνια δημιουργήθηκε επιτυχώς",
+ "ERROR_MESSAGE": "Παρουσιάστηκε σφάλμα. Παρακαλώ δοκιμάστε ξανά."
+ }
+ },
+ "EDIT": {
+ "TITLE": "Edit campaign",
+ "UPDATE_BUTTON_TEXT": "Ενημέρωση",
+ "API": {
+ "SUCCESS_MESSAGE": "Campaign updated successfully",
+ "ERROR_MESSAGE": "Υπήρξε ένα σφάλμα, παρακαλώ προσπαθήστε ξανά"
+ }
+ },
+ "LIST": {
+ "LOADING_MESSAGE": "Φόρτωση καμπάνιας...",
+ "404": "Δεν υπάρχουν εκστρατείες για αυτό το κιβώτιο εισερχόμενων.",
+ "TABLE_HEADER": {
+ "TITLE": "Τίτλος",
+ "MESSAGE": "Μήνυμα",
+ "STATUS": "Κατάσταση",
+ "SENDER": "Αποστολέας",
+ "URL": "URL",
+ "TIME_ON_PAGE": "Χρόνος (δευτερόλεπτα)",
+ "CREATED_AT": "Δημιουργήθηκε στις"
+ },
+ "BUTTONS": {
+ "ADD": "Προσθήκη",
+ "EDIT": "Επεξεργασία",
+ "DELETE": "Διαγραφή"
+ },
+ "STATUS": {
+ "ENABLED": "Ενεργό",
+ "DISABLED": "Ανενεργό"
+ },
+ "SENDER": {
+ "BOT": "Bot"
+ }
+ }
+ }
+}
diff --git a/app/javascript/dashboard/i18n/locale/el/chatlist.json b/app/javascript/dashboard/i18n/locale/el/chatlist.json
index 23eee7635de..eb068a51e6e 100644
--- a/app/javascript/dashboard/i18n/locale/el/chatlist.json
+++ b/app/javascript/dashboard/i18n/locale/el/chatlist.json
@@ -80,6 +80,7 @@
"RECEIVED_VIA_EMAIL": "Παραλήφθηκε από email",
"VIEW_TWEET_IN_TWITTER": "Προβολή του tweet στο Twitter",
"REPLY_TO_TWEET": "Απάντηση στο tweet",
- "NO_MESSAGES": "Κανένα Μήνυμα"
+ "NO_MESSAGES": "Κανένα Μήνυμα",
+ "NO_CONTENT": "Μη διαθέσιμο περιεχόμενο"
}
}
diff --git a/app/javascript/dashboard/i18n/locale/el/contact.json b/app/javascript/dashboard/i18n/locale/el/contact.json
index a296c8d7721..03af6312f0b 100644
--- a/app/javascript/dashboard/i18n/locale/el/contact.json
+++ b/app/javascript/dashboard/i18n/locale/el/contact.json
@@ -12,7 +12,7 @@
"INITIATED_FROM": "Αρχικοποίηση από",
"INITIATED_AT": "Αρχικοποίηση τις",
"IP_ADDRESS": "Διεύθυνση IP",
- "NEW_MESSAGE": "New message",
+ "NEW_MESSAGE": "Νέο Μήνυμα",
"CONVERSATIONS": {
"NO_RECORDS_FOUND": "Δεν υπάρχουν προηγούμενες συνομιλίες που σχετίζονται με αυτήν την επαφή.",
"TITLE": "Προηγούμενες συνομιλίες"
@@ -28,11 +28,17 @@
"INACTIVE_LABELS": "Υπάρχουν διαθέσιμες ετικέτες στον λογαριασμό",
"REMOVE": "Πατήστε στο εικονίδιο X για να απομακρύνετε την ετικέτα",
"ADD": "Πατήστε στο εικονίδιο + για να προσθέστε την ετικέτα",
+ "ADD_BUTTON": "Add Labels",
"UPDATE_BUTTON": "Ενημέρωση Ετικετών",
"UPDATE_ERROR": "Δεν μπορούν να ενημερωθούν οι ετικέτες, προσπαθήστε ξανά."
},
"NO_LABELS_TO_ADD": "Δεν υπάρχουν άλλες ετικέτες στον λογαριασμό.",
- "NO_AVAILABLE_LABELS": "Δεν υπάρχουν προστεθεί ετικέτες στην συνομιλία."
+ "NO_AVAILABLE_LABELS": "Δεν υπάρχουν προστεθεί ετικέτες στην συνομιλία.",
+ "LABEL_SELECT": {
+ "TITLE": "Add Labels",
+ "PLACEHOLDER": "Search labels",
+ "NO_RESULT": "No labels found"
+ }
},
"MUTE_CONTACT": "Σίγαση Συνομιλίας",
"UNMUTE_CONTACT": "Επαναφορά Συνομιλίας",
@@ -108,27 +114,27 @@
"ERROR_MESSAGE": "Υπήρξε ένα σφάλμα, παρακαλώ προσπαθήστε ξανά"
},
"NEW_CONVERSATION": {
- "BUTTON_LABEL": "Start conversation",
+ "BUTTON_LABEL": "Έναρξη Συνομιλίας",
"TITLE": "Νέα συνομιλία",
- "DESC": "Start a new conversation by sending a new message.",
- "NO_INBOX": "Couldn't find an inbox to initiate a new conversation with this contact.",
+ "DESC": "Ξεκινήστε μια νέα συνομιλία στέλνοντας ένα νέο μήνυμα.",
+ "NO_INBOX": "Δεν βρέθηκε ένα κιβώτιο εισερχόμενων για να ξεκινήσει μια νέα συνομιλία με αυτήν την επαφή.",
"FORM": {
"TO": {
- "LABEL": "To"
+ "LABEL": "Προς"
},
"INBOX": {
- "LABEL": "Inbox",
- "ERROR": "Select an inbox"
+ "LABEL": "Εισερχόμενα",
+ "ERROR": "Επιλέξτε ένα κιβώτιο εισερχόμενων"
},
"MESSAGE": {
"LABEL": "Μήνυμα",
- "PLACEHOLDER": "Write your message here",
- "ERROR": "Message can't be empty"
+ "PLACEHOLDER": "Γράψτε το μήνυμά σας εδώ",
+ "ERROR": "Το μήνυμα δεν μπορεί να είναι άδειο"
},
- "SUBMIT": "Send message",
+ "SUBMIT": "Αποστολή μηνύματος",
"CANCEL": "Άκυρο",
- "SUCCESS_MESSAGE": "Message sent!",
- "ERROR_MESSAGE": "Couldn't send! try again"
+ "SUCCESS_MESSAGE": "Το μήνυμα στάλθηκε!",
+ "ERROR_MESSAGE": "Αδυναμία αποστολής! Προσπαθήστε ξανά"
}
},
"CONTACTS_PAGE": {
@@ -151,5 +157,18 @@
},
"VIEW_DETAILS": "Προβολή λεπτομεριών"
}
+ },
+ "NOTES": {
+ "HEADER": {
+ "TITLE": "Σημειώσεις"
+ },
+ "ADD": {
+ "BUTTON": "Προσθήκη",
+ "PLACEHOLDER": "Προσθήκη σημείωσης",
+ "TITLE": "Shift + Enter για δημιουργία σημείωσης"
+ },
+ "FOOTER": {
+ "BUTTON": "Εμφάνιση όλων των σημειώσεων"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/el/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/el/inboxMgmt.json
index f5a13e3a7c1..38a134024f6 100644
--- a/app/javascript/dashboard/i18n/locale/el/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/el/inboxMgmt.json
@@ -92,7 +92,7 @@
"DESC": "Ενσωματώστε το Twilio και αρχίστε να υποστηρίζετε τους πελάτες σας μέσω SMS.",
"ACCOUNT_SID": {
"LABEL": "SID Λογαριασμού",
- "PLACEHOLDER": "Παρακαλώ εισάγετε το SID του Λογαριασμού Twillio",
+ "PLACEHOLDER": "Παρακαλώ εισάγετε το SID του Λογαριασμού Twilio",
"ERROR": "Το πεδίο είναι απαραίτητο"
},
"CHANNEL_TYPE": {
@@ -118,7 +118,7 @@
"TITLE": "URL επανάκλησης",
"SUBTITLE": "Πρέπει να ρυθμίσετε το callback URL στο Twilio με το URL που αναφέρεται εδώ."
},
- "SUBMIT_BUTTON": "Δημιουργία Καναλιού Twillio",
+ "SUBMIT_BUTTON": "Δημιουργία Καναλιού Twilio",
"API": {
"ERROR_MESSAGE": "Δεν ήταν δυνατή η πιστοποίηση των διαπιστευτηρίων Twilio. Δοκιμάστε ξανά"
}
@@ -227,6 +227,7 @@
"SETTINGS": "Ρυθμίσεις",
"COLLABORATORS": "Συνεργάτες",
"CONFIGURATION": "Διαμόρφωση",
+ "CAMPAIGN": "Καμπάνιες",
"PRE_CHAT_FORM": "Φόρμα Προ-Συνομιλίας",
"BUSINESS_HOURS": "Ώρες Εργασίας"
},
diff --git a/app/javascript/dashboard/i18n/locale/el/index.js b/app/javascript/dashboard/i18n/locale/el/index.js
index 5dfc44e4b47..cf1dda7fe57 100644
--- a/app/javascript/dashboard/i18n/locale/el/index.js
+++ b/app/javascript/dashboard/i18n/locale/el/index.js
@@ -1,33 +1,37 @@
import { default as _agentMgmt } from './agentMgmt.json';
-import { default as _labelsMgmt } from './labelsMgmt.json';
+import { default as _campaign } from './campaign.json';
import { default as _cannedMgmt } from './cannedMgmt.json';
import { default as _chatlist } from './chatlist.json';
import { default as _contact } from './contact.json';
import { default as _conversation } from './conversation.json';
+import { default as _generalSettings } from './generalSettings.json';
import { default as _inboxMgmt } from './inboxMgmt.json';
+import { default as _integrations } from './integrations.json';
+import { default as _labelsMgmt } from './labelsMgmt.json';
import { default as _login } from './login.json';
import { default as _report } from './report.json';
import { default as _resetPassword } from './resetPassword.json';
import { default as _setNewPassword } from './setNewPassword.json';
import { default as _settings } from './settings.json';
import { default as _signup } from './signup.json';
-import { default as _integrations } from './integrations.json';
-import { default as _generalSettings } from './generalSettings.json';
+import { default as _teamsSettings } from './teamsSettings.json';
export default {
..._agentMgmt,
+ ..._campaign,
..._cannedMgmt,
..._chatlist,
..._contact,
..._conversation,
+ ..._generalSettings,
..._inboxMgmt,
+ ..._integrations,
+ ..._labelsMgmt,
..._login,
..._report,
- ..._labelsMgmt,
..._resetPassword,
..._setNewPassword,
..._settings,
..._signup,
- ..._integrations,
- ..._generalSettings,
+ ..._teamsSettings,
};
diff --git a/app/javascript/dashboard/i18n/locale/el/report.json b/app/javascript/dashboard/i18n/locale/el/report.json
index 1878b6e050e..62cf653bbbb 100644
--- a/app/javascript/dashboard/i18n/locale/el/report.json
+++ b/app/javascript/dashboard/i18n/locale/el/report.json
@@ -38,6 +38,18 @@
{
"id": 1,
"name": "Τελευταίες 30 ημέρες"
+ },
+ {
+ "id": 2,
+ "name": "Τελευταίοι 3 μήνες"
+ },
+ {
+ "id": 3,
+ "name": "Τελευταίοι 6 μήνες"
+ },
+ {
+ "id": 4,
+ "name": "Τελευταίο έτος"
}
]
}
diff --git a/app/javascript/dashboard/i18n/locale/en/campaign.json b/app/javascript/dashboard/i18n/locale/en/campaign.json
new file mode 100644
index 00000000000..2eed61b1929
--- /dev/null
+++ b/app/javascript/dashboard/i18n/locale/en/campaign.json
@@ -0,0 +1,79 @@
+{
+ "CAMPAIGN": {
+ "HEADER": "Campaigns",
+ "SIDEBAR_TXT": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations. Click on Add Campaign to create a new campaign. You can also edit or delete an existing campaign by clicking on the Edit or Delete button.",
+ "HEADER_BTN_TXT": "Create a campaign",
+ "ADD": {
+ "TITLE": "Create a campaign",
+ "DESC": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations.",
+ "CANCEL_BUTTON_TEXT": "Cancel",
+ "CREATE_BUTTON_TEXT": "Create",
+ "FORM": {
+ "TITLE": {
+ "LABEL": "Title",
+ "PLACEHOLDER": "Please enter the title of campaign",
+ "ERROR": "Title is required"
+ },
+ "MESSAGE": {
+ "LABEL": "Message",
+ "PLACEHOLDER": "Please enter the message of campaign",
+ "ERROR": "Message is required"
+ },
+ "SENT_BY": {
+ "LABEL": "Sent by",
+ "PLACEHOLDER": "Please select the the content of campaign",
+ "ERROR": "Sender is required"
+ },
+ "END_POINT": {
+ "LABEL": "URL",
+ "PLACEHOLDER": "Please enter the URL",
+ "ERROR": "Please enter a valid URL"
+ },
+ "TIME_ON_PAGE": {
+ "LABEL": "Time on page(Seconds)",
+ "PLACEHOLDER": "Please enter the time",
+ "ERROR": "Time on page is required"
+ },
+ "ENABLED": "Enable campaign",
+ "SUBMIT": "Add Campaign"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Campaign created successfully",
+ "ERROR_MESSAGE": "There was an error. Please try again."
+ }
+ },
+ "EDIT": {
+ "TITLE": "Edit campaign",
+ "UPDATE_BUTTON_TEXT": "Update",
+ "API": {
+ "SUCCESS_MESSAGE": "Campaign updated successfully",
+ "ERROR_MESSAGE": "There was an error, please try again"
+ }
+ },
+ "LIST": {
+ "LOADING_MESSAGE": "Loading campaigns...",
+ "404": "There are no campaigns created for this inbox.",
+ "TABLE_HEADER": {
+ "TITLE": "Title",
+ "MESSAGE": "Message",
+ "STATUS": "Status",
+ "SENDER": "Sender",
+ "URL": "URL",
+ "TIME_ON_PAGE": "Time(Seconds)",
+ "CREATED_AT": "Created at"
+ },
+ "BUTTONS": {
+ "ADD": "Add",
+ "EDIT": "Edit",
+ "DELETE": "Delete"
+ },
+ "STATUS": {
+ "ENABLED": "Enabled",
+ "DISABLED": "Disabled"
+ },
+ "SENDER": {
+ "BOT": "Bot"
+ }
+ }
+ }
+}
diff --git a/app/javascript/dashboard/i18n/locale/en/chatlist.json b/app/javascript/dashboard/i18n/locale/en/chatlist.json
index 2285547890f..ef4e0629ac2 100644
--- a/app/javascript/dashboard/i18n/locale/en/chatlist.json
+++ b/app/javascript/dashboard/i18n/locale/en/chatlist.json
@@ -80,6 +80,7 @@
"RECEIVED_VIA_EMAIL": "Received via email",
"VIEW_TWEET_IN_TWITTER": "View tweet in Twitter",
"REPLY_TO_TWEET": "Reply to this tweet",
- "NO_MESSAGES": "No Messages"
+ "NO_MESSAGES": "No Messages",
+ "NO_CONTENT": "No content available"
}
}
diff --git a/app/javascript/dashboard/i18n/locale/en/contact.json b/app/javascript/dashboard/i18n/locale/en/contact.json
index b8d936d220a..6a94011a52a 100644
--- a/app/javascript/dashboard/i18n/locale/en/contact.json
+++ b/app/javascript/dashboard/i18n/locale/en/contact.json
@@ -28,11 +28,17 @@
"INACTIVE_LABELS": "Labels available in the account",
"REMOVE": "Click on X icon to remove the label",
"ADD": "Click on + icon to add the label",
+ "ADD_BUTTON": "Add Labels",
"UPDATE_BUTTON": "Update labels",
"UPDATE_ERROR": "Couldn't update labels, try again."
},
"NO_LABELS_TO_ADD": "There are no more labels defined in the account.",
- "NO_AVAILABLE_LABELS": "There are no labels added to this conversation."
+ "NO_AVAILABLE_LABELS": "There are no labels added to this conversation.",
+ "LABEL_SELECT": {
+ "TITLE": "Add Labels",
+ "PLACEHOLDER": "Search labels",
+ "NO_RESULT": "No labels found"
+ }
},
"MUTE_CONTACT": "Mute Conversation",
"UNMUTE_CONTACT": "Unmute Conversation",
@@ -151,5 +157,18 @@
},
"VIEW_DETAILS": "View details"
}
+ },
+ "NOTES": {
+ "HEADER": {
+ "TITLE": "Notes"
+ },
+ "ADD": {
+ "BUTTON": "Add",
+ "PLACEHOLDER": "Add a note",
+ "TITLE": "Shift + Enter to create a note"
+ },
+ "FOOTER": {
+ "BUTTON": "View all notes"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/en/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/en/inboxMgmt.json
index a1184f5db7e..4d0fcdffc41 100644
--- a/app/javascript/dashboard/i18n/locale/en/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/en/inboxMgmt.json
@@ -227,6 +227,7 @@
"SETTINGS": "Settings",
"COLLABORATORS": "Collaborators",
"CONFIGURATION": "Configuration",
+ "CAMPAIGN": "Campaigns",
"PRE_CHAT_FORM": "Pre Chat Form",
"BUSINESS_HOURS": "Business Hours"
},
diff --git a/app/javascript/dashboard/i18n/locale/en/index.js b/app/javascript/dashboard/i18n/locale/en/index.js
index 53d1438c297..cf1dda7fe57 100644
--- a/app/javascript/dashboard/i18n/locale/en/index.js
+++ b/app/javascript/dashboard/i18n/locale/en/index.js
@@ -1,35 +1,37 @@
import { default as _agentMgmt } from './agentMgmt.json';
-import { default as _labelsMgmt } from './labelsMgmt.json';
+import { default as _campaign } from './campaign.json';
import { default as _cannedMgmt } from './cannedMgmt.json';
import { default as _chatlist } from './chatlist.json';
import { default as _contact } from './contact.json';
import { default as _conversation } from './conversation.json';
+import { default as _generalSettings } from './generalSettings.json';
import { default as _inboxMgmt } from './inboxMgmt.json';
+import { default as _integrations } from './integrations.json';
+import { default as _labelsMgmt } from './labelsMgmt.json';
import { default as _login } from './login.json';
import { default as _report } from './report.json';
import { default as _resetPassword } from './resetPassword.json';
import { default as _setNewPassword } from './setNewPassword.json';
import { default as _settings } from './settings.json';
import { default as _signup } from './signup.json';
-import { default as _integrations } from './integrations.json';
-import { default as _generalSettings } from './generalSettings.json';
import { default as _teamsSettings } from './teamsSettings.json';
export default {
..._agentMgmt,
+ ..._campaign,
..._cannedMgmt,
..._chatlist,
..._contact,
..._conversation,
+ ..._generalSettings,
..._inboxMgmt,
+ ..._integrations,
+ ..._labelsMgmt,
..._login,
..._report,
- ..._labelsMgmt,
..._resetPassword,
..._setNewPassword,
..._settings,
..._signup,
- ..._integrations,
- ..._generalSettings,
..._teamsSettings,
};
diff --git a/app/javascript/dashboard/i18n/locale/en/report.json b/app/javascript/dashboard/i18n/locale/en/report.json
index 22e4a1c7520..cf2c14a57f9 100644
--- a/app/javascript/dashboard/i18n/locale/en/report.json
+++ b/app/javascript/dashboard/i18n/locale/en/report.json
@@ -38,6 +38,18 @@
{
"id": 1,
"name": "Last 30 days"
+ },
+ {
+ "id": 2,
+ "name": "Last 3 months"
+ },
+ {
+ "id": 3,
+ "name": "Last 6 months"
+ },
+ {
+ "id": 4,
+ "name": "Last year"
}
]
}
diff --git a/app/javascript/dashboard/i18n/locale/es/campaign.json b/app/javascript/dashboard/i18n/locale/es/campaign.json
new file mode 100644
index 00000000000..2c11ca20e01
--- /dev/null
+++ b/app/javascript/dashboard/i18n/locale/es/campaign.json
@@ -0,0 +1,79 @@
+{
+ "CAMPAIGN": {
+ "HEADER": "Campañas",
+ "SIDEBAR_TXT": "Los mensajes proactivos permiten al cliente enviar mensajes a sus contactos, lo que generaría más conversaciones. Haga clic en Añadir Campaña para crear una nueva campaña. También puede editar o borrar una campaña existente haciendo clic en el botón de Editar o Borrar.",
+ "HEADER_BTN_TXT": "Crear campaña",
+ "ADD": {
+ "TITLE": "Crear campaña",
+ "DESC": "Los mensajes proactivos permiten al cliente enviar mensajes a sus contactos, lo que generaría más conversaciones.",
+ "CANCEL_BUTTON_TEXT": "Cancelar",
+ "CREATE_BUTTON_TEXT": "Crear",
+ "FORM": {
+ "TITLE": {
+ "LABEL": "Título",
+ "PLACEHOLDER": "Por favor escriba un título para la campaña",
+ "ERROR": "El título es obligatorio"
+ },
+ "MESSAGE": {
+ "LABEL": "Mensaje",
+ "PLACEHOLDER": "Por favor escriba el mensaje para la campaña",
+ "ERROR": "El mensaje es obligatorio"
+ },
+ "SENT_BY": {
+ "LABEL": "Enviado por",
+ "PLACEHOLDER": "Por favor seleccione el contenido de la campaña",
+ "ERROR": "El remitente es obligatorio"
+ },
+ "END_POINT": {
+ "LABEL": "URL",
+ "PLACEHOLDER": "Por favor escriba el URL",
+ "ERROR": "Por favor, introduzca una URL válida"
+ },
+ "TIME_ON_PAGE": {
+ "LABEL": "Tiempo en la página (segundos)",
+ "PLACEHOLDER": "Por favor escriba la hora",
+ "ERROR": "La hora en la página es obligatoria"
+ },
+ "ENABLED": "Habilitar campaña",
+ "SUBMIT": "Añadir campaña"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "campaña creada satisfactoriamente",
+ "ERROR_MESSAGE": "Se presentó un error. Por favor intente nuevamente."
+ }
+ },
+ "EDIT": {
+ "TITLE": "Editar campaña",
+ "UPDATE_BUTTON_TEXT": "Actualizar",
+ "API": {
+ "SUCCESS_MESSAGE": "Campaña actualizada satisfactoriamente",
+ "ERROR_MESSAGE": "Hubo un error, por favor inténtelo de nuevo"
+ }
+ },
+ "LIST": {
+ "LOADING_MESSAGE": "Cargando campañas...",
+ "404": "No hay campañas creadas en esta bandeja.",
+ "TABLE_HEADER": {
+ "TITLE": "Título",
+ "MESSAGE": "Mensaje",
+ "STATUS": "Estado",
+ "SENDER": "Remitente",
+ "URL": "URL",
+ "TIME_ON_PAGE": "Tiempo (segundos)",
+ "CREATED_AT": "Creado el"
+ },
+ "BUTTONS": {
+ "ADD": "Añadir",
+ "EDIT": "Editar",
+ "DELETE": "Eliminar"
+ },
+ "STATUS": {
+ "ENABLED": "Activado",
+ "DISABLED": "Deshabilitado"
+ },
+ "SENDER": {
+ "BOT": "Bot"
+ }
+ }
+ }
+}
diff --git a/app/javascript/dashboard/i18n/locale/es/chatlist.json b/app/javascript/dashboard/i18n/locale/es/chatlist.json
index afab2cb25ab..a3be57b99aa 100644
--- a/app/javascript/dashboard/i18n/locale/es/chatlist.json
+++ b/app/javascript/dashboard/i18n/locale/es/chatlist.json
@@ -80,6 +80,7 @@
"RECEIVED_VIA_EMAIL": "Recibido por correo electrónico",
"VIEW_TWEET_IN_TWITTER": "Ver trino en Twitter",
"REPLY_TO_TWEET": "Responder a éste trino",
- "NO_MESSAGES": "No hay mensajes"
+ "NO_MESSAGES": "No hay mensajes",
+ "NO_CONTENT": "No hay contenido disponible"
}
}
diff --git a/app/javascript/dashboard/i18n/locale/es/contact.json b/app/javascript/dashboard/i18n/locale/es/contact.json
index 0f0a74ae63f..4b795bac15d 100644
--- a/app/javascript/dashboard/i18n/locale/es/contact.json
+++ b/app/javascript/dashboard/i18n/locale/es/contact.json
@@ -28,11 +28,17 @@
"INACTIVE_LABELS": "Etiquetas disponibles en la cuenta",
"REMOVE": "Haga clic en el icono X para quitar la etiqueta",
"ADD": "Haga clic en el icono + para añadir la etiqueta",
+ "ADD_BUTTON": "Añadir etiquetas",
"UPDATE_BUTTON": "Actualizar etiquetas",
"UPDATE_ERROR": "No se han podido actualizar las etiquetas, inténtelo de nuevo."
},
"NO_LABELS_TO_ADD": "No hay más etiquetas definidas en la cuenta.",
- "NO_AVAILABLE_LABELS": "No hay etiquetas añadidas a esta conversación."
+ "NO_AVAILABLE_LABELS": "No hay etiquetas añadidas a esta conversación.",
+ "LABEL_SELECT": {
+ "TITLE": "Añadir etiquetas",
+ "PLACEHOLDER": "Buscar etiquetas",
+ "NO_RESULT": "No se encontraron etiquetas"
+ }
},
"MUTE_CONTACT": "Silenciar Conversación",
"UNMUTE_CONTACT": "Dessilenciar conversación",
@@ -151,5 +157,18 @@
},
"VIEW_DETAILS": "Ver detalles"
}
+ },
+ "NOTES": {
+ "HEADER": {
+ "TITLE": "Notas"
+ },
+ "ADD": {
+ "BUTTON": "Añadir",
+ "PLACEHOLDER": "Añadir nota",
+ "TITLE": "Shift + Enter para crear una nota"
+ },
+ "FOOTER": {
+ "BUTTON": "Ver todas las notas"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/es/conversation.json b/app/javascript/dashboard/i18n/locale/es/conversation.json
index 02e72b9b960..580875007d4 100644
--- a/app/javascript/dashboard/i18n/locale/es/conversation.json
+++ b/app/javascript/dashboard/i18n/locale/es/conversation.json
@@ -11,7 +11,7 @@
"TITLE": "Buscar mensajes",
"LOADING_MESSAGE": "Cruzando datos...",
"PLACEHOLDER": "Escriba cualquier texto para buscar mensajes",
- "NO_MATCHING_RESULTS": "No results found."
+ "NO_MATCHING_RESULTS": "No se encontraron resultados."
},
"UNREAD_MESSAGES": "Mensajes no leídos",
"UNREAD_MESSAGE": "Mensaje sin leer",
@@ -57,7 +57,7 @@
"VISIBLE_TO_AGENTS": "Nota privada: solo visible para ti y tu equipo",
"CHANGE_STATUS": "Estado de la conversación cambiado",
"CHANGE_AGENT": "Conversación cambiada de asignatario",
- "CHANGE_TEAM": "Conversation team changed",
+ "CHANGE_TEAM": "Equipo de conversación cambiado",
"FILE_SIZE_LIMIT": "El archivo excede el límite de los archivos adjuntos {MAXIMUM_FILE_UPLOAD_SIZE}",
"SENT_BY": "Enviado por:",
"ASSIGNMENT": {
@@ -108,11 +108,11 @@
}
},
"CONVERSATION_SIDEBAR": {
- "DETAILS_TITLE": "Conversations Details",
- "ASSIGNEE_LABEL": "Assigned Agent",
- "TEAM_LABEL": "Assigned Team",
+ "DETAILS_TITLE": "Detalles de la conversación",
+ "ASSIGNEE_LABEL": "Agente asignado",
+ "TEAM_LABEL": "Equipo asignado",
"SELECT": {
- "PLACEHOLDER": "None"
+ "PLACEHOLDER": "Ninguna"
}
}
}
diff --git a/app/javascript/dashboard/i18n/locale/es/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/es/inboxMgmt.json
index ad233e6e997..0e4fa08249c 100644
--- a/app/javascript/dashboard/i18n/locale/es/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/es/inboxMgmt.json
@@ -227,6 +227,7 @@
"SETTINGS": "Ajustes",
"COLLABORATORS": "Colaboradores",
"CONFIGURATION": "Configuración",
+ "CAMPAIGN": "Campañas",
"PRE_CHAT_FORM": "Pre-formulario de chat",
"BUSINESS_HOURS": "Horarios"
},
diff --git a/app/javascript/dashboard/i18n/locale/es/index.js b/app/javascript/dashboard/i18n/locale/es/index.js
index 5dfc44e4b47..cf1dda7fe57 100644
--- a/app/javascript/dashboard/i18n/locale/es/index.js
+++ b/app/javascript/dashboard/i18n/locale/es/index.js
@@ -1,33 +1,37 @@
import { default as _agentMgmt } from './agentMgmt.json';
-import { default as _labelsMgmt } from './labelsMgmt.json';
+import { default as _campaign } from './campaign.json';
import { default as _cannedMgmt } from './cannedMgmt.json';
import { default as _chatlist } from './chatlist.json';
import { default as _contact } from './contact.json';
import { default as _conversation } from './conversation.json';
+import { default as _generalSettings } from './generalSettings.json';
import { default as _inboxMgmt } from './inboxMgmt.json';
+import { default as _integrations } from './integrations.json';
+import { default as _labelsMgmt } from './labelsMgmt.json';
import { default as _login } from './login.json';
import { default as _report } from './report.json';
import { default as _resetPassword } from './resetPassword.json';
import { default as _setNewPassword } from './setNewPassword.json';
import { default as _settings } from './settings.json';
import { default as _signup } from './signup.json';
-import { default as _integrations } from './integrations.json';
-import { default as _generalSettings } from './generalSettings.json';
+import { default as _teamsSettings } from './teamsSettings.json';
export default {
..._agentMgmt,
+ ..._campaign,
..._cannedMgmt,
..._chatlist,
..._contact,
..._conversation,
+ ..._generalSettings,
..._inboxMgmt,
+ ..._integrations,
+ ..._labelsMgmt,
..._login,
..._report,
- ..._labelsMgmt,
..._resetPassword,
..._setNewPassword,
..._settings,
..._signup,
- ..._integrations,
- ..._generalSettings,
+ ..._teamsSettings,
};
diff --git a/app/javascript/dashboard/i18n/locale/es/report.json b/app/javascript/dashboard/i18n/locale/es/report.json
index df62659a1d5..ec9cdacbd34 100644
--- a/app/javascript/dashboard/i18n/locale/es/report.json
+++ b/app/javascript/dashboard/i18n/locale/es/report.json
@@ -38,6 +38,18 @@
{
"id": 1,
"name": "Últimos 30 días"
+ },
+ {
+ "id": 2,
+ "name": "Últimos 3 meses"
+ },
+ {
+ "id": 3,
+ "name": "Últimos 6 meses"
+ },
+ {
+ "id": 4,
+ "name": "Último año"
}
]
}
diff --git a/app/javascript/dashboard/i18n/locale/es/settings.json b/app/javascript/dashboard/i18n/locale/es/settings.json
index a0fa85ab6e3..7eab5312261 100644
--- a/app/javascript/dashboard/i18n/locale/es/settings.json
+++ b/app/javascript/dashboard/i18n/locale/es/settings.json
@@ -3,7 +3,7 @@
"LINK": "Ajustes del perfil",
"TITLE": "Ajustes del perfil",
"BTN_TEXT": "Actualizar perfil",
- "UPDATE_SUCCESS": "Your profile has been updated successfully",
+ "UPDATE_SUCCESS": "Tu perfil se ha actualizado correctamente",
"PASSWORD_UPDATE_SUCCESS": "Su contraseña se ha cambiado correctamente",
"AFTER_EMAIL_CHANGED": "Su perfil ha sido actualizado con éxito, por favor inicie sesión de nuevo cuando sus credenciales de inicio de sesión se hayan cambiado",
"FORM": {
@@ -19,7 +19,7 @@
"PASSWORD_SECTION": {
"TITLE": "Contraseña",
"NOTE": "Actualizar tu contraseña restablecería tus entradas en varios dispositivos.",
- "BTN_TEXT": "Change password"
+ "BTN_TEXT": "Cambiar contraseña"
},
"ACCESS_TOKEN": {
"TITLE": "Token de acceso",
diff --git a/app/javascript/dashboard/i18n/locale/fa/campaign.json b/app/javascript/dashboard/i18n/locale/fa/campaign.json
new file mode 100644
index 00000000000..07ef8ee5ca6
--- /dev/null
+++ b/app/javascript/dashboard/i18n/locale/fa/campaign.json
@@ -0,0 +1,79 @@
+{
+ "CAMPAIGN": {
+ "HEADER": "Campaigns",
+ "SIDEBAR_TXT": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations. Click on Add Campaign to create a new campaign. You can also edit or delete an existing campaign by clicking on the Edit or Delete button.",
+ "HEADER_BTN_TXT": "Create a campaign",
+ "ADD": {
+ "TITLE": "Create a campaign",
+ "DESC": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations.",
+ "CANCEL_BUTTON_TEXT": "انصراف",
+ "CREATE_BUTTON_TEXT": "ايجاد كردن",
+ "FORM": {
+ "TITLE": {
+ "LABEL": "عنوان",
+ "PLACEHOLDER": "Please enter the title of campaign",
+ "ERROR": "Title is required"
+ },
+ "MESSAGE": {
+ "LABEL": "پیام",
+ "PLACEHOLDER": "Please enter the message of campaign",
+ "ERROR": "Message is required"
+ },
+ "SENT_BY": {
+ "LABEL": "ارسال شده توسط",
+ "PLACEHOLDER": "Please select the the content of campaign",
+ "ERROR": "Sender is required"
+ },
+ "END_POINT": {
+ "LABEL": "URL",
+ "PLACEHOLDER": "Please enter the URL",
+ "ERROR": "لطفا آدرس URL صحیحی وارد کنید"
+ },
+ "TIME_ON_PAGE": {
+ "LABEL": "Time on page(Seconds)",
+ "PLACEHOLDER": "Please enter the time",
+ "ERROR": "Time on page is required"
+ },
+ "ENABLED": "Enable campaign",
+ "SUBMIT": "Add Campaign"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Campaign created successfully",
+ "ERROR_MESSAGE": "There was an error. Please try again."
+ }
+ },
+ "EDIT": {
+ "TITLE": "Edit campaign",
+ "UPDATE_BUTTON_TEXT": "اعمال شود",
+ "API": {
+ "SUCCESS_MESSAGE": "Campaign updated successfully",
+ "ERROR_MESSAGE": "خطایی پیش آمد. لطفا دوباره امتحان کنید"
+ }
+ },
+ "LIST": {
+ "LOADING_MESSAGE": "Loading campaigns...",
+ "404": "There are no campaigns created for this inbox.",
+ "TABLE_HEADER": {
+ "TITLE": "عنوان",
+ "MESSAGE": "پیام",
+ "STATUS": "وضعیت",
+ "SENDER": "Sender",
+ "URL": "URL",
+ "TIME_ON_PAGE": "Time(Seconds)",
+ "CREATED_AT": "Created at"
+ },
+ "BUTTONS": {
+ "ADD": "افزودن",
+ "EDIT": "ویرایش",
+ "DELETE": "حذف"
+ },
+ "STATUS": {
+ "ENABLED": "فعال",
+ "DISABLED": "غیرفعال"
+ },
+ "SENDER": {
+ "BOT": "ربات"
+ }
+ }
+ }
+}
diff --git a/app/javascript/dashboard/i18n/locale/fa/chatlist.json b/app/javascript/dashboard/i18n/locale/fa/chatlist.json
index 5a5ac3d04ea..03fdf41d740 100644
--- a/app/javascript/dashboard/i18n/locale/fa/chatlist.json
+++ b/app/javascript/dashboard/i18n/locale/fa/chatlist.json
@@ -80,6 +80,7 @@
"RECEIVED_VIA_EMAIL": "از طریق ایمیل دریافت شد",
"VIEW_TWEET_IN_TWITTER": "مشاهده توییت در توییتر",
"REPLY_TO_TWEET": "پاسخ به این توییت",
- "NO_MESSAGES": "هیچ پیامی وجود ندارد"
+ "NO_MESSAGES": "هیچ پیامی وجود ندارد",
+ "NO_CONTENT": "هیچ محتوایی موجود نیست"
}
}
diff --git a/app/javascript/dashboard/i18n/locale/fa/contact.json b/app/javascript/dashboard/i18n/locale/fa/contact.json
index bc0d9c6305f..c95629749b0 100644
--- a/app/javascript/dashboard/i18n/locale/fa/contact.json
+++ b/app/javascript/dashboard/i18n/locale/fa/contact.json
@@ -28,11 +28,17 @@
"INACTIVE_LABELS": "برچسبهای موجود در حسابکاربری",
"REMOVE": "برای پاک کردن برچسب، روی آیکون X کلیک کنید",
"ADD": "برای افزودن برچسب بر روی آیکون + کلیک کنید",
+ "ADD_BUTTON": "افزودن برچسبها",
"UPDATE_BUTTON": "تغییر برچسبها",
"UPDATE_ERROR": "برچسبها تغییری نکردند، لطفا بعدا امتحان کنید."
},
"NO_LABELS_TO_ADD": "هیچ برچسبی در حسابکاربری تعریف نشده است.",
- "NO_AVAILABLE_LABELS": "هیچ برچسبی به این گفتگو اضافه نشده است."
+ "NO_AVAILABLE_LABELS": "هیچ برچسبی به این گفتگو اضافه نشده است.",
+ "LABEL_SELECT": {
+ "TITLE": "افزودن برچسبها",
+ "PLACEHOLDER": "جستجو برچسبها",
+ "NO_RESULT": "هیچ برچسبی یافت نشد"
+ }
},
"MUTE_CONTACT": "بیصدا کردن گفتگو",
"UNMUTE_CONTACT": "خارج کردن از حالت بی صدا",
@@ -151,5 +157,18 @@
},
"VIEW_DETAILS": "مشاهده جزئیات"
}
+ },
+ "NOTES": {
+ "HEADER": {
+ "TITLE": "Notes"
+ },
+ "ADD": {
+ "BUTTON": "افزودن",
+ "PLACEHOLDER": "افزودن یادداشت",
+ "TITLE": "برای ایجاد یادداشت Shift + Enter را فشار دهید"
+ },
+ "FOOTER": {
+ "BUTTON": "View all notes"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/fa/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/fa/inboxMgmt.json
index fb7cdc6debf..fba26028483 100644
--- a/app/javascript/dashboard/i18n/locale/fa/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/fa/inboxMgmt.json
@@ -227,6 +227,7 @@
"SETTINGS": "تنظیمات",
"COLLABORATORS": "همکاران",
"CONFIGURATION": "پیکربندی",
+ "CAMPAIGN": "Campaigns",
"PRE_CHAT_FORM": "Pre Chat Form",
"BUSINESS_HOURS": "ساعت کاری"
},
diff --git a/app/javascript/dashboard/i18n/locale/fa/index.js b/app/javascript/dashboard/i18n/locale/fa/index.js
index 5dfc44e4b47..cf1dda7fe57 100644
--- a/app/javascript/dashboard/i18n/locale/fa/index.js
+++ b/app/javascript/dashboard/i18n/locale/fa/index.js
@@ -1,33 +1,37 @@
import { default as _agentMgmt } from './agentMgmt.json';
-import { default as _labelsMgmt } from './labelsMgmt.json';
+import { default as _campaign } from './campaign.json';
import { default as _cannedMgmt } from './cannedMgmt.json';
import { default as _chatlist } from './chatlist.json';
import { default as _contact } from './contact.json';
import { default as _conversation } from './conversation.json';
+import { default as _generalSettings } from './generalSettings.json';
import { default as _inboxMgmt } from './inboxMgmt.json';
+import { default as _integrations } from './integrations.json';
+import { default as _labelsMgmt } from './labelsMgmt.json';
import { default as _login } from './login.json';
import { default as _report } from './report.json';
import { default as _resetPassword } from './resetPassword.json';
import { default as _setNewPassword } from './setNewPassword.json';
import { default as _settings } from './settings.json';
import { default as _signup } from './signup.json';
-import { default as _integrations } from './integrations.json';
-import { default as _generalSettings } from './generalSettings.json';
+import { default as _teamsSettings } from './teamsSettings.json';
export default {
..._agentMgmt,
+ ..._campaign,
..._cannedMgmt,
..._chatlist,
..._contact,
..._conversation,
+ ..._generalSettings,
..._inboxMgmt,
+ ..._integrations,
+ ..._labelsMgmt,
..._login,
..._report,
- ..._labelsMgmt,
..._resetPassword,
..._setNewPassword,
..._settings,
..._signup,
- ..._integrations,
- ..._generalSettings,
+ ..._teamsSettings,
};
diff --git a/app/javascript/dashboard/i18n/locale/fa/report.json b/app/javascript/dashboard/i18n/locale/fa/report.json
index 4a0ef7e8c82..208dc152bb7 100644
--- a/app/javascript/dashboard/i18n/locale/fa/report.json
+++ b/app/javascript/dashboard/i18n/locale/fa/report.json
@@ -38,6 +38,18 @@
{
"id": 1,
"name": "در ۳۰ روز گذشته"
+ },
+ {
+ "id": 0,
+ "name": "۳ ماه گذشته"
+ },
+ {
+ "id": 0,
+ "name": "۶ ماه گذشته"
+ },
+ {
+ "id": 0,
+ "name": "پارسال"
}
]
}
diff --git a/app/javascript/dashboard/i18n/locale/fa/teamsSettings.json b/app/javascript/dashboard/i18n/locale/fa/teamsSettings.json
index 35c83771790..1983e961474 100644
--- a/app/javascript/dashboard/i18n/locale/fa/teamsSettings.json
+++ b/app/javascript/dashboard/i18n/locale/fa/teamsSettings.json
@@ -1,16 +1,16 @@
{
"TEAMS_SETTINGS": {
- "NEW_TEAM": "Create new team",
+ "NEW_TEAM": "ایجاد تیم جدید",
"HEADER": "تیمها",
"SIDEBAR_TXT": "
Teams
Teams let you organize your agents into groups based on their responsibilities. A user can be part of multiple teams. You can assign conversations to a team when you are working collaboratively.
",
"LIST": {
"404": "There are no teams created on this account.",
- "EDIT_TEAM": "Edit team"
+ "EDIT_TEAM": "ویرایش تیم"
},
"CREATE_FLOW": {
"CREATE": {
- "TITLE": "Create a new team",
- "DESC": "Add a title and description to your new team."
+ "TITLE": "ایجاد تیم جدید",
+ "DESC": "عنوان و توضیحاتی به تیم جدید خود اضافه کنید."
},
"AGENTS": {
"BUTTON_TEXT": "Add agents to team",
@@ -37,9 +37,9 @@
},
"EDIT_FLOW": {
"CREATE": {
- "TITLE": "Edit your team details",
- "DESC": "Edit title and description to your team.",
- "BUTTON_TEXT": "Update team"
+ "TITLE": "ویرایش جزئیات تیم خود",
+ "DESC": "ویرایش عنوان و توضیحات تیم خود.",
+ "BUTTON_TEXT": "بهروزرسانی تیم"
},
"AGENTS": {
"BUTTON_TEXT": "Update agents in team",
@@ -48,7 +48,7 @@
},
"WIZARD": [
{
- "title": "Team details",
+ "title": "جزئیات تیم",
"route": "settings_teams_edit",
"body": "Change name, description and other details."
},
@@ -105,20 +105,20 @@
},
"SETTINGS": "تنظیمات",
"FORM": {
- "UPDATE": "Update team",
- "CREATE": "Create team",
+ "UPDATE": "بهروزرسانی تیم",
+ "CREATE": "ایجاد تیم",
"NAME": {
- "LABEL": "Team name",
+ "LABEL": "نام تیم",
"PLACEHOLDER": "Example: Sales, Customer Support"
},
"DESCRIPTION": {
- "LABEL": "Team Description",
+ "LABEL": "توضیحات تیم",
"PLACEHOLDER": "Short description about this team."
},
"AUTO_ASSIGN": {
"LABEL": "Allow auto assign for this team."
},
- "SUBMIT_CREATE": "Create team"
+ "SUBMIT_CREATE": "ایجاد تیم"
}
}
}
diff --git a/app/javascript/dashboard/i18n/locale/fi/campaign.json b/app/javascript/dashboard/i18n/locale/fi/campaign.json
new file mode 100644
index 00000000000..57e3bcf4487
--- /dev/null
+++ b/app/javascript/dashboard/i18n/locale/fi/campaign.json
@@ -0,0 +1,79 @@
+{
+ "CAMPAIGN": {
+ "HEADER": "Campaigns",
+ "SIDEBAR_TXT": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations. Click on Add Campaign to create a new campaign. You can also edit or delete an existing campaign by clicking on the Edit or Delete button.",
+ "HEADER_BTN_TXT": "Create a campaign",
+ "ADD": {
+ "TITLE": "Create a campaign",
+ "DESC": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations.",
+ "CANCEL_BUTTON_TEXT": "Peruuta",
+ "CREATE_BUTTON_TEXT": "Luo",
+ "FORM": {
+ "TITLE": {
+ "LABEL": "Title",
+ "PLACEHOLDER": "Please enter the title of campaign",
+ "ERROR": "Title is required"
+ },
+ "MESSAGE": {
+ "LABEL": "Message",
+ "PLACEHOLDER": "Please enter the message of campaign",
+ "ERROR": "Message is required"
+ },
+ "SENT_BY": {
+ "LABEL": "Lähettäjä",
+ "PLACEHOLDER": "Please select the the content of campaign",
+ "ERROR": "Sender is required"
+ },
+ "END_POINT": {
+ "LABEL": "URL",
+ "PLACEHOLDER": "Please enter the URL",
+ "ERROR": "Anna kelvollinen URL-osoite"
+ },
+ "TIME_ON_PAGE": {
+ "LABEL": "Time on page(Seconds)",
+ "PLACEHOLDER": "Please enter the time",
+ "ERROR": "Time on page is required"
+ },
+ "ENABLED": "Enable campaign",
+ "SUBMIT": "Add Campaign"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Campaign created successfully",
+ "ERROR_MESSAGE": "There was an error. Please try again."
+ }
+ },
+ "EDIT": {
+ "TITLE": "Edit campaign",
+ "UPDATE_BUTTON_TEXT": "Päivitä",
+ "API": {
+ "SUCCESS_MESSAGE": "Campaign updated successfully",
+ "ERROR_MESSAGE": "Tapahtui virhe, yritä uudelleen"
+ }
+ },
+ "LIST": {
+ "LOADING_MESSAGE": "Loading campaigns...",
+ "404": "There are no campaigns created for this inbox.",
+ "TABLE_HEADER": {
+ "TITLE": "Title",
+ "MESSAGE": "Message",
+ "STATUS": "Tila",
+ "SENDER": "Sender",
+ "URL": "URL",
+ "TIME_ON_PAGE": "Time(Seconds)",
+ "CREATED_AT": "Created at"
+ },
+ "BUTTONS": {
+ "ADD": "Add",
+ "EDIT": "Muokkaa",
+ "DELETE": "Poista"
+ },
+ "STATUS": {
+ "ENABLED": "Käytössä",
+ "DISABLED": "Pois käytöstä"
+ },
+ "SENDER": {
+ "BOT": "Botti"
+ }
+ }
+ }
+}
diff --git a/app/javascript/dashboard/i18n/locale/fi/chatlist.json b/app/javascript/dashboard/i18n/locale/fi/chatlist.json
index f274c34ab6e..7529e32eb99 100644
--- a/app/javascript/dashboard/i18n/locale/fi/chatlist.json
+++ b/app/javascript/dashboard/i18n/locale/fi/chatlist.json
@@ -80,6 +80,7 @@
"RECEIVED_VIA_EMAIL": "Vastaanotettu sähköpostitse",
"VIEW_TWEET_IN_TWITTER": "Näytä twiitti Twitterissä",
"REPLY_TO_TWEET": "Vastaa tähän twiittiin",
- "NO_MESSAGES": "No Messages"
+ "NO_MESSAGES": "Ei Viestejä",
+ "NO_CONTENT": "No content available"
}
}
diff --git a/app/javascript/dashboard/i18n/locale/fi/contact.json b/app/javascript/dashboard/i18n/locale/fi/contact.json
index 021fad30053..9f478322117 100644
--- a/app/javascript/dashboard/i18n/locale/fi/contact.json
+++ b/app/javascript/dashboard/i18n/locale/fi/contact.json
@@ -12,7 +12,7 @@
"INITIATED_FROM": "Aloitettu lähteestä",
"INITIATED_AT": "Aloitettu lähteestä",
"IP_ADDRESS": "IP-osoite",
- "NEW_MESSAGE": "New message",
+ "NEW_MESSAGE": "Uusi viesti",
"CONVERSATIONS": {
"NO_RECORDS_FOUND": "Tähän yhteystietoon ei liity aikaisempia keskusteluja.",
"TITLE": "Edelliset keskustelut"
@@ -28,11 +28,17 @@
"INACTIVE_LABELS": "Tilissä saatavilla olevat tunnisteet",
"REMOVE": "Napsauta X-kuvaketta poistaaksesi tunnisteen",
"ADD": "Napsauta + kuvaketta lisätäksesi tunnisteen",
+ "ADD_BUTTON": "Add Labels",
"UPDATE_BUTTON": "Päivitä tunnisteet",
"UPDATE_ERROR": "Tunnisteita ei voitu päivittää, yritä uudelleen."
},
"NO_LABELS_TO_ADD": "Tällä tilillä ei ole enempää tunnisteita.",
- "NO_AVAILABLE_LABELS": "Tälle keskustelulle ei ole lisätty tunnisteita."
+ "NO_AVAILABLE_LABELS": "Tälle keskustelulle ei ole lisätty tunnisteita.",
+ "LABEL_SELECT": {
+ "TITLE": "Add Labels",
+ "PLACEHOLDER": "Search labels",
+ "NO_RESULT": "No labels found"
+ }
},
"MUTE_CONTACT": "Mykistä Keskustelu",
"UNMUTE_CONTACT": "Poista keskustelun mykistys",
@@ -47,9 +53,9 @@
"DESC": "Muokkaa yhteystietoja"
},
"CREATE_CONTACT": {
- "BUTTON_LABEL": "New Contact",
- "TITLE": "Create new contact",
- "DESC": "Add basic information details about the contact."
+ "BUTTON_LABEL": "Uusi kontakti",
+ "TITLE": "Luo uusi kontakti",
+ "DESC": "Lisää kontaktin yhteystiedot."
},
"CONTACT_FORM": {
"FORM": {
@@ -103,14 +109,14 @@
}
}
},
- "SUCCESS_MESSAGE": "Contact saved successfully",
+ "SUCCESS_MESSAGE": "Kontakti tallennettu onnistuneesti",
"CONTACT_ALREADY_EXIST": "Tämä sähköpostiosoite on käytössä toiselle yhteyshenkilölle.",
"ERROR_MESSAGE": "Tapahtui virhe, yritä uudelleen"
},
"NEW_CONVERSATION": {
- "BUTTON_LABEL": "Start conversation",
- "TITLE": "New conversation",
- "DESC": "Start a new conversation by sending a new message.",
+ "BUTTON_LABEL": "Aloita keskustelu",
+ "TITLE": "Uusi keskustelu",
+ "DESC": "Aloita uusi keskustelu lähettämällä uusi viesti.",
"NO_INBOX": "Couldn't find an inbox to initiate a new conversation with this contact.",
"FORM": {
"TO": {
@@ -151,5 +157,18 @@
},
"VIEW_DETAILS": "View details"
}
+ },
+ "NOTES": {
+ "HEADER": {
+ "TITLE": "Notes"
+ },
+ "ADD": {
+ "BUTTON": "Add",
+ "PLACEHOLDER": "Add a note",
+ "TITLE": "Shift + Enter to create a note"
+ },
+ "FOOTER": {
+ "BUTTON": "View all notes"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/fi/conversation.json b/app/javascript/dashboard/i18n/locale/fi/conversation.json
index 33c45eb8c4d..16bd54c4b57 100644
--- a/app/javascript/dashboard/i18n/locale/fi/conversation.json
+++ b/app/javascript/dashboard/i18n/locale/fi/conversation.json
@@ -32,7 +32,7 @@
"RESOLVE_ACTION": "Ratkaise",
"REOPEN_ACTION": "Uudelleenavaa",
"OPEN_ACTION": "Avaa",
- "OPEN": "Lisää",
+ "OPEN": "Näytä",
"CLOSE": "Sulje",
"DETAILS": "tiedot"
},
diff --git a/app/javascript/dashboard/i18n/locale/fi/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/fi/inboxMgmt.json
index 2fdcc5b2c21..b858cd044e3 100644
--- a/app/javascript/dashboard/i18n/locale/fi/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/fi/inboxMgmt.json
@@ -227,6 +227,7 @@
"SETTINGS": "Asetukset",
"COLLABORATORS": "Yhteistyökumppanit",
"CONFIGURATION": "Määritykset",
+ "CAMPAIGN": "Campaigns",
"PRE_CHAT_FORM": "Pre Chat Form",
"BUSINESS_HOURS": "Business Hours"
},
diff --git a/app/javascript/dashboard/i18n/locale/fi/index.js b/app/javascript/dashboard/i18n/locale/fi/index.js
index 5dfc44e4b47..cf1dda7fe57 100644
--- a/app/javascript/dashboard/i18n/locale/fi/index.js
+++ b/app/javascript/dashboard/i18n/locale/fi/index.js
@@ -1,33 +1,37 @@
import { default as _agentMgmt } from './agentMgmt.json';
-import { default as _labelsMgmt } from './labelsMgmt.json';
+import { default as _campaign } from './campaign.json';
import { default as _cannedMgmt } from './cannedMgmt.json';
import { default as _chatlist } from './chatlist.json';
import { default as _contact } from './contact.json';
import { default as _conversation } from './conversation.json';
+import { default as _generalSettings } from './generalSettings.json';
import { default as _inboxMgmt } from './inboxMgmt.json';
+import { default as _integrations } from './integrations.json';
+import { default as _labelsMgmt } from './labelsMgmt.json';
import { default as _login } from './login.json';
import { default as _report } from './report.json';
import { default as _resetPassword } from './resetPassword.json';
import { default as _setNewPassword } from './setNewPassword.json';
import { default as _settings } from './settings.json';
import { default as _signup } from './signup.json';
-import { default as _integrations } from './integrations.json';
-import { default as _generalSettings } from './generalSettings.json';
+import { default as _teamsSettings } from './teamsSettings.json';
export default {
..._agentMgmt,
+ ..._campaign,
..._cannedMgmt,
..._chatlist,
..._contact,
..._conversation,
+ ..._generalSettings,
..._inboxMgmt,
+ ..._integrations,
+ ..._labelsMgmt,
..._login,
..._report,
- ..._labelsMgmt,
..._resetPassword,
..._setNewPassword,
..._settings,
..._signup,
- ..._integrations,
- ..._generalSettings,
+ ..._teamsSettings,
};
diff --git a/app/javascript/dashboard/i18n/locale/fi/report.json b/app/javascript/dashboard/i18n/locale/fi/report.json
index 5901cc1f619..268c8c8908f 100644
--- a/app/javascript/dashboard/i18n/locale/fi/report.json
+++ b/app/javascript/dashboard/i18n/locale/fi/report.json
@@ -38,6 +38,18 @@
{
"id": 1,
"name": "Viimeiset 30 päivää"
+ },
+ {
+ "id": 2,
+ "name": "Last 3 months"
+ },
+ {
+ "id": 3,
+ "name": "Last 6 months"
+ },
+ {
+ "id": 4,
+ "name": "Last year"
}
]
}
diff --git a/app/javascript/dashboard/i18n/locale/fr/campaign.json b/app/javascript/dashboard/i18n/locale/fr/campaign.json
new file mode 100644
index 00000000000..80a2b17965e
--- /dev/null
+++ b/app/javascript/dashboard/i18n/locale/fr/campaign.json
@@ -0,0 +1,79 @@
+{
+ "CAMPAIGN": {
+ "HEADER": "Campaigns",
+ "SIDEBAR_TXT": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations. Click on Add Campaign to create a new campaign. You can also edit or delete an existing campaign by clicking on the Edit or Delete button.",
+ "HEADER_BTN_TXT": "Create a campaign",
+ "ADD": {
+ "TITLE": "Create a campaign",
+ "DESC": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations.",
+ "CANCEL_BUTTON_TEXT": "Annuler",
+ "CREATE_BUTTON_TEXT": "Créer",
+ "FORM": {
+ "TITLE": {
+ "LABEL": "Title",
+ "PLACEHOLDER": "Please enter the title of campaign",
+ "ERROR": "Title is required"
+ },
+ "MESSAGE": {
+ "LABEL": "Message",
+ "PLACEHOLDER": "Please enter the message of campaign",
+ "ERROR": "Message is required"
+ },
+ "SENT_BY": {
+ "LABEL": "Envoyé par",
+ "PLACEHOLDER": "Please select the the content of campaign",
+ "ERROR": "Sender is required"
+ },
+ "END_POINT": {
+ "LABEL": "URL",
+ "PLACEHOLDER": "Please enter the URL",
+ "ERROR": "Veuillez entrer une URL valide"
+ },
+ "TIME_ON_PAGE": {
+ "LABEL": "Time on page(Seconds)",
+ "PLACEHOLDER": "Please enter the time",
+ "ERROR": "Time on page is required"
+ },
+ "ENABLED": "Enable campaign",
+ "SUBMIT": "Add Campaign"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Campaign created successfully",
+ "ERROR_MESSAGE": "There was an error. Please try again."
+ }
+ },
+ "EDIT": {
+ "TITLE": "Edit campaign",
+ "UPDATE_BUTTON_TEXT": "Mettre à jour",
+ "API": {
+ "SUCCESS_MESSAGE": "Campaign updated successfully",
+ "ERROR_MESSAGE": "Une erreur est survenue, veuillez réessayer"
+ }
+ },
+ "LIST": {
+ "LOADING_MESSAGE": "Loading campaigns...",
+ "404": "There are no campaigns created for this inbox.",
+ "TABLE_HEADER": {
+ "TITLE": "Title",
+ "MESSAGE": "Message",
+ "STATUS": "État",
+ "SENDER": "Sender",
+ "URL": "URL",
+ "TIME_ON_PAGE": "Time(Seconds)",
+ "CREATED_AT": "Created at"
+ },
+ "BUTTONS": {
+ "ADD": "Add",
+ "EDIT": "Modifier",
+ "DELETE": "Supprimer"
+ },
+ "STATUS": {
+ "ENABLED": "Activé",
+ "DISABLED": "Désactivé"
+ },
+ "SENDER": {
+ "BOT": "Bot"
+ }
+ }
+ }
+}
diff --git a/app/javascript/dashboard/i18n/locale/fr/chatlist.json b/app/javascript/dashboard/i18n/locale/fr/chatlist.json
index 9dc4e14bfd4..4319d646652 100644
--- a/app/javascript/dashboard/i18n/locale/fr/chatlist.json
+++ b/app/javascript/dashboard/i18n/locale/fr/chatlist.json
@@ -80,6 +80,7 @@
"RECEIVED_VIA_EMAIL": "Reçu par courriel",
"VIEW_TWEET_IN_TWITTER": "Voir le tweet sur Twitter",
"REPLY_TO_TWEET": "Répondre à ce tweet",
- "NO_MESSAGES": "Pas de messages"
+ "NO_MESSAGES": "Pas de messages",
+ "NO_CONTENT": "No content available"
}
}
diff --git a/app/javascript/dashboard/i18n/locale/fr/contact.json b/app/javascript/dashboard/i18n/locale/fr/contact.json
index 675138d2a25..715eda37df1 100644
--- a/app/javascript/dashboard/i18n/locale/fr/contact.json
+++ b/app/javascript/dashboard/i18n/locale/fr/contact.json
@@ -28,11 +28,17 @@
"INACTIVE_LABELS": "Étiquettes disponibles dans le compte",
"REMOVE": "Cliquez sur l'icône X pour supprimer l'étiquette",
"ADD": "Cliquez sur l'icône + pour ajouter l'étiquette",
+ "ADD_BUTTON": "Add Labels",
"UPDATE_BUTTON": "Mettre à jour les étiquettes",
"UPDATE_ERROR": "Impossible de mettre à jour les étiquettes. Veuillez réessayer."
},
"NO_LABELS_TO_ADD": "Il n'y a pas d'autres étiquettes définies dans le compte.",
- "NO_AVAILABLE_LABELS": "Aucune étiquette n'a été ajoutée à cette conversation."
+ "NO_AVAILABLE_LABELS": "Aucune étiquette n'a été ajoutée à cette conversation.",
+ "LABEL_SELECT": {
+ "TITLE": "Add Labels",
+ "PLACEHOLDER": "Search labels",
+ "NO_RESULT": "No labels found"
+ }
},
"MUTE_CONTACT": "Mettre la conversation en sourdine",
"UNMUTE_CONTACT": "Réactiver le son de conversation",
@@ -151,5 +157,18 @@
},
"VIEW_DETAILS": "Voir les détails"
}
+ },
+ "NOTES": {
+ "HEADER": {
+ "TITLE": "Notes"
+ },
+ "ADD": {
+ "BUTTON": "Add",
+ "PLACEHOLDER": "Add a note",
+ "TITLE": "Shift + Enter to create a note"
+ },
+ "FOOTER": {
+ "BUTTON": "View all notes"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/fr/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/fr/inboxMgmt.json
index d204a58b0cb..82a6d7dfff4 100644
--- a/app/javascript/dashboard/i18n/locale/fr/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/fr/inboxMgmt.json
@@ -227,6 +227,7 @@
"SETTINGS": "Paramètres",
"COLLABORATORS": "Collaborateurs",
"CONFIGURATION": "Configuration",
+ "CAMPAIGN": "Campaigns",
"PRE_CHAT_FORM": "Formulaire avant chat",
"BUSINESS_HOURS": "Heures de bureau"
},
diff --git a/app/javascript/dashboard/i18n/locale/fr/index.js b/app/javascript/dashboard/i18n/locale/fr/index.js
index 5dfc44e4b47..cf1dda7fe57 100644
--- a/app/javascript/dashboard/i18n/locale/fr/index.js
+++ b/app/javascript/dashboard/i18n/locale/fr/index.js
@@ -1,33 +1,37 @@
import { default as _agentMgmt } from './agentMgmt.json';
-import { default as _labelsMgmt } from './labelsMgmt.json';
+import { default as _campaign } from './campaign.json';
import { default as _cannedMgmt } from './cannedMgmt.json';
import { default as _chatlist } from './chatlist.json';
import { default as _contact } from './contact.json';
import { default as _conversation } from './conversation.json';
+import { default as _generalSettings } from './generalSettings.json';
import { default as _inboxMgmt } from './inboxMgmt.json';
+import { default as _integrations } from './integrations.json';
+import { default as _labelsMgmt } from './labelsMgmt.json';
import { default as _login } from './login.json';
import { default as _report } from './report.json';
import { default as _resetPassword } from './resetPassword.json';
import { default as _setNewPassword } from './setNewPassword.json';
import { default as _settings } from './settings.json';
import { default as _signup } from './signup.json';
-import { default as _integrations } from './integrations.json';
-import { default as _generalSettings } from './generalSettings.json';
+import { default as _teamsSettings } from './teamsSettings.json';
export default {
..._agentMgmt,
+ ..._campaign,
..._cannedMgmt,
..._chatlist,
..._contact,
..._conversation,
+ ..._generalSettings,
..._inboxMgmt,
+ ..._integrations,
+ ..._labelsMgmt,
..._login,
..._report,
- ..._labelsMgmt,
..._resetPassword,
..._setNewPassword,
..._settings,
..._signup,
- ..._integrations,
- ..._generalSettings,
+ ..._teamsSettings,
};
diff --git a/app/javascript/dashboard/i18n/locale/fr/report.json b/app/javascript/dashboard/i18n/locale/fr/report.json
index ed05c942c48..82d3dd07048 100644
--- a/app/javascript/dashboard/i18n/locale/fr/report.json
+++ b/app/javascript/dashboard/i18n/locale/fr/report.json
@@ -38,6 +38,18 @@
{
"id": 1,
"name": "30 derniers jours"
+ },
+ {
+ "id": 2,
+ "name": "Last 3 months"
+ },
+ {
+ "id": 3,
+ "name": "Last 6 months"
+ },
+ {
+ "id": 4,
+ "name": "Last year"
}
]
}
diff --git a/app/javascript/dashboard/i18n/locale/hi/campaign.json b/app/javascript/dashboard/i18n/locale/hi/campaign.json
new file mode 100644
index 00000000000..2eed61b1929
--- /dev/null
+++ b/app/javascript/dashboard/i18n/locale/hi/campaign.json
@@ -0,0 +1,79 @@
+{
+ "CAMPAIGN": {
+ "HEADER": "Campaigns",
+ "SIDEBAR_TXT": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations. Click on Add Campaign to create a new campaign. You can also edit or delete an existing campaign by clicking on the Edit or Delete button.",
+ "HEADER_BTN_TXT": "Create a campaign",
+ "ADD": {
+ "TITLE": "Create a campaign",
+ "DESC": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations.",
+ "CANCEL_BUTTON_TEXT": "Cancel",
+ "CREATE_BUTTON_TEXT": "Create",
+ "FORM": {
+ "TITLE": {
+ "LABEL": "Title",
+ "PLACEHOLDER": "Please enter the title of campaign",
+ "ERROR": "Title is required"
+ },
+ "MESSAGE": {
+ "LABEL": "Message",
+ "PLACEHOLDER": "Please enter the message of campaign",
+ "ERROR": "Message is required"
+ },
+ "SENT_BY": {
+ "LABEL": "Sent by",
+ "PLACEHOLDER": "Please select the the content of campaign",
+ "ERROR": "Sender is required"
+ },
+ "END_POINT": {
+ "LABEL": "URL",
+ "PLACEHOLDER": "Please enter the URL",
+ "ERROR": "Please enter a valid URL"
+ },
+ "TIME_ON_PAGE": {
+ "LABEL": "Time on page(Seconds)",
+ "PLACEHOLDER": "Please enter the time",
+ "ERROR": "Time on page is required"
+ },
+ "ENABLED": "Enable campaign",
+ "SUBMIT": "Add Campaign"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Campaign created successfully",
+ "ERROR_MESSAGE": "There was an error. Please try again."
+ }
+ },
+ "EDIT": {
+ "TITLE": "Edit campaign",
+ "UPDATE_BUTTON_TEXT": "Update",
+ "API": {
+ "SUCCESS_MESSAGE": "Campaign updated successfully",
+ "ERROR_MESSAGE": "There was an error, please try again"
+ }
+ },
+ "LIST": {
+ "LOADING_MESSAGE": "Loading campaigns...",
+ "404": "There are no campaigns created for this inbox.",
+ "TABLE_HEADER": {
+ "TITLE": "Title",
+ "MESSAGE": "Message",
+ "STATUS": "Status",
+ "SENDER": "Sender",
+ "URL": "URL",
+ "TIME_ON_PAGE": "Time(Seconds)",
+ "CREATED_AT": "Created at"
+ },
+ "BUTTONS": {
+ "ADD": "Add",
+ "EDIT": "Edit",
+ "DELETE": "Delete"
+ },
+ "STATUS": {
+ "ENABLED": "Enabled",
+ "DISABLED": "Disabled"
+ },
+ "SENDER": {
+ "BOT": "Bot"
+ }
+ }
+ }
+}
diff --git a/app/javascript/dashboard/i18n/locale/hi/chatlist.json b/app/javascript/dashboard/i18n/locale/hi/chatlist.json
index 2285547890f..ef4e0629ac2 100644
--- a/app/javascript/dashboard/i18n/locale/hi/chatlist.json
+++ b/app/javascript/dashboard/i18n/locale/hi/chatlist.json
@@ -80,6 +80,7 @@
"RECEIVED_VIA_EMAIL": "Received via email",
"VIEW_TWEET_IN_TWITTER": "View tweet in Twitter",
"REPLY_TO_TWEET": "Reply to this tweet",
- "NO_MESSAGES": "No Messages"
+ "NO_MESSAGES": "No Messages",
+ "NO_CONTENT": "No content available"
}
}
diff --git a/app/javascript/dashboard/i18n/locale/hi/contact.json b/app/javascript/dashboard/i18n/locale/hi/contact.json
index b8d936d220a..6a94011a52a 100644
--- a/app/javascript/dashboard/i18n/locale/hi/contact.json
+++ b/app/javascript/dashboard/i18n/locale/hi/contact.json
@@ -28,11 +28,17 @@
"INACTIVE_LABELS": "Labels available in the account",
"REMOVE": "Click on X icon to remove the label",
"ADD": "Click on + icon to add the label",
+ "ADD_BUTTON": "Add Labels",
"UPDATE_BUTTON": "Update labels",
"UPDATE_ERROR": "Couldn't update labels, try again."
},
"NO_LABELS_TO_ADD": "There are no more labels defined in the account.",
- "NO_AVAILABLE_LABELS": "There are no labels added to this conversation."
+ "NO_AVAILABLE_LABELS": "There are no labels added to this conversation.",
+ "LABEL_SELECT": {
+ "TITLE": "Add Labels",
+ "PLACEHOLDER": "Search labels",
+ "NO_RESULT": "No labels found"
+ }
},
"MUTE_CONTACT": "Mute Conversation",
"UNMUTE_CONTACT": "Unmute Conversation",
@@ -151,5 +157,18 @@
},
"VIEW_DETAILS": "View details"
}
+ },
+ "NOTES": {
+ "HEADER": {
+ "TITLE": "Notes"
+ },
+ "ADD": {
+ "BUTTON": "Add",
+ "PLACEHOLDER": "Add a note",
+ "TITLE": "Shift + Enter to create a note"
+ },
+ "FOOTER": {
+ "BUTTON": "View all notes"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/hi/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/hi/inboxMgmt.json
index 13d97f3b05b..e03e40f3977 100644
--- a/app/javascript/dashboard/i18n/locale/hi/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/hi/inboxMgmt.json
@@ -227,6 +227,7 @@
"SETTINGS": "Settings",
"COLLABORATORS": "Collaborators",
"CONFIGURATION": "Configuration",
+ "CAMPAIGN": "Campaigns",
"PRE_CHAT_FORM": "Pre Chat Form",
"BUSINESS_HOURS": "Business Hours"
},
diff --git a/app/javascript/dashboard/i18n/locale/hi/index.js b/app/javascript/dashboard/i18n/locale/hi/index.js
index 5dfc44e4b47..cf1dda7fe57 100644
--- a/app/javascript/dashboard/i18n/locale/hi/index.js
+++ b/app/javascript/dashboard/i18n/locale/hi/index.js
@@ -1,33 +1,37 @@
import { default as _agentMgmt } from './agentMgmt.json';
-import { default as _labelsMgmt } from './labelsMgmt.json';
+import { default as _campaign } from './campaign.json';
import { default as _cannedMgmt } from './cannedMgmt.json';
import { default as _chatlist } from './chatlist.json';
import { default as _contact } from './contact.json';
import { default as _conversation } from './conversation.json';
+import { default as _generalSettings } from './generalSettings.json';
import { default as _inboxMgmt } from './inboxMgmt.json';
+import { default as _integrations } from './integrations.json';
+import { default as _labelsMgmt } from './labelsMgmt.json';
import { default as _login } from './login.json';
import { default as _report } from './report.json';
import { default as _resetPassword } from './resetPassword.json';
import { default as _setNewPassword } from './setNewPassword.json';
import { default as _settings } from './settings.json';
import { default as _signup } from './signup.json';
-import { default as _integrations } from './integrations.json';
-import { default as _generalSettings } from './generalSettings.json';
+import { default as _teamsSettings } from './teamsSettings.json';
export default {
..._agentMgmt,
+ ..._campaign,
..._cannedMgmt,
..._chatlist,
..._contact,
..._conversation,
+ ..._generalSettings,
..._inboxMgmt,
+ ..._integrations,
+ ..._labelsMgmt,
..._login,
..._report,
- ..._labelsMgmt,
..._resetPassword,
..._setNewPassword,
..._settings,
..._signup,
- ..._integrations,
- ..._generalSettings,
+ ..._teamsSettings,
};
diff --git a/app/javascript/dashboard/i18n/locale/hi/report.json b/app/javascript/dashboard/i18n/locale/hi/report.json
index 22e4a1c7520..cf2c14a57f9 100644
--- a/app/javascript/dashboard/i18n/locale/hi/report.json
+++ b/app/javascript/dashboard/i18n/locale/hi/report.json
@@ -38,6 +38,18 @@
{
"id": 1,
"name": "Last 30 days"
+ },
+ {
+ "id": 2,
+ "name": "Last 3 months"
+ },
+ {
+ "id": 3,
+ "name": "Last 6 months"
+ },
+ {
+ "id": 4,
+ "name": "Last year"
}
]
}
diff --git a/app/javascript/dashboard/i18n/locale/hu/campaign.json b/app/javascript/dashboard/i18n/locale/hu/campaign.json
new file mode 100644
index 00000000000..3dd1c88334d
--- /dev/null
+++ b/app/javascript/dashboard/i18n/locale/hu/campaign.json
@@ -0,0 +1,79 @@
+{
+ "CAMPAIGN": {
+ "HEADER": "Campaigns",
+ "SIDEBAR_TXT": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations. Click on Add Campaign to create a new campaign. You can also edit or delete an existing campaign by clicking on the Edit or Delete button.",
+ "HEADER_BTN_TXT": "Create a campaign",
+ "ADD": {
+ "TITLE": "Create a campaign",
+ "DESC": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations.",
+ "CANCEL_BUTTON_TEXT": "Mégse",
+ "CREATE_BUTTON_TEXT": "Létrehozás",
+ "FORM": {
+ "TITLE": {
+ "LABEL": "Title",
+ "PLACEHOLDER": "Please enter the title of campaign",
+ "ERROR": "Title is required"
+ },
+ "MESSAGE": {
+ "LABEL": "Üzenet",
+ "PLACEHOLDER": "Please enter the message of campaign",
+ "ERROR": "Message is required"
+ },
+ "SENT_BY": {
+ "LABEL": "Küldő",
+ "PLACEHOLDER": "Please select the the content of campaign",
+ "ERROR": "Sender is required"
+ },
+ "END_POINT": {
+ "LABEL": "URL",
+ "PLACEHOLDER": "Please enter the URL",
+ "ERROR": "Kérjük helyes URL-t adj meg"
+ },
+ "TIME_ON_PAGE": {
+ "LABEL": "Time on page(Seconds)",
+ "PLACEHOLDER": "Please enter the time",
+ "ERROR": "Time on page is required"
+ },
+ "ENABLED": "Enable campaign",
+ "SUBMIT": "Add Campaign"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Campaign created successfully",
+ "ERROR_MESSAGE": "There was an error. Please try again."
+ }
+ },
+ "EDIT": {
+ "TITLE": "Edit campaign",
+ "UPDATE_BUTTON_TEXT": "Frissítés",
+ "API": {
+ "SUCCESS_MESSAGE": "Campaign updated successfully",
+ "ERROR_MESSAGE": "Hiba történt, kérjük próbáld újra"
+ }
+ },
+ "LIST": {
+ "LOADING_MESSAGE": "Loading campaigns...",
+ "404": "There are no campaigns created for this inbox.",
+ "TABLE_HEADER": {
+ "TITLE": "Title",
+ "MESSAGE": "Üzenet",
+ "STATUS": "Státusz",
+ "SENDER": "Sender",
+ "URL": "URL",
+ "TIME_ON_PAGE": "Time(Seconds)",
+ "CREATED_AT": "Created at"
+ },
+ "BUTTONS": {
+ "ADD": "Add",
+ "EDIT": "Szerkesztés",
+ "DELETE": "Törlés"
+ },
+ "STATUS": {
+ "ENABLED": "Engedélyezve",
+ "DISABLED": "Letiltva"
+ },
+ "SENDER": {
+ "BOT": "Bot"
+ }
+ }
+ }
+}
diff --git a/app/javascript/dashboard/i18n/locale/hu/chatlist.json b/app/javascript/dashboard/i18n/locale/hu/chatlist.json
index ad92ed50a8a..35f293fc6b7 100644
--- a/app/javascript/dashboard/i18n/locale/hu/chatlist.json
+++ b/app/javascript/dashboard/i18n/locale/hu/chatlist.json
@@ -80,6 +80,7 @@
"RECEIVED_VIA_EMAIL": "E-mailen keresztül érkezett",
"VIEW_TWEET_IN_TWITTER": "Üzenet megtekintése Twitteren",
"REPLY_TO_TWEET": "Válasz",
- "NO_MESSAGES": "Nincs üzenet"
+ "NO_MESSAGES": "Nincs üzenet",
+ "NO_CONTENT": "No content available"
}
}
diff --git a/app/javascript/dashboard/i18n/locale/hu/contact.json b/app/javascript/dashboard/i18n/locale/hu/contact.json
index f6253f06a88..378a2413aa1 100644
--- a/app/javascript/dashboard/i18n/locale/hu/contact.json
+++ b/app/javascript/dashboard/i18n/locale/hu/contact.json
@@ -28,11 +28,17 @@
"INACTIVE_LABELS": "A fiókhoz tartozó cimkék",
"REMOVE": "Kattints az X ikonra a cimke eltávolításához",
"ADD": "Kattints a + ikonra a cimke hozzáadásához",
+ "ADD_BUTTON": "Add Labels",
"UPDATE_BUTTON": "Cimkék frissítése",
"UPDATE_ERROR": "Cimke frissítés sikertelen, kérjük próbáld később."
},
"NO_LABELS_TO_ADD": "Ebben a fiókban már nincsenek további cimkék.",
- "NO_AVAILABLE_LABELS": "Nincs több cimke ehhez a beszélgetéshez."
+ "NO_AVAILABLE_LABELS": "Nincs több cimke ehhez a beszélgetéshez.",
+ "LABEL_SELECT": {
+ "TITLE": "Add Labels",
+ "PLACEHOLDER": "Search labels",
+ "NO_RESULT": "No labels found"
+ }
},
"MUTE_CONTACT": "Beszélgetés elnémítása",
"UNMUTE_CONTACT": "Beszélgetés elnémításának feloldása",
@@ -151,5 +157,18 @@
},
"VIEW_DETAILS": "Részletek megtekintése"
}
+ },
+ "NOTES": {
+ "HEADER": {
+ "TITLE": "Notes"
+ },
+ "ADD": {
+ "BUTTON": "Add",
+ "PLACEHOLDER": "Add a note",
+ "TITLE": "Shift + Enter to create a note"
+ },
+ "FOOTER": {
+ "BUTTON": "View all notes"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/hu/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/hu/inboxMgmt.json
index a0a9c777afb..615516429b9 100644
--- a/app/javascript/dashboard/i18n/locale/hu/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/hu/inboxMgmt.json
@@ -227,6 +227,7 @@
"SETTINGS": "Beállítások",
"COLLABORATORS": "Csapattagok",
"CONFIGURATION": "Beállítások",
+ "CAMPAIGN": "Campaigns",
"PRE_CHAT_FORM": "Chat előtti űrlap",
"BUSINESS_HOURS": "Nyitvatartás"
},
diff --git a/app/javascript/dashboard/i18n/locale/hu/index.js b/app/javascript/dashboard/i18n/locale/hu/index.js
index 5dfc44e4b47..cf1dda7fe57 100644
--- a/app/javascript/dashboard/i18n/locale/hu/index.js
+++ b/app/javascript/dashboard/i18n/locale/hu/index.js
@@ -1,33 +1,37 @@
import { default as _agentMgmt } from './agentMgmt.json';
-import { default as _labelsMgmt } from './labelsMgmt.json';
+import { default as _campaign } from './campaign.json';
import { default as _cannedMgmt } from './cannedMgmt.json';
import { default as _chatlist } from './chatlist.json';
import { default as _contact } from './contact.json';
import { default as _conversation } from './conversation.json';
+import { default as _generalSettings } from './generalSettings.json';
import { default as _inboxMgmt } from './inboxMgmt.json';
+import { default as _integrations } from './integrations.json';
+import { default as _labelsMgmt } from './labelsMgmt.json';
import { default as _login } from './login.json';
import { default as _report } from './report.json';
import { default as _resetPassword } from './resetPassword.json';
import { default as _setNewPassword } from './setNewPassword.json';
import { default as _settings } from './settings.json';
import { default as _signup } from './signup.json';
-import { default as _integrations } from './integrations.json';
-import { default as _generalSettings } from './generalSettings.json';
+import { default as _teamsSettings } from './teamsSettings.json';
export default {
..._agentMgmt,
+ ..._campaign,
..._cannedMgmt,
..._chatlist,
..._contact,
..._conversation,
+ ..._generalSettings,
..._inboxMgmt,
+ ..._integrations,
+ ..._labelsMgmt,
..._login,
..._report,
- ..._labelsMgmt,
..._resetPassword,
..._setNewPassword,
..._settings,
..._signup,
- ..._integrations,
- ..._generalSettings,
+ ..._teamsSettings,
};
diff --git a/app/javascript/dashboard/i18n/locale/hu/report.json b/app/javascript/dashboard/i18n/locale/hu/report.json
index c039c0d82e6..1a537be2006 100644
--- a/app/javascript/dashboard/i18n/locale/hu/report.json
+++ b/app/javascript/dashboard/i18n/locale/hu/report.json
@@ -38,6 +38,18 @@
{
"id": 1,
"name": "Utolsó 30 nap"
+ },
+ {
+ "id": 2,
+ "name": "Last 3 months"
+ },
+ {
+ "id": 3,
+ "name": "Last 6 months"
+ },
+ {
+ "id": 4,
+ "name": "Last year"
}
]
}
diff --git a/app/javascript/dashboard/i18n/locale/id/campaign.json b/app/javascript/dashboard/i18n/locale/id/campaign.json
new file mode 100644
index 00000000000..9703a7ce0e2
--- /dev/null
+++ b/app/javascript/dashboard/i18n/locale/id/campaign.json
@@ -0,0 +1,79 @@
+{
+ "CAMPAIGN": {
+ "HEADER": "Campaigns",
+ "SIDEBAR_TXT": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations. Click on Add Campaign to create a new campaign. You can also edit or delete an existing campaign by clicking on the Edit or Delete button.",
+ "HEADER_BTN_TXT": "Create a campaign",
+ "ADD": {
+ "TITLE": "Create a campaign",
+ "DESC": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations.",
+ "CANCEL_BUTTON_TEXT": "Batalkan",
+ "CREATE_BUTTON_TEXT": "Buat",
+ "FORM": {
+ "TITLE": {
+ "LABEL": "Title",
+ "PLACEHOLDER": "Please enter the title of campaign",
+ "ERROR": "Title is required"
+ },
+ "MESSAGE": {
+ "LABEL": "Pesan",
+ "PLACEHOLDER": "Please enter the message of campaign",
+ "ERROR": "Message is required"
+ },
+ "SENT_BY": {
+ "LABEL": "Dikirim oleh",
+ "PLACEHOLDER": "Please select the the content of campaign",
+ "ERROR": "Sender is required"
+ },
+ "END_POINT": {
+ "LABEL": "URL",
+ "PLACEHOLDER": "Please enter the URL",
+ "ERROR": "Harap masukkan URL yang valid"
+ },
+ "TIME_ON_PAGE": {
+ "LABEL": "Time on page(Seconds)",
+ "PLACEHOLDER": "Please enter the time",
+ "ERROR": "Time on page is required"
+ },
+ "ENABLED": "Enable campaign",
+ "SUBMIT": "Add Campaign"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Campaign created successfully",
+ "ERROR_MESSAGE": "There was an error. Please try again."
+ }
+ },
+ "EDIT": {
+ "TITLE": "Edit campaign",
+ "UPDATE_BUTTON_TEXT": "Perbarui",
+ "API": {
+ "SUCCESS_MESSAGE": "Campaign updated successfully",
+ "ERROR_MESSAGE": "Terjadi kesalahan, harap coba lagi"
+ }
+ },
+ "LIST": {
+ "LOADING_MESSAGE": "Loading campaigns...",
+ "404": "There are no campaigns created for this inbox.",
+ "TABLE_HEADER": {
+ "TITLE": "Title",
+ "MESSAGE": "Pesan",
+ "STATUS": "Status",
+ "SENDER": "Sender",
+ "URL": "URL",
+ "TIME_ON_PAGE": "Time(Seconds)",
+ "CREATED_AT": "Created at"
+ },
+ "BUTTONS": {
+ "ADD": "Add",
+ "EDIT": "Edit",
+ "DELETE": "Hapus"
+ },
+ "STATUS": {
+ "ENABLED": "Diaktifkan",
+ "DISABLED": "Nonaktif"
+ },
+ "SENDER": {
+ "BOT": "Bot"
+ }
+ }
+ }
+}
diff --git a/app/javascript/dashboard/i18n/locale/id/chatlist.json b/app/javascript/dashboard/i18n/locale/id/chatlist.json
index 2550d9cfcec..0fa657567d6 100644
--- a/app/javascript/dashboard/i18n/locale/id/chatlist.json
+++ b/app/javascript/dashboard/i18n/locale/id/chatlist.json
@@ -80,6 +80,7 @@
"RECEIVED_VIA_EMAIL": "Diterima melalui email",
"VIEW_TWEET_IN_TWITTER": "Lihat tweet di Twitter",
"REPLY_TO_TWEET": "Balas tweet ini",
- "NO_MESSAGES": "Tidak Ada Pesan"
+ "NO_MESSAGES": "Tidak Ada Pesan",
+ "NO_CONTENT": "No content available"
}
}
diff --git a/app/javascript/dashboard/i18n/locale/id/contact.json b/app/javascript/dashboard/i18n/locale/id/contact.json
index 4bb39dc7ae8..56f5905022a 100644
--- a/app/javascript/dashboard/i18n/locale/id/contact.json
+++ b/app/javascript/dashboard/i18n/locale/id/contact.json
@@ -28,11 +28,17 @@
"INACTIVE_LABELS": "Label tersedia di akun",
"REMOVE": "Klik ikon X untuk menghapus label",
"ADD": "Klik ikon + untuk menambah label",
+ "ADD_BUTTON": "Add Labels",
"UPDATE_BUTTON": "Memperbaharui label",
"UPDATE_ERROR": "Tidak dapat memperbarui label, coba lagi."
},
"NO_LABELS_TO_ADD": "Tidak ada lagi label yang ditentukan di akun.",
- "NO_AVAILABLE_LABELS": "Tidak ada label yang ditambahkan ke percakapan ini."
+ "NO_AVAILABLE_LABELS": "Tidak ada label yang ditambahkan ke percakapan ini.",
+ "LABEL_SELECT": {
+ "TITLE": "Add Labels",
+ "PLACEHOLDER": "Search labels",
+ "NO_RESULT": "No labels found"
+ }
},
"MUTE_CONTACT": "Mute Percakapan",
"UNMUTE_CONTACT": "Unmute Percakapan",
@@ -151,5 +157,18 @@
},
"VIEW_DETAILS": "Lihat detail"
}
+ },
+ "NOTES": {
+ "HEADER": {
+ "TITLE": "Notes"
+ },
+ "ADD": {
+ "BUTTON": "Add",
+ "PLACEHOLDER": "Add a note",
+ "TITLE": "Shift + Enter to create a note"
+ },
+ "FOOTER": {
+ "BUTTON": "View all notes"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/id/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/id/inboxMgmt.json
index 668661cace8..aa79cbbc8ec 100644
--- a/app/javascript/dashboard/i18n/locale/id/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/id/inboxMgmt.json
@@ -227,6 +227,7 @@
"SETTINGS": "Pengaturan",
"COLLABORATORS": "Kolaborator",
"CONFIGURATION": "Konfigurasi",
+ "CAMPAIGN": "Campaigns",
"PRE_CHAT_FORM": "Formulir Pra Obrolan",
"BUSINESS_HOURS": "Jam Kerja"
},
diff --git a/app/javascript/dashboard/i18n/locale/id/index.js b/app/javascript/dashboard/i18n/locale/id/index.js
index 5dfc44e4b47..cf1dda7fe57 100644
--- a/app/javascript/dashboard/i18n/locale/id/index.js
+++ b/app/javascript/dashboard/i18n/locale/id/index.js
@@ -1,33 +1,37 @@
import { default as _agentMgmt } from './agentMgmt.json';
-import { default as _labelsMgmt } from './labelsMgmt.json';
+import { default as _campaign } from './campaign.json';
import { default as _cannedMgmt } from './cannedMgmt.json';
import { default as _chatlist } from './chatlist.json';
import { default as _contact } from './contact.json';
import { default as _conversation } from './conversation.json';
+import { default as _generalSettings } from './generalSettings.json';
import { default as _inboxMgmt } from './inboxMgmt.json';
+import { default as _integrations } from './integrations.json';
+import { default as _labelsMgmt } from './labelsMgmt.json';
import { default as _login } from './login.json';
import { default as _report } from './report.json';
import { default as _resetPassword } from './resetPassword.json';
import { default as _setNewPassword } from './setNewPassword.json';
import { default as _settings } from './settings.json';
import { default as _signup } from './signup.json';
-import { default as _integrations } from './integrations.json';
-import { default as _generalSettings } from './generalSettings.json';
+import { default as _teamsSettings } from './teamsSettings.json';
export default {
..._agentMgmt,
+ ..._campaign,
..._cannedMgmt,
..._chatlist,
..._contact,
..._conversation,
+ ..._generalSettings,
..._inboxMgmt,
+ ..._integrations,
+ ..._labelsMgmt,
..._login,
..._report,
- ..._labelsMgmt,
..._resetPassword,
..._setNewPassword,
..._settings,
..._signup,
- ..._integrations,
- ..._generalSettings,
+ ..._teamsSettings,
};
diff --git a/app/javascript/dashboard/i18n/locale/id/report.json b/app/javascript/dashboard/i18n/locale/id/report.json
index bdd2f8b44da..27790ae5d0f 100644
--- a/app/javascript/dashboard/i18n/locale/id/report.json
+++ b/app/javascript/dashboard/i18n/locale/id/report.json
@@ -38,6 +38,18 @@
{
"id": 1,
"name": "30 hari terakhir"
+ },
+ {
+ "id": 2,
+ "name": "Last 3 months"
+ },
+ {
+ "id": 3,
+ "name": "Last 6 months"
+ },
+ {
+ "id": 4,
+ "name": "Last year"
}
]
}
diff --git a/app/javascript/dashboard/i18n/locale/it/campaign.json b/app/javascript/dashboard/i18n/locale/it/campaign.json
new file mode 100644
index 00000000000..3059eaa285d
--- /dev/null
+++ b/app/javascript/dashboard/i18n/locale/it/campaign.json
@@ -0,0 +1,79 @@
+{
+ "CAMPAIGN": {
+ "HEADER": "Campaigns",
+ "SIDEBAR_TXT": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations. Click on Add Campaign to create a new campaign. You can also edit or delete an existing campaign by clicking on the Edit or Delete button.",
+ "HEADER_BTN_TXT": "Create a campaign",
+ "ADD": {
+ "TITLE": "Create a campaign",
+ "DESC": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations.",
+ "CANCEL_BUTTON_TEXT": "annulla",
+ "CREATE_BUTTON_TEXT": "Create",
+ "FORM": {
+ "TITLE": {
+ "LABEL": "Title",
+ "PLACEHOLDER": "Please enter the title of campaign",
+ "ERROR": "Title is required"
+ },
+ "MESSAGE": {
+ "LABEL": "Messaggio",
+ "PLACEHOLDER": "Please enter the message of campaign",
+ "ERROR": "Message is required"
+ },
+ "SENT_BY": {
+ "LABEL": "Sent by",
+ "PLACEHOLDER": "Please select the the content of campaign",
+ "ERROR": "Sender is required"
+ },
+ "END_POINT": {
+ "LABEL": "URL",
+ "PLACEHOLDER": "Please enter the URL",
+ "ERROR": "Inserisci un URL valido"
+ },
+ "TIME_ON_PAGE": {
+ "LABEL": "Time on page(Seconds)",
+ "PLACEHOLDER": "Please enter the time",
+ "ERROR": "Time on page is required"
+ },
+ "ENABLED": "Enable campaign",
+ "SUBMIT": "Add Campaign"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Campaign created successfully",
+ "ERROR_MESSAGE": "There was an error. Please try again."
+ }
+ },
+ "EDIT": {
+ "TITLE": "Edit campaign",
+ "UPDATE_BUTTON_TEXT": "Aggiornamento",
+ "API": {
+ "SUCCESS_MESSAGE": "Campaign updated successfully",
+ "ERROR_MESSAGE": "There was an error, please try again"
+ }
+ },
+ "LIST": {
+ "LOADING_MESSAGE": "Loading campaigns...",
+ "404": "There are no campaigns created for this inbox.",
+ "TABLE_HEADER": {
+ "TITLE": "Title",
+ "MESSAGE": "Messaggio",
+ "STATUS": "Stato",
+ "SENDER": "Sender",
+ "URL": "URL",
+ "TIME_ON_PAGE": "Time(Seconds)",
+ "CREATED_AT": "Created at"
+ },
+ "BUTTONS": {
+ "ADD": "Add",
+ "EDIT": "Modifica",
+ "DELETE": "Cancellare"
+ },
+ "STATUS": {
+ "ENABLED": "Abilitato",
+ "DISABLED": "Disabilitato"
+ },
+ "SENDER": {
+ "BOT": "Bot"
+ }
+ }
+ }
+}
diff --git a/app/javascript/dashboard/i18n/locale/it/chatlist.json b/app/javascript/dashboard/i18n/locale/it/chatlist.json
index 1c5ae61b5c4..f4bcd187c62 100644
--- a/app/javascript/dashboard/i18n/locale/it/chatlist.json
+++ b/app/javascript/dashboard/i18n/locale/it/chatlist.json
@@ -80,6 +80,7 @@
"RECEIVED_VIA_EMAIL": "Received via email",
"VIEW_TWEET_IN_TWITTER": "View tweet in Twitter",
"REPLY_TO_TWEET": "Reply to this tweet",
- "NO_MESSAGES": "No Messages"
+ "NO_MESSAGES": "No Messages",
+ "NO_CONTENT": "No content available"
}
}
diff --git a/app/javascript/dashboard/i18n/locale/it/contact.json b/app/javascript/dashboard/i18n/locale/it/contact.json
index be4a7e8ecac..1bb13b56108 100644
--- a/app/javascript/dashboard/i18n/locale/it/contact.json
+++ b/app/javascript/dashboard/i18n/locale/it/contact.json
@@ -28,11 +28,17 @@
"INACTIVE_LABELS": "Labels available in the account",
"REMOVE": "Click on X icon to remove the label",
"ADD": "Click on + icon to add the label",
+ "ADD_BUTTON": "Add Labels",
"UPDATE_BUTTON": "Update labels",
"UPDATE_ERROR": "Couldn't update labels, try again."
},
"NO_LABELS_TO_ADD": "There are no more labels defined in the account.",
- "NO_AVAILABLE_LABELS": "There are no labels added to this conversation."
+ "NO_AVAILABLE_LABELS": "There are no labels added to this conversation.",
+ "LABEL_SELECT": {
+ "TITLE": "Add Labels",
+ "PLACEHOLDER": "Search labels",
+ "NO_RESULT": "No labels found"
+ }
},
"MUTE_CONTACT": "Mute Conversation",
"UNMUTE_CONTACT": "Unmute Conversation",
@@ -151,5 +157,18 @@
},
"VIEW_DETAILS": "View details"
}
+ },
+ "NOTES": {
+ "HEADER": {
+ "TITLE": "Notes"
+ },
+ "ADD": {
+ "BUTTON": "Add",
+ "PLACEHOLDER": "Add a note",
+ "TITLE": "Shift + Enter to create a note"
+ },
+ "FOOTER": {
+ "BUTTON": "View all notes"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/it/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/it/inboxMgmt.json
index d48bd44c968..7e55f017ef7 100644
--- a/app/javascript/dashboard/i18n/locale/it/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/it/inboxMgmt.json
@@ -227,6 +227,7 @@
"SETTINGS": "Impostazioni",
"COLLABORATORS": "Collaborators",
"CONFIGURATION": "Configuration",
+ "CAMPAIGN": "Campaigns",
"PRE_CHAT_FORM": "Pre Chat Form",
"BUSINESS_HOURS": "Business Hours"
},
diff --git a/app/javascript/dashboard/i18n/locale/it/index.js b/app/javascript/dashboard/i18n/locale/it/index.js
index 5dfc44e4b47..cf1dda7fe57 100644
--- a/app/javascript/dashboard/i18n/locale/it/index.js
+++ b/app/javascript/dashboard/i18n/locale/it/index.js
@@ -1,33 +1,37 @@
import { default as _agentMgmt } from './agentMgmt.json';
-import { default as _labelsMgmt } from './labelsMgmt.json';
+import { default as _campaign } from './campaign.json';
import { default as _cannedMgmt } from './cannedMgmt.json';
import { default as _chatlist } from './chatlist.json';
import { default as _contact } from './contact.json';
import { default as _conversation } from './conversation.json';
+import { default as _generalSettings } from './generalSettings.json';
import { default as _inboxMgmt } from './inboxMgmt.json';
+import { default as _integrations } from './integrations.json';
+import { default as _labelsMgmt } from './labelsMgmt.json';
import { default as _login } from './login.json';
import { default as _report } from './report.json';
import { default as _resetPassword } from './resetPassword.json';
import { default as _setNewPassword } from './setNewPassword.json';
import { default as _settings } from './settings.json';
import { default as _signup } from './signup.json';
-import { default as _integrations } from './integrations.json';
-import { default as _generalSettings } from './generalSettings.json';
+import { default as _teamsSettings } from './teamsSettings.json';
export default {
..._agentMgmt,
+ ..._campaign,
..._cannedMgmt,
..._chatlist,
..._contact,
..._conversation,
+ ..._generalSettings,
..._inboxMgmt,
+ ..._integrations,
+ ..._labelsMgmt,
..._login,
..._report,
- ..._labelsMgmt,
..._resetPassword,
..._setNewPassword,
..._settings,
..._signup,
- ..._integrations,
- ..._generalSettings,
+ ..._teamsSettings,
};
diff --git a/app/javascript/dashboard/i18n/locale/it/report.json b/app/javascript/dashboard/i18n/locale/it/report.json
index 134ba9e4e9e..e8dc548a3a9 100644
--- a/app/javascript/dashboard/i18n/locale/it/report.json
+++ b/app/javascript/dashboard/i18n/locale/it/report.json
@@ -38,6 +38,18 @@
{
"id": 1,
"name": "Ultimi 30 giorni"
+ },
+ {
+ "id": 2,
+ "name": "Last 3 months"
+ },
+ {
+ "id": 3,
+ "name": "Last 6 months"
+ },
+ {
+ "id": 4,
+ "name": "Last year"
}
]
}
diff --git a/app/javascript/dashboard/i18n/locale/ja/campaign.json b/app/javascript/dashboard/i18n/locale/ja/campaign.json
new file mode 100644
index 00000000000..d1553b40f8d
--- /dev/null
+++ b/app/javascript/dashboard/i18n/locale/ja/campaign.json
@@ -0,0 +1,79 @@
+{
+ "CAMPAIGN": {
+ "HEADER": "Campaigns",
+ "SIDEBAR_TXT": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations. Click on Add Campaign to create a new campaign. You can also edit or delete an existing campaign by clicking on the Edit or Delete button.",
+ "HEADER_BTN_TXT": "Create a campaign",
+ "ADD": {
+ "TITLE": "Create a campaign",
+ "DESC": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations.",
+ "CANCEL_BUTTON_TEXT": "キャンセル",
+ "CREATE_BUTTON_TEXT": "作成",
+ "FORM": {
+ "TITLE": {
+ "LABEL": "Title",
+ "PLACEHOLDER": "Please enter the title of campaign",
+ "ERROR": "Title is required"
+ },
+ "MESSAGE": {
+ "LABEL": "メッセージ",
+ "PLACEHOLDER": "Please enter the message of campaign",
+ "ERROR": "Message is required"
+ },
+ "SENT_BY": {
+ "LABEL": "Sent by",
+ "PLACEHOLDER": "Please select the the content of campaign",
+ "ERROR": "Sender is required"
+ },
+ "END_POINT": {
+ "LABEL": "URL",
+ "PLACEHOLDER": "Please enter the URL",
+ "ERROR": "有効な URL を入力してください"
+ },
+ "TIME_ON_PAGE": {
+ "LABEL": "Time on page(Seconds)",
+ "PLACEHOLDER": "Please enter the time",
+ "ERROR": "Time on page is required"
+ },
+ "ENABLED": "Enable campaign",
+ "SUBMIT": "Add Campaign"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Campaign created successfully",
+ "ERROR_MESSAGE": "There was an error. Please try again."
+ }
+ },
+ "EDIT": {
+ "TITLE": "Edit campaign",
+ "UPDATE_BUTTON_TEXT": "更新",
+ "API": {
+ "SUCCESS_MESSAGE": "Campaign updated successfully",
+ "ERROR_MESSAGE": "エラーが発生しました。もう一度お試しください。"
+ }
+ },
+ "LIST": {
+ "LOADING_MESSAGE": "Loading campaigns...",
+ "404": "There are no campaigns created for this inbox.",
+ "TABLE_HEADER": {
+ "TITLE": "Title",
+ "MESSAGE": "メッセージ",
+ "STATUS": "状況",
+ "SENDER": "Sender",
+ "URL": "URL",
+ "TIME_ON_PAGE": "Time(Seconds)",
+ "CREATED_AT": "Created at"
+ },
+ "BUTTONS": {
+ "ADD": "Add",
+ "EDIT": "編集",
+ "DELETE": "削除"
+ },
+ "STATUS": {
+ "ENABLED": "有効です",
+ "DISABLED": "無効です"
+ },
+ "SENDER": {
+ "BOT": "Bot"
+ }
+ }
+ }
+}
diff --git a/app/javascript/dashboard/i18n/locale/ja/chatlist.json b/app/javascript/dashboard/i18n/locale/ja/chatlist.json
index 71aa0a41b94..b46ac89eb94 100644
--- a/app/javascript/dashboard/i18n/locale/ja/chatlist.json
+++ b/app/javascript/dashboard/i18n/locale/ja/chatlist.json
@@ -80,6 +80,7 @@
"RECEIVED_VIA_EMAIL": "メールで受信しました",
"VIEW_TWEET_IN_TWITTER": "ツイートをTwitterで見る",
"REPLY_TO_TWEET": "このつぶやきに返信",
- "NO_MESSAGES": "No Messages"
+ "NO_MESSAGES": "No Messages",
+ "NO_CONTENT": "No content available"
}
}
diff --git a/app/javascript/dashboard/i18n/locale/ja/contact.json b/app/javascript/dashboard/i18n/locale/ja/contact.json
index addffbe8937..4975d8f6da9 100644
--- a/app/javascript/dashboard/i18n/locale/ja/contact.json
+++ b/app/javascript/dashboard/i18n/locale/ja/contact.json
@@ -28,11 +28,17 @@
"INACTIVE_LABELS": "アカウントで利用可能なラベル名",
"REMOVE": "ラベルを削除するには×アイコンをクリックします",
"ADD": "+アイコンをクリックしてラベルを追加",
+ "ADD_BUTTON": "Add Labels",
"UPDATE_BUTTON": "ラベルの更新",
"UPDATE_ERROR": "ラベルを更新できませんでした。再度お試し下さい。"
},
"NO_LABELS_TO_ADD": "アカウントに定義されているラベルがありません。",
- "NO_AVAILABLE_LABELS": "この会話に追加されたラベルはありません。"
+ "NO_AVAILABLE_LABELS": "この会話に追加されたラベルはありません。",
+ "LABEL_SELECT": {
+ "TITLE": "Add Labels",
+ "PLACEHOLDER": "Search labels",
+ "NO_RESULT": "No labels found"
+ }
},
"MUTE_CONTACT": "会話をミュート",
"UNMUTE_CONTACT": "Unmute Conversation",
@@ -121,7 +127,7 @@
"ERROR": "Select an inbox"
},
"MESSAGE": {
- "LABEL": "Message",
+ "LABEL": "メッセージ",
"PLACEHOLDER": "Write your message here",
"ERROR": "Message can't be empty"
},
@@ -151,5 +157,18 @@
},
"VIEW_DETAILS": "View details"
}
+ },
+ "NOTES": {
+ "HEADER": {
+ "TITLE": "Notes"
+ },
+ "ADD": {
+ "BUTTON": "Add",
+ "PLACEHOLDER": "Add a note",
+ "TITLE": "Shift + Enter to create a note"
+ },
+ "FOOTER": {
+ "BUTTON": "View all notes"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/ja/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/ja/inboxMgmt.json
index 9de7d7b1d9f..47bd7eaa618 100644
--- a/app/javascript/dashboard/i18n/locale/ja/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/ja/inboxMgmt.json
@@ -227,6 +227,7 @@
"SETTINGS": "設定",
"COLLABORATORS": "共同編集者",
"CONFIGURATION": "設定",
+ "CAMPAIGN": "Campaigns",
"PRE_CHAT_FORM": "Pre Chat Form",
"BUSINESS_HOURS": "Business Hours"
},
diff --git a/app/javascript/dashboard/i18n/locale/ja/index.js b/app/javascript/dashboard/i18n/locale/ja/index.js
index 5dfc44e4b47..cf1dda7fe57 100644
--- a/app/javascript/dashboard/i18n/locale/ja/index.js
+++ b/app/javascript/dashboard/i18n/locale/ja/index.js
@@ -1,33 +1,37 @@
import { default as _agentMgmt } from './agentMgmt.json';
-import { default as _labelsMgmt } from './labelsMgmt.json';
+import { default as _campaign } from './campaign.json';
import { default as _cannedMgmt } from './cannedMgmt.json';
import { default as _chatlist } from './chatlist.json';
import { default as _contact } from './contact.json';
import { default as _conversation } from './conversation.json';
+import { default as _generalSettings } from './generalSettings.json';
import { default as _inboxMgmt } from './inboxMgmt.json';
+import { default as _integrations } from './integrations.json';
+import { default as _labelsMgmt } from './labelsMgmt.json';
import { default as _login } from './login.json';
import { default as _report } from './report.json';
import { default as _resetPassword } from './resetPassword.json';
import { default as _setNewPassword } from './setNewPassword.json';
import { default as _settings } from './settings.json';
import { default as _signup } from './signup.json';
-import { default as _integrations } from './integrations.json';
-import { default as _generalSettings } from './generalSettings.json';
+import { default as _teamsSettings } from './teamsSettings.json';
export default {
..._agentMgmt,
+ ..._campaign,
..._cannedMgmt,
..._chatlist,
..._contact,
..._conversation,
+ ..._generalSettings,
..._inboxMgmt,
+ ..._integrations,
+ ..._labelsMgmt,
..._login,
..._report,
- ..._labelsMgmt,
..._resetPassword,
..._setNewPassword,
..._settings,
..._signup,
- ..._integrations,
- ..._generalSettings,
+ ..._teamsSettings,
};
diff --git a/app/javascript/dashboard/i18n/locale/ja/report.json b/app/javascript/dashboard/i18n/locale/ja/report.json
index ceb6e7fa848..e2dd9688042 100644
--- a/app/javascript/dashboard/i18n/locale/ja/report.json
+++ b/app/javascript/dashboard/i18n/locale/ja/report.json
@@ -38,6 +38,18 @@
{
"id": 1,
"name": "過去 30 日間"
+ },
+ {
+ "id": 2,
+ "name": "Last 3 months"
+ },
+ {
+ "id": 3,
+ "name": "Last 6 months"
+ },
+ {
+ "id": 4,
+ "name": "Last year"
}
]
}
diff --git a/app/javascript/dashboard/i18n/locale/ko/campaign.json b/app/javascript/dashboard/i18n/locale/ko/campaign.json
new file mode 100644
index 00000000000..d8a2ed7aca7
--- /dev/null
+++ b/app/javascript/dashboard/i18n/locale/ko/campaign.json
@@ -0,0 +1,79 @@
+{
+ "CAMPAIGN": {
+ "HEADER": "Campaigns",
+ "SIDEBAR_TXT": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations. Click on Add Campaign to create a new campaign. You can also edit or delete an existing campaign by clicking on the Edit or Delete button.",
+ "HEADER_BTN_TXT": "Create a campaign",
+ "ADD": {
+ "TITLE": "Create a campaign",
+ "DESC": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations.",
+ "CANCEL_BUTTON_TEXT": "취소",
+ "CREATE_BUTTON_TEXT": "만들기",
+ "FORM": {
+ "TITLE": {
+ "LABEL": "Title",
+ "PLACEHOLDER": "Please enter the title of campaign",
+ "ERROR": "Title is required"
+ },
+ "MESSAGE": {
+ "LABEL": "Message",
+ "PLACEHOLDER": "Please enter the message of campaign",
+ "ERROR": "Message is required"
+ },
+ "SENT_BY": {
+ "LABEL": "보낸 사람",
+ "PLACEHOLDER": "Please select the the content of campaign",
+ "ERROR": "Sender is required"
+ },
+ "END_POINT": {
+ "LABEL": "URL",
+ "PLACEHOLDER": "Please enter the URL",
+ "ERROR": "올바른 URL을 입력하십시오."
+ },
+ "TIME_ON_PAGE": {
+ "LABEL": "Time on page(Seconds)",
+ "PLACEHOLDER": "Please enter the time",
+ "ERROR": "Time on page is required"
+ },
+ "ENABLED": "Enable campaign",
+ "SUBMIT": "Add Campaign"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Campaign created successfully",
+ "ERROR_MESSAGE": "There was an error. Please try again."
+ }
+ },
+ "EDIT": {
+ "TITLE": "Edit campaign",
+ "UPDATE_BUTTON_TEXT": "업데이트",
+ "API": {
+ "SUCCESS_MESSAGE": "Campaign updated successfully",
+ "ERROR_MESSAGE": "오류가 발생했습니다. 다시 시도하십시오."
+ }
+ },
+ "LIST": {
+ "LOADING_MESSAGE": "Loading campaigns...",
+ "404": "There are no campaigns created for this inbox.",
+ "TABLE_HEADER": {
+ "TITLE": "Title",
+ "MESSAGE": "Message",
+ "STATUS": "상태",
+ "SENDER": "Sender",
+ "URL": "URL",
+ "TIME_ON_PAGE": "Time(Seconds)",
+ "CREATED_AT": "Created at"
+ },
+ "BUTTONS": {
+ "ADD": "Add",
+ "EDIT": "수정",
+ "DELETE": "삭제"
+ },
+ "STATUS": {
+ "ENABLED": "사용함",
+ "DISABLED": "사용 안 함"
+ },
+ "SENDER": {
+ "BOT": "봇"
+ }
+ }
+ }
+}
diff --git a/app/javascript/dashboard/i18n/locale/ko/chatlist.json b/app/javascript/dashboard/i18n/locale/ko/chatlist.json
index ecd98b66cf6..2078a219368 100644
--- a/app/javascript/dashboard/i18n/locale/ko/chatlist.json
+++ b/app/javascript/dashboard/i18n/locale/ko/chatlist.json
@@ -80,6 +80,7 @@
"RECEIVED_VIA_EMAIL": "이메일을 통해 수신됨",
"VIEW_TWEET_IN_TWITTER": "트위터에서 트윗 보기",
"REPLY_TO_TWEET": "트윗에 응답하기",
- "NO_MESSAGES": "메시지 없음"
+ "NO_MESSAGES": "메시지 없음",
+ "NO_CONTENT": "No content available"
}
}
diff --git a/app/javascript/dashboard/i18n/locale/ko/contact.json b/app/javascript/dashboard/i18n/locale/ko/contact.json
index 67b8758ac56..52ac02c1b19 100644
--- a/app/javascript/dashboard/i18n/locale/ko/contact.json
+++ b/app/javascript/dashboard/i18n/locale/ko/contact.json
@@ -28,11 +28,17 @@
"INACTIVE_LABELS": "계정에서 사용할 수 있는 라벨",
"REMOVE": "라벨을 제거하려면 X 아이콘을 클릭하십시오.",
"ADD": "라벨을 추가하려면 + 아이콘을 클릭하십시오.",
+ "ADD_BUTTON": "Add Labels",
"UPDATE_BUTTON": "라벨 업데이트",
"UPDATE_ERROR": "라벨을 업데이트할 수 없습니다. 다시 시도하십시오."
},
"NO_LABELS_TO_ADD": "계정에는 더 이상 라벨이 정의되어 있지 않습니다.",
- "NO_AVAILABLE_LABELS": "이 대화에 추가된 라벨이 없습니다."
+ "NO_AVAILABLE_LABELS": "이 대화에 추가된 라벨이 없습니다.",
+ "LABEL_SELECT": {
+ "TITLE": "Add Labels",
+ "PLACEHOLDER": "Search labels",
+ "NO_RESULT": "No labels found"
+ }
},
"MUTE_CONTACT": "대화 음소거",
"UNMUTE_CONTACT": "대화 음소거 해제",
@@ -151,5 +157,18 @@
},
"VIEW_DETAILS": "상세보기"
}
+ },
+ "NOTES": {
+ "HEADER": {
+ "TITLE": "Notes"
+ },
+ "ADD": {
+ "BUTTON": "Add",
+ "PLACEHOLDER": "Add a note",
+ "TITLE": "Shift + Enter to create a note"
+ },
+ "FOOTER": {
+ "BUTTON": "View all notes"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/ko/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/ko/inboxMgmt.json
index eacde87d43c..f492f69f96a 100644
--- a/app/javascript/dashboard/i18n/locale/ko/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/ko/inboxMgmt.json
@@ -227,6 +227,7 @@
"SETTINGS": "설정",
"COLLABORATORS": "협력자",
"CONFIGURATION": "설치",
+ "CAMPAIGN": "Campaigns",
"PRE_CHAT_FORM": "대화 전 설문",
"BUSINESS_HOURS": "영업시간"
},
diff --git a/app/javascript/dashboard/i18n/locale/ko/index.js b/app/javascript/dashboard/i18n/locale/ko/index.js
index 5dfc44e4b47..cf1dda7fe57 100644
--- a/app/javascript/dashboard/i18n/locale/ko/index.js
+++ b/app/javascript/dashboard/i18n/locale/ko/index.js
@@ -1,33 +1,37 @@
import { default as _agentMgmt } from './agentMgmt.json';
-import { default as _labelsMgmt } from './labelsMgmt.json';
+import { default as _campaign } from './campaign.json';
import { default as _cannedMgmt } from './cannedMgmt.json';
import { default as _chatlist } from './chatlist.json';
import { default as _contact } from './contact.json';
import { default as _conversation } from './conversation.json';
+import { default as _generalSettings } from './generalSettings.json';
import { default as _inboxMgmt } from './inboxMgmt.json';
+import { default as _integrations } from './integrations.json';
+import { default as _labelsMgmt } from './labelsMgmt.json';
import { default as _login } from './login.json';
import { default as _report } from './report.json';
import { default as _resetPassword } from './resetPassword.json';
import { default as _setNewPassword } from './setNewPassword.json';
import { default as _settings } from './settings.json';
import { default as _signup } from './signup.json';
-import { default as _integrations } from './integrations.json';
-import { default as _generalSettings } from './generalSettings.json';
+import { default as _teamsSettings } from './teamsSettings.json';
export default {
..._agentMgmt,
+ ..._campaign,
..._cannedMgmt,
..._chatlist,
..._contact,
..._conversation,
+ ..._generalSettings,
..._inboxMgmt,
+ ..._integrations,
+ ..._labelsMgmt,
..._login,
..._report,
- ..._labelsMgmt,
..._resetPassword,
..._setNewPassword,
..._settings,
..._signup,
- ..._integrations,
- ..._generalSettings,
+ ..._teamsSettings,
};
diff --git a/app/javascript/dashboard/i18n/locale/ko/report.json b/app/javascript/dashboard/i18n/locale/ko/report.json
index f694733037f..57f0786af1a 100644
--- a/app/javascript/dashboard/i18n/locale/ko/report.json
+++ b/app/javascript/dashboard/i18n/locale/ko/report.json
@@ -38,6 +38,18 @@
{
"id": 1,
"name": "지난 30일"
+ },
+ {
+ "id": 2,
+ "name": "Last 3 months"
+ },
+ {
+ "id": 3,
+ "name": "Last 6 months"
+ },
+ {
+ "id": 4,
+ "name": "Last year"
}
]
}
diff --git a/app/javascript/dashboard/i18n/locale/ml/campaign.json b/app/javascript/dashboard/i18n/locale/ml/campaign.json
new file mode 100644
index 00000000000..34628226f4b
--- /dev/null
+++ b/app/javascript/dashboard/i18n/locale/ml/campaign.json
@@ -0,0 +1,79 @@
+{
+ "CAMPAIGN": {
+ "HEADER": "Campaigns",
+ "SIDEBAR_TXT": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations. Click on Add Campaign to create a new campaign. You can also edit or delete an existing campaign by clicking on the Edit or Delete button.",
+ "HEADER_BTN_TXT": "Create a campaign",
+ "ADD": {
+ "TITLE": "Create a campaign",
+ "DESC": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations.",
+ "CANCEL_BUTTON_TEXT": "റദ്ദാക്കുക",
+ "CREATE_BUTTON_TEXT": "സൃഷ്ടിക്കുക",
+ "FORM": {
+ "TITLE": {
+ "LABEL": "Title",
+ "PLACEHOLDER": "Please enter the title of campaign",
+ "ERROR": "Title is required"
+ },
+ "MESSAGE": {
+ "LABEL": "Message",
+ "PLACEHOLDER": "Please enter the message of campaign",
+ "ERROR": "Message is required"
+ },
+ "SENT_BY": {
+ "LABEL": "Sent by",
+ "PLACEHOLDER": "Please select the the content of campaign",
+ "ERROR": "Sender is required"
+ },
+ "END_POINT": {
+ "LABEL": "URL",
+ "PLACEHOLDER": "Please enter the URL",
+ "ERROR": "ദയവായി സാധുവായ ഒരു യുആർഎൽ നൽകുക"
+ },
+ "TIME_ON_PAGE": {
+ "LABEL": "Time on page(Seconds)",
+ "PLACEHOLDER": "Please enter the time",
+ "ERROR": "Time on page is required"
+ },
+ "ENABLED": "Enable campaign",
+ "SUBMIT": "Add Campaign"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Campaign created successfully",
+ "ERROR_MESSAGE": "There was an error. Please try again."
+ }
+ },
+ "EDIT": {
+ "TITLE": "Edit campaign",
+ "UPDATE_BUTTON_TEXT": "അപ്ഡേറ്റ്",
+ "API": {
+ "SUCCESS_MESSAGE": "Campaign updated successfully",
+ "ERROR_MESSAGE": "ഒരു പിശക് ഉണ്ടായിരുന്നു, ദയവായി വീണ്ടും ശ്രമിക്കുക"
+ }
+ },
+ "LIST": {
+ "LOADING_MESSAGE": "Loading campaigns...",
+ "404": "There are no campaigns created for this inbox.",
+ "TABLE_HEADER": {
+ "TITLE": "Title",
+ "MESSAGE": "Message",
+ "STATUS": "സ്റ്റാറ്റസ്",
+ "SENDER": "Sender",
+ "URL": "URL",
+ "TIME_ON_PAGE": "Time(Seconds)",
+ "CREATED_AT": "Created at"
+ },
+ "BUTTONS": {
+ "ADD": "Add",
+ "EDIT": "എഡിറ്റുചെയ്യുക",
+ "DELETE": "ഇല്ലാതാക്കുക"
+ },
+ "STATUS": {
+ "ENABLED": "പ്രവർത്തനക്ഷമമാക്കി",
+ "DISABLED": "പ്രവർത്തനരഹിതമാക്കി"
+ },
+ "SENDER": {
+ "BOT": "ബോട്ട്"
+ }
+ }
+ }
+}
diff --git a/app/javascript/dashboard/i18n/locale/ml/chatlist.json b/app/javascript/dashboard/i18n/locale/ml/chatlist.json
index 7a0db13577c..06ce7caeb1f 100644
--- a/app/javascript/dashboard/i18n/locale/ml/chatlist.json
+++ b/app/javascript/dashboard/i18n/locale/ml/chatlist.json
@@ -80,6 +80,7 @@
"RECEIVED_VIA_EMAIL": "ഇമെയിൽ വഴി ലഭിച്ചു",
"VIEW_TWEET_IN_TWITTER": "ട്വിറ്ററിൽ ട്വീറ്റ് കാണുക",
"REPLY_TO_TWEET": "ഈ ട്വീറ്റിന് മറുപടി നൽകുക",
- "NO_MESSAGES": "No Messages"
+ "NO_MESSAGES": "No Messages",
+ "NO_CONTENT": "No content available"
}
}
diff --git a/app/javascript/dashboard/i18n/locale/ml/contact.json b/app/javascript/dashboard/i18n/locale/ml/contact.json
index a12cf2ea6a1..d2af1ebb6eb 100644
--- a/app/javascript/dashboard/i18n/locale/ml/contact.json
+++ b/app/javascript/dashboard/i18n/locale/ml/contact.json
@@ -28,11 +28,17 @@
"INACTIVE_LABELS": "അക്കൗണ്ടിൽ ലേബലുകൾ ലഭ്യമാണ്",
"REMOVE": "ലേബൽ നീക്കംചെയ്യുന്നതിന് എക്സ് ഐക്കണിൽ ക്ലിക്കുചെയ്യുക",
"ADD": "ലേബൽ ചേർക്കാൻ + ഐക്കണിൽ ക്ലിക്കുചെയ്യുക",
+ "ADD_BUTTON": "Add Labels",
"UPDATE_BUTTON": "ലേബലുകൾ അപ്ഡേറ്റുചെയ്യുക",
"UPDATE_ERROR": "ലേബലുകൾ അപ്ഡേറ്റ് ചെയ്യാൻ കഴിഞ്ഞില്ല, വീണ്ടും ശ്രമിക്കുക."
},
"NO_LABELS_TO_ADD": "അക്കൗണ്ടിൽ കൂടുതൽ ലേബലുകൾ നിർവചിച്ചിട്ടില്ല.",
- "NO_AVAILABLE_LABELS": "ഈ സംഭാഷണത്തിലേക്ക് ലേബലുകളൊന്നും ചേർത്തിട്ടില്ല."
+ "NO_AVAILABLE_LABELS": "ഈ സംഭാഷണത്തിലേക്ക് ലേബലുകളൊന്നും ചേർത്തിട്ടില്ല.",
+ "LABEL_SELECT": {
+ "TITLE": "Add Labels",
+ "PLACEHOLDER": "Search labels",
+ "NO_RESULT": "No labels found"
+ }
},
"MUTE_CONTACT": "സംഭാഷണം ഒച്ചയിലാതാക്കുക",
"UNMUTE_CONTACT": "സംഭാഷണം നിശബ്ദമാക്കുക",
@@ -151,5 +157,18 @@
},
"VIEW_DETAILS": "View details"
}
+ },
+ "NOTES": {
+ "HEADER": {
+ "TITLE": "Notes"
+ },
+ "ADD": {
+ "BUTTON": "Add",
+ "PLACEHOLDER": "Add a note",
+ "TITLE": "Shift + Enter to create a note"
+ },
+ "FOOTER": {
+ "BUTTON": "View all notes"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/ml/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/ml/inboxMgmt.json
index 41adc494557..341b1a217cd 100644
--- a/app/javascript/dashboard/i18n/locale/ml/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/ml/inboxMgmt.json
@@ -227,6 +227,7 @@
"SETTINGS": "ക്രമീകരണങ്ങൾ",
"COLLABORATORS": "Collaborators",
"CONFIGURATION": "Configuration",
+ "CAMPAIGN": "Campaigns",
"PRE_CHAT_FORM": "Pre Chat Form",
"BUSINESS_HOURS": "Business Hours"
},
diff --git a/app/javascript/dashboard/i18n/locale/ml/index.js b/app/javascript/dashboard/i18n/locale/ml/index.js
index 5dfc44e4b47..cf1dda7fe57 100644
--- a/app/javascript/dashboard/i18n/locale/ml/index.js
+++ b/app/javascript/dashboard/i18n/locale/ml/index.js
@@ -1,33 +1,37 @@
import { default as _agentMgmt } from './agentMgmt.json';
-import { default as _labelsMgmt } from './labelsMgmt.json';
+import { default as _campaign } from './campaign.json';
import { default as _cannedMgmt } from './cannedMgmt.json';
import { default as _chatlist } from './chatlist.json';
import { default as _contact } from './contact.json';
import { default as _conversation } from './conversation.json';
+import { default as _generalSettings } from './generalSettings.json';
import { default as _inboxMgmt } from './inboxMgmt.json';
+import { default as _integrations } from './integrations.json';
+import { default as _labelsMgmt } from './labelsMgmt.json';
import { default as _login } from './login.json';
import { default as _report } from './report.json';
import { default as _resetPassword } from './resetPassword.json';
import { default as _setNewPassword } from './setNewPassword.json';
import { default as _settings } from './settings.json';
import { default as _signup } from './signup.json';
-import { default as _integrations } from './integrations.json';
-import { default as _generalSettings } from './generalSettings.json';
+import { default as _teamsSettings } from './teamsSettings.json';
export default {
..._agentMgmt,
+ ..._campaign,
..._cannedMgmt,
..._chatlist,
..._contact,
..._conversation,
+ ..._generalSettings,
..._inboxMgmt,
+ ..._integrations,
+ ..._labelsMgmt,
..._login,
..._report,
- ..._labelsMgmt,
..._resetPassword,
..._setNewPassword,
..._settings,
..._signup,
- ..._integrations,
- ..._generalSettings,
+ ..._teamsSettings,
};
diff --git a/app/javascript/dashboard/i18n/locale/ml/report.json b/app/javascript/dashboard/i18n/locale/ml/report.json
index 4a598143ccb..41080ccd054 100644
--- a/app/javascript/dashboard/i18n/locale/ml/report.json
+++ b/app/javascript/dashboard/i18n/locale/ml/report.json
@@ -38,6 +38,18 @@
{
"id": 1,
"name": "കഴിഞ്ഞ 30 ദിവസം"
+ },
+ {
+ "id": 2,
+ "name": "Last 3 months"
+ },
+ {
+ "id": 3,
+ "name": "Last 6 months"
+ },
+ {
+ "id": 4,
+ "name": "Last year"
}
]
}
diff --git a/app/javascript/dashboard/i18n/locale/ne/campaign.json b/app/javascript/dashboard/i18n/locale/ne/campaign.json
new file mode 100644
index 00000000000..2eed61b1929
--- /dev/null
+++ b/app/javascript/dashboard/i18n/locale/ne/campaign.json
@@ -0,0 +1,79 @@
+{
+ "CAMPAIGN": {
+ "HEADER": "Campaigns",
+ "SIDEBAR_TXT": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations. Click on Add Campaign to create a new campaign. You can also edit or delete an existing campaign by clicking on the Edit or Delete button.",
+ "HEADER_BTN_TXT": "Create a campaign",
+ "ADD": {
+ "TITLE": "Create a campaign",
+ "DESC": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations.",
+ "CANCEL_BUTTON_TEXT": "Cancel",
+ "CREATE_BUTTON_TEXT": "Create",
+ "FORM": {
+ "TITLE": {
+ "LABEL": "Title",
+ "PLACEHOLDER": "Please enter the title of campaign",
+ "ERROR": "Title is required"
+ },
+ "MESSAGE": {
+ "LABEL": "Message",
+ "PLACEHOLDER": "Please enter the message of campaign",
+ "ERROR": "Message is required"
+ },
+ "SENT_BY": {
+ "LABEL": "Sent by",
+ "PLACEHOLDER": "Please select the the content of campaign",
+ "ERROR": "Sender is required"
+ },
+ "END_POINT": {
+ "LABEL": "URL",
+ "PLACEHOLDER": "Please enter the URL",
+ "ERROR": "Please enter a valid URL"
+ },
+ "TIME_ON_PAGE": {
+ "LABEL": "Time on page(Seconds)",
+ "PLACEHOLDER": "Please enter the time",
+ "ERROR": "Time on page is required"
+ },
+ "ENABLED": "Enable campaign",
+ "SUBMIT": "Add Campaign"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Campaign created successfully",
+ "ERROR_MESSAGE": "There was an error. Please try again."
+ }
+ },
+ "EDIT": {
+ "TITLE": "Edit campaign",
+ "UPDATE_BUTTON_TEXT": "Update",
+ "API": {
+ "SUCCESS_MESSAGE": "Campaign updated successfully",
+ "ERROR_MESSAGE": "There was an error, please try again"
+ }
+ },
+ "LIST": {
+ "LOADING_MESSAGE": "Loading campaigns...",
+ "404": "There are no campaigns created for this inbox.",
+ "TABLE_HEADER": {
+ "TITLE": "Title",
+ "MESSAGE": "Message",
+ "STATUS": "Status",
+ "SENDER": "Sender",
+ "URL": "URL",
+ "TIME_ON_PAGE": "Time(Seconds)",
+ "CREATED_AT": "Created at"
+ },
+ "BUTTONS": {
+ "ADD": "Add",
+ "EDIT": "Edit",
+ "DELETE": "Delete"
+ },
+ "STATUS": {
+ "ENABLED": "Enabled",
+ "DISABLED": "Disabled"
+ },
+ "SENDER": {
+ "BOT": "Bot"
+ }
+ }
+ }
+}
diff --git a/app/javascript/dashboard/i18n/locale/ne/chatlist.json b/app/javascript/dashboard/i18n/locale/ne/chatlist.json
index 2285547890f..ef4e0629ac2 100644
--- a/app/javascript/dashboard/i18n/locale/ne/chatlist.json
+++ b/app/javascript/dashboard/i18n/locale/ne/chatlist.json
@@ -80,6 +80,7 @@
"RECEIVED_VIA_EMAIL": "Received via email",
"VIEW_TWEET_IN_TWITTER": "View tweet in Twitter",
"REPLY_TO_TWEET": "Reply to this tweet",
- "NO_MESSAGES": "No Messages"
+ "NO_MESSAGES": "No Messages",
+ "NO_CONTENT": "No content available"
}
}
diff --git a/app/javascript/dashboard/i18n/locale/ne/contact.json b/app/javascript/dashboard/i18n/locale/ne/contact.json
index 52e42bc6005..b00c7c3d418 100644
--- a/app/javascript/dashboard/i18n/locale/ne/contact.json
+++ b/app/javascript/dashboard/i18n/locale/ne/contact.json
@@ -28,11 +28,17 @@
"INACTIVE_LABELS": "Labels available in the account",
"REMOVE": "Click on X icon to remove the label",
"ADD": "Click on + icon to add the label",
+ "ADD_BUTTON": "Add Labels",
"UPDATE_BUTTON": "Update labels",
"UPDATE_ERROR": "Couldn't update labels, try again."
},
"NO_LABELS_TO_ADD": "There are no more labels defined in the account.",
- "NO_AVAILABLE_LABELS": "There are no labels added to this conversation."
+ "NO_AVAILABLE_LABELS": "There are no labels added to this conversation.",
+ "LABEL_SELECT": {
+ "TITLE": "Add Labels",
+ "PLACEHOLDER": "Search labels",
+ "NO_RESULT": "No labels found"
+ }
},
"MUTE_CONTACT": "Mute Conversation",
"UNMUTE_CONTACT": "Unmute Conversation",
@@ -151,5 +157,18 @@
},
"VIEW_DETAILS": "View details"
}
+ },
+ "NOTES": {
+ "HEADER": {
+ "TITLE": "Notes"
+ },
+ "ADD": {
+ "BUTTON": "Add",
+ "PLACEHOLDER": "Add a note",
+ "TITLE": "Shift + Enter to create a note"
+ },
+ "FOOTER": {
+ "BUTTON": "View all notes"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/ne/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/ne/inboxMgmt.json
index a1184f5db7e..4d0fcdffc41 100644
--- a/app/javascript/dashboard/i18n/locale/ne/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/ne/inboxMgmt.json
@@ -227,6 +227,7 @@
"SETTINGS": "Settings",
"COLLABORATORS": "Collaborators",
"CONFIGURATION": "Configuration",
+ "CAMPAIGN": "Campaigns",
"PRE_CHAT_FORM": "Pre Chat Form",
"BUSINESS_HOURS": "Business Hours"
},
diff --git a/app/javascript/dashboard/i18n/locale/ne/index.js b/app/javascript/dashboard/i18n/locale/ne/index.js
new file mode 100644
index 00000000000..cf1dda7fe57
--- /dev/null
+++ b/app/javascript/dashboard/i18n/locale/ne/index.js
@@ -0,0 +1,37 @@
+import { default as _agentMgmt } from './agentMgmt.json';
+import { default as _campaign } from './campaign.json';
+import { default as _cannedMgmt } from './cannedMgmt.json';
+import { default as _chatlist } from './chatlist.json';
+import { default as _contact } from './contact.json';
+import { default as _conversation } from './conversation.json';
+import { default as _generalSettings } from './generalSettings.json';
+import { default as _inboxMgmt } from './inboxMgmt.json';
+import { default as _integrations } from './integrations.json';
+import { default as _labelsMgmt } from './labelsMgmt.json';
+import { default as _login } from './login.json';
+import { default as _report } from './report.json';
+import { default as _resetPassword } from './resetPassword.json';
+import { default as _setNewPassword } from './setNewPassword.json';
+import { default as _settings } from './settings.json';
+import { default as _signup } from './signup.json';
+import { default as _teamsSettings } from './teamsSettings.json';
+
+export default {
+ ..._agentMgmt,
+ ..._campaign,
+ ..._cannedMgmt,
+ ..._chatlist,
+ ..._contact,
+ ..._conversation,
+ ..._generalSettings,
+ ..._inboxMgmt,
+ ..._integrations,
+ ..._labelsMgmt,
+ ..._login,
+ ..._report,
+ ..._resetPassword,
+ ..._setNewPassword,
+ ..._settings,
+ ..._signup,
+ ..._teamsSettings,
+};
diff --git a/app/javascript/dashboard/i18n/locale/ne/report.json b/app/javascript/dashboard/i18n/locale/ne/report.json
index 22e4a1c7520..cf2c14a57f9 100644
--- a/app/javascript/dashboard/i18n/locale/ne/report.json
+++ b/app/javascript/dashboard/i18n/locale/ne/report.json
@@ -38,6 +38,18 @@
{
"id": 1,
"name": "Last 30 days"
+ },
+ {
+ "id": 2,
+ "name": "Last 3 months"
+ },
+ {
+ "id": 3,
+ "name": "Last 6 months"
+ },
+ {
+ "id": 4,
+ "name": "Last year"
}
]
}
diff --git a/app/javascript/dashboard/i18n/locale/nl/campaign.json b/app/javascript/dashboard/i18n/locale/nl/campaign.json
new file mode 100644
index 00000000000..6314848a8f2
--- /dev/null
+++ b/app/javascript/dashboard/i18n/locale/nl/campaign.json
@@ -0,0 +1,79 @@
+{
+ "CAMPAIGN": {
+ "HEADER": "Campaigns",
+ "SIDEBAR_TXT": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations. Click on Add Campaign to create a new campaign. You can also edit or delete an existing campaign by clicking on the Edit or Delete button.",
+ "HEADER_BTN_TXT": "Create a campaign",
+ "ADD": {
+ "TITLE": "Create a campaign",
+ "DESC": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations.",
+ "CANCEL_BUTTON_TEXT": "Annuleren",
+ "CREATE_BUTTON_TEXT": "Aanmaken",
+ "FORM": {
+ "TITLE": {
+ "LABEL": "Title",
+ "PLACEHOLDER": "Please enter the title of campaign",
+ "ERROR": "Title is required"
+ },
+ "MESSAGE": {
+ "LABEL": "Message",
+ "PLACEHOLDER": "Please enter the message of campaign",
+ "ERROR": "Message is required"
+ },
+ "SENT_BY": {
+ "LABEL": "Sent by",
+ "PLACEHOLDER": "Please select the the content of campaign",
+ "ERROR": "Sender is required"
+ },
+ "END_POINT": {
+ "LABEL": "URL",
+ "PLACEHOLDER": "Please enter the URL",
+ "ERROR": "Voer een geldige URL in"
+ },
+ "TIME_ON_PAGE": {
+ "LABEL": "Time on page(Seconds)",
+ "PLACEHOLDER": "Please enter the time",
+ "ERROR": "Time on page is required"
+ },
+ "ENABLED": "Enable campaign",
+ "SUBMIT": "Add Campaign"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Campaign created successfully",
+ "ERROR_MESSAGE": "There was an error. Please try again."
+ }
+ },
+ "EDIT": {
+ "TITLE": "Edit campaign",
+ "UPDATE_BUTTON_TEXT": "Vernieuwen",
+ "API": {
+ "SUCCESS_MESSAGE": "Campaign updated successfully",
+ "ERROR_MESSAGE": "Er is een fout opgetreden, probeer het opnieuw"
+ }
+ },
+ "LIST": {
+ "LOADING_MESSAGE": "Loading campaigns...",
+ "404": "There are no campaigns created for this inbox.",
+ "TABLE_HEADER": {
+ "TITLE": "Title",
+ "MESSAGE": "Message",
+ "STATUS": "Status",
+ "SENDER": "Sender",
+ "URL": "URL",
+ "TIME_ON_PAGE": "Time(Seconds)",
+ "CREATED_AT": "Created at"
+ },
+ "BUTTONS": {
+ "ADD": "Add",
+ "EDIT": "Bewerken",
+ "DELETE": "Verwijderen"
+ },
+ "STATUS": {
+ "ENABLED": "Ingeschakeld",
+ "DISABLED": "Uitgeschakeld"
+ },
+ "SENDER": {
+ "BOT": "Bot"
+ }
+ }
+ }
+}
diff --git a/app/javascript/dashboard/i18n/locale/nl/chatlist.json b/app/javascript/dashboard/i18n/locale/nl/chatlist.json
index 9457f267c05..24d6d4865a7 100644
--- a/app/javascript/dashboard/i18n/locale/nl/chatlist.json
+++ b/app/javascript/dashboard/i18n/locale/nl/chatlist.json
@@ -80,6 +80,7 @@
"RECEIVED_VIA_EMAIL": "Received via email",
"VIEW_TWEET_IN_TWITTER": "View tweet in Twitter",
"REPLY_TO_TWEET": "Reply to this tweet",
- "NO_MESSAGES": "No Messages"
+ "NO_MESSAGES": "No Messages",
+ "NO_CONTENT": "No content available"
}
}
diff --git a/app/javascript/dashboard/i18n/locale/nl/contact.json b/app/javascript/dashboard/i18n/locale/nl/contact.json
index f5b16857724..848a1523cb5 100644
--- a/app/javascript/dashboard/i18n/locale/nl/contact.json
+++ b/app/javascript/dashboard/i18n/locale/nl/contact.json
@@ -28,11 +28,17 @@
"INACTIVE_LABELS": "Labels beschikbaar in het account",
"REMOVE": "Klik op het X-pictogram om het label te verwijderen",
"ADD": "Klik op + pictogram om het label toe te voegen",
+ "ADD_BUTTON": "Add Labels",
"UPDATE_BUTTON": "Labels bijwerken",
"UPDATE_ERROR": "Kon labels niet updaten, probeer het opnieuw."
},
"NO_LABELS_TO_ADD": "There are no more labels defined in the account.",
- "NO_AVAILABLE_LABELS": "Er zijn geen labels toegevoegd aan dit gesprek."
+ "NO_AVAILABLE_LABELS": "Er zijn geen labels toegevoegd aan dit gesprek.",
+ "LABEL_SELECT": {
+ "TITLE": "Add Labels",
+ "PLACEHOLDER": "Search labels",
+ "NO_RESULT": "No labels found"
+ }
},
"MUTE_CONTACT": "Gesprek dempen",
"UNMUTE_CONTACT": "Unmute Conversation",
@@ -151,5 +157,18 @@
},
"VIEW_DETAILS": "View details"
}
+ },
+ "NOTES": {
+ "HEADER": {
+ "TITLE": "Notes"
+ },
+ "ADD": {
+ "BUTTON": "Add",
+ "PLACEHOLDER": "Add a note",
+ "TITLE": "Shift + Enter to create a note"
+ },
+ "FOOTER": {
+ "BUTTON": "View all notes"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/nl/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/nl/inboxMgmt.json
index e7372877a11..f136d7153fe 100644
--- a/app/javascript/dashboard/i18n/locale/nl/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/nl/inboxMgmt.json
@@ -227,6 +227,7 @@
"SETTINGS": "Instellingen",
"COLLABORATORS": "Collaborators",
"CONFIGURATION": "Configuration",
+ "CAMPAIGN": "Campaigns",
"PRE_CHAT_FORM": "Pre Chat Form",
"BUSINESS_HOURS": "Business Hours"
},
diff --git a/app/javascript/dashboard/i18n/locale/nl/index.js b/app/javascript/dashboard/i18n/locale/nl/index.js
index 5dfc44e4b47..cf1dda7fe57 100644
--- a/app/javascript/dashboard/i18n/locale/nl/index.js
+++ b/app/javascript/dashboard/i18n/locale/nl/index.js
@@ -1,33 +1,37 @@
import { default as _agentMgmt } from './agentMgmt.json';
-import { default as _labelsMgmt } from './labelsMgmt.json';
+import { default as _campaign } from './campaign.json';
import { default as _cannedMgmt } from './cannedMgmt.json';
import { default as _chatlist } from './chatlist.json';
import { default as _contact } from './contact.json';
import { default as _conversation } from './conversation.json';
+import { default as _generalSettings } from './generalSettings.json';
import { default as _inboxMgmt } from './inboxMgmt.json';
+import { default as _integrations } from './integrations.json';
+import { default as _labelsMgmt } from './labelsMgmt.json';
import { default as _login } from './login.json';
import { default as _report } from './report.json';
import { default as _resetPassword } from './resetPassword.json';
import { default as _setNewPassword } from './setNewPassword.json';
import { default as _settings } from './settings.json';
import { default as _signup } from './signup.json';
-import { default as _integrations } from './integrations.json';
-import { default as _generalSettings } from './generalSettings.json';
+import { default as _teamsSettings } from './teamsSettings.json';
export default {
..._agentMgmt,
+ ..._campaign,
..._cannedMgmt,
..._chatlist,
..._contact,
..._conversation,
+ ..._generalSettings,
..._inboxMgmt,
+ ..._integrations,
+ ..._labelsMgmt,
..._login,
..._report,
- ..._labelsMgmt,
..._resetPassword,
..._setNewPassword,
..._settings,
..._signup,
- ..._integrations,
- ..._generalSettings,
+ ..._teamsSettings,
};
diff --git a/app/javascript/dashboard/i18n/locale/nl/report.json b/app/javascript/dashboard/i18n/locale/nl/report.json
index bbe2293abc6..96d77ba49ed 100644
--- a/app/javascript/dashboard/i18n/locale/nl/report.json
+++ b/app/javascript/dashboard/i18n/locale/nl/report.json
@@ -38,6 +38,18 @@
{
"id": 1,
"name": "Laatste 30 dagen"
+ },
+ {
+ "id": 2,
+ "name": "Last 3 months"
+ },
+ {
+ "id": 3,
+ "name": "Last 6 months"
+ },
+ {
+ "id": 4,
+ "name": "Last year"
}
]
}
diff --git a/app/javascript/dashboard/i18n/locale/no/campaign.json b/app/javascript/dashboard/i18n/locale/no/campaign.json
new file mode 100644
index 00000000000..f3d9c1dc2d7
--- /dev/null
+++ b/app/javascript/dashboard/i18n/locale/no/campaign.json
@@ -0,0 +1,79 @@
+{
+ "CAMPAIGN": {
+ "HEADER": "Campaigns",
+ "SIDEBAR_TXT": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations. Click on Add Campaign to create a new campaign. You can also edit or delete an existing campaign by clicking on the Edit or Delete button.",
+ "HEADER_BTN_TXT": "Create a campaign",
+ "ADD": {
+ "TITLE": "Create a campaign",
+ "DESC": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations.",
+ "CANCEL_BUTTON_TEXT": "Avbryt",
+ "CREATE_BUTTON_TEXT": "Opprett",
+ "FORM": {
+ "TITLE": {
+ "LABEL": "Title",
+ "PLACEHOLDER": "Please enter the title of campaign",
+ "ERROR": "Title is required"
+ },
+ "MESSAGE": {
+ "LABEL": "Message",
+ "PLACEHOLDER": "Please enter the message of campaign",
+ "ERROR": "Message is required"
+ },
+ "SENT_BY": {
+ "LABEL": "Sendt av",
+ "PLACEHOLDER": "Please select the the content of campaign",
+ "ERROR": "Sender is required"
+ },
+ "END_POINT": {
+ "LABEL": "URL",
+ "PLACEHOLDER": "Please enter the URL",
+ "ERROR": "Vennligst skriv inn en gyldig URL"
+ },
+ "TIME_ON_PAGE": {
+ "LABEL": "Time on page(Seconds)",
+ "PLACEHOLDER": "Please enter the time",
+ "ERROR": "Time on page is required"
+ },
+ "ENABLED": "Enable campaign",
+ "SUBMIT": "Add Campaign"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Campaign created successfully",
+ "ERROR_MESSAGE": "There was an error. Please try again."
+ }
+ },
+ "EDIT": {
+ "TITLE": "Edit campaign",
+ "UPDATE_BUTTON_TEXT": "Oppdater",
+ "API": {
+ "SUCCESS_MESSAGE": "Campaign updated successfully",
+ "ERROR_MESSAGE": "Det oppstod en feil. Prøv igjen"
+ }
+ },
+ "LIST": {
+ "LOADING_MESSAGE": "Loading campaigns...",
+ "404": "There are no campaigns created for this inbox.",
+ "TABLE_HEADER": {
+ "TITLE": "Title",
+ "MESSAGE": "Message",
+ "STATUS": "Satus",
+ "SENDER": "Sender",
+ "URL": "URL",
+ "TIME_ON_PAGE": "Time(Seconds)",
+ "CREATED_AT": "Created at"
+ },
+ "BUTTONS": {
+ "ADD": "Add",
+ "EDIT": "Rediger",
+ "DELETE": "Slett"
+ },
+ "STATUS": {
+ "ENABLED": "Aktivert",
+ "DISABLED": "Deaktivert"
+ },
+ "SENDER": {
+ "BOT": "Bot"
+ }
+ }
+ }
+}
diff --git a/app/javascript/dashboard/i18n/locale/no/chatlist.json b/app/javascript/dashboard/i18n/locale/no/chatlist.json
index 1d021333f80..d174f04546b 100644
--- a/app/javascript/dashboard/i18n/locale/no/chatlist.json
+++ b/app/javascript/dashboard/i18n/locale/no/chatlist.json
@@ -80,6 +80,7 @@
"RECEIVED_VIA_EMAIL": "Mottatt via e-post",
"VIEW_TWEET_IN_TWITTER": "Vis tweet i Twitter",
"REPLY_TO_TWEET": "Svar på denne tweeten",
- "NO_MESSAGES": "Ingen meldinger"
+ "NO_MESSAGES": "Ingen meldinger",
+ "NO_CONTENT": "No content available"
}
}
diff --git a/app/javascript/dashboard/i18n/locale/no/contact.json b/app/javascript/dashboard/i18n/locale/no/contact.json
index fa51cea65d9..2da471d4294 100644
--- a/app/javascript/dashboard/i18n/locale/no/contact.json
+++ b/app/javascript/dashboard/i18n/locale/no/contact.json
@@ -28,11 +28,17 @@
"INACTIVE_LABELS": "Etiketter tilgjengelig i kontoen",
"REMOVE": "Klikk på X ikonet for å fjerne etiketten",
"ADD": "Klikk på + ikonet for å legge til etiketten",
+ "ADD_BUTTON": "Add Labels",
"UPDATE_BUTTON": "Oppdater etiketter",
"UPDATE_ERROR": "Kunne ikke oppdatere etiketter, prøv på nytt."
},
"NO_LABELS_TO_ADD": "Det er ingen flere etiketter definert i kontoen.",
- "NO_AVAILABLE_LABELS": "Det er ingen etiketter lagt til i denne samtalen."
+ "NO_AVAILABLE_LABELS": "Det er ingen etiketter lagt til i denne samtalen.",
+ "LABEL_SELECT": {
+ "TITLE": "Add Labels",
+ "PLACEHOLDER": "Search labels",
+ "NO_RESULT": "No labels found"
+ }
},
"MUTE_CONTACT": "Demp samtale",
"UNMUTE_CONTACT": "Skru av demping",
@@ -151,5 +157,18 @@
},
"VIEW_DETAILS": "View details"
}
+ },
+ "NOTES": {
+ "HEADER": {
+ "TITLE": "Notes"
+ },
+ "ADD": {
+ "BUTTON": "Add",
+ "PLACEHOLDER": "Add a note",
+ "TITLE": "Shift + Enter to create a note"
+ },
+ "FOOTER": {
+ "BUTTON": "View all notes"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/no/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/no/inboxMgmt.json
index 37a1ccd8a8c..ba825fb6d72 100644
--- a/app/javascript/dashboard/i18n/locale/no/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/no/inboxMgmt.json
@@ -227,6 +227,7 @@
"SETTINGS": "Innstillinger",
"COLLABORATORS": "Samarbeidspartnere",
"CONFIGURATION": "Konfigurasjon",
+ "CAMPAIGN": "Campaigns",
"PRE_CHAT_FORM": "Pre Chat Form",
"BUSINESS_HOURS": "Business Hours"
},
diff --git a/app/javascript/dashboard/i18n/locale/no/index.js b/app/javascript/dashboard/i18n/locale/no/index.js
index 5dfc44e4b47..cf1dda7fe57 100644
--- a/app/javascript/dashboard/i18n/locale/no/index.js
+++ b/app/javascript/dashboard/i18n/locale/no/index.js
@@ -1,33 +1,37 @@
import { default as _agentMgmt } from './agentMgmt.json';
-import { default as _labelsMgmt } from './labelsMgmt.json';
+import { default as _campaign } from './campaign.json';
import { default as _cannedMgmt } from './cannedMgmt.json';
import { default as _chatlist } from './chatlist.json';
import { default as _contact } from './contact.json';
import { default as _conversation } from './conversation.json';
+import { default as _generalSettings } from './generalSettings.json';
import { default as _inboxMgmt } from './inboxMgmt.json';
+import { default as _integrations } from './integrations.json';
+import { default as _labelsMgmt } from './labelsMgmt.json';
import { default as _login } from './login.json';
import { default as _report } from './report.json';
import { default as _resetPassword } from './resetPassword.json';
import { default as _setNewPassword } from './setNewPassword.json';
import { default as _settings } from './settings.json';
import { default as _signup } from './signup.json';
-import { default as _integrations } from './integrations.json';
-import { default as _generalSettings } from './generalSettings.json';
+import { default as _teamsSettings } from './teamsSettings.json';
export default {
..._agentMgmt,
+ ..._campaign,
..._cannedMgmt,
..._chatlist,
..._contact,
..._conversation,
+ ..._generalSettings,
..._inboxMgmt,
+ ..._integrations,
+ ..._labelsMgmt,
..._login,
..._report,
- ..._labelsMgmt,
..._resetPassword,
..._setNewPassword,
..._settings,
..._signup,
- ..._integrations,
- ..._generalSettings,
+ ..._teamsSettings,
};
diff --git a/app/javascript/dashboard/i18n/locale/no/report.json b/app/javascript/dashboard/i18n/locale/no/report.json
index 97ca6b4277b..578a2012f2b 100644
--- a/app/javascript/dashboard/i18n/locale/no/report.json
+++ b/app/javascript/dashboard/i18n/locale/no/report.json
@@ -38,6 +38,18 @@
{
"id": 1,
"name": "Siste 30 dager"
+ },
+ {
+ "id": 2,
+ "name": "Last 3 months"
+ },
+ {
+ "id": 3,
+ "name": "Last 6 months"
+ },
+ {
+ "id": 4,
+ "name": "Last year"
}
]
}
diff --git a/app/javascript/dashboard/i18n/locale/pl/campaign.json b/app/javascript/dashboard/i18n/locale/pl/campaign.json
new file mode 100644
index 00000000000..581f2fd4e69
--- /dev/null
+++ b/app/javascript/dashboard/i18n/locale/pl/campaign.json
@@ -0,0 +1,79 @@
+{
+ "CAMPAIGN": {
+ "HEADER": "Kampania",
+ "SIDEBAR_TXT": "Proaktywne wiadomości pozwalają klientowi wysyłać wiadomości do swoich kontaktów, co powoduje więcej rozmów. Kliknij na Dodaj kampanię, aby stworzyć nową kampanię. Możesz też edytować lub usunąć istniejącą kampanię poprzez kliknięcie na przycisk Edytuj lub Usuń.",
+ "HEADER_BTN_TXT": "Stwórz kampanię",
+ "ADD": {
+ "TITLE": "Stwórz kampanię",
+ "DESC": "Proaktywne wiadomości pozwalają klientowi wysyłać wiadomości do swoich kontaktów, co powoduje więcej rozmów.",
+ "CANCEL_BUTTON_TEXT": "Anuluj",
+ "CREATE_BUTTON_TEXT": "Stwórz",
+ "FORM": {
+ "TITLE": {
+ "LABEL": "Tytuł",
+ "PLACEHOLDER": "Wprowadź tytuł kampanii",
+ "ERROR": "Tytuł jest wymagany"
+ },
+ "MESSAGE": {
+ "LABEL": "Wiadomość",
+ "PLACEHOLDER": "Wprowadź wiadomość dla kampanii",
+ "ERROR": "Wiadomość jest wymagana"
+ },
+ "SENT_BY": {
+ "LABEL": "Wysłane przez",
+ "PLACEHOLDER": "Proszę wybrać treść kampanii",
+ "ERROR": "Nadawca jest wymagany"
+ },
+ "END_POINT": {
+ "LABEL": "Adres URL",
+ "PLACEHOLDER": "Wprowadź adres URL",
+ "ERROR": "Wprowadź poprawny adres URL"
+ },
+ "TIME_ON_PAGE": {
+ "LABEL": "Czas na stronie (w sekundach)",
+ "PLACEHOLDER": "Wprowadź czas",
+ "ERROR": "Czas na stronie jest wymagany"
+ },
+ "ENABLED": "Włącz kampanię",
+ "SUBMIT": "Dodaj kampanię"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Kampania została utworzona pomyślnie",
+ "ERROR_MESSAGE": "Wystąpił błąd, spróbuj ponownie."
+ }
+ },
+ "EDIT": {
+ "TITLE": "Edit campaign",
+ "UPDATE_BUTTON_TEXT": "Aktualizuj",
+ "API": {
+ "SUCCESS_MESSAGE": "Campaign updated successfully",
+ "ERROR_MESSAGE": "Wystąpił błąd, spróbuj ponownie"
+ }
+ },
+ "LIST": {
+ "LOADING_MESSAGE": "Loading campaigns...",
+ "404": "Brak kampanii stworzonych dla tej skrzynki odbiorczej.",
+ "TABLE_HEADER": {
+ "TITLE": "Tytuł",
+ "MESSAGE": "Wiadomość",
+ "STATUS": "Status",
+ "SENDER": "Sender",
+ "URL": "Adres URL",
+ "TIME_ON_PAGE": "Time(Seconds)",
+ "CREATED_AT": "Created at"
+ },
+ "BUTTONS": {
+ "ADD": "Dodaj",
+ "EDIT": "Edytuj",
+ "DELETE": "Usuń"
+ },
+ "STATUS": {
+ "ENABLED": "Włączone",
+ "DISABLED": "Wyłączone"
+ },
+ "SENDER": {
+ "BOT": "Bot"
+ }
+ }
+ }
+}
diff --git a/app/javascript/dashboard/i18n/locale/pl/chatlist.json b/app/javascript/dashboard/i18n/locale/pl/chatlist.json
index 4cdc30cecd8..358b592d601 100644
--- a/app/javascript/dashboard/i18n/locale/pl/chatlist.json
+++ b/app/javascript/dashboard/i18n/locale/pl/chatlist.json
@@ -80,6 +80,7 @@
"RECEIVED_VIA_EMAIL": "Otrzymano przez e-mail",
"VIEW_TWEET_IN_TWITTER": "Zobacz tweet na Twitterze",
"REPLY_TO_TWEET": "Odpowiedz na ten tweet",
- "NO_MESSAGES": "Brak wiadomości"
+ "NO_MESSAGES": "Brak wiadomości",
+ "NO_CONTENT": "Brak treści"
}
}
diff --git a/app/javascript/dashboard/i18n/locale/pl/contact.json b/app/javascript/dashboard/i18n/locale/pl/contact.json
index 82305f6c1a9..f761ab4fc97 100644
--- a/app/javascript/dashboard/i18n/locale/pl/contact.json
+++ b/app/javascript/dashboard/i18n/locale/pl/contact.json
@@ -12,7 +12,7 @@
"INITIATED_FROM": "Zainicjowano z",
"INITIATED_AT": "Zainicjowano w",
"IP_ADDRESS": "Adres IP",
- "NEW_MESSAGE": "New message",
+ "NEW_MESSAGE": "Nowa wiadomość",
"CONVERSATIONS": {
"NO_RECORDS_FOUND": "Brak poprzednich rozmów powiązanych z tym kontaktem.",
"TITLE": "Poprzednie rozmowy"
@@ -28,11 +28,17 @@
"INACTIVE_LABELS": "Etykiety dostępne na koncie",
"REMOVE": "Kliknij na ikonę X, aby usunąć etykietę",
"ADD": "Kliknij na ikonę +, aby dodać etykietę",
+ "ADD_BUTTON": "Add Labels",
"UPDATE_BUTTON": "Zaktualizuj etykiety",
"UPDATE_ERROR": "Nie udało się zaktualizować etykiet, spróbuj ponownie."
},
"NO_LABELS_TO_ADD": "Nie ma więcej etykiet zdefiniowanych na koncie.",
- "NO_AVAILABLE_LABELS": "Do tej rozmowy nie dodano żadnych etykiet."
+ "NO_AVAILABLE_LABELS": "Do tej rozmowy nie dodano żadnych etykiet.",
+ "LABEL_SELECT": {
+ "TITLE": "Add Labels",
+ "PLACEHOLDER": "Search labels",
+ "NO_RESULT": "No labels found"
+ }
},
"MUTE_CONTACT": "Wycisz rozmowę",
"UNMUTE_CONTACT": "Wyłącz wyciszenie rozmowy",
@@ -73,8 +79,8 @@
"PHONE_NUMBER": {
"PLACEHOLDER": "Wprowadź numer telefonu kontaktu",
"LABEL": "Numer telefonu",
- "HELP": "Phone number should be of E.164 format eg: +1415555555 [+][country code][area code][local phone number]",
- "ERROR": "Phone number should be either empty or of E.164 format"
+ "HELP": "Numer telefonu powinien mieć format E.164, np. +1415555555 [+][kod krajowy][kod kierunkowy][numer telefonu]",
+ "ERROR": "Numer telefonu powinien być pusty lub w formacie E.164"
},
"LOCATION": {
"PLACEHOLDER": "Wprowadź lokalizację kontaktu",
@@ -108,27 +114,27 @@
"ERROR_MESSAGE": "Wystąpił błąd, spróbuj ponownie"
},
"NEW_CONVERSATION": {
- "BUTTON_LABEL": "Start conversation",
+ "BUTTON_LABEL": "Rozpocznij rozmowę",
"TITLE": "Nowa rozmowa",
- "DESC": "Start a new conversation by sending a new message.",
- "NO_INBOX": "Couldn't find an inbox to initiate a new conversation with this contact.",
+ "DESC": "Rozpocznij nową rozmowę wysyłając wiadomość.",
+ "NO_INBOX": "Nie można odnaleźć skrzynki odbiorczej do rozpoczęcia nowej rozmowy z tym kontaktem.",
"FORM": {
"TO": {
- "LABEL": "To"
+ "LABEL": "Do"
},
"INBOX": {
- "LABEL": "Inbox",
- "ERROR": "Select an inbox"
+ "LABEL": "Skrzynka odbiorcza",
+ "ERROR": "Wybierz skrzynkę odbiorczą"
},
"MESSAGE": {
"LABEL": "Wiadomość",
- "PLACEHOLDER": "Write your message here",
- "ERROR": "Message can't be empty"
+ "PLACEHOLDER": "Wpisz swoją wiadomość tutaj",
+ "ERROR": "Wiadomość nie może być pusta"
},
- "SUBMIT": "Send message",
+ "SUBMIT": "Wyślij wiadomość",
"CANCEL": "Anuluj",
- "SUCCESS_MESSAGE": "Message sent!",
- "ERROR_MESSAGE": "Couldn't send! try again"
+ "SUCCESS_MESSAGE": "Wiadomość wysłana!",
+ "ERROR_MESSAGE": "Nie udało się wysłać! Spróbuj ponownie"
}
},
"CONTACTS_PAGE": {
@@ -151,5 +157,18 @@
},
"VIEW_DETAILS": "Wyświetl szczegóły"
}
+ },
+ "NOTES": {
+ "HEADER": {
+ "TITLE": "Notatki"
+ },
+ "ADD": {
+ "BUTTON": "Dodaj",
+ "PLACEHOLDER": "Dodaj notatkę",
+ "TITLE": "Shift + Enter by utworzyć notatkę"
+ },
+ "FOOTER": {
+ "BUTTON": "Wyświetl wszystkie notatki"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/pl/conversation.json b/app/javascript/dashboard/i18n/locale/pl/conversation.json
index 240806fb89d..15593e1989c 100644
--- a/app/javascript/dashboard/i18n/locale/pl/conversation.json
+++ b/app/javascript/dashboard/i18n/locale/pl/conversation.json
@@ -20,7 +20,7 @@
"LOADING_CONVERSATIONS": "Ładowanie konwersacji",
"CANNOT_REPLY": "Nie możesz odpowiedzieć z powodu",
"24_HOURS_WINDOW": "Ograniczenie 24-godzinnego okna wiadomości",
- "TWILIO_WHATSAPP_CAN_REPLY": "You can only reply to this conversation using a template message due to",
+ "TWILIO_WHATSAPP_CAN_REPLY": "Możesz odpowiedzieć na tę rozmowę tylko za pomocą szablonu wiadomości, ponieważ",
"TWILIO_WHATSAPP_24_HOURS_WINDOW": "Ograniczenie 24-godzinnego okna wiadomości",
"LAST_INCOMING_TWEET": "Odpowiadasz na ostatniego przychodzącego tweeta",
"REPLYING_TO": "Osoba, której odpowiadasz to:",
@@ -58,7 +58,7 @@
"CHANGE_STATUS": "Status konwersacji zmieniony",
"CHANGE_AGENT": "Osoba przypisana do konwersacji zmieniona",
"CHANGE_TEAM": "Zespół konwersacji został zmieniony",
- "FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_FILE_UPLOAD_SIZE} attachment limit",
+ "FILE_SIZE_LIMIT": "Plik przekracza limit {MAXIMUM_FILE_UPLOAD_SIZE} dla załącznika",
"SENT_BY": "Wysłane przez:",
"ASSIGNMENT": {
"SELECT_AGENT": "Wybierz Agenta",
diff --git a/app/javascript/dashboard/i18n/locale/pl/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/pl/inboxMgmt.json
index bd5e75e9fe7..d17ab4b9751 100644
--- a/app/javascript/dashboard/i18n/locale/pl/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/pl/inboxMgmt.json
@@ -79,7 +79,7 @@
"IN_A_FEW_MINUTES": "W ciągu kilku minut",
"IN_A_FEW_HOURS": "W ciągu kilku godzin",
"IN_A_DAY": "W ciągu dnia",
- "HELP_TEXT": "This reply time will be displayed on the live chat widget"
+ "HELP_TEXT": "Ten czas odpowiedzi będzie wyświetlany na widżecie czatu na żywo"
},
"WIDGET_COLOR": {
"LABEL": "Kolor widżetu",
@@ -88,8 +88,8 @@
"SUBMIT_BUTTON": "Utwórz skrzynkę odbiorczą"
},
"TWILIO": {
- "TITLE": "Twilio SMS/Whatsapp Channel",
- "DESC": "Integrate Twilio and start supporting your customers via SMS or Whatsapp.",
+ "TITLE": "Kanał Twilio SMS/WhatsApp",
+ "DESC": "Zintegruj Twilio i zacznij wspierać swoich klientów poprzez SMS lub WhatsApp.",
"ACCOUNT_SID": {
"LABEL": "Karta SID konta",
"PLACEHOLDER": "Wprowadź SID konta Twilio",
@@ -151,14 +151,14 @@
},
"EMAIL": {
"LABEL": "E-mail",
- "SUBTITLE": "Email where your customers sends you support tickets",
+ "SUBTITLE": "Adres e-mail, na który Twoi klienci wysyłają Ci zgłoszenia",
"PLACEHOLDER": "E-mail"
},
"SUBMIT_BUTTON": "Utwórz kanał e-mail",
"API": {
- "ERROR_MESSAGE": "We were not able to save the email channel"
+ "ERROR_MESSAGE": "Nie udało nam się zapisać kanału e-mail"
},
- "FINISH_MESSAGE": "Start forwarding your emails to the following email address."
+ "FINISH_MESSAGE": "Zacznij przekierowywać swoje wiadomości na następujący adres e-mail."
},
"AUTH": {
"TITLE": "Kanały",
@@ -167,8 +167,8 @@
"AGENTS": {
"TITLE": "Agenci",
"DESC": "Tutaj możesz dodać agentów do zarządzania swoją nowo utworzoną skrzynką odbiorczą. Tylko ci wybrani agenci będą mieli dostęp do Twojej skrzynki odbiorczej. Agenci, którzy nie są częścią tej skrzynki odbiorczej nie będą mogli zobaczyć ani odpowiadać na wiadomości w tej skrzynce odbiorczej podczas logowania. PS: Jako administrator, jeśli potrzebujesz dostępu do wszystkich skrzynek odbiorczych, powinieneś dodać siebie jako agenta do wszystkich skrzynek odbiorczych, które tworzysz.",
- "VALIDATION_ERROR": "Add atleast one agent to your new Inbox",
- "PICK_AGENTS": "Pick agents for the inbox"
+ "VALIDATION_ERROR": "Dodaj co najmniej jednego agenta do swojej nowej skrzynki odbiorczej",
+ "PICK_AGENTS": "Wybierz agentów dla skrzynki odbiorczej"
},
"DETAILS": {
"TITLE": "Szczegóły skrzynki odbiorczej",
@@ -194,7 +194,7 @@
"TITLE": "Twoja skrzynka odbiorcza jest gotowa!",
"MESSAGE": "Teraz możesz współpracować ze swoimi klientami poprzez swój nowy kanał. Szczęśliwego wsparcia ",
"BUTTON_TEXT": "Zabierz mnie tam",
- "MORE_SETTINGS": "More settings",
+ "MORE_SETTINGS": "Więcej ustawień",
"WEBSITE_SUCCESS": "Pomyślnie zakończyłeś tworzenie kanału internetowego. Skopiuj poniższy kod i wklej go na swojej stronie. Następnym razem, gdy klient korzysta z czatu na żywo, konwersacja pojawi się automatycznie na twojej skrzynce odbiorczej."
},
"REAUTH": "Ponowna autoryzacja",
@@ -227,14 +227,15 @@
"SETTINGS": "Ustawienia",
"COLLABORATORS": "Collaborators",
"CONFIGURATION": "Konfiguracja",
+ "CAMPAIGN": "Kampania",
"PRE_CHAT_FORM": "Pre Chat Form",
- "BUSINESS_HOURS": "Business Hours"
+ "BUSINESS_HOURS": "Godziny pracy"
},
"SETTINGS": "Ustawienia",
"FEATURES": {
- "LABEL": "Features",
- "DISPLAY_FILE_PICKER": "Display file picker on the widget",
- "DISPLAY_EMOJI_PICKER": "Display emoji picker on the widget"
+ "LABEL": "Funkcje",
+ "DISPLAY_FILE_PICKER": "Wyświetl selektor plików w widżecie",
+ "DISPLAY_EMOJI_PICKER": "Wyświetl selektor emoji w widżecie"
},
"SETTINGS_POPUP": {
"MESSENGER_HEADING": "Skrypt Messengera",
@@ -246,7 +247,7 @@
"INBOX_UPDATE_TITLE": "Ustawienia skrzynki odbiorczej",
"INBOX_UPDATE_SUB_TEXT": "Zaktualizuj ustawienia skrzynki odbiorczej",
"AUTO_ASSIGNMENT_SUB_TEXT": "Włącz lub wyłącz automatyczne przypisywanie nowych rozmów do agentów dodanych do tej skrzynki odbiorczej.",
- "HMAC_VERIFICATION": "User Identity Validation",
+ "HMAC_VERIFICATION": "Weryfikacja tożsamości użytkownika",
"HMAC_DESCRIPTION": "Inorder validate the users identity, the SDK allows you to pass an `identity_hash` for each user. You can generate HMAC using 'sha256' with the key shown here."
},
"FACEBOOK_REAUTHORIZE": {
@@ -260,8 +261,8 @@
"ENABLE": {
"LABEL": "Enable pre chat form",
"OPTIONS": {
- "ENABLED": "Yes",
- "DISABLED": "No"
+ "ENABLED": "Tak",
+ "DISABLED": "Nie"
}
},
"PRE_CHAT_MESSAGE": {
@@ -275,19 +276,19 @@
"BUSINESS_HOURS": {
"TITLE": "Set your availability",
"SUBTITLE": "Set your availability on your livechat widget",
- "WEEKLY_TITLE": "Set your weekly hours",
- "TIMEZONE_LABEL": "Select timezone",
- "UPDATE": "Update business hours settings",
+ "WEEKLY_TITLE": "Ustaw swoje godziny tygodniowe",
+ "TIMEZONE_LABEL": "Wybierz strefę czasową",
+ "UPDATE": "Zaktualizuj ustawienia godzin pracy",
"TOGGLE_AVAILABILITY": "Enable business availability for this inbox",
- "UNAVAILABLE_MESSAGE_LABEL": "Unavailable message for vistors",
- "UNAVAILABLE_MESSAGE_DEFAULT": "We are unavailable at the moment. Leave a message we will respond once we are back.",
+ "UNAVAILABLE_MESSAGE_LABEL": "Wiadomość niedostępna dla odwiedzających",
+ "UNAVAILABLE_MESSAGE_DEFAULT": "W tej chwili jesteśmy niedostępni. Pozostaw wiadomość, a odpowiemy, gdy będzie to możliwe.",
"TOGGLE_HELP": "Enabling business availability will show the available hours on live chat widget even if all the agents are offline. Outside available hours vistors can be warned with a message and a pre-chat form.",
"DAY": {
- "ENABLE": "Enable availability for this day",
- "UNAVAILABLE": "Unavailable",
- "HOURS": "hours",
- "VALIDATION_ERROR": "Starting time should be before closing time.",
- "CHOOSE": "Choose"
+ "ENABLE": "Włącz dostępność w tym dniu",
+ "UNAVAILABLE": "Niedostępny",
+ "HOURS": "godzin",
+ "VALIDATION_ERROR": "Czas rozpoczęcia powinien być przed czasem zakończenia.",
+ "CHOOSE": "Wybierz"
}
}
}
diff --git a/app/javascript/dashboard/i18n/locale/pl/index.js b/app/javascript/dashboard/i18n/locale/pl/index.js
index 5dfc44e4b47..cf1dda7fe57 100644
--- a/app/javascript/dashboard/i18n/locale/pl/index.js
+++ b/app/javascript/dashboard/i18n/locale/pl/index.js
@@ -1,33 +1,37 @@
import { default as _agentMgmt } from './agentMgmt.json';
-import { default as _labelsMgmt } from './labelsMgmt.json';
+import { default as _campaign } from './campaign.json';
import { default as _cannedMgmt } from './cannedMgmt.json';
import { default as _chatlist } from './chatlist.json';
import { default as _contact } from './contact.json';
import { default as _conversation } from './conversation.json';
+import { default as _generalSettings } from './generalSettings.json';
import { default as _inboxMgmt } from './inboxMgmt.json';
+import { default as _integrations } from './integrations.json';
+import { default as _labelsMgmt } from './labelsMgmt.json';
import { default as _login } from './login.json';
import { default as _report } from './report.json';
import { default as _resetPassword } from './resetPassword.json';
import { default as _setNewPassword } from './setNewPassword.json';
import { default as _settings } from './settings.json';
import { default as _signup } from './signup.json';
-import { default as _integrations } from './integrations.json';
-import { default as _generalSettings } from './generalSettings.json';
+import { default as _teamsSettings } from './teamsSettings.json';
export default {
..._agentMgmt,
+ ..._campaign,
..._cannedMgmt,
..._chatlist,
..._contact,
..._conversation,
+ ..._generalSettings,
..._inboxMgmt,
+ ..._integrations,
+ ..._labelsMgmt,
..._login,
..._report,
- ..._labelsMgmt,
..._resetPassword,
..._setNewPassword,
..._settings,
..._signup,
- ..._integrations,
- ..._generalSettings,
+ ..._teamsSettings,
};
diff --git a/app/javascript/dashboard/i18n/locale/pl/report.json b/app/javascript/dashboard/i18n/locale/pl/report.json
index c31fdfe6f91..ef88c0251f0 100644
--- a/app/javascript/dashboard/i18n/locale/pl/report.json
+++ b/app/javascript/dashboard/i18n/locale/pl/report.json
@@ -38,6 +38,18 @@
{
"id": 1,
"name": "Ostatnie 30 dni"
+ },
+ {
+ "id": 2,
+ "name": "Last 3 months"
+ },
+ {
+ "id": 3,
+ "name": "Last 6 months"
+ },
+ {
+ "id": 4,
+ "name": "Last year"
}
]
}
diff --git a/app/javascript/dashboard/i18n/locale/pl/teamsSettings.json b/app/javascript/dashboard/i18n/locale/pl/teamsSettings.json
index d756d754eb8..6b60eb857a7 100644
--- a/app/javascript/dashboard/i18n/locale/pl/teamsSettings.json
+++ b/app/javascript/dashboard/i18n/locale/pl/teamsSettings.json
@@ -15,21 +15,21 @@
"AGENTS": {
"BUTTON_TEXT": "Dodaj agentów do zespołu",
"TITLE": "Dodaj agentów do zespołu - %{teamName}",
- "DESC": "Add Agents to your newly created team. This lets you collaborate as a team on conversations, get notified on new events in the same conversation."
+ "DESC": "Dodaj agentów do swojego nowo utworzonego zespołu. Dzięki temu możesz współpracować jako zespół w rozmowach oraz otrzymywać powiadomienia o nowych wydarzeniach w tej samej rozmowie."
},
"WIZARD": [
{
- "title": "Create",
+ "title": "Stwórz",
"route": "settings_teams_new",
- "body": "Create a new team of agents."
+ "body": "Stwórz nowy zespół agentów."
},
{
"title": "Dodaj agentów",
"route": "settings_teams_add_agents",
- "body": "Add agents to the team."
+ "body": "Dodaj agentów do zespołu."
},
{
- "title": "Finish",
+ "title": "Zakończ",
"route": "settings_teams_finish",
"body": "Wszystko jest gotowe!"
}
@@ -37,28 +37,28 @@
},
"EDIT_FLOW": {
"CREATE": {
- "TITLE": "Edit your team details",
- "DESC": "Edit title and description to your team.",
- "BUTTON_TEXT": "Update team"
+ "TITLE": "Edytuj dane swojego zespołu",
+ "DESC": "Edytuj tytuł i opis swojego zespołu.",
+ "BUTTON_TEXT": "Aktualizuj zespół"
},
"AGENTS": {
- "BUTTON_TEXT": "Update agents in team",
+ "BUTTON_TEXT": "Aktualizuj agentów w zespole",
"TITLE": "Dodaj agentów do zespołu - %{teamName}",
- "DESC": "Add Agents to your newly created team. All the added agents will be notified when a conversation is assigned to this team."
+ "DESC": "Dodaj agentów do swojego nowo utworzonego zespołu. Wszyscy dodani agenci zostaną powiadomieni, gdy rozmowa zostanie przypisana do tego zespołu."
},
"WIZARD": [
{
- "title": "Team details",
+ "title": "Szczegóły zespołu",
"route": "settings_teams_edit",
- "body": "Change name, description and other details."
+ "body": "Zmień nazwę, opis i inne dane."
},
{
- "title": "Edit Agents",
+ "title": "Edytuj agentów",
"route": "settings_teams_edit_members",
- "body": "Edit agents in your team."
+ "body": "Edytuj agentów w zespole."
},
{
- "title": "Finish",
+ "title": "Zakończ",
"route": "settings_teams_edit_finish",
"body": "Wszystko jest gotowe!"
}
@@ -72,14 +72,14 @@
"EMAIL": "EMAIL",
"BUTTON_TEXT": "Dodaj agentów",
"ADD_AGENTS": "Adding Agents to your Team...",
- "SELECT": "select",
+ "SELECT": "wybierz",
"SELECT_ALL": "select all agents",
"SELECTED_COUNT": "%{selected} out of %{total} agents selected."
},
"ADD": {
"TITLE": "Dodaj agentów do zespołu - %{teamName}",
- "DESC": "Add Agents to your newly created team. This lets you collaborate as a team on conversations, get notified on new events in the same conversation.",
- "SELECT": "select",
+ "DESC": "Dodaj agentów do swojego nowo utworzonego zespołu. Dzięki temu możesz współpracować jako zespół w rozmowach oraz otrzymywać powiadomienia o nowych wydarzeniach w tej samej rozmowie.",
+ "SELECT": "wybierz",
"SELECT_ALL": "select all agents",
"SELECTED_COUNT": "%{selected} out of %{total} agents selected.",
"BUTTON_TEXT": "Dodaj agentów",
@@ -88,7 +88,7 @@
"FINISH": {
"TITLE": "Your team is ready!",
"MESSAGE": "You can now collaborate as a team on conversations. Happy supporting ",
- "BUTTON_TEXT": "Finish"
+ "BUTTON_TEXT": "Zakończ"
},
"DELETE": {
"BUTTON_TEXT": "Usuń",
@@ -105,7 +105,7 @@
},
"SETTINGS": "Ustawienia",
"FORM": {
- "UPDATE": "Update team",
+ "UPDATE": "Aktualizuj zespół",
"CREATE": "Utwórz zespół",
"NAME": {
"LABEL": "Team name",
diff --git a/app/javascript/dashboard/i18n/locale/pt/campaign.json b/app/javascript/dashboard/i18n/locale/pt/campaign.json
new file mode 100644
index 00000000000..24a073a2c9f
--- /dev/null
+++ b/app/javascript/dashboard/i18n/locale/pt/campaign.json
@@ -0,0 +1,79 @@
+{
+ "CAMPAIGN": {
+ "HEADER": "Campaigns",
+ "SIDEBAR_TXT": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations. Click on Add Campaign to create a new campaign. You can also edit or delete an existing campaign by clicking on the Edit or Delete button.",
+ "HEADER_BTN_TXT": "Create a campaign",
+ "ADD": {
+ "TITLE": "Create a campaign",
+ "DESC": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations.",
+ "CANCEL_BUTTON_TEXT": "cancelar",
+ "CREATE_BUTTON_TEXT": "Criar",
+ "FORM": {
+ "TITLE": {
+ "LABEL": "Title",
+ "PLACEHOLDER": "Please enter the title of campaign",
+ "ERROR": "Title is required"
+ },
+ "MESSAGE": {
+ "LABEL": "Message",
+ "PLACEHOLDER": "Please enter the message of campaign",
+ "ERROR": "Message is required"
+ },
+ "SENT_BY": {
+ "LABEL": "Sent by",
+ "PLACEHOLDER": "Please select the the content of campaign",
+ "ERROR": "Sender is required"
+ },
+ "END_POINT": {
+ "LABEL": "URL",
+ "PLACEHOLDER": "Please enter the URL",
+ "ERROR": "Por favor, insira uma URL válida"
+ },
+ "TIME_ON_PAGE": {
+ "LABEL": "Time on page(Seconds)",
+ "PLACEHOLDER": "Please enter the time",
+ "ERROR": "Time on page is required"
+ },
+ "ENABLED": "Enable campaign",
+ "SUBMIT": "Add Campaign"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Campaign created successfully",
+ "ERROR_MESSAGE": "There was an error. Please try again."
+ }
+ },
+ "EDIT": {
+ "TITLE": "Edit campaign",
+ "UPDATE_BUTTON_TEXT": "Atualização",
+ "API": {
+ "SUCCESS_MESSAGE": "Campaign updated successfully",
+ "ERROR_MESSAGE": "Ocorreu um erro, por favor tente novamente"
+ }
+ },
+ "LIST": {
+ "LOADING_MESSAGE": "Loading campaigns...",
+ "404": "There are no campaigns created for this inbox.",
+ "TABLE_HEADER": {
+ "TITLE": "Title",
+ "MESSAGE": "Message",
+ "STATUS": "SItuação",
+ "SENDER": "Sender",
+ "URL": "URL",
+ "TIME_ON_PAGE": "Time(Seconds)",
+ "CREATED_AT": "Created at"
+ },
+ "BUTTONS": {
+ "ADD": "Add",
+ "EDIT": "Alterar",
+ "DELETE": "excluir"
+ },
+ "STATUS": {
+ "ENABLED": "Ativado",
+ "DISABLED": "Desabilitado"
+ },
+ "SENDER": {
+ "BOT": "Bot"
+ }
+ }
+ }
+}
diff --git a/app/javascript/dashboard/i18n/locale/pt/chatlist.json b/app/javascript/dashboard/i18n/locale/pt/chatlist.json
index b02a9128637..15590aa0b7b 100644
--- a/app/javascript/dashboard/i18n/locale/pt/chatlist.json
+++ b/app/javascript/dashboard/i18n/locale/pt/chatlist.json
@@ -80,6 +80,7 @@
"RECEIVED_VIA_EMAIL": "Received via email",
"VIEW_TWEET_IN_TWITTER": "View tweet in Twitter",
"REPLY_TO_TWEET": "Reply to this tweet",
- "NO_MESSAGES": "No Messages"
+ "NO_MESSAGES": "No Messages",
+ "NO_CONTENT": "No content available"
}
}
diff --git a/app/javascript/dashboard/i18n/locale/pt/contact.json b/app/javascript/dashboard/i18n/locale/pt/contact.json
index ea6232f2081..b167c9f5027 100644
--- a/app/javascript/dashboard/i18n/locale/pt/contact.json
+++ b/app/javascript/dashboard/i18n/locale/pt/contact.json
@@ -28,11 +28,17 @@
"INACTIVE_LABELS": "Labels available in the account",
"REMOVE": "Click on X icon to remove the label",
"ADD": "Click on + icon to add the label",
+ "ADD_BUTTON": "Add Labels",
"UPDATE_BUTTON": "Update labels",
"UPDATE_ERROR": "Não foi possível atualizar os rótulos, tente novamente."
},
"NO_LABELS_TO_ADD": "There are no more labels defined in the account.",
- "NO_AVAILABLE_LABELS": "There are no labels added to this conversation."
+ "NO_AVAILABLE_LABELS": "There are no labels added to this conversation.",
+ "LABEL_SELECT": {
+ "TITLE": "Add Labels",
+ "PLACEHOLDER": "Search labels",
+ "NO_RESULT": "No labels found"
+ }
},
"MUTE_CONTACT": "Mute Conversation",
"UNMUTE_CONTACT": "Unmute Conversation",
@@ -151,5 +157,18 @@
},
"VIEW_DETAILS": "View details"
}
+ },
+ "NOTES": {
+ "HEADER": {
+ "TITLE": "Notes"
+ },
+ "ADD": {
+ "BUTTON": "Add",
+ "PLACEHOLDER": "Add a note",
+ "TITLE": "Shift + Enter to create a note"
+ },
+ "FOOTER": {
+ "BUTTON": "View all notes"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/pt/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/pt/inboxMgmt.json
index 5657bc42490..b7a59b7b451 100644
--- a/app/javascript/dashboard/i18n/locale/pt/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/pt/inboxMgmt.json
@@ -227,6 +227,7 @@
"SETTINGS": "Confirgurações",
"COLLABORATORS": "Collaborators",
"CONFIGURATION": "Configuration",
+ "CAMPAIGN": "Campaigns",
"PRE_CHAT_FORM": "Pre Chat Form",
"BUSINESS_HOURS": "Business Hours"
},
diff --git a/app/javascript/dashboard/i18n/locale/pt/index.js b/app/javascript/dashboard/i18n/locale/pt/index.js
index 5dfc44e4b47..cf1dda7fe57 100644
--- a/app/javascript/dashboard/i18n/locale/pt/index.js
+++ b/app/javascript/dashboard/i18n/locale/pt/index.js
@@ -1,33 +1,37 @@
import { default as _agentMgmt } from './agentMgmt.json';
-import { default as _labelsMgmt } from './labelsMgmt.json';
+import { default as _campaign } from './campaign.json';
import { default as _cannedMgmt } from './cannedMgmt.json';
import { default as _chatlist } from './chatlist.json';
import { default as _contact } from './contact.json';
import { default as _conversation } from './conversation.json';
+import { default as _generalSettings } from './generalSettings.json';
import { default as _inboxMgmt } from './inboxMgmt.json';
+import { default as _integrations } from './integrations.json';
+import { default as _labelsMgmt } from './labelsMgmt.json';
import { default as _login } from './login.json';
import { default as _report } from './report.json';
import { default as _resetPassword } from './resetPassword.json';
import { default as _setNewPassword } from './setNewPassword.json';
import { default as _settings } from './settings.json';
import { default as _signup } from './signup.json';
-import { default as _integrations } from './integrations.json';
-import { default as _generalSettings } from './generalSettings.json';
+import { default as _teamsSettings } from './teamsSettings.json';
export default {
..._agentMgmt,
+ ..._campaign,
..._cannedMgmt,
..._chatlist,
..._contact,
..._conversation,
+ ..._generalSettings,
..._inboxMgmt,
+ ..._integrations,
+ ..._labelsMgmt,
..._login,
..._report,
- ..._labelsMgmt,
..._resetPassword,
..._setNewPassword,
..._settings,
..._signup,
- ..._integrations,
- ..._generalSettings,
+ ..._teamsSettings,
};
diff --git a/app/javascript/dashboard/i18n/locale/pt/report.json b/app/javascript/dashboard/i18n/locale/pt/report.json
index 35792827104..94cf1019d19 100644
--- a/app/javascript/dashboard/i18n/locale/pt/report.json
+++ b/app/javascript/dashboard/i18n/locale/pt/report.json
@@ -38,6 +38,18 @@
{
"id": 1,
"name": "Últimos 30 Dias"
+ },
+ {
+ "id": 2,
+ "name": "Last 3 months"
+ },
+ {
+ "id": 3,
+ "name": "Last 6 months"
+ },
+ {
+ "id": 4,
+ "name": "Last year"
}
]
}
diff --git a/app/javascript/dashboard/i18n/locale/pt_BR/campaign.json b/app/javascript/dashboard/i18n/locale/pt_BR/campaign.json
new file mode 100644
index 00000000000..273032356c7
--- /dev/null
+++ b/app/javascript/dashboard/i18n/locale/pt_BR/campaign.json
@@ -0,0 +1,79 @@
+{
+ "CAMPAIGN": {
+ "HEADER": "Campaigns",
+ "SIDEBAR_TXT": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations. Click on Add Campaign to create a new campaign. You can also edit or delete an existing campaign by clicking on the Edit or Delete button.",
+ "HEADER_BTN_TXT": "Create a campaign",
+ "ADD": {
+ "TITLE": "Create a campaign",
+ "DESC": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations.",
+ "CANCEL_BUTTON_TEXT": "Cancelar",
+ "CREATE_BUTTON_TEXT": "Criar",
+ "FORM": {
+ "TITLE": {
+ "LABEL": "Title",
+ "PLACEHOLDER": "Please enter the title of campaign",
+ "ERROR": "Title is required"
+ },
+ "MESSAGE": {
+ "LABEL": "Messagem",
+ "PLACEHOLDER": "Please enter the message of campaign",
+ "ERROR": "Message is required"
+ },
+ "SENT_BY": {
+ "LABEL": "Enviado por",
+ "PLACEHOLDER": "Please select the the content of campaign",
+ "ERROR": "Sender is required"
+ },
+ "END_POINT": {
+ "LABEL": "URL",
+ "PLACEHOLDER": "Please enter the URL",
+ "ERROR": "Por favor, insira uma URL válida"
+ },
+ "TIME_ON_PAGE": {
+ "LABEL": "Time on page(Seconds)",
+ "PLACEHOLDER": "Please enter the time",
+ "ERROR": "Time on page is required"
+ },
+ "ENABLED": "Enable campaign",
+ "SUBMIT": "Add Campaign"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Campaign created successfully",
+ "ERROR_MESSAGE": "There was an error. Please try again."
+ }
+ },
+ "EDIT": {
+ "TITLE": "Edit campaign",
+ "UPDATE_BUTTON_TEXT": "Atualizar",
+ "API": {
+ "SUCCESS_MESSAGE": "Campaign updated successfully",
+ "ERROR_MESSAGE": "Ocorreu um erro, por favor tente novamente"
+ }
+ },
+ "LIST": {
+ "LOADING_MESSAGE": "Loading campaigns...",
+ "404": "There are no campaigns created for this inbox.",
+ "TABLE_HEADER": {
+ "TITLE": "Title",
+ "MESSAGE": "Messagem",
+ "STATUS": "SItuação",
+ "SENDER": "Sender",
+ "URL": "URL",
+ "TIME_ON_PAGE": "Time(Seconds)",
+ "CREATED_AT": "Created at"
+ },
+ "BUTTONS": {
+ "ADD": "Add",
+ "EDIT": "Alterar",
+ "DELETE": "Excluir"
+ },
+ "STATUS": {
+ "ENABLED": "Ativado",
+ "DISABLED": "Desativado"
+ },
+ "SENDER": {
+ "BOT": "Bot"
+ }
+ }
+ }
+}
diff --git a/app/javascript/dashboard/i18n/locale/pt_BR/chatlist.json b/app/javascript/dashboard/i18n/locale/pt_BR/chatlist.json
index b2d27a5ade4..10aa664fa3c 100644
--- a/app/javascript/dashboard/i18n/locale/pt_BR/chatlist.json
+++ b/app/javascript/dashboard/i18n/locale/pt_BR/chatlist.json
@@ -80,6 +80,7 @@
"RECEIVED_VIA_EMAIL": "Recebido por e-mail",
"VIEW_TWEET_IN_TWITTER": "Ver tweet no Twitter",
"REPLY_TO_TWEET": "Responder a este tweet",
- "NO_MESSAGES": "Nova Mensagem"
+ "NO_MESSAGES": "Nova Mensagem",
+ "NO_CONTENT": "Nenhum conteúdo disponível"
}
}
diff --git a/app/javascript/dashboard/i18n/locale/pt_BR/contact.json b/app/javascript/dashboard/i18n/locale/pt_BR/contact.json
index 9887f3f121d..81354283023 100644
--- a/app/javascript/dashboard/i18n/locale/pt_BR/contact.json
+++ b/app/javascript/dashboard/i18n/locale/pt_BR/contact.json
@@ -12,7 +12,7 @@
"INITIATED_FROM": "A partir de",
"INITIATED_AT": "Iniciado em",
"IP_ADDRESS": "Endereço IP",
- "NEW_MESSAGE": "New message",
+ "NEW_MESSAGE": "Nova Mensagem",
"CONVERSATIONS": {
"NO_RECORDS_FOUND": "Não há conversas anteriores associadas a este contato.",
"TITLE": "Conversas anteriores"
@@ -28,11 +28,17 @@
"INACTIVE_LABELS": "Marcadores disponíveis na conta",
"REMOVE": "Clique no ícone X para remover o marcador",
"ADD": "Clique no ícone + para adicionar o marcador",
+ "ADD_BUTTON": "Add Labels",
"UPDATE_BUTTON": "Atualizar marcadores",
"UPDATE_ERROR": "Não foi possível atualizar os marcadores, tente novamente."
},
"NO_LABELS_TO_ADD": "Não há mais marcadores definidos na conta.",
- "NO_AVAILABLE_LABELS": "Não há marcadores adicionados a esta conversa."
+ "NO_AVAILABLE_LABELS": "Não há marcadores adicionados a esta conversa.",
+ "LABEL_SELECT": {
+ "TITLE": "Add Labels",
+ "PLACEHOLDER": "Search labels",
+ "NO_RESULT": "No labels found"
+ }
},
"MUTE_CONTACT": "Silenciar Conversa",
"UNMUTE_CONTACT": "Reativar Conversa",
@@ -73,8 +79,8 @@
"PHONE_NUMBER": {
"PLACEHOLDER": "Adicione o número de telefone do contato",
"LABEL": "Número de Telefone",
- "HELP": "Phone number should be of E.164 format eg: +1415555555 [+][country code][area code][local phone number]",
- "ERROR": "Phone number should be either empty or of E.164 format"
+ "HELP": "O número de telefone deve ser do formato E.164, por exemplo: +1415555555 [+][código do país][código de área][número de telefone local]",
+ "ERROR": "O número de telefone deve estar vazio ou no formato E.164"
},
"LOCATION": {
"PLACEHOLDER": "Enter the location of the contact",
@@ -108,27 +114,27 @@
"ERROR_MESSAGE": "Ocorreu um erro, por favor tente novamente"
},
"NEW_CONVERSATION": {
- "BUTTON_LABEL": "Start conversation",
+ "BUTTON_LABEL": "Iniciar Conversa",
"TITLE": "Nova conversa",
- "DESC": "Start a new conversation by sending a new message.",
- "NO_INBOX": "Couldn't find an inbox to initiate a new conversation with this contact.",
+ "DESC": "Iniciar uma nova conversa enviando uma nova mensagem.",
+ "NO_INBOX": "Não foi possível encontrar uma caixa de entrada para iniciar uma nova conversa com este contato.",
"FORM": {
"TO": {
- "LABEL": "To"
+ "LABEL": "Para"
},
"INBOX": {
- "LABEL": "Inbox",
- "ERROR": "Select an inbox"
+ "LABEL": "Caixa de Entrada",
+ "ERROR": "Selecione uma caixa de entrada"
},
"MESSAGE": {
"LABEL": "Messagem",
- "PLACEHOLDER": "Write your message here",
- "ERROR": "Message can't be empty"
+ "PLACEHOLDER": "Escreva sua mensagem aqui",
+ "ERROR": "A mensagem não pode estar vazia"
},
- "SUBMIT": "Send message",
+ "SUBMIT": "Enviar mensagem",
"CANCEL": "Cancelar",
- "SUCCESS_MESSAGE": "Message sent!",
- "ERROR_MESSAGE": "Couldn't send! try again"
+ "SUCCESS_MESSAGE": "Mensagem enviada!",
+ "ERROR_MESSAGE": "Não foi possível enviar! Tente novamente"
}
},
"CONTACTS_PAGE": {
@@ -151,5 +157,18 @@
},
"VIEW_DETAILS": "Ver detalhes"
}
+ },
+ "NOTES": {
+ "HEADER": {
+ "TITLE": "Notes"
+ },
+ "ADD": {
+ "BUTTON": "Add",
+ "PLACEHOLDER": "Add a note",
+ "TITLE": "Shift + Enter to create a note"
+ },
+ "FOOTER": {
+ "BUTTON": "View all notes"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/pt_BR/conversation.json b/app/javascript/dashboard/i18n/locale/pt_BR/conversation.json
index 02a318e4319..49c893a3bb5 100644
--- a/app/javascript/dashboard/i18n/locale/pt_BR/conversation.json
+++ b/app/javascript/dashboard/i18n/locale/pt_BR/conversation.json
@@ -58,7 +58,7 @@
"CHANGE_STATUS": "Estado da conversa mudou",
"CHANGE_AGENT": "Responsável da conversa alterado",
"CHANGE_TEAM": "Estado da conversa mudou",
- "FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_FILE_UPLOAD_SIZE} attachment limit",
+ "FILE_SIZE_LIMIT": "O arquivo excede o limite de anexos {MAXIMUM_FILE_UPLOAD_SIZE}",
"SENT_BY": "Enviado por:",
"ASSIGNMENT": {
"SELECT_AGENT": "Selecione Agente",
@@ -85,25 +85,25 @@
},
"ONBOARDING": {
"TITLE": "Olá, 👋. Bem-vindo ao %{installationName}!",
- "DESCRIPTION": "Thanks for signing up. We want you to get the most out of %{installationName}. Here are a few things you can do in %{installationName} to make the experience delightful.",
+ "DESCRIPTION": "Obrigado por se inscrever. Queremos que você aproveite o máximo de %{installationName}. Aqui estão algumas coisas que você consegue fazer no(a) %{installationName} para que tenha uma experiência agradável.",
"READ_LATEST_UPDATES": "Leia as últimas atualizações",
"ALL_CONVERSATION": {
"TITLE": "Todas as suas conversas em um só lugar",
- "DESCRIPTION": "View all the conversations from your customers in one single dashboard. You can filter the conversations by the incoming channel, label and status."
+ "DESCRIPTION": "Veja todas as conversas dos seus clientes em um único painel. Você pode filtrar as conversas pelo canal de entrada, rótulo e status."
},
"TEAM_MEMBERS": {
"TITLE": "Convidar membros da sua equipe",
- "DESCRIPTION": "Since you are getting ready to talk to your customer, bring in your teammates to assist you. You can invite your teammates by adding their email address to the agent list.",
+ "DESCRIPTION": "Já que você está se preparando para conversar com seu cliente, traga seus colegas para ajudá-lo. Você pode convidar seus colegas de equipe adicionando o endereço de e-mail deles na lista de agentes.",
"NEW_LINK": "Clique aqui para convidar um membro da equipe"
},
"INBOXES": {
"TITLE": "Conectar caixas de entrada",
- "DESCRIPTION": "Connect various channels through which your customers would be talking to you. It can be a website live-chat, your Facebook or Twitter page or even your WhatsApp number.",
+ "DESCRIPTION": "Conecte vários canais através dos quais seus clientes estariam conversando com você. Podendo ser a partir de um chat ao vivo no seu website, sua página do Facebook ou Twitter ou até mesmo seu número do WhatsApp.",
"NEW_LINK": "Clique aqui para criar uma caixa de entrada"
},
"LABELS": {
"TITLE": "Organizar conversas com marcadores",
- "DESCRIPTION": "Labels provide an easier way to categorize your conversation. Create some labels like #support-enquiry, #billing-question etc., so that you can use them in a conversation later.",
+ "DESCRIPTION": "Etiquetas fornecem uma forma mais fácil de organizar a sua conversa. Criar algumas estiquetas como #solicitação-suporte, #fatura-assunto etc., assim você poderá futuramente utiliza-las em uma conversa posteriormente.",
"NEW_LINK": "Clique aqui para criar marcadores"
}
},
diff --git a/app/javascript/dashboard/i18n/locale/pt_BR/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/pt_BR/inboxMgmt.json
index 19e62046482..d2696a4cbd9 100644
--- a/app/javascript/dashboard/i18n/locale/pt_BR/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/pt_BR/inboxMgmt.json
@@ -194,7 +194,7 @@
"TITLE": "Sua caixa de entrada está pronta!",
"MESSAGE": "Agora você ja pode oferecer uma excelente experiência no atendimento de seus clientes através do seu novo Canal ",
"BUTTON_TEXT": "Leva-me lá",
- "MORE_SETTINGS": "More settings",
+ "MORE_SETTINGS": "Mais configurações",
"WEBSITE_SUCCESS": "Você concluiu a criação de um canal de site. Copie o código mostrado abaixo e cole-o no seu site. Na próxima vez que um cliente usar o bate-papo ao vivo, a conversa aparecerá automaticamente na sua caixa de entrada."
},
"REAUTH": "Reautorizar",
@@ -227,6 +227,7 @@
"SETTINGS": "Configurações",
"COLLABORATORS": "Colaboradores",
"CONFIGURATION": "Configuração",
+ "CAMPAIGN": "Campaigns",
"PRE_CHAT_FORM": "Pre Chat Form",
"BUSINESS_HOURS": "Horário de funcionamento"
},
@@ -279,8 +280,8 @@
"TIMEZONE_LABEL": "Selecionar fuso horário",
"UPDATE": "Atualizar configurações do horário comercial",
"TOGGLE_AVAILABILITY": "Enable business availability for this inbox",
- "UNAVAILABLE_MESSAGE_LABEL": "Unavailable message for vistors",
- "UNAVAILABLE_MESSAGE_DEFAULT": "We are unavailable at the moment. Leave a message we will respond once we are back.",
+ "UNAVAILABLE_MESSAGE_LABEL": "Mensagem indisponível para vistores",
+ "UNAVAILABLE_MESSAGE_DEFAULT": "Nós estamos indisponíveis no momento. Deixe uma mensagem a ser respondida assim que voltarmos.",
"TOGGLE_HELP": "Enabling business availability will show the available hours on live chat widget even if all the agents are offline. Outside available hours vistors can be warned with a message and a pre-chat form.",
"DAY": {
"ENABLE": "Permitir a disponibilidade para este dia",
diff --git a/app/javascript/dashboard/i18n/locale/pt_BR/index.js b/app/javascript/dashboard/i18n/locale/pt_BR/index.js
index 5dfc44e4b47..cf1dda7fe57 100644
--- a/app/javascript/dashboard/i18n/locale/pt_BR/index.js
+++ b/app/javascript/dashboard/i18n/locale/pt_BR/index.js
@@ -1,33 +1,37 @@
import { default as _agentMgmt } from './agentMgmt.json';
-import { default as _labelsMgmt } from './labelsMgmt.json';
+import { default as _campaign } from './campaign.json';
import { default as _cannedMgmt } from './cannedMgmt.json';
import { default as _chatlist } from './chatlist.json';
import { default as _contact } from './contact.json';
import { default as _conversation } from './conversation.json';
+import { default as _generalSettings } from './generalSettings.json';
import { default as _inboxMgmt } from './inboxMgmt.json';
+import { default as _integrations } from './integrations.json';
+import { default as _labelsMgmt } from './labelsMgmt.json';
import { default as _login } from './login.json';
import { default as _report } from './report.json';
import { default as _resetPassword } from './resetPassword.json';
import { default as _setNewPassword } from './setNewPassword.json';
import { default as _settings } from './settings.json';
import { default as _signup } from './signup.json';
-import { default as _integrations } from './integrations.json';
-import { default as _generalSettings } from './generalSettings.json';
+import { default as _teamsSettings } from './teamsSettings.json';
export default {
..._agentMgmt,
+ ..._campaign,
..._cannedMgmt,
..._chatlist,
..._contact,
..._conversation,
+ ..._generalSettings,
..._inboxMgmt,
+ ..._integrations,
+ ..._labelsMgmt,
..._login,
..._report,
- ..._labelsMgmt,
..._resetPassword,
..._setNewPassword,
..._settings,
..._signup,
- ..._integrations,
- ..._generalSettings,
+ ..._teamsSettings,
};
diff --git a/app/javascript/dashboard/i18n/locale/pt_BR/report.json b/app/javascript/dashboard/i18n/locale/pt_BR/report.json
index a63e2dd5260..878b59eff5b 100644
--- a/app/javascript/dashboard/i18n/locale/pt_BR/report.json
+++ b/app/javascript/dashboard/i18n/locale/pt_BR/report.json
@@ -38,6 +38,18 @@
{
"id": 1,
"name": "Últimos 30 dias"
+ },
+ {
+ "id": 2,
+ "name": "Last 3 months"
+ },
+ {
+ "id": 3,
+ "name": "Last 6 months"
+ },
+ {
+ "id": 4,
+ "name": "Last year"
}
]
}
diff --git a/app/javascript/dashboard/i18n/locale/pt_BR/settings.json b/app/javascript/dashboard/i18n/locale/pt_BR/settings.json
index c19bb22d834..11b6e066a6e 100644
--- a/app/javascript/dashboard/i18n/locale/pt_BR/settings.json
+++ b/app/javascript/dashboard/i18n/locale/pt_BR/settings.json
@@ -3,7 +3,7 @@
"LINK": "Configurações do Perfil",
"TITLE": "Configurações do Perfil",
"BTN_TEXT": "Atualizar o Perfil",
- "UPDATE_SUCCESS": "Your profile has been updated successfully",
+ "UPDATE_SUCCESS": "Seu perfil foi atualizado com sucesso",
"PASSWORD_UPDATE_SUCCESS": "A sua senha foi alterada com sucesso",
"AFTER_EMAIL_CHANGED": "Seu perfil foi atualizado com sucesso. Faça login novamente, pois suas credenciais de login foram alteradas",
"FORM": {
@@ -19,7 +19,7 @@
"PASSWORD_SECTION": {
"TITLE": "Senha",
"NOTE": "A atualização da sua senha redefiniria o seu login em vários dispositivos.",
- "BTN_TEXT": "Change password"
+ "BTN_TEXT": "Mudar Senha"
},
"ACCESS_TOKEN": {
"TITLE": "Token de acesso",
diff --git a/app/javascript/dashboard/i18n/locale/pt_BR/teamsSettings.json b/app/javascript/dashboard/i18n/locale/pt_BR/teamsSettings.json
index 780f1195bfe..d0f91f7b0c8 100644
--- a/app/javascript/dashboard/i18n/locale/pt_BR/teamsSettings.json
+++ b/app/javascript/dashboard/i18n/locale/pt_BR/teamsSettings.json
@@ -1,20 +1,20 @@
{
"TEAMS_SETTINGS": {
- "NEW_TEAM": "Criar novo departamento",
+ "NEW_TEAM": "Criar nova equipe",
"HEADER": "Times",
"SIDEBAR_TXT": "
Departamentos
As equipes permitem que você organize seus agentes em grupos baseados em suas responsabilidades. Um usuário pode fazer parte de várias equipes. Você pode atribuir conversas a uma equipe quando você estiver trabalhando colaborativamente.
",
"LIST": {
"404": "Não existem agentes associados a esta conta.",
- "EDIT_TEAM": "Editar Departamento"
+ "EDIT_TEAM": "Editar equipe"
},
"CREATE_FLOW": {
"CREATE": {
- "TITLE": "Criar novo departamento",
+ "TITLE": "Criar nova equipe",
"DESC": "Adicione um título e uma descrição à sua nova equipe."
},
"AGENTS": {
"BUTTON_TEXT": "Adicionar agente ao seu time",
- "TITLE": "Adicionar agentes ao departamento - %{teamName}",
+ "TITLE": "Adicionar agentes a equipe: %{teamName}",
"DESC": "Adicione agentes à sua equipe recém-criada. Isso permite que você colabore como uma equipe em conversas, seja notificado sobre novos eventos na mesma conversa."
},
"WIZARD": [
@@ -25,41 +25,41 @@
},
{
"title": "Adicionar Agentes",
- "route": "settings_teams_add_agents",
- "body": "Adicionar agentes ao departamento."
+ "route": "ajustes_equipes_adicionar_agentes",
+ "body": "Adicionar agentes a equipe."
},
{
"title": "Finalizar",
- "route": "settings_teams_finish",
+ "route": "ajustes_equipes_finalizar",
"body": "Está tudo pronto para começar!"
}
]
},
"EDIT_FLOW": {
"CREATE": {
- "TITLE": "Editar detalhes de seu departamento",
- "DESC": "Adicione um título e uma descrição ao seu novo departamento",
- "BUTTON_TEXT": "Atualizar departamento"
+ "TITLE": "Editar detalhes da sua equipe",
+ "DESC": "Edite o título e a descrição da sua equipe.",
+ "BUTTON_TEXT": "Atualizar equipe"
},
"AGENTS": {
"BUTTON_TEXT": "Atualizar agentes no departamento",
- "TITLE": "Adicionar agentes ao departamento - %{teamName}",
+ "TITLE": "Adicionar agentes a equipe: %{teamName}",
"DESC": "Adicionar agentes à sua equipe recém-criada. Todos os agentes adicionados serão notificados quando uma conversa for atribuída a esta equipe."
},
"WIZARD": [
{
"title": "Detalhes do departamento",
- "route": "settings_teams_edit",
+ "route": "ajustes_equipes_editar",
"body": "Alterar nome, descrição e outros detalhes."
},
{
"title": "Editar agente",
- "route": "settings_teams_edit_members",
+ "route": "ajustes_equipes_editar_membros",
"body": "Gerenciar agentes de seu departamento"
},
{
"title": "Finalizar",
- "route": "settings_teams_edit_finish",
+ "route": "ajustes_equipes_editar_finalizar",
"body": "Está tudo pronto para começar!"
}
]
@@ -77,7 +77,7 @@
"SELECTED_COUNT": "%{selected} de %{total} agentes selecionados."
},
"ADD": {
- "TITLE": "Adicionar agentes ao departamento - %{teamName}",
+ "TITLE": "Adicionar agentes a equipe: %{teamName}",
"DESC": "Adicione agentes à sua equipe recém-criada. Isso permite que você colabore como uma equipe em conversas, seja notificado sobre novos eventos na mesma conversa.",
"SELECT": "Selecionar",
"SELECT_ALL": "Selecionar todos os agentes",
@@ -105,7 +105,7 @@
},
"SETTINGS": "Confirgurações",
"FORM": {
- "UPDATE": "Atualizar departamento",
+ "UPDATE": "Atualizar equipe",
"CREATE": "Criar novo departamento",
"NAME": {
"LABEL": "Nome do departamento",
diff --git a/app/javascript/dashboard/i18n/locale/ro/campaign.json b/app/javascript/dashboard/i18n/locale/ro/campaign.json
new file mode 100644
index 00000000000..3498e39b630
--- /dev/null
+++ b/app/javascript/dashboard/i18n/locale/ro/campaign.json
@@ -0,0 +1,79 @@
+{
+ "CAMPAIGN": {
+ "HEADER": "Campaigns",
+ "SIDEBAR_TXT": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations. Click on Add Campaign to create a new campaign. You can also edit or delete an existing campaign by clicking on the Edit or Delete button.",
+ "HEADER_BTN_TXT": "Create a campaign",
+ "ADD": {
+ "TITLE": "Create a campaign",
+ "DESC": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations.",
+ "CANCEL_BUTTON_TEXT": "Renunță",
+ "CREATE_BUTTON_TEXT": "Creeaza",
+ "FORM": {
+ "TITLE": {
+ "LABEL": "Title",
+ "PLACEHOLDER": "Please enter the title of campaign",
+ "ERROR": "Title is required"
+ },
+ "MESSAGE": {
+ "LABEL": "Message",
+ "PLACEHOLDER": "Please enter the message of campaign",
+ "ERROR": "Message is required"
+ },
+ "SENT_BY": {
+ "LABEL": "Sent by",
+ "PLACEHOLDER": "Please select the the content of campaign",
+ "ERROR": "Sender is required"
+ },
+ "END_POINT": {
+ "LABEL": "URL",
+ "PLACEHOLDER": "Please enter the URL",
+ "ERROR": "Te rog introdu un URL valid"
+ },
+ "TIME_ON_PAGE": {
+ "LABEL": "Time on page(Seconds)",
+ "PLACEHOLDER": "Please enter the time",
+ "ERROR": "Time on page is required"
+ },
+ "ENABLED": "Enable campaign",
+ "SUBMIT": "Add Campaign"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Campaign created successfully",
+ "ERROR_MESSAGE": "There was an error. Please try again."
+ }
+ },
+ "EDIT": {
+ "TITLE": "Edit campaign",
+ "UPDATE_BUTTON_TEXT": "Actualizare",
+ "API": {
+ "SUCCESS_MESSAGE": "Campaign updated successfully",
+ "ERROR_MESSAGE": "A apărut o eroare, încercați din nou"
+ }
+ },
+ "LIST": {
+ "LOADING_MESSAGE": "Loading campaigns...",
+ "404": "There are no campaigns created for this inbox.",
+ "TABLE_HEADER": {
+ "TITLE": "Title",
+ "MESSAGE": "Message",
+ "STATUS": "Status",
+ "SENDER": "Sender",
+ "URL": "URL",
+ "TIME_ON_PAGE": "Time(Seconds)",
+ "CREATED_AT": "Created at"
+ },
+ "BUTTONS": {
+ "ADD": "Add",
+ "EDIT": "Editare",
+ "DELETE": "Şterge"
+ },
+ "STATUS": {
+ "ENABLED": "Activat",
+ "DISABLED": "Dezactivat"
+ },
+ "SENDER": {
+ "BOT": "Bot"
+ }
+ }
+ }
+}
diff --git a/app/javascript/dashboard/i18n/locale/ro/chatlist.json b/app/javascript/dashboard/i18n/locale/ro/chatlist.json
index 80130cb0858..f267e427595 100644
--- a/app/javascript/dashboard/i18n/locale/ro/chatlist.json
+++ b/app/javascript/dashboard/i18n/locale/ro/chatlist.json
@@ -80,6 +80,7 @@
"RECEIVED_VIA_EMAIL": "Received via email",
"VIEW_TWEET_IN_TWITTER": "View tweet in Twitter",
"REPLY_TO_TWEET": "Reply to this tweet",
- "NO_MESSAGES": "No Messages"
+ "NO_MESSAGES": "No Messages",
+ "NO_CONTENT": "No content available"
}
}
diff --git a/app/javascript/dashboard/i18n/locale/ro/contact.json b/app/javascript/dashboard/i18n/locale/ro/contact.json
index 6008dc9ef7b..95c92cc7649 100644
--- a/app/javascript/dashboard/i18n/locale/ro/contact.json
+++ b/app/javascript/dashboard/i18n/locale/ro/contact.json
@@ -28,11 +28,17 @@
"INACTIVE_LABELS": "Etichete disponibile în cont",
"REMOVE": "Faceți clic pe pictograma X pentru a elimina eticheta",
"ADD": "Faceți clic pe + pictogramă pentru a adăuga eticheta",
+ "ADD_BUTTON": "Add Labels",
"UPDATE_BUTTON": "Actualizare etichete",
"UPDATE_ERROR": "Nu s-au putut actualiza etichetele, încercați din nou."
},
"NO_LABELS_TO_ADD": "Nu mai sunt etichete definite în cont.",
- "NO_AVAILABLE_LABELS": "Nu există etichete adăugate la această conversație."
+ "NO_AVAILABLE_LABELS": "Nu există etichete adăugate la această conversație.",
+ "LABEL_SELECT": {
+ "TITLE": "Add Labels",
+ "PLACEHOLDER": "Search labels",
+ "NO_RESULT": "No labels found"
+ }
},
"MUTE_CONTACT": "Mute Conversation",
"UNMUTE_CONTACT": "Unmute Conversation",
@@ -151,5 +157,18 @@
},
"VIEW_DETAILS": "View details"
}
+ },
+ "NOTES": {
+ "HEADER": {
+ "TITLE": "Notes"
+ },
+ "ADD": {
+ "BUTTON": "Add",
+ "PLACEHOLDER": "Add a note",
+ "TITLE": "Shift + Enter to create a note"
+ },
+ "FOOTER": {
+ "BUTTON": "View all notes"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/ro/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/ro/inboxMgmt.json
index e6ddf8b3052..0a6ce34fbd5 100644
--- a/app/javascript/dashboard/i18n/locale/ro/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/ro/inboxMgmt.json
@@ -227,6 +227,7 @@
"SETTINGS": "Setări",
"COLLABORATORS": "Collaborators",
"CONFIGURATION": "Configuration",
+ "CAMPAIGN": "Campaigns",
"PRE_CHAT_FORM": "Pre Chat Form",
"BUSINESS_HOURS": "Business Hours"
},
diff --git a/app/javascript/dashboard/i18n/locale/ro/index.js b/app/javascript/dashboard/i18n/locale/ro/index.js
index 5dfc44e4b47..cf1dda7fe57 100644
--- a/app/javascript/dashboard/i18n/locale/ro/index.js
+++ b/app/javascript/dashboard/i18n/locale/ro/index.js
@@ -1,33 +1,37 @@
import { default as _agentMgmt } from './agentMgmt.json';
-import { default as _labelsMgmt } from './labelsMgmt.json';
+import { default as _campaign } from './campaign.json';
import { default as _cannedMgmt } from './cannedMgmt.json';
import { default as _chatlist } from './chatlist.json';
import { default as _contact } from './contact.json';
import { default as _conversation } from './conversation.json';
+import { default as _generalSettings } from './generalSettings.json';
import { default as _inboxMgmt } from './inboxMgmt.json';
+import { default as _integrations } from './integrations.json';
+import { default as _labelsMgmt } from './labelsMgmt.json';
import { default as _login } from './login.json';
import { default as _report } from './report.json';
import { default as _resetPassword } from './resetPassword.json';
import { default as _setNewPassword } from './setNewPassword.json';
import { default as _settings } from './settings.json';
import { default as _signup } from './signup.json';
-import { default as _integrations } from './integrations.json';
-import { default as _generalSettings } from './generalSettings.json';
+import { default as _teamsSettings } from './teamsSettings.json';
export default {
..._agentMgmt,
+ ..._campaign,
..._cannedMgmt,
..._chatlist,
..._contact,
..._conversation,
+ ..._generalSettings,
..._inboxMgmt,
+ ..._integrations,
+ ..._labelsMgmt,
..._login,
..._report,
- ..._labelsMgmt,
..._resetPassword,
..._setNewPassword,
..._settings,
..._signup,
- ..._integrations,
- ..._generalSettings,
+ ..._teamsSettings,
};
diff --git a/app/javascript/dashboard/i18n/locale/ro/report.json b/app/javascript/dashboard/i18n/locale/ro/report.json
index 9b23d543b67..e28b44fbdef 100644
--- a/app/javascript/dashboard/i18n/locale/ro/report.json
+++ b/app/javascript/dashboard/i18n/locale/ro/report.json
@@ -38,6 +38,18 @@
{
"id": 1,
"name": "Ultimele 30 zile"
+ },
+ {
+ "id": 2,
+ "name": "Last 3 months"
+ },
+ {
+ "id": 3,
+ "name": "Last 6 months"
+ },
+ {
+ "id": 4,
+ "name": "Last year"
}
]
}
diff --git a/app/javascript/dashboard/i18n/locale/ru/campaign.json b/app/javascript/dashboard/i18n/locale/ru/campaign.json
new file mode 100644
index 00000000000..f355be5bb1a
--- /dev/null
+++ b/app/javascript/dashboard/i18n/locale/ru/campaign.json
@@ -0,0 +1,79 @@
+{
+ "CAMPAIGN": {
+ "HEADER": "Кампании",
+ "SIDEBAR_TXT": "Активные сообщения позволяют клиенту отправлять исходящие сообщения своим контактам, что повлечет за собой более активное общение. Нажмите на Добавить кампанию для создания новой кампании. Вы также можете редактировать или удалять существующую кампанию, нажав на кнопку Изменить или Удалить.",
+ "HEADER_BTN_TXT": "Создать Кампанию",
+ "ADD": {
+ "TITLE": "Создать кампанию",
+ "DESC": "Активные сообщения позволяют клиенту отправлять исходящие сообщения своим контактам, что повлечет за собой более активное общение.",
+ "CANCEL_BUTTON_TEXT": "Отменить",
+ "CREATE_BUTTON_TEXT": "Создать",
+ "FORM": {
+ "TITLE": {
+ "LABEL": "Название",
+ "PLACEHOLDER": "Пожалуйста, введите название кампании",
+ "ERROR": "Необходимо указать название"
+ },
+ "MESSAGE": {
+ "LABEL": "Сообщение",
+ "PLACEHOLDER": "Пожалуйста, введите сообщение кампании",
+ "ERROR": "Необходимо ввести сообщение"
+ },
+ "SENT_BY": {
+ "LABEL": "Отправитель",
+ "PLACEHOLDER": "Пожалуйста, выберите содержание кампании",
+ "ERROR": "Необходимо указать отправителя"
+ },
+ "END_POINT": {
+ "LABEL": "URL",
+ "PLACEHOLDER": "Пожалуйста, введите правильный URL",
+ "ERROR": "Пожалуйста, введите правильный URL"
+ },
+ "TIME_ON_PAGE": {
+ "LABEL": "Время на страницах (в секундах)",
+ "PLACEHOLDER": "Пожалуйста, введите время",
+ "ERROR": "Укажите время на странице"
+ },
+ "ENABLED": "Запустить кампанию",
+ "SUBMIT": "Добавить кампанию"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Кампания успешно создана",
+ "ERROR_MESSAGE": "Произошла ошибка. Пожалуйста, попробуйте еще раз."
+ }
+ },
+ "EDIT": {
+ "TITLE": "Редактировать кампанию",
+ "UPDATE_BUTTON_TEXT": "Обновить",
+ "API": {
+ "SUCCESS_MESSAGE": "Кампания успешно обновлена",
+ "ERROR_MESSAGE": "Произошла ошибка, попробуйте еще раз"
+ }
+ },
+ "LIST": {
+ "LOADING_MESSAGE": "Загрузка кампаний...",
+ "404": "Нет кампаний, связанных с этим каналом.",
+ "TABLE_HEADER": {
+ "TITLE": "Название",
+ "MESSAGE": "Сообщение",
+ "STATUS": "Статус",
+ "SENDER": "Отправитель",
+ "URL": "URL",
+ "TIME_ON_PAGE": "Время (секунды)",
+ "CREATED_AT": "Дата создания"
+ },
+ "BUTTONS": {
+ "ADD": "Добавить",
+ "EDIT": "Редактировать",
+ "DELETE": "Удалить"
+ },
+ "STATUS": {
+ "ENABLED": "Включено",
+ "DISABLED": "Выключено"
+ },
+ "SENDER": {
+ "BOT": "Бот"
+ }
+ }
+ }
+}
diff --git a/app/javascript/dashboard/i18n/locale/ru/chatlist.json b/app/javascript/dashboard/i18n/locale/ru/chatlist.json
index b1c70411afa..79a290c3262 100644
--- a/app/javascript/dashboard/i18n/locale/ru/chatlist.json
+++ b/app/javascript/dashboard/i18n/locale/ru/chatlist.json
@@ -80,6 +80,7 @@
"RECEIVED_VIA_EMAIL": "Получено по email",
"VIEW_TWEET_IN_TWITTER": "Просмотреть твит в Twitter",
"REPLY_TO_TWEET": "Ответить на этот твит",
- "NO_MESSAGES": "Нет сообщений"
+ "NO_MESSAGES": "Нет сообщений",
+ "NO_CONTENT": "Содержимое отсутствует"
}
}
diff --git a/app/javascript/dashboard/i18n/locale/ru/contact.json b/app/javascript/dashboard/i18n/locale/ru/contact.json
index e8176f9673e..c85c677943d 100644
--- a/app/javascript/dashboard/i18n/locale/ru/contact.json
+++ b/app/javascript/dashboard/i18n/locale/ru/contact.json
@@ -12,7 +12,7 @@
"INITIATED_FROM": "Начат из",
"INITIATED_AT": "Начат в",
"IP_ADDRESS": "IP адрес",
- "NEW_MESSAGE": "New message",
+ "NEW_MESSAGE": "Новое сообщение",
"CONVERSATIONS": {
"NO_RECORDS_FOUND": "Нет предыдущих диалогов, связанных с этим контактом.",
"TITLE": "Предыдущие диалоги"
@@ -28,11 +28,17 @@
"INACTIVE_LABELS": "Все категории",
"REMOVE": "Нажмите на иконку X для удаления категории",
"ADD": "Нажмите на значок +, чтобы добавить категорию",
+ "ADD_BUTTON": "Добавить метки",
"UPDATE_BUTTON": "Изменить категории",
"UPDATE_ERROR": "Не удалось обновить категории, попробуйте снова."
},
"NO_LABELS_TO_ADD": "У вас больше нет категорий.",
- "NO_AVAILABLE_LABELS": "У диалога больше нет категорий."
+ "NO_AVAILABLE_LABELS": "У диалога больше нет категорий.",
+ "LABEL_SELECT": {
+ "TITLE": "Добавить метки",
+ "PLACEHOLDER": "Поиск меток",
+ "NO_RESULT": "Метки не найдены"
+ }
},
"MUTE_CONTACT": "Заглушить диалог",
"UNMUTE_CONTACT": "Включить звук диалога",
@@ -73,8 +79,8 @@
"PHONE_NUMBER": {
"PLACEHOLDER": "Введите номер телефона контакта",
"LABEL": "Номер телефона",
- "HELP": "Phone number should be of E.164 format eg: +1415555555 [+][country code][area code][local phone number]",
- "ERROR": "Phone number should be either empty or of E.164 format"
+ "HELP": "Номер телефона должен быть в формате E.164, например: +1415555555 [+] [код страны][код города] [локальный номер телефона]",
+ "ERROR": "Номер телефона должен быть пустым или в формате E.164"
},
"LOCATION": {
"PLACEHOLDER": "Введите местоположение контакта",
@@ -108,27 +114,27 @@
"ERROR_MESSAGE": "Произошла ошибка, попробуйте еще раз"
},
"NEW_CONVERSATION": {
- "BUTTON_LABEL": "Start conversation",
- "TITLE": "New conversation",
- "DESC": "Start a new conversation by sending a new message.",
- "NO_INBOX": "Couldn't find an inbox to initiate a new conversation with this contact.",
+ "BUTTON_LABEL": "Начать диалог",
+ "TITLE": "Новый диалог",
+ "DESC": "Начните новую беседу, отправив новое сообщение.",
+ "NO_INBOX": "Не удалось найти электронную почту для начала нового разговора с этим контактом.",
"FORM": {
"TO": {
- "LABEL": "To"
+ "LABEL": "Кому"
},
"INBOX": {
- "LABEL": "Inbox",
- "ERROR": "Select an inbox"
+ "LABEL": "Электронная почта",
+ "ERROR": "Выберите электронную почту"
},
"MESSAGE": {
"LABEL": "Сообщение",
- "PLACEHOLDER": "Write your message here",
- "ERROR": "Message can't be empty"
+ "PLACEHOLDER": "Напишите здесь ваше сообщение",
+ "ERROR": "Сообщение не может быть пустым"
},
- "SUBMIT": "Send message",
+ "SUBMIT": "Отправить сообщение",
"CANCEL": "Отменить",
- "SUCCESS_MESSAGE": "Message sent!",
- "ERROR_MESSAGE": "Couldn't send! try again"
+ "SUCCESS_MESSAGE": "Сообщение отправлено!",
+ "ERROR_MESSAGE": "Не удалось отправить! Попробуйте еще раз"
}
},
"CONTACTS_PAGE": {
@@ -151,5 +157,18 @@
},
"VIEW_DETAILS": "Просмотреть подробности"
}
+ },
+ "NOTES": {
+ "HEADER": {
+ "TITLE": "Заметки"
+ },
+ "ADD": {
+ "BUTTON": "Добавить",
+ "PLACEHOLDER": "Добавить заметку",
+ "TITLE": "Shift + Enter для создания заметки"
+ },
+ "FOOTER": {
+ "BUTTON": "Показать все заметки"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/ru/conversation.json b/app/javascript/dashboard/i18n/locale/ru/conversation.json
index 9706585c383..4fd56f744fb 100644
--- a/app/javascript/dashboard/i18n/locale/ru/conversation.json
+++ b/app/javascript/dashboard/i18n/locale/ru/conversation.json
@@ -11,7 +11,7 @@
"TITLE": "Поиск сообщений",
"LOADING_MESSAGE": "Сохранение данных...",
"PLACEHOLDER": "Введите любой текст для поиска сообщений",
- "NO_MATCHING_RESULTS": "No results found."
+ "NO_MATCHING_RESULTS": "Результаты не найдены."
},
"UNREAD_MESSAGES": "Непрочитанные сообщения",
"UNREAD_MESSAGE": "Непрочитанное сообщение",
@@ -20,7 +20,7 @@
"LOADING_CONVERSATIONS": "Загрузка диалогов",
"CANNOT_REPLY": "Вы не можете ответить из-за",
"24_HOURS_WINDOW": "Ограничение на 24 часа",
- "TWILIO_WHATSAPP_CAN_REPLY": "You can only reply to this conversation using a template message due to",
+ "TWILIO_WHATSAPP_CAN_REPLY": "Вы можете ответить в этой беседе только с помощью шаблона сообщения",
"TWILIO_WHATSAPP_24_HOURS_WINDOW": "Ограничение на 24 часа",
"LAST_INCOMING_TWEET": "Вы отвечаете на последний входящий твит",
"REPLYING_TO": "Вы отвечаете на:",
@@ -37,7 +37,7 @@
"DETAILS": "подробности"
},
"RESOLVE_DROPDOWN": {
- "OPEN_BOT": "Open with bot"
+ "OPEN_BOT": "Открыть с помощью бота"
},
"FOOTER": {
"MSG_INPUT": "Shift + enter чтобы начать новую строку. Начните с '/', чтобы выбрать шаблонный ответ.",
@@ -57,8 +57,8 @@
"VISIBLE_TO_AGENTS": "Приватная заметка: видна только вам и вашей команде",
"CHANGE_STATUS": "Статус разговора изменен",
"CHANGE_AGENT": "Назначенный оператор изменен",
- "CHANGE_TEAM": "Conversation team changed",
- "FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_FILE_UPLOAD_SIZE} attachment limit",
+ "CHANGE_TEAM": "Команда назначенная в беседу изменена",
+ "FILE_SIZE_LIMIT": "Превышен размер загружаемого файла - {MAXIMUM_FILE_UPLOAD_SIZE}",
"SENT_BY": "Отправитель:",
"ASSIGNMENT": {
"SELECT_AGENT": "Выбрать Агента",
@@ -89,22 +89,22 @@
"READ_LATEST_UPDATES": "Читайте о наших последних обновлениях",
"ALL_CONVERSATION": {
"TITLE": "Все ваши диалоги в одном месте",
- "DESCRIPTION": "View all the conversations from your customers in one single dashboard. You can filter the conversations by the incoming channel, label and status."
+ "DESCRIPTION": "Посмотреть все разговоры с клиентами в одной панели управления. Вы можете отфильтровать разговоры по входящему каналу, метке и статусу."
},
"TEAM_MEMBERS": {
- "TITLE": "Invite your team members",
- "DESCRIPTION": "Since you are getting ready to talk to your customer, bring in your teammates to assist you. You can invite your teammates by adding their email address to the agent list.",
- "NEW_LINK": "Click here to invite a team member"
+ "TITLE": "Пригласить членов вашей команды",
+ "DESCRIPTION": "Так как вы готовы общаться с клиентом, пригласите в команду своих товарищей, чтобы помочь вам. Вы можете пригласить своих коллег по команде, добавив их адреса электронной почты в список агентов.",
+ "NEW_LINK": "Нажмите здесь, чтобы пригласить члена команды"
},
"INBOXES": {
- "TITLE": "Connect Inboxes",
- "DESCRIPTION": "Connect various channels through which your customers would be talking to you. It can be a website live-chat, your Facebook or Twitter page or even your WhatsApp number.",
- "NEW_LINK": "Click here to create an inbox"
+ "TITLE": "Подключить входящие",
+ "DESCRIPTION": "Подключите различные каналы, с помощью которых ваши клиенты будут общаться с вами. Это может быть веб-чат в live-чате, Facebook или Twitter, или даже ваш номер WhatsApp.",
+ "NEW_LINK": "Нажмите здесь, чтобы создать входящий канал"
},
"LABELS": {
- "TITLE": "Organize conversations with labels",
- "DESCRIPTION": "Labels provide an easier way to categorize your conversation. Create some labels like #support-enquiry, #billing-question etc., so that you can use them in a conversation later.",
- "NEW_LINK": "Click here to create tags"
+ "TITLE": "Сгруппировать беседы с помощью меток",
+ "DESCRIPTION": "Метки дают более простой способ классифицировать разговор. Создайте несколько меток, например #support-enquiry, #billing-question и т.д., чтобы позже использовать их в беседе.",
+ "NEW_LINK": "Нажмите здесь, чтобы создать метки"
}
},
"CONVERSATION_SIDEBAR": {
@@ -112,7 +112,7 @@
"ASSIGNEE_LABEL": "Назначенный агент",
"TEAM_LABEL": "Назначенная команда",
"SELECT": {
- "PLACEHOLDER": "None"
+ "PLACEHOLDER": "Ничего"
}
}
}
diff --git a/app/javascript/dashboard/i18n/locale/ru/generalSettings.json b/app/javascript/dashboard/i18n/locale/ru/generalSettings.json
index ecf2f1f3304..db690509223 100644
--- a/app/javascript/dashboard/i18n/locale/ru/generalSettings.json
+++ b/app/javascript/dashboard/i18n/locale/ru/generalSettings.json
@@ -54,10 +54,10 @@
},
"NOTIFICATIONS_PAGE": {
"HEADER": "Уведомления",
- "MARK_ALL_DONE": "Mark All Done",
+ "MARK_ALL_DONE": "Отметить все прочитанными",
"LIST": {
- "LOADING_MESSAGE": "Loading notifications...",
- "404": "No Notifications",
+ "LOADING_MESSAGE": "Загрузка уведомлений...",
+ "404": "Уведомления отсутствуют",
"TABLE_HEADER": [
"Имя",
"Номер телефона",
@@ -66,8 +66,8 @@
]
},
"TYPE_LABEL": {
- "conversation_creation": "New conversation",
- "conversation_assignment": "Conversation Assigned",
+ "conversation_creation": "Новая беседа",
+ "conversation_assignment": "Беседа назначена",
"assigned_conversation_new_message": "Новое сообщение",
"conversation_mention": "Упоминание"
}
diff --git a/app/javascript/dashboard/i18n/locale/ru/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/ru/inboxMgmt.json
index 2a6e9b1dc76..4a96cb928b1 100644
--- a/app/javascript/dashboard/i18n/locale/ru/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/ru/inboxMgmt.json
@@ -39,7 +39,7 @@
},
"TWITTER": {
"HELP": "Чтобы добавить свой Twitter профиль в качестве источника, вам нужно авторизоваться при помощи входа через Twitter ",
- "ERROR_MESSAGE": "There was an error connecting to Twitter, please try again"
+ "ERROR_MESSAGE": "Произошла ошибка при подключении к Twitter, попробуйте еще раз"
},
"WEBSITE_CHANNEL": {
"TITLE": "Сайт",
@@ -194,7 +194,7 @@
"TITLE": "Истоник готов!",
"MESSAGE": "Теперь вы можете взаимодействовать с вашими клиентами через ваш новый канал. Удачной поддержки ",
"BUTTON_TEXT": "Перейти",
- "MORE_SETTINGS": "More settings",
+ "MORE_SETTINGS": "Больше параметров",
"WEBSITE_SUCCESS": "Вы успешно создали источник-сайт. Скопируйте указанный ниже код и вставьте его на ваш сайт. В следующий раз, когда клиент напишет в чат, диалог автоматически появится здесь."
},
"REAUTH": "Войти заново",
@@ -227,8 +227,9 @@
"SETTINGS": "Настройки",
"COLLABORATORS": "Соавторы",
"CONFIGURATION": "Настройки",
+ "CAMPAIGN": "Кампании",
"PRE_CHAT_FORM": "Форма, показываемая перед стартом диалога",
- "BUSINESS_HOURS": "Business Hours"
+ "BUSINESS_HOURS": "Время работы"
},
"SETTINGS": "Настройки",
"FEATURES": {
@@ -256,9 +257,9 @@
"MESSAGE_ERROR": "Произошла ошибка, попробуйте еще раз"
},
"PRE_CHAT_FORM": {
- "DESCRIPTION": "Pre chat forms enable you to capture user information before they start conversation with you.",
+ "DESCRIPTION": "Предварительные формы позволяют получить информацию о пользователе, прежде чем они начнут разговор.",
"ENABLE": {
- "LABEL": "Enable pre chat form",
+ "LABEL": "Включить форму сбора предварительной информации",
"OPTIONS": {
"ENABLED": "Да",
"DISABLED": "Нет"
@@ -266,22 +267,22 @@
},
"PRE_CHAT_MESSAGE": {
"LABEL": "Сообщение для формы, показываемой перед стартом диалога",
- "PLACEHOLDER": "This message would be visible to the users along with the form"
+ "PLACEHOLDER": "Это сообщение будет отображаться вместе с формой для пользователя"
},
"REQUIRE_EMAIL": {
- "LABEL": "Visitors should provide their name and email address before starting the chat"
+ "LABEL": "Посетители должны указать свое имя и адрес электронной почты перед началом общения"
}
},
"BUSINESS_HOURS": {
"TITLE": "Настройте ваши рабочие часы",
"SUBTITLE": "Настройте ваши рабочие часы для общения через виджет на сайте",
"WEEKLY_TITLE": "Укажите ваши рабочие часы",
- "TIMEZONE_LABEL": "Select timezone",
- "UPDATE": "Update business hours settings",
- "TOGGLE_AVAILABILITY": "Enable business availability for this inbox",
- "UNAVAILABLE_MESSAGE_LABEL": "Unavailable message for vistors",
- "UNAVAILABLE_MESSAGE_DEFAULT": "We are unavailable at the moment. Leave a message we will respond once we are back.",
- "TOGGLE_HELP": "Enabling business availability will show the available hours on live chat widget even if all the agents are offline. Outside available hours vistors can be warned with a message and a pre-chat form.",
+ "TIMEZONE_LABEL": "Выберите часовой пояс",
+ "UPDATE": "Обновить настройки часов работы",
+ "TOGGLE_AVAILABILITY": "Включить доступность бизнеса для этого входящего канала",
+ "UNAVAILABLE_MESSAGE_LABEL": "Сообщение для посетителей о недоступности",
+ "UNAVAILABLE_MESSAGE_DEFAULT": "В данный момент мы недоступны. Оставьте сообщение, мы вам ответим, как только будем на связи.",
+ "TOGGLE_HELP": "Включение доступности для бизнеса покажет часы работы в виджете онлайн общения, даже если все менеджеры не в сети. Вне доступных часов работы - посетители могут быть предупреждены сообщением и формой предварительного чата.",
"DAY": {
"ENABLE": "Я работаю в этот день",
"UNAVAILABLE": "Я не работаю в этот день",
diff --git a/app/javascript/dashboard/i18n/locale/ru/index.js b/app/javascript/dashboard/i18n/locale/ru/index.js
index 5dfc44e4b47..cf1dda7fe57 100644
--- a/app/javascript/dashboard/i18n/locale/ru/index.js
+++ b/app/javascript/dashboard/i18n/locale/ru/index.js
@@ -1,33 +1,37 @@
import { default as _agentMgmt } from './agentMgmt.json';
-import { default as _labelsMgmt } from './labelsMgmt.json';
+import { default as _campaign } from './campaign.json';
import { default as _cannedMgmt } from './cannedMgmt.json';
import { default as _chatlist } from './chatlist.json';
import { default as _contact } from './contact.json';
import { default as _conversation } from './conversation.json';
+import { default as _generalSettings } from './generalSettings.json';
import { default as _inboxMgmt } from './inboxMgmt.json';
+import { default as _integrations } from './integrations.json';
+import { default as _labelsMgmt } from './labelsMgmt.json';
import { default as _login } from './login.json';
import { default as _report } from './report.json';
import { default as _resetPassword } from './resetPassword.json';
import { default as _setNewPassword } from './setNewPassword.json';
import { default as _settings } from './settings.json';
import { default as _signup } from './signup.json';
-import { default as _integrations } from './integrations.json';
-import { default as _generalSettings } from './generalSettings.json';
+import { default as _teamsSettings } from './teamsSettings.json';
export default {
..._agentMgmt,
+ ..._campaign,
..._cannedMgmt,
..._chatlist,
..._contact,
..._conversation,
+ ..._generalSettings,
..._inboxMgmt,
+ ..._integrations,
+ ..._labelsMgmt,
..._login,
..._report,
- ..._labelsMgmt,
..._resetPassword,
..._setNewPassword,
..._settings,
..._signup,
- ..._integrations,
- ..._generalSettings,
+ ..._teamsSettings,
};
diff --git a/app/javascript/dashboard/i18n/locale/ru/report.json b/app/javascript/dashboard/i18n/locale/ru/report.json
index c349e11b872..9ab726c096f 100644
--- a/app/javascript/dashboard/i18n/locale/ru/report.json
+++ b/app/javascript/dashboard/i18n/locale/ru/report.json
@@ -38,6 +38,18 @@
{
"id": 1,
"name": "Последние 30 дней"
+ },
+ {
+ "id": 2,
+ "name": "Last 3 months"
+ },
+ {
+ "id": 3,
+ "name": "Last 6 months"
+ },
+ {
+ "id": 4,
+ "name": "Last year"
}
]
}
diff --git a/app/javascript/dashboard/i18n/locale/ru/settings.json b/app/javascript/dashboard/i18n/locale/ru/settings.json
index b9399259a55..0c9535b7259 100644
--- a/app/javascript/dashboard/i18n/locale/ru/settings.json
+++ b/app/javascript/dashboard/i18n/locale/ru/settings.json
@@ -3,7 +3,7 @@
"LINK": "Настройки профиля",
"TITLE": "Настройки профиля",
"BTN_TEXT": "Обновить профиль",
- "UPDATE_SUCCESS": "Your profile has been updated successfully",
+ "UPDATE_SUCCESS": "Ваши данные успешно обновлены",
"PASSWORD_UPDATE_SUCCESS": "Ваш пароль успешно изменен",
"AFTER_EMAIL_CHANGED": "Ваш профиль был успешно обновлен, пожалуйста, войдите снова, так как ваши учетные данные были изменены",
"FORM": {
@@ -19,7 +19,7 @@
"PASSWORD_SECTION": {
"TITLE": "Пароль",
"NOTE": "Обновление пароля сбросит вашу авторизацию на всех устройствах.",
- "BTN_TEXT": "Change password"
+ "BTN_TEXT": "Изменить пароль"
},
"ACCESS_TOKEN": {
"TITLE": "Токен доступа",
@@ -27,8 +27,8 @@
},
"AUDIO_NOTIFICATIONS_SECTION": {
"TITLE": "Звуковые уведомления",
- "NOTE": "Enable audio notifications in dashboard for new messages and conversations.",
- "ENABLE_AUDIO": "Play audio notification when a new conversation is created or new messages arrives"
+ "NOTE": "Включить звуковые уведомления в панели управления для новых сообщений и разговоров.",
+ "ENABLE_AUDIO": "Воспроизводить звуковое уведомление при создании новой беседы или получении новых сообщений"
},
"EMAIL_NOTIFICATIONS_SECTION": {
"TITLE": "Email Уведомления",
@@ -47,7 +47,7 @@
"NOTE": "Редактируйте настройки push-уведомлений здесь",
"CONVERSATION_ASSIGNMENT": "Отправлять push уведомление при назначении мне диалога",
"CONVERSATION_CREATION": "Отправлять push уведомление, когда новый диалог создан",
- "CONVERSATION_MENTION": "Send push notifications when you are mentioned in a conversation",
+ "CONVERSATION_MENTION": "Отправлять уведомления при упоминании в разговоре",
"ASSIGNED_CONVERSATION_NEW_MESSAGE": "Отправлять push уведомления при создании нового сообщения в назначенном диалоге",
"HAS_ENABLED_PUSH": "Вы включили push уведомления для этого браузера.",
"REQUEST_PUSH": "Включить push-уведомления"
diff --git a/app/javascript/dashboard/i18n/locale/ru/teamsSettings.json b/app/javascript/dashboard/i18n/locale/ru/teamsSettings.json
index 32bc187b649..fa7236b3125 100644
--- a/app/javascript/dashboard/i18n/locale/ru/teamsSettings.json
+++ b/app/javascript/dashboard/i18n/locale/ru/teamsSettings.json
@@ -1,35 +1,35 @@
{
"TEAMS_SETTINGS": {
- "NEW_TEAM": "Create new team",
+ "NEW_TEAM": "Создать новую команду",
"HEADER": "Команды",
- "SIDEBAR_TXT": "
Teams
Teams let you organize your agents into groups based on their responsibilities. A user can be part of multiple teams. You can assign conversations to a team when you are working collaboratively.
",
+ "SIDEBAR_TXT": "
Команды
Команды позволяют вам организовывать своих операторов в группы в зависимости от их обязанностей. Пользователь может быть частью нескольких команд. Вы можете назначить разговоры команде, когда вы работаете совместно.
",
"LIST": {
- "404": "There are no teams created on this account.",
- "EDIT_TEAM": "Edit team"
+ "404": "В этом аккаунте нет ни одной команды.",
+ "EDIT_TEAM": "Редактировать команду"
},
"CREATE_FLOW": {
"CREATE": {
- "TITLE": "Create a new team",
- "DESC": "Add a title and description to your new team."
+ "TITLE": "Создать новую команду",
+ "DESC": "Добавьте название и описание в вашу новую команду."
},
"AGENTS": {
- "BUTTON_TEXT": "Add agents to team",
- "TITLE": "Add agents to team - %{teamName}",
- "DESC": "Add Agents to your newly created team. This lets you collaborate as a team on conversations, get notified on new events in the same conversation."
+ "BUTTON_TEXT": "Добавить операторов в команду",
+ "TITLE": "Добавить операторов в команду - %{teamName}",
+ "DESC": "Добавьте операторов в вашу только что созданную команду. Это позволит вам сотрудничать как команде при разговорах, получать уведомления о новых событиях в том же разговоре."
},
"WIZARD": [
{
"title": "Создать",
"route": "settings_teams_new",
- "body": "Create a new team of agents."
+ "body": "Создайте новую команду операторов."
},
{
"title": "Добавить операторов",
"route": "settings_teams_add_agents",
- "body": "Add agents to the team."
+ "body": "Добавить операторов в команду."
},
{
- "title": "Finish",
+ "title": "Завершить",
"route": "settings_teams_finish",
"body": "Все готово!"
}
@@ -37,88 +37,88 @@
},
"EDIT_FLOW": {
"CREATE": {
- "TITLE": "Edit your team details",
- "DESC": "Edit title and description to your team.",
- "BUTTON_TEXT": "Update team"
+ "TITLE": "Редактировать данные вашей команды",
+ "DESC": "Редактировать название и описание для вашей команды.",
+ "BUTTON_TEXT": "Обновить команду"
},
"AGENTS": {
- "BUTTON_TEXT": "Update agents in team",
- "TITLE": "Add agents to team - %{teamName}",
- "DESC": "Add Agents to your newly created team. All the added agents will be notified when a conversation is assigned to this team."
+ "BUTTON_TEXT": "Обновить операторов в команде",
+ "TITLE": "Добавить операторов в команду - %{teamName}",
+ "DESC": "Добавьте операторов в вашу только что созданную команду. Все добавленные операторы будут уведомлены, когда беседа будет назначена этой команде."
},
"WIZARD": [
{
- "title": "Team details",
+ "title": "Информация о команде",
"route": "settings_teams_edit",
- "body": "Change name, description and other details."
+ "body": "Изменить имя, описание и другие сведения."
},
{
- "title": "Edit Agents",
+ "title": "Редактировать операторов",
"route": "settings_teams_edit_members",
- "body": "Edit agents in your team."
+ "body": "Управляйте операторами вашей команды."
},
{
- "title": "Finish",
+ "title": "Завершить",
"route": "settings_teams_edit_finish",
"body": "Все готово!"
}
]
},
"TEAM_FORM": {
- "ERROR_MESSAGE": "Couldn't save the team details. Try again."
+ "ERROR_MESSAGE": "Не удалось сохранить информацию о команде. Попробуйте еще раз."
},
"AGENTS": {
- "AGENT": "AGENT",
+ "AGENT": "Оператор",
"EMAIL": "Email",
"BUTTON_TEXT": "Добавить операторов",
- "ADD_AGENTS": "Adding Agents to your Team...",
- "SELECT": "select",
- "SELECT_ALL": "select all agents",
- "SELECTED_COUNT": "%{selected} out of %{total} agents selected."
+ "ADD_AGENTS": "Добавление операторов в вашу команду...",
+ "SELECT": "выбрать",
+ "SELECT_ALL": "выбрать всех операторов",
+ "SELECTED_COUNT": "Выбрано %{selected} из %{total} операторов."
},
"ADD": {
- "TITLE": "Add agents to team - %{teamName}",
- "DESC": "Add Agents to your newly created team. This lets you collaborate as a team on conversations, get notified on new events in the same conversation.",
- "SELECT": "select",
- "SELECT_ALL": "select all agents",
- "SELECTED_COUNT": "%{selected} out of %{total} agents selected.",
+ "TITLE": "Добавить операторов в команду - %{teamName}",
+ "DESC": "Добавьте операторов в вашу только что созданную команду. Это позволит вам сотрудничать как команде при разговорах, получать уведомления о новых событиях в том же разговоре.",
+ "SELECT": "выбрать",
+ "SELECT_ALL": "выбрать всех операторов",
+ "SELECTED_COUNT": "Выбрано %{selected} из %{total} операторов.",
"BUTTON_TEXT": "Добавить операторов",
- "AGENT_VALIDATION_ERROR": "Select atleaset one agent."
+ "AGENT_VALIDATION_ERROR": "Выберите хотя бы одного оператора."
},
"FINISH": {
- "TITLE": "Your team is ready!",
- "MESSAGE": "You can now collaborate as a team on conversations. Happy supporting ",
- "BUTTON_TEXT": "Finish"
+ "TITLE": "Ваша команда готова!",
+ "MESSAGE": "Теперь вы можете сотрудничать как команда в беседах. Удачной вам поддержки",
+ "BUTTON_TEXT": "Завершить"
},
"DELETE": {
"BUTTON_TEXT": "Удалить",
"API": {
- "SUCCESS_MESSAGE": "Team deleted successfully.",
- "ERROR_MESSAGE": "Couldn't delete the team. Try again."
+ "SUCCESS_MESSAGE": "Команда успешно удалена.",
+ "ERROR_MESSAGE": "Не удалось удалить команду. Повторите попытку."
},
"CONFIRM": {
- "TITLE": "Are you sure want to delete - %{teamName}",
- "MESSAGE": "Deleting the team will remove the team assignment from the conversations assigned to this team.",
+ "TITLE": "Вы уверены, что хотите удалить - %{teamName}",
+ "MESSAGE": "Удаление команды снимет назначение команды из бесед, связанных с этой командой.",
"YES": "Удалить ",
"NO": "Отменить"
}
},
"SETTINGS": "Настройки",
"FORM": {
- "UPDATE": "Update team",
- "CREATE": "Create team",
+ "UPDATE": "Обновить команду",
+ "CREATE": "Создать команду",
"NAME": {
- "LABEL": "Team name",
- "PLACEHOLDER": "Example: Sales, Customer Support"
+ "LABEL": "Название команды",
+ "PLACEHOLDER": "Пример: Продажи, Поддержка клиентов"
},
"DESCRIPTION": {
- "LABEL": "Team Description",
- "PLACEHOLDER": "Short description about this team."
+ "LABEL": "Описание команды",
+ "PLACEHOLDER": "Краткое описание этой команды."
},
"AUTO_ASSIGN": {
- "LABEL": "Allow auto assign for this team."
+ "LABEL": "Разрешить автоматическое назначение для этой команды."
},
- "SUBMIT_CREATE": "Create team"
+ "SUBMIT_CREATE": "Создать команду"
}
}
}
diff --git a/app/javascript/dashboard/i18n/locale/sk/campaign.json b/app/javascript/dashboard/i18n/locale/sk/campaign.json
new file mode 100644
index 00000000000..2eed61b1929
--- /dev/null
+++ b/app/javascript/dashboard/i18n/locale/sk/campaign.json
@@ -0,0 +1,79 @@
+{
+ "CAMPAIGN": {
+ "HEADER": "Campaigns",
+ "SIDEBAR_TXT": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations. Click on Add Campaign to create a new campaign. You can also edit or delete an existing campaign by clicking on the Edit or Delete button.",
+ "HEADER_BTN_TXT": "Create a campaign",
+ "ADD": {
+ "TITLE": "Create a campaign",
+ "DESC": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations.",
+ "CANCEL_BUTTON_TEXT": "Cancel",
+ "CREATE_BUTTON_TEXT": "Create",
+ "FORM": {
+ "TITLE": {
+ "LABEL": "Title",
+ "PLACEHOLDER": "Please enter the title of campaign",
+ "ERROR": "Title is required"
+ },
+ "MESSAGE": {
+ "LABEL": "Message",
+ "PLACEHOLDER": "Please enter the message of campaign",
+ "ERROR": "Message is required"
+ },
+ "SENT_BY": {
+ "LABEL": "Sent by",
+ "PLACEHOLDER": "Please select the the content of campaign",
+ "ERROR": "Sender is required"
+ },
+ "END_POINT": {
+ "LABEL": "URL",
+ "PLACEHOLDER": "Please enter the URL",
+ "ERROR": "Please enter a valid URL"
+ },
+ "TIME_ON_PAGE": {
+ "LABEL": "Time on page(Seconds)",
+ "PLACEHOLDER": "Please enter the time",
+ "ERROR": "Time on page is required"
+ },
+ "ENABLED": "Enable campaign",
+ "SUBMIT": "Add Campaign"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Campaign created successfully",
+ "ERROR_MESSAGE": "There was an error. Please try again."
+ }
+ },
+ "EDIT": {
+ "TITLE": "Edit campaign",
+ "UPDATE_BUTTON_TEXT": "Update",
+ "API": {
+ "SUCCESS_MESSAGE": "Campaign updated successfully",
+ "ERROR_MESSAGE": "There was an error, please try again"
+ }
+ },
+ "LIST": {
+ "LOADING_MESSAGE": "Loading campaigns...",
+ "404": "There are no campaigns created for this inbox.",
+ "TABLE_HEADER": {
+ "TITLE": "Title",
+ "MESSAGE": "Message",
+ "STATUS": "Status",
+ "SENDER": "Sender",
+ "URL": "URL",
+ "TIME_ON_PAGE": "Time(Seconds)",
+ "CREATED_AT": "Created at"
+ },
+ "BUTTONS": {
+ "ADD": "Add",
+ "EDIT": "Edit",
+ "DELETE": "Delete"
+ },
+ "STATUS": {
+ "ENABLED": "Enabled",
+ "DISABLED": "Disabled"
+ },
+ "SENDER": {
+ "BOT": "Bot"
+ }
+ }
+ }
+}
diff --git a/app/javascript/dashboard/i18n/locale/sk/chatlist.json b/app/javascript/dashboard/i18n/locale/sk/chatlist.json
index 2285547890f..ef4e0629ac2 100644
--- a/app/javascript/dashboard/i18n/locale/sk/chatlist.json
+++ b/app/javascript/dashboard/i18n/locale/sk/chatlist.json
@@ -80,6 +80,7 @@
"RECEIVED_VIA_EMAIL": "Received via email",
"VIEW_TWEET_IN_TWITTER": "View tweet in Twitter",
"REPLY_TO_TWEET": "Reply to this tweet",
- "NO_MESSAGES": "No Messages"
+ "NO_MESSAGES": "No Messages",
+ "NO_CONTENT": "No content available"
}
}
diff --git a/app/javascript/dashboard/i18n/locale/sk/contact.json b/app/javascript/dashboard/i18n/locale/sk/contact.json
index b8d936d220a..6a94011a52a 100644
--- a/app/javascript/dashboard/i18n/locale/sk/contact.json
+++ b/app/javascript/dashboard/i18n/locale/sk/contact.json
@@ -28,11 +28,17 @@
"INACTIVE_LABELS": "Labels available in the account",
"REMOVE": "Click on X icon to remove the label",
"ADD": "Click on + icon to add the label",
+ "ADD_BUTTON": "Add Labels",
"UPDATE_BUTTON": "Update labels",
"UPDATE_ERROR": "Couldn't update labels, try again."
},
"NO_LABELS_TO_ADD": "There are no more labels defined in the account.",
- "NO_AVAILABLE_LABELS": "There are no labels added to this conversation."
+ "NO_AVAILABLE_LABELS": "There are no labels added to this conversation.",
+ "LABEL_SELECT": {
+ "TITLE": "Add Labels",
+ "PLACEHOLDER": "Search labels",
+ "NO_RESULT": "No labels found"
+ }
},
"MUTE_CONTACT": "Mute Conversation",
"UNMUTE_CONTACT": "Unmute Conversation",
@@ -151,5 +157,18 @@
},
"VIEW_DETAILS": "View details"
}
+ },
+ "NOTES": {
+ "HEADER": {
+ "TITLE": "Notes"
+ },
+ "ADD": {
+ "BUTTON": "Add",
+ "PLACEHOLDER": "Add a note",
+ "TITLE": "Shift + Enter to create a note"
+ },
+ "FOOTER": {
+ "BUTTON": "View all notes"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/sk/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/sk/inboxMgmt.json
index 13d97f3b05b..e03e40f3977 100644
--- a/app/javascript/dashboard/i18n/locale/sk/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/sk/inboxMgmt.json
@@ -227,6 +227,7 @@
"SETTINGS": "Settings",
"COLLABORATORS": "Collaborators",
"CONFIGURATION": "Configuration",
+ "CAMPAIGN": "Campaigns",
"PRE_CHAT_FORM": "Pre Chat Form",
"BUSINESS_HOURS": "Business Hours"
},
diff --git a/app/javascript/dashboard/i18n/locale/sk/index.js b/app/javascript/dashboard/i18n/locale/sk/index.js
index 5dfc44e4b47..cf1dda7fe57 100644
--- a/app/javascript/dashboard/i18n/locale/sk/index.js
+++ b/app/javascript/dashboard/i18n/locale/sk/index.js
@@ -1,33 +1,37 @@
import { default as _agentMgmt } from './agentMgmt.json';
-import { default as _labelsMgmt } from './labelsMgmt.json';
+import { default as _campaign } from './campaign.json';
import { default as _cannedMgmt } from './cannedMgmt.json';
import { default as _chatlist } from './chatlist.json';
import { default as _contact } from './contact.json';
import { default as _conversation } from './conversation.json';
+import { default as _generalSettings } from './generalSettings.json';
import { default as _inboxMgmt } from './inboxMgmt.json';
+import { default as _integrations } from './integrations.json';
+import { default as _labelsMgmt } from './labelsMgmt.json';
import { default as _login } from './login.json';
import { default as _report } from './report.json';
import { default as _resetPassword } from './resetPassword.json';
import { default as _setNewPassword } from './setNewPassword.json';
import { default as _settings } from './settings.json';
import { default as _signup } from './signup.json';
-import { default as _integrations } from './integrations.json';
-import { default as _generalSettings } from './generalSettings.json';
+import { default as _teamsSettings } from './teamsSettings.json';
export default {
..._agentMgmt,
+ ..._campaign,
..._cannedMgmt,
..._chatlist,
..._contact,
..._conversation,
+ ..._generalSettings,
..._inboxMgmt,
+ ..._integrations,
+ ..._labelsMgmt,
..._login,
..._report,
- ..._labelsMgmt,
..._resetPassword,
..._setNewPassword,
..._settings,
..._signup,
- ..._integrations,
- ..._generalSettings,
+ ..._teamsSettings,
};
diff --git a/app/javascript/dashboard/i18n/locale/sk/report.json b/app/javascript/dashboard/i18n/locale/sk/report.json
index 22e4a1c7520..cf2c14a57f9 100644
--- a/app/javascript/dashboard/i18n/locale/sk/report.json
+++ b/app/javascript/dashboard/i18n/locale/sk/report.json
@@ -38,6 +38,18 @@
{
"id": 1,
"name": "Last 30 days"
+ },
+ {
+ "id": 2,
+ "name": "Last 3 months"
+ },
+ {
+ "id": 3,
+ "name": "Last 6 months"
+ },
+ {
+ "id": 4,
+ "name": "Last year"
}
]
}
diff --git a/app/javascript/dashboard/i18n/locale/sv/campaign.json b/app/javascript/dashboard/i18n/locale/sv/campaign.json
new file mode 100644
index 00000000000..86fa42ea306
--- /dev/null
+++ b/app/javascript/dashboard/i18n/locale/sv/campaign.json
@@ -0,0 +1,79 @@
+{
+ "CAMPAIGN": {
+ "HEADER": "Campaigns",
+ "SIDEBAR_TXT": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations. Click on Add Campaign to create a new campaign. You can also edit or delete an existing campaign by clicking on the Edit or Delete button.",
+ "HEADER_BTN_TXT": "Create a campaign",
+ "ADD": {
+ "TITLE": "Create a campaign",
+ "DESC": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations.",
+ "CANCEL_BUTTON_TEXT": "Avbryt",
+ "CREATE_BUTTON_TEXT": "Skapa",
+ "FORM": {
+ "TITLE": {
+ "LABEL": "Title",
+ "PLACEHOLDER": "Please enter the title of campaign",
+ "ERROR": "Title is required"
+ },
+ "MESSAGE": {
+ "LABEL": "Message",
+ "PLACEHOLDER": "Please enter the message of campaign",
+ "ERROR": "Message is required"
+ },
+ "SENT_BY": {
+ "LABEL": "Skickat av",
+ "PLACEHOLDER": "Please select the the content of campaign",
+ "ERROR": "Sender is required"
+ },
+ "END_POINT": {
+ "LABEL": "URL",
+ "PLACEHOLDER": "Please enter the URL",
+ "ERROR": "Ange en giltig URL"
+ },
+ "TIME_ON_PAGE": {
+ "LABEL": "Time on page(Seconds)",
+ "PLACEHOLDER": "Please enter the time",
+ "ERROR": "Time on page is required"
+ },
+ "ENABLED": "Enable campaign",
+ "SUBMIT": "Add Campaign"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Campaign created successfully",
+ "ERROR_MESSAGE": "There was an error. Please try again."
+ }
+ },
+ "EDIT": {
+ "TITLE": "Edit campaign",
+ "UPDATE_BUTTON_TEXT": "Uppdatera",
+ "API": {
+ "SUCCESS_MESSAGE": "Campaign updated successfully",
+ "ERROR_MESSAGE": "Ett fel uppstod, vänligen försök igen"
+ }
+ },
+ "LIST": {
+ "LOADING_MESSAGE": "Loading campaigns...",
+ "404": "There are no campaigns created for this inbox.",
+ "TABLE_HEADER": {
+ "TITLE": "Title",
+ "MESSAGE": "Message",
+ "STATUS": "Status",
+ "SENDER": "Sender",
+ "URL": "URL",
+ "TIME_ON_PAGE": "Time(Seconds)",
+ "CREATED_AT": "Created at"
+ },
+ "BUTTONS": {
+ "ADD": "Add",
+ "EDIT": "Redigera",
+ "DELETE": "Radera"
+ },
+ "STATUS": {
+ "ENABLED": "Aktiverad",
+ "DISABLED": "Inaktiverad"
+ },
+ "SENDER": {
+ "BOT": "Bot"
+ }
+ }
+ }
+}
diff --git a/app/javascript/dashboard/i18n/locale/sv/chatlist.json b/app/javascript/dashboard/i18n/locale/sv/chatlist.json
index 673e34ad574..8b606813f13 100644
--- a/app/javascript/dashboard/i18n/locale/sv/chatlist.json
+++ b/app/javascript/dashboard/i18n/locale/sv/chatlist.json
@@ -80,6 +80,7 @@
"RECEIVED_VIA_EMAIL": "Mottaget via e-post",
"VIEW_TWEET_IN_TWITTER": "Visa tweet i Twitter",
"REPLY_TO_TWEET": "Svara på detta tweet",
- "NO_MESSAGES": "Inga meddelanden"
+ "NO_MESSAGES": "Inga meddelanden",
+ "NO_CONTENT": "No content available"
}
}
diff --git a/app/javascript/dashboard/i18n/locale/sv/contact.json b/app/javascript/dashboard/i18n/locale/sv/contact.json
index f8007cb793a..e522d6958fa 100644
--- a/app/javascript/dashboard/i18n/locale/sv/contact.json
+++ b/app/javascript/dashboard/i18n/locale/sv/contact.json
@@ -28,11 +28,17 @@
"INACTIVE_LABELS": "Etiketter tillgängliga på kontot",
"REMOVE": "Klicka på X-ikonen för att ta bort etiketten",
"ADD": "Klicka på + ikonen för att lägga till etiketten",
+ "ADD_BUTTON": "Add Labels",
"UPDATE_BUTTON": "Uppdatera etiketter",
"UPDATE_ERROR": "Kunde inte uppdatera etiketter, försök igen."
},
"NO_LABELS_TO_ADD": "Det finns inga fler etiketter definierade på kontot.",
- "NO_AVAILABLE_LABELS": "Det finns inga etiketter tillagda till denna konversation."
+ "NO_AVAILABLE_LABELS": "Det finns inga etiketter tillagda till denna konversation.",
+ "LABEL_SELECT": {
+ "TITLE": "Add Labels",
+ "PLACEHOLDER": "Search labels",
+ "NO_RESULT": "No labels found"
+ }
},
"MUTE_CONTACT": "Tysta konversation",
"UNMUTE_CONTACT": "Avtysta konversation",
@@ -151,5 +157,18 @@
},
"VIEW_DETAILS": "View details"
}
+ },
+ "NOTES": {
+ "HEADER": {
+ "TITLE": "Notes"
+ },
+ "ADD": {
+ "BUTTON": "Add",
+ "PLACEHOLDER": "Add a note",
+ "TITLE": "Shift + Enter to create a note"
+ },
+ "FOOTER": {
+ "BUTTON": "View all notes"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/sv/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/sv/inboxMgmt.json
index e4363b9488b..39a68c72589 100644
--- a/app/javascript/dashboard/i18n/locale/sv/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/sv/inboxMgmt.json
@@ -227,6 +227,7 @@
"SETTINGS": "Inställningar",
"COLLABORATORS": "Medarbetare",
"CONFIGURATION": "Konfiguration",
+ "CAMPAIGN": "Campaigns",
"PRE_CHAT_FORM": "Pre Chat Form",
"BUSINESS_HOURS": "Business Hours"
},
diff --git a/app/javascript/dashboard/i18n/locale/sv/index.js b/app/javascript/dashboard/i18n/locale/sv/index.js
index 5dfc44e4b47..cf1dda7fe57 100644
--- a/app/javascript/dashboard/i18n/locale/sv/index.js
+++ b/app/javascript/dashboard/i18n/locale/sv/index.js
@@ -1,33 +1,37 @@
import { default as _agentMgmt } from './agentMgmt.json';
-import { default as _labelsMgmt } from './labelsMgmt.json';
+import { default as _campaign } from './campaign.json';
import { default as _cannedMgmt } from './cannedMgmt.json';
import { default as _chatlist } from './chatlist.json';
import { default as _contact } from './contact.json';
import { default as _conversation } from './conversation.json';
+import { default as _generalSettings } from './generalSettings.json';
import { default as _inboxMgmt } from './inboxMgmt.json';
+import { default as _integrations } from './integrations.json';
+import { default as _labelsMgmt } from './labelsMgmt.json';
import { default as _login } from './login.json';
import { default as _report } from './report.json';
import { default as _resetPassword } from './resetPassword.json';
import { default as _setNewPassword } from './setNewPassword.json';
import { default as _settings } from './settings.json';
import { default as _signup } from './signup.json';
-import { default as _integrations } from './integrations.json';
-import { default as _generalSettings } from './generalSettings.json';
+import { default as _teamsSettings } from './teamsSettings.json';
export default {
..._agentMgmt,
+ ..._campaign,
..._cannedMgmt,
..._chatlist,
..._contact,
..._conversation,
+ ..._generalSettings,
..._inboxMgmt,
+ ..._integrations,
+ ..._labelsMgmt,
..._login,
..._report,
- ..._labelsMgmt,
..._resetPassword,
..._setNewPassword,
..._settings,
..._signup,
- ..._integrations,
- ..._generalSettings,
+ ..._teamsSettings,
};
diff --git a/app/javascript/dashboard/i18n/locale/sv/report.json b/app/javascript/dashboard/i18n/locale/sv/report.json
index f22abfac05d..b402521b67d 100644
--- a/app/javascript/dashboard/i18n/locale/sv/report.json
+++ b/app/javascript/dashboard/i18n/locale/sv/report.json
@@ -38,6 +38,18 @@
{
"id": 1,
"name": "Senaste 30 dagarna"
+ },
+ {
+ "id": 2,
+ "name": "Last 3 months"
+ },
+ {
+ "id": 3,
+ "name": "Last 6 months"
+ },
+ {
+ "id": 4,
+ "name": "Last year"
}
]
}
diff --git a/app/javascript/dashboard/i18n/locale/ta/campaign.json b/app/javascript/dashboard/i18n/locale/ta/campaign.json
new file mode 100644
index 00000000000..b1f2b0a66c0
--- /dev/null
+++ b/app/javascript/dashboard/i18n/locale/ta/campaign.json
@@ -0,0 +1,79 @@
+{
+ "CAMPAIGN": {
+ "HEADER": "Campaigns",
+ "SIDEBAR_TXT": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations. Click on Add Campaign to create a new campaign. You can also edit or delete an existing campaign by clicking on the Edit or Delete button.",
+ "HEADER_BTN_TXT": "Create a campaign",
+ "ADD": {
+ "TITLE": "Create a campaign",
+ "DESC": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations.",
+ "CANCEL_BUTTON_TEXT": "ரத்துசெய்",
+ "CREATE_BUTTON_TEXT": "Create",
+ "FORM": {
+ "TITLE": {
+ "LABEL": "Title",
+ "PLACEHOLDER": "Please enter the title of campaign",
+ "ERROR": "Title is required"
+ },
+ "MESSAGE": {
+ "LABEL": "Message",
+ "PLACEHOLDER": "Please enter the message of campaign",
+ "ERROR": "Message is required"
+ },
+ "SENT_BY": {
+ "LABEL": "Sent by",
+ "PLACEHOLDER": "Please select the the content of campaign",
+ "ERROR": "Sender is required"
+ },
+ "END_POINT": {
+ "LABEL": "URL",
+ "PLACEHOLDER": "Please enter the URL",
+ "ERROR": "சரியான URL ஐ பதிவிடவும்"
+ },
+ "TIME_ON_PAGE": {
+ "LABEL": "Time on page(Seconds)",
+ "PLACEHOLDER": "Please enter the time",
+ "ERROR": "Time on page is required"
+ },
+ "ENABLED": "Enable campaign",
+ "SUBMIT": "Add Campaign"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Campaign created successfully",
+ "ERROR_MESSAGE": "There was an error. Please try again."
+ }
+ },
+ "EDIT": {
+ "TITLE": "Edit campaign",
+ "UPDATE_BUTTON_TEXT": "புதுப்பிப்பு",
+ "API": {
+ "SUCCESS_MESSAGE": "Campaign updated successfully",
+ "ERROR_MESSAGE": "There was an error, please try again"
+ }
+ },
+ "LIST": {
+ "LOADING_MESSAGE": "Loading campaigns...",
+ "404": "There are no campaigns created for this inbox.",
+ "TABLE_HEADER": {
+ "TITLE": "Title",
+ "MESSAGE": "Message",
+ "STATUS": "நிலை",
+ "SENDER": "Sender",
+ "URL": "URL",
+ "TIME_ON_PAGE": "Time(Seconds)",
+ "CREATED_AT": "Created at"
+ },
+ "BUTTONS": {
+ "ADD": "Add",
+ "EDIT": "திருத்து",
+ "DELETE": "Delete"
+ },
+ "STATUS": {
+ "ENABLED": "இயக்கப்பட்டது",
+ "DISABLED": "முடக்கப்பட்டது"
+ },
+ "SENDER": {
+ "BOT": "Bot"
+ }
+ }
+ }
+}
diff --git a/app/javascript/dashboard/i18n/locale/ta/chatlist.json b/app/javascript/dashboard/i18n/locale/ta/chatlist.json
index e27a9c1b057..dca53b4203b 100644
--- a/app/javascript/dashboard/i18n/locale/ta/chatlist.json
+++ b/app/javascript/dashboard/i18n/locale/ta/chatlist.json
@@ -80,6 +80,7 @@
"RECEIVED_VIA_EMAIL": "Received via email",
"VIEW_TWEET_IN_TWITTER": "View tweet in Twitter",
"REPLY_TO_TWEET": "Reply to this tweet",
- "NO_MESSAGES": "No Messages"
+ "NO_MESSAGES": "No Messages",
+ "NO_CONTENT": "No content available"
}
}
diff --git a/app/javascript/dashboard/i18n/locale/ta/contact.json b/app/javascript/dashboard/i18n/locale/ta/contact.json
index 1d69919163f..567af164463 100644
--- a/app/javascript/dashboard/i18n/locale/ta/contact.json
+++ b/app/javascript/dashboard/i18n/locale/ta/contact.json
@@ -28,11 +28,17 @@
"INACTIVE_LABELS": "Labels available in the account",
"REMOVE": "Click on X icon to remove the label",
"ADD": "Click on + icon to add the label",
+ "ADD_BUTTON": "Add Labels",
"UPDATE_BUTTON": "Update labels",
"UPDATE_ERROR": "லேபிள்களைப் புதுப்பிக்க முடியவில்லை, மீண்டும் முயற்சிக்கவும்."
},
"NO_LABELS_TO_ADD": "There are no more labels defined in the account.",
- "NO_AVAILABLE_LABELS": "There are no labels added to this conversation."
+ "NO_AVAILABLE_LABELS": "There are no labels added to this conversation.",
+ "LABEL_SELECT": {
+ "TITLE": "Add Labels",
+ "PLACEHOLDER": "Search labels",
+ "NO_RESULT": "No labels found"
+ }
},
"MUTE_CONTACT": "Mute Conversation",
"UNMUTE_CONTACT": "Unmute Conversation",
@@ -151,5 +157,18 @@
},
"VIEW_DETAILS": "View details"
}
+ },
+ "NOTES": {
+ "HEADER": {
+ "TITLE": "Notes"
+ },
+ "ADD": {
+ "BUTTON": "Add",
+ "PLACEHOLDER": "Add a note",
+ "TITLE": "Shift + Enter to create a note"
+ },
+ "FOOTER": {
+ "BUTTON": "View all notes"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/ta/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/ta/inboxMgmt.json
index 4f500305ffd..d9253bd7714 100644
--- a/app/javascript/dashboard/i18n/locale/ta/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/ta/inboxMgmt.json
@@ -227,6 +227,7 @@
"SETTINGS": "அமைப்புகள்",
"COLLABORATORS": "Collaborators",
"CONFIGURATION": "Configuration",
+ "CAMPAIGN": "Campaigns",
"PRE_CHAT_FORM": "Pre Chat Form",
"BUSINESS_HOURS": "Business Hours"
},
diff --git a/app/javascript/dashboard/i18n/locale/ta/index.js b/app/javascript/dashboard/i18n/locale/ta/index.js
index 5dfc44e4b47..cf1dda7fe57 100644
--- a/app/javascript/dashboard/i18n/locale/ta/index.js
+++ b/app/javascript/dashboard/i18n/locale/ta/index.js
@@ -1,33 +1,37 @@
import { default as _agentMgmt } from './agentMgmt.json';
-import { default as _labelsMgmt } from './labelsMgmt.json';
+import { default as _campaign } from './campaign.json';
import { default as _cannedMgmt } from './cannedMgmt.json';
import { default as _chatlist } from './chatlist.json';
import { default as _contact } from './contact.json';
import { default as _conversation } from './conversation.json';
+import { default as _generalSettings } from './generalSettings.json';
import { default as _inboxMgmt } from './inboxMgmt.json';
+import { default as _integrations } from './integrations.json';
+import { default as _labelsMgmt } from './labelsMgmt.json';
import { default as _login } from './login.json';
import { default as _report } from './report.json';
import { default as _resetPassword } from './resetPassword.json';
import { default as _setNewPassword } from './setNewPassword.json';
import { default as _settings } from './settings.json';
import { default as _signup } from './signup.json';
-import { default as _integrations } from './integrations.json';
-import { default as _generalSettings } from './generalSettings.json';
+import { default as _teamsSettings } from './teamsSettings.json';
export default {
..._agentMgmt,
+ ..._campaign,
..._cannedMgmt,
..._chatlist,
..._contact,
..._conversation,
+ ..._generalSettings,
..._inboxMgmt,
+ ..._integrations,
+ ..._labelsMgmt,
..._login,
..._report,
- ..._labelsMgmt,
..._resetPassword,
..._setNewPassword,
..._settings,
..._signup,
- ..._integrations,
- ..._generalSettings,
+ ..._teamsSettings,
};
diff --git a/app/javascript/dashboard/i18n/locale/ta/report.json b/app/javascript/dashboard/i18n/locale/ta/report.json
index 44ebe628db9..c36ed1f9a40 100644
--- a/app/javascript/dashboard/i18n/locale/ta/report.json
+++ b/app/javascript/dashboard/i18n/locale/ta/report.json
@@ -38,6 +38,18 @@
{
"id": 1,
"name": "கடந்த 30 நாட்கள்"
+ },
+ {
+ "id": 2,
+ "name": "Last 3 months"
+ },
+ {
+ "id": 3,
+ "name": "Last 6 months"
+ },
+ {
+ "id": 4,
+ "name": "Last year"
}
]
}
diff --git a/app/javascript/dashboard/i18n/locale/th/campaign.json b/app/javascript/dashboard/i18n/locale/th/campaign.json
new file mode 100644
index 00000000000..2550d305c2b
--- /dev/null
+++ b/app/javascript/dashboard/i18n/locale/th/campaign.json
@@ -0,0 +1,79 @@
+{
+ "CAMPAIGN": {
+ "HEADER": "Campaigns",
+ "SIDEBAR_TXT": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations. Click on Add Campaign to create a new campaign. You can also edit or delete an existing campaign by clicking on the Edit or Delete button.",
+ "HEADER_BTN_TXT": "Create a campaign",
+ "ADD": {
+ "TITLE": "Create a campaign",
+ "DESC": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations.",
+ "CANCEL_BUTTON_TEXT": "ยกเลิก",
+ "CREATE_BUTTON_TEXT": "Create",
+ "FORM": {
+ "TITLE": {
+ "LABEL": "Title",
+ "PLACEHOLDER": "Please enter the title of campaign",
+ "ERROR": "Title is required"
+ },
+ "MESSAGE": {
+ "LABEL": "Message",
+ "PLACEHOLDER": "Please enter the message of campaign",
+ "ERROR": "Message is required"
+ },
+ "SENT_BY": {
+ "LABEL": "Sent by",
+ "PLACEHOLDER": "Please select the the content of campaign",
+ "ERROR": "Sender is required"
+ },
+ "END_POINT": {
+ "LABEL": "URL",
+ "PLACEHOLDER": "Please enter the URL",
+ "ERROR": "Please enter a valid URL"
+ },
+ "TIME_ON_PAGE": {
+ "LABEL": "Time on page(Seconds)",
+ "PLACEHOLDER": "Please enter the time",
+ "ERROR": "Time on page is required"
+ },
+ "ENABLED": "Enable campaign",
+ "SUBMIT": "Add Campaign"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Campaign created successfully",
+ "ERROR_MESSAGE": "There was an error. Please try again."
+ }
+ },
+ "EDIT": {
+ "TITLE": "Edit campaign",
+ "UPDATE_BUTTON_TEXT": "Update",
+ "API": {
+ "SUCCESS_MESSAGE": "Campaign updated successfully",
+ "ERROR_MESSAGE": "เกิดข้อผิดพลาดกรุณาลองใหม่อีกครั้ง"
+ }
+ },
+ "LIST": {
+ "LOADING_MESSAGE": "Loading campaigns...",
+ "404": "There are no campaigns created for this inbox.",
+ "TABLE_HEADER": {
+ "TITLE": "Title",
+ "MESSAGE": "Message",
+ "STATUS": "สถานะ",
+ "SENDER": "Sender",
+ "URL": "URL",
+ "TIME_ON_PAGE": "Time(Seconds)",
+ "CREATED_AT": "Created at"
+ },
+ "BUTTONS": {
+ "ADD": "Add",
+ "EDIT": "เเก้ไข",
+ "DELETE": "ลบ"
+ },
+ "STATUS": {
+ "ENABLED": "เปิด",
+ "DISABLED": "ปิด"
+ },
+ "SENDER": {
+ "BOT": "บอท"
+ }
+ }
+ }
+}
diff --git a/app/javascript/dashboard/i18n/locale/th/chatlist.json b/app/javascript/dashboard/i18n/locale/th/chatlist.json
index 96e82d01953..914b66ada9a 100644
--- a/app/javascript/dashboard/i18n/locale/th/chatlist.json
+++ b/app/javascript/dashboard/i18n/locale/th/chatlist.json
@@ -80,6 +80,7 @@
"RECEIVED_VIA_EMAIL": "ได้รับทางอีเมลล์",
"VIEW_TWEET_IN_TWITTER": "ดูทวิตในทวิตเตอร์",
"REPLY_TO_TWEET": "ตอบกลับทวิตนี้",
- "NO_MESSAGES": "No Messages"
+ "NO_MESSAGES": "No Messages",
+ "NO_CONTENT": "No content available"
}
}
diff --git a/app/javascript/dashboard/i18n/locale/th/contact.json b/app/javascript/dashboard/i18n/locale/th/contact.json
index 5fd0f7df8fa..17044bcc6cd 100644
--- a/app/javascript/dashboard/i18n/locale/th/contact.json
+++ b/app/javascript/dashboard/i18n/locale/th/contact.json
@@ -28,11 +28,17 @@
"INACTIVE_LABELS": "ป้ายกำกับที่ใช้ได้ในบัญชีนี้",
"REMOVE": "คลิกที่ X เพื่อลบป้ายกำกับ",
"ADD": "คลิกที่ + เพื่อเพิ่มป้ายกำกับ",
+ "ADD_BUTTON": "Add Labels",
"UPDATE_BUTTON": "อัพเดทป้ายกำกับ",
"UPDATE_ERROR": "ไม่สามารถอัพเดทป้านกำกับได้กรุณาลองใหม่"
},
"NO_LABELS_TO_ADD": "ไม่มีป้ายกำกับที่กำหนดให้บัญชีนี้",
- "NO_AVAILABLE_LABELS": "ไม่มีป้ายกำกับที่เพิ่มให้การสนทนานี้"
+ "NO_AVAILABLE_LABELS": "ไม่มีป้ายกำกับที่เพิ่มให้การสนทนานี้",
+ "LABEL_SELECT": {
+ "TITLE": "Add Labels",
+ "PLACEHOLDER": "Search labels",
+ "NO_RESULT": "No labels found"
+ }
},
"MUTE_CONTACT": "ระงับการสนทนา",
"UNMUTE_CONTACT": "Unmute Conversation",
@@ -151,5 +157,18 @@
},
"VIEW_DETAILS": "View details"
}
+ },
+ "NOTES": {
+ "HEADER": {
+ "TITLE": "Notes"
+ },
+ "ADD": {
+ "BUTTON": "Add",
+ "PLACEHOLDER": "Add a note",
+ "TITLE": "Shift + Enter to create a note"
+ },
+ "FOOTER": {
+ "BUTTON": "View all notes"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/th/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/th/inboxMgmt.json
index c2eeccdae35..c91e4d2e266 100644
--- a/app/javascript/dashboard/i18n/locale/th/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/th/inboxMgmt.json
@@ -227,6 +227,7 @@
"SETTINGS": "Settings",
"COLLABORATORS": "Collaborators",
"CONFIGURATION": "Configuration",
+ "CAMPAIGN": "Campaigns",
"PRE_CHAT_FORM": "Pre Chat Form",
"BUSINESS_HOURS": "Business Hours"
},
diff --git a/app/javascript/dashboard/i18n/locale/th/index.js b/app/javascript/dashboard/i18n/locale/th/index.js
index 5dfc44e4b47..cf1dda7fe57 100644
--- a/app/javascript/dashboard/i18n/locale/th/index.js
+++ b/app/javascript/dashboard/i18n/locale/th/index.js
@@ -1,33 +1,37 @@
import { default as _agentMgmt } from './agentMgmt.json';
-import { default as _labelsMgmt } from './labelsMgmt.json';
+import { default as _campaign } from './campaign.json';
import { default as _cannedMgmt } from './cannedMgmt.json';
import { default as _chatlist } from './chatlist.json';
import { default as _contact } from './contact.json';
import { default as _conversation } from './conversation.json';
+import { default as _generalSettings } from './generalSettings.json';
import { default as _inboxMgmt } from './inboxMgmt.json';
+import { default as _integrations } from './integrations.json';
+import { default as _labelsMgmt } from './labelsMgmt.json';
import { default as _login } from './login.json';
import { default as _report } from './report.json';
import { default as _resetPassword } from './resetPassword.json';
import { default as _setNewPassword } from './setNewPassword.json';
import { default as _settings } from './settings.json';
import { default as _signup } from './signup.json';
-import { default as _integrations } from './integrations.json';
-import { default as _generalSettings } from './generalSettings.json';
+import { default as _teamsSettings } from './teamsSettings.json';
export default {
..._agentMgmt,
+ ..._campaign,
..._cannedMgmt,
..._chatlist,
..._contact,
..._conversation,
+ ..._generalSettings,
..._inboxMgmt,
+ ..._integrations,
+ ..._labelsMgmt,
..._login,
..._report,
- ..._labelsMgmt,
..._resetPassword,
..._setNewPassword,
..._settings,
..._signup,
- ..._integrations,
- ..._generalSettings,
+ ..._teamsSettings,
};
diff --git a/app/javascript/dashboard/i18n/locale/th/report.json b/app/javascript/dashboard/i18n/locale/th/report.json
index 0e8e66de2a6..0018a50dacf 100644
--- a/app/javascript/dashboard/i18n/locale/th/report.json
+++ b/app/javascript/dashboard/i18n/locale/th/report.json
@@ -38,6 +38,18 @@
{
"id": 1,
"name": "Last 30 days"
+ },
+ {
+ "id": 2,
+ "name": "Last 3 months"
+ },
+ {
+ "id": 3,
+ "name": "Last 6 months"
+ },
+ {
+ "id": 4,
+ "name": "Last year"
}
]
}
diff --git a/app/javascript/dashboard/i18n/locale/tr/campaign.json b/app/javascript/dashboard/i18n/locale/tr/campaign.json
new file mode 100644
index 00000000000..99727f30a8d
--- /dev/null
+++ b/app/javascript/dashboard/i18n/locale/tr/campaign.json
@@ -0,0 +1,79 @@
+{
+ "CAMPAIGN": {
+ "HEADER": "Campaigns",
+ "SIDEBAR_TXT": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations. Click on Add Campaign to create a new campaign. You can also edit or delete an existing campaign by clicking on the Edit or Delete button.",
+ "HEADER_BTN_TXT": "Create a campaign",
+ "ADD": {
+ "TITLE": "Create a campaign",
+ "DESC": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations.",
+ "CANCEL_BUTTON_TEXT": "İptal Et",
+ "CREATE_BUTTON_TEXT": "Yarat",
+ "FORM": {
+ "TITLE": {
+ "LABEL": "Title",
+ "PLACEHOLDER": "Please enter the title of campaign",
+ "ERROR": "Title is required"
+ },
+ "MESSAGE": {
+ "LABEL": "Message",
+ "PLACEHOLDER": "Please enter the message of campaign",
+ "ERROR": "Message is required"
+ },
+ "SENT_BY": {
+ "LABEL": "Tarafından gönderildi",
+ "PLACEHOLDER": "Please select the the content of campaign",
+ "ERROR": "Sender is required"
+ },
+ "END_POINT": {
+ "LABEL": "URL",
+ "PLACEHOLDER": "Please enter the URL",
+ "ERROR": "Lütfen geçerli bir adres girin"
+ },
+ "TIME_ON_PAGE": {
+ "LABEL": "Time on page(Seconds)",
+ "PLACEHOLDER": "Please enter the time",
+ "ERROR": "Time on page is required"
+ },
+ "ENABLED": "Enable campaign",
+ "SUBMIT": "Add Campaign"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Campaign created successfully",
+ "ERROR_MESSAGE": "There was an error. Please try again."
+ }
+ },
+ "EDIT": {
+ "TITLE": "Edit campaign",
+ "UPDATE_BUTTON_TEXT": "Güncelleme",
+ "API": {
+ "SUCCESS_MESSAGE": "Campaign updated successfully",
+ "ERROR_MESSAGE": "Bir hata oluştu, lütfen tekrar deneyin"
+ }
+ },
+ "LIST": {
+ "LOADING_MESSAGE": "Loading campaigns...",
+ "404": "There are no campaigns created for this inbox.",
+ "TABLE_HEADER": {
+ "TITLE": "Title",
+ "MESSAGE": "Message",
+ "STATUS": "Durum",
+ "SENDER": "Sender",
+ "URL": "URL",
+ "TIME_ON_PAGE": "Time(Seconds)",
+ "CREATED_AT": "Created at"
+ },
+ "BUTTONS": {
+ "ADD": "Add",
+ "EDIT": "Düzenle",
+ "DELETE": "Sil"
+ },
+ "STATUS": {
+ "ENABLED": "Etkin",
+ "DISABLED": "Devre dışı"
+ },
+ "SENDER": {
+ "BOT": "Bot"
+ }
+ }
+ }
+}
diff --git a/app/javascript/dashboard/i18n/locale/tr/chatlist.json b/app/javascript/dashboard/i18n/locale/tr/chatlist.json
index 0068db06432..f12fbed4159 100644
--- a/app/javascript/dashboard/i18n/locale/tr/chatlist.json
+++ b/app/javascript/dashboard/i18n/locale/tr/chatlist.json
@@ -80,6 +80,7 @@
"RECEIVED_VIA_EMAIL": "E-posta ile alındı",
"VIEW_TWEET_IN_TWITTER": "Twitter'da tweet'i görüntüleyin",
"REPLY_TO_TWEET": "Bu tweet'i yanıtla",
- "NO_MESSAGES": "Mesaj yok"
+ "NO_MESSAGES": "Mesaj yok",
+ "NO_CONTENT": "No content available"
}
}
diff --git a/app/javascript/dashboard/i18n/locale/tr/contact.json b/app/javascript/dashboard/i18n/locale/tr/contact.json
index 25ff26d7323..cc6055f3b11 100644
--- a/app/javascript/dashboard/i18n/locale/tr/contact.json
+++ b/app/javascript/dashboard/i18n/locale/tr/contact.json
@@ -28,11 +28,17 @@
"INACTIVE_LABELS": "Hesapta bulunan etiketler",
"REMOVE": "Etiketi kaldırmak için X simgesine tıklayın",
"ADD": "Etiketi eklemek için + simgesine tıklayın",
+ "ADD_BUTTON": "Add Labels",
"UPDATE_BUTTON": "Etiketleri güncelle",
"UPDATE_ERROR": "Etiketler güncellenemedi, tekrar deneyin."
},
"NO_LABELS_TO_ADD": "Hesapta tanımlanmış başka etiket yok.",
- "NO_AVAILABLE_LABELS": "Bu görüşmeye eklenen etiket yok."
+ "NO_AVAILABLE_LABELS": "Bu görüşmeye eklenen etiket yok.",
+ "LABEL_SELECT": {
+ "TITLE": "Add Labels",
+ "PLACEHOLDER": "Search labels",
+ "NO_RESULT": "No labels found"
+ }
},
"MUTE_CONTACT": "Konuşmayı Sessize Al",
"UNMUTE_CONTACT": "Konuşmanın Sesini Aç",
@@ -151,5 +157,18 @@
},
"VIEW_DETAILS": "Detayları göster"
}
+ },
+ "NOTES": {
+ "HEADER": {
+ "TITLE": "Notes"
+ },
+ "ADD": {
+ "BUTTON": "Add",
+ "PLACEHOLDER": "Add a note",
+ "TITLE": "Shift + Enter to create a note"
+ },
+ "FOOTER": {
+ "BUTTON": "View all notes"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/tr/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/tr/inboxMgmt.json
index d685b608a8b..78422565c96 100644
--- a/app/javascript/dashboard/i18n/locale/tr/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/tr/inboxMgmt.json
@@ -227,6 +227,7 @@
"SETTINGS": "Ayarlar",
"COLLABORATORS": "Ortak çalışanlar",
"CONFIGURATION": "Yapılandırma",
+ "CAMPAIGN": "Campaigns",
"PRE_CHAT_FORM": "Pre Chat Form",
"BUSINESS_HOURS": "Business Hours"
},
diff --git a/app/javascript/dashboard/i18n/locale/tr/index.js b/app/javascript/dashboard/i18n/locale/tr/index.js
index 5dfc44e4b47..cf1dda7fe57 100644
--- a/app/javascript/dashboard/i18n/locale/tr/index.js
+++ b/app/javascript/dashboard/i18n/locale/tr/index.js
@@ -1,33 +1,37 @@
import { default as _agentMgmt } from './agentMgmt.json';
-import { default as _labelsMgmt } from './labelsMgmt.json';
+import { default as _campaign } from './campaign.json';
import { default as _cannedMgmt } from './cannedMgmt.json';
import { default as _chatlist } from './chatlist.json';
import { default as _contact } from './contact.json';
import { default as _conversation } from './conversation.json';
+import { default as _generalSettings } from './generalSettings.json';
import { default as _inboxMgmt } from './inboxMgmt.json';
+import { default as _integrations } from './integrations.json';
+import { default as _labelsMgmt } from './labelsMgmt.json';
import { default as _login } from './login.json';
import { default as _report } from './report.json';
import { default as _resetPassword } from './resetPassword.json';
import { default as _setNewPassword } from './setNewPassword.json';
import { default as _settings } from './settings.json';
import { default as _signup } from './signup.json';
-import { default as _integrations } from './integrations.json';
-import { default as _generalSettings } from './generalSettings.json';
+import { default as _teamsSettings } from './teamsSettings.json';
export default {
..._agentMgmt,
+ ..._campaign,
..._cannedMgmt,
..._chatlist,
..._contact,
..._conversation,
+ ..._generalSettings,
..._inboxMgmt,
+ ..._integrations,
+ ..._labelsMgmt,
..._login,
..._report,
- ..._labelsMgmt,
..._resetPassword,
..._setNewPassword,
..._settings,
..._signup,
- ..._integrations,
- ..._generalSettings,
+ ..._teamsSettings,
};
diff --git a/app/javascript/dashboard/i18n/locale/tr/report.json b/app/javascript/dashboard/i18n/locale/tr/report.json
index 4fdde60fe9e..01392b0dbc0 100644
--- a/app/javascript/dashboard/i18n/locale/tr/report.json
+++ b/app/javascript/dashboard/i18n/locale/tr/report.json
@@ -38,6 +38,18 @@
{
"id": 1,
"name": "Son 30 gün"
+ },
+ {
+ "id": 2,
+ "name": "Last 3 months"
+ },
+ {
+ "id": 3,
+ "name": "Last 6 months"
+ },
+ {
+ "id": 4,
+ "name": "Last year"
}
]
}
diff --git a/app/javascript/dashboard/i18n/locale/uk/campaign.json b/app/javascript/dashboard/i18n/locale/uk/campaign.json
new file mode 100644
index 00000000000..b934debaa28
--- /dev/null
+++ b/app/javascript/dashboard/i18n/locale/uk/campaign.json
@@ -0,0 +1,79 @@
+{
+ "CAMPAIGN": {
+ "HEADER": "Campaigns",
+ "SIDEBAR_TXT": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations. Click on Add Campaign to create a new campaign. You can also edit or delete an existing campaign by clicking on the Edit or Delete button.",
+ "HEADER_BTN_TXT": "Create a campaign",
+ "ADD": {
+ "TITLE": "Create a campaign",
+ "DESC": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations.",
+ "CANCEL_BUTTON_TEXT": "Скасувати",
+ "CREATE_BUTTON_TEXT": "Create",
+ "FORM": {
+ "TITLE": {
+ "LABEL": "Title",
+ "PLACEHOLDER": "Please enter the title of campaign",
+ "ERROR": "Title is required"
+ },
+ "MESSAGE": {
+ "LABEL": "Message",
+ "PLACEHOLDER": "Please enter the message of campaign",
+ "ERROR": "Message is required"
+ },
+ "SENT_BY": {
+ "LABEL": "Sent by",
+ "PLACEHOLDER": "Please select the the content of campaign",
+ "ERROR": "Sender is required"
+ },
+ "END_POINT": {
+ "LABEL": "URL",
+ "PLACEHOLDER": "Please enter the URL",
+ "ERROR": "Будь ласка, введіть правильний URL"
+ },
+ "TIME_ON_PAGE": {
+ "LABEL": "Time on page(Seconds)",
+ "PLACEHOLDER": "Please enter the time",
+ "ERROR": "Time on page is required"
+ },
+ "ENABLED": "Enable campaign",
+ "SUBMIT": "Add Campaign"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Campaign created successfully",
+ "ERROR_MESSAGE": "There was an error. Please try again."
+ }
+ },
+ "EDIT": {
+ "TITLE": "Edit campaign",
+ "UPDATE_BUTTON_TEXT": "Оновити",
+ "API": {
+ "SUCCESS_MESSAGE": "Campaign updated successfully",
+ "ERROR_MESSAGE": "There was an error, please try again"
+ }
+ },
+ "LIST": {
+ "LOADING_MESSAGE": "Loading campaigns...",
+ "404": "There are no campaigns created for this inbox.",
+ "TABLE_HEADER": {
+ "TITLE": "Title",
+ "MESSAGE": "Message",
+ "STATUS": "Статус",
+ "SENDER": "Sender",
+ "URL": "URL",
+ "TIME_ON_PAGE": "Time(Seconds)",
+ "CREATED_AT": "Created at"
+ },
+ "BUTTONS": {
+ "ADD": "Add",
+ "EDIT": "Редагувати",
+ "DELETE": "Видалити"
+ },
+ "STATUS": {
+ "ENABLED": "Увімкнено",
+ "DISABLED": "Вимкнено"
+ },
+ "SENDER": {
+ "BOT": "Bot"
+ }
+ }
+ }
+}
diff --git a/app/javascript/dashboard/i18n/locale/uk/chatlist.json b/app/javascript/dashboard/i18n/locale/uk/chatlist.json
index c5abfba0c5e..b008fa6cee5 100644
--- a/app/javascript/dashboard/i18n/locale/uk/chatlist.json
+++ b/app/javascript/dashboard/i18n/locale/uk/chatlist.json
@@ -80,6 +80,7 @@
"RECEIVED_VIA_EMAIL": "Received via email",
"VIEW_TWEET_IN_TWITTER": "View tweet in Twitter",
"REPLY_TO_TWEET": "Reply to this tweet",
- "NO_MESSAGES": "No Messages"
+ "NO_MESSAGES": "No Messages",
+ "NO_CONTENT": "No content available"
}
}
diff --git a/app/javascript/dashboard/i18n/locale/uk/contact.json b/app/javascript/dashboard/i18n/locale/uk/contact.json
index 7a5217b7003..4afbf67ffd0 100644
--- a/app/javascript/dashboard/i18n/locale/uk/contact.json
+++ b/app/javascript/dashboard/i18n/locale/uk/contact.json
@@ -28,11 +28,17 @@
"INACTIVE_LABELS": "Labels available in the account",
"REMOVE": "Click on X icon to remove the label",
"ADD": "Click on + icon to add the label",
+ "ADD_BUTTON": "Add Labels",
"UPDATE_BUTTON": "Update labels",
"UPDATE_ERROR": "Не вдалося оновити мітки, спробуйте ще раз."
},
"NO_LABELS_TO_ADD": "There are no more labels defined in the account.",
- "NO_AVAILABLE_LABELS": "There are no labels added to this conversation."
+ "NO_AVAILABLE_LABELS": "There are no labels added to this conversation.",
+ "LABEL_SELECT": {
+ "TITLE": "Add Labels",
+ "PLACEHOLDER": "Search labels",
+ "NO_RESULT": "No labels found"
+ }
},
"MUTE_CONTACT": "Mute Conversation",
"UNMUTE_CONTACT": "Unmute Conversation",
@@ -151,5 +157,18 @@
},
"VIEW_DETAILS": "View details"
}
+ },
+ "NOTES": {
+ "HEADER": {
+ "TITLE": "Notes"
+ },
+ "ADD": {
+ "BUTTON": "Add",
+ "PLACEHOLDER": "Add a note",
+ "TITLE": "Shift + Enter to create a note"
+ },
+ "FOOTER": {
+ "BUTTON": "View all notes"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/uk/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/uk/inboxMgmt.json
index 33b7bb73588..05dfe7da149 100644
--- a/app/javascript/dashboard/i18n/locale/uk/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/uk/inboxMgmt.json
@@ -227,6 +227,7 @@
"SETTINGS": "Налаштування",
"COLLABORATORS": "Collaborators",
"CONFIGURATION": "Configuration",
+ "CAMPAIGN": "Campaigns",
"PRE_CHAT_FORM": "Pre Chat Form",
"BUSINESS_HOURS": "Business Hours"
},
diff --git a/app/javascript/dashboard/i18n/locale/uk/index.js b/app/javascript/dashboard/i18n/locale/uk/index.js
index 5dfc44e4b47..cf1dda7fe57 100644
--- a/app/javascript/dashboard/i18n/locale/uk/index.js
+++ b/app/javascript/dashboard/i18n/locale/uk/index.js
@@ -1,33 +1,37 @@
import { default as _agentMgmt } from './agentMgmt.json';
-import { default as _labelsMgmt } from './labelsMgmt.json';
+import { default as _campaign } from './campaign.json';
import { default as _cannedMgmt } from './cannedMgmt.json';
import { default as _chatlist } from './chatlist.json';
import { default as _contact } from './contact.json';
import { default as _conversation } from './conversation.json';
+import { default as _generalSettings } from './generalSettings.json';
import { default as _inboxMgmt } from './inboxMgmt.json';
+import { default as _integrations } from './integrations.json';
+import { default as _labelsMgmt } from './labelsMgmt.json';
import { default as _login } from './login.json';
import { default as _report } from './report.json';
import { default as _resetPassword } from './resetPassword.json';
import { default as _setNewPassword } from './setNewPassword.json';
import { default as _settings } from './settings.json';
import { default as _signup } from './signup.json';
-import { default as _integrations } from './integrations.json';
-import { default as _generalSettings } from './generalSettings.json';
+import { default as _teamsSettings } from './teamsSettings.json';
export default {
..._agentMgmt,
+ ..._campaign,
..._cannedMgmt,
..._chatlist,
..._contact,
..._conversation,
+ ..._generalSettings,
..._inboxMgmt,
+ ..._integrations,
+ ..._labelsMgmt,
..._login,
..._report,
- ..._labelsMgmt,
..._resetPassword,
..._setNewPassword,
..._settings,
..._signup,
- ..._integrations,
- ..._generalSettings,
+ ..._teamsSettings,
};
diff --git a/app/javascript/dashboard/i18n/locale/uk/report.json b/app/javascript/dashboard/i18n/locale/uk/report.json
index fc1a408f77f..5ff21f034fd 100644
--- a/app/javascript/dashboard/i18n/locale/uk/report.json
+++ b/app/javascript/dashboard/i18n/locale/uk/report.json
@@ -38,6 +38,18 @@
{
"id": 1,
"name": "Останні 30 днів"
+ },
+ {
+ "id": 2,
+ "name": "Last 3 months"
+ },
+ {
+ "id": 3,
+ "name": "Last 6 months"
+ },
+ {
+ "id": 4,
+ "name": "Last year"
}
]
}
diff --git a/app/javascript/dashboard/i18n/locale/vi/campaign.json b/app/javascript/dashboard/i18n/locale/vi/campaign.json
new file mode 100644
index 00000000000..93c6acba23a
--- /dev/null
+++ b/app/javascript/dashboard/i18n/locale/vi/campaign.json
@@ -0,0 +1,79 @@
+{
+ "CAMPAIGN": {
+ "HEADER": "Campaigns",
+ "SIDEBAR_TXT": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations. Click on Add Campaign to create a new campaign. You can also edit or delete an existing campaign by clicking on the Edit or Delete button.",
+ "HEADER_BTN_TXT": "Create a campaign",
+ "ADD": {
+ "TITLE": "Create a campaign",
+ "DESC": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations.",
+ "CANCEL_BUTTON_TEXT": "Huỷ",
+ "CREATE_BUTTON_TEXT": "Tạo",
+ "FORM": {
+ "TITLE": {
+ "LABEL": "Title",
+ "PLACEHOLDER": "Please enter the title of campaign",
+ "ERROR": "Title is required"
+ },
+ "MESSAGE": {
+ "LABEL": "Message",
+ "PLACEHOLDER": "Please enter the message of campaign",
+ "ERROR": "Message is required"
+ },
+ "SENT_BY": {
+ "LABEL": "Sent by",
+ "PLACEHOLDER": "Please select the the content of campaign",
+ "ERROR": "Sender is required"
+ },
+ "END_POINT": {
+ "LABEL": "URL",
+ "PLACEHOLDER": "Please enter the URL",
+ "ERROR": "Vui lòng nhập một URL hợp lệ"
+ },
+ "TIME_ON_PAGE": {
+ "LABEL": "Time on page(Seconds)",
+ "PLACEHOLDER": "Please enter the time",
+ "ERROR": "Time on page is required"
+ },
+ "ENABLED": "Enable campaign",
+ "SUBMIT": "Add Campaign"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Campaign created successfully",
+ "ERROR_MESSAGE": "There was an error. Please try again."
+ }
+ },
+ "EDIT": {
+ "TITLE": "Edit campaign",
+ "UPDATE_BUTTON_TEXT": "Cập nhật",
+ "API": {
+ "SUCCESS_MESSAGE": "Campaign updated successfully",
+ "ERROR_MESSAGE": "Đã có lỗi, vui lòng thử lại"
+ }
+ },
+ "LIST": {
+ "LOADING_MESSAGE": "Loading campaigns...",
+ "404": "There are no campaigns created for this inbox.",
+ "TABLE_HEADER": {
+ "TITLE": "Title",
+ "MESSAGE": "Message",
+ "STATUS": "Trạng thái",
+ "SENDER": "Sender",
+ "URL": "URL",
+ "TIME_ON_PAGE": "Time(Seconds)",
+ "CREATED_AT": "Created at"
+ },
+ "BUTTONS": {
+ "ADD": "Add",
+ "EDIT": "Chỉnh sửa",
+ "DELETE": "Xoá"
+ },
+ "STATUS": {
+ "ENABLED": "Bật",
+ "DISABLED": "Không bật"
+ },
+ "SENDER": {
+ "BOT": "Bot"
+ }
+ }
+ }
+}
diff --git a/app/javascript/dashboard/i18n/locale/vi/chatlist.json b/app/javascript/dashboard/i18n/locale/vi/chatlist.json
index 930bfb402a7..34a0779909a 100644
--- a/app/javascript/dashboard/i18n/locale/vi/chatlist.json
+++ b/app/javascript/dashboard/i18n/locale/vi/chatlist.json
@@ -80,6 +80,7 @@
"RECEIVED_VIA_EMAIL": "Nhận được từ email",
"VIEW_TWEET_IN_TWITTER": "Xem tweet trên Twitter",
"REPLY_TO_TWEET": "Trả lời cho tweet này",
- "NO_MESSAGES": "No Messages"
+ "NO_MESSAGES": "No Messages",
+ "NO_CONTENT": "No content available"
}
}
diff --git a/app/javascript/dashboard/i18n/locale/vi/contact.json b/app/javascript/dashboard/i18n/locale/vi/contact.json
index dfb67be01cc..a101e7b01a2 100644
--- a/app/javascript/dashboard/i18n/locale/vi/contact.json
+++ b/app/javascript/dashboard/i18n/locale/vi/contact.json
@@ -28,11 +28,17 @@
"INACTIVE_LABELS": "Các nhãn có sẵn trong tài khoản",
"REMOVE": "Click vào X icon xóa nhãn",
"ADD": "Click vào + icon thêm nhãn",
+ "ADD_BUTTON": "Add Labels",
"UPDATE_BUTTON": "Cập nhật nhãn",
"UPDATE_ERROR": "Không thể cập nhật nhãn, hãy thử lại."
},
"NO_LABELS_TO_ADD": "Không có thêm nhãn nào được xác định trong tài khoản.",
- "NO_AVAILABLE_LABELS": "Không có nhãn nào được thêm vào cuộc trò chuyện này."
+ "NO_AVAILABLE_LABELS": "Không có nhãn nào được thêm vào cuộc trò chuyện này.",
+ "LABEL_SELECT": {
+ "TITLE": "Add Labels",
+ "PLACEHOLDER": "Search labels",
+ "NO_RESULT": "No labels found"
+ }
},
"MUTE_CONTACT": "Tắt tiếng cuộc trò chuyện",
"UNMUTE_CONTACT": "Unmute Conversation",
@@ -151,5 +157,18 @@
},
"VIEW_DETAILS": "View details"
}
+ },
+ "NOTES": {
+ "HEADER": {
+ "TITLE": "Notes"
+ },
+ "ADD": {
+ "BUTTON": "Add",
+ "PLACEHOLDER": "Add a note",
+ "TITLE": "Shift + Enter to create a note"
+ },
+ "FOOTER": {
+ "BUTTON": "View all notes"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/vi/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/vi/inboxMgmt.json
index 057ec995df7..9e87d5f936e 100644
--- a/app/javascript/dashboard/i18n/locale/vi/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/vi/inboxMgmt.json
@@ -227,6 +227,7 @@
"SETTINGS": "Cài đặt",
"COLLABORATORS": "Cộng tác viên",
"CONFIGURATION": "Cấu hình",
+ "CAMPAIGN": "Campaigns",
"PRE_CHAT_FORM": "Pre Chat Form",
"BUSINESS_HOURS": "Business Hours"
},
diff --git a/app/javascript/dashboard/i18n/locale/vi/index.js b/app/javascript/dashboard/i18n/locale/vi/index.js
index 5dfc44e4b47..cf1dda7fe57 100644
--- a/app/javascript/dashboard/i18n/locale/vi/index.js
+++ b/app/javascript/dashboard/i18n/locale/vi/index.js
@@ -1,33 +1,37 @@
import { default as _agentMgmt } from './agentMgmt.json';
-import { default as _labelsMgmt } from './labelsMgmt.json';
+import { default as _campaign } from './campaign.json';
import { default as _cannedMgmt } from './cannedMgmt.json';
import { default as _chatlist } from './chatlist.json';
import { default as _contact } from './contact.json';
import { default as _conversation } from './conversation.json';
+import { default as _generalSettings } from './generalSettings.json';
import { default as _inboxMgmt } from './inboxMgmt.json';
+import { default as _integrations } from './integrations.json';
+import { default as _labelsMgmt } from './labelsMgmt.json';
import { default as _login } from './login.json';
import { default as _report } from './report.json';
import { default as _resetPassword } from './resetPassword.json';
import { default as _setNewPassword } from './setNewPassword.json';
import { default as _settings } from './settings.json';
import { default as _signup } from './signup.json';
-import { default as _integrations } from './integrations.json';
-import { default as _generalSettings } from './generalSettings.json';
+import { default as _teamsSettings } from './teamsSettings.json';
export default {
..._agentMgmt,
+ ..._campaign,
..._cannedMgmt,
..._chatlist,
..._contact,
..._conversation,
+ ..._generalSettings,
..._inboxMgmt,
+ ..._integrations,
+ ..._labelsMgmt,
..._login,
..._report,
- ..._labelsMgmt,
..._resetPassword,
..._setNewPassword,
..._settings,
..._signup,
- ..._integrations,
- ..._generalSettings,
+ ..._teamsSettings,
};
diff --git a/app/javascript/dashboard/i18n/locale/vi/report.json b/app/javascript/dashboard/i18n/locale/vi/report.json
index d881013cf49..e8b7924edad 100644
--- a/app/javascript/dashboard/i18n/locale/vi/report.json
+++ b/app/javascript/dashboard/i18n/locale/vi/report.json
@@ -38,6 +38,18 @@
{
"id": 1,
"name": "30 ngày cuối"
+ },
+ {
+ "id": 2,
+ "name": "Last 3 months"
+ },
+ {
+ "id": 3,
+ "name": "Last 6 months"
+ },
+ {
+ "id": 4,
+ "name": "Last year"
}
]
}
diff --git a/app/javascript/dashboard/i18n/locale/zh/index.js b/app/javascript/dashboard/i18n/locale/zh/index.js
index 5dfc44e4b47..cf1dda7fe57 100644
--- a/app/javascript/dashboard/i18n/locale/zh/index.js
+++ b/app/javascript/dashboard/i18n/locale/zh/index.js
@@ -1,33 +1,37 @@
import { default as _agentMgmt } from './agentMgmt.json';
-import { default as _labelsMgmt } from './labelsMgmt.json';
+import { default as _campaign } from './campaign.json';
import { default as _cannedMgmt } from './cannedMgmt.json';
import { default as _chatlist } from './chatlist.json';
import { default as _contact } from './contact.json';
import { default as _conversation } from './conversation.json';
+import { default as _generalSettings } from './generalSettings.json';
import { default as _inboxMgmt } from './inboxMgmt.json';
+import { default as _integrations } from './integrations.json';
+import { default as _labelsMgmt } from './labelsMgmt.json';
import { default as _login } from './login.json';
import { default as _report } from './report.json';
import { default as _resetPassword } from './resetPassword.json';
import { default as _setNewPassword } from './setNewPassword.json';
import { default as _settings } from './settings.json';
import { default as _signup } from './signup.json';
-import { default as _integrations } from './integrations.json';
-import { default as _generalSettings } from './generalSettings.json';
+import { default as _teamsSettings } from './teamsSettings.json';
export default {
..._agentMgmt,
+ ..._campaign,
..._cannedMgmt,
..._chatlist,
..._contact,
..._conversation,
+ ..._generalSettings,
..._inboxMgmt,
+ ..._integrations,
+ ..._labelsMgmt,
..._login,
..._report,
- ..._labelsMgmt,
..._resetPassword,
..._setNewPassword,
..._settings,
..._signup,
- ..._integrations,
- ..._generalSettings,
+ ..._teamsSettings,
};
diff --git a/app/javascript/dashboard/i18n/locale/zh_CN/campaign.json b/app/javascript/dashboard/i18n/locale/zh_CN/campaign.json
new file mode 100644
index 00000000000..4eeda5d6017
--- /dev/null
+++ b/app/javascript/dashboard/i18n/locale/zh_CN/campaign.json
@@ -0,0 +1,79 @@
+{
+ "CAMPAIGN": {
+ "HEADER": "Campaigns",
+ "SIDEBAR_TXT": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations. Click on Add Campaign to create a new campaign. You can also edit or delete an existing campaign by clicking on the Edit or Delete button.",
+ "HEADER_BTN_TXT": "Create a campaign",
+ "ADD": {
+ "TITLE": "Create a campaign",
+ "DESC": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations.",
+ "CANCEL_BUTTON_TEXT": "取消",
+ "CREATE_BUTTON_TEXT": "创建",
+ "FORM": {
+ "TITLE": {
+ "LABEL": "Title",
+ "PLACEHOLDER": "Please enter the title of campaign",
+ "ERROR": "Title is required"
+ },
+ "MESSAGE": {
+ "LABEL": "Message",
+ "PLACEHOLDER": "Please enter the message of campaign",
+ "ERROR": "Message is required"
+ },
+ "SENT_BY": {
+ "LABEL": "Sent by",
+ "PLACEHOLDER": "Please select the the content of campaign",
+ "ERROR": "Sender is required"
+ },
+ "END_POINT": {
+ "LABEL": "URL",
+ "PLACEHOLDER": "Please enter the URL",
+ "ERROR": "请输入一个有效的 URL"
+ },
+ "TIME_ON_PAGE": {
+ "LABEL": "Time on page(Seconds)",
+ "PLACEHOLDER": "Please enter the time",
+ "ERROR": "Time on page is required"
+ },
+ "ENABLED": "Enable campaign",
+ "SUBMIT": "Add Campaign"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Campaign created successfully",
+ "ERROR_MESSAGE": "There was an error. Please try again."
+ }
+ },
+ "EDIT": {
+ "TITLE": "Edit campaign",
+ "UPDATE_BUTTON_TEXT": "更新",
+ "API": {
+ "SUCCESS_MESSAGE": "Campaign updated successfully",
+ "ERROR_MESSAGE": "出现错误,请重试"
+ }
+ },
+ "LIST": {
+ "LOADING_MESSAGE": "Loading campaigns...",
+ "404": "There are no campaigns created for this inbox.",
+ "TABLE_HEADER": {
+ "TITLE": "Title",
+ "MESSAGE": "Message",
+ "STATUS": "状态",
+ "SENDER": "Sender",
+ "URL": "URL",
+ "TIME_ON_PAGE": "Time(Seconds)",
+ "CREATED_AT": "Created at"
+ },
+ "BUTTONS": {
+ "ADD": "Add",
+ "EDIT": "编辑",
+ "DELETE": "删除"
+ },
+ "STATUS": {
+ "ENABLED": "已启用",
+ "DISABLED": "已禁用"
+ },
+ "SENDER": {
+ "BOT": "机器人"
+ }
+ }
+ }
+}
diff --git a/app/javascript/dashboard/i18n/locale/zh_CN/chatlist.json b/app/javascript/dashboard/i18n/locale/zh_CN/chatlist.json
index 4b220d70e1d..438ad4f5876 100644
--- a/app/javascript/dashboard/i18n/locale/zh_CN/chatlist.json
+++ b/app/javascript/dashboard/i18n/locale/zh_CN/chatlist.json
@@ -80,6 +80,7 @@
"RECEIVED_VIA_EMAIL": "通过电子邮件接收",
"VIEW_TWEET_IN_TWITTER": "在 Twitter 中查看 tweet",
"REPLY_TO_TWEET": "回复此推文",
- "NO_MESSAGES": "No Messages"
+ "NO_MESSAGES": "没有信息",
+ "NO_CONTENT": "没有可用的内容"
}
}
diff --git a/app/javascript/dashboard/i18n/locale/zh_CN/contact.json b/app/javascript/dashboard/i18n/locale/zh_CN/contact.json
index d5803427a77..468689530e2 100644
--- a/app/javascript/dashboard/i18n/locale/zh_CN/contact.json
+++ b/app/javascript/dashboard/i18n/locale/zh_CN/contact.json
@@ -28,11 +28,17 @@
"INACTIVE_LABELS": "账户中可用的标签",
"REMOVE": "点击 X 图标删除标签",
"ADD": "点击 + 图标添加标签",
+ "ADD_BUTTON": "Add Labels",
"UPDATE_BUTTON": "更新标签",
"UPDATE_ERROR": "无法更新标签,请重试。"
},
"NO_LABELS_TO_ADD": "帐户中没有更多标签。",
- "NO_AVAILABLE_LABELS": "没有标签添加到此对话。"
+ "NO_AVAILABLE_LABELS": "没有标签添加到此对话。",
+ "LABEL_SELECT": {
+ "TITLE": "Add Labels",
+ "PLACEHOLDER": "Search labels",
+ "NO_RESULT": "No labels found"
+ }
},
"MUTE_CONTACT": "Mute Conversation",
"UNMUTE_CONTACT": "Unmute Conversation",
@@ -151,5 +157,18 @@
},
"VIEW_DETAILS": "View details"
}
+ },
+ "NOTES": {
+ "HEADER": {
+ "TITLE": "Notes"
+ },
+ "ADD": {
+ "BUTTON": "Add",
+ "PLACEHOLDER": "Add a note",
+ "TITLE": "Shift + Enter to create a note"
+ },
+ "FOOTER": {
+ "BUTTON": "View all notes"
+ }
}
}
diff --git a/app/javascript/dashboard/i18n/locale/zh_CN/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/zh_CN/inboxMgmt.json
index e5d653e35dd..b040d5bfd41 100644
--- a/app/javascript/dashboard/i18n/locale/zh_CN/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/zh_CN/inboxMgmt.json
@@ -227,6 +227,7 @@
"SETTINGS": "设置",
"COLLABORATORS": "Collaborators",
"CONFIGURATION": "Configuration",
+ "CAMPAIGN": "Campaigns",
"PRE_CHAT_FORM": "Pre Chat Form",
"BUSINESS_HOURS": "Business Hours"
},
diff --git a/app/javascript/dashboard/i18n/locale/zh_CN/index.js b/app/javascript/dashboard/i18n/locale/zh_CN/index.js
index 5dfc44e4b47..cf1dda7fe57 100644
--- a/app/javascript/dashboard/i18n/locale/zh_CN/index.js
+++ b/app/javascript/dashboard/i18n/locale/zh_CN/index.js
@@ -1,33 +1,37 @@
import { default as _agentMgmt } from './agentMgmt.json';
-import { default as _labelsMgmt } from './labelsMgmt.json';
+import { default as _campaign } from './campaign.json';
import { default as _cannedMgmt } from './cannedMgmt.json';
import { default as _chatlist } from './chatlist.json';
import { default as _contact } from './contact.json';
import { default as _conversation } from './conversation.json';
+import { default as _generalSettings } from './generalSettings.json';
import { default as _inboxMgmt } from './inboxMgmt.json';
+import { default as _integrations } from './integrations.json';
+import { default as _labelsMgmt } from './labelsMgmt.json';
import { default as _login } from './login.json';
import { default as _report } from './report.json';
import { default as _resetPassword } from './resetPassword.json';
import { default as _setNewPassword } from './setNewPassword.json';
import { default as _settings } from './settings.json';
import { default as _signup } from './signup.json';
-import { default as _integrations } from './integrations.json';
-import { default as _generalSettings } from './generalSettings.json';
+import { default as _teamsSettings } from './teamsSettings.json';
export default {
..._agentMgmt,
+ ..._campaign,
..._cannedMgmt,
..._chatlist,
..._contact,
..._conversation,
+ ..._generalSettings,
..._inboxMgmt,
+ ..._integrations,
+ ..._labelsMgmt,
..._login,
..._report,
- ..._labelsMgmt,
..._resetPassword,
..._setNewPassword,
..._settings,
..._signup,
- ..._integrations,
- ..._generalSettings,
+ ..._teamsSettings,
};
diff --git a/app/javascript/dashboard/i18n/locale/zh_CN/report.json b/app/javascript/dashboard/i18n/locale/zh_CN/report.json
index 1ce4e436269..0fd7d92c025 100644
--- a/app/javascript/dashboard/i18n/locale/zh_CN/report.json
+++ b/app/javascript/dashboard/i18n/locale/zh_CN/report.json
@@ -38,6 +38,18 @@
{
"id": 1,
"name": "最近30天"
+ },
+ {
+ "id": 2,
+ "name": "Last 3 months"
+ },
+ {
+ "id": 3,
+ "name": "Last 6 months"
+ },
+ {
+ "id": 4,
+ "name": "Last year"
}
]
}
diff --git a/app/javascript/dashboard/i18n/locale/zh_TW/agentMgmt.json b/app/javascript/dashboard/i18n/locale/zh_TW/agentMgmt.json
index 79e5a167187..90337cc9372 100644
--- a/app/javascript/dashboard/i18n/locale/zh_TW/agentMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/zh_TW/agentMgmt.json
@@ -1,18 +1,18 @@
{
"AGENT_MGMT": {
- "HEADER": "客服代理們",
- "HEADER_BTN_TXT": "建立客服代理",
- "LOADING": "正在獲取客服代理列表",
- "SIDEBAR_TXT": "
",
"LIST": {
- "404": "此帳戶中没有預設的回覆。",
- "TITLE": "管理預設回覆",
- "DESC": "預設的回覆是預定義的回覆模板,可以用來快速發送對工單的答覆。",
+ "404": "此帳戶中沒有可用的罐頭回覆。",
+ "TITLE": "管理罐頭回覆",
+ "DESC": "罐頭回覆是預定義的回覆模板,可以用來快速發送對工單的回覆。",
"TABLE_HEADER": [
- "短码",
+ "簡碼",
"内容",
"操作"
]
},
"ADD": {
- "TITLE": "建立預設回覆",
- "DESC": "預設的回覆是保存的回覆模板,可以用來快速發送回覆到對話中。",
+ "TITLE": "建立罐頭回覆",
+ "DESC": "罐頭回覆是保存的回覆模板,可以用來快速發送回覆到對話中。",
"CANCEL_BUTTON_TEXT": "取消操作",
"FORM": {
"SHORT_CODE": {
- "LABEL": "短码",
- "PLACEHOLDER": "請輸入短码",
- "ERROR": "必須輸入短代碼"
+ "LABEL": "簡碼",
+ "PLACEHOLDER": "請輸入簡碼",
+ "ERROR": "必須輸入簡碼"
},
"CONTENT": {
"LABEL": "内容",
@@ -33,18 +33,18 @@
"SUBMIT": "送出"
},
"API": {
- "SUCCESS_MESSAGE": "已成功建立預設回覆",
+ "SUCCESS_MESSAGE": "已成功新增罐頭回覆",
"ERROR_MESSAGE": "無法連接伺服器,請稍後再試"
}
},
"EDIT": {
- "TITLE": "編輯預設回覆",
+ "TITLE": "編輯罐頭回覆",
"CANCEL_BUTTON_TEXT": "取消操作",
"FORM": {
"SHORT_CODE": {
- "LABEL": "短码",
- "PLACEHOLDER": "請輸入短码",
- "ERROR": "必須輸入短代碼"
+ "LABEL": "簡碼",
+ "PLACEHOLDER": "請輸入簡碼",
+ "ERROR": "必須輸入簡碼"
},
"CONTENT": {
"LABEL": "内容",
@@ -55,19 +55,19 @@
},
"BUTTON_TEXT": "編輯",
"API": {
- "SUCCESS_MESSAGE": "預設回覆已成功更新",
+ "SUCCESS_MESSAGE": "罐頭回覆已成功更新",
"ERROR_MESSAGE": "無法連接伺服器,請稍後再試"
}
},
"DELETE": {
"BUTTON_TEXT": "刪除",
"API": {
- "SUCCESS_MESSAGE": "預設回覆已成功刪除",
+ "SUCCESS_MESSAGE": "罐頭回覆已成功刪除",
"ERROR_MESSAGE": "無法連接伺服器,請稍後再試"
},
"CONFIRM": {
"TITLE": "確認刪除",
- "MESSAGE": "您確定要刪除吗? ",
+ "MESSAGE": "您確定要刪除嗎? ",
"YES": "是,刪除 ",
"NO": "不,保留 "
}
diff --git a/app/javascript/dashboard/i18n/locale/zh_TW/chatlist.json b/app/javascript/dashboard/i18n/locale/zh_TW/chatlist.json
index 43d5eba7a3c..328e8500d1f 100644
--- a/app/javascript/dashboard/i18n/locale/zh_TW/chatlist.json
+++ b/app/javascript/dashboard/i18n/locale/zh_TW/chatlist.json
@@ -1,14 +1,14 @@
{
"CHAT_LIST": {
- "LOADING": "正在獲取對話",
- "LOAD_MORE_CONVERSATIONS": "加載更多對話",
- "EOF": "所有對話已加載 🎉",
+ "LOADING": "正在取得對話",
+ "LOAD_MORE_CONVERSATIONS": "載入更多對話",
+ "EOF": "所有對話已載入 🎉",
"LIST": {
- "404": "没有有效的對話在這個群组里面"
+ "404": "這個群組中無有效對話"
},
- "TAB_HEADING": "會話",
+ "TAB_HEADING": "對話",
"SEARCH": {
- "INPUT": "搜索人、聊天室、保存回覆"
+ "INPUT": "搜尋人、聊天室、保存回覆"
},
"STATUS_TABS": [
{
@@ -27,7 +27,7 @@
"COUNT_KEY": "mineCount"
},
{
- "NAME": "未分配的",
+ "NAME": "未指派的",
"KEY": "unassigned",
"COUNT_KEY": "unAssignedCount"
},
@@ -47,22 +47,22 @@
"VALUE": "resolved"
},
{
- "TEXT": "机器人",
- "VALUE": "机器人"
+ "TEXT": "機器人",
+ "VALUE": "機器人"
}
],
"ATTACHMENTS": {
"image": {
"ICON": "ion-image",
- "CONTENT": "图片消息"
+ "CONTENT": "圖片訊息"
},
"audio": {
"ICON": "ion-volume-high",
- "CONTENT": "音频消息"
+ "CONTENT": "聲音訊息"
},
"video": {
"ICON": "ion-ios-videocam",
- "CONTENT": "视频消息"
+ "CONTENT": "影片訊息"
},
"file": {
"ICON": "ion-document",
@@ -77,9 +77,10 @@
"CONTENT": "分享了一個網址"
}
},
- "RECEIVED_VIA_EMAIL": "Received via email",
+ "RECEIVED_VIA_EMAIL": "使用電子郵件接收",
"VIEW_TWEET_IN_TWITTER": "View tweet in Twitter",
"REPLY_TO_TWEET": "Reply to this tweet",
- "NO_MESSAGES": "No Messages"
+ "NO_MESSAGES": "沒有訊息",
+ "NO_CONTENT": "沒有可用內容"
}
}
diff --git a/app/javascript/dashboard/i18n/locale/zh_TW/contact.json b/app/javascript/dashboard/i18n/locale/zh_TW/contact.json
index 89edf5fcd90..b1b4e6e433e 100644
--- a/app/javascript/dashboard/i18n/locale/zh_TW/contact.json
+++ b/app/javascript/dashboard/i18n/locale/zh_TW/contact.json
@@ -1,43 +1,49 @@
{
"CONTACT_PANEL": {
- "NOT_AVAILABLE": "Not Available",
+ "NOT_AVAILABLE": "無法使用",
"EMAIL_ADDRESS": "電子信箱地址",
"PHONE_NUMBER": "電話號碼",
- "COPY_SUCCESSFUL": "Copied to clipboard successfully",
- "COMPANY": "Company",
+ "COPY_SUCCESSFUL": "成功複製到剪貼簿",
+ "COMPANY": "公司",
"LOCATION": "位置",
- "CONVERSATION_TITLE": "對話詳情",
+ "CONVERSATION_TITLE": "對話詳細資訊",
"BROWSER": "瀏覽器",
- "OS": "操作系统",
- "INITIATED_FROM": "啟動自:",
+ "OS": "作業系统",
+ "INITIATED_FROM": "發起自:",
"INITIATED_AT": "發起於",
- "IP_ADDRESS": "IP Address",
- "NEW_MESSAGE": "New message",
+ "IP_ADDRESS": "IP 位置",
+ "NEW_MESSAGE": "新訊息",
"CONVERSATIONS": {
- "NO_RECORDS_FOUND": "此聯繫人没有關聯到以前的會話。",
+ "NO_RECORDS_FOUND": "此聯絡人没有關聯到以前的對話。",
"TITLE": "上一次對話"
},
"CUSTOM_ATTRIBUTES": {
- "TITLE": "Custom Attributes"
+ "TITLE": "自訂屬性"
},
"LABELS": {
"TITLE": "對話標記",
"MODAL": {
"TITLE": "標記為",
- "ACTIVE_LABELS": "建立到對話的標籤",
+ "ACTIVE_LABELS": "將標籤新增至對話",
"INACTIVE_LABELS": "帳戶中可用的標籤",
- "REMOVE": "點擊 X 圖示刪除標籤",
- "ADD": "點擊 + 圖示建立標籤",
+ "REMOVE": "點擊 X 圖示以刪除標籤",
+ "ADD": "點擊 + 圖示以新增標籤",
+ "ADD_BUTTON": "新增標籤",
"UPDATE_BUTTON": "更新標籤",
"UPDATE_ERROR": "無法更新標籤,請重試。"
},
- "NO_LABELS_TO_ADD": "帳戶中没有更多標籤。",
- "NO_AVAILABLE_LABELS": "没有標籤建立到此對話。"
+ "NO_LABELS_TO_ADD": "帳戶中沒有更多標籤。",
+ "NO_AVAILABLE_LABELS": "此對話沒有被新增任何標籤。",
+ "LABEL_SELECT": {
+ "TITLE": "新增標籤",
+ "PLACEHOLDER": "搜尋標籤",
+ "NO_RESULT": "查無標籤"
+ }
},
- "MUTE_CONTACT": "Mute Conversation",
- "UNMUTE_CONTACT": "Unmute Conversation",
- "MUTED_SUCCESS": "This conversation is muted for 6 hours",
- "UNMUTED_SUCCESS": "This conversation is unmuted",
+ "MUTE_CONTACT": "將對話靜音",
+ "UNMUTE_CONTACT": "將對話解除靜音",
+ "MUTED_SUCCESS": "將對話靜音 6 小時",
+ "UNMUTED_SUCCESS": "對話已解除靜音",
"SEND_TRANSCRIPT": "Send Transcript",
"EDIT_LABEL": "編輯"
},
@@ -47,14 +53,14 @@
"DESC": "編輯聯絡人資訊"
},
"CREATE_CONTACT": {
- "BUTTON_LABEL": "New Contact",
- "TITLE": "Create new contact",
- "DESC": "Add basic information details about the contact."
+ "BUTTON_LABEL": "新聯絡人",
+ "TITLE": "新增聯絡人",
+ "DESC": "為聯絡人增加基本資訊"
},
"CONTACT_FORM": {
"FORM": {
"SUBMIT": "送出",
- "CANCEL": "取消操作",
+ "CANCEL": "取消",
"AVATAR": {
"LABEL": "連絡人頭像"
},
@@ -103,14 +109,14 @@
}
}
},
- "SUCCESS_MESSAGE": "Contact saved successfully",
+ "SUCCESS_MESSAGE": "聯絡人儲存成功",
"CONTACT_ALREADY_EXIST": "這個電子信箱已經被其他聯絡人使用了。",
"ERROR_MESSAGE": "出現錯誤,請重試"
},
"NEW_CONVERSATION": {
- "BUTTON_LABEL": "Start conversation",
- "TITLE": "New conversation",
- "DESC": "Start a new conversation by sending a new message.",
+ "BUTTON_LABEL": "開始對話",
+ "TITLE": "新的對話",
+ "DESC": "傳送一則新訊息以開始新的對話",
"NO_INBOX": "Couldn't find an inbox to initiate a new conversation with this contact.",
"FORM": {
"TO": {
@@ -121,35 +127,48 @@
"ERROR": "Select an inbox"
},
"MESSAGE": {
- "LABEL": "Message",
- "PLACEHOLDER": "Write your message here",
- "ERROR": "Message can't be empty"
+ "LABEL": "訊息",
+ "PLACEHOLDER": "在此填寫你的訊息",
+ "ERROR": "訊息不得為空"
},
- "SUBMIT": "Send message",
- "CANCEL": "取消操作",
- "SUCCESS_MESSAGE": "Message sent!",
- "ERROR_MESSAGE": "Couldn't send! try again"
+ "SUBMIT": "傳送訊息",
+ "CANCEL": "取消",
+ "SUCCESS_MESSAGE": "訊息已傳送",
+ "ERROR_MESSAGE": "無法傳送!請重新嘗試。"
}
},
"CONTACTS_PAGE": {
- "HEADER": "Contacts",
- "SEARCH_BUTTON": "Search",
- "SEARCH_INPUT_PLACEHOLDER": "Search for contacts",
+ "HEADER": "聯絡人",
+ "SEARCH_BUTTON": "搜尋",
+ "SEARCH_INPUT_PLACEHOLDER": "搜尋聯絡人",
"LIST": {
"LOADING_MESSAGE": "Loading contacts...",
"404": "No contacts matches your search 🔍",
"TABLE_HEADER": {
- "NAME": "姓名:",
+ "NAME": "姓名",
"PHONE_NUMBER": "聯絡人電話",
- "CONVERSATIONS": "會話",
+ "CONVERSATIONS": "對話",
"LAST_ACTIVITY": "Last Activity",
- "COUNTRY": "Country",
- "CITY": "City",
+ "COUNTRY": "國家",
+ "CITY": "城市",
"SOCIAL_PROFILES": "Social Profiles",
- "COMPANY": "Company",
+ "COMPANY": "公司",
"EMAIL_ADDRESS": "電子信箱地址"
},
- "VIEW_DETAILS": "View details"
+ "VIEW_DETAILS": "查看詳細資訊"
+ }
+ },
+ "NOTES": {
+ "HEADER": {
+ "TITLE": "筆記"
+ },
+ "ADD": {
+ "BUTTON": "建立",
+ "PLACEHOLDER": "建立筆記",
+ "TITLE": "Shift + Enter to create a note"
+ },
+ "FOOTER": {
+ "BUTTON": "查看所有筆記"
}
}
}
diff --git a/app/javascript/dashboard/i18n/locale/zh_TW/conversation.json b/app/javascript/dashboard/i18n/locale/zh_TW/conversation.json
index 85a6c298b7c..3f0f294bce0 100644
--- a/app/javascript/dashboard/i18n/locale/zh_TW/conversation.json
+++ b/app/javascript/dashboard/i18n/locale/zh_TW/conversation.json
@@ -5,16 +5,16 @@
"NO_MESSAGE_2": " 向您的頁面發送一條消息!",
"NO_INBOX_1": "看來你還没有建立任何收件匣。",
"NO_INBOX_2": " 開始吧",
- "NO_INBOX_AGENT": "看起來您還没有分配到收件匣。請聯繫您的管理員",
+ "NO_INBOX_AGENT": "看起來你還沒有分配到收件匣。請聯絡你的管理員",
"SEARCH_MESSAGES": "Search for messages in conversations",
"SEARCH": {
- "TITLE": "Search messages",
+ "TITLE": "搜尋訊息",
"LOADING_MESSAGE": "Crunching data...",
- "PLACEHOLDER": "Type any text to search messages",
- "NO_MATCHING_RESULTS": "No results found."
+ "PLACEHOLDER": "輸入任何文字以搜尋訊息",
+ "NO_MATCHING_RESULTS": "查無結果。"
},
- "UNREAD_MESSAGES": "Unread Messages",
- "UNREAD_MESSAGE": "Unread Message",
+ "UNREAD_MESSAGES": "未讀訊息",
+ "UNREAD_MESSAGE": "未讀訊息",
"CLICK_HERE": "點擊這裡",
"LOADING_INBOXES": "正在加載收件匣",
"LOADING_CONVERSATIONS": "加載更多對話",
@@ -23,11 +23,11 @@
"TWILIO_WHATSAPP_CAN_REPLY": "You can only reply to this conversation using a template message due to",
"TWILIO_WHATSAPP_24_HOURS_WINDOW": "24 小時消息視窗限制",
"LAST_INCOMING_TWEET": "You are replying to the last incoming tweet",
- "REPLYING_TO": "You are replying to:",
- "REMOVE_SELECTION": "Remove Selection",
+ "REPLYING_TO": "你正在回覆到:",
+ "REMOVE_SELECTION": "移除選擇項目",
"DOWNLOAD": "下載",
"UPLOADING_ATTACHMENTS": "Uploading attachments...",
- "NO_RESPONSE": "No response",
+ "NO_RESPONSE": "無回應",
"HEADER": {
"RESOLVE_ACTION": "已解決",
"REOPEN_ACTION": "重新打開",
@@ -37,7 +37,7 @@
"DETAILS": "詳情"
},
"RESOLVE_DROPDOWN": {
- "OPEN_BOT": "Open with bot"
+ "OPEN_BOT": "使用 bot 開啟"
},
"FOOTER": {
"MSG_INPUT": "輸入“/”開始選擇快捷回覆",
@@ -50,20 +50,20 @@
"CREATE": "建立筆記",
"TWEET": "推特",
"TIP_FORMAT_ICON": "Show rich text editor",
- "TIP_EMOJI_ICON": "Show emoji selector",
- "TIP_ATTACH_ICON": "Attach files",
- "ENTER_TO_SEND": "Enter to send"
+ "TIP_EMOJI_ICON": "顯示 emoji 選擇器",
+ "TIP_ATTACH_ICON": "附件",
+ "ENTER_TO_SEND": "按下 Enter 傳送"
},
"VISIBLE_TO_AGENTS": "私人筆記:僅對您和您的團隊可以看見",
"CHANGE_STATUS": "對話狀態已更改",
- "CHANGE_AGENT": "對話分配人已更改",
+ "CHANGE_AGENT": "對話指派人已更改",
"CHANGE_TEAM": "Conversation team changed",
"FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_FILE_UPLOAD_SIZE} attachment limit",
- "SENT_BY": "Sent by:",
+ "SENT_BY": "寄送者:",
"ASSIGNMENT": {
- "SELECT_AGENT": "Select Agent",
+ "SELECT_AGENT": "選擇客服",
"REMOVE": "刪除",
- "ASSIGN": "Assign"
+ "ASSIGN": "指派"
}
},
"EMAIL_TRANSCRIPT": {
@@ -84,7 +84,7 @@
}
},
"ONBOARDING": {
- "TITLE": "Hey 👋, Welcome to %{installationName}!",
+ "TITLE": "Hey 👋, 歡迎來到 %{installationName}!",
"DESCRIPTION": "Thanks for signing up. We want you to get the most out of %{installationName}. Here are a few things you can do in %{installationName} to make the experience delightful.",
"READ_LATEST_UPDATES": "Read our latest updates",
"ALL_CONVERSATION": {
@@ -92,27 +92,27 @@
"DESCRIPTION": "View all the conversations from your customers in one single dashboard. You can filter the conversations by the incoming channel, label and status."
},
"TEAM_MEMBERS": {
- "TITLE": "Invite your team members",
+ "TITLE": "邀請團隊成員",
"DESCRIPTION": "Since you are getting ready to talk to your customer, bring in your teammates to assist you. You can invite your teammates by adding their email address to the agent list.",
- "NEW_LINK": "Click here to invite a team member"
+ "NEW_LINK": "按此邀請一個新成員"
},
"INBOXES": {
"TITLE": "Connect Inboxes",
"DESCRIPTION": "Connect various channels through which your customers would be talking to you. It can be a website live-chat, your Facebook or Twitter page or even your WhatsApp number.",
- "NEW_LINK": "Click here to create an inbox"
+ "NEW_LINK": "按此建立一個收件匣"
},
"LABELS": {
"TITLE": "Organize conversations with labels",
"DESCRIPTION": "Labels provide an easier way to categorize your conversation. Create some labels like #support-enquiry, #billing-question etc., so that you can use them in a conversation later.",
- "NEW_LINK": "Click here to create tags"
+ "NEW_LINK": "按此建立標籤"
}
},
"CONVERSATION_SIDEBAR": {
- "DETAILS_TITLE": "Conversations Details",
- "ASSIGNEE_LABEL": "Assigned Agent",
- "TEAM_LABEL": "Assigned Team",
+ "DETAILS_TITLE": "對話詳細資訊",
+ "ASSIGNEE_LABEL": "指派客服",
+ "TEAM_LABEL": "指派團隊",
"SELECT": {
- "PLACEHOLDER": "None"
+ "PLACEHOLDER": "無"
}
}
}
diff --git a/app/javascript/dashboard/i18n/locale/zh_TW/generalSettings.json b/app/javascript/dashboard/i18n/locale/zh_TW/generalSettings.json
index 1b874112c67..8a57603b889 100644
--- a/app/javascript/dashboard/i18n/locale/zh_TW/generalSettings.json
+++ b/app/javascript/dashboard/i18n/locale/zh_TW/generalSettings.json
@@ -47,28 +47,28 @@
},
"FORMS": {
"MULTISELECT": {
- "ENTER_TO_SELECT": "Press enter to select",
- "ENTER_TO_REMOVE": "Press enter to remove",
+ "ENTER_TO_SELECT": "按下 enter 以選擇",
+ "ENTER_TO_REMOVE": "按下 enter 以移除",
"SELECT_ONE": "Select one"
}
},
"NOTIFICATIONS_PAGE": {
- "HEADER": "Notifications",
- "MARK_ALL_DONE": "Mark All Done",
+ "HEADER": "通知",
+ "MARK_ALL_DONE": "全部標記完成",
"LIST": {
- "LOADING_MESSAGE": "Loading notifications...",
- "404": "No Notifications",
+ "LOADING_MESSAGE": "載入更多通知...",
+ "404": "沒有通知",
"TABLE_HEADER": [
- "姓名:",
+ "姓名",
"聯絡人電話",
- "會話",
+ "對話",
"Last Contacted"
]
},
"TYPE_LABEL": {
- "conversation_creation": "New conversation",
+ "conversation_creation": "新對話",
"conversation_assignment": "Conversation Assigned",
- "assigned_conversation_new_message": "New Message",
+ "assigned_conversation_new_message": "新訊息",
"conversation_mention": "Mention"
}
}
diff --git a/app/javascript/dashboard/i18n/locale/zh_TW/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/zh_TW/inboxMgmt.json
index 34caf18cee7..d8870e9e75a 100644
--- a/app/javascript/dashboard/i18n/locale/zh_TW/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/zh_TW/inboxMgmt.json
@@ -17,7 +17,7 @@
"body": "驗證您的帳戶並建立建立收件匣。"
},
{
- "title": "建立客服代理",
+ "title": "建立客服",
"route": "settings_inboxes_add_agents",
"body": "將客服增加到建立的收件匣。"
},
@@ -75,10 +75,10 @@
"DISABLED": "已停用"
},
"REPLY_TIME": {
- "TITLE": "Set Reply time",
- "IN_A_FEW_MINUTES": "In a few minutes",
- "IN_A_FEW_HOURS": "In a few hours",
- "IN_A_DAY": "In a day",
+ "TITLE": "設定回覆時間",
+ "IN_A_FEW_MINUTES": "幾分鐘內",
+ "IN_A_FEW_HOURS": "幾小時內",
+ "IN_A_DAY": "一天內",
"HELP_TEXT": "This reply time will be displayed on the live chat widget"
},
"WIDGET_COLOR": {
@@ -165,8 +165,8 @@
"DESC": "目前我們支持網站線上聊天小元件、Facebook 頁面和 Twitter 配置文件作為平台。 我們在工作中擁有更多平台,如 Whatsapp、Email、Telegram 和 Line,這些平台將很快支援。"
},
"AGENTS": {
- "TITLE": "客服代理們",
- "DESC": "在這裡您可以建立代理來管理您新建立的收件匣。只有這些選定的代理才能訪問您的收件匣。 不屬於此收件匣的代理人在登入時將無法看到或回覆此收件匣中的消息。 PS: 作為管理員,如果您需要訪問所有收件匣, 您應該將自己建立到您建立的所有收件匣中。",
+ "TITLE": "客服",
+ "DESC": "在這裡您可以建立客服來管理您新建立的收件匣。只有這些選定的客服才能訪問您的收件匣。 不屬於此收件匣的客服在登入時將無法看到或回覆此收件匣中的消息。 PS: 作為管理員,如果您需要訪問所有收件匣, 您應該將自己建立到您建立的所有收件匣中。",
"VALIDATION_ERROR": "Add atleast one agent to your new Inbox",
"PICK_AGENTS": "Pick agents for the inbox"
},
@@ -187,14 +187,14 @@
"DESC": ""
},
"AGENTS": {
- "BUTTON_TEXT": "建立客服代理",
- "ADD_AGENTS": "正在向收件匣建立代理..."
+ "BUTTON_TEXT": "新增客服",
+ "ADD_AGENTS": "正在新增客服到你的收件匣..."
},
"FINISH": {
"TITLE": "您的收件匣已準備就緒!",
"MESSAGE": "您現在可以通過您的新頻道與您的客户聯繫。開心的支援客戶吧 ",
"BUTTON_TEXT": "带我到這裡",
- "MORE_SETTINGS": "More settings",
+ "MORE_SETTINGS": "更多設定",
"WEBSITE_SUCCESS": "您已成功完成建立網站頻道。複製下面顯示的代碼並將其黏貼在您的網站上。 下次客户使用即時聊天時,對話將自動出現在您的收件匣中。"
},
"REAUTH": "重新授權",
@@ -227,14 +227,15 @@
"SETTINGS": "設定",
"COLLABORATORS": "客服人員",
"CONFIGURATION": "組態",
+ "CAMPAIGN": "Campaigns",
"PRE_CHAT_FORM": "Pre Chat Form",
- "BUSINESS_HOURS": "Business Hours"
+ "BUSINESS_HOURS": "營業時間"
},
"SETTINGS": "設定",
"FEATURES": {
"LABEL": "Features",
- "DISPLAY_FILE_PICKER": "Display file picker on the widget",
- "DISPLAY_EMOJI_PICKER": "Display emoji picker on the widget"
+ "DISPLAY_FILE_PICKER": "在小工具上顯示檔案選擇器",
+ "DISPLAY_EMOJI_PICKER": "在小工具上顯示 emoji 選擇器"
},
"SETTINGS_POPUP": {
"MESSENGER_HEADING": "Messenger 脚本",
@@ -245,14 +246,14 @@
"AUTO_ASSIGNMENT": "啟用自動分配",
"INBOX_UPDATE_TITLE": "收件匣設定",
"INBOX_UPDATE_SUB_TEXT": "更新收件匣設定",
- "AUTO_ASSIGNMENT_SUB_TEXT": "啟用或停用建立到此收件匣的代理人自動分配新的會話。",
+ "AUTO_ASSIGNMENT_SUB_TEXT": "啟用或停用此收件匣客服的對話自動分配。",
"HMAC_VERIFICATION": "User Identity Validation",
"HMAC_DESCRIPTION": "Inorder validate the users identity, the SDK allows you to pass an `identity_hash` for each user. You can generate HMAC using 'sha256' with the key shown here."
},
"FACEBOOK_REAUTHORIZE": {
"TITLE": "重新授權",
"SUBTITLE": "Your Facebook connection has expired, please reconnect your Facebook page to continue services",
- "MESSAGE_SUCCESS": "Reconnection successful",
+ "MESSAGE_SUCCESS": "重新連接成功",
"MESSAGE_ERROR": "出現錯誤,請重試"
},
"PRE_CHAT_FORM": {
@@ -276,7 +277,7 @@
"TITLE": "Set your availability",
"SUBTITLE": "Set your availability on your livechat widget",
"WEEKLY_TITLE": "Set your weekly hours",
- "TIMEZONE_LABEL": "Select timezone",
+ "TIMEZONE_LABEL": "選擇時區",
"UPDATE": "Update business hours settings",
"TOGGLE_AVAILABILITY": "Enable business availability for this inbox",
"UNAVAILABLE_MESSAGE_LABEL": "Unavailable message for vistors",
@@ -284,7 +285,7 @@
"TOGGLE_HELP": "Enabling business availability will show the available hours on live chat widget even if all the agents are offline. Outside available hours vistors can be warned with a message and a pre-chat form.",
"DAY": {
"ENABLE": "Enable availability for this day",
- "UNAVAILABLE": "Unavailable",
+ "UNAVAILABLE": "無法使用",
"HOURS": "hours",
"VALIDATION_ERROR": "Starting time should be before closing time.",
"CHOOSE": "Choose"
diff --git a/app/javascript/dashboard/i18n/locale/zh_TW/index.js b/app/javascript/dashboard/i18n/locale/zh_TW/index.js
index 5dfc44e4b47..cf1dda7fe57 100644
--- a/app/javascript/dashboard/i18n/locale/zh_TW/index.js
+++ b/app/javascript/dashboard/i18n/locale/zh_TW/index.js
@@ -1,33 +1,37 @@
import { default as _agentMgmt } from './agentMgmt.json';
-import { default as _labelsMgmt } from './labelsMgmt.json';
+import { default as _campaign } from './campaign.json';
import { default as _cannedMgmt } from './cannedMgmt.json';
import { default as _chatlist } from './chatlist.json';
import { default as _contact } from './contact.json';
import { default as _conversation } from './conversation.json';
+import { default as _generalSettings } from './generalSettings.json';
import { default as _inboxMgmt } from './inboxMgmt.json';
+import { default as _integrations } from './integrations.json';
+import { default as _labelsMgmt } from './labelsMgmt.json';
import { default as _login } from './login.json';
import { default as _report } from './report.json';
import { default as _resetPassword } from './resetPassword.json';
import { default as _setNewPassword } from './setNewPassword.json';
import { default as _settings } from './settings.json';
import { default as _signup } from './signup.json';
-import { default as _integrations } from './integrations.json';
-import { default as _generalSettings } from './generalSettings.json';
+import { default as _teamsSettings } from './teamsSettings.json';
export default {
..._agentMgmt,
+ ..._campaign,
..._cannedMgmt,
..._chatlist,
..._contact,
..._conversation,
+ ..._generalSettings,
..._inboxMgmt,
+ ..._integrations,
+ ..._labelsMgmt,
..._login,
..._report,
- ..._labelsMgmt,
..._resetPassword,
..._setNewPassword,
..._settings,
..._signup,
- ..._integrations,
- ..._generalSettings,
+ ..._teamsSettings,
};
diff --git a/app/javascript/dashboard/i18n/locale/zh_TW/report.json b/app/javascript/dashboard/i18n/locale/zh_TW/report.json
index 1cb98291f5b..b808b432e14 100644
--- a/app/javascript/dashboard/i18n/locale/zh_TW/report.json
+++ b/app/javascript/dashboard/i18n/locale/zh_TW/report.json
@@ -3,7 +3,7 @@
"HEADER": "報表",
"LOADING_CHART": "正在載入图表數據...",
"NO_ENOUGH_DATA": "我們没有收到足夠的數據來生成報表,請稍後再試。",
- "DOWNLOAD_AGENT_REPORTS": "Download agent reports",
+ "DOWNLOAD_AGENT_REPORTS": "下載客服報告",
"METRICS": {
"CONVERSATIONS": {
"NAME": "會話",
@@ -38,6 +38,18 @@
{
"id": 1,
"name": "最近30天"
+ },
+ {
+ "id": 2,
+ "name": "Last 3 months"
+ },
+ {
+ "id": 3,
+ "name": "Last 6 months"
+ },
+ {
+ "id": 4,
+ "name": "Last year"
}
]
}
diff --git a/app/javascript/dashboard/i18n/locale/zh_TW/settings.json b/app/javascript/dashboard/i18n/locale/zh_TW/settings.json
index b51fc3bac9d..d5ea67521d6 100644
--- a/app/javascript/dashboard/i18n/locale/zh_TW/settings.json
+++ b/app/javascript/dashboard/i18n/locale/zh_TW/settings.json
@@ -19,7 +19,7 @@
"PASSWORD_SECTION": {
"TITLE": "密碼",
"NOTE": "更新您的密碼會在多個設備中重置您的登入資訊。",
- "BTN_TEXT": "Change password"
+ "BTN_TEXT": "變更密碼"
},
"ACCESS_TOKEN": {
"TITLE": "訪問 token",
@@ -56,12 +56,12 @@
"LABEL": "頭像"
},
"NAME": {
- "LABEL": "Your full name",
+ "LABEL": "你的姓名",
"ERROR": "Please enter a valid full name",
"PLACEHOLDER": "Please enter your full name"
},
"DISPLAY_NAME": {
- "LABEL": "Display name",
+ "LABEL": "顯示名稱",
"ERROR": "Please enter a valid display name",
"PLACEHOLDER": "Please enter a display name, this would be displayed in conversations"
},
@@ -123,17 +123,17 @@
"SIDEBAR": {
"CONVERSATIONS": "會話",
"REPORTS": "報表",
- "CONTACTS": "Contacts",
+ "CONTACTS": "聯絡人",
"SETTINGS": "設定",
"HOME": "首頁",
- "AGENTS": "客服代理們",
+ "AGENTS": "客服",
"INBOXES": "收件匣",
- "NOTIFICATIONS": "Notifications",
+ "NOTIFICATIONS": "通知",
"CANNED_RESPONSES": "預設回覆",
"INTEGRATIONS": "整合方式",
"ACCOUNT_SETTINGS": "帳戶設定",
"LABELS": "標籤",
- "TEAMS": "Teams"
+ "TEAMS": "團隊"
},
"CREATE_ACCOUNT": {
"NEW_ACCOUNT": "新帳戶",
diff --git a/app/javascript/dashboard/i18n/locale/zh_TW/signup.json b/app/javascript/dashboard/i18n/locale/zh_TW/signup.json
index e2d730eb0a7..fa4d03f4ade 100644
--- a/app/javascript/dashboard/i18n/locale/zh_TW/signup.json
+++ b/app/javascript/dashboard/i18n/locale/zh_TW/signup.json
@@ -9,9 +9,9 @@
"ERROR": "Account name is too short"
},
"FULL_NAME": {
- "LABEL": "Full name",
- "PLACEHOLDER": "Enter your full name. eg: Bruce Wayne",
- "ERROR": "Full name is too short"
+ "LABEL": "姓名",
+ "PLACEHOLDER": "請輸入您的完整姓名,如:王大明",
+ "ERROR": "姓名太短了"
},
"EMAIL": {
"LABEL": "Work email",
diff --git a/app/javascript/dashboard/i18n/locale/zh_TW/teamsSettings.json b/app/javascript/dashboard/i18n/locale/zh_TW/teamsSettings.json
index 41485acd678..cf0a7dfaf43 100644
--- a/app/javascript/dashboard/i18n/locale/zh_TW/teamsSettings.json
+++ b/app/javascript/dashboard/i18n/locale/zh_TW/teamsSettings.json
@@ -1,20 +1,20 @@
{
"TEAMS_SETTINGS": {
- "NEW_TEAM": "Create new team",
- "HEADER": "Teams",
+ "NEW_TEAM": "建立新團隊",
+ "HEADER": "團隊",
"SIDEBAR_TXT": "
Teams
Teams let you organize your agents into groups based on their responsibilities. A user can be part of multiple teams. You can assign conversations to a team when you are working collaboratively.
",
"LIST": {
"404": "There are no teams created on this account.",
- "EDIT_TEAM": "Edit team"
+ "EDIT_TEAM": "編輯團隊"
},
"CREATE_FLOW": {
"CREATE": {
- "TITLE": "Create a new team",
+ "TITLE": "建立一個新團隊",
"DESC": "Add a title and description to your new team."
},
"AGENTS": {
- "BUTTON_TEXT": "Add agents to team",
- "TITLE": "Add agents to team - %{teamName}",
+ "BUTTON_TEXT": "將客服加入團隊",
+ "TITLE": "將客服加入團隊 - %{teamName}",
"DESC": "Add Agents to your newly created team. This lets you collaborate as a team on conversations, get notified on new events in the same conversation."
},
"WIZARD": [
@@ -24,12 +24,12 @@
"body": "Create a new team of agents."
},
{
- "title": "建立客服代理",
+ "title": "建立客服",
"route": "settings_teams_add_agents",
- "body": "Add agents to the team."
+ "body": "將客服加入團隊"
},
{
- "title": "Finish",
+ "title": "完成",
"route": "settings_teams_finish",
"body": "您已設定狀態為離開"
}
@@ -37,28 +37,28 @@
},
"EDIT_FLOW": {
"CREATE": {
- "TITLE": "Edit your team details",
+ "TITLE": "編輯團隊詳細資訊",
"DESC": "Edit title and description to your team.",
- "BUTTON_TEXT": "Update team"
+ "BUTTON_TEXT": "更新團隊"
},
"AGENTS": {
- "BUTTON_TEXT": "Update agents in team",
- "TITLE": "Add agents to team - %{teamName}",
+ "BUTTON_TEXT": "更新團隊客服",
+ "TITLE": "將客服加入團隊 - %{teamName}",
"DESC": "Add Agents to your newly created team. All the added agents will be notified when a conversation is assigned to this team."
},
"WIZARD": [
{
- "title": "Team details",
+ "title": "團隊詳細資訊",
"route": "settings_teams_edit",
"body": "Change name, description and other details."
},
{
- "title": "Edit Agents",
+ "title": "編輯客服",
"route": "settings_teams_edit_members",
"body": "Edit agents in your team."
},
{
- "title": "Finish",
+ "title": "完成",
"route": "settings_teams_edit_finish",
"body": "您已設定狀態為離開"
}
@@ -68,57 +68,57 @@
"ERROR_MESSAGE": "Couldn't save the team details. Try again."
},
"AGENTS": {
- "AGENT": "AGENT",
+ "AGENT": "客服",
"EMAIL": "電子信箱",
- "BUTTON_TEXT": "建立客服代理",
- "ADD_AGENTS": "Adding Agents to your Team...",
- "SELECT": "select",
- "SELECT_ALL": "select all agents",
+ "BUTTON_TEXT": "新增客服",
+ "ADD_AGENTS": "正在將客服加入到你的團隊...",
+ "SELECT": "選擇",
+ "SELECT_ALL": "選取所有客服",
"SELECTED_COUNT": "%{selected} out of %{total} agents selected."
},
"ADD": {
- "TITLE": "Add agents to team - %{teamName}",
+ "TITLE": "將客服加入團隊 - %{teamName}",
"DESC": "Add Agents to your newly created team. This lets you collaborate as a team on conversations, get notified on new events in the same conversation.",
- "SELECT": "select",
- "SELECT_ALL": "select all agents",
+ "SELECT": "選擇",
+ "SELECT_ALL": "選取所有克服",
"SELECTED_COUNT": "%{selected} out of %{total} agents selected.",
- "BUTTON_TEXT": "建立客服代理",
+ "BUTTON_TEXT": "新增客服",
"AGENT_VALIDATION_ERROR": "Select atleaset one agent."
},
"FINISH": {
- "TITLE": "Your team is ready!",
+ "TITLE": "你的團隊已經準備好了",
"MESSAGE": "You can now collaborate as a team on conversations. Happy supporting ",
- "BUTTON_TEXT": "Finish"
+ "BUTTON_TEXT": "完成"
},
"DELETE": {
"BUTTON_TEXT": "刪除",
"API": {
- "SUCCESS_MESSAGE": "Team deleted successfully.",
- "ERROR_MESSAGE": "Couldn't delete the team. Try again."
+ "SUCCESS_MESSAGE": "團隊刪除成功",
+ "ERROR_MESSAGE": "無法刪除團隊,請再試一次"
},
"CONFIRM": {
- "TITLE": "Are you sure want to delete - %{teamName}",
+ "TITLE": "確定要刪除 - %{teamName} ?",
"MESSAGE": "Deleting the team will remove the team assignment from the conversations assigned to this team.",
"YES": "刪除 ",
- "NO": "取消操作"
+ "NO": "取消"
}
},
"SETTINGS": "設定",
"FORM": {
- "UPDATE": "Update team",
- "CREATE": "Create team",
+ "UPDATE": "更新團隊",
+ "CREATE": "建立團隊",
"NAME": {
- "LABEL": "Team name",
+ "LABEL": "團隊名稱",
"PLACEHOLDER": "Example: Sales, Customer Support"
},
"DESCRIPTION": {
- "LABEL": "Team Description",
- "PLACEHOLDER": "Short description about this team."
+ "LABEL": "團隊描述",
+ "PLACEHOLDER": "對此團隊的簡短描述"
},
"AUTO_ASSIGN": {
- "LABEL": "Allow auto assign for this team."
+ "LABEL": "允許在團隊中自動指派"
},
- "SUBMIT_CREATE": "Create team"
+ "SUBMIT_CREATE": "建立團隊"
}
}
}
diff --git a/app/javascript/dashboard/modules/contact/components/ContactAttribute.vue b/app/javascript/dashboard/modules/contact/components/ContactAttribute.vue
new file mode 100644
index 00000000000..dd02ac338bd
--- /dev/null
+++ b/app/javascript/dashboard/modules/contact/components/ContactAttribute.vue
@@ -0,0 +1,125 @@
+
+
import { IFrameHelper } from 'widget/helpers/utils';
-import AgentBubble from 'widget/components/AgentMessageBubble.vue';
+import UnreadMessage from 'widget/components/UnreadMessage.vue';
+
import configMixin from '../mixins/configMixin';
import { mapGetters } from 'vuex';
export default {
name: 'Unread',
components: {
- AgentBubble,
+ UnreadMessage,
},
mixins: [configMixin],
props: {
@@ -64,6 +68,10 @@ export default {
showCloseButton() {
return this.unreadMessageCount && this.hideMessageBubble;
},
+ sender() {
+ const [firstMessage] = this.unreadMessages;
+ return firstMessage.sender || {};
+ },
},
methods: {
openFullView() {
diff --git a/app/jobs/hook_job.rb b/app/jobs/hook_job.rb
index 6fc8934d2cf..46d10c464b8 100644
--- a/app/jobs/hook_job.rb
+++ b/app/jobs/hook_job.rb
@@ -1,11 +1,29 @@
class HookJob < ApplicationJob
queue_as :integrations
- def perform(hook, message)
- return unless hook.slack?
-
- Integrations::Slack::SendOnSlackService.new(message: message, hook: hook).perform
+ def perform(hook, event_name, event_data = {})
+ case hook.app_id
+ when 'slack'
+ process_slack_integration(hook, event_name, event_data)
+ when 'dialogflow'
+ process_dialogflow_integration(hook, event_name, event_data)
+ end
rescue StandardError => e
Raven.capture_exception(e)
end
+
+ private
+
+ def process_slack_integration(hook, event_name, event_data)
+ return unless ['message.created'].include?(event_name)
+
+ message = event_data[:message]
+ Integrations::Slack::SendOnSlackService.new(message: message, hook: hook).perform
+ end
+
+ def process_dialogflow_integration(hook, event_name, event_data)
+ return unless ['message.created', 'message.updated'].include?(event_name)
+
+ Integrations::Dialogflow::ProcessorService.new(event_name: event_name, hook: hook, event_data: event_data).perform
+ end
end
diff --git a/app/listeners/action_cable_listener.rb b/app/listeners/action_cable_listener.rb
index 8ce2461a801..3efae0b303b 100644
--- a/app/listeners/action_cable_listener.rb
+++ b/app/listeners/action_cable_listener.rb
@@ -32,25 +32,11 @@ class ActionCableListener < BaseListener
broadcast(account, tokens, MESSAGE_UPDATED, message.push_event_data)
end
- def conversation_resolved(event)
+ def conversation_status_changed(event)
conversation, account = extract_conversation_and_account(event)
tokens = user_tokens(account, conversation.inbox.members) + [conversation.contact&.pubsub_token]
- broadcast(account, tokens, CONVERSATION_RESOLVED, conversation.push_event_data)
- end
-
- def conversation_opened(event)
- conversation, account = extract_conversation_and_account(event)
- tokens = user_tokens(account, conversation.inbox.members) + [conversation.contact&.pubsub_token]
-
- broadcast(account, tokens, CONVERSATION_OPENED, conversation.push_event_data)
- end
-
- def conversation_lock_toggle(event)
- conversation, account = extract_conversation_and_account(event)
- tokens = user_tokens(account, conversation.inbox.members)
-
- broadcast(account, tokens, CONVERSATION_LOCK_TOGGLE, conversation.lock_event_data)
+ broadcast(account, tokens, CONVERSATION_STATUS_CHANGED, conversation.push_event_data)
end
def conversation_typing_on(event)
diff --git a/app/listeners/campaign_listener.rb b/app/listeners/campaign_listener.rb
new file mode 100644
index 00000000000..1405911c293
--- /dev/null
+++ b/app/listeners/campaign_listener.rb
@@ -0,0 +1,14 @@
+class CampaignListener < BaseListener
+ def campaign_triggered(event)
+ contact_inbox = event.data[:contact_inbox]
+ campaign_display_id = event.data[:event_info][:campaign_id]
+
+ return if campaign_display_id.blank?
+
+ ::Campaigns::CampaignConversationBuilder.new(
+ contact_inbox_id: contact_inbox.id,
+ campaign_display_id: campaign_display_id,
+ conversation_additional_attributes: event.data[:event_info].except(:campaign_id)
+ ).perform
+ end
+end
diff --git a/app/listeners/hook_listener.rb b/app/listeners/hook_listener.rb
index efe1c74e836..a98de860aba 100644
--- a/app/listeners/hook_listener.rb
+++ b/app/listeners/hook_listener.rb
@@ -4,7 +4,16 @@ class HookListener < BaseListener
return unless message.reportable?
message.account.hooks.each do |hook|
- HookJob.perform_later(hook, message)
+ HookJob.perform_later(hook, event.name, message: message)
+ end
+ end
+
+ def message_updated(event)
+ message = extract_message_and_account(event)[0]
+ return unless message.reportable?
+
+ message.account.hooks.each do |hook|
+ HookJob.perform_later(hook, event.name, message: message)
end
end
end
diff --git a/app/listeners/webhook_listener.rb b/app/listeners/webhook_listener.rb
index a463fea00e5..f688d77636f 100644
--- a/app/listeners/webhook_listener.rb
+++ b/app/listeners/webhook_listener.rb
@@ -1,4 +1,5 @@
class WebhookListener < BaseListener
+ # FIXME: deprecate the opened and resolved events in future in favor of status changed event.
def conversation_resolved(event)
conversation = extract_conversation_and_account(event)[0]
inbox = conversation.inbox
@@ -6,6 +7,7 @@ class WebhookListener < BaseListener
deliver_webhook_payloads(payload, inbox)
end
+ # FIXME: deprecate the opened and resolved events in future in favor of status changed event.
def conversation_opened(event)
conversation = extract_conversation_and_account(event)[0]
inbox = conversation.inbox
@@ -13,6 +15,13 @@ class WebhookListener < BaseListener
deliver_webhook_payloads(payload, inbox)
end
+ def conversation_status_changed(event)
+ conversation = extract_conversation_and_account(event)[0]
+ inbox = conversation.inbox
+ payload = conversation.webhook_data.merge(event: __method__.to_s)
+ deliver_webhook_payloads(payload, inbox)
+ end
+
def message_created(event)
message = extract_message_and_account(event)[0]
inbox = message.inbox
@@ -50,7 +59,9 @@ class WebhookListener < BaseListener
WebhookJob.perform_later(webhook.url, payload)
end
- # Deliver for API Inbox
- WebhookJob.perform_later(inbox.channel.webhook_url, payload) if inbox.channel_type == 'Channel::Api'
+ return unless inbox.channel_type == 'Channel::Api'
+ return if inbox.channel.webhook_url.blank?
+
+ WebhookJob.perform_later(inbox.channel.webhook_url, payload)
end
end
diff --git a/app/models/account.rb b/app/models/account.rb
index 35a731aba51..b7a023bda85 100644
--- a/app/models/account.rb
+++ b/app/models/account.rb
@@ -36,6 +36,7 @@ class Account < ApplicationRecord
has_many :data_imports, dependent: :destroy
has_many :users, through: :account_users
has_many :inboxes, dependent: :destroy
+ has_many :campaigns, dependent: :destroy
has_many :conversations, dependent: :destroy
has_many :messages, dependent: :destroy
has_many :contacts, dependent: :destroy
@@ -104,4 +105,8 @@ class Account < ApplicationRecord
trigger.after(:insert).for_each(:row) do
"execute format('create sequence IF NOT EXISTS conv_dpid_seq_%s', NEW.id);"
end
+
+ trigger.name('camp_dpid_before_insert').after(:insert).for_each(:row) do
+ "execute format('create sequence IF NOT EXISTS camp_dpid_seq_%s', NEW.id);"
+ end
end
diff --git a/app/models/campaign.rb b/app/models/campaign.rb
new file mode 100644
index 00000000000..bde63ce10fa
--- /dev/null
+++ b/app/models/campaign.rb
@@ -0,0 +1,51 @@
+# == Schema Information
+#
+# Table name: campaigns
+#
+# id :bigint not null, primary key
+# description :text
+# enabled :boolean default(TRUE)
+# message :text not null
+# title :string not null
+# trigger_rules :jsonb
+# created_at :datetime not null
+# updated_at :datetime not null
+# account_id :bigint not null
+# display_id :integer not null
+# inbox_id :bigint not null
+# sender_id :integer
+#
+# Indexes
+#
+# index_campaigns_on_account_id (account_id)
+# index_campaigns_on_inbox_id (inbox_id)
+#
+# Foreign Keys
+#
+# fk_rails_... (account_id => accounts.id)
+# fk_rails_... (inbox_id => inboxes.id)
+#
+class Campaign < ApplicationRecord
+ validates :account_id, presence: true
+ validates :inbox_id, presence: true
+ validates :title, presence: true
+ validates :message, presence: true
+ belongs_to :account
+ belongs_to :inbox
+ belongs_to :sender, class_name: 'User', optional: true
+
+ has_many :conversations, dependent: :nullify, autosave: true
+
+ after_commit :set_display_id, unless: :display_id?
+
+ private
+
+ def set_display_id
+ reload
+ end
+
+ # creating db triggers
+ trigger.before(:insert).for_each(:row) do
+ "NEW.display_id := nextval('camp_dpid_seq_' || NEW.account_id);"
+ end
+end
diff --git a/app/models/channel/api.rb b/app/models/channel/api.rb
index baa6015d391..672d8f383ec 100644
--- a/app/models/channel/api.rb
+++ b/app/models/channel/api.rb
@@ -3,7 +3,7 @@
# Table name: channel_api
#
# id :bigint not null, primary key
-# webhook_url :string not null
+# webhook_url :string
# created_at :datetime not null
# updated_at :datetime not null
# account_id :integer not null
diff --git a/app/models/contact.rb b/app/models/contact.rb
index 47eb5352d25..34d54bee63e 100644
--- a/app/models/contact.rb
+++ b/app/models/contact.rb
@@ -7,6 +7,7 @@
# custom_attributes :jsonb
# email :string
# identifier :string
+# last_activity_at :datetime
# name :string
# phone_number :string
# pubsub_token :string
diff --git a/app/models/conversation.rb b/app/models/conversation.rb
index bb210f6bcc4..613e2a1c1a8 100644
--- a/app/models/conversation.rb
+++ b/app/models/conversation.rb
@@ -8,13 +8,13 @@
# contact_last_seen_at :datetime
# identifier :string
# last_activity_at :datetime not null
-# locked :boolean default(FALSE)
# status :integer default("open"), not null
# uuid :uuid not null
# created_at :datetime not null
# updated_at :datetime not null
# account_id :integer not null
# assignee_id :integer
+# campaign_id :bigint
# contact_id :bigint
# contact_inbox_id :bigint
# display_id :integer not null
@@ -25,11 +25,13 @@
#
# index_conversations_on_account_id (account_id)
# index_conversations_on_account_id_and_display_id (account_id,display_id) UNIQUE
+# index_conversations_on_campaign_id (campaign_id)
# index_conversations_on_contact_inbox_id (contact_inbox_id)
# index_conversations_on_team_id (team_id)
#
# Foreign Keys
#
+# fk_rails_... (campaign_id => campaigns.id)
# fk_rails_... (contact_inbox_id => contact_inboxes.id)
# fk_rails_... (team_id => teams.id)
#
@@ -55,6 +57,7 @@ class Conversation < ApplicationRecord
belongs_to :contact
belongs_to :contact_inbox
belongs_to :team, optional: true
+ belongs_to :campaign, optional: true
has_many :messages, dependent: :destroy, autosave: true
@@ -104,14 +107,6 @@ class Conversation < ApplicationRecord
Redis::Alfred.get(mute_key).present?
end
- def lock!
- update!(locked: true)
- end
-
- def unlock!
- update!(locked: false)
- end
-
def unread_messages
messages.unread_since(agent_last_seen_at)
end
@@ -147,7 +142,7 @@ class Conversation < ApplicationRecord
end
def set_bot_conversation
- self.status = :bot if inbox.agent_bot_inbox&.active?
+ self.status = :bot if inbox.agent_bot_inbox&.active? || inbox.hooks.pluck(:app_id).include?('dialogflow')
end
def notify_conversation_creation
@@ -187,8 +182,8 @@ class Conversation < ApplicationRecord
{
CONVERSATION_OPENED => -> { saved_change_to_status? && open? },
CONVERSATION_RESOLVED => -> { saved_change_to_status? && resolved? },
+ CONVERSATION_STATUS_CHANGED => -> { saved_change_to_status? },
CONVERSATION_READ => -> { saved_change_to_contact_last_seen_at? },
- CONVERSATION_LOCK_TOGGLE => -> { saved_change_to_locked? },
CONVERSATION_CONTACT_CHANGED => -> { saved_change_to_contact_id? }
}.each do |event, condition|
condition.call && dispatcher_dispatch(event)
diff --git a/app/models/inbox.rb b/app/models/inbox.rb
index 398af035216..e1b330bbf26 100644
--- a/app/models/inbox.rb
+++ b/app/models/inbox.rb
@@ -36,6 +36,7 @@ class Inbox < ApplicationRecord
belongs_to :channel, polymorphic: true, dependent: :destroy
+ has_many :campaigns, dependent: :destroy
has_many :contact_inboxes, dependent: :destroy
has_many :contacts, through: :contact_inboxes
diff --git a/app/models/integrations/app.rb b/app/models/integrations/app.rb
index 7861cc5c826..bae1ca02f25 100644
--- a/app/models/integrations/app.rb
+++ b/app/models/integrations/app.rb
@@ -38,6 +38,8 @@ class Integrations::App
case params[:id]
when 'slack'
ENV['SLACK_CLIENT_SECRET'].present?
+ when 'dialogflow'
+ false
else
true
end
diff --git a/app/models/integrations/hook.rb b/app/models/integrations/hook.rb
index 2df57ec2a71..55e64410c1c 100644
--- a/app/models/integrations/hook.rb
+++ b/app/models/integrations/hook.rb
@@ -5,7 +5,7 @@
# id :bigint not null, primary key
# access_token :string
# hook_type :integer default("account")
-# settings :text
+# settings :jsonb
# status :integer default("disabled")
# created_at :datetime not null
# updated_at :datetime not null
@@ -17,8 +17,13 @@
class Integrations::Hook < ApplicationRecord
include Reauthorizable
+ attr_readonly :app_id, :account_id, :inbox_id, :hook_type
+ before_validation :ensure_hook_type
validates :account_id, presence: true
validates :app_id, presence: true
+ validates :inbox_id, presence: true, if: -> { hook_type == 'inbox' }
+ validate :validate_settings_json_schema
+ validates :app_id, uniqueness: { scope: [:account_id], unless: -> { app.present? && app.params[:allow_multiple_hooks].present? } }
enum status: { disabled: 0, enabled: 1 }
@@ -39,4 +44,16 @@ class Integrations::Hook < ApplicationRecord
def disable
update(status: 'disabled')
end
+
+ private
+
+ def ensure_hook_type
+ self.hook_type = app.params[:hook_type] if app.present?
+ end
+
+ def validate_settings_json_schema
+ return if app.blank? || app.params[:settings_json_schema].blank?
+
+ errors.add(:settings, ': Invalid settings data') unless JSONSchemer.schema(app.params[:settings_json_schema]).valid?(settings)
+ end
end
diff --git a/app/models/message.rb b/app/models/message.rb
index 8c834e2edbc..ea41b15fad1 100644
--- a/app/models/message.rb
+++ b/app/models/message.rb
@@ -133,6 +133,11 @@ class Message < ApplicationRecord
dispatch_create_events
send_reply
execute_message_template_hooks
+ update_contact_activity
+ end
+
+ def update_contact_activity
+ sender.update(last_activity_at: DateTime.now) if sender&.is_a?(Contact)
end
def dispatch_create_events
diff --git a/app/policies/campaign_policy.rb b/app/policies/campaign_policy.rb
new file mode 100644
index 00000000000..b210fdd99f6
--- /dev/null
+++ b/app/policies/campaign_policy.rb
@@ -0,0 +1,21 @@
+class CampaignPolicy < ApplicationPolicy
+ def index?
+ @account_user.administrator?
+ end
+
+ def update?
+ @account_user.administrator?
+ end
+
+ def show?
+ @account_user.administrator?
+ end
+
+ def create?
+ @account_user.administrator?
+ end
+
+ def destroy?
+ @account_user.administrator?
+ end
+end
diff --git a/app/policies/hook_policy.rb b/app/policies/hook_policy.rb
new file mode 100644
index 00000000000..3f25cf8e417
--- /dev/null
+++ b/app/policies/hook_policy.rb
@@ -0,0 +1,13 @@
+class HookPolicy < ApplicationPolicy
+ def create?
+ @account_user.administrator?
+ end
+
+ def update?
+ @account_user.administrator?
+ end
+
+ def destroy?
+ @account_user.administrator?
+ end
+end
diff --git a/app/policies/inbox_policy.rb b/app/policies/inbox_policy.rb
index 2968129db43..927ff9435b3 100644
--- a/app/policies/inbox_policy.rb
+++ b/app/policies/inbox_policy.rb
@@ -27,6 +27,10 @@ class InboxPolicy < ApplicationPolicy
true
end
+ def campaigns?
+ @account_user.administrator?
+ end
+
def create?
@account_user.administrator?
end
diff --git a/app/presenters/conversations/event_data_presenter.rb b/app/presenters/conversations/event_data_presenter.rb
index 1e3ff66aeff..57c96558edd 100644
--- a/app/presenters/conversations/event_data_presenter.rb
+++ b/app/presenters/conversations/event_data_presenter.rb
@@ -1,8 +1,4 @@
class Conversations::EventDataPresenter < SimpleDelegator
- def lock_data
- { id: display_id, locked: locked? }
- end
-
def push_data
{
additional_attributes: additional_attributes,
diff --git a/app/presenters/mail_presenter.rb b/app/presenters/mail_presenter.rb
index 5e92ba5287e..cd17eb76f08 100644
--- a/app/presenters/mail_presenter.rb
+++ b/app/presenters/mail_presenter.rb
@@ -8,7 +8,7 @@ class MailPresenter < SimpleDelegator
end
def subject
- encode_to_unicode(@mail.subject)
+ encode_to_unicode(@mail.subject || '')
end
def text_content
diff --git a/app/services/message_templates/hook_execution_service.rb b/app/services/message_templates/hook_execution_service.rb
index 6d4c9ddd7b6..53c334f8825 100644
--- a/app/services/message_templates/hook_execution_service.rb
+++ b/app/services/message_templates/hook_execution_service.rb
@@ -3,9 +3,11 @@ class MessageTemplates::HookExecutionService
def perform
return if inbox.agent_bot_inbox&.active?
+ return if conversation.campaign.present?
# TODO: let's see whether this is needed and remove this and related logic if not
# ::MessageTemplates::Template::OutOfOffice.new(conversation: conversation).perform if should_send_out_of_office_message?
+
::MessageTemplates::Template::Greeting.new(conversation: conversation).perform if should_send_greeting?
::MessageTemplates::Template::EmailCollect.new(conversation: conversation).perform if should_send_email_collect?
end
diff --git a/app/views/api/v1/accounts/campaigns/create.json.jbuilder b/app/views/api/v1/accounts/campaigns/create.json.jbuilder
new file mode 100644
index 00000000000..bd136a8a298
--- /dev/null
+++ b/app/views/api/v1/accounts/campaigns/create.json.jbuilder
@@ -0,0 +1 @@
+json.partial! 'api/v1/models/campaign.json.jbuilder', resource: @campaign
diff --git a/app/views/api/v1/accounts/campaigns/index.json.jbuilder b/app/views/api/v1/accounts/campaigns/index.json.jbuilder
new file mode 100644
index 00000000000..c0e90acd706
--- /dev/null
+++ b/app/views/api/v1/accounts/campaigns/index.json.jbuilder
@@ -0,0 +1,3 @@
+json.array! @campaigns do |campaign|
+ json.partial! 'api/v1/models/campaign.json.jbuilder', resource: campaign
+end
diff --git a/app/views/api/v1/accounts/campaigns/show.json.jbuilder b/app/views/api/v1/accounts/campaigns/show.json.jbuilder
new file mode 100644
index 00000000000..bd136a8a298
--- /dev/null
+++ b/app/views/api/v1/accounts/campaigns/show.json.jbuilder
@@ -0,0 +1 @@
+json.partial! 'api/v1/models/campaign.json.jbuilder', resource: @campaign
diff --git a/app/views/api/v1/accounts/campaigns/update.json.jbuilder b/app/views/api/v1/accounts/campaigns/update.json.jbuilder
new file mode 100644
index 00000000000..bd136a8a298
--- /dev/null
+++ b/app/views/api/v1/accounts/campaigns/update.json.jbuilder
@@ -0,0 +1 @@
+json.partial! 'api/v1/models/campaign.json.jbuilder', resource: @campaign
diff --git a/app/views/api/v1/accounts/inboxes/campaigns.json.jbuilder b/app/views/api/v1/accounts/inboxes/campaigns.json.jbuilder
new file mode 100644
index 00000000000..c0e90acd706
--- /dev/null
+++ b/app/views/api/v1/accounts/inboxes/campaigns.json.jbuilder
@@ -0,0 +1,3 @@
+json.array! @campaigns do |campaign|
+ json.partial! 'api/v1/models/campaign.json.jbuilder', resource: campaign
+end
diff --git a/app/views/api/v1/accounts/integrations/apps/index.json.jbuilder b/app/views/api/v1/accounts/integrations/apps/index.json.jbuilder
index dca7a4fdc26..09acda0cba1 100644
--- a/app/views/api/v1/accounts/integrations/apps/index.json.jbuilder
+++ b/app/views/api/v1/accounts/integrations/apps/index.json.jbuilder
@@ -1,10 +1,5 @@
json.payload do
json.array! @apps do |app|
- json.id app.id
- json.name app.name
- json.description app.description
- json.logo app.logo
- json.enabled app.enabled?(@current_account)
- json.action app.action
+ json.partial! 'api/v1/models/app.json.jbuilder', resource: app
end
end
diff --git a/app/views/api/v1/accounts/integrations/apps/show.json.jbuilder b/app/views/api/v1/accounts/integrations/apps/show.json.jbuilder
index 93d139e9a4f..442b50a494a 100644
--- a/app/views/api/v1/accounts/integrations/apps/show.json.jbuilder
+++ b/app/views/api/v1/accounts/integrations/apps/show.json.jbuilder
@@ -1,7 +1 @@
-json.id @app.id
-json.name @app.name
-json.logo @app.logo
-json.description @app.description
-json.fields @app.fields
-json.enabled @app.enabled?(@current_account)
-json.button @app.action
+json.partial! 'api/v1/models/app.json.jbuilder', resource: @app
diff --git a/app/views/api/v1/accounts/integrations/hooks/create.json.jbuilder b/app/views/api/v1/accounts/integrations/hooks/create.json.jbuilder
new file mode 100644
index 00000000000..6362fabd4d8
--- /dev/null
+++ b/app/views/api/v1/accounts/integrations/hooks/create.json.jbuilder
@@ -0,0 +1 @@
+json.partial! 'api/v1/models/hook.json.jbuilder', resource: @hook
diff --git a/app/views/api/v1/accounts/integrations/hooks/update.json.jbuilder b/app/views/api/v1/accounts/integrations/hooks/update.json.jbuilder
new file mode 100644
index 00000000000..6362fabd4d8
--- /dev/null
+++ b/app/views/api/v1/accounts/integrations/hooks/update.json.jbuilder
@@ -0,0 +1 @@
+json.partial! 'api/v1/models/hook.json.jbuilder', resource: @hook
diff --git a/app/views/api/v1/models/_app.json.jbuilder b/app/views/api/v1/models/_app.json.jbuilder
new file mode 100644
index 00000000000..6fce9fee2a6
--- /dev/null
+++ b/app/views/api/v1/models/_app.json.jbuilder
@@ -0,0 +1,6 @@
+json.call(resource.params, *resource.params.keys)
+json.name resource.name
+json.description resource.description
+json.enabled resource.enabled?(@current_account)
+json.button resource.action
+json.hooks @current_account.hooks.where(app_id: resource.id)
diff --git a/app/views/api/v1/models/_campaign.json.jbuilder b/app/views/api/v1/models/_campaign.json.jbuilder
new file mode 100644
index 00000000000..ecadb7b9eae
--- /dev/null
+++ b/app/views/api/v1/models/_campaign.json.jbuilder
@@ -0,0 +1,15 @@
+json.id resource.display_id
+json.title resource.title
+json.description resource.description
+json.account_id resource.account_id
+json.inbox do
+ json.partial! 'api/v1/models/inbox.json.jbuilder', resource: resource.inbox
+end
+json.sender do
+ json.partial! 'api/v1/models/agent.json.jbuilder', resource: resource.sender if resource.sender.present?
+end
+json.message resource.message
+json.enabled resource.enabled
+json.trigger_rules resource.trigger_rules
+json.created_at resource.created_at
+json.updated_at resource.updated_at
diff --git a/app/views/api/v1/models/_contact.json.jbuilder b/app/views/api/v1/models/_contact.json.jbuilder
index eaf4012f41a..95d761e10b0 100644
--- a/app/views/api/v1/models/_contact.json.jbuilder
+++ b/app/views/api/v1/models/_contact.json.jbuilder
@@ -7,7 +7,7 @@ json.phone_number resource.phone_number
json.thumbnail resource.avatar_url
json.custom_attributes resource.custom_attributes
json.conversations_count resource.conversations_count if resource[:conversations_count].present?
-json.last_seen_at resource.last_seen_at.to_i if resource[:last_seen_at].present?
+json.last_activity_at resource.last_activity_at.to_i if resource[:last_activity_at].present?
# we only want to output contact inbox when its /contacts endpoints
if defined?(with_contact_inboxes) && with_contact_inboxes.present?
diff --git a/app/views/api/v1/models/_hook.json.jbuilder b/app/views/api/v1/models/_hook.json.jbuilder
new file mode 100644
index 00000000000..d9860b8a2c4
--- /dev/null
+++ b/app/views/api/v1/models/_hook.json.jbuilder
@@ -0,0 +1,4 @@
+json.id resource.id
+json.app resource.app.params.to_h
+json.enabled resource.enabled?
+json.inbox_id resource.inbox_id
diff --git a/app/views/api/v1/widget/campaigns/index.json.jbuilder b/app/views/api/v1/widget/campaigns/index.json.jbuilder
new file mode 100644
index 00000000000..0d7aa24e348
--- /dev/null
+++ b/app/views/api/v1/widget/campaigns/index.json.jbuilder
@@ -0,0 +1,4 @@
+json.array! @campaigns do |campaign|
+ json.id campaign.display_id
+ json.trigger_rules campaign.trigger_rules
+end
diff --git a/app/views/super_admin/application/index.html.erb b/app/views/super_admin/application/index.html.erb
index 80a5ae24c88..951792711bf 100644
--- a/app/views/super_admin/application/index.html.erb
+++ b/app/views/super_admin/application/index.html.erb
@@ -46,7 +46,7 @@ It renders the `_table` partial to display details about the resources.
"administrate.actions.new_resource",
name: page.resource_name.titleize.downcase
),
- [:new, namespace, page.resource_path],
+ [:new, namespace, page.resource_path.to_sym],
class: "button",
) if valid_action?(:new) && show_action?(:new, new_resource) %>
diff --git a/app/views/super_admin/users/index.html.erb b/app/views/super_admin/users/index.html.erb
index 80a5ae24c88..951792711bf 100644
--- a/app/views/super_admin/users/index.html.erb
+++ b/app/views/super_admin/users/index.html.erb
@@ -46,7 +46,7 @@ It renders the `_table` partial to display details about the resources.
"administrate.actions.new_resource",
name: page.resource_name.titleize.downcase
),
- [:new, namespace, page.resource_path],
+ [:new, namespace, page.resource_path.to_sym],
class: "button",
) if valid_action?(:new) && show_action?(:new, new_resource) %>
diff --git a/config/app.yml b/config/app.yml
index e77e8891e4e..3956f6e5613 100644
--- a/config/app.yml
+++ b/config/app.yml
@@ -1,5 +1,5 @@
shared: &shared
- version: '1.15.1'
+ version: '1.16.0'
development:
<<: *shared
diff --git a/config/integration/apps.yml b/config/integration/apps.yml
index d58254bdedf..1c627689421 100644
--- a/config/integration/apps.yml
+++ b/config/integration/apps.yml
@@ -1,10 +1,53 @@
+###### Attributes Supported by Integration Apps #######
+# id: Internal Id for the integrations, used by the hooks
+# logo: place the image in /public/dashboard/images/integrations and reference here
+# i18n_key: the key under which translations for the integration is placed in en.yml
+# action: if integration requires external redirect url
+# hook_type: ( account / inbox )
+# allow_multiple_hooks: whether multiple hooks can be created for the integration
+# settings_json_schema: the json schema used to validate the settings hash (https://json-schema.org/)
+# settings_form_schema: the formulate schema used in frontend to render settings form (https://vueformulate.com/)
+########################################################
+
slack:
id: slack
logo: slack.png
i18n_key: slack
action: https://slack.com/oauth/v2/authorize?scope=commands,chat:write,channels:read,channels:manage,channels:join,groups:write,im:write,mpim:write,users:read,users:read.email,chat:write.customize,channels:history,groups:history,mpim:history,im:history
+ hook_type: account
+ allow_multiple_hooks: false
webhooks:
id: webhook
logo: cable.svg
i18n_key: webhooks
action: /webhook
+ hook_type: account
+ allow_multiple_hooks: true
+dialogflow:
+ id: dialogflow
+ logo: dialogflow.svg
+ i18n_key: dialogflow
+ action: /dialogflow
+ hook_type: inbox
+ allow_multiple_hooks: true
+ settings_json_schema: {
+ "type": "object",
+ "properties": {
+ "project_id": { "type": "string" },
+ "credentials": { "type": "object" }
+ },
+ "required": ["project_id", "credentials"],
+ "additionalProperties": false
+ }
+ settings_form_schema: [
+ {
+ "label": "Dialogflow Project ID",
+ "type": "text",
+ "name": "project_id"
+ },
+ {
+ "label": "Dialogflow Project Key File",
+ "type": "textarea",
+ "name": "credentials",
+ }
+ ]
diff --git a/config/locales/ar.yml b/config/locales/ar.yml
index 5f06fe95372..173f7dfc0ba 100644
--- a/config/locales/ar.yml
+++ b/config/locales/ar.yml
@@ -76,3 +76,6 @@ ar:
webhooks:
name: "Webhook"
description: "أحداث Webhook توفر لك معلومات في الوقت الحقيقي حول ما يحدث في حساب Chatwoot الخاص بك. يمكنك استخدام خاصية الـ Webhook لإيصال الأحداث إلى تطبيقاتك المفضلة مثل Slack أو Github. انقر على \"تهيئة\" لإعداد الـ Webhooks الخاصة بك."
+ dialogflow:
+ name: "Dialogflow"
+ description: "Connect your Dialogflow bot to your inbox. Let the bots handle the queries before handing it off to the customer service agent."
diff --git a/config/locales/ca.yml b/config/locales/ca.yml
index 028b0576864..b1e668cffca 100644
--- a/config/locales/ca.yml
+++ b/config/locales/ca.yml
@@ -76,3 +76,6 @@ ca:
webhooks:
name: "Webhooks"
description: "Els esdeveniments de Webhook us proporcionen informació en temps real sobre el que passa al vostre compte de Chatwoot. Podeu utilitzar els webhooks per comunicar els esdeveniments a les vostres aplicacions preferides com Slack o Github. Feu clic a Configura per configurar els enllaços web."
+ dialogflow:
+ name: "Dialogflow"
+ description: "Connect your Dialogflow bot to your inbox. Let the bots handle the queries before handing it off to the customer service agent."
diff --git a/config/locales/cs.yml b/config/locales/cs.yml
index 3d705854715..c89ae1d2850 100644
--- a/config/locales/cs.yml
+++ b/config/locales/cs.yml
@@ -76,3 +76,6 @@ cs:
webhooks:
name: "Webhooky"
description: "Webhook events provide you the realtime information about what's happening in your account. You can make use of the webhooks to communicate the events to your favourite apps like Slack or Github. Click on Configure to set up your webhooks."
+ dialogflow:
+ name: "Dialogflow"
+ description: "Connect your Dialogflow bot to your inbox. Let the bots handle the queries before handing it off to the customer service agent."
diff --git a/config/locales/da.yml b/config/locales/da.yml
index c1d07266093..2e44e61fc36 100644
--- a/config/locales/da.yml
+++ b/config/locales/da.yml
@@ -76,3 +76,6 @@ da:
webhooks:
name: "Webhooks"
description: "Webhook events provide you the realtime information about what's happening in your account. You can make use of the webhooks to communicate the events to your favourite apps like Slack or Github. Click on Configure to set up your webhooks."
+ dialogflow:
+ name: "Dialogflow"
+ description: "Connect your Dialogflow bot to your inbox. Let the bots handle the queries before handing it off to the customer service agent."
diff --git a/config/locales/de.yml b/config/locales/de.yml
index dca877e488c..7e3effdb472 100644
--- a/config/locales/de.yml
+++ b/config/locales/de.yml
@@ -76,3 +76,6 @@ de:
webhooks:
name: "Webhooks"
description: "Webhook-Ereignisse bieten Ihnen Echtzeitinformationen darüber, was in Ihrem Chatwoot-Konto passiert. Sie können die Webhooks verwenden, um die Ereignisse an Ihre Lieblings-Apps wie Slack oder Github zu kommunizieren. Klicken Sie auf Konfigurieren, um Ihre Webhooks einzurichten."
+ dialogflow:
+ name: "Dialogflow"
+ description: "Schließen Sie Ihren Dialogflow-Bot an Ihren Posteingang an. Lassen Sie die Bots die Abfragen bearbeiten, bevor Sie ihn an den Kundendienst-Agent übergeben."
diff --git a/config/locales/el.yml b/config/locales/el.yml
index 02920b0847d..67d75369f71 100644
--- a/config/locales/el.yml
+++ b/config/locales/el.yml
@@ -76,3 +76,6 @@ el:
webhooks:
name: "Webhooks"
description: "Τα συμβάντα Webhook μας εφοδιάζουν με πληροφορίες πραγματικού χρόνου σχετικά με το τι συμβαίνει στο λογαριασμό σας. Μπορείτε να χρησιμοποιήσετε τα webhooks για να μεταφέρετε τα συμβάντα σε άλλες εφαρμογές ή υπηρεσίες όπως το Slack ή Github. Πατήστε στην Διαμόρφωση για να ενημερώστε τα δικά σας webhooks."
+ dialogflow:
+ name: "Dialogflow"
+ description: "Συνδέστε το Dialogflow bot στα εισερχόμενά σας. Αφήστε τα bots να χειριστούν τα ερωτήματα πριν τα παραδώσουν στον πράκτορα εξυπηρέτησης πελατών."
diff --git a/config/locales/en.yml b/config/locales/en.yml
index b0aa0ef5343..ecea2c545cf 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -93,3 +93,6 @@ en:
webhooks:
name: "Webhooks"
description: "Webhook events provide you the realtime information about what's happening in your account. You can make use of the webhooks to communicate the events to your favourite apps like Slack or Github. Click on Configure to set up your webhooks."
+ dialogflow:
+ name: "Dialogflow"
+ description: "Connect your Dialogflow bot to your inbox. Let the bots handle the queries before handing it off to the customer service agent."
diff --git a/config/locales/es.yml b/config/locales/es.yml
index 2a88d4fabd8..d767c65648e 100644
--- a/config/locales/es.yml
+++ b/config/locales/es.yml
@@ -76,3 +76,6 @@ es:
webhooks:
name: "Webhook"
description: "Los eventos Webhook le proporcionan información en tiempo real sobre lo que está sucediendo en su cuenta de Chatwoot. Puede hacer uso de los webhooks para comunicar los eventos a sus aplicaciones favoritas como Slack o Github. Haga clic en Configurar para configurar sus webhooks."
+ dialogflow:
+ name: "Dialogflow"
+ description: "Conecte su bot de Dialogflow a su bandeja de entrada. Deje que los bots manejen las preguntas antes de entregarlo al agente de servicio al cliente."
diff --git a/config/locales/fa.yml b/config/locales/fa.yml
index 171f10b30c9..c54f88eee29 100644
--- a/config/locales/fa.yml
+++ b/config/locales/fa.yml
@@ -76,3 +76,6 @@ fa:
webhooks:
name: "وب هوک"
description: "رویدادهای Webhook اطلاعات واقعی در مورد آنچه در حساب شما اتفاق می افتد را به شما ارائه می دهند. برای برقراری ارتباط رویدادها با برنامه های مورد علاقه خود مانند Slack یا Github می توانید از وب بوک ها استفاده کنید. برای تنظیم webhooks خود روی تنظیمات کلیک کنید."
+ dialogflow:
+ name: "Dialogflow"
+ description: "Connect your Dialogflow bot to your inbox. Let the bots handle the queries before handing it off to the customer service agent."
diff --git a/config/locales/fi.yml b/config/locales/fi.yml
index 57e2f530e06..f4e8acc24f6 100644
--- a/config/locales/fi.yml
+++ b/config/locales/fi.yml
@@ -76,3 +76,6 @@ fi:
webhooks:
name: "Webhookit"
description: "Webhook-tapahtumat antavat sinulle reaaliaikaista tietoa siitä, mitä Chatwoot-tililläsi tapahtuu. Voit käyttää webhookeja ja välittää tapahtumat suosikkiohjelmillesi, kuten Slackiin tai Githubiiin. Klikkaa \"Määrittele\" määrittääksesi webhookisi."
+ dialogflow:
+ name: "Dialogflow"
+ description: "Connect your Dialogflow bot to your inbox. Let the bots handle the queries before handing it off to the customer service agent."
diff --git a/config/locales/fr.yml b/config/locales/fr.yml
index c61e3f6cfcd..be61cd96403 100644
--- a/config/locales/fr.yml
+++ b/config/locales/fr.yml
@@ -76,3 +76,6 @@ fr:
webhooks:
name: "Webhooks"
description: "Les événements Webhook vous fournissent des informations en temps réel sur ce qui se passe dans votre compte. Vous pouvez utiliser les webhooks pour communiquer les événements à vos applications préférées comme Slack ou Github. Cliquez sur Configurer pour configurer vos webhooks."
+ dialogflow:
+ name: "Dialogflow"
+ description: "Connect your Dialogflow bot to your inbox. Let the bots handle the queries before handing it off to the customer service agent."
diff --git a/config/locales/hi.yml b/config/locales/hi.yml
index f41c4124a78..e95095e695a 100644
--- a/config/locales/hi.yml
+++ b/config/locales/hi.yml
@@ -76,3 +76,6 @@ hi:
webhooks:
name: "Webhooks"
description: "Webhook events provide you the realtime information about what's happening in your account. You can make use of the webhooks to communicate the events to your favourite apps like Slack or Github. Click on Configure to set up your webhooks."
+ dialogflow:
+ name: "Dialogflow"
+ description: "Connect your Dialogflow bot to your inbox. Let the bots handle the queries before handing it off to the customer service agent."
diff --git a/config/locales/hu.yml b/config/locales/hu.yml
index af9d466f170..39fba03171b 100644
--- a/config/locales/hu.yml
+++ b/config/locales/hu.yml
@@ -76,3 +76,6 @@ hu:
webhooks:
name: "Webhook"
description: "A Webhook események valós idejű információt adnak arról, hogy mi történik a fiókodban. Webhookokat használhatsz arra, hogy az eseményeket a kedvenc appjaidban, pl. a Slackben vagy a Githubban használd. Kattints hogy beállíthast a Webhookjaidat."
+ dialogflow:
+ name: "Dialogflow"
+ description: "Connect your Dialogflow bot to your inbox. Let the bots handle the queries before handing it off to the customer service agent."
diff --git a/config/locales/id.yml b/config/locales/id.yml
index 4ccdf3b6243..17a3dafd01a 100644
--- a/config/locales/id.yml
+++ b/config/locales/id.yml
@@ -76,3 +76,6 @@ id:
webhooks:
name: "Webhooks"
description: "Webhook event memberi Anda informasi realtime tentang apa yang terjadi di akun Anda. Anda dapat menggunakan webhook untuk mengkomunikasikan acara ke aplikasi favorit Anda seperti Slack atau GitHub. Klik Konfigurasi untuk mengatur webhook Anda."
+ dialogflow:
+ name: "Dialogflow"
+ description: "Connect your Dialogflow bot to your inbox. Let the bots handle the queries before handing it off to the customer service agent."
diff --git a/config/locales/it.yml b/config/locales/it.yml
index 94236ea9b9c..2f3a35229ae 100644
--- a/config/locales/it.yml
+++ b/config/locales/it.yml
@@ -76,3 +76,6 @@ it:
webhooks:
name: "Webhooks"
description: "Webhook events provide you the realtime information about what's happening in your account. You can make use of the webhooks to communicate the events to your favourite apps like Slack or Github. Click on Configure to set up your webhooks."
+ dialogflow:
+ name: "Dialogflow"
+ description: "Connect your Dialogflow bot to your inbox. Let the bots handle the queries before handing it off to the customer service agent."
diff --git a/config/locales/ja.yml b/config/locales/ja.yml
index d7687a12fb4..2363623c98a 100644
--- a/config/locales/ja.yml
+++ b/config/locales/ja.yml
@@ -76,3 +76,6 @@ ja:
webhooks:
name: "Webhooks"
description: "Webhook events provide you the realtime information about what's happening in your account. You can make use of the webhooks to communicate the events to your favourite apps like Slack or Github. Click on Configure to set up your webhooks."
+ dialogflow:
+ name: "Dialogflow"
+ description: "Connect your Dialogflow bot to your inbox. Let the bots handle the queries before handing it off to the customer service agent."
diff --git a/config/locales/ko.yml b/config/locales/ko.yml
index ace331ca378..3855ac9bb7f 100644
--- a/config/locales/ko.yml
+++ b/config/locales/ko.yml
@@ -76,3 +76,6 @@ ko:
webhooks:
name: "Webhooks"
description: "Webhook events provide you the realtime information about what's happening in your account. You can make use of the webhooks to communicate the events to your favourite apps like Slack or Github. Click on Configure to set up your webhooks."
+ dialogflow:
+ name: "Dialogflow"
+ description: "Connect your Dialogflow bot to your inbox. Let the bots handle the queries before handing it off to the customer service agent."
diff --git a/config/locales/ml.yml b/config/locales/ml.yml
index 51f8de55037..f0468010eeb 100644
--- a/config/locales/ml.yml
+++ b/config/locales/ml.yml
@@ -76,3 +76,6 @@ ml:
webhooks:
name: "Webhooks"
description: "Webhook events provide you the realtime information about what's happening in your account. You can make use of the webhooks to communicate the events to your favourite apps like Slack or Github. Click on Configure to set up your webhooks."
+ dialogflow:
+ name: "Dialogflow"
+ description: "Connect your Dialogflow bot to your inbox. Let the bots handle the queries before handing it off to the customer service agent."
diff --git a/config/locales/ne.yml b/config/locales/ne.yml
index 6f22d1f4ae0..99d2afd988b 100644
--- a/config/locales/ne.yml
+++ b/config/locales/ne.yml
@@ -76,3 +76,6 @@ ne:
webhooks:
name: "Webhooks"
description: "Webhook events provide you the realtime information about what's happening in your account. You can make use of the webhooks to communicate the events to your favourite apps like Slack or Github. Click on Configure to set up your webhooks."
+ dialogflow:
+ name: "Dialogflow"
+ description: "Connect your Dialogflow bot to your inbox. Let the bots handle the queries before handing it off to the customer service agent."
diff --git a/config/locales/nl.yml b/config/locales/nl.yml
index ec9e86c9c8b..76c42c075b2 100644
--- a/config/locales/nl.yml
+++ b/config/locales/nl.yml
@@ -76,3 +76,6 @@ nl:
webhooks:
name: "Webhooks"
description: "Webhook events provide you the realtime information about what's happening in your account. You can make use of the webhooks to communicate the events to your favourite apps like Slack or Github. Click on Configure to set up your webhooks."
+ dialogflow:
+ name: "Dialogflow"
+ description: "Connect your Dialogflow bot to your inbox. Let the bots handle the queries before handing it off to the customer service agent."
diff --git a/config/locales/no.yml b/config/locales/no.yml
index 81923a706ac..d8a99d27196 100644
--- a/config/locales/no.yml
+++ b/config/locales/no.yml
@@ -76,3 +76,6 @@
webhooks:
name: "Webhooks"
description: "Webhook-hendelser gir deg sanntidsinformasjon om hva som skjer med kontoen din. Du kan bruke webhooks for å sende hendelsene til favorittappene dine, som Slack eller Github. Klikk på Konfigurer for å sette opp webhooks."
+ dialogflow:
+ name: "Dialogflow"
+ description: "Connect your Dialogflow bot to your inbox. Let the bots handle the queries before handing it off to the customer service agent."
diff --git a/config/locales/pl.yml b/config/locales/pl.yml
index e814d271831..38fada5d383 100644
--- a/config/locales/pl.yml
+++ b/config/locales/pl.yml
@@ -30,10 +30,10 @@ pl:
reports:
period: Okres raportowania od %{since} do %{until}
agent_csv:
- agent_name: Agent name
- conversations_count: Conversations count
- avg_first_response_time: Avg first response time (Minutes)
- avg_resolution_time: Avg resolution time (Minutes)
+ agent_name: Nazwa agenta
+ conversations_count: Liczba rozmów
+ avg_first_response_time: Średni czas pierwszej odpowiedzi (minuty)
+ avg_resolution_time: Średni czas do rozwiązania problemu (minuty)
notifications:
notification_title:
conversation_creation: "[Nowa rozmowa] - #%{display_id} został utworzony w %{inbox_name}"
@@ -47,7 +47,7 @@ pl:
status:
resolved: "Rozmowa została oznaczona przez %{user_name}"
open: "Rozmowa została ponownie otwarta przez %{user_name}"
- bot: "Conversation was transferred to bot by %{user_name}"
+ bot: "Rozmowa została przeniesiona do bota przez %{user_name}"
auto_resolved: "Rozmowa została oznaczona przez system jako rozwiązana z powodu %{duration} dni bezczynności"
assignee:
self_assigned: "%{user_name} przypisał się do tej rozmowy"
@@ -72,7 +72,10 @@ pl:
integration_apps:
slack:
name: "Slack"
- description: "Slack is a chat tool that brings all your communication together in one place. By integrating Slack, you can get notified of all the new conversations in your account right inside your Slack."
+ description: "Slack to narzędzie czatu, które łączy całą Twoją komunikację w jednym miejscu. Integrując Slack, możesz otrzymywać powiadomienia o wszystkich nowych rozmowach na swoim koncie bezpośrednio wewnątrz Slack."
webhooks:
- name: "Webhooks"
- description: "Webhook events provide you the realtime information about what's happening in your account. You can make use of the webhooks to communicate the events to your favourite apps like Slack or Github. Click on Configure to set up your webhooks."
+ name: "Webhooki"
+ description: "Webhooki dostarczają informacji o tym, co dzieje się na Twoim koncie do usług zewnętrznych. Możesz wykorzystać webhooki do przekazywania wydarzeń do ulubionych aplikacji, takich jak Slack lub Github. Kliknij na Konfiguruj, aby skonfigurować webhooki."
+ dialogflow:
+ name: "Dialogflow"
+ description: "Connect your Dialogflow bot to your inbox. Let the bots handle the queries before handing it off to the customer service agent."
diff --git a/config/locales/pt.yml b/config/locales/pt.yml
index 814512cc567..dc41ca866fa 100644
--- a/config/locales/pt.yml
+++ b/config/locales/pt.yml
@@ -76,3 +76,6 @@ pt:
webhooks:
name: "Webhooks"
description: "Webhook events provide you the realtime information about what's happening in your account. You can make use of the webhooks to communicate the events to your favourite apps like Slack or Github. Click on Configure to set up your webhooks."
+ dialogflow:
+ name: "Dialogflow"
+ description: "Connect your Dialogflow bot to your inbox. Let the bots handle the queries before handing it off to the customer service agent."
diff --git a/config/locales/pt_BR.yml b/config/locales/pt_BR.yml
index 5183116f548..a05d1400af4 100644
--- a/config/locales/pt_BR.yml
+++ b/config/locales/pt_BR.yml
@@ -47,7 +47,7 @@ pt_BR:
status:
resolved: "Conversa foi marcada como resolvida por %{user_name}"
open: "Conversa foi reaberta por %{user_name}"
- bot: "Conversation was transferred to bot by %{user_name}"
+ bot: "Conversa foi marcada como resolvida por %{user_name}"
auto_resolved: "Conversa foi marcada como resolvida pelo sistema por ter %{duration} dias de inatividade"
assignee:
self_assigned: "%{user_name} atribuiu a si mesmo essa conversa"
@@ -76,3 +76,6 @@ pt_BR:
webhooks:
name: "Webhooks"
description: "Webhooks fornecem informações em tempo real sobre o que está acontecendo em sua conta. Você pode usar os webhooks para comunicar eventos com seus aplicativos favoritos como Slack ou Github. Clique em Configurar para configurar seus webhooks."
+ dialogflow:
+ name: "Dialogflow"
+ description: "Connect your Dialogflow bot to your inbox. Let the bots handle the queries before handing it off to the customer service agent."
diff --git a/config/locales/ro.yml b/config/locales/ro.yml
index 1e0d5f5023b..17d69bea50d 100644
--- a/config/locales/ro.yml
+++ b/config/locales/ro.yml
@@ -76,3 +76,6 @@ ro:
webhooks:
name: "Webhooks"
description: "Webhook events provide you the realtime information about what's happening in your account. You can make use of the webhooks to communicate the events to your favourite apps like Slack or Github. Click on Configure to set up your webhooks."
+ dialogflow:
+ name: "Dialogflow"
+ description: "Connect your Dialogflow bot to your inbox. Let the bots handle the queries before handing it off to the customer service agent."
diff --git a/config/locales/ru.yml b/config/locales/ru.yml
index 229abee83be..ff3f8693cbf 100644
--- a/config/locales/ru.yml
+++ b/config/locales/ru.yml
@@ -30,16 +30,16 @@ ru:
reports:
period: Отчётный период с %{since} по %{until}
agent_csv:
- agent_name: Agent name
- conversations_count: Conversations count
- avg_first_response_time: Avg first response time (Minutes)
- avg_resolution_time: Avg resolution time (Minutes)
+ agent_name: Имя оператора
+ conversations_count: Количество бесед
+ avg_first_response_time: Среднее время первого ответа (в минутах)
+ avg_resolution_time: Среднее время решения (в минутах)
notifications:
notification_title:
- conversation_creation: "[New conversation] - #%{display_id} has been created in %{inbox_name}"
- conversation_assignment: "[Assigned to you] - #%{display_id} has been assigned to you"
- assigned_conversation_new_message: "[New message] - #%{display_id} %{content}"
- conversation_mention: "You have been mentioned in conversation [ID - %{display_id}] by %{name}"
+ conversation_creation: "[Новая беседа] - #%{display_id} была создана в %{inbox_name}"
+ conversation_assignment: "[Назначено Вам] - #%{display_id} была назначена Вам"
+ assigned_conversation_new_message: "[Новое сообщение] - #%{display_id} %{content}"
+ conversation_mention: "Вас упомянули в разговоре [ID - %{display_id}] %{name}"
conversations:
messages:
deleted: Это сообщение было удалено
@@ -47,7 +47,7 @@ ru:
status:
resolved: "%{user_name} завершил диалог"
open: "%{user_name} открыл заново диалог"
- bot: "Conversation was transferred to bot by %{user_name}"
+ bot: "Разговор передан боту %{user_name}"
auto_resolved: "Разговор был помечен системой решённым из-за неактивности в течение %{duration} дней"
assignee:
self_assigned: "%{user_name} назначил(а) разговор себе"
@@ -55,8 +55,8 @@ ru:
removed: "Ответственный снят %{user_name}"
team:
assigned: "%{user_name} назначил %{team_name} ответственным"
- assigned_with_assignee: "Assigned to %{assignee_name} via %{team_name} by %{user_name}"
- removed: "Unassigned from %{team_name} by %{user_name}"
+ assigned_with_assignee: "%{user_name} назначил %{assignee_name} в %{team_name}"
+ removed: "%{user_name} исключил из %{team_name}"
labels:
added: "%{user_name} добавил %{labels}"
removed: "%{user_name} удалил %{labels}"
@@ -76,3 +76,6 @@ ru:
webhooks:
name: "Webhooks"
description: "События webhook позволяют получать информацию о происходящем в вашем аккаунте в реальном времени. Вы можете использовать webhook в связке с вашими приложениями, такими как Slack или Github. Нажмите на Настроить для настройки webhook."
+ dialogflow:
+ name: "Диалог"
+ description: "Подключите бот к диалогам вашего канала. Предоставьте ботам доступ к обработке запросов, прежде чем для предварительного общения с вашими операторами."
diff --git a/config/locales/sk.yml b/config/locales/sk.yml
index 2bbe9eee2f3..536a7ee66e7 100644
--- a/config/locales/sk.yml
+++ b/config/locales/sk.yml
@@ -76,3 +76,6 @@ sk:
webhooks:
name: "Webhooks"
description: "Webhook events provide you the realtime information about what's happening in your account. You can make use of the webhooks to communicate the events to your favourite apps like Slack or Github. Click on Configure to set up your webhooks."
+ dialogflow:
+ name: "Dialogflow"
+ description: "Connect your Dialogflow bot to your inbox. Let the bots handle the queries before handing it off to the customer service agent."
diff --git a/config/locales/sv.yml b/config/locales/sv.yml
index ab213a3a3ef..7f79452e477 100644
--- a/config/locales/sv.yml
+++ b/config/locales/sv.yml
@@ -76,3 +76,6 @@ sv:
webhooks:
name: "Webhookar"
description: "Webhook-händelser ger dig realtidsinformation om vad som händer i ditt konto. Du kan använda webhooks för att kommunicera händelser till dina favoritappar som Slack eller Github. Klicka på Konfigurera för att konfigurera dina webhooks."
+ dialogflow:
+ name: "Dialogflow"
+ description: "Connect your Dialogflow bot to your inbox. Let the bots handle the queries before handing it off to the customer service agent."
diff --git a/config/locales/ta.yml b/config/locales/ta.yml
index 7369f335c27..7f9426cfc1c 100644
--- a/config/locales/ta.yml
+++ b/config/locales/ta.yml
@@ -76,3 +76,6 @@ ta:
webhooks:
name: "Webhooks"
description: "Webhook events provide you the realtime information about what's happening in your account. You can make use of the webhooks to communicate the events to your favourite apps like Slack or Github. Click on Configure to set up your webhooks."
+ dialogflow:
+ name: "Dialogflow"
+ description: "Connect your Dialogflow bot to your inbox. Let the bots handle the queries before handing it off to the customer service agent."
diff --git a/config/locales/th.yml b/config/locales/th.yml
index 2eb2f79212e..033ad1621ec 100644
--- a/config/locales/th.yml
+++ b/config/locales/th.yml
@@ -76,3 +76,6 @@ th:
webhooks:
name: "Webhooks"
description: "Webhook events provide you the realtime information about what's happening in your account. You can make use of the webhooks to communicate the events to your favourite apps like Slack or Github. Click on Configure to set up your webhooks."
+ dialogflow:
+ name: "Dialogflow"
+ description: "Connect your Dialogflow bot to your inbox. Let the bots handle the queries before handing it off to the customer service agent."
diff --git a/config/locales/tr.yml b/config/locales/tr.yml
index b02ca4ccf9a..1f57cc43657 100644
--- a/config/locales/tr.yml
+++ b/config/locales/tr.yml
@@ -76,3 +76,6 @@ tr:
webhooks:
name: "Webhooks"
description: "Webhook olayları size hesabınızda gerçekleşen gerçek zamanlı bilgileri getirmenizi sağlar. Bu webhookları kullanarak olaylar ile favori uygulamalarınızı haberleştirebilirsiniz(ör: Slack , \n Github). Yapılandıra basarak webhooklarınızı ayarlayabilirsiniz."
+ dialogflow:
+ name: "Dialogflow"
+ description: "Connect your Dialogflow bot to your inbox. Let the bots handle the queries before handing it off to the customer service agent."
diff --git a/config/locales/uk.yml b/config/locales/uk.yml
index df85b146fd5..df363f2711d 100644
--- a/config/locales/uk.yml
+++ b/config/locales/uk.yml
@@ -76,3 +76,6 @@ uk:
webhooks:
name: "Webhooks"
description: "Webhook events provide you the realtime information about what's happening in your account. You can make use of the webhooks to communicate the events to your favourite apps like Slack or Github. Click on Configure to set up your webhooks."
+ dialogflow:
+ name: "Dialogflow"
+ description: "Connect your Dialogflow bot to your inbox. Let the bots handle the queries before handing it off to the customer service agent."
diff --git a/config/locales/vi.yml b/config/locales/vi.yml
index 3a8ed10a62e..6e05c301179 100644
--- a/config/locales/vi.yml
+++ b/config/locales/vi.yml
@@ -76,3 +76,6 @@ vi:
webhooks:
name: "Webhooks"
description: "Webhook events provide you the realtime information about what's happening in your account. You can make use of the webhooks to communicate the events to your favourite apps like Slack or Github. Click on Configure to set up your webhooks."
+ dialogflow:
+ name: "Dialogflow"
+ description: "Connect your Dialogflow bot to your inbox. Let the bots handle the queries before handing it off to the customer service agent."
diff --git a/config/locales/zh_CN.yml b/config/locales/zh_CN.yml
index acd97eb73cf..6caff7a9829 100644
--- a/config/locales/zh_CN.yml
+++ b/config/locales/zh_CN.yml
@@ -76,3 +76,6 @@ zh_CN:
webhooks:
name: "Webhooks"
description: "Webhook events provide you the realtime information about what's happening in your account. You can make use of the webhooks to communicate the events to your favourite apps like Slack or Github. Click on Configure to set up your webhooks."
+ dialogflow:
+ name: "Dialogflow"
+ description: "Connect your Dialogflow bot to your inbox. Let the bots handle the queries before handing it off to the customer service agent."
diff --git a/config/locales/zh_TW.yml b/config/locales/zh_TW.yml
index ad65ca1240a..cc2f1bdd5e9 100644
--- a/config/locales/zh_TW.yml
+++ b/config/locales/zh_TW.yml
@@ -30,10 +30,10 @@ zh_TW:
reports:
period: Reporting period %{since} to %{until}
agent_csv:
- agent_name: Agent name
- conversations_count: Conversations count
- avg_first_response_time: Avg first response time (Minutes)
- avg_resolution_time: Avg resolution time (Minutes)
+ agent_name: 客服名稱
+ conversations_count: 對話數量
+ avg_first_response_time: 平均第一次回覆時間(分鐘)
+ avg_resolution_time: 平均解決時間(分鐘)
notifications:
notification_title:
conversation_creation: "[New conversation] - #%{display_id} has been created in %{inbox_name}"
@@ -76,3 +76,6 @@ zh_TW:
webhooks:
name: "Webhooks"
description: "Webhook events provide you the realtime information about what's happening in your account. You can make use of the webhooks to communicate the events to your favourite apps like Slack or Github. Click on Configure to set up your webhooks."
+ dialogflow:
+ name: "Dialogflow"
+ description: "Connect your Dialogflow bot to your inbox. Let the bots handle the queries before handing it off to the customer service agent."
diff --git a/config/routes.rb b/config/routes.rb
index 74a778d554c..140e19400cd 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -42,6 +42,8 @@ Rails.application.routes.draw do
end
end
resources :canned_responses, except: [:show, :edit, :new]
+ resources :campaigns, only: [:index, :create, :show, :update]
+
namespace :channels do
resource :twilio_channel, only: [:create]
end
@@ -89,6 +91,7 @@ Rails.application.routes.draw do
resources :inboxes, only: [:index, :create, :update, :destroy] do
get :assignable_agents, on: :member
+ get :campaigns, on: :member
post :set_agent_bot, on: :member
end
resources :inbox_members, only: [:create, :show], param: :inbox_id
@@ -118,6 +121,7 @@ Rails.application.routes.draw do
resources :webhooks, except: [:show]
namespace :integrations do
resources :apps, only: [:index, :show]
+ resources :hooks, only: [:create, :update, :destroy]
resource :slack, only: [:create, :update, :destroy], controller: 'slack'
end
resources :working_hours, only: [:update]
@@ -145,6 +149,7 @@ Rails.application.routes.draw do
resources :agent_bots, only: [:index]
namespace :widget do
+ resources :campaigns, only: [:index]
resources :events, only: [:create]
resources :messages, only: [:index, :create, :update]
resources :conversations, only: [:index, :create] do
diff --git a/db/migrate/20210306170117_add_last_activity_at_to_contacts.rb b/db/migrate/20210306170117_add_last_activity_at_to_contacts.rb
new file mode 100644
index 00000000000..b35c064fce2
--- /dev/null
+++ b/db/migrate/20210306170117_add_last_activity_at_to_contacts.rb
@@ -0,0 +1,22 @@
+class AddLastActivityAtToContacts < ActiveRecord::Migration[6.0]
+ def up
+ # rubocop:disable Rails/SkipsModelValidations
+ add_column :contacts, :last_activity_at, :datetime, index: true, default: nil
+ Conversation.find_in_batches do |conversation_batch|
+ conversation_batch.each do |conversation|
+ contact = conversation.contact
+ if contact.last_activity_at.nil? || conversation.updated_at > contact.last_activity_at
+ contact.update_columns(last_activity_at: conversation.updated_at)
+ end
+ end
+ end
+
+ Contact.where(additional_attributes: nil).update_all(additional_attributes: {})
+ Contact.where(phone_number: '').update_all(phone_number: nil)
+ # rubocop:enable Rails/SkipsModelValidations
+ end
+
+ def down
+ remove_column :contacts, :last_activity_at, :datetime, index: true, default: nil
+ end
+end
diff --git a/db/migrate/20210425093724_convert_integration_hook_settings_field.rb b/db/migrate/20210425093724_convert_integration_hook_settings_field.rb
new file mode 100644
index 00000000000..3ba02129199
--- /dev/null
+++ b/db/migrate/20210425093724_convert_integration_hook_settings_field.rb
@@ -0,0 +1,6 @@
+class ConvertIntegrationHookSettingsField < ActiveRecord::Migration[6.0]
+ def change
+ remove_column :integrations_hooks, :settings, :text
+ add_column :integrations_hooks, :settings, :jsonb, default: {}
+ end
+end
diff --git a/db/migrate/20210426191914_migration_remove_locked_from_conversation.rb b/db/migrate/20210426191914_migration_remove_locked_from_conversation.rb
new file mode 100644
index 00000000000..402935f2889
--- /dev/null
+++ b/db/migrate/20210426191914_migration_remove_locked_from_conversation.rb
@@ -0,0 +1,5 @@
+class MigrationRemoveLockedFromConversation < ActiveRecord::Migration[6.0]
+ def change
+ remove_column :conversations, :locked, :boolean
+ end
+end
diff --git a/db/migrate/20210428135041_add_campaigns.rb b/db/migrate/20210428135041_add_campaigns.rb
new file mode 100644
index 00000000000..7df93a347b6
--- /dev/null
+++ b/db/migrate/20210428135041_add_campaigns.rb
@@ -0,0 +1,18 @@
+class AddCampaigns < ActiveRecord::Migration[6.0]
+ def change
+ create_table :campaigns do |t|
+ t.integer :display_id, null: false
+ t.string :title, null: false
+ t.text :description
+ t.text :content, null: false
+ t.integer :sender_id
+ t.boolean :enabled, default: true
+ t.references :account, null: false, foreign_key: true
+ t.references :inbox, null: false, foreign_key: true
+ t.column :trigger_rules, :jsonb, default: {}
+ t.timestamps
+ end
+
+ add_reference :conversations, :campaign, foreign_key: true
+ end
+end
diff --git a/db/migrate/20210428151147_create_triggers_accounts_insert_or_campaigns_insert.rb b/db/migrate/20210428151147_create_triggers_accounts_insert_or_campaigns_insert.rb
new file mode 100644
index 00000000000..3fdc4f18ee2
--- /dev/null
+++ b/db/migrate/20210428151147_create_triggers_accounts_insert_or_campaigns_insert.rb
@@ -0,0 +1,28 @@
+# This migration was auto-generated via `rake db:generate_trigger_migration'.
+# While you can edit this file, any changes you make to the definitions here
+# will be undone by the next auto-generated trigger migration.
+
+class CreateTriggersAccountsInsertOrCampaignsInsert < ActiveRecord::Migration[6.0]
+ def up
+ create_trigger('camp_dpid_before_insert', generated: true, compatibility: 1)
+ .on('accounts')
+ .name('camp_dpid_before_insert')
+ .after(:insert)
+ .for_each(:row) do
+ "execute format('create sequence IF NOT EXISTS camp_dpid_seq_%s', NEW.id);"
+ end
+
+ create_trigger('campaigns_before_insert_row_tr', generated: true, compatibility: 1)
+ .on('campaigns')
+ .before(:insert)
+ .for_each(:row) do
+ "NEW.display_id := nextval('camp_dpid_seq_' || NEW.account_id);"
+ end
+ end
+
+ def down
+ drop_trigger('camp_dpid_before_insert', 'accounts', generated: true)
+
+ drop_trigger('campaigns_before_insert_row_tr', 'campaigns', generated: true)
+ end
+end
diff --git a/db/migrate/20210430095748_add_camp_dp_id_seq_for_existing_accounts.rb b/db/migrate/20210430095748_add_camp_dp_id_seq_for_existing_accounts.rb
new file mode 100644
index 00000000000..1b37e834592
--- /dev/null
+++ b/db/migrate/20210430095748_add_camp_dp_id_seq_for_existing_accounts.rb
@@ -0,0 +1,20 @@
+class AddCampDpIdSeqForExistingAccounts < ActiveRecord::Migration[6.0]
+ def up
+ ::Account.find_in_batches do |accounts_batch|
+ Rails.logger.info "migrated till #{accounts_batch.first.id}\n"
+ accounts_batch.each do |account|
+ display_id = account.campaigns.count
+ ActiveRecord::Base.connection.exec_query("create sequence IF NOT EXISTS camp_dpid_seq_#{account.id} START #{display_id + 1}")
+ end
+ end
+ end
+
+ def down
+ ::Account.find_in_batches do |accounts_batch|
+ Rails.logger.info "migrated till #{accounts_batch.first.id}\n"
+ accounts_batch.each do |account|
+ ActiveRecord::Base.connection.exec_query("drop sequence IF EXISTS camp_dpid_seq_#{account.id}")
+ end
+ end
+ end
+end
diff --git a/db/migrate/20210430100138_rename_campaign_content_to_message.rb b/db/migrate/20210430100138_rename_campaign_content_to_message.rb
new file mode 100644
index 00000000000..161ef299e45
--- /dev/null
+++ b/db/migrate/20210430100138_rename_campaign_content_to_message.rb
@@ -0,0 +1,5 @@
+class RenameCampaignContentToMessage < ActiveRecord::Migration[6.0]
+ def change
+ rename_column :campaigns, :content, :message
+ end
+end
diff --git a/db/migrate/20210513083044_remove_not_null_from_webhook_url_channel_api.rb b/db/migrate/20210513083044_remove_not_null_from_webhook_url_channel_api.rb
new file mode 100644
index 00000000000..790c52ec5d2
--- /dev/null
+++ b/db/migrate/20210513083044_remove_not_null_from_webhook_url_channel_api.rb
@@ -0,0 +1,5 @@
+class RemoveNotNullFromWebhookUrlChannelApi < ActiveRecord::Migration[6.0]
+ def change
+ change_column :channel_api, :webhook_url, :string, null: true
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index 13c8a69a1df..60f080d5c83 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.
-ActiveRecord::Schema.define(version: 2021_03_15_101919) do
+ActiveRecord::Schema.define(version: 2021_05_13_083044) do
# These are extensions that must be enabled in order to support this database
enable_extension "pg_stat_statements"
@@ -113,6 +113,22 @@ ActiveRecord::Schema.define(version: 2021_03_15_101919) do
t.string "extension"
end
+ create_table "campaigns", force: :cascade do |t|
+ t.integer "display_id", null: false
+ t.string "title", null: false
+ t.text "description"
+ t.text "message", null: false
+ t.integer "sender_id"
+ t.boolean "enabled", default: true
+ t.bigint "account_id", null: false
+ t.bigint "inbox_id", null: false
+ t.jsonb "trigger_rules", default: {}
+ t.datetime "created_at", precision: 6, null: false
+ t.datetime "updated_at", precision: 6, null: false
+ t.index ["account_id"], name: "index_campaigns_on_account_id"
+ t.index ["inbox_id"], name: "index_campaigns_on_inbox_id"
+ end
+
create_table "canned_responses", id: :serial, force: :cascade do |t|
t.integer "account_id", null: false
t.string "short_code"
@@ -123,7 +139,7 @@ ActiveRecord::Schema.define(version: 2021_03_15_101919) do
create_table "channel_api", force: :cascade do |t|
t.integer "account_id", null: false
- t.string "webhook_url", null: false
+ t.string "webhook_url"
t.datetime "created_at", precision: 6, null: false
t.datetime "updated_at", precision: 6, null: false
end
@@ -212,6 +228,7 @@ ActiveRecord::Schema.define(version: 2021_03_15_101919) do
t.jsonb "additional_attributes", default: {}
t.string "identifier"
t.jsonb "custom_attributes", default: {}
+ t.datetime "last_activity_at"
t.index ["account_id"], name: "index_contacts_on_account_id"
t.index ["email", "account_id"], name: "uniq_email_per_account_contact", unique: true
t.index ["identifier", "account_id"], name: "uniq_identifier_per_account_contact", unique: true
@@ -229,15 +246,16 @@ ActiveRecord::Schema.define(version: 2021_03_15_101919) do
t.integer "display_id", null: false
t.datetime "contact_last_seen_at"
t.datetime "agent_last_seen_at"
- t.boolean "locked", default: false
t.jsonb "additional_attributes", default: {}
t.bigint "contact_inbox_id"
t.uuid "uuid", default: -> { "gen_random_uuid()" }, null: false
t.string "identifier"
t.datetime "last_activity_at", default: -> { "CURRENT_TIMESTAMP" }, null: false
t.bigint "team_id"
+ t.bigint "campaign_id"
t.index ["account_id", "display_id"], name: "index_conversations_on_account_id_and_display_id", unique: true
t.index ["account_id"], name: "index_conversations_on_account_id"
+ t.index ["campaign_id"], name: "index_conversations_on_campaign_id"
t.index ["contact_inbox_id"], name: "index_conversations_on_contact_inbox_id"
t.index ["team_id"], name: "index_conversations_on_team_id"
end
@@ -321,12 +339,12 @@ ActiveRecord::Schema.define(version: 2021_03_15_101919) do
t.integer "inbox_id"
t.integer "account_id"
t.string "app_id"
- t.text "settings"
t.integer "hook_type", default: 0
t.string "reference_id"
t.string "access_token"
t.datetime "created_at", precision: 6, null: false
t.datetime "updated_at", precision: 6, null: false
+ t.jsonb "settings", default: {}
end
create_table "kbase_articles", force: :cascade do |t|
@@ -593,8 +611,11 @@ ActiveRecord::Schema.define(version: 2021_03_15_101919) do
add_foreign_key "account_users", "accounts"
add_foreign_key "account_users", "users"
add_foreign_key "active_storage_attachments", "active_storage_blobs", column: "blob_id"
+ add_foreign_key "campaigns", "accounts"
+ add_foreign_key "campaigns", "inboxes"
add_foreign_key "contact_inboxes", "contacts"
add_foreign_key "contact_inboxes", "inboxes"
+ add_foreign_key "conversations", "campaigns"
add_foreign_key "conversations", "contact_inboxes"
add_foreign_key "conversations", "teams"
add_foreign_key "data_imports", "accounts"
@@ -615,4 +636,19 @@ ActiveRecord::Schema.define(version: 2021_03_15_101919) do
"NEW.display_id := nextval('conv_dpid_seq_' || NEW.account_id);"
end
+ create_trigger("camp_dpid_before_insert", :generated => true, :compatibility => 1).
+ on("accounts").
+ name("camp_dpid_before_insert").
+ after(:insert).
+ for_each(:row) do
+ "execute format('create sequence IF NOT EXISTS camp_dpid_seq_%s', NEW.id);"
+ end
+
+ create_trigger("campaigns_before_insert_row_tr", :generated => true, :compatibility => 1).
+ on("campaigns").
+ before(:insert).
+ for_each(:row) do
+ "NEW.display_id := nextval('camp_dpid_seq_' || NEW.account_id);"
+ end
+
end
diff --git a/db/seeds.rb b/db/seeds.rb
index 49227aef994..115a271086a 100644
--- a/db/seeds.rb
+++ b/db/seeds.rb
@@ -31,7 +31,7 @@ unless Rails.env.production?
inbox = Inbox.create!(channel: web_widget, account: account, name: 'Acme Support')
InboxMember.create!(user: user, inbox: inbox)
- contact = Contact.create!(name: 'jane', email: 'jane@example.com', phone_number: '0000', account: account)
+ contact = Contact.create!(name: 'jane', email: 'jane@example.com', phone_number: '+2320000', account: account)
contact_inbox = ContactInbox.create!(inbox: inbox, contact: contact, source_id: user.id, hmac_verified: true)
conversation = Conversation.create!(
account: account,
diff --git a/lib/events/types.rb b/lib/events/types.rb
index d6325537988..4d027f6f8f1 100644
--- a/lib/events/types.rb
+++ b/lib/events/types.rb
@@ -6,15 +6,20 @@ module Events::Types
ACCOUNT_CREATED = 'account.created'
#### Account Events ###
+ # campaign events
+ CAMPAIGN_TRIGGERED = 'campaign.triggered'
+
# channel events
WEBWIDGET_TRIGGERED = 'webwidget.triggered'
# conversation events
CONVERSATION_CREATED = 'conversation.created'
CONVERSATION_READ = 'conversation.read'
+ # FIXME: deprecate the opened and resolved events in future in favor of status changed event.
CONVERSATION_OPENED = 'conversation.opened'
CONVERSATION_RESOLVED = 'conversation.resolved'
- CONVERSATION_LOCK_TOGGLE = 'conversation.lock_toggle'
+
+ CONVERSATION_STATUS_CHANGED = 'conversation.status_changed'
CONVERSATION_CONTACT_CHANGED = 'conversation.contact_changed'
ASSIGNEE_CHANGED = 'assignee.changed'
TEAM_CHANGED = 'team.changed'
diff --git a/lib/integrations/dialogflow/processor_service.rb b/lib/integrations/dialogflow/processor_service.rb
new file mode 100644
index 00000000000..cb75bc78f36
--- /dev/null
+++ b/lib/integrations/dialogflow/processor_service.rb
@@ -0,0 +1,69 @@
+class Integrations::Dialogflow::ProcessorService
+ pattr_initialize [:event_name!, :hook!, :event_data!]
+
+ def perform
+ message = event_data[:message]
+ return if message.private?
+ return unless processable_message?(message)
+ return unless message.conversation.bot?
+
+ response = get_dialogflow_response(message.conversation.contact_inbox.source_id, message_content(message))
+ process_response(message, response)
+ end
+
+ private
+
+ def message_content(message)
+ return message.content_attributes['submitted_values'].first['value'] if event_name == 'message.updated'
+
+ message.content
+ end
+
+ def processable_message?(message)
+ return unless message.reportable?
+ return if message.outgoing? && !processable_outgoing_message?(message)
+
+ true
+ end
+
+ def processable_outgoing_message?(message)
+ event_name == 'message.updated' && ['input_select'].include?(message.content_type)
+ end
+
+ def get_dialogflow_response(session_id, message)
+ Google::Cloud::Dialogflow.configure { |config| config.credentials = hook.settings['credentials'] }
+ session_client = Google::Cloud::Dialogflow.sessions
+ session = session_client.session_path project: hook.settings['project_id'], session: session_id
+ query_input = { text: { text: message, language_code: 'en-US' } }
+ session_client.detect_intent session: session, query_input: query_input
+ end
+
+ def process_response(message, response)
+ text_response = response.query_result['fulfillment_text']
+
+ content_params = { content: text_response } if text_response.present?
+ content_params ||= response.query_result['fulfillment_messages'].first['payload'].to_h
+
+ process_action(message, content_params['action']) and return if content_params['action'].present?
+
+ create_conversation(message, content_params)
+ end
+
+ def create_conversation(message, content_params)
+ return if content_params.blank?
+
+ conversation = message.conversation
+ conversation.messages.create(content_params.merge({
+ message_type: :outgoing,
+ account_id: conversation.account_id,
+ inbox_id: conversation.inbox_id
+ }))
+ end
+
+ def process_action(message, action)
+ case action
+ when 'handoff'
+ message.conversation.open!
+ end
+ end
+end
diff --git a/lib/integrations/slack/hook_builder.rb b/lib/integrations/slack/hook_builder.rb
index 93bff965610..f898905fa2f 100644
--- a/lib/integrations/slack/hook_builder.rb
+++ b/lib/integrations/slack/hook_builder.rb
@@ -12,7 +12,6 @@ class Integrations::Slack::HookBuilder
access_token: token,
status: 'enabled',
inbox_id: params[:inbox_id],
- hook_type: hook_type,
app_id: 'slack'
)
diff --git a/package.json b/package.json
index 1b6054b88e4..de064438e26 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "@chatwoot/chatwoot",
- "version": "1.15.1",
+ "version": "1.16.0",
"license": "MIT",
"scripts": {
"eslint": "eslint app/javascript --fix",
@@ -9,88 +9,98 @@
"test:watch": "jest -w 1 --watch --no-cache",
"test:coverage": "jest -w 1 --no-cache --collectCoverage",
"webpacker-start": "webpack-dev-server -d --config webpack.dev.config.js --content-base public/ --progress --colors",
- "start:dev": "foreman start -f ./Procfile.dev"
+ "start:dev": "foreman start -f ./Procfile.dev",
+ "start:dev-overmind": "overmind start -f ./Procfile.dev",
+ "storybook": "start-storybook -p 6006",
+ "build-storybook": "build-storybook"
},
"dependencies": {
"@chatwoot/prosemirror-schema": "https://github.com/chatwoot/prosemirror-schema.git#7e8acadd10d7b932c0dc0bd0a18f804434f83517",
- "@rails/actioncable": "^6.0.0",
- "@rails/webpacker": "^5.2.0",
+ "@rails/actioncable": "6.1.3",
+ "@rails/webpacker": "5.3.0",
"@sentry/vue": "^5.30.0",
"axios": "^0.21.1",
"babel-plugin-syntax-jsx": "^6.18.0",
"babel-plugin-transform-vue-jsx": "^3.7.0",
"bourbon": "^6.0.0",
- "chart.js": "~2.5.0",
- "copy-text-to-clipboard": "^2.1.1",
- "core-js": "3",
+ "chart.js": "~2.9.4",
+ "copy-text-to-clipboard": "2.2.0",
+ "core-js": "3.11.0",
"country-code-emoji": "^1.0.0",
- "date-fns": "^2.16.1",
- "dompurify": "^2.2.6",
+ "date-fns": "2.21.1",
+ "dompurify": "2.2.7",
"dotenv": "^8.0.0",
"foundation-sites": "~6.5.3",
"highlight.js": "~10.4.1",
"ionicons": "~2.0.1",
"js-cookie": "^2.2.1",
"lodash.groupby": "^4.6.0",
- "marked": "^2.0.0",
+ "marked": "2.0.3",
"md5": "^2.3.0",
- "prosemirror-markdown": "^1.5.0",
- "prosemirror-state": "^1.3.3",
- "prosemirror-view": "^1.16.5",
+ "prosemirror-markdown": "1.5.1",
+ "prosemirror-state": "1.3.4",
+ "prosemirror-view": "1.18.4",
"query-string": "5",
- "semver": "^7.3.4",
+ "semver": "7.3.5",
"spinkit": "~1.2.5",
"tailwindcss": "^1.9.6",
"tween.js": "~16.6.0",
"url-loader": "^2.0.0",
"v-tooltip": "~2.1.3",
- "vue": "^2.6.0",
+ "vue": "2.6.12",
"vue-axios": "~1.2.2",
- "vue-chartjs": "^3.4.2",
+ "vue-chartjs": "3.5.1",
"vue-clickaway": "~2.1.0",
- "vue-color": "^2.7.1",
- "vue-easytable": "^2.1.2",
- "vue-i18n": "^8.22.1",
- "vue-loader": "^15.7.0",
+ "vue-color": "2.8.1",
+ "vue-easytable": "2.5.1",
+ "vue-i18n": "8.24.3",
+ "vue-loader": "15.9.6",
"vue-multiselect": "~2.1.6",
"vue-router": "~2.2.0",
- "vue-template-compiler": "^2.6.10",
- "vue-upload-component": "^2.8.20",
- "vuelidate": "~0.7.5",
+ "vue-template-compiler": "2.6.12",
+ "vue-upload-component": "2.8.22",
+ "vuelidate": "0.7.6",
"vuex": "~2.1.1",
"vuex-router-sync": "~4.1.2"
},
"devDependencies": {
- "@babel/core": "^7.9.0",
- "@babel/plugin-proposal-class-properties": "^7.8.3",
- "@babel/preset-env": "^7.9.5",
- "@vue/test-utils": "^1.0.0-beta.29",
+ "@babel/core": "7.13.16",
+ "@babel/plugin-proposal-class-properties": "7.13.0",
+ "@babel/preset-env": "7.13.15",
+ "@storybook/addon-actions": "6.2.9",
+ "@storybook/addon-docs": "^6.2.9",
+ "@storybook/addon-essentials": "6.2.9",
+ "@storybook/addon-links": "6.2.9",
+ "@storybook/addons": "6.2.9",
+ "@storybook/vue": "6.2.9",
+ "@vue/test-utils": "1.1.4",
"babel-core": "^7.0.0-bridge.0",
"babel-eslint": "^10.1.0",
"babel-helper-vue-jsx-merge-props": "^2.0.3",
- "babel-jest": "^25.3.0",
- "babel-loader": "^8.1.0",
- "cypress": "^4.10.0",
+ "babel-jest": "25.5.1",
+ "babel-loader": "8.2.2",
+ "babel-preset-vue": "^2.0.2",
+ "cypress": "4.12.1",
"eslint": "^6.8.0",
- "eslint-config-airbnb-base": "^14.1.0",
+ "eslint-config-airbnb-base": "14.2.1",
"eslint-config-prettier": "^4.0.0",
"eslint-import-resolver-webpack": "^0.11.1",
- "eslint-plugin-babel": "^5.3.0",
- "eslint-plugin-html": "^6.0.0",
- "eslint-plugin-import": "^2.16.0",
- "eslint-plugin-jsx-a11y": "^6.2.1",
- "eslint-plugin-prettier": "^3.0.1",
+ "eslint-plugin-babel": "5.3.1",
+ "eslint-plugin-html": "6.1.2",
+ "eslint-plugin-import": "2.22.1",
+ "eslint-plugin-jsx-a11y": "6.4.1",
+ "eslint-plugin-prettier": "3.4.0",
"eslint-plugin-vue": "^6.2.2",
"expect-more-jest": "^2.4.2",
- "husky": ">=1",
- "jest": "^26.4.2",
+ "husky": "6.0.0",
+ "jest": "26.6.3",
"jest-serializer-vue": "^2.0.2",
"jest-transform-stub": "^2.0.0",
- "lint-staged": ">=8",
+ "lint-staged": "10.5.4",
"prettier": "^1.16.4",
"rimraf": "^3.0.0",
- "vue-jest": "^3.0.5",
- "webpack-dev-server": "^3.11.0"
+ "vue-jest": "3.0.7",
+ "webpack-dev-server": "3.11.2"
},
"engines": {
"node": ">=10.x",
diff --git a/public/dashboard/images/integrations/dialogflow.svg b/public/dashboard/images/integrations/dialogflow.svg
new file mode 100644
index 00000000000..32c657f3b26
--- /dev/null
+++ b/public/dashboard/images/integrations/dialogflow.svg
@@ -0,0 +1,15 @@
+
+
\ No newline at end of file
diff --git a/spec/builders/campaigns/campaign_conversation_builder_spec.rb b/spec/builders/campaigns/campaign_conversation_builder_spec.rb
new file mode 100644
index 00000000000..076aeab67c2
--- /dev/null
+++ b/spec/builders/campaigns/campaign_conversation_builder_spec.rb
@@ -0,0 +1,31 @@
+require 'rails_helper'
+
+describe ::Campaigns::CampaignConversationBuilder do
+ let(:account) { create(:account) }
+ let(:inbox) { create(:inbox, account: account) }
+ let(:contact) { create(:contact, account: account, identifier: '123') }
+ let(:contact_inbox) { create(:contact_inbox, contact: contact, inbox: inbox) }
+ let(:campaign) { create(:campaign, inbox: inbox, account: account) }
+
+ describe '#perform' do
+ it 'creates a conversation with campaign id and message with campaign message' do
+ campaign_conversation = described_class.new(
+ contact_inbox_id: contact_inbox.id,
+ campaign_display_id: campaign.display_id
+ ).perform
+
+ expect(campaign_conversation.campaign_id).to eq(campaign.id)
+ expect(campaign_conversation.messages.first.content).to eq(campaign.message)
+ end
+
+ it 'will not create a conversation with campaign id if another conversation exists' do
+ create(:conversation, contact_inbox_id: contact_inbox.id, inbox: inbox, account: account)
+ campaign_conversation = described_class.new(
+ contact_inbox_id: contact_inbox.id,
+ campaign_display_id: campaign.display_id
+ ).perform
+
+ expect(campaign_conversation).to eq(nil)
+ end
+ end
+end
diff --git a/spec/controllers/api/v1/accounts/campaigns_controller_spec.rb b/spec/controllers/api/v1/accounts/campaigns_controller_spec.rb
new file mode 100644
index 00000000000..5a90929d597
--- /dev/null
+++ b/spec/controllers/api/v1/accounts/campaigns_controller_spec.rb
@@ -0,0 +1,148 @@
+require 'rails_helper'
+
+RSpec.describe 'Campaigns API', type: :request do
+ let(:account) { create(:account) }
+
+ describe 'GET /api/v1/accounts/{account.id}/campaigns' do
+ context 'when it is an unauthenticated user' do
+ it 'returns unauthorized' do
+ get "/api/v1/accounts/#{account.id}/campaigns"
+
+ expect(response).to have_http_status(:unauthorized)
+ end
+ end
+
+ context 'when it is an authenticated user' do
+ let(:agent) { create(:user, account: account, role: :agent) }
+ let(:administrator) { create(:user, account: account, role: :administrator) }
+ let!(:campaign) { create(:campaign, account: account) }
+
+ it 'returns unauthorized for agents' do
+ get "/api/v1/accounts/#{account.id}/campaigns"
+
+ expect(response).to have_http_status(:unauthorized)
+ end
+
+ it 'returns all campaigns to administrators' do
+ get "/api/v1/accounts/#{account.id}/campaigns",
+ headers: administrator.create_new_auth_token,
+ as: :json
+
+ expect(response).to have_http_status(:success)
+ body = JSON.parse(response.body, symbolize_names: true)
+ expect(body.first[:id]).to eq(campaign.display_id)
+ end
+ end
+ end
+
+ describe 'GET /api/v1/accounts/{account.id}/campaigns/:id' do
+ let(:campaign) { create(:campaign, account: account) }
+
+ context 'when it is an unauthenticated user' do
+ it 'returns unauthorized' do
+ get "/api/v1/accounts/#{account.id}/campaigns/#{campaign.display_id}"
+
+ expect(response).to have_http_status(:unauthorized)
+ end
+ end
+
+ context 'when it is an authenticated user' do
+ let(:agent) { create(:user, account: account, role: :agent) }
+ let(:administrator) { create(:user, account: account, role: :administrator) }
+
+ it 'returns unauthorized for agents' do
+ get "/api/v1/accounts/#{account.id}/campaigns/#{campaign.display_id}",
+ headers: agent.create_new_auth_token,
+ as: :json
+
+ expect(response).to have_http_status(:unauthorized)
+ end
+
+ it 'shows the campaign for administrators' do
+ get "/api/v1/accounts/#{account.id}/campaigns/#{campaign.display_id}",
+ headers: administrator.create_new_auth_token,
+ as: :json
+
+ expect(response).to have_http_status(:success)
+ expect(JSON.parse(response.body, symbolize_names: true)[:id]).to eq(campaign.display_id)
+ end
+ end
+ end
+
+ describe 'POST /api/v1/accounts/{account.id}/campaigns' do
+ let(:inbox) { create(:inbox, account: account) }
+
+ context 'when it is an unauthenticated user' do
+ it 'returns unauthorized' do
+ post "/api/v1/accounts/#{account.id}/campaigns",
+ params: { inbox_id: inbox.id, title: 'test', message: 'test message' },
+ as: :json
+
+ expect(response).to have_http_status(:unauthorized)
+ end
+ end
+
+ context 'when it is an authenticated user' do
+ let(:agent) { create(:user, account: account, role: :agent) }
+ let(:administrator) { create(:user, account: account, role: :administrator) }
+
+ it 'returns unauthorized for agents' do
+ post "/api/v1/accounts/#{account.id}/campaigns",
+ params: { inbox_id: inbox.id, title: 'test', message: 'test message' },
+ headers: agent.create_new_auth_token,
+ as: :json
+
+ expect(response).to have_http_status(:unauthorized)
+ end
+
+ it 'creates a new campaign' do
+ post "/api/v1/accounts/#{account.id}/campaigns",
+ params: { inbox_id: inbox.id, title: 'test', message: 'test message' },
+ headers: administrator.create_new_auth_token,
+ as: :json
+
+ expect(response).to have_http_status(:success)
+ expect(JSON.parse(response.body, symbolize_names: true)[:title]).to eq('test')
+ end
+ end
+ end
+
+ describe 'PATCH /api/v1/accounts/{account.id}/campaigns/:id' do
+ let(:inbox) { create(:inbox, account: account) }
+ let!(:campaign) { create(:campaign, account: account) }
+
+ context 'when it is an unauthenticated user' do
+ it 'returns unauthorized' do
+ patch "/api/v1/accounts/#{account.id}/campaigns/#{campaign.display_id}",
+ params: { inbox_id: inbox.id, title: 'test', message: 'test message' },
+ as: :json
+
+ expect(response).to have_http_status(:unauthorized)
+ end
+ end
+
+ context 'when it is an authenticated user' do
+ let(:agent) { create(:user, account: account, role: :agent) }
+ let(:administrator) { create(:user, account: account, role: :administrator) }
+
+ it 'returns unauthorized for agents' do
+ patch "/api/v1/accounts/#{account.id}/campaigns/#{campaign.display_id}",
+ params: { inbox_id: inbox.id, title: 'test', message: 'test message' },
+ headers: agent.create_new_auth_token,
+ as: :json
+
+ expect(response).to have_http_status(:unauthorized)
+ end
+
+ it 'updates the campaign' do
+ patch "/api/v1/accounts/#{account.id}/campaigns/#{campaign.display_id}",
+ params: { inbox_id: inbox.id, title: 'test', message: 'test message' },
+ headers: administrator.create_new_auth_token,
+ as: :json
+
+ expect(response).to have_http_status(:success)
+ expect(JSON.parse(response.body, symbolize_names: true)[:title]).to eq('test')
+ end
+ end
+ end
+end
diff --git a/spec/controllers/api/v1/accounts/inboxes_controller_spec.rb b/spec/controllers/api/v1/accounts/inboxes_controller_spec.rb
index 76d2d9f0017..5efa8049cea 100644
--- a/spec/controllers/api/v1/accounts/inboxes_controller_spec.rb
+++ b/spec/controllers/api/v1/accounts/inboxes_controller_spec.rb
@@ -74,6 +74,44 @@ RSpec.describe 'Inboxes API', type: :request do
end
end
+ describe 'GET /api/v1/accounts/{account.id}/inboxes/{inbox.id}/campaigns' do
+ let(:inbox) { create(:inbox, account: account) }
+
+ context 'when it is an unauthenticated user' do
+ it 'returns unauthorized' do
+ get "/api/v1/accounts/#{account.id}/inboxes/#{inbox.id}/campaigns"
+
+ expect(response).to have_http_status(:unauthorized)
+ end
+ end
+
+ context 'when it is an authenticated user' do
+ let(:agent) { create(:user, account: account, role: :agent) }
+ let(:administrator) { create(:user, account: account, role: :administrator) }
+
+ let!(:campaign) { create(:campaign, account: account, inbox: inbox) }
+
+ it 'returns unauthorized for agents' do
+ get "/api/v1/accounts/#{account.id}/inboxes/#{inbox.id}/campaigns"
+
+ expect(response).to have_http_status(:unauthorized)
+ end
+
+ it 'returns all campaigns belonging to the inbox to administrators' do
+ # create a random campaign
+ create(:campaign, account: account)
+ get "/api/v1/accounts/#{account.id}/inboxes/#{inbox.id}/campaigns",
+ headers: administrator.create_new_auth_token,
+ as: :json
+
+ expect(response).to have_http_status(:success)
+ body = JSON.parse(response.body, symbolize_names: true)
+ expect(body.first[:id]).to eq(campaign.display_id)
+ expect(body.length).to eq(1)
+ end
+ end
+ end
+
describe 'DELETE /api/v1/accounts/{account.id}/inboxes/:id' do
let(:inbox) { create(:inbox, account: account) }
diff --git a/spec/controllers/api/v1/accounts/integrations/hooks_controller_spec.rb b/spec/controllers/api/v1/accounts/integrations/hooks_controller_spec.rb
new file mode 100644
index 00000000000..3c92f90260e
--- /dev/null
+++ b/spec/controllers/api/v1/accounts/integrations/hooks_controller_spec.rb
@@ -0,0 +1,111 @@
+require 'rails_helper'
+
+RSpec.describe 'Integration Hooks API', type: :request do
+ let(:account) { create(:account) }
+ let(:admin) { create(:user, account: account, role: :administrator) }
+ let(:agent) { create(:user, account: account, role: :agent) }
+ let(:inbox) { create(:inbox, account: account) }
+ let(:params) { { app_id: 'dialogflow', inbox_id: inbox.id, settings: { project_id: 'xx', credentials: { test: 'test' } } } }
+
+ describe 'POST /api/v1/accounts/{account.id}/integrations/hooks' do
+ context 'when it is an unauthenticated user' do
+ it 'returns unauthorized' do
+ post api_v1_account_integrations_hooks_url(account_id: account.id),
+ params: params,
+ as: :json
+
+ expect(response).to have_http_status(:unauthorized)
+ end
+ end
+
+ context 'when it is an authenticated user' do
+ it 'return unauthorized if agent' do
+ post api_v1_account_integrations_hooks_url(account_id: account.id),
+ params: params,
+ headers: agent.create_new_auth_token,
+ as: :json
+
+ expect(response).to have_http_status(:unauthorized)
+ end
+
+ it 'creates hooks if admin' do
+ post api_v1_account_integrations_hooks_url(account_id: account.id),
+ params: params,
+ headers: admin.create_new_auth_token,
+ as: :json
+
+ expect(response).to have_http_status(:success)
+ data = JSON.parse(response.body)
+ expect(data['app']['id']).to eq params[:app_id]
+ end
+ end
+ end
+
+ describe 'PATCH /api/v1/accounts/{account.id}/integrations/hooks/{hook_id}' do
+ let(:hook) { create(:integrations_hook, account: account) }
+
+ context 'when it is an unauthenticated user' do
+ it 'returns unauthorized' do
+ patch api_v1_account_integrations_hook_url(account_id: account.id, id: hook.id),
+ params: params,
+ as: :json
+
+ expect(response).to have_http_status(:unauthorized)
+ end
+ end
+
+ context 'when it is an authenticated user' do
+ it 'return unauthorized if agent' do
+ patch api_v1_account_integrations_hook_url(account_id: account.id, id: hook.id),
+ params: params,
+ headers: agent.create_new_auth_token,
+ as: :json
+
+ expect(response).to have_http_status(:unauthorized)
+ end
+
+ it 'updates hook if admin' do
+ patch api_v1_account_integrations_hook_url(account_id: account.id, id: hook.id),
+ params: params,
+ headers: admin.create_new_auth_token,
+ as: :json
+
+ expect(response).to have_http_status(:success)
+ data = JSON.parse(response.body)
+ expect(data['app']['id']).to eq 'slack'
+ end
+ end
+ end
+
+ describe 'DELETE /api/v1/accounts/{account.id}/integrations/hooks/{hook_id}' do
+ let(:hook) { create(:integrations_hook, account: account) }
+
+ context 'when it is an unauthenticated user' do
+ it 'returns unauthorized' do
+ delete api_v1_account_integrations_hook_url(account_id: account.id, id: hook.id),
+ as: :json
+
+ expect(response).to have_http_status(:unauthorized)
+ end
+ end
+
+ context 'when it is an authenticated user' do
+ it 'return unauthorized if agent' do
+ delete api_v1_account_integrations_hook_url(account_id: account.id, id: hook.id),
+ headers: agent.create_new_auth_token,
+ as: :json
+
+ expect(response).to have_http_status(:unauthorized)
+ end
+
+ it 'updates hook if admin' do
+ delete api_v1_account_integrations_hook_url(account_id: account.id, id: hook.id),
+ headers: admin.create_new_auth_token,
+ as: :json
+
+ expect(response).to have_http_status(:success)
+ expect(::Integrations::Hook.exists?(hook.id)).to eq false
+ end
+ end
+ end
+end
diff --git a/spec/controllers/api/v1/widget/campaigns_controller_spec.rb b/spec/controllers/api/v1/widget/campaigns_controller_spec.rb
new file mode 100644
index 00000000000..8a938b66737
--- /dev/null
+++ b/spec/controllers/api/v1/widget/campaigns_controller_spec.rb
@@ -0,0 +1,31 @@
+require 'rails_helper'
+
+RSpec.describe '/api/v1/widget/campaigns', type: :request do
+ let(:account) { create(:account) }
+ let(:web_widget) { create(:channel_widget, account: account) }
+ let!(:campaign_1) { create(:campaign, inbox: web_widget.inbox, enabled: true, account: account) }
+ let!(:campaign_2) { create(:campaign, inbox: web_widget.inbox, enabled: false, account: account) }
+
+ describe 'GET /api/v1/widget/campaigns' do
+ let(:params) { { website_token: web_widget.website_token } }
+
+ context 'with correct website token' do
+ it 'returns the list of enabled campaigns' do
+ get '/api/v1/widget/campaigns', params: params
+
+ expect(response).to have_http_status(:success)
+ json_response = JSON.parse(response.body)
+ expect(json_response.length).to eq 1
+ expect(json_response.pluck('id')).to include(campaign_1.display_id)
+ expect(json_response.pluck('id')).not_to include(campaign_2.display_id)
+ end
+ end
+
+ context 'with invalid website token' do
+ it 'returns the list of agents' do
+ get '/api/v1/widget/campaigns', params: { website_token: '' }
+ expect(response).to have_http_status(:not_found)
+ end
+ end
+ end
+end
diff --git a/spec/controllers/api/v1/widget/events_controller_spec.rb b/spec/controllers/api/v1/widget/events_controller_spec.rb
index e2c45ab6e9a..da413668087 100644
--- a/spec/controllers/api/v1/widget/events_controller_spec.rb
+++ b/spec/controllers/api/v1/widget/events_controller_spec.rb
@@ -9,7 +9,7 @@ RSpec.describe '/api/v1/widget/events', type: :request do
let(:token) { ::Widget::TokenService.new(payload: payload).generate_token }
describe 'POST /api/v1/widget/events' do
- let(:params) { { website_token: web_widget.website_token, name: 'webwidget.triggered' } }
+ let(:params) { { website_token: web_widget.website_token, name: 'webwidget.triggered', event_info: { test_id: 'test' } } }
context 'with invalid website token' do
it 'returns unauthorized' do
@@ -32,7 +32,7 @@ RSpec.describe '/api/v1/widget/events', type: :request do
expect(response).to have_http_status(:success)
expect(Rails.configuration.dispatcher).to have_received(:dispatch)
.with(params[:name], anything, contact_inbox: contact_inbox,
- event_info: { browser_language: nil, widget_language: nil, browser: anything })
+ event_info: { test_id: 'test', browser_language: nil, widget_language: nil, browser: anything })
end
end
end
diff --git a/spec/controllers/api/v1/widget/inbox_members_controller_spec.rb b/spec/controllers/api/v1/widget/inbox_members_controller_spec.rb
index 72b1315b840..dc7bd2ce92c 100644
--- a/spec/controllers/api/v1/widget/inbox_members_controller_spec.rb
+++ b/spec/controllers/api/v1/widget/inbox_members_controller_spec.rb
@@ -11,7 +11,7 @@ RSpec.describe '/api/v1/widget/inbox_members', type: :request do
create(:inbox_member, user: agent_2, inbox: web_widget.inbox)
end
- describe 'POST /api/v1/widget/inbox_members' do
+ describe 'GET /api/v1/widget/inbox_members' do
let(:params) { { website_token: web_widget.website_token } }
context 'with correct website token' do
diff --git a/spec/factories/campaigns.rb b/spec/factories/campaigns.rb
new file mode 100644
index 00000000000..4d4c6de1851
--- /dev/null
+++ b/spec/factories/campaigns.rb
@@ -0,0 +1,16 @@
+# frozen_string_literal: true
+
+FactoryBot.define do
+ factory :campaign do
+ sequence(:title) { |n| "Campaign #{n}" }
+ sequence(:message) { |n| "Campaign message #{n}" }
+ after(:build) do |campaign|
+ campaign.account ||= create(:account)
+ campaign.inbox ||= create(
+ :inbox,
+ account: campaign.account,
+ channel: create(:channel_widget, account: campaign.account)
+ )
+ end
+ end
+end
diff --git a/spec/factories/conversations.rb b/spec/factories/conversations.rb
index f09fa6e119e..6c7054a51be 100644
--- a/spec/factories/conversations.rb
+++ b/spec/factories/conversations.rb
@@ -4,7 +4,6 @@ FactoryBot.define do
factory :conversation do
status { 'open' }
agent_last_seen_at { Time.current }
- locked { false }
identifier { SecureRandom.hex }
after(:build) do |conversation|
diff --git a/spec/factories/integrations/hooks.rb b/spec/factories/integrations/hooks.rb
index 6af74af9c08..ac7c36fbc8c 100644
--- a/spec/factories/integrations/hooks.rb
+++ b/spec/factories/integrations/hooks.rb
@@ -1,12 +1,16 @@
FactoryBot.define do
factory :integrations_hook, class: 'Integrations::Hook' do
- status { 1 }
- inbox_id { 1 }
- account_id { 1 }
app_id { 'slack' }
- settings { 'MyText' }
- hook_type { 1 }
+ inbox
+ account
+ settings { { 'test': 'test' } }
+ status { Integrations::Hook.statuses['enabled'] }
access_token { SecureRandom.hex }
reference_id { SecureRandom.hex }
+
+ trait :dialogflow do
+ app_id { 'dialogflow' }
+ settings { { project_id: 'test', credentials: {} } }
+ end
end
end
diff --git a/spec/fixtures/files/mail_with_no_subject.eml b/spec/fixtures/files/mail_with_no_subject.eml
new file mode 100644
index 00000000000..46057b3a3d8
--- /dev/null
+++ b/spec/fixtures/files/mail_with_no_subject.eml
@@ -0,0 +1,631 @@
+From: Sony Mathew
+Mime-Version: 1.0 (Apple Message framework v1244.3)
+Content-Type: multipart/alternative; boundary="Apple-Mail=_33A037C7-4BB3-4772-AE52-FCF2D7535F74"
+Subject:
+Date: Tue, 20 Apr 2020 04:20:20 -0400
+In-Reply-To: <4e6e35f5a38b4_479f13bb90078178@small-app-01.mail>
+To: "Replies"
+References: <4e6e35f5a38b4_479f13bb90078178@small-app-01.mail>
+Message-Id: <0CB459E0-0336-41DA-BC88-E6E28C697DDB@chatwoot.com>
+X-Mailer: Apple Mail (2.1244.3)
+
+--Apple-Mail=_33A037C7-4BB3-4772-AE52-FCF2D7535F74
+Content-Transfer-Encoding: quoted-printable
+Content-Type: text/plain;
+ charset=utf-8
+
+Let's talk about these images:
+
+
+--Apple-Mail=_33A037C7-4BB3-4772-AE52-FCF2D7535F74
+Content-Type: multipart/related;
+ type="text/html";
+ boundary="Apple-Mail=_83444AF4-343C-4F75-AF8F-14E1E7434FC1"
+
+
+--Apple-Mail=_83444AF4-343C-4F75-AF8F-14E1E7434FC1
+Content-Transfer-Encoding: base64
+Content-Disposition: inline;
+ filename=avatar1.jpeg
+Content-Type: image/jpg;
+ name="avatar1.jpeg"
+Content-Id: <7AAEB353-2341-4D46-A054-5CA5CB2363B7>
+
+/9j/4AAQSkZJRgABAQAAAQABAAD/4gxYSUNDX1BST0ZJTEUAAQEAAAxITGlubwIQAABtbnRyUkdC
+IFhZWiAHzgACAAkABgAxAABhY3NwTVNGVAAAAABJRUMgc1JHQgAAAAAAAAAAAAAAAAAA9tYAAQAA
+AADTLUhQICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABFj
+cHJ0AAABUAAAADNkZXNjAAABhAAAAGx3dHB0AAAB8AAAABRia3B0AAACBAAAABRyWFlaAAACGAAA
+ABRnWFlaAAACLAAAABRiWFlaAAACQAAAABRkbW5kAAACVAAAAHBkbWRkAAACxAAAAIh2dWVkAAAD
+TAAAAIZ2aWV3AAAD1AAAACRsdW1pAAAD+AAAABRtZWFzAAAEDAAAACR0ZWNoAAAEMAAAAAxyVFJD
+AAAEPAAACAxnVFJDAAAEPAAACAxiVFJDAAAEPAAACAx0ZXh0AAAAAENvcHlyaWdodCAoYykgMTk5
+OCBIZXdsZXR0LVBhY2thcmQgQ29tcGFueQAAZGVzYwAAAAAAAAASc1JHQiBJRUM2MTk2Ni0yLjEA
+AAAAAAAAAAAAABJzUkdCIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAWFlaIAAAAAAAAPNRAAEAAAABFsxYWVogAAAAAAAAAAAAAAAA
+AAAAAFhZWiAAAAAAAABvogAAOPUAAAOQWFlaIAAAAAAAAGKZAAC3hQAAGNpYWVogAAAAAAAAJKAA
+AA+EAAC2z2Rlc2MAAAAAAAAAFklFQyBodHRwOi8vd3d3LmllYy5jaAAAAAAAAAAAAAAAFklFQyBo
+dHRwOi8vd3d3LmllYy5jaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAABkZXNjAAAAAAAAAC5JRUMgNjE5NjYtMi4xIERlZmF1bHQgUkdCIGNvbG91ciBzcGFjZSAt
+IHNSR0IAAAAAAAAAAAAAAC5JRUMgNjE5NjYtMi4xIERlZmF1bHQgUkdCIGNvbG91ciBzcGFjZSAt
+IHNSR0IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZGVzYwAAAAAAAAAsUmVmZXJlbmNlIFZpZXdpbmcg
+Q29uZGl0aW9uIGluIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAALFJlZmVyZW5jZSBWaWV3aW5nIENv
+bmRpdGlvbiBpbiBJRUM2MTk2Ni0yLjEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZpZXcAAAAA
+ABOk/gAUXy4AEM8UAAPtzAAEEwsAA1yeAAAAAVhZWiAAAAAAAEwJVgBQAAAAVx/nbWVhcwAAAAAA
+AAABAAAAAAAAAAAAAAAAAAAAAAAAAo8AAAACc2lnIAAAAABDUlQgY3VydgAAAAAAAAQAAAAABQAK
+AA8AFAAZAB4AIwAoAC0AMgA3ADsAQABFAEoATwBUAFkAXgBjAGgAbQByAHcAfACBAIYAiwCQAJUA
+mgCfAKQAqQCuALIAtwC8AMEAxgDLANAA1QDbAOAA5QDrAPAA9gD7AQEBBwENARMBGQEfASUBKwEy
+ATgBPgFFAUwBUgFZAWABZwFuAXUBfAGDAYsBkgGaAaEBqQGxAbkBwQHJAdEB2QHhAekB8gH6AgMC
+DAIUAh0CJgIvAjgCQQJLAlQCXQJnAnECegKEAo4CmAKiAqwCtgLBAssC1QLgAusC9QMAAwsDFgMh
+Ay0DOANDA08DWgNmA3IDfgOKA5YDogOuA7oDxwPTA+AD7AP5BAYEEwQgBC0EOwRIBFUEYwRxBH4E
+jASaBKgEtgTEBNME4QTwBP4FDQUcBSsFOgVJBVgFZwV3BYYFlgWmBbUFxQXVBeUF9gYGBhYGJwY3
+BkgGWQZqBnsGjAadBq8GwAbRBuMG9QcHBxkHKwc9B08HYQd0B4YHmQesB78H0gflB/gICwgfCDII
+RghaCG4IggiWCKoIvgjSCOcI+wkQCSUJOglPCWQJeQmPCaQJugnPCeUJ+woRCicKPQpUCmoKgQqY
+Cq4KxQrcCvMLCwsiCzkLUQtpC4ALmAuwC8gL4Qv5DBIMKgxDDFwMdQyODKcMwAzZDPMNDQ0mDUAN
+Wg10DY4NqQ3DDd4N+A4TDi4OSQ5kDn8Omw62DtIO7g8JDyUPQQ9eD3oPlg+zD88P7BAJECYQQxBh
+EH4QmxC5ENcQ9RETETERTxFtEYwRqhHJEegSBxImEkUSZBKEEqMSwxLjEwMTIxNDE2MTgxOkE8UT
+5RQGFCcUSRRqFIsUrRTOFPAVEhU0FVYVeBWbFb0V4BYDFiYWSRZsFo8WshbWFvoXHRdBF2UXiReu
+F9IX9xgbGEAYZRiKGK8Y1Rj6GSAZRRlrGZEZtxndGgQaKhpRGncanhrFGuwbFBs7G2MbihuyG9oc
+AhwqHFIcexyjHMwc9R0eHUcdcB2ZHcMd7B4WHkAeah6UHr4e6R8THz4faR+UH78f6iAVIEEgbCCY
+IMQg8CEcIUghdSGhIc4h+yInIlUigiKvIt0jCiM4I2YjlCPCI/AkHyRNJHwkqyTaJQklOCVoJZcl
+xyX3JicmVyaHJrcm6CcYJ0kneierJ9woDSg/KHEooijUKQYpOClrKZ0p0CoCKjUqaCqbKs8rAis2
+K2krnSvRLAUsOSxuLKIs1y0MLUEtdi2rLeEuFi5MLoIuty7uLyQvWi+RL8cv/jA1MGwwpDDbMRIx
+SjGCMbox8jIqMmMymzLUMw0zRjN/M7gz8TQrNGU0njTYNRM1TTWHNcI1/TY3NnI2rjbpNyQ3YDec
+N9c4FDhQOIw4yDkFOUI5fzm8Ofk6Njp0OrI67zstO2s7qjvoPCc8ZTykPOM9Ij1hPaE94D4gPmA+
+oD7gPyE/YT+iP+JAI0BkQKZA50EpQWpBrEHuQjBCckK1QvdDOkN9Q8BEA0RHRIpEzkUSRVVFmkXe
+RiJGZ0arRvBHNUd7R8BIBUhLSJFI10kdSWNJqUnwSjdKfUrESwxLU0uaS+JMKkxyTLpNAk1KTZNN
+3E4lTm5Ot08AT0lPk0/dUCdQcVC7UQZRUFGbUeZSMVJ8UsdTE1NfU6pT9lRCVI9U21UoVXVVwlYP
+VlxWqVb3V0RXklfgWC9YfVjLWRpZaVm4WgdaVlqmWvVbRVuVW+VcNVyGXNZdJ114XcleGl5sXr1f
+D19hX7NgBWBXYKpg/GFPYaJh9WJJYpxi8GNDY5dj62RAZJRk6WU9ZZJl52Y9ZpJm6Gc9Z5Nn6Wg/
+aJZo7GlDaZpp8WpIap9q92tPa6dr/2xXbK9tCG1gbbluEm5rbsRvHm94b9FwK3CGcOBxOnGVcfBy
+S3KmcwFzXXO4dBR0cHTMdSh1hXXhdj52m3b4d1Z3s3gReG54zHkqeYl553pGeqV7BHtje8J8IXyB
+fOF9QX2hfgF+Yn7CfyN/hH/lgEeAqIEKgWuBzYIwgpKC9INXg7qEHYSAhOOFR4Wrhg6GcobXhzuH
+n4gEiGmIzokziZmJ/opkisqLMIuWi/yMY4zKjTGNmI3/jmaOzo82j56QBpBukNaRP5GokhGSepLj
+k02TtpQglIqU9JVflcmWNJaflwqXdZfgmEyYuJkkmZCZ/JpomtWbQpuvnByciZz3nWSd0p5Anq6f
+HZ+Ln/qgaaDYoUehtqImopajBqN2o+akVqTHpTilqaYapoum/adup+CoUqjEqTepqaocqo+rAqt1
+q+msXKzQrUStuK4trqGvFq+LsACwdbDqsWCx1rJLssKzOLOutCW0nLUTtYq2AbZ5tvC3aLfguFm4
+0blKucK6O7q1uy67p7whvJu9Fb2Pvgq+hL7/v3q/9cBwwOzBZ8Hjwl/C28NYw9TEUcTOxUvFyMZG
+xsPHQce/yD3IvMk6ybnKOMq3yzbLtsw1zLXNNc21zjbOts83z7jQOdC60TzRvtI/0sHTRNPG1EnU
+y9VO1dHWVdbY11zX4Nhk2OjZbNnx2nba+9uA3AXcit0Q3ZbeHN6i3ynfr+A24L3hROHM4lPi2+Nj
+4+vkc+T85YTmDeaW5x/nqegy6LzpRunQ6lvq5etw6/vshu0R7ZzuKO6070DvzPBY8OXxcvH/8ozz
+GfOn9DT0wvVQ9d72bfb794r4Gfio+Tj5x/pX+uf7d/wH/Jj9Kf26/kv+3P9t////2wBDAAICAgIC
+AQICAgICAgIDAwYEAwMDAwcFBQQGCAcICAgHCAgJCg0LCQkMCggICw8LDA0ODg4OCQsQEQ8OEQ0O
+Dg7/2wBDAQICAgMDAwYEBAYOCQgJDg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4O
+Dg4ODg4ODg4ODg4ODg7/wAARCADwAPADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAEC
+AwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0Kx
+wRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1
+dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ
+2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QA
+tREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYk
+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
+mk8VWW5WRGJGAOaAP//Z
+
+--Apple-Mail=_83444AF4-343C-4F75-AF8F-14E1E7434FC1
+Content-Transfer-Encoding: base64
+Content-Disposition: inline;
+ filename=avatar2.jpg
+Content-Type: image/jpg;
+ x-unix-mode=0700;
+ name="avatar2.jpg"
+Content-Id: <4594E827-6E69-4329-8691-6BC35E3E73A0>
+
+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
+
+--Apple-Mail=_83444AF4-343C-4F75-AF8F-14E1E7434FC1--
+
+--Apple-Mail=_33A037C7-4BB3-4772-AE52-FCF2D7535F74--
diff --git a/spec/jobs/hook_job_spec.rb b/spec/jobs/hook_job_spec.rb
index b852db7addc..225a9c18363 100644
--- a/spec/jobs/hook_job_spec.rb
+++ b/spec/jobs/hook_job_spec.rb
@@ -1,15 +1,38 @@
require 'rails_helper'
RSpec.describe HookJob, type: :job do
- subject(:job) { described_class.perform_later(hook, message) }
+ subject(:job) { described_class.perform_later(hook, event_name, event_data) }
let(:account) { create(:account) }
let(:hook) { create(:integrations_hook, account: account) }
- let(:message) { create(:message) }
+ let(:event_name) { 'message.created' }
+ let(:event_data) { { message: create(:message, account: account) } }
- it 'queues the job' do
+ it 'enqueues the job' do
expect { job }.to have_enqueued_job(described_class)
- .with(hook, message)
+ .with(hook, event_name, event_data)
.on_queue('integrations')
end
+
+ context 'when handleable events like message.created' do
+ let(:process_service) { double }
+
+ before do
+ allow(process_service).to receive(:perform)
+ end
+
+ it 'calls Integrations::Slack::SendOnSlackService when its a slack hook' do
+ hook = create(:integrations_hook, app_id: 'slack', account: account)
+ allow(Integrations::Slack::SendOnSlackService).to receive(:new).and_return(process_service)
+ expect(Integrations::Slack::SendOnSlackService).to receive(:new)
+ described_class.perform_now(hook, event_name, event_data)
+ end
+
+ it 'calls Integrations::Dialogflow::ProcessorService when its a dialogflow intergation' do
+ hook = create(:integrations_hook, :dialogflow, account: account)
+ allow(Integrations::Dialogflow::ProcessorService).to receive(:new).and_return(process_service)
+ expect(Integrations::Dialogflow::ProcessorService).to receive(:new)
+ described_class.perform_now(hook, event_name, event_data)
+ end
+ end
end
diff --git a/spec/lib/integrations/dialogflow/processor_service_spec.rb b/spec/lib/integrations/dialogflow/processor_service_spec.rb
new file mode 100644
index 00000000000..ca852a943dc
--- /dev/null
+++ b/spec/lib/integrations/dialogflow/processor_service_spec.rb
@@ -0,0 +1,73 @@
+require 'rails_helper'
+
+describe Integrations::Dialogflow::ProcessorService do
+ let(:account) { create(:account) }
+ let(:hook) { create(:integrations_hook, :dialogflow, account: account) }
+ let(:conversation) { create(:conversation, account: account, status: :bot) }
+ let(:message) { create(:message, account: account, conversation: conversation) }
+ let(:event_name) { 'message.created' }
+ let(:event_data) { { message: message } }
+
+ describe '#perform' do
+ let(:dialogflow_service) { double }
+ let(:dialogflow_response) do
+ ActiveSupport::HashWithIndifferentAccess.new(
+ fulfillment_text: 'hello'
+ )
+ end
+
+ let(:processor) { described_class.new(event_name: event_name, hook: hook, event_data: event_data) }
+
+ before do
+ allow(dialogflow_service).to receive(:query_result).and_return(dialogflow_response)
+ allow(processor).to receive(:get_dialogflow_response).and_return(dialogflow_service)
+ end
+
+ context 'when valid message and dialogflow returns fullfillment text' do
+ it 'creates the response message' do
+ expect(processor.perform.content).to eql('hello')
+ end
+ end
+
+ context 'when dialogflow returns fullfillment text to be empty' do
+ let(:dialogflow_response) do
+ ActiveSupport::HashWithIndifferentAccess.new(
+ fulfillment_messages: [{ payload: { content: 'hello payload' } }]
+ )
+ end
+
+ it 'creates the response message based on fulfillment messages' do
+ expect(processor.perform.content).to eql('hello payload')
+ end
+ end
+
+ context 'when dialogflow returns action' do
+ let(:dialogflow_response) do
+ ActiveSupport::HashWithIndifferentAccess.new(
+ fulfillment_messages: [{ payload: { action: 'handoff' } }]
+ )
+ end
+
+ it 'handsoff the conversation to agent' do
+ processor.perform
+ expect(conversation.status).to eql('open')
+ end
+ end
+
+ context 'when conversation is not bot' do
+ let(:conversation) { create(:conversation, account: account, status: :open) }
+
+ it 'returns nil' do
+ expect(processor.perform).to be(nil)
+ end
+ end
+
+ context 'when message is private' do
+ let(:message) { create(:message, account: account, conversation: conversation, private: true) }
+
+ it 'returns nil' do
+ expect(processor.perform).to be(nil)
+ end
+ end
+ end
+end
diff --git a/spec/listeners/campaign_listener_spec.rb b/spec/listeners/campaign_listener_spec.rb
new file mode 100644
index 00000000000..bfc5df08fed
--- /dev/null
+++ b/spec/listeners/campaign_listener_spec.rb
@@ -0,0 +1,40 @@
+require 'rails_helper'
+describe CampaignListener do
+ let(:listener) { described_class.instance }
+ let(:account) { create(:account) }
+ let(:inbox) { create(:inbox, account: account) }
+ let(:contact) { create(:contact, account: account, identifier: '123') }
+ let(:contact_inbox) { create(:contact_inbox, contact: contact, inbox: inbox) }
+ let(:campaign) { create(:campaign, inbox: inbox, account: account) }
+
+ let!(:event) do
+ Events::Base.new('campaign_triggered', Time.zone.now,
+ contact_inbox: contact_inbox, event_info: { campaign_id: campaign.display_id })
+ end
+
+ describe '#campaign_triggered' do
+ let(:builder) { double }
+
+ before do
+ allow(Campaigns::CampaignConversationBuilder).to receive(:new).and_return(builder)
+ allow(builder).to receive(:perform)
+ end
+
+ context 'when params contain campaign id' do
+ it 'triggers campaign conversation builder' do
+ expect(Campaigns::CampaignConversationBuilder).to receive(:new)
+ .with({ contact_inbox_id: contact_inbox.id, campaign_display_id: campaign.display_id, conversation_additional_attributes: {} }).once
+ listener.campaign_triggered(event)
+ end
+ end
+
+ context 'when params does not contain campaign id' do
+ it 'does not trigger campaign conversation builder' do
+ event = Events::Base.new('campaign_triggered', Time.zone.now,
+ contact_inbox: contact_inbox, event_info: {})
+ expect(Campaigns::CampaignConversationBuilder).to receive(:new).exactly(0).times
+ listener.campaign_triggered(event)
+ end
+ end
+ end
+end
diff --git a/spec/listeners/hook_listener_spec.rb b/spec/listeners/hook_listener_spec.rb
index f22a074ab7e..4caa4dafd47 100644
--- a/spec/listeners/hook_listener_spec.rb
+++ b/spec/listeners/hook_listener_spec.rb
@@ -12,7 +12,7 @@ describe HookListener do
let!(:event) { Events::Base.new(event_name, Time.zone.now, message: message) }
describe '#message_created' do
- let(:event_name) { :'conversation.created' }
+ let(:event_name) { 'message.created' }
context 'when hook is not configured' do
it 'does not trigger hook job' do
@@ -24,9 +24,28 @@ describe HookListener do
context 'when hook is configured' do
it 'triggers hook job' do
hook = create(:integrations_hook, account: account)
- expect(HookJob).to receive(:perform_later).with(hook, message).once
+ expect(HookJob).to receive(:perform_later).with(hook, 'message.created', message: message).once
listener.message_created(event)
end
end
end
+
+ describe '#message_updated' do
+ let(:event_name) { 'message.updated' }
+
+ context 'when hook is not configured' do
+ it 'does not trigger hook job' do
+ expect(HookJob).to receive(:perform_later).exactly(0).times
+ listener.message_updated(event)
+ end
+ end
+
+ context 'when hook is configured' do
+ it 'triggers hook job' do
+ hook = create(:integrations_hook, account: account)
+ expect(HookJob).to receive(:perform_later).with(hook, 'message.updated', message: message).once
+ listener.message_updated(event)
+ end
+ end
+ end
end
diff --git a/spec/listeners/webhook_listener_spec.rb b/spec/listeners/webhook_listener_spec.rb
index ed581dc6f92..cb06dd6c047 100644
--- a/spec/listeners/webhook_listener_spec.rb
+++ b/spec/listeners/webhook_listener_spec.rb
@@ -13,7 +13,7 @@ describe WebhookListener do
let!(:event) { Events::Base.new(event_name, Time.zone.now, message: message) }
describe '#message_created' do
- let(:event_name) { :'conversation.created' }
+ let(:event_name) { :'message.created' }
context 'when webhook is not configured' do
it 'does not trigger webhook' do
@@ -29,5 +29,39 @@ describe WebhookListener do
listener.message_created(event)
end
end
+
+ context 'when inbox is an API Channel' do
+ it 'triggers webhook if webhook_url is present' do
+ channel_api = create(:channel_api, account: account)
+ api_inbox = channel_api.inbox
+ api_conversation = create(:conversation, account: account, inbox: api_inbox, assignee: user)
+ api_message = create(
+ :message,
+ message_type: 'outgoing',
+ account: account,
+ inbox: api_inbox,
+ conversation: api_conversation
+ )
+ api_event = Events::Base.new(event_name, Time.zone.now, message: api_message)
+ expect(WebhookJob).to receive(:perform_later).with(channel_api.webhook_url, api_message.webhook_data.merge(event: 'message_created')).once
+ listener.message_created(api_event)
+ end
+
+ it 'does not trigger webhook if webhook_url is not present' do
+ channel_api = create(:channel_api, webhook_url: nil, account: account)
+ api_inbox = channel_api.inbox
+ api_conversation = create(:conversation, account: account, inbox: api_inbox, assignee: user)
+ api_message = create(
+ :message,
+ message_type: 'outgoing',
+ account: account,
+ inbox: channel_api.inbox,
+ conversation: api_conversation
+ )
+ api_event = Events::Base.new(event_name, Time.zone.now, message: api_message)
+ expect(WebhookJob).not_to receive(:perform_later)
+ listener.message_created(api_event)
+ end
+ end
end
end
diff --git a/spec/models/campaign_spec.rb b/spec/models/campaign_spec.rb
new file mode 100644
index 00000000000..30fa1a43d5d
--- /dev/null
+++ b/spec/models/campaign_spec.rb
@@ -0,0 +1,23 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe Campaign, type: :model do
+ describe 'associations' do
+ it { is_expected.to belong_to(:account) }
+ it { is_expected.to belong_to(:inbox) }
+ end
+
+ describe '.before_create' do
+ let(:campaign) { build(:campaign, display_id: nil) }
+
+ before do
+ campaign.save
+ campaign.reload
+ end
+
+ it 'runs before_create callbacks' do
+ expect(campaign.display_id).to eq(1)
+ end
+ end
+end
diff --git a/spec/models/conversation_spec.rb b/spec/models/conversation_spec.rb
index f6c6f8f6394..bcfc91a7047 100644
--- a/spec/models/conversation_spec.rb
+++ b/spec/models/conversation_spec.rb
@@ -7,6 +7,7 @@ require Rails.root.join 'spec/models/concerns/round_robin_handler_spec.rb'
RSpec.describe Conversation, type: :model do
describe 'associations' do
it { is_expected.to belong_to(:account) }
+ it { is_expected.to belong_to(:inbox) }
end
describe 'concerns' do
@@ -93,7 +94,6 @@ RSpec.describe Conversation, type: :model do
conversation.update(
status: :resolved,
- locked: true,
contact_last_seen_at: Time.now,
assignee: new_assignee,
label_list: [label.title]
@@ -106,8 +106,6 @@ RSpec.describe Conversation, type: :model do
.with(described_class::CONVERSATION_RESOLVED, kind_of(Time), conversation: conversation)
expect(Rails.configuration.dispatcher).to have_received(:dispatch)
.with(described_class::CONVERSATION_READ, kind_of(Time), conversation: conversation)
- expect(Rails.configuration.dispatcher).to have_received(:dispatch)
- .with(described_class::CONVERSATION_LOCK_TOGGLE, kind_of(Time), conversation: conversation)
expect(Rails.configuration.dispatcher).to have_received(:dispatch)
.with(described_class::ASSIGNEE_CHANGED, kind_of(Time), conversation: conversation)
end
@@ -193,28 +191,6 @@ RSpec.describe Conversation, type: :model do
end
end
- describe '#lock!' do
- subject(:lock!) { conversation.lock! }
-
- let(:conversation) { create(:conversation) }
-
- it 'assigns locks the conversation' do
- expect(lock!).to eq(true)
- expect(conversation.reload.locked).to eq(true)
- end
- end
-
- describe '#unlock!' do
- subject(:unlock!) { conversation.unlock! }
-
- let(:conversation) { create(:conversation) }
-
- it 'unlocks the conversation' do
- expect(unlock!).to eq(true)
- expect(conversation.reload.locked).to eq(false)
- end
- end
-
describe '#mute!' do
subject(:mute!) { conversation.mute! }
@@ -365,18 +341,6 @@ RSpec.describe Conversation, type: :model do
end
end
- describe '#lock_event_data' do
- subject(:lock_event_data) { conversation.lock_event_data }
-
- let(:conversation) do
- build(:conversation, display_id: 505, locked: false)
- end
-
- it 'returns lock event payload' do
- expect(lock_event_data).to eq(id: 505, locked: false)
- end
- end
-
describe '#botinbox: when conversation created inside inbox with agent bot' do
let!(:bot_inbox) { create(:agent_bot_inbox) }
let(:conversation) { create(:conversation, inbox: bot_inbox.inbox) }
@@ -386,6 +350,15 @@ RSpec.describe Conversation, type: :model do
end
end
+ describe '#botintegration: when conversation created in inbox with dialogflow integration' do
+ let(:hook) { create(:integrations_hook, :dialogflow) }
+ let(:conversation) { create(:conversation, inbox: hook.inbox) }
+
+ it 'returns conversation status as bot' do
+ expect(conversation.status).to eq('bot')
+ end
+ end
+
describe '#can_reply?' do
describe 'on channels without 24 hour restriction' do
let(:conversation) { create(:conversation) }
diff --git a/spec/models/integrations/hook_spec.rb b/spec/models/integrations/hook_spec.rb
index da5f1ff20b8..87822a0dc1a 100644
--- a/spec/models/integrations/hook_spec.rb
+++ b/spec/models/integrations/hook_spec.rb
@@ -9,4 +9,22 @@ RSpec.describe Integrations::Hook, type: :model do
describe 'associations' do
it { is_expected.to belong_to(:account) }
end
+
+ describe 'when trying to create multiple hooks for an app' do
+ let(:account) { create(:account) }
+
+ context 'when app allows multiple hooks' do
+ it 'allows to create succesfully' do
+ create(:integrations_hook, account: account, app_id: 'webhook')
+ expect(build(:integrations_hook, account: account, app_id: 'webhook').valid?).to eq true
+ end
+ end
+
+ context 'when app doesnot allow multiple hooks' do
+ it 'throws invalid error' do
+ create(:integrations_hook, account: account, app_id: 'slack')
+ expect(build(:integrations_hook, account: account, app_id: 'slack').valid?).to eq false
+ end
+ end
+ end
end
diff --git a/spec/models/message_spec.rb b/spec/models/message_spec.rb
index 061c5af9ad9..e08a152d926 100644
--- a/spec/models/message_spec.rb
+++ b/spec/models/message_spec.rb
@@ -17,6 +17,10 @@ RSpec.describe Message, type: :model do
expect(message.created_at).to eq message.conversation.last_activity_at
end
+ it 'updates contact last_activity_at when created' do
+ expect { message.save! }.to(change { message.sender.last_activity_at })
+ end
+
it 'triggers ::MessageTemplates::HookExecutionService' do
hook_execution_service = double
allow(::MessageTemplates::HookExecutionService).to receive(:new).and_return(hook_execution_service)
diff --git a/spec/presenters/conversations/event_data_presenter_spec.rb b/spec/presenters/conversations/event_data_presenter_spec.rb
index e79ba41ab89..2e04e8e7534 100644
--- a/spec/presenters/conversations/event_data_presenter_spec.rb
+++ b/spec/presenters/conversations/event_data_presenter_spec.rb
@@ -6,10 +6,6 @@ RSpec.describe Conversations::EventDataPresenter do
let(:presenter) { described_class.new(conversation) }
let(:conversation) { create(:conversation) }
- describe '#lock_data' do
- it { expect(presenter.lock_data).to eq(id: conversation.display_id, locked: false) }
- end
-
describe '#push_data' do
let(:expected_data) do
{
diff --git a/spec/presenters/mail_presenter_spec.rb b/spec/presenters/mail_presenter_spec.rb
index e2b43bbb492..8d81e3a809a 100644
--- a/spec/presenters/mail_presenter_spec.rb
+++ b/spec/presenters/mail_presenter_spec.rb
@@ -6,6 +6,13 @@ RSpec.describe MailPresenter do
let(:mail) { create_inbound_email_from_fixture('welcome.eml').mail }
let(:decorated_mail) { described_class.new(mail) }
+ let(:mail_with_no_subject) { create_inbound_email_from_fixture('mail_with_no_subject.eml').mail }
+ let(:decorated_mail_with_no_subject) { described_class.new(mail_with_no_subject) }
+
+ it 'give default subject line if mail subject is empty' do
+ expect(decorated_mail_with_no_subject.subject).to eq('')
+ end
+
it 'give utf8 encoded content' do
expect(decorated_mail.subject).to eq("Discussion: Let's debate these attachments")
expect(decorated_mail.text_content[:full]).to eq("Let's talk about these images:\r\n\r\n")
diff --git a/spec/requests/api/v1/accounts/integrations/slack_request_spec.rb b/spec/requests/api/v1/accounts/integrations/slack_request_spec.rb
index e68eabf7373..c61c8d37627 100644
--- a/spec/requests/api/v1/accounts/integrations/slack_request_spec.rb
+++ b/spec/requests/api/v1/accounts/integrations/slack_request_spec.rb
@@ -16,7 +16,7 @@ RSpec.describe 'Api::V1::Accounts::Integrations::Slacks', type: :request do
context 'when it is an authenticated user' do
it 'creates hook' do
hook_builder = Integrations::Slack::HookBuilder.new(account: account, code: SecureRandom.hex)
- expect(hook_builder).to receive(:fetch_access_token).and_return(SecureRandom.hex)
+ expect(hook_builder).to receive(:perform).and_return(hook)
expect(Integrations::Slack::HookBuilder).to receive(:new).and_return(hook_builder)
channel_builder = Integrations::Slack::ChannelBuilder.new(hook: hook, channel: 'channel')
diff --git a/spec/services/message_templates/hook_execution_service_spec.rb b/spec/services/message_templates/hook_execution_service_spec.rb
index a35ccd25d24..2b8748daf86 100644
--- a/spec/services/message_templates/hook_execution_service_spec.rb
+++ b/spec/services/message_templates/hook_execution_service_spec.rb
@@ -39,6 +39,18 @@ describe ::MessageTemplates::HookExecutionService do
expect(::MessageTemplates::Template::EmailCollect).not_to have_received(:new).with(conversation: message.conversation)
end
+ it 'doesnot calls ::MessageTemplates::Template::EmailCollect on campaign conversations' do
+ contact = create(:contact, email: nil)
+ conversation = create(:conversation, contact: contact, campaign: create(:campaign))
+
+ allow(::MessageTemplates::Template::EmailCollect).to receive(:new).and_return(true)
+
+ # described class gets called in message after commit
+ message = create(:message, conversation: conversation)
+
+ expect(::MessageTemplates::Template::EmailCollect).not_to have_received(:new).with(conversation: message.conversation)
+ end
+
it 'doesnot calls ::MessageTemplates::Template::Greeting if greeting_message is empty' do
contact = create(:contact, email: nil)
conversation = create(:conversation, contact: contact)
diff --git a/stories/Sections/Introduction.stories.mdx b/stories/Sections/Introduction.stories.mdx
new file mode 100644
index 00000000000..b9c2104ed70
--- /dev/null
+++ b/stories/Sections/Introduction.stories.mdx
@@ -0,0 +1,19 @@
+import { Meta } from '@storybook/addon-docs/blocks';
+
+
+
+# Welcome to Chatwoot styleguide
+
+Chatwoot as an opensource project is growing every day. New features are getting added in every release. The number of contributors who are actively contributing to the project is also increasing. It has become a necessity to create a standard guideline to make the contribution experience easier. This style guide resides as a central repository for the best practices we follow, a set of recommended approaches and the design guidelines/components we use.
+
+Anyone willing to contribute to Chatwoot is encouraged to read this style guide. This style guide is also open source. If you feel that there are rooms for improvement, feel free to raise an issue or a pull request to the repository.
+
+Through this style guide we intent to create a document which can be used across the repositories in the organization and build a design system for the project.
+
+The document would split into 3 major sections
+
+- **Design**: This section would contain the design choices and the documentation for the components built using these design choices.
+
+- **Frontend**: Our frontend is built on [Vue.js](https://vuejs.org/). We follow [Airbnb guidelines for Javascript](https://github.com/airbnb/javascript) and there are a couple of choices we made in structuring the code. All those would be defined in this section.
+
+- **Backend**: Our backend is written on [Ruby on Rails](https://rubyonrails.org/). This section would cover the architectural patterns we have been following so far.
diff --git a/stories/Sections/Layout.stories.mdx b/stories/Sections/Layout.stories.mdx
new file mode 100644
index 00000000000..29ce5df8326
--- /dev/null
+++ b/stories/Sections/Layout.stories.mdx
@@ -0,0 +1,23 @@
+import { Meta } from '@storybook/addon-docs/blocks';
+
+
+
+# Layout guidelines
+
+Chatwoot follows a fixed-width sidebar on the left menu on all pages. The remaining space of the layout is where the layout changes according to what the page needs.
+
+### Normal Grid
+
+Chatwoot is built on top of [foundation](https://get.foundation/sites/docs/) and uses the **flex-grid** from Foundation. We insist to solve every possible layout with this grid.
+The docs for the grid can be found here on [foundation grid docs](https://get.foundation/sites/docs/grid.html).
+
+### 3 column layout
+
+We Recommend the use of this solution only when the normal grid fails to solve it or needs severe overriding. Some layouts need custom functionality where Foundation grid is not enough. The main conversation page is an example of this grid as a candidate.
+
+**Usage** - We have created a mixin `three-column-grid` which can be included by importing the file
+
+`@import '~dashboard/assets/scss/mixins';`
+
+There are 2 parameters for this mixin, The first one being the minimum possible width for the first column in `rem`. This value is usually a multiple of `8` when converted to `px`. Eg: `256px` will be used as `25.6rem`.
+Similarly, the second param is the minimum possible width of the third column.
diff --git a/swagger/definitions/index.yml b/swagger/definitions/index.yml
index 9e09d333263..e72c1743d8c 100644
--- a/swagger/definitions/index.yml
+++ b/swagger/definitions/index.yml
@@ -21,8 +21,12 @@ agent_bot:
$ref: ./resource/agent_bot.yml
contact_inboxes:
$ref: ./resource/contact_inboxes.yml
+contactable_inboxes:
+ $ref: ./resource/contactable_inboxes.yml
account:
$ref: ./resource/account.yml
+team:
+ $ref: ./resource/team.yml
# RESPONSE
@@ -78,3 +82,8 @@ contact_update:
## conversation
conversation_message_create:
$ref: ./request/conversation/create_message.yml
+
+# Team request Payload
+
+team_create_update_payload:
+ $ref: ./request/team/create_update_payload.yml
diff --git a/swagger/definitions/request/team/create_update_payload.yml b/swagger/definitions/request/team/create_update_payload.yml
new file mode 100644
index 00000000000..f4db1e5d70d
--- /dev/null
+++ b/swagger/definitions/request/team/create_update_payload.yml
@@ -0,0 +1,11 @@
+type: object
+properties:
+ name:
+ type: string
+ description: The name of the team
+ description:
+ type: string
+ description: The description of the team
+ allow_auto_assign:
+ type: boolean
+ description: If this setting is turned on, the system would automatically assign the conversation to an agent in the team while assigning the conversation to a team
diff --git a/swagger/definitions/resource/contactable_inboxes.yml b/swagger/definitions/resource/contactable_inboxes.yml
new file mode 100644
index 00000000000..a223490fff3
--- /dev/null
+++ b/swagger/definitions/resource/contactable_inboxes.yml
@@ -0,0 +1,8 @@
+type: object
+properties:
+ source_id:
+ type: string
+ description: Contact Inbox Source Id
+ inbox:
+ type: object
+ $ref: '#/definitions/inbox'
diff --git a/swagger/definitions/resource/team.yml b/swagger/definitions/resource/team.yml
new file mode 100644
index 00000000000..ad74be9430e
--- /dev/null
+++ b/swagger/definitions/resource/team.yml
@@ -0,0 +1,20 @@
+type: object
+properties:
+ id:
+ type: number
+ description: The id of the team
+ name:
+ type: string
+ description: The name of the team
+ description:
+ type: string
+ description: The description about the team
+ allow_auto_assign:
+ type: boolean
+ description: If this setting is turned on, the system would automatically assign the conversation to an agent in the team while assigning the conversation to a team
+ account_id:
+ type: number
+ description: The id of the account with the team is a part of
+ is_member:
+ type: boolean
+ description: This field shows whether the current user is a part of the team
diff --git a/swagger/index.html b/swagger/index.html
index 65ec1b81a60..eb09d7768fb 100644
--- a/swagger/index.html
+++ b/swagger/index.html
@@ -5,7 +5,6 @@
-
@@ -13,6 +12,7 @@
body {
margin: 0;
padding: 0;
+ font-family: 'Helvetica Neue', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', sans-serif;
}
diff --git a/swagger/index.yml b/swagger/index.yml
index b00c78da70e..dc9cbedb989 100644
--- a/swagger/index.yml
+++ b/swagger/index.yml
@@ -1,4 +1,4 @@
-swagger: 2.0
+swagger: "2.0"
info:
description: This is the API documentation for Chatwoot server.
version: 1.0.0
@@ -40,3 +40,5 @@ paths:
$ref: ./paths/index.yml
definitions:
$ref: ./definitions/index.yml
+parameters:
+ $ref: ./parameters/index.yml
diff --git a/swagger/parameters/account_id.yml b/swagger/parameters/account_id.yml
new file mode 100644
index 00000000000..133155c2107
--- /dev/null
+++ b/swagger/parameters/account_id.yml
@@ -0,0 +1,6 @@
+in: path
+name: account_id
+schema:
+ type: integer
+required: true
+description: The numeric ID of the account
diff --git a/swagger/parameters/contact_sort.yml b/swagger/parameters/contact_sort.yml
new file mode 100644
index 00000000000..f25d07760f0
--- /dev/null
+++ b/swagger/parameters/contact_sort.yml
@@ -0,0 +1,15 @@
+in: query
+name: sort
+schema:
+ type: string
+ enum:
+ - name
+ - email
+ - phone_number
+ - last_activity_at
+ - -name
+ - -email
+ - -phone_number
+ - -last_activity_at
+required: false
+description: The attribute by which list should be sorted
diff --git a/swagger/parameters/conversation_id.yml b/swagger/parameters/conversation_id.yml
new file mode 100644
index 00000000000..4f4cb19abaa
--- /dev/null
+++ b/swagger/parameters/conversation_id.yml
@@ -0,0 +1,6 @@
+in: path
+name: conversation_id
+schema:
+ type: integer
+required: true
+description: The numeric ID of the conversation
diff --git a/swagger/parameters/index.yml b/swagger/parameters/index.yml
new file mode 100644
index 00000000000..6acf0f37d78
--- /dev/null
+++ b/swagger/parameters/index.yml
@@ -0,0 +1,20 @@
+account_id:
+ $ref: ./account_id.yml
+
+team_id:
+ $ref: ./team_id.yml
+
+source_id:
+ $ref: ./source_id.yml
+
+conversation_id:
+ $ref: ./conversation_id.yml
+
+message_id:
+ $ref: ./message_id.yml
+
+contact_sort_param:
+ $ref: ./contact_sort.yml
+
+page:
+ $ref: ./page.yml
diff --git a/swagger/parameters/message_id.yml b/swagger/parameters/message_id.yml
new file mode 100644
index 00000000000..3064a31e2a9
--- /dev/null
+++ b/swagger/parameters/message_id.yml
@@ -0,0 +1,6 @@
+in: path
+name: message_id
+schema:
+ type: integer
+required: true
+description: The numeric ID of the message
diff --git a/swagger/parameters/page.yml b/swagger/parameters/page.yml
new file mode 100644
index 00000000000..3ef0f55b602
--- /dev/null
+++ b/swagger/parameters/page.yml
@@ -0,0 +1,7 @@
+in: query
+name: page
+schema:
+ type: integer
+ default: 1
+required: false
+description: The page parameter
diff --git a/swagger/parameters/source_id.yml b/swagger/parameters/source_id.yml
new file mode 100644
index 00000000000..47536332fed
--- /dev/null
+++ b/swagger/parameters/source_id.yml
@@ -0,0 +1,2 @@
+type: string
+description: "Id of the session for which the conversation is created.\n\n\n\n Source Ids can be obtained through contactable inboxes API or via generated.
Website: Chatwoot generated string which can be obtained from webhook events. Phone Channels(Twilio): Phone number in e164 format Email Channels: Contact Email address API Channel: Any Random String"
\ No newline at end of file
diff --git a/swagger/parameters/team_id.yml b/swagger/parameters/team_id.yml
new file mode 100644
index 00000000000..096656d2a2d
--- /dev/null
+++ b/swagger/parameters/team_id.yml
@@ -0,0 +1,6 @@
+in: path
+name: id
+schema:
+ type: integer
+required: true
+description: The id of the team to be updated
diff --git a/swagger/paths/contact/list_create.yml b/swagger/paths/contact/list_create.yml
index 28689b78d74..d0fcb5fd748 100644
--- a/swagger/paths/contact/list_create.yml
+++ b/swagger/paths/contact/list_create.yml
@@ -2,12 +2,11 @@ get:
tags:
- Contact
operationId: contactList
- description: Listing all the contacts with pagination
+ description: Listing all the contacts with pagination (Page size = 15)
summary: List Contacts
parameters:
- - name: query_hash
- in: query
- type: string
+ - $ref: '#/parameters/contact_sort_param'
+ - $ref: '#/parameters/page'
responses:
200:
description: Success
diff --git a/swagger/paths/contact/search.yml b/swagger/paths/contact/search.yml
index ad17fd8e16c..30ade7b5aba 100644
--- a/swagger/paths/contact/search.yml
+++ b/swagger/paths/contact/search.yml
@@ -2,12 +2,14 @@ get:
tags:
- Contact
operationId: contactSearch
- description: Search the contacts using a search key, currently supports email search
+ description: Search the contacts using a search key, currently supports email search (Page size = 15)
summary: Search Contacts
parameters:
- name: q
in: query
type: string
+ - $ref: '#/parameters/contact_sort_param'
+ - $ref: '#/parameters/page'
responses:
200:
description: Success
diff --git a/swagger/paths/contact_inboxes/create.yml b/swagger/paths/contact_inboxes/create.yml
index c6943d162db..a0f64186796 100644
--- a/swagger/paths/contact_inboxes/create.yml
+++ b/swagger/paths/contact_inboxes/create.yml
@@ -15,6 +15,8 @@ post:
type: number
description: The id of the inbox
required: true
+ source_id:
+ $ref: '#/parameters/source_id'
responses:
200:
description: Success
diff --git a/swagger/paths/contactable_inboxes/get.yml b/swagger/paths/contactable_inboxes/get.yml
new file mode 100644
index 00000000000..5e6b651cb8f
--- /dev/null
+++ b/swagger/paths/contactable_inboxes/get.yml
@@ -0,0 +1,17 @@
+get:
+ tags:
+ - Contact
+ operationId: contactableInboxesGet
+ description: Get List of contactable Inboxes
+ summary: Get Contactable Inboxes
+ responses:
+ 200:
+ description: Success
+ schema:
+ $ref: '#/definitions/contactable_inboxes'
+ 401:
+ description: Authentication error
+ schema:
+ $ref: '#/definitions/bad_request_error'
+ 422:
+ description: Incorrect payload
diff --git a/swagger/paths/conversation/assignments.yml b/swagger/paths/conversation/assignments.yml
index 7edfb0b48c9..a7b001e5c5d 100644
--- a/swagger/paths/conversation/assignments.yml
+++ b/swagger/paths/conversation/assignments.yml
@@ -1,29 +1,27 @@
-post:
- tags:
- - ConversationAssignment
- operationId: conversationAssignment
- summary: Assign Conversation
- description: Assign a conversation to an agent
- parameters:
- - name: id
- in: path
- type: number
- description: id of the conversation
- required: true
- - name: data
- in: body
- required: true
- schema:
- type: object
- properties:
- assignee_id:
- type: number
- responses:
- 200:
- description: Success
- schema:
- $ref: '#/definitions/user'
- 404:
- description: Conversation not found
- 403:
- description: Access denied
+tags:
+ - Conversation Assignment
+operationId: assign-a-conversation
+summary: Assign Conversation
+description: Assign a conversation to an agent or a team
+parameters:
+ - name: data
+ in: body
+ required: true
+ schema:
+ type: object
+ properties:
+ assignee_id:
+ type: number
+ description: Id of the assignee user
+ team_id:
+ type: number
+ description: Id of the team. If the assignee_id is present, this param would be ignored
+responses:
+ 200:
+ description: Success
+ schema:
+ $ref: '#/definitions/user'
+ 404:
+ description: Conversation not found
+ 401:
+ description: Unauthorized
diff --git a/swagger/paths/conversation/crud.yml b/swagger/paths/conversation/crud.yml
deleted file mode 100644
index cff9c21f85d..00000000000
--- a/swagger/paths/conversation/crud.yml
+++ /dev/null
@@ -1,21 +0,0 @@
-get:
- tags:
- - Conversation
- operationId: conversationDetails
- summary: Conversation Details
- description: Get all details regarding a conversation with all messages in the conversation
- parameters:
- - name: id
- in: path
- type: number
- description: ID of Conversation
- required: true
- responses:
- 200:
- description: Success
- schema:
- $ref: '#/definitions/conversation_show'
- 404:
- description: Conversation not found
- 403:
- description: Access denied
diff --git a/swagger/paths/conversation/index_or_create.yml b/swagger/paths/conversation/index_or_create.yml
index 5bf8dd3242e..0fc253fff08 100644
--- a/swagger/paths/conversation/index_or_create.yml
+++ b/swagger/paths/conversation/index_or_create.yml
@@ -5,6 +5,7 @@ get:
description: List all the conversations with pagination
summary: Conversations List
parameters:
+ - $ref: '#/parameters/account_id'
- name: assignee_type
in: query
type: string
@@ -68,6 +69,7 @@ get:
type: array
items:
type: string
+ - $ref: '#/parameters/account_id'
responses:
200:
@@ -86,20 +88,26 @@ post:
- Conversation
operationId: newConversation
summary: Create New Conversation
- description: Create conversation
+ description: "Creating a conversation in chatwoot requires a source id. \n\n Learn more about source_id: https://github.com/chatwoot/chatwoot/wiki/Building-on-Top-of-Chatwoot:-Importing-Existing-Contacts-and-Creating-Conversations"
security:
- userApiKey: []
- agentBotApiKey: []
parameters:
+ - $ref: '#/parameters/account_id'
- name: data
in: body
required: true
schema:
type: object
properties:
- source_id:
+ source_id:
+ $ref: '#/parameters/source_id'
+ inbox_id:
type: string
- description: Contact Source Id
+ description: "Id of inbox in which the conversation is created Allowed Inbox Types: Website, Phone, Api, Email "
+ contact_id:
+ type: string
+ description: Contact Id for which conversation is created
additional_attributes:
type: object
description: Lets you specify attributes like browser information
diff --git a/swagger/paths/conversation/labels.yml b/swagger/paths/conversation/labels.yml
deleted file mode 100644
index d67c5de1a39..00000000000
--- a/swagger/paths/conversation/labels.yml
+++ /dev/null
@@ -1,54 +0,0 @@
-get:
- tags:
- - ConversationLabels
- operationId: conversationLabelsList
- summary: List Labels
- description: Lists all the labels of a conversation
- parameters:
- - name: id
- in: path
- type: number
- description: ID of the conversation
- required: true
- responses:
- 200:
- description: Success
- schema:
- $ref: '#/definitions/conversation_labels'
- 404:
- description: Conversation not found
- 403:
- description: Access denied
-
-post:
- tags:
- - ConversationLabels
- operationId: conversationAddLabels
- summary: Add Labels
- description: Creates new labels and associates it with the conversation
- parameters:
- - name: id
- in: path
- type: number
- description: ID of the conversation
- required: true
- - name: data
- in: body
- required: true
- schema:
- type: object
- properties:
- labels:
- type: array
- description: 'Array of labels'
- properties:
- type: string
- responses:
- 200:
- description: Success
- schema:
- $ref: '#/definitions/conversation_labels'
- 404:
- description: Conversation not found
- 403:
- description: Access denied
diff --git a/swagger/paths/conversation/labels/create.yml b/swagger/paths/conversation/labels/create.yml
new file mode 100644
index 00000000000..6082ccae46b
--- /dev/null
+++ b/swagger/paths/conversation/labels/create.yml
@@ -0,0 +1,26 @@
+tags:
+ - Conversation Labels
+operationId: conversation-add-labels
+summary: Add Labels
+description: Add labels to a conversation. Note that this API would overwrite the existing list of labels associated to the conversation.
+parameters:
+ - name: data
+ in: body
+ required: true
+ schema:
+ type: object
+ properties:
+ labels:
+ type: array
+ description: Array of labels (comma-separated strings)
+ properties:
+ type: string
+responses:
+ 200:
+ description: Success
+ schema:
+ $ref: '#/definitions/conversation_labels'
+ 404:
+ description: Conversation not found
+ 401:
+ description: Unauthorized
diff --git a/swagger/paths/conversation/labels/index.yml b/swagger/paths/conversation/labels/index.yml
new file mode 100644
index 00000000000..107fc0132d1
--- /dev/null
+++ b/swagger/paths/conversation/labels/index.yml
@@ -0,0 +1,14 @@
+tags:
+ - Conversation Labels
+operationId: list-all-labels-of-a-conversation
+summary: List Labels
+description: Lists all the labels of a conversation
+responses:
+ 200:
+ description: Success
+ schema:
+ $ref: '#/definitions/conversation_labels'
+ 404:
+ description: Conversation not found
+ 401:
+ description: Unauthorized
diff --git a/swagger/paths/conversation/messages/create.yml b/swagger/paths/conversation/messages/create.yml
new file mode 100644
index 00000000000..4ab9e27a0ed
--- /dev/null
+++ b/swagger/paths/conversation/messages/create.yml
@@ -0,0 +1,25 @@
+tags:
+ - Messages
+operationId: create-a-new-message-in-a-conversation
+summary: Create New Message
+description: Create a new message in the conversation
+security:
+ - userApiKey: []
+ - agentBotApiKey: []
+parameters:
+ - name: data
+ in: body
+ required: true
+ schema:
+ $ref: '#/definitions/conversation_message_create'
+responses:
+ 200:
+ description: Success
+ schema:
+ allOf:
+ - $ref: '#/definitions/generic_id'
+ - $ref: '#/definitions/message'
+ 404:
+ description: Conversation not found
+ 403:
+ description: Access denied
diff --git a/swagger/paths/conversation/messages/create_attachment.yml b/swagger/paths/conversation/messages/create_attachment.yml
new file mode 100644
index 00000000000..e6bbd6854a1
--- /dev/null
+++ b/swagger/paths/conversation/messages/create_attachment.yml
@@ -0,0 +1,47 @@
+post:
+ tags:
+ - Messages
+ operationId: conversationNewMessageAttachment
+ summary: Create New Message Attachment
+ description: Create an attachment Message
+ consumes:
+ - multipart/form-data
+ security:
+ - userApiKey: []
+ - agentBotApiKey: []
+ parameters:
+ - $ref: '#/parameters/account_id'
+ - $ref: '#/parameters/conversation_id'
+ required: true
+ - in: formData
+ name: content
+ type: string
+ description: The content of the message
+ required: true
+ - in: formData
+ name: message_type
+ type: string
+ enum: ['outgoing', 'incoming']
+ - in: formData
+ name: private
+ type: boolean
+ description: Flag to identify if it is a private note
+ - in: formData
+ name: attachments
+ type: array
+ description: The files to be uploaded.
+ items:
+ type: file
+
+
+ responses:
+ 200:
+ description: Success
+ schema:
+ allOf:
+ - $ref: '#/definitions/generic_id'
+ - $ref: '#/definitions/message'
+ 404:
+ description: Conversation not found
+ 403:
+ description: Access denied
diff --git a/swagger/paths/conversation/messages/delete.yml b/swagger/paths/conversation/messages/delete.yml
new file mode 100644
index 00000000000..f038074c73f
--- /dev/null
+++ b/swagger/paths/conversation/messages/delete.yml
@@ -0,0 +1,12 @@
+tags:
+ - Messages
+operationId: delete-a-message
+summary: Delete a message
+description: Delete a message and it's attachments from the conversation.
+responses:
+ 200:
+ description: Success
+ 401:
+ description: Unauthorized
+ 404:
+ description: The message or conversation does not exist in the account
diff --git a/swagger/paths/conversation/messages/index.yml b/swagger/paths/conversation/messages/index.yml
new file mode 100644
index 00000000000..8fe7558ae1b
--- /dev/null
+++ b/swagger/paths/conversation/messages/index.yml
@@ -0,0 +1,18 @@
+tags:
+ - Messages
+operationId: list-all-messages
+summary: Get messages
+description: List all messages of a conversation
+responses:
+ 200:
+ description: Success
+ type: array
+ description: Array of messages
+ schema:
+ allOf:
+ - $ref: '#/definitions/generic_id'
+ - $ref: '#/definitions/message'
+ 404:
+ description: Conversation not found
+ 401:
+ description: Unauthorized
diff --git a/swagger/paths/conversation/messages/index_create.yml b/swagger/paths/conversation/messages/index_create.yml
deleted file mode 100644
index d7ccf44fe16..00000000000
--- a/swagger/paths/conversation/messages/index_create.yml
+++ /dev/null
@@ -1,57 +0,0 @@
-get:
- tags:
- - Messages
- operationId: listAllMessages
- summary: Get messages
- description: List all messages of a conversation
- parameters:
- - name: id
- in: path
- type: number
- description: ID of the conversation
- required: true
- responses:
- 200:
- description: Success
- type: array
- description: Array of messages
- schema:
- allOf:
- - $ref: '#/definitions/generic_id'
- - $ref: '#/definitions/message'
- 404:
- description: Conversation not found
- 403:
- description: Access denied
-
-post:
- tags:
- - Messages
- operationId: conversationNewMessage
- summary: Create New Message
- description: All the agent replies are created as new messages through this endpoint
- security:
- - userApiKey: []
- - agentBotApiKey: []
- parameters:
- - name: id
- in: path
- type: number
- description: ID of the conversation
- required: true
- - name: data
- in: body
- required: true
- schema:
- $ref: '#/definitions/conversation_message_create'
- responses:
- 200:
- description: Success
- schema:
- allOf:
- - $ref: '#/definitions/generic_id'
- - $ref: '#/definitions/message'
- 404:
- description: Conversation not found
- 403:
- description: Access denied
diff --git a/swagger/paths/conversation/show.yml b/swagger/paths/conversation/show.yml
new file mode 100644
index 00000000000..81782702c36
--- /dev/null
+++ b/swagger/paths/conversation/show.yml
@@ -0,0 +1,14 @@
+tags:
+ - Conversation
+operationId: get-details-of-a-conversation
+summary: Conversation Details
+description: Get all details regarding a conversation with all messages in the conversation
+responses:
+ 200:
+ description: Success
+ schema:
+ $ref: '#/definitions/conversation_show'
+ 404:
+ description: Conversation not found
+ 403:
+ description: Access denied
diff --git a/swagger/paths/conversation/toggle_status.yml b/swagger/paths/conversation/toggle_status.yml
index 3ec5b43ba15..250e050e5cb 100644
--- a/swagger/paths/conversation/toggle_status.yml
+++ b/swagger/paths/conversation/toggle_status.yml
@@ -1,35 +1,29 @@
-post:
- tags:
- - Conversation
- operationId: conversationToggleStatus
- summary: Toggle Status
- description: Toggles the status of the conversation between open and resolved
- security:
- - userApiKey: []
- - agentBotApiKey: []
- parameters:
- - name: id
- in: path
- type: number
- description: ID of the conversation
- required: true
- - name: data
- in: body
- required: true
- schema:
- type: object
- properties:
- status:
- type: string
- enum: ["open", "resolved", "bot"]
- required: true
- description: The status of the conversation
- responses:
- 200:
- description: Success
- schema:
- $ref: '#/definitions/conversation_status_toggle'
- 404:
- description: Conversation not found
- 403:
- description: Access denied
+tags:
+ - Conversation
+operationId: toggle-status-of-a-conversation
+summary: Toggle Status
+description: Toggles the status of the conversation between open and resolved
+security:
+ - userApiKey: []
+ - agentBotApiKey: []
+parameters:
+ - name: data
+ in: body
+ required: true
+ schema:
+ type: object
+ properties:
+ status:
+ type: string
+ enum: ["open", "resolved", "bot"]
+ required: true
+ description: The status of the conversation
+responses:
+ 200:
+ description: Success
+ schema:
+ $ref: '#/definitions/conversation_status_toggle'
+ 404:
+ description: Conversation not found
+ 401:
+ description: Unauthorized
diff --git a/swagger/paths/index.yml b/swagger/paths/index.yml
index d31f88e4a22..b47d6cb9cf5 100644
--- a/swagger/paths/index.yml
+++ b/swagger/paths/index.yml
@@ -4,7 +4,7 @@
# Inboxes
/accounts/{account_id}/inboxes:
$ref: ./inboxes/index.yml
-/accounts/{account_id}/inboxes:
+/accounts/{account_id}/inboxes/:
$ref: ./inboxes/create.yml
/accounts/{account_id}/inboxes/{id}:
$ref: ./inboxes/update.yml
@@ -16,21 +16,60 @@
# Conversations
/accounts/{account_id}/conversations:
+ parameters:
+ - $ref: '#/parameters/account_id'
$ref: ./conversation/index_or_create.yml
-/accounts/{account_id}/conversations/{id}:
- $ref: ./conversation/crud.yml
-/accounts/{account_id}/conversations/{id}/toggle_status:
- $ref: ./conversation/toggle_status.yml
+
+/accounts/{account_id}/conversations/{converstion_id}:
+ parameters:
+ - $ref: '#/parameters/account_id'
+ - $ref: '#/parameters/conversation_id'
+ get:
+ $ref: ./conversation/show.yml
+
+/accounts/{account_id}/conversations/{conversation_id}/toggle_status:
+ parameters:
+ - $ref: '#/parameters/account_id'
+ - $ref: '#/parameters/conversation_id'
+ post:
+ $ref: ./conversation/toggle_status.yml
# Messages
/accounts/{account_id}/conversations/{id}/messages:
- $ref: ./conversation/messages/index_create.yml
+ $ref: ./conversation/messages/create_attachment.yml
+/accounts/{account_id}/conversations/{converstion_id}/messages:
+ parameters:
+ - $ref: '#/parameters/account_id'
+ - $ref: '#/parameters/conversation_id'
+ get:
+ $ref: ./conversation/messages/index.yml
+ post:
+ $ref: ./conversation/messages/create.yml
-/accounts/{account_id}/conversations/{id}/labels:
- $ref: ./conversation/labels.yml
+/accounts/{account_id}/conversations/{conversation_id}/messages/{message_id}:
+ parameters:
+ - $ref: '#/parameters/account_id'
+ - $ref: '#/parameters/conversation_id'
+ - $ref: '#/parameters/message_id'
+ delete:
+ $ref: ./conversation/messages/delete.yml
-/accounts/{account_id}/conversations/{id}/assignments:
- $ref: ./conversation/assignments.yml
+
+/accounts/{account_id}/conversations/{conversation_id}/labels:
+ parameters:
+ - $ref: '#/parameters/account_id'
+ - $ref: '#/parameters/conversation_id'
+ get:
+ $ref: ./conversation/labels/index.yml
+ post:
+ $ref: ./conversation/labels/create.yml
+
+/accounts/{account_id}/conversations/{conversation_id}/assignments:
+ parameters:
+ - $ref: '#/parameters/account_id'
+ - $ref: '#/parameters/conversation_id'
+ post:
+ $ref: ./conversation/assignments.yml
# Contacts
/accounts/{account_id}/contacts:
@@ -47,8 +86,30 @@
/accounts/{account_id}/contacts/{id}/contact_inboxes:
$ref: ./contact_inboxes/create.yml
+/accounts/{account_id}/contacts/{id}/contactable_inboxes:
+ $ref: ./contactable_inboxes/get.yml
# Profile
/profile:
$ref: ./profile/index.yml
+
+# Teams
+/accounts/{account_id}/teams:
+ parameters:
+ - $ref: '#/parameters/account_id'
+ get:
+ $ref: ./teams/index.yml
+ post:
+ $ref: ./teams/create.yml
+
+/accounts/{account_id}/teams/{id}:
+ parameters:
+ - $ref: '#/parameters/account_id'
+ - $ref: '#/parameters/team_id'
+ get:
+ $ref: './teams/show.yml'
+ patch:
+ $ref: ./teams/update.yml
+ delete:
+ $ref: ./teams/delete.yml
diff --git a/swagger/paths/teams/create.yml b/swagger/paths/teams/create.yml
new file mode 100644
index 00000000000..2ec066738b4
--- /dev/null
+++ b/swagger/paths/teams/create.yml
@@ -0,0 +1,19 @@
+tags:
+ - Teams
+operationId: create-a-team
+summary: Create a team
+description: Create a team in the account
+parameters:
+ - $ref: '#/parameters/account_id'
+ - name: data
+ in: body
+ required: true
+ schema:
+ $ref: '#/definitions/team_create_update_payload'
+responses:
+ 200:
+ description: Success
+ schema:
+ $ref: '#/definitions/team'
+ 401:
+ description: Unauthorized
diff --git a/swagger/paths/teams/delete.yml b/swagger/paths/teams/delete.yml
new file mode 100644
index 00000000000..7c5698b9948
--- /dev/null
+++ b/swagger/paths/teams/delete.yml
@@ -0,0 +1,12 @@
+tags:
+ - Teams
+operationId: delete-a-team
+summary: Delete a team
+description: Delete a team from the account
+responses:
+ 200:
+ description: Success
+ 401:
+ description: Unauthorized
+ 404:
+ description: The team does not exist in the account
diff --git a/swagger/paths/teams/index.yml b/swagger/paths/teams/index.yml
new file mode 100644
index 00000000000..8e1384cf9a8
--- /dev/null
+++ b/swagger/paths/teams/index.yml
@@ -0,0 +1,14 @@
+tags:
+ - Teams
+operationId: list-all-teams
+summary: List all teams
+description: List all teams available in the current account
+responses:
+ 200:
+ description: Success
+ schema:
+ type: array
+ description: 'Array of teams'
+ $ref: '#/definitions/team'
+ 401:
+ description: Unauthorized
diff --git a/swagger/paths/teams/show.yml b/swagger/paths/teams/show.yml
new file mode 100644
index 00000000000..d7ccdbb045e
--- /dev/null
+++ b/swagger/paths/teams/show.yml
@@ -0,0 +1,14 @@
+tags:
+ - Teams
+operationId: get-details-of-a-single-team
+summary: Get a team details
+description: Get the details of a team in the account
+responses:
+ 200:
+ description: Success
+ schema:
+ $ref: '#/definitions/team'
+ 401:
+ description: Unauthorized
+ 404:
+ description: The given team id does not exist in the account
diff --git a/swagger/paths/teams/update.yml b/swagger/paths/teams/update.yml
new file mode 100644
index 00000000000..8afeddc02f2
--- /dev/null
+++ b/swagger/paths/teams/update.yml
@@ -0,0 +1,18 @@
+tags:
+ - Teams
+operationId: update-a-team
+summary: Update a team
+description: Update a team's attributes
+parameters:
+ - name: data
+ in: body
+ required: true
+ schema:
+ $ref: '#/definitions/team_create_update_payload'
+responses:
+ 200:
+ description: Success
+ schema:
+ $ref: '#/definitions/team'
+ 401:
+ description: Unauthorized
diff --git a/swagger/swagger.json b/swagger/swagger.json
index 1fe6583a858..2007a76ccb6 100644
--- a/swagger/swagger.json
+++ b/swagger/swagger.json
@@ -1,5 +1,5 @@
{
- "swagger": 2.0,
+ "swagger": "2.0",
"info": {
"description": "This is the API documentation for Chatwoot server.",
"version": "1.0.0",
@@ -53,6 +53,30 @@
],
"paths": {
"/accounts/{account_id}/inboxes": {
+ "get": {
+ "tags": [
+ "Inbox"
+ ],
+ "operationId": "listAllInboxes",
+ "summary": "List all inboxes",
+ "description": "List all inboxes available in the current account",
+ "responses": {
+ "200": {
+ "description": "Success",
+ "schema": {
+ "$ref": "#/definitions/inbox"
+ }
+ },
+ "404": {
+ "description": "Inbox not found"
+ },
+ "403": {
+ "description": "Access denied"
+ }
+ }
+ }
+ },
+ "/accounts/{account_id}/inboxes/": {
"post": {
"tags": [
"Inbox"
@@ -329,6 +353,9 @@
"items": {
"type": "string"
}
+ },
+ {
+ "$ref": "#/parameters/account_id"
}
],
"responses": {
@@ -353,7 +380,7 @@
],
"operationId": "newConversation",
"summary": "Create New Conversation",
- "description": "Create conversation",
+ "description": "Creating a conversation in chatwoot requires a source id. \n\n Learn more about source_id: https://github.com/chatwoot/chatwoot/wiki/Building-on-Top-of-Chatwoot:-Importing-Existing-Contacts-and-Creating-Conversations",
"security": [
{
"userApiKey": [
@@ -367,6 +394,9 @@
}
],
"parameters": [
+ {
+ "$ref": "#/parameters/account_id"
+ },
{
"name": "data",
"in": "body",
@@ -375,8 +405,15 @@
"type": "object",
"properties": {
"source_id": {
+ "$ref": "#/parameters/source_id"
+ },
+ "inbox_id": {
"type": "string",
- "description": "Contact Source Id"
+ "description": "Id of inbox in which the conversation is created Allowed Inbox Types: Website, Phone, Api, Email "
+ },
+ "contact_id": {
+ "type": "string",
+ "description": "Contact Id for which conversation is created"
},
"additional_attributes": {
"type": "object",
@@ -413,23 +450,22 @@
}
}
},
- "/accounts/{account_id}/conversations/{id}": {
+ "/accounts/{account_id}/conversations/{converstion_id}": {
+ "parameters": [
+ {
+ "$ref": "#/parameters/account_id"
+ },
+ {
+ "$ref": "#/parameters/conversation_id"
+ }
+ ],
"get": {
"tags": [
"Conversation"
],
- "operationId": "conversationDetails",
+ "operationId": "get-details-of-a-conversation",
"summary": "Conversation Details",
"description": "Get all details regarding a conversation with all messages in the conversation",
- "parameters": [
- {
- "name": "id",
- "in": "path",
- "type": "number",
- "description": "ID of Conversation",
- "required": true
- }
- ],
"responses": {
"200": {
"description": "Success",
@@ -446,12 +482,20 @@
}
}
},
- "/accounts/{account_id}/conversations/{id}/toggle_status": {
+ "/accounts/{account_id}/conversations/{conversation_id}/toggle_status": {
+ "parameters": [
+ {
+ "$ref": "#/parameters/account_id"
+ },
+ {
+ "$ref": "#/parameters/conversation_id"
+ }
+ ],
"post": {
"tags": [
"Conversation"
],
- "operationId": "conversationToggleStatus",
+ "operationId": "toggle-status-of-a-conversation",
"summary": "Toggle Status",
"description": "Toggles the status of the conversation between open and resolved",
"security": [
@@ -467,13 +511,6 @@
}
],
"parameters": [
- {
- "name": "id",
- "in": "path",
- "type": "number",
- "description": "ID of the conversation",
- "required": true
- },
{
"name": "data",
"in": "body",
@@ -505,33 +542,77 @@
"404": {
"description": "Conversation not found"
},
- "403": {
- "description": "Access denied"
+ "401": {
+ "description": "Unauthorized"
}
}
}
},
"/accounts/{account_id}/conversations/{id}/messages": {
- "get": {
+ "post": {
"tags": [
"Messages"
],
- "operationId": "listAllMessages",
- "summary": "Get messages",
- "description": "List all messages of a conversation",
+ "operationId": "conversationNewMessageAttachment",
+ "summary": "Create New Message Attachment",
+ "description": "Create an attachment Message",
+ "consumes": [
+ "multipart/form-data"
+ ],
+ "security": [
+ {
+ "userApiKey": [
+
+ ]
+ },
+ {
+ "agentBotApiKey": [
+
+ ]
+ }
+ ],
"parameters": [
{
- "name": "id",
- "in": "path",
- "type": "number",
- "description": "ID of the conversation",
+ "$ref": "#/parameters/account_id"
+ },
+ {
+ "$ref": "#/parameters/conversation_id"
+ },
+ {
+ "in": "formData",
+ "name": "content",
+ "type": "string",
+ "description": "The content of the message",
"required": true
+ },
+ {
+ "in": "formData",
+ "name": "message_type",
+ "type": "string",
+ "enum": [
+ "outgoing",
+ "incoming"
+ ]
+ },
+ {
+ "in": "formData",
+ "name": "private",
+ "type": "boolean",
+ "description": "Flag to identify if it is a private note"
+ },
+ {
+ "in": "formData",
+ "name": "attachments",
+ "type": "array",
+ "description": "The files to be uploaded.",
+ "items": {
+ "type": "file"
+ }
}
],
"responses": {
"200": {
- "description": "Array of messages",
- "type": "array",
+ "description": "Success",
"schema": {
"allOf": [
{
@@ -550,14 +631,54 @@
"description": "Access denied"
}
}
+ }
+ },
+ "/accounts/{account_id}/conversations/{converstion_id}/messages": {
+ "parameters": [
+ {
+ "$ref": "#/parameters/account_id"
+ },
+ {
+ "$ref": "#/parameters/conversation_id"
+ }
+ ],
+ "get": {
+ "tags": [
+ "Messages"
+ ],
+ "operationId": "list-all-messages",
+ "summary": "Get messages",
+ "description": "List all messages of a conversation",
+ "responses": {
+ "200": {
+ "description": "Array of messages",
+ "type": "array",
+ "schema": {
+ "allOf": [
+ {
+ "$ref": "#/definitions/generic_id"
+ },
+ {
+ "$ref": "#/definitions/message"
+ }
+ ]
+ }
+ },
+ "404": {
+ "description": "Conversation not found"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ }
},
"post": {
"tags": [
"Messages"
],
- "operationId": "conversationNewMessage",
+ "operationId": "create-a-new-message-in-a-conversation",
"summary": "Create New Message",
- "description": "All the agent replies are created as new messages through this endpoint",
+ "description": "Create a new message in the conversation",
"security": [
{
"userApiKey": [
@@ -571,13 +692,6 @@
}
],
"parameters": [
- {
- "name": "id",
- "in": "path",
- "type": "number",
- "description": "ID of the conversation",
- "required": true
- },
{
"name": "data",
"in": "body",
@@ -610,23 +724,54 @@
}
}
},
- "/accounts/{account_id}/conversations/{id}/labels": {
+ "/accounts/{account_id}/conversations/{conversation_id}/messages/{message_id}": {
+ "parameters": [
+ {
+ "$ref": "#/parameters/account_id"
+ },
+ {
+ "$ref": "#/parameters/conversation_id"
+ },
+ {
+ "$ref": "#/parameters/message_id"
+ }
+ ],
+ "delete": {
+ "tags": [
+ "Messages"
+ ],
+ "operationId": "delete-a-message",
+ "summary": "Delete a message",
+ "description": "Delete a message and it's attachments from the conversation.",
+ "responses": {
+ "200": {
+ "description": "Success"
+ },
+ "401": {
+ "description": "Unauthorized"
+ },
+ "404": {
+ "description": "The message or conversation does not exist in the account"
+ }
+ }
+ }
+ },
+ "/accounts/{account_id}/conversations/{conversation_id}/labels": {
+ "parameters": [
+ {
+ "$ref": "#/parameters/account_id"
+ },
+ {
+ "$ref": "#/parameters/conversation_id"
+ }
+ ],
"get": {
"tags": [
- "ConversationLabels"
+ "Conversation Labels"
],
- "operationId": "conversationLabelsList",
+ "operationId": "list-all-labels-of-a-conversation",
"summary": "List Labels",
"description": "Lists all the labels of a conversation",
- "parameters": [
- {
- "name": "id",
- "in": "path",
- "type": "number",
- "description": "ID of the conversation",
- "required": true
- }
- ],
"responses": {
"200": {
"description": "Success",
@@ -637,26 +782,19 @@
"404": {
"description": "Conversation not found"
},
- "403": {
- "description": "Access denied"
+ "401": {
+ "description": "Unauthorized"
}
}
},
"post": {
"tags": [
- "ConversationLabels"
+ "Conversation Labels"
],
- "operationId": "conversationAddLabels",
+ "operationId": "conversation-add-labels",
"summary": "Add Labels",
- "description": "Creates new labels and associates it with the conversation",
+ "description": "Add labels to a conversation. Note that this API would overwrite the existing list of labels associated to the conversation.",
"parameters": [
- {
- "name": "id",
- "in": "path",
- "type": "number",
- "description": "ID of the conversation",
- "required": true
- },
{
"name": "data",
"in": "body",
@@ -666,7 +804,7 @@
"properties": {
"labels": {
"type": "array",
- "description": "Array of labels",
+ "description": "Array of labels (comma-separated strings)",
"properties": {
"type": "string"
}
@@ -685,28 +823,29 @@
"404": {
"description": "Conversation not found"
},
- "403": {
- "description": "Access denied"
+ "401": {
+ "description": "Unauthorized"
}
}
}
},
- "/accounts/{account_id}/conversations/{id}/assignments": {
+ "/accounts/{account_id}/conversations/{conversation_id}/assignments": {
+ "parameters": [
+ {
+ "$ref": "#/parameters/account_id"
+ },
+ {
+ "$ref": "#/parameters/conversation_id"
+ }
+ ],
"post": {
"tags": [
- "ConversationAssignment"
+ "Conversation Assignment"
],
- "operationId": "conversationAssignment",
+ "operationId": "assign-a-conversation",
"summary": "Assign Conversation",
- "description": "Assign a conversation to an agent",
+ "description": "Assign a conversation to an agent or a team",
"parameters": [
- {
- "name": "id",
- "in": "path",
- "type": "number",
- "description": "id of the conversation",
- "required": true
- },
{
"name": "data",
"in": "body",
@@ -715,7 +854,12 @@
"type": "object",
"properties": {
"assignee_id": {
- "type": "number"
+ "type": "number",
+ "description": "Id of the assignee user"
+ },
+ "team_id": {
+ "type": "number",
+ "description": "Id of the team. If the assignee_id is present, this param would be ignored"
}
}
}
@@ -731,8 +875,8 @@
"404": {
"description": "Conversation not found"
},
- "403": {
- "description": "Access denied"
+ "401": {
+ "description": "Unauthorized"
}
}
}
@@ -743,13 +887,14 @@
"Contact"
],
"operationId": "contactList",
- "description": "Listing all the contacts with pagination",
+ "description": "Listing all the contacts with pagination (Page size = 15)",
"summary": "List Contacts",
"parameters": [
{
- "name": "query_hash",
- "in": "query",
- "type": "string"
+ "$ref": "#/parameters/contact_sort_param"
+ },
+ {
+ "$ref": "#/parameters/page"
}
],
"responses": {
@@ -908,13 +1053,19 @@
"Contact"
],
"operationId": "contactSearch",
- "description": "Search the contacts using a search key, currently supports email search",
+ "description": "Search the contacts using a search key, currently supports email search (Page size = 15)",
"summary": "Search Contacts",
"parameters": [
{
"name": "q",
"in": "query",
"type": "string"
+ },
+ {
+ "$ref": "#/parameters/contact_sort_param"
+ },
+ {
+ "$ref": "#/parameters/page"
}
],
"responses": {
@@ -958,6 +1109,9 @@
"type": "number",
"description": "The id of the inbox",
"required": true
+ },
+ "source_id": {
+ "$ref": "#/parameters/source_id"
}
}
}
@@ -982,6 +1136,33 @@
}
}
},
+ "/accounts/{account_id}/contacts/{id}/contactable_inboxes": {
+ "get": {
+ "tags": [
+ "Contact"
+ ],
+ "operationId": "contactableInboxesGet",
+ "description": "Get List of contactable Inboxes",
+ "summary": "Get Contactable Inboxes",
+ "responses": {
+ "200": {
+ "description": "Success",
+ "schema": {
+ "$ref": "#/definitions/contactable_inboxes"
+ }
+ },
+ "401": {
+ "description": "Authentication error",
+ "schema": {
+ "$ref": "#/definitions/bad_request_error"
+ }
+ },
+ "422": {
+ "description": "Incorrect payload"
+ }
+ }
+ }
+ },
"/profile": {
"get": {
"tags": [
@@ -1002,6 +1183,144 @@
}
}
}
+ },
+ "/accounts/{account_id}/teams": {
+ "parameters": [
+ {
+ "$ref": "#/parameters/account_id"
+ }
+ ],
+ "get": {
+ "tags": [
+ "Teams"
+ ],
+ "operationId": "list-all-teams",
+ "summary": "List all teams",
+ "description": "List all teams available in the current account",
+ "responses": {
+ "200": {
+ "description": "Success",
+ "schema": {
+ "$ref": "#/definitions/team"
+ }
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ }
+ },
+ "post": {
+ "tags": [
+ "Teams"
+ ],
+ "operationId": "create-a-team",
+ "summary": "Create a team",
+ "description": "Create a team in the account",
+ "parameters": [
+ {
+ "$ref": "#/parameters/account_id"
+ },
+ {
+ "name": "data",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/team_create_update_payload"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Success",
+ "schema": {
+ "$ref": "#/definitions/team"
+ }
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ }
+ }
+ },
+ "/accounts/{account_id}/teams/{id}": {
+ "parameters": [
+ {
+ "$ref": "#/parameters/account_id"
+ },
+ {
+ "$ref": "#/parameters/team_id"
+ }
+ ],
+ "get": {
+ "tags": [
+ "Teams"
+ ],
+ "operationId": "get-details-of-a-single-team",
+ "summary": "Get a team details",
+ "description": "Get the details of a team in the account",
+ "responses": {
+ "200": {
+ "description": "Success",
+ "schema": {
+ "$ref": "#/definitions/team"
+ }
+ },
+ "401": {
+ "description": "Unauthorized"
+ },
+ "404": {
+ "description": "The given team id does not exist in the account"
+ }
+ }
+ },
+ "patch": {
+ "tags": [
+ "Teams"
+ ],
+ "operationId": "update-a-team",
+ "summary": "Update a team",
+ "description": "Update a team's attributes",
+ "parameters": [
+ {
+ "name": "data",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/team_create_update_payload"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Success",
+ "schema": {
+ "$ref": "#/definitions/team"
+ }
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ }
+ },
+ "delete": {
+ "tags": [
+ "Teams"
+ ],
+ "operationId": "delete-a-team",
+ "summary": "Delete a team",
+ "description": "Delete a team from the account",
+ "responses": {
+ "200": {
+ "description": "Success"
+ },
+ "401": {
+ "description": "Unauthorized"
+ },
+ "404": {
+ "description": "The team does not exist in the account"
+ }
+ }
+ }
}
},
"definitions": {
@@ -1305,6 +1624,18 @@
}
}
},
+ "contactable_inboxes": {
+ "type": "object",
+ "properties": {
+ "source_id": {
+ "type": "string",
+ "description": "Contact Inbox Source Id"
+ },
+ "inbox": {
+ "$ref": "#/definitions/inbox"
+ }
+ }
+ },
"account": {
"type": "object",
"properties": {
@@ -1326,6 +1657,35 @@
}
}
},
+ "team": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "number",
+ "description": "The id of the team"
+ },
+ "name": {
+ "type": "string",
+ "description": "The name of the team"
+ },
+ "description": {
+ "type": "string",
+ "description": "The description about the team"
+ },
+ "allow_auto_assign": {
+ "type": "boolean",
+ "description": "If this setting is turned on, the system would automatically assign the conversation to an agent in the team while assigning the conversation to a team"
+ },
+ "account_id": {
+ "type": "number",
+ "description": "The id of the account with the team is a part of"
+ },
+ "is_member": {
+ "type": "boolean",
+ "description": "This field shows whether the current user is a part of the team"
+ }
+ }
+ },
"extended_contact": {
"allOf": [
{
@@ -1671,6 +2031,94 @@
"description": "attributes based on your content type"
}
}
+ },
+ "team_create_update_payload": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "The name of the team"
+ },
+ "description": {
+ "type": "string",
+ "description": "The description of the team"
+ },
+ "allow_auto_assign": {
+ "type": "boolean",
+ "description": "If this setting is turned on, the system would automatically assign the conversation to an agent in the team while assigning the conversation to a team"
+ }
+ }
+ }
+ },
+ "parameters": {
+ "account_id": {
+ "in": "path",
+ "name": "account_id",
+ "schema": {
+ "type": "integer"
+ },
+ "required": true,
+ "description": "The numeric ID of the account"
+ },
+ "team_id": {
+ "in": "path",
+ "name": "id",
+ "schema": {
+ "type": "integer"
+ },
+ "required": true,
+ "description": "The id of the team to be updated"
+ },
+ "source_id": {
+ "type": "string",
+ "description": "Id of the session for which the conversation is created.\n\n\n\n Source Ids can be obtained through contactable inboxes API or via generated.