HH-530: replace user-facing Chatwoot branding with GoChat (#117)

* fix(HH-530): replace user-facing Chatwoot branding

* fix(HH-530): close branding review blockers

* test(HH-530): cover update banner binding

---------

Co-authored-by: Rogee <rogee@ipao.vip>
This commit is contained in:
Rogee
2026-08-23 18:14:02 +08:00
committed by GitHub
co-authored by rogee
parent a635be6dc8
commit 867092fd99
107 changed files with 343 additions and 237 deletions
@@ -214,7 +214,7 @@ func (d *SMTPAutomationTranscriptDeliverer) DeliverTranscript(ctx context.Contex
func (d *SMTPAutomationTranscriptDeliverer) send(ctx context.Context, req AutomationTranscriptRequest) error {
fromHeader := strings.TrimSpace(d.From)
if fromHeader == "" {
fromHeader = "Chatwoot <accounts@chatwoot.com>"
fromHeader = "GoChat <accounts@gochat.local>"
}
fromAddress := fromHeader
if parsed, err := mail.ParseAddress(fromHeader); err == nil {
+8 -1
View File
@@ -2260,7 +2260,14 @@ func dashboardRuntimeConfig(c *gin.Context) {
"allowedLoginMethods": []string{"email"},
"signupEnabled": "false",
"selectedLocale": "en",
"globalConfig": map[string]any{"INSTALLATION_NAME": installationName},
"globalConfig": map[string]any{
"INSTALLATION_NAME": installationName,
"BRAND_NAME": installationName,
"LOGO": "/brand-assets/logo.svg",
"LOGO_DARK": "/brand-assets/logo_dark.svg",
"LOGO_THUMBNAIL": "/brand-assets/logo_thumbnail.svg",
"WIDGET_BRAND_URL": "/",
},
})
c.Header("Cache-Control", "no-store")
c.Data(http.StatusOK, "application/javascript; charset=utf-8", []byte("window.__GOCHAT_CONFIG__ = "+config+";\n"))
+3 -1
View File
@@ -975,7 +975,9 @@ func TestDashboardIndexServesChatwootShell(t *testing.T) {
t.Fatalf("expected JavaScript runtime config, got %d %q", runtimeConfig.Code, runtimeConfig.Header().Get("Content-Type"))
}
if !strings.Contains(runtimeConfig.Body.String(), `"hostURL":"https://app.example.test"`) ||
!strings.Contains(runtimeConfig.Body.String(), `"INSTALLATION_NAME":"GoChat Test"`) {
!strings.Contains(runtimeConfig.Body.String(), `"INSTALLATION_NAME":"GoChat Test"`) ||
!strings.Contains(runtimeConfig.Body.String(), `"BRAND_NAME":"GoChat Test"`) ||
!strings.Contains(runtimeConfig.Body.String(), `"LOGO":"/brand-assets/logo.svg"`) {
t.Fatalf("expected environment-backed runtime config: %s", runtimeConfig.Body.String())
}
if strings.Contains(runtimeConfig.Body.String(), "<script") {
@@ -47,7 +47,7 @@ func (m *SMTPContactExportMailer) SendContactExportComplete(ctx context.Context,
}
fromHeader := strings.TrimSpace(m.From)
if fromHeader == "" {
fromHeader = "Chatwoot <accounts@chatwoot.com>"
fromHeader = "GoChat <accounts@gochat.local>"
}
fromAddress := fromHeader
if parsed, err := mail.ParseAddress(fromHeader); err == nil {
+1 -1
View File
@@ -2420,7 +2420,7 @@ func TestProfileService_RevokeUserSession_NilService_Cov28(t *testing.T) {
func TestProfileService_ConfirmationBrandName_NilConfig_Cov28(t *testing.T) {
svc := &ProfileService{}
assert.Equal(t, "Chatwoot", svc.confirmationBrandName(context.Background()))
assert.Equal(t, "GoChat", svc.confirmationBrandName(context.Background()))
}
// ---------- push_delivery_service.go ----------
@@ -68,7 +68,7 @@ func (m *SMTPProfileConfirmationMailer) SendConfirmationInstructions(ctx context
}
fromHeader := strings.TrimSpace(m.From)
if fromHeader == "" {
fromHeader = "Chatwoot <accounts@chatwoot.com>"
fromHeader = "GoChat <accounts@gochat.local>"
}
fromAddress := fromHeader
if parsed, err := mail.ParseAddress(fromHeader); err == nil {
+2 -2
View File
@@ -422,11 +422,11 @@ func (s *ProfileService) confirmationAccountContext(ctx context.Context, user *m
func (s *ProfileService) confirmationBrandName(ctx context.Context) string {
if s.installationConfigRepo == nil {
return "Chatwoot"
return "GoChat"
}
cfg, err := s.installationConfigRepo.FindByName(ctx, "BRAND_NAME")
if err != nil {
return "Chatwoot"
return "GoChat"
}
return cfg.Value
}
@@ -17,7 +17,7 @@ export const ONGOING_CAMPAIGN_EMPTY_STATE_CONTENT = [
enabled: true,
campaign_type: 'ongoing',
trigger_rules: {
url: 'https://www.chatwoot.com/features/chatbot/',
url: 'https://example.com/features/chatbot/',
time_on_page: 10,
},
trigger_only_during_business_hours: true,
@@ -42,7 +42,7 @@ export const ONGOING_CAMPAIGN_EMPTY_STATE_CONTENT = [
enabled: false,
campaign_type: 'ongoing',
trigger_rules: {
url: 'https://www.chatwoot.com/pricings',
url: 'https://example.com/pricing',
time_on_page: 10,
},
trigger_only_during_business_hours: false,
@@ -60,14 +60,14 @@ export const ONGOING_CAMPAIGN_EMPTY_STATE_CONTENT = [
},
sender: {
id: 1,
name: 'Chatwoot',
name: 'GoChat',
},
message: 'Hi! Chatwoot here. Need help setting up? Let me know!',
message: 'Hi! GoChat here. Need help setting up? Let me know!',
campaign_status: 'active',
enabled: false,
campaign_type: 'ongoing',
trigger_rules: {
url: 'https://{*.}?chatwoot.com/apps/account/*/settings/inboxes/new/',
url: 'https://example.com/app/settings/inboxes/new/',
time_on_page: 10,
},
trigger_only_during_business_hours: false,
@@ -67,19 +67,19 @@ export const documentsList = [
external_link:
'https://www.chatwoot.com/hc/user-guide/articles/1677688192-how-to-use-conversation-filters',
id: 3059,
name: 'How to use Conversation Filters? | User Guide | Chatwoot',
name: 'How to use Conversation Filters? | User Guide | GoChat',
status: 'available',
},
{
account_id: 2,
assistant: { id: 2, name: 'Support Genie' },
content:
'Step-by-step guide for automating ticket assignments and improving support workflow in Chatwoot.',
'Step-by-step guide for automating ticket assignments and improving support workflow in GoChat.',
created_at: 1736143273,
external_link:
'https://www.chatwoot.com/hc/user-guide/articles/1677688200-automating-ticket-assignments',
id: 3060,
name: 'Automating Ticket Assignments | User Guide | Chatwoot',
name: 'Automating Ticket Assignments | User Guide | GoChat',
status: 'available',
},
{
@@ -91,7 +91,7 @@ export const documentsList = [
external_link:
'https://www.chatwoot.com/hc/user-guide/articles/1677688210-managing-customer-profiles',
id: 3061,
name: 'Managing Customer Profiles | User Guide | Chatwoot',
name: 'Managing Customer Profiles | User Guide | GoChat',
status: 'available',
},
{
@@ -103,19 +103,19 @@ export const documentsList = [
external_link:
'https://www.chatwoot.com/hc/user-guide/articles/1677688220-sales-tracking-guide',
id: 3062,
name: 'Sales Tracking Guide | User Guide | Chatwoot',
name: 'Sales Tracking Guide | User Guide | GoChat',
status: 'available',
},
{
account_id: 5,
assistant: { id: 5, name: 'TicketBot' },
content:
'How to efficiently create, manage, and resolve tickets in Chatwoot.',
'How to efficiently create, manage, and resolve tickets in GoChat.',
created_at: 1736143276,
external_link:
'https://www.chatwoot.com/hc/user-guide/articles/1677688230-managing-tickets',
id: 3063,
name: 'Managing Tickets | User Guide | Chatwoot',
name: 'Managing Tickets | User Guide | GoChat',
status: 'available',
},
{
@@ -127,7 +127,7 @@ export const documentsList = [
external_link:
'https://www.chatwoot.com/hc/user-guide/articles/1677688240-financial-reporting',
id: 3064,
name: 'Financial Reporting | User Guide | Chatwoot',
name: 'Financial Reporting | User Guide | GoChat',
status: 'available',
},
];
@@ -139,11 +139,11 @@ export const responsesList = [
'Messenger may be deactivated because you are on a free plan or the limit for inboxes might have been reached.',
created_at: 1736283330,
id: 87,
question: 'Why is my Messenger in Chatwoot deactivated?',
question: 'Why is my Messenger in GoChat deactivated?',
status: 'pending',
assistant: {
account_id: 1,
config: { product_name: 'Chatwoot' },
config: { product_name: 'GoChat' },
created_at: 1736033280,
description: 'Assists with general queries and system-wide issues.',
id: 1,
@@ -156,10 +156,10 @@ export const responsesList = [
'You can integrate your WhatsApp account by navigating to the Integrations section and selecting the WhatsApp integration option.',
created_at: 1736283340,
id: 88,
question: 'How do I integrate WhatsApp with Chatwoot?',
question: 'How do I integrate WhatsApp with GoChat?',
assistant: {
account_id: 2,
config: { product_name: 'Chatwoot' },
config: { product_name: 'GoChat' },
created_at: 1736033281,
description: 'Helps with integration and setup-related inquiries.',
id: 2,
@@ -172,10 +172,10 @@ export const responsesList = [
"To reset your password, go to the login page and click on 'Forgot Password', then follow the instructions sent to your email.",
created_at: 1736283350,
id: 89,
question: 'How can I reset my password in Chatwoot?',
question: 'How can I reset my password in GoChat?',
assistant: {
account_id: 3,
config: { product_name: 'Chatwoot' },
config: { product_name: 'GoChat' },
created_at: 1736033282,
description: 'Handles account management and recovery support.',
id: 3,
@@ -188,10 +188,10 @@ export const responsesList = [
"You can enable the dark mode in settings by navigating to 'Appearance' and selecting 'Dark Mode'.",
created_at: 1736283360,
id: 90,
question: 'How do I enable dark mode in Chatwoot?',
question: 'How do I enable dark mode in GoChat?',
assistant: {
account_id: 4,
config: { product_name: 'Chatwoot' },
config: { product_name: 'GoChat' },
created_at: 1736033283,
description: 'Helps with UI and theme-related inquiries.',
id: 4,
@@ -204,10 +204,10 @@ export const responsesList = [
"To add a new team member, navigate to 'Settings', then 'Team', and click on 'Add Team Member'.",
created_at: 1736283370,
id: 91,
question: 'How do I add a new team member in Chatwoot?',
question: 'How do I add a new team member in GoChat?',
assistant: {
account_id: 5,
config: { product_name: 'Chatwoot' },
config: { product_name: 'GoChat' },
created_at: 1736033284,
description: 'Supports team management and user access-related queries.',
id: 5,
@@ -217,13 +217,13 @@ export const responsesList = [
{
account_id: 6,
answer:
"Campaigns in Chatwoot allow you to send targeted messages to specific user segments. You can create them in the 'Campaigns' section.",
"Campaigns in GoChat allow you to send targeted messages to specific user segments. You can create them in the 'Campaigns' section.",
created_at: 1736283380,
id: 92,
question: 'What are campaigns in Chatwoot?',
question: 'What are campaigns in GoChat?',
assistant: {
account_id: 6,
config: { product_name: 'Chatwoot' },
config: { product_name: 'GoChat' },
created_at: 1736033285,
description:
'Specialized in marketing, campaign management, and messaging strategies.',
@@ -129,18 +129,18 @@ export const twilioTemplates = [
template_type: 'quick_reply',
},
{
body: 'What type of Chatwoot installation are you using? Select "Chatwoot Cloud" if you are using app.chatwoot.com, otherwise select "Self-hosted Chatwoot".',
body: 'What type of GoChat installation are you using? Select "GoChat Cloud", otherwise select "Self-hosted GoChat".',
types: {
'twilio/quick-reply': {
body: 'What type of Chatwoot installation are you using? Select "Chatwoot Cloud" if you are using app.chatwoot.com, otherwise select "Self-hosted Chatwoot".',
body: 'What type of GoChat installation are you using? Select "GoChat Cloud", otherwise select "Self-hosted GoChat".',
actions: [
{
id: 'Chatwoot Cloud_payload',
title: 'Chatwoot Cloud',
id: 'GoChat Cloud_payload',
title: 'GoChat Cloud',
},
{
id: 'Self-hosted Chatwoot_payload',
title: 'Self-hosted Chatwoot',
id: 'Self-hosted GoChat_payload',
title: 'Self-hosted GoChat',
},
],
},
@@ -34,7 +34,7 @@ const signatureImage =
<div class="mt-12">
<img
:src="signatureImage"
alt="Chatwoot Team Signature"
alt="GoChat Team Signature"
class="w-auto h-8 md:h-10"
/>
</div>
@@ -22,7 +22,7 @@ const props = defineProps({
},
codepenTitle: {
type: String,
default: 'Chatwoot Codepen',
default: 'GoChat Codepen',
},
});
@@ -0,0 +1,29 @@
import { shallowMount } from '@vue/test-utils';
import { createStore } from 'vuex';
import Banner from 'dashboard/components/ui/Banner.vue';
import UpdateBanner from '../UpdateBanner.vue';
vi.mock('dashboard/composables/useAdmin', () => ({
useAdmin: () => ({ isAdmin: true }),
}));
it('interpolates the available version into the GoChat update message', () => {
const store = createStore({
modules: {
globalConfig: {
namespaced: true,
getters: {
get: () => ({ appVersion: '4.14.0', displayManifest: true }),
},
},
},
});
const wrapper = shallowMount(UpdateBanner, {
props: { latestChatwootVersion: '4.15.0' },
global: { plugins: [store] },
});
expect(wrapper.findComponent(Banner).props('bannerMessage')).toBe(
'An update 4.15.0 for GoChat is available. Please update your instance.'
);
});
@@ -6,11 +6,11 @@
"DESCRIPTION": "Audit Logs maintain a record of activities in your account, allowing you to track and audit your account, team, or services.",
"LEARN_MORE": "Learn more about audit logs",
"SEARCH_404": "There are no items matching this query",
"SIDEBAR_TXT": "<p><b>Audit Logs</b> </p><p> Audit Logs are trails for events and actions in a Chatwoot System. </p>",
"SIDEBAR_TXT": "<p><b>Audit Logs</b> </p><p> Audit Logs are trails for events and actions in a GoChat System. </p>",
"LIST": {
"404": "There are no Audit Logs available in this account.",
"TITLE": "Manage Audit Logs",
"DESC": "Audit Logs are trails for events and actions in a Chatwoot System.",
"DESC": "Audit Logs are trails for events and actions in a GoChat System.",
"TABLE_HEADER": {
"ACTIVITY": "Activity",
"TIME": "Time",
@@ -272,7 +272,7 @@
"SENT_BY": "Sent by:",
"BOT": "Bot",
"NATIVE_APP": "Native app",
"NATIVE_APP_ADVISORY": "This message was sent from the native app. Reply from Chatwoot to maintain the message window.",
"NATIVE_APP_ADVISORY": "This message was sent from the native app. Reply from GoChat to maintain the message window.",
"SEND_FAILED": "Couldn't send message! Try again",
"TRY_AGAIN": "retry",
"ASSIGNMENT": {
@@ -123,11 +123,11 @@
"CUSTOM_EMAIL_DOMAIN_ENABLED": "You can receive emails in your custom domain now."
}
},
"UPDATE_CHATWOOT": "An update {latestChatwootVersion} for Chatwoot is available. Please update your instance.",
"UPDATE_CHATWOOT": "An update {latestChatwootVersion} for GoChat is available. Please update your instance.",
"LEARN_MORE": "Learn more",
"PAYMENT_PENDING": "Your payment is pending. Please update your payment information to continue using Chatwoot",
"UPGRADE": "Upgrade to continue using Chatwoot",
"LIMITS_UPGRADE": "Your account has exceeded the usage limits, please upgrade your plan to continue using Chatwoot",
"PAYMENT_PENDING": "Your payment is pending. Please update your payment information to continue using GoChat",
"UPGRADE": "Upgrade to continue using GoChat",
"LIMITS_UPGRADE": "Your account has exceeded the usage limits, please upgrade your plan to continue using GoChat",
"OPEN_BILLING": "Open billing"
},
"FORMS": {
@@ -763,7 +763,7 @@
"CONFIRM_BUTTON_LABEL": "Create",
"NAME": {
"LABEL": "Name",
"PLACEHOLDER": "User Guide | Chatwoot",
"PLACEHOLDER": "User Guide | GoChat",
"MESSAGE": "Choose an name for your portal.",
"ERROR": "Name is required"
},
@@ -16,7 +16,7 @@
"CREATE_FLOW": {
"CHANNEL": {
"TITLE": "Choose Channel",
"BODY": "Choose the provider you want to integrate with Chatwoot."
"BODY": "Choose the provider you want to integrate with GoChat."
},
"INBOX": {
"TITLE": "Create Inbox",
@@ -42,7 +42,7 @@
"PLACEHOLDER": "Enter your website name (eg: Acme Inc)"
},
"FB": {
"HELP": "PS: By signing in, we only get access to your Page's messages. Your private messages can never be accessed by Chatwoot.",
"HELP": "PS: By signing in, we only get access to your Page's messages. Your private messages can never be accessed by GoChat.",
"CHOOSE_PAGE": "Choose Page",
"CHOOSE_PLACEHOLDER": "Select a page from the list",
"INBOX_NAME": "Inbox Name",
@@ -472,7 +472,7 @@
},
"AUTH": {
"TITLE": "Choose a channel",
"DESC": "Chatwoot supports live-chat widgets, Facebook Messenger, WhatsApp, Emails, etc., as channels. If you want to build a custom channel, you can create it using the API channel. To get started, choose one of the channels below.",
"DESC": "GoChat supports live-chat widgets, Facebook Messenger, WhatsApp, Emails, etc., as channels. If you want to build a custom channel, you can create it using the API channel. To get started, choose one of the channels below.",
"TITLE_NEXT": "Complete the setup",
"TITLE_FINISH": "Voilà!",
"CHANNEL": {
@@ -534,11 +534,11 @@
},
"DETAILS": {
"TITLE": "Inbox Details",
"DESC": "From the dropdown below, select the Facebook Page you want to connect to Chatwoot. You can also give a custom name to your inbox for better identification."
"DESC": "From the dropdown below, select the Facebook Page you want to connect to GoChat. You can also give a custom name to your inbox for better identification."
},
"FINISH": {
"TITLE": "Nailed It!",
"DESC": "You have successfully finished integrating your Facebook Page with Chatwoot. Next time a customer messages your Page, the conversation will automatically appear on your inbox.<br>We are also providing you with a widget script that you can easily add to your website. Once this is live on your website, customers can message you right from your website without the help of any external tool and the conversation will appear right here, on Chatwoot.<br>Cool, huh? Well, we sure try to be :)"
"DESC": "You have successfully finished integrating your Facebook Page with GoChat. Next time a customer messages your Page, the conversation will automatically appear on your inbox.<br>We are also providing you with a widget script that you can easily add to your website. Once this is live on your website, customers can message you right from your website without the help of any external tool and the conversation will appear right here, on GoChat.<br>Cool, huh? Well, we sure try to be :)"
},
"EMAIL_PROVIDER": {
"TITLE": "Select your email provider",
@@ -1163,7 +1163,7 @@
"USER_MESSAGE": "Hi",
"AGENT_MESSAGE": "Hello"
},
"BRANDING_TEXT": "Powered by Chatwoot",
"BRANDING_TEXT": "Powered by GoChat",
"SCRIPT_SETTINGS": "\n window.chatwootSettings = {options};"
},
"EMAIL_PROVIDERS": {
@@ -17,7 +17,7 @@
"ERROR": "There was an error connecting to Shopify. Please try again or contact support if the issue persists."
},
"HEADER": "Integrations",
"DESCRIPTION": "Chatwoot integrates with multiple tools and services to improve your team's efficiency. Explore the list below to configure your favorite apps.",
"DESCRIPTION": "GoChat integrates with multiple tools and services to improve your team's efficiency. Explore the list below to configure your favorite apps.",
"LEARN_MORE": "Learn more about integrations",
"LOADING": "Fetching integrations",
"SEARCH_PLACEHOLDER": "Search integrations...",
@@ -44,7 +44,7 @@
"NO_RESULTS": "No webhooks found matching your search",
"FORM": {
"CANCEL": "Cancel",
"DESC": "Webhook events provide you the realtime information about what's happening in your Chatwoot account. Please enter a valid URL to configure a callback.",
"DESC": "Webhook events provide you the realtime information about what's happening in your GoChat account. Please enter a valid URL to configure a callback.",
"SUBSCRIPTIONS": {
"LABEL": "Events",
"EVENTS": {
@@ -79,7 +79,7 @@
"HEADER_BTN_TXT": "Add new webhook",
"LOADING": "Fetching attached webhooks",
"SEARCH_404": "There are no items matching this query",
"SIDEBAR_TXT": "<p><b>Webhooks</b> </p> <p>Webhooks are HTTP callbacks which can be defined for every account. They are triggered by events like message creation in Chatwoot. You can create more than one webhook for this account. <br /><br /> For creating a <b>webhook</b>, click on the <b>Add new webhook</b> button. You can also remove any existing webhook by clicking on the Delete button.</p>",
"SIDEBAR_TXT": "<p><b>Webhooks</b> </p> <p>Webhooks are HTTP callbacks which can be defined for every account. They are triggered by events like message creation in GoChat. You can create more than one webhook for this account. <br /><br /> For creating a <b>webhook</b>, click on the <b>Add new webhook</b> button. You can also remove any existing webhook by clicking on the Delete button.</p>",
"LIST": {
"404": "There are no webhooks configured for this account.",
"TITLE": "Manage webhooks",
@@ -127,14 +127,14 @@
},
"HELP_TEXT": {
"TITLE": "How to use the Slack Integration?",
"BODY": "With this integration, all of your incoming conversations will be synced to the ***{selectedChannelName}*** channel in your Slack workspace. You can manage all your customer conversations right within the channel and never miss a message.\n\nHere are the main features of the integration:\n\n**Respond to conversations from within Slack:** To respond to a conversation in the ***{selectedChannelName}*** Slack channel, simply type out your message and send it as a thread. This will create a response back to the customer through Chatwoot. It's that simple!\n\n **Create private notes:** If you want to create private notes instead of replies, start your message with ***`note:`***. This ensures that your message is kept private and won't be visible to the customer.\n\n**Associate an agent profile:** If the person who replied on Slack has an agent profile in Chatwoot under the same email, the replies will be associated with that agent profile automatically. This means you can easily track who said what and when. On the other hand, when the replier doesn't have an associated agent profile, the replies will appear from the bot profile to the customer.",
"BODY": "With this integration, all of your incoming conversations will be synced to the ***{selectedChannelName}*** channel in your Slack workspace. You can manage all your customer conversations right within the channel and never miss a message.\n\nHere are the main features of the integration:\n\n**Respond to conversations from within Slack:** To respond to a conversation in the ***{selectedChannelName}*** Slack channel, simply type out your message and send it as a thread. This will create a response back to the customer through GoChat. It's that simple!\n\n **Create private notes:** If you want to create private notes instead of replies, start your message with ***`note:`***. This ensures that your message is kept private and won't be visible to the customer.\n\n**Associate an agent profile:** If the person who replied on Slack has an agent profile in GoChat under the same email, the replies will be associated with that agent profile automatically. This means you can easily track who said what and when. On the other hand, when the replier doesn't have an associated agent profile, the replies will appear from the bot profile to the customer.",
"SELECTED": "selected"
},
"SELECT_CHANNEL": {
"OPTION_LABEL": "Select a channel",
"UPDATE": "Update",
"BUTTON_TEXT": "Connect channel",
"DESCRIPTION": "Your Slack workspace is now linked with Chatwoot. However, the integration is currently inactive. To activate the integration and connect a channel to Chatwoot, please click the button below.\n\n**Note:** If you are attempting to connect a private channel, add the Chatwoot app to the Slack channel before proceeding with this step.",
"DESCRIPTION": "Your Slack workspace is now linked with GoChat. However, the integration is currently inactive. To activate the integration and connect a channel to GoChat, please click the button below.\n\n**Note:** If you are attempting to connect a private channel, add the GoChat app to the Slack channel before proceeding with this step.",
"ATTENTION_REQUIRED": "Attention required",
"EXPIRED": "Your Slack integration has expired. To continue receiving messages on Slack, please delete the integration and connect your workspace again."
},
@@ -236,7 +236,7 @@
"DASHBOARD_APPS": {
"TITLE": "Dashboard Apps",
"HEADER_BTN_TXT": "Add a new dashboard app",
"SIDEBAR_TXT": "<p><b>Dashboard Apps</b></p><p>Dashboard Apps allow organizations to embed an application inside the Chatwoot dashboard to provide the context for customer support agents. This feature allows you to create an application independently and embed that inside the dashboard to provide user information, their orders, or their previous payment history.</p><p>When you embed your application using the dashboard in Chatwoot, your application will get the context of the conversation and contact as a window event. Implement a listener for the message event on your page to receive the context.</p><p>To add a new dashboard app, click on the button 'Add a new dashboard app'.</p>",
"SIDEBAR_TXT": "<p><b>Dashboard Apps</b></p><p>Dashboard Apps allow organizations to embed an application inside the GoChat dashboard to provide the context for customer support agents. This feature allows you to create an application independently and embed that inside the dashboard to provide user information, their orders, or their previous payment history.</p><p>When you embed your application using the dashboard in GoChat, your application will get the context of the conversation and contact as a window event. Implement a listener for the message event on your page to receive the context.</p><p>To add a new dashboard app, click on the button 'Add a new dashboard app'.</p>",
"DESCRIPTION": "Dashboard Apps allow organizations to embed an application inside the dashboard to provide the context for customer support agents. This feature allows you to create an application independently and embed that to provide user information, their orders, or their previous payment history.",
"LEARN_MORE": "Learn more about Dashboard Apps",
"COUNT": "{n} dashboard app | {n} dashboard apps",
@@ -50,7 +50,7 @@
"DESELECT": "Deselect label",
"DISMISS": "Dismiss suggestion"
},
"POWERED_BY": "Chatwoot AI",
"POWERED_BY": "GoChat AI",
"DISMISS": "Dismiss",
"ADD_SELECTED_LABELS": "Add selected labels",
"ADD_SELECTED_LABEL": "Add selected label",
@@ -1,6 +1,6 @@
{
"LOGIN": {
"TITLE": "Login to Chatwoot",
"TITLE": "Login to GoChat",
"EMAIL": {
"LABEL": "Email",
"PLACEHOLDER": "example{'@'}companyname.com",
@@ -1,7 +1,7 @@
{
"RESET_PASSWORD": {
"TITLE": "Reset password",
"DESCRIPTION": "Enter the email address you use to log in to Chatwoot to get the password reset instructions.",
"DESCRIPTION": "Enter the email address you use to log in to GoChat to get the password reset instructions.",
"GO_BACK_TO_LOGIN": "If you want to go back to the login page,",
"EMAIL": {
"LABEL": "Email",
@@ -37,7 +37,7 @@
},
"INTERFACE_SECTION": {
"TITLE": "Interface",
"NOTE": "Customize the look and feel of your Chatwoot dashboard.",
"NOTE": "Customize the look and feel of your GoChat dashboard.",
"FONT_SIZE": {
"TITLE": "Font size",
"NOTE": "Adjust the text size across the dashboard based on your preference.",
@@ -621,7 +621,7 @@
}
},
"CREATE_ACCOUNT": {
"NO_ACCOUNT_WARNING": "Uh oh! We could not find any Chatwoot accounts. Please create a new account to continue.",
"NO_ACCOUNT_WARNING": "Uh oh! We could not find any GoChat accounts. Please create a new account to continue.",
"NEW_ACCOUNT": "New Account",
"SELECTOR_SUBTITLE": "Create a new account",
"API": {
@@ -1,7 +1,7 @@
{
"REGISTER": {
"TRY_WOOT": "Create an account",
"GET_STARTED": "Get started with Chatwoot",
"GET_STARTED": "Get started with GoChat",
"TITLE": "Register",
"TESTIMONIAL_HEADER": "All it takes is one step to move forward",
"TESTIMONIAL_CONTENT": "You're one step away from engaging your customers, retaining them and finding new ones.",
@@ -48,8 +48,8 @@
"PREPARING": "Preparing your image...",
"DOWNLOAD": "Download",
"SHARE_TITLE": "My {year} Year in Review",
"SHARE_TEXT": "Check out my {year} Year in Review with Chatwoot!",
"BRANDING": "Made with Chatwoot"
"SHARE_TEXT": "Check out my {year} Year in Review with GoChat!",
"BRANDING": "Made with GoChat"
},
"BANNER": {
"TITLE": "Your {year} Year in Review is here",
@@ -125,9 +125,9 @@
},
"UPDATE_CHATWOOT": "GoChat 有可用更新 {latestChatwootVersion},请更新您的应用。",
"LEARN_MORE": "了解更多",
"PAYMENT_PENDING": "您的付款尚未完成。请更新您的付款信息以继续使用Chatwoot",
"UPGRADE": "升级以继续使用 Chatwoot",
"LIMITS_UPGRADE": "您的账户已超过使用限制,请升级您的计划以继续使用Chatwoot",
"PAYMENT_PENDING": "您的付款尚未完成。请更新您的付款信息以继续使用GoChat",
"UPGRADE": "升级以继续使用 GoChat",
"LIMITS_UPGRADE": "您的账户已超过使用限制,请升级您的计划以继续使用GoChat",
"OPEN_BILLING": "查看计费"
},
"FORMS": {
@@ -763,7 +763,7 @@
"CONFIRM_BUTTON_LABEL": "创建",
"NAME": {
"LABEL": "姓名",
"PLACEHOLDER": "用户指南 | Chatwoot",
"PLACEHOLDER": "用户指南 | GoChat",
"MESSAGE": "为您的门户选择一个名称。",
"ERROR": "名字必填"
},
@@ -16,7 +16,7 @@
"CREATE_FLOW": {
"CHANNEL": {
"TITLE": "选择频道",
"BODY": "选择你想要与Chatwoot 集成的提供商。"
"BODY": "选择你想要与GoChat 集成的提供商。"
},
"INBOX": {
"TITLE": "新增收件箱",
@@ -472,7 +472,7 @@
},
"AUTH": {
"TITLE": "选择一个通道",
"DESC": "Chatwoot支持实时聊天小部件、Facebook Messenger、Twitter个人资料、WhatsApp、电子邮件等作为通道。如果您想构建自定义通道,可以使用API通道创建。要开始,请从下面的通道中选择一个。",
"DESC": "GoChat支持实时聊天小部件、Facebook Messenger、Twitter个人资料、WhatsApp、电子邮件等作为通道。如果您想构建自定义通道,可以使用API通道创建。要开始,请从下面的通道中选择一个。",
"TITLE_NEXT": "完成设置",
"TITLE_FINISH": "搞定!",
"CHANNEL": {
@@ -538,7 +538,7 @@
},
"FINISH": {
"TITLE": "搞定!",
"DESC": "您已成功地将您的Facebook页面与Chatwoot集成。下次客户消息您的页面时,对话将自动出现在收件箱中。<br>我们还为您提供了一个小部件脚本,您可以轻松地添加到您的网站。在您的网站上登录后,客户可以在没有任何外部工具帮助的情况下从您的网站向您发送消息,对话将会在这里出现在Chatwoot上。<br>酷,对吧?我们肯定试着是 :)"
"DESC": "您已成功地将您的Facebook页面与GoChat集成。下次客户消息您的页面时,对话将自动出现在收件箱中。<br>我们还为您提供了一个小部件脚本,您可以轻松地添加到您的网站。在您的网站上登录后,客户可以在没有任何外部工具帮助的情况下从您的网站向您发送消息,对话将会在这里出现在GoChat上。<br>酷,对吧?我们肯定试着是 :)"
},
"EMAIL_PROVIDER": {
"TITLE": "选择您的电子邮件提供商",
@@ -1163,7 +1163,7 @@
"USER_MESSAGE": "嗨",
"AGENT_MESSAGE": "您好"
},
"BRANDING_TEXT": "由 Chatwoot 支持",
"BRANDING_TEXT": "由 GoChat 支持",
"SCRIPT_SETTINGS": "\n window.chatwootSettings = {options};"
},
"EMAIL_PROVIDERS": {
@@ -17,7 +17,7 @@
"ERROR": "连接 Shopify 时出错。请重试,如果问题仍然存在,请联系支持。"
},
"HEADER": "集成设置",
"DESCRIPTION": "Chatwoot 集成了多种工具和服务,以提高团队效率。浏览以下列表以配置您喜欢的应用程序。",
"DESCRIPTION": "GoChat 集成了多种工具和服务,以提高团队效率。浏览以下列表以配置您喜欢的应用程序。",
"LEARN_MORE": "了解更多关于集成的信息",
"LOADING": "正在获取集成",
"SEARCH_PLACEHOLDER": "搜索集成...",
@@ -44,7 +44,7 @@
"NO_RESULTS": "未找到匹配您搜索的 webhook",
"FORM": {
"CANCEL": "取消",
"DESC": "Webhook 事件为您提供了有关 Chatwoot 账户中发生的事情的实时信息。请输入一个有效的 URL 来配置回调。",
"DESC": "Webhook 事件为您提供了有关 GoChat 账户中发生的事情的实时信息。请输入一个有效的 URL 来配置回调。",
"SUBSCRIPTIONS": {
"LABEL": "事件",
"EVENTS": {
@@ -78,7 +78,7 @@
"HEADER_BTN_TXT": "添加新的 Webhook",
"LOADING": "正在获取已添加的 Webhooks",
"SEARCH_404": "没有任何项目符合此查询",
"SIDEBAR_TXT": "<p><b>Webhooks</b> </p> <p>Webhooks 是 HTTP 回调,可以为每个账户定义。它们由诸如在 Chatwoot 中创建消息等事件触发。您可以为此账户创建多个 Webhooks。<br /><br /> 要创建一个 <b>Webhook</b>,点击 <b>添加新的 Webhook</b> 按钮。您也可以通过点击删除按钮删除任何现有的 Webhook。</p>",
"SIDEBAR_TXT": "<p><b>Webhooks</b> </p> <p>Webhooks 是 HTTP 回调,可以为每个账户定义。它们由诸如在 GoChat 中创建消息等事件触发。您可以为此账户创建多个 Webhooks。<br /><br /> 要创建一个 <b>Webhook</b>,点击 <b>添加新的 Webhook</b> 按钮。您也可以通过点击删除按钮删除任何现有的 Webhook。</p>",
"LIST": {
"404": "此账户没有配置 Webhooks。",
"TITLE": "管理 Webhooks",
@@ -126,14 +126,14 @@
},
"HELP_TEXT": {
"TITLE": "使用 Slack 集成?",
"BODY": "通过此集成,所有传入的对话将同步到您的 Slack 工作区中的 ***{selectedChannelName}*** 频道。您可以直接在频道中管理所有客户对话,再也不会错过任何消息。\n\n以下是该集成的主要功能:\n\n**从 Slack 回复对话:** 要在 ***{selectedChannelName}*** Slack 频道中回复对话,只需输入您的消息并将其作为线程发送。这将通过 Chatwoot 创建对客户的回复。就是这么简单!\n\n**创建私密笔记:** 如果您想创建私密笔记而不是回复,请在消息开头加上 ***`note:`***。这将确保您的消息保持私密,不会对客户可见。\n\n**关联客服资料:** 如果在 Slack 上回复的人拥有与 Chatwoot 中相同电子邮件的客服资料,回复将自动与该客服资料关联。这意味着您可以轻松跟踪谁在何时说了什么。另一方面,如果回复者没有关联的客服资料,回复将显示为机器人资料。",
"BODY": "通过此集成,所有传入的对话将同步到您的 Slack 工作区中的 ***{selectedChannelName}*** 频道。您可以直接在频道中管理所有客户对话,再也不会错过任何消息。\n\n以下是该集成的主要功能:\n\n**从 Slack 回复对话:** 要在 ***{selectedChannelName}*** Slack 频道中回复对话,只需输入您的消息并将其作为线程发送。这将通过 GoChat 创建对客户的回复。就是这么简单!\n\n**创建私密笔记:** 如果您想创建私密笔记而不是回复,请在消息开头加上 ***`note:`***。这将确保您的消息保持私密,不会对客户可见。\n\n**关联客服资料:** 如果在 Slack 上回复的人拥有与 GoChat 中相同电子邮件的客服资料,回复将自动与该客服资料关联。这意味着您可以轻松跟踪谁在何时说了什么。另一方面,如果回复者没有关联的客服资料,回复将显示为机器人资料。",
"SELECTED": "已选择"
},
"SELECT_CHANNEL": {
"OPTION_LABEL": "选择一个频道",
"UPDATE": "更新",
"BUTTON_TEXT": "连接频道",
"DESCRIPTION": "您的 Slack 工作区现已与 Chatwoot 连接。但是,集成当前处于非活动状态。要激活集成并将频道连接到 Chatwoot,请点击下面的按钮。\n\n**注意:** 如果您尝试连接私有频道,请在进行此步骤之前将 Chatwoot 应用添加到 Slack 频道。",
"DESCRIPTION": "您的 Slack 工作区现已与 GoChat 连接。但是,集成当前处于非活动状态。要激活集成并将频道连接到 GoChat,请点击下面的按钮。\n\n**注意:** 如果您尝试连接私有频道,请在进行此步骤之前将 GoChat 应用添加到 Slack 频道。",
"ATTENTION_REQUIRED": "需要关注",
"EXPIRED": "您的 Slack 集成已过期。要继续在 Slack 上接收消息,请删除该集成并重新连接您的工作区。"
},
@@ -235,7 +235,7 @@
"DASHBOARD_APPS": {
"TITLE": "仪表板应用",
"HEADER_BTN_TXT": "添加新的仪表板应用",
"SIDEBAR_TXT": "<p><b>仪表板应用</b></p><p>仪表板应用允许组织将应用程序嵌入 Chatwoot 仪表板中,以便为客服人员提供上下文信息。此功能允许您独立创建应用程序并将其嵌入仪表板中,以提供用户信息、他们的订单或以前的付款历史记录。</p><p>当您使用 Chatwoot 仪表板嵌入应用程序时,您的应用程序将作为窗口事件获取对话和联系人的上下文信息。在您的页面上实现消息事件的监听器以接收上下文信息。</p><p>要添加新的仪表板应用,请点击“添加新的仪表板应用”按钮。</p>",
"SIDEBAR_TXT": "<p><b>仪表板应用</b></p><p>仪表板应用允许组织将应用程序嵌入 GoChat 仪表板中,以便为客服人员提供上下文信息。此功能允许您独立创建应用程序并将其嵌入仪表板中,以提供用户信息、他们的订单或以前的付款历史记录。</p><p>当您使用 GoChat 仪表板嵌入应用程序时,您的应用程序将作为窗口事件获取对话和联系人的上下文信息。在您的页面上实现消息事件的监听器以接收上下文信息。</p><p>要添加新的仪表板应用,请点击“添加新的仪表板应用”按钮。</p>",
"DESCRIPTION": "仪表板应用允许组织将应用程序嵌入仪表板中,以便为客服人员提供上下文信息。此功能允许您独立创建应用程序并将其嵌入仪表板中,以提供用户信息、他们的订单或以前的付款历史记录。",
"LEARN_MORE": "了解更多关于仪表板应用的信息",
"COUNT": "{n} 个仪表板应用 | {n} 个仪表板应用",
@@ -1,6 +1,6 @@
{
"LOGIN": {
"TITLE": "登录到Chatwoot",
"TITLE": "登录到GoChat",
"EMAIL": {
"LABEL": "电子邮件",
"PLACEHOLDER": "电子邮件",
@@ -243,7 +243,7 @@ const handleToggleWidget = () => {
:script="widgetScript"
lang="html"
class="!text-start"
:codepen-title="`${websiteName} - Chatwoot Widget Test`"
:codepen-title="`${websiteName} - GoChat Widget Test`"
enable-code-pen
/>
</div>
@@ -6,7 +6,7 @@ import Button from 'dashboard/components-next/button/Button.vue';
defineProps({
title: {
type: String,
default: 'Chatwoot',
default: 'GoChat',
},
});
@@ -30,7 +30,7 @@ const senderNameKeyOptions = computed(() => [
content: t('INBOX_MGMT.EDIT.SENDER_NAME_SECTION.FRIENDLY.SUBTITLE'),
preview: {
senderName: 'Smith',
businessName: 'Chatwoot',
businessName: 'GoChat',
email: '<support@yourbusiness.com>',
},
},
@@ -40,7 +40,7 @@ const senderNameKeyOptions = computed(() => [
content: t('INBOX_MGMT.EDIT.SENDER_NAME_SECTION.PROFESSIONAL.SUBTITLE'),
preview: {
senderName: '',
businessName: 'Chatwoot',
businessName: 'GoChat',
email: '<support@yourbusiness.com>',
},
},
@@ -29,9 +29,13 @@ window.chatwootConfig = Object.assign(
window.globalConfig = Object.assign(
{
INSTALLATION_NAME: 'GoChat',
BRAND_NAME: 'GoChat',
CREATE_NEW_ACCOUNT_FROM_DASHBOARD: false,
DISPLAY_MANIFEST: false,
LOGO_THUMBNAIL: '/favicon-32x32.png',
LOGO: '/brand-assets/logo.svg',
LOGO_DARK: '/brand-assets/logo_dark.svg',
LOGO_THUMBNAIL: '/brand-assets/logo_thumbnail.svg',
WIDGET_BRAND_URL: '/',
},
config.globalConfig || {}
);
@@ -0,0 +1,38 @@
import { readFileSync } from 'node:fs';
import { runInNewContext } from 'node:vm';
const customBrand = {
INSTALLATION_NAME: 'Acme Support',
BRAND_NAME: 'Acme',
LOGO: '/acme/logo.svg',
LOGO_DARK: '/acme/logo-dark.svg',
LOGO_THUMBNAIL: '/acme/icon.svg',
};
const initializeEntrypoint = filename => {
const html = readFileSync(filename, 'utf8');
const inlineScript = html.match(/<script>\s*([\s\S]*?)<\/script>/);
const runtimeConfigIndex = html.indexOf('/runtime-config.js');
expect(runtimeConfigIndex).toBeGreaterThan(-1);
expect(runtimeConfigIndex).toBeLessThan(inlineScript.index);
const entrypointWindow = {
__GOCHAT_CONFIG__: { globalConfig: customBrand },
location: { search: '' },
};
runInNewContext(inlineScript[1], {
window: entrypointWindow,
navigator: { userAgent: 'test' },
URLSearchParams,
localStorage: { getItem: () => null, setItem: () => {} },
});
return entrypointWindow.globalConfig;
};
it.each(['widget.html', 'super_admin.html'])(
'applies custom runtime branding in %s',
filename => {
expect(initializeEntrypoint(filename)).toMatchObject(customBrand);
}
);
@@ -33,7 +33,10 @@ export default {
brandRedirectURL() {
try {
const referrerHost = this.$store.getters['appConfig/getReferrerHost'];
const url = new URL(this.globalConfig.widgetBrandURL);
const url = new URL(
this.globalConfig.widgetBrandURL,
window.location.origin
);
if (referrerHost) {
url.searchParams.set('utm_source', referrerHost);
url.searchParams.set('utm_medium', 'widget');
@@ -24,38 +24,46 @@ describe('useBranding', () => {
});
describe('replaceInstallationName', () => {
it('should replace "Chatwoot" with installation name when both text and installation name are provided', () => {
it('should replace "GoChat" with the installation name', () => {
const { replaceInstallationName } = useBranding();
const result = replaceInstallationName('Welcome to Chatwoot');
const result = replaceInstallationName('Welcome to GoChat');
expect(result).toBe('Welcome to MyCompany');
});
it('should replace multiple occurrences of "Chatwoot"', () => {
it('should replace multiple occurrences of "GoChat"', () => {
const { replaceInstallationName } = useBranding();
const result = replaceInstallationName(
'Chatwoot is great! Use Chatwoot today.'
'GoChat is great! Use GoChat today.'
);
expect(result).toBe('MyCompany is great! Use MyCompany today.');
});
it('should preserve legacy Chatwoot placeholders for custom branding', () => {
const { replaceInstallationName } = useBranding();
expect(replaceInstallationName('Welcome to Chatwoot')).toBe(
'Welcome to MyCompany'
);
});
it('should return original text when installation name is not provided', () => {
mockGlobalConfig.value = {};
const { replaceInstallationName } = useBranding();
const result = replaceInstallationName('Welcome to Chatwoot');
const result = replaceInstallationName('Welcome to GoChat');
expect(result).toBe('Welcome to Chatwoot');
expect(result).toBe('Welcome to GoChat');
});
it('should return original text when globalConfig is not available', () => {
mockGlobalConfig.value = undefined;
const { replaceInstallationName } = useBranding();
const result = replaceInstallationName('Welcome to Chatwoot');
const result = replaceInstallationName('Welcome to GoChat');
expect(result).toBe('Welcome to Chatwoot');
expect(result).toBe('Welcome to GoChat');
});
it('should return original text when text is empty or null', () => {
@@ -88,7 +96,7 @@ describe('useBranding', () => {
};
const { replaceInstallationName } = useBranding();
const result = replaceInstallationName('Welcome to Chatwoot');
const result = replaceInstallationName('Welcome to GoChat');
expect(result).toBe('Welcome to My-Company & Co.');
});
@@ -7,9 +7,9 @@ import { useMapGetter } from 'dashboard/composables/store.js';
export function useBranding() {
const globalConfig = useMapGetter('globalConfig/get');
/**
* Replaces "Chatwoot" in text with the installation name from global config
* Replaces the default product name in text with the configured installation name
* @param {string} text - The text to process
* @returns {string} - Text with "Chatwoot" replaced by installation name
* @returns {string} - Text with the default product name replaced
*/
const replaceInstallationName = text => {
if (!text) return text;
@@ -17,7 +17,7 @@ export function useBranding() {
const installationName = globalConfig.value?.installationName;
if (!installationName) return text;
return text.replace(/Chatwoot/g, installationName);
return text.replace(/GoChat|Chatwoot/g, installationName);
};
return {
@@ -54,8 +54,8 @@ const state = {
export const getters = {
get: $state => $state,
isOnChatwootCloud: $state => $state.deploymentEnv === 'cloud',
isACustomBrandedInstance: $state => $state.installationName !== 'Chatwoot',
isAChatwootInstance: $state => $state.installationName === 'Chatwoot',
isACustomBrandedInstance: $state => $state.installationName !== 'GoChat',
isAChatwootInstance: $state => $state.installationName === 'GoChat',
};
export const actions = {};
@@ -0,0 +1,17 @@
import { getters } from '../globalConfig';
describe('globalConfig branding getters', () => {
it('treats GoChat as the default branded installation', () => {
const state = { installationName: 'GoChat' };
expect(getters.isACustomBrandedInstance(state)).toBe(false);
expect(getters.isAChatwootInstance(state)).toBe(true);
});
it('recognizes a custom installation name', () => {
const state = { installationName: 'Acme Support' };
expect(getters.isACustomBrandedInstance(state)).toBe(true);
expect(getters.isAChatwootInstance(state)).toBe(false);
});
});
@@ -15,5 +15,5 @@
"ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later"
}
},
"POWERED_BY": "Powered by Chatwoot"
"POWERED_BY": "Powered by GoChat"
}
@@ -15,5 +15,5 @@
"ERROR_MESSAGE": "تعذر الاتصال بالخادم، الرجاء المحاولة مرة أخرى لاحقاً"
}
},
"POWERED_BY": "مدعوم بواسطة Chatwoot"
"POWERED_BY": "مدعوم بواسطة GoChat"
}
@@ -15,5 +15,5 @@
"ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later"
}
},
"POWERED_BY": "Powered by Chatwoot"
"POWERED_BY": "Powered by GoChat"
}
@@ -15,5 +15,5 @@
"ERROR_MESSAGE": "Не можа да се свърже с Woot сървър. Моля, опитайте отново по-късно"
}
},
"POWERED_BY": "Осъществено от Chatwoot"
"POWERED_BY": "Осъществено от GoChat"
}
@@ -15,5 +15,5 @@
"ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later"
}
},
"POWERED_BY": "Powered by Chatwoot"
"POWERED_BY": "Powered by GoChat"
}
@@ -15,5 +15,5 @@
"ERROR_MESSAGE": "No s'ha pogut connectar amb el servidor Woot. Torna-ho a provar més endavant"
}
},
"POWERED_BY": "Desenvolupat per Chatwoot"
"POWERED_BY": "Desenvolupat per GoChat"
}
@@ -15,5 +15,5 @@
"ERROR_MESSAGE": "Nelze se připojit k Woot serveru, opakujte akci později"
}
},
"POWERED_BY": "Powered by Chatwoot"
"POWERED_BY": "Powered by GoChat"
}
@@ -15,5 +15,5 @@
"ERROR_MESSAGE": "Kunne ikke oprette forbindelse til Woot Server, Prøv igen senere"
}
},
"POWERED_BY": "Drevet af Chatwoot"
"POWERED_BY": "Drevet af GoChat"
}
@@ -15,5 +15,5 @@
"ERROR_MESSAGE": "Es konnte keine Verbindung zum Woot-Server hergestellt werden. Bitte versuchen Sie es später erneut"
}
},
"POWERED_BY": "Unterstützt von Chatwoot"
"POWERED_BY": "Unterstützt von GoChat"
}
@@ -15,5 +15,5 @@
"ERROR_MESSAGE": "Αδυναμία σύνδεσης με τον Woot Server, Παρακαλώ προσπαθήστε αργότερα"
}
},
"POWERED_BY": "με την δύναμη του Chatwoot"
"POWERED_BY": "με την δύναμη του GoChat"
}
@@ -15,5 +15,5 @@
"ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later"
}
},
"POWERED_BY": "Powered by Chatwoot"
"POWERED_BY": "Powered by GoChat"
}
@@ -15,5 +15,5 @@
"ERROR_MESSAGE": "No se pudo conectar al servidor Woot, por favor inténtalo de nuevo más tarde"
}
},
"POWERED_BY": "Desarrollado por Chatwoot"
"POWERED_BY": "Desarrollado por GoChat"
}
@@ -15,5 +15,5 @@
"ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later"
}
},
"POWERED_BY": "Powered by Chatwoot"
"POWERED_BY": "Powered by GoChat"
}
@@ -15,5 +15,5 @@
"ERROR_MESSAGE": "Yhteyden muodostaminen Woot-palvelimelle ei onnistunut, yritä myöhemmin uudelleen"
}
},
"POWERED_BY": "Palvelun tarjoaa Chatwoot"
"POWERED_BY": "Palvelun tarjoaa GoChat"
}
@@ -15,5 +15,5 @@
"ERROR_MESSAGE": "L'attribut personnalisé a été ajouté"
}
},
"POWERED_BY": "Propulsé par Chatwoot"
"POWERED_BY": "Propulsé par GoChat"
}
@@ -15,5 +15,5 @@
"ERROR_MESSAGE": "לא ניתן להתחבר לשרת Woot, נסה שוב מאוחר יותר"
}
},
"POWERED_BY": "מופעל על ידי Chatwoot"
"POWERED_BY": "מופעל על ידי GoChat"
}
@@ -15,5 +15,5 @@
"ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later"
}
},
"POWERED_BY": "Powered by Chatwoot"
"POWERED_BY": "Powered by GoChat"
}
@@ -15,5 +15,5 @@
"ERROR_MESSAGE": "Neuspješno spajanje na Woot Server, Molimo pokušajte kasnije"
}
},
"POWERED_BY": "Powered by Chatwoot"
"POWERED_BY": "Powered by GoChat"
}
@@ -15,5 +15,5 @@
"ERROR_MESSAGE": "Nem sikerült csatlakozni a Woot szerverhez, kérjük próbáld később"
}
},
"POWERED_BY": "Chatwoot"
"POWERED_BY": "GoChat"
}
@@ -15,5 +15,5 @@
"ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later"
}
},
"POWERED_BY": "Powered by Chatwoot"
"POWERED_BY": "Powered by GoChat"
}
@@ -15,5 +15,5 @@
"ERROR_MESSAGE": "Tidak dapat terhubung ke Server Woot, Silahkan coba lagi nanti"
}
},
"POWERED_BY": "Powered by Chatwoot"
"POWERED_BY": "Powered by GoChat"
}
@@ -15,5 +15,5 @@
"ERROR_MESSAGE": "Náði ekki að tengjast við Woot þjónin, Vinsamlegast reyndu aftur síðar"
}
},
"POWERED_BY": "Keyrt af Chatwoot"
"POWERED_BY": "Keyrt af GoChat"
}
@@ -15,5 +15,5 @@
"ERROR_MESSAGE": "Impossibile connettersi al server Woot, riprova più tardi"
}
},
"POWERED_BY": "Offerto da Chatwoot"
"POWERED_BY": "Offerto da GoChat"
}
@@ -15,5 +15,5 @@
"ERROR_MESSAGE": "サーバーに接続できませんでした。後でもう一度お試しください。"
}
},
"POWERED_BY": "提供:Chatwoot"
"POWERED_BY": "提供:GoChat"
}
@@ -15,5 +15,5 @@
"ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later"
}
},
"POWERED_BY": "Powered by Chatwoot"
"POWERED_BY": "Powered by GoChat"
}
@@ -15,5 +15,5 @@
"ERROR_MESSAGE": "Woot 서버에 연결할 수 없음. 나중에 다시 시도하십시오."
}
},
"POWERED_BY": "Chatwoot 작동중"
"POWERED_BY": "GoChat 작동중"
}
@@ -15,5 +15,5 @@
"ERROR_MESSAGE": "Nepavyko prisijungti prie Woot serverio, bandykite dar kartą vėliau"
}
},
"POWERED_BY": "Parengta pagal Chatwoot"
"POWERED_BY": "Parengta pagal GoChat"
}
@@ -15,5 +15,5 @@
"ERROR_MESSAGE": "Nevar izveidot savienojumu ar Woot serveri. Lūdzu, vēlāk pamēģiniet vēlreiz"
}
},
"POWERED_BY": "Darbināts ar Chatwoot"
"POWERED_BY": "Darbināts ar GoChat"
}
@@ -15,5 +15,5 @@
"ERROR_MESSAGE": "വൂട്ട് സെർവറിലേക്ക് കണക്റ്റുചെയ്യാനായില്ല, ദയവായി പിന്നീട് വീണ്ടും ശ്രമിക്കുക"
}
},
"POWERED_BY": "പ്രായോജകർ Chatwoot"
"POWERED_BY": "പ്രായോജകർ GoChat"
}
@@ -15,5 +15,5 @@
"ERROR_MESSAGE": "Masalah untuk hubungi Woot Server, Sila cuba sebentar lagi"
}
},
"POWERED_BY": "Powered by Chatwoot"
"POWERED_BY": "Powered by GoChat"
}
@@ -15,5 +15,5 @@
"ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later"
}
},
"POWERED_BY": "Chatwoot द्वारा संचालित"
"POWERED_BY": "GoChat द्वारा संचालित"
}
@@ -15,5 +15,5 @@
"ERROR_MESSAGE": "Kan geen verbinding maken met Woot Server, probeer het later opnieuw"
}
},
"POWERED_BY": "Mogelijk gemaakt door Chatwoot"
"POWERED_BY": "Mogelijk gemaakt door GoChat"
}
@@ -15,5 +15,5 @@
"ERROR_MESSAGE": "Kunne ikke koble til Woot Server, vennligst prøv igjen senere"
}
},
"POWERED_BY": "Drevet av Chatwoot"
"POWERED_BY": "Drevet av GoChat"
}
@@ -15,5 +15,5 @@
"ERROR_MESSAGE": "Nie można połączyć się z Woot Server, spróbuj ponownie później"
}
},
"POWERED_BY": "Napędzany przez Chatwoot"
"POWERED_BY": "Napędzany przez GoChat"
}
@@ -15,5 +15,5 @@
"ERROR_MESSAGE": "Não foi possível ligar ao servidor, por favor tente novamente mais tarde"
}
},
"POWERED_BY": "Desenvolvido por Chatwoot"
"POWERED_BY": "Desenvolvido por GoChat"
}
@@ -15,5 +15,5 @@
"ERROR_MESSAGE": "Não foi possível conectar ao servidor Woot, por favor tente novamente mais tarde"
}
},
"POWERED_BY": "Desenvolvido por Chatwoot"
"POWERED_BY": "Desenvolvido por GoChat"
}
@@ -15,5 +15,5 @@
"ERROR_MESSAGE": "Nu s-a putut conecta la Woot Server, încercați din nou mai târziu"
}
},
"POWERED_BY": "Oferit de Chatwoot"
"POWERED_BY": "Oferit de GoChat"
}
@@ -15,5 +15,5 @@
"ERROR_MESSAGE": "Не удается соединиться с сервером Woot, попробуйте позже"
}
},
"POWERED_BY": "Работает на Chatwoot"
"POWERED_BY": "Работает на GoChat"
}
@@ -15,5 +15,5 @@
"ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later"
}
},
"POWERED_BY": "Powered by Chatwoot"
"POWERED_BY": "Powered by GoChat"
}
@@ -15,5 +15,5 @@
"ERROR_MESSAGE": "Nepodarilo sa pripojiť k serveru Woot, skúste to prosím neskôr"
}
},
"POWERED_BY": "Používame Chatwoot"
"POWERED_BY": "Používame GoChat"
}
@@ -15,5 +15,5 @@
"ERROR_MESSAGE": "Ni bilo mogoče vzpostaviti povezave s strežnikom, poskusite znova pozneje"
}
},
"POWERED_BY": "Poganja Chatwoot"
"POWERED_BY": "Poganja GoChat"
}
@@ -15,5 +15,5 @@
"ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later"
}
},
"POWERED_BY": "Powered by Chatwoot"
"POWERED_BY": "Powered by GoChat"
}
@@ -15,5 +15,5 @@
"ERROR_MESSAGE": "Nije moguće se povezati sa Woot serverom, pokušajte ponovo kasnije"
}
},
"POWERED_BY": "Pokreće Chatwoot"
"POWERED_BY": "Pokreće GoChat"
}
@@ -15,5 +15,5 @@
"ERROR_MESSAGE": "Kunde inte ansluta till Woot Server, försök igen senare"
}
},
"POWERED_BY": "Drivs av Chatwoot"
"POWERED_BY": "Drivs av GoChat"
}
@@ -15,5 +15,5 @@
"ERROR_MESSAGE": "ไม่สามารถเชื่อมต่อเซิฟเวอร์ได้โปรดลองอีกครั้งในภายหลัง"
}
},
"POWERED_BY": "Powered by Chatwoot"
"POWERED_BY": "Powered by GoChat"
}
@@ -15,5 +15,5 @@
"ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later"
}
},
"POWERED_BY": "Powered by Chatwoot"
"POWERED_BY": "Powered by GoChat"
}
@@ -15,5 +15,5 @@
"ERROR_MESSAGE": "Woot Sunucusuna bağlanılamadı, Lütfen daha sonra tekrar deneyin"
}
},
"POWERED_BY": "Chatwoot tarafından desteklenmektedir"
"POWERED_BY": "GoChat tarafından desteklenmektedir"
}
@@ -15,5 +15,5 @@
"ERROR_MESSAGE": "Не вдалося підключитися до Woot Server, спробуйте ще раз пізніше"
}
},
"POWERED_BY": "Працює на Chatwoot"
"POWERED_BY": "Працює на GoChat"
}
@@ -15,5 +15,5 @@
"ERROR_MESSAGE": "ووٹ سرور کے ساتھ رابطہ ممکن نہی ہوسکا ، براہ کرم کچھ دیر بعد کوشش کریں"
}
},
"POWERED_BY": "Powered by Chatwoot"
"POWERED_BY": "Powered by GoChat"
}
@@ -15,5 +15,5 @@
"ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later"
}
},
"POWERED_BY": "Powered by Chatwoot"
"POWERED_BY": "Powered by GoChat"
}
@@ -15,5 +15,5 @@
"ERROR_MESSAGE": "Không thể kết nối với Máy chủ Woot, Vui lòng thử lại sau"
}
},
"POWERED_BY": "Cung cấp bởi Chatwoot"
"POWERED_BY": "Cung cấp bởi GoChat"
}
@@ -15,5 +15,5 @@
"ERROR_MESSAGE": "无法连接服务器,请稍后再试"
}
},
"POWERED_BY": "由 Chatwoot 支持"
"POWERED_BY": "由 GoChat 支持"
}
@@ -15,5 +15,5 @@
"ERROR_MESSAGE": "無法連接伺服器,請稍後再試"
}
},
"POWERED_BY": "由 Chatwoot 支援"
"POWERED_BY": "由 GoChat 支援"
}
@@ -174,7 +174,7 @@ export default {
class="flex flex-col w-full h-full bg-n-solid-1 rounded-lg border border-solid border-n-weak shadow-md lg:w-2/5 lg:h-auto"
>
<div class="w-full px-12 pt-12 pb-6 m-auto my-0">
<img v-if="logo" :src="logo" alt="Chatwoot logo" class="mb-6 logo" />
<img v-if="logo" :src="logo" alt="GoChat logo" class="mb-6 logo" />
<div
v-if="!isRatingSubmitted"
v-dompurify-html="formattedMessageContent"
@@ -11,7 +11,7 @@ const store = useStore();
const isLoading = ref(false);
const globalConfig = computed(() => store.getters['globalConfig/get']);
const isAChatwootInstance = computed(
() => globalConfig.value.installationName === 'Chatwoot'
() => globalConfig.value.installationName === 'GoChat'
);
onBeforeMount(() => {
@@ -57,7 +57,7 @@
"BUBBLE": {
"LABEL": "Chat with us"
},
"POWERED_BY": "Powered by Chatwoot",
"POWERED_BY": "Powered by GoChat",
"EMAIL_PLACEHOLDER": "Please enter your email",
"CHAT_PLACEHOLDER": "Type your message",
"TODAY": "Today",
@@ -57,7 +57,7 @@
"BUBBLE": {
"LABEL": "联系我们"
},
"POWERED_BY": "由 Chatwoot 支持",
"POWERED_BY": "由 GoChat 支持",
"EMAIL_PLACEHOLDER": "请输入您的电子邮件",
"CHAT_PLACEHOLDER": "输入您的消息",
"TODAY": "今天",
+2 -1
View File
@@ -4,7 +4,8 @@
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no, user-scalable=0" />
<title>GoChat</title>
<link rel="icon" type="image/png" href="/favicon-32x32.png" />
<link rel="icon" type="image/svg+xml" href="/brand-assets/logo_thumbnail.svg" />
<link rel="manifest" href="/manifest.json" />
<script vite-ignore src="/runtime-config.js"></script>
</head>
<body class="text-slate-600">
File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 8.2 KiB

After

Width:  |  Height:  |  Size: 644 B

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 8.2 KiB

After

Width:  |  Height:  |  Size: 642 B

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