diff --git a/backend/internal/automation/action_delivery.go b/backend/internal/automation/action_delivery.go index 63a58eaa..064ba803 100644 --- a/backend/internal/automation/action_delivery.go +++ b/backend/internal/automation/action_delivery.go @@ -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 " + fromHeader = "GoChat " } fromAddress := fromHeader if parsed, err := mail.ParseAddress(fromHeader); err == nil { diff --git a/backend/internal/router/router.go b/backend/internal/router/router.go index a969ba6a..42240604 100644 --- a/backend/internal/router/router.go +++ b/backend/internal/router/router.go @@ -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")) diff --git a/backend/internal/router/router_test.go b/backend/internal/router/router_test.go index 14f799ca..aa708692 100644 --- a/backend/internal/router/router_test.go +++ b/backend/internal/router/router_test.go @@ -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(), " Chatwoot Team Signature diff --git a/frontend/app/javascript/dashboard/components/Code.vue b/frontend/app/javascript/dashboard/components/Code.vue index 02e97388..27575297 100644 --- a/frontend/app/javascript/dashboard/components/Code.vue +++ b/frontend/app/javascript/dashboard/components/Code.vue @@ -22,7 +22,7 @@ const props = defineProps({ }, codepenTitle: { type: String, - default: 'Chatwoot Codepen', + default: 'GoChat Codepen', }, }); diff --git a/frontend/app/javascript/dashboard/components/app/specs/UpdateBanner.spec.js b/frontend/app/javascript/dashboard/components/app/specs/UpdateBanner.spec.js new file mode 100644 index 00000000..0c93a14b --- /dev/null +++ b/frontend/app/javascript/dashboard/components/app/specs/UpdateBanner.spec.js @@ -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.' + ); +}); diff --git a/frontend/app/javascript/dashboard/i18n/locale/en/auditLogs.json b/frontend/app/javascript/dashboard/i18n/locale/en/auditLogs.json index f85ad2a3..2e58c341 100644 --- a/frontend/app/javascript/dashboard/i18n/locale/en/auditLogs.json +++ b/frontend/app/javascript/dashboard/i18n/locale/en/auditLogs.json @@ -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": "

Audit Logs

Audit Logs are trails for events and actions in a Chatwoot System.

", + "SIDEBAR_TXT": "

Audit Logs

Audit Logs are trails for events and actions in a GoChat System.

", "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", diff --git a/frontend/app/javascript/dashboard/i18n/locale/en/conversation.json b/frontend/app/javascript/dashboard/i18n/locale/en/conversation.json index 8b31315b..00a82936 100644 --- a/frontend/app/javascript/dashboard/i18n/locale/en/conversation.json +++ b/frontend/app/javascript/dashboard/i18n/locale/en/conversation.json @@ -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": { diff --git a/frontend/app/javascript/dashboard/i18n/locale/en/generalSettings.json b/frontend/app/javascript/dashboard/i18n/locale/en/generalSettings.json index fab8020e..461f59f6 100644 --- a/frontend/app/javascript/dashboard/i18n/locale/en/generalSettings.json +++ b/frontend/app/javascript/dashboard/i18n/locale/en/generalSettings.json @@ -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": { diff --git a/frontend/app/javascript/dashboard/i18n/locale/en/helpCenter.json b/frontend/app/javascript/dashboard/i18n/locale/en/helpCenter.json index 758bb1dc..c8963a6a 100644 --- a/frontend/app/javascript/dashboard/i18n/locale/en/helpCenter.json +++ b/frontend/app/javascript/dashboard/i18n/locale/en/helpCenter.json @@ -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" }, diff --git a/frontend/app/javascript/dashboard/i18n/locale/en/inboxMgmt.json b/frontend/app/javascript/dashboard/i18n/locale/en/inboxMgmt.json index 087e43f5..9a0dda77 100644 --- a/frontend/app/javascript/dashboard/i18n/locale/en/inboxMgmt.json +++ b/frontend/app/javascript/dashboard/i18n/locale/en/inboxMgmt.json @@ -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.
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.
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.
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.
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": { diff --git a/frontend/app/javascript/dashboard/i18n/locale/en/integrations.json b/frontend/app/javascript/dashboard/i18n/locale/en/integrations.json index 9688df1b..43672cc9 100644 --- a/frontend/app/javascript/dashboard/i18n/locale/en/integrations.json +++ b/frontend/app/javascript/dashboard/i18n/locale/en/integrations.json @@ -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": "

Webhooks

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.

For creating a webhook, click on the Add new webhook button. You can also remove any existing webhook by clicking on the Delete button.

", + "SIDEBAR_TXT": "

Webhooks

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.

For creating a webhook, click on the Add new webhook button. You can also remove any existing webhook by clicking on the Delete button.

", "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": "

Dashboard Apps

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.

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.

To add a new dashboard app, click on the button 'Add a new dashboard app'.

", + "SIDEBAR_TXT": "

Dashboard Apps

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.

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.

To add a new dashboard app, click on the button 'Add a new dashboard app'.

", "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", diff --git a/frontend/app/javascript/dashboard/i18n/locale/en/labelsMgmt.json b/frontend/app/javascript/dashboard/i18n/locale/en/labelsMgmt.json index 96e272e4..42fcc02d 100644 --- a/frontend/app/javascript/dashboard/i18n/locale/en/labelsMgmt.json +++ b/frontend/app/javascript/dashboard/i18n/locale/en/labelsMgmt.json @@ -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", diff --git a/frontend/app/javascript/dashboard/i18n/locale/en/login.json b/frontend/app/javascript/dashboard/i18n/locale/en/login.json index 06128424..42886e90 100644 --- a/frontend/app/javascript/dashboard/i18n/locale/en/login.json +++ b/frontend/app/javascript/dashboard/i18n/locale/en/login.json @@ -1,6 +1,6 @@ { "LOGIN": { - "TITLE": "Login to Chatwoot", + "TITLE": "Login to GoChat", "EMAIL": { "LABEL": "Email", "PLACEHOLDER": "example{'@'}companyname.com", diff --git a/frontend/app/javascript/dashboard/i18n/locale/en/resetPassword.json b/frontend/app/javascript/dashboard/i18n/locale/en/resetPassword.json index 955696b0..4c9cd114 100644 --- a/frontend/app/javascript/dashboard/i18n/locale/en/resetPassword.json +++ b/frontend/app/javascript/dashboard/i18n/locale/en/resetPassword.json @@ -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", diff --git a/frontend/app/javascript/dashboard/i18n/locale/en/settings.json b/frontend/app/javascript/dashboard/i18n/locale/en/settings.json index b9515763..921fda25 100644 --- a/frontend/app/javascript/dashboard/i18n/locale/en/settings.json +++ b/frontend/app/javascript/dashboard/i18n/locale/en/settings.json @@ -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": { diff --git a/frontend/app/javascript/dashboard/i18n/locale/en/signup.json b/frontend/app/javascript/dashboard/i18n/locale/en/signup.json index 238a1f06..ceecc6cc 100644 --- a/frontend/app/javascript/dashboard/i18n/locale/en/signup.json +++ b/frontend/app/javascript/dashboard/i18n/locale/en/signup.json @@ -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.", diff --git a/frontend/app/javascript/dashboard/i18n/locale/en/yearInReview.json b/frontend/app/javascript/dashboard/i18n/locale/en/yearInReview.json index d72e0c67..b06ba535 100644 --- a/frontend/app/javascript/dashboard/i18n/locale/en/yearInReview.json +++ b/frontend/app/javascript/dashboard/i18n/locale/en/yearInReview.json @@ -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", diff --git a/frontend/app/javascript/dashboard/i18n/locale/zh_CN/generalSettings.json b/frontend/app/javascript/dashboard/i18n/locale/zh_CN/generalSettings.json index ccc6aae3..ae3b4af0 100644 --- a/frontend/app/javascript/dashboard/i18n/locale/zh_CN/generalSettings.json +++ b/frontend/app/javascript/dashboard/i18n/locale/zh_CN/generalSettings.json @@ -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": { diff --git a/frontend/app/javascript/dashboard/i18n/locale/zh_CN/helpCenter.json b/frontend/app/javascript/dashboard/i18n/locale/zh_CN/helpCenter.json index 0e2cffb3..bbcb4c1f 100644 --- a/frontend/app/javascript/dashboard/i18n/locale/zh_CN/helpCenter.json +++ b/frontend/app/javascript/dashboard/i18n/locale/zh_CN/helpCenter.json @@ -763,7 +763,7 @@ "CONFIRM_BUTTON_LABEL": "创建", "NAME": { "LABEL": "姓名", - "PLACEHOLDER": "用户指南 | Chatwoot", + "PLACEHOLDER": "用户指南 | GoChat", "MESSAGE": "为您的门户选择一个名称。", "ERROR": "名字必填" }, diff --git a/frontend/app/javascript/dashboard/i18n/locale/zh_CN/inboxMgmt.json b/frontend/app/javascript/dashboard/i18n/locale/zh_CN/inboxMgmt.json index e97e2a7f..a7259946 100644 --- a/frontend/app/javascript/dashboard/i18n/locale/zh_CN/inboxMgmt.json +++ b/frontend/app/javascript/dashboard/i18n/locale/zh_CN/inboxMgmt.json @@ -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集成。下次客户消息您的页面时,对话将自动出现在收件箱中。
我们还为您提供了一个小部件脚本,您可以轻松地添加到您的网站。在您的网站上登录后,客户可以在没有任何外部工具帮助的情况下从您的网站向您发送消息,对话将会在这里出现在Chatwoot上。
酷,对吧?我们肯定试着是 :)" + "DESC": "您已成功地将您的Facebook页面与GoChat集成。下次客户消息您的页面时,对话将自动出现在收件箱中。
我们还为您提供了一个小部件脚本,您可以轻松地添加到您的网站。在您的网站上登录后,客户可以在没有任何外部工具帮助的情况下从您的网站向您发送消息,对话将会在这里出现在GoChat上。
酷,对吧?我们肯定试着是 :)" }, "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": { diff --git a/frontend/app/javascript/dashboard/i18n/locale/zh_CN/integrations.json b/frontend/app/javascript/dashboard/i18n/locale/zh_CN/integrations.json index a70d08b3..2e9cb754 100644 --- a/frontend/app/javascript/dashboard/i18n/locale/zh_CN/integrations.json +++ b/frontend/app/javascript/dashboard/i18n/locale/zh_CN/integrations.json @@ -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": "

Webhooks

Webhooks 是 HTTP 回调,可以为每个账户定义。它们由诸如在 Chatwoot 中创建消息等事件触发。您可以为此账户创建多个 Webhooks。

要创建一个 Webhook,点击 添加新的 Webhook 按钮。您也可以通过点击删除按钮删除任何现有的 Webhook。

", + "SIDEBAR_TXT": "

Webhooks

Webhooks 是 HTTP 回调,可以为每个账户定义。它们由诸如在 GoChat 中创建消息等事件触发。您可以为此账户创建多个 Webhooks。

要创建一个 Webhook,点击 添加新的 Webhook 按钮。您也可以通过点击删除按钮删除任何现有的 Webhook。

", "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": "

仪表板应用

仪表板应用允许组织将应用程序嵌入 Chatwoot 仪表板中,以便为客服人员提供上下文信息。此功能允许您独立创建应用程序并将其嵌入仪表板中,以提供用户信息、他们的订单或以前的付款历史记录。

当您使用 Chatwoot 仪表板嵌入应用程序时,您的应用程序将作为窗口事件获取对话和联系人的上下文信息。在您的页面上实现消息事件的监听器以接收上下文信息。

要添加新的仪表板应用,请点击“添加新的仪表板应用”按钮。

", + "SIDEBAR_TXT": "

仪表板应用

仪表板应用允许组织将应用程序嵌入 GoChat 仪表板中,以便为客服人员提供上下文信息。此功能允许您独立创建应用程序并将其嵌入仪表板中,以提供用户信息、他们的订单或以前的付款历史记录。

当您使用 GoChat 仪表板嵌入应用程序时,您的应用程序将作为窗口事件获取对话和联系人的上下文信息。在您的页面上实现消息事件的监听器以接收上下文信息。

要添加新的仪表板应用,请点击“添加新的仪表板应用”按钮。

", "DESCRIPTION": "仪表板应用允许组织将应用程序嵌入仪表板中,以便为客服人员提供上下文信息。此功能允许您独立创建应用程序并将其嵌入仪表板中,以提供用户信息、他们的订单或以前的付款历史记录。", "LEARN_MORE": "了解更多关于仪表板应用的信息", "COUNT": "{n} 个仪表板应用 | {n} 个仪表板应用", diff --git a/frontend/app/javascript/dashboard/i18n/locale/zh_CN/login.json b/frontend/app/javascript/dashboard/i18n/locale/zh_CN/login.json index 4c0a9d68..b616bf7d 100644 --- a/frontend/app/javascript/dashboard/i18n/locale/zh_CN/login.json +++ b/frontend/app/javascript/dashboard/i18n/locale/zh_CN/login.json @@ -1,6 +1,6 @@ { "LOGIN": { - "TITLE": "登录到Chatwoot", + "TITLE": "登录到GoChat", "EMAIL": { "LABEL": "电子邮件", "PLACEHOLDER": "电子邮件", diff --git a/frontend/app/javascript/dashboard/modules/widget-preview/components/Widget.vue b/frontend/app/javascript/dashboard/modules/widget-preview/components/Widget.vue index 90985a98..8212f251 100644 --- a/frontend/app/javascript/dashboard/modules/widget-preview/components/Widget.vue +++ b/frontend/app/javascript/dashboard/modules/widget-preview/components/Widget.vue @@ -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 /> diff --git a/frontend/app/javascript/dashboard/routes/dashboard/helpcenter/components/ArticleSearch/Header.vue b/frontend/app/javascript/dashboard/routes/dashboard/helpcenter/components/ArticleSearch/Header.vue index 516984b8..bb30a0e8 100644 --- a/frontend/app/javascript/dashboard/routes/dashboard/helpcenter/components/ArticleSearch/Header.vue +++ b/frontend/app/javascript/dashboard/routes/dashboard/helpcenter/components/ArticleSearch/Header.vue @@ -6,7 +6,7 @@ import Button from 'dashboard/components-next/button/Button.vue'; defineProps({ title: { type: String, - default: 'Chatwoot', + default: 'GoChat', }, }); diff --git a/frontend/app/javascript/dashboard/routes/dashboard/settings/inbox/components/SenderNameExamplePreview.vue b/frontend/app/javascript/dashboard/routes/dashboard/settings/inbox/components/SenderNameExamplePreview.vue index abd2552b..47a972c0 100644 --- a/frontend/app/javascript/dashboard/routes/dashboard/settings/inbox/components/SenderNameExamplePreview.vue +++ b/frontend/app/javascript/dashboard/routes/dashboard/settings/inbox/components/SenderNameExamplePreview.vue @@ -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: '', }, }, @@ -40,7 +40,7 @@ const senderNameKeyOptions = computed(() => [ content: t('INBOX_MGMT.EDIT.SENDER_NAME_SECTION.PROFESSIONAL.SUBTITLE'), preview: { senderName: '', - businessName: 'Chatwoot', + businessName: 'GoChat', email: '', }, }, diff --git a/frontend/app/javascript/entrypoints/dashboardConfig.js b/frontend/app/javascript/entrypoints/dashboardConfig.js index c068ea5e..21fa8b95 100644 --- a/frontend/app/javascript/entrypoints/dashboardConfig.js +++ b/frontend/app/javascript/entrypoints/dashboardConfig.js @@ -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 || {} ); diff --git a/frontend/app/javascript/entrypoints/specs/runtimeConfig.spec.js b/frontend/app/javascript/entrypoints/specs/runtimeConfig.spec.js new file mode 100644 index 00000000..e7fcac3c --- /dev/null +++ b/frontend/app/javascript/entrypoints/specs/runtimeConfig.spec.js @@ -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(/ diff --git a/frontend/public/brand-assets/logo.svg b/frontend/public/brand-assets/logo.svg index 63adcde7..994f8c0d 100644 --- a/frontend/public/brand-assets/logo.svg +++ b/frontend/public/brand-assets/logo.svg @@ -1,5 +1,7 @@ - - - - + + GoChat + + + + GoChat diff --git a/frontend/public/brand-assets/logo_dark.svg b/frontend/public/brand-assets/logo_dark.svg index 679ae468..77585278 100644 --- a/frontend/public/brand-assets/logo_dark.svg +++ b/frontend/public/brand-assets/logo_dark.svg @@ -1,5 +1,7 @@ - - - - + + GoChat + + + + GoChat diff --git a/frontend/public/brand-assets/logo_thumbnail-192.png b/frontend/public/brand-assets/logo_thumbnail-192.png new file mode 100644 index 00000000..696a0e9f Binary files /dev/null and b/frontend/public/brand-assets/logo_thumbnail-192.png differ diff --git a/frontend/public/brand-assets/logo_thumbnail-512.png b/frontend/public/brand-assets/logo_thumbnail-512.png new file mode 100644 index 00000000..8ec95354 Binary files /dev/null and b/frontend/public/brand-assets/logo_thumbnail-512.png differ diff --git a/frontend/public/brand-assets/logo_thumbnail.svg b/frontend/public/brand-assets/logo_thumbnail.svg index d8715e72..2091049d 100644 --- a/frontend/public/brand-assets/logo_thumbnail.svg +++ b/frontend/public/brand-assets/logo_thumbnail.svg @@ -1,25 +1,6 @@ - - - - - - - - - - + + GoChat + + + diff --git a/frontend/public/manifest.json b/frontend/public/manifest.json index 78fcc475..321824b5 100644 --- a/frontend/public/manifest.json +++ b/frontend/public/manifest.json @@ -1,42 +1,23 @@ { - "name": "Chatwoot", - "short_name": "Chatwoot", - "icons": [{ - "src": "\/android-icon-36x36.png", - "sizes": "36x36", - "type": "image\/png", - "density": "0.75" - }, - { - "src": "\/android-icon-48x48.png", - "sizes": "48x48", - "type": "image\/png", - "density": "1.0" - }, - { - "src": "\/android-icon-72x72.png", - "sizes": "72x72", - "type": "image\/png", - "density": "1.5" - }, - { - "src": "\/android-icon-96x96.png", - "sizes": "96x96", - "type": "image\/png", - "density": "2.0" - }, - { - "src": "\/android-icon-144x144.png", - "sizes": "144x144", - "type": "image\/png", - "density": "3.0" - }, - { - "src": "\/android-icon-192x192.png", - "sizes": "192x192", - "type": "image\/png", - "density": "4.0" - }], + "name": "GoChat", + "short_name": "GoChat", + "icons": [ + { + "src": "/brand-assets/logo_thumbnail-192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "/brand-assets/logo_thumbnail-512.png", + "sizes": "512x512", + "type": "image/png" + }, + { + "src": "/brand-assets/logo_thumbnail.svg", + "sizes": "any", + "type": "image/svg+xml" + } + ], "start_url": "/", "display": "standalone", "background_color": "#1f93ff", diff --git a/frontend/scripts/check-build.mjs b/frontend/scripts/check-build.mjs index 0b4155d6..f0a2c67e 100644 --- a/frontend/scripts/check-build.mjs +++ b/frontend/scripts/check-build.mjs @@ -10,9 +10,16 @@ const html = readFileSync( const assets = [...html.matchAll(/(?:href|src)="(\/assets\/[^"]+)"/g)].map( match => match[1] ); +const manifest = JSON.parse( + readFileSync(new URL('../dist/manifest.json', import.meta.url), 'utf8') +); assert.match(html, /
<\/div>/); -assert.match(html, /<\/script>/); +assert.match(html, //); +assert.match( + html, + /]*\bsrc="\/runtime-config\.js"[^>]*><\/script>/ +); assert.ok( html.indexOf('/runtime-config.js') < html.indexOf('type="module"'), 'runtime config must load before the app module' @@ -28,6 +35,20 @@ assert.ok( assert.ok(!/]*\bsrc=)[^>]*>/i.test(html), 'inline script found'); assets.forEach(asset => assert.ok(existsSync(dist + asset.slice(1)), asset)); +for (const size of [192, 512]) { + const dimensions = `${size}x${size}`; + const icon = manifest.icons.find(item => item.sizes === dimensions); + assert.equal(icon?.type, 'image/png', `missing ${dimensions} PNG icon`); + + const png = readFileSync(dist + icon.src.slice(1)); + assert.deepEqual( + [...png.subarray(0, 8)], + [137, 80, 78, 71, 13, 10, 26, 10] + ); + assert.equal(png.readUInt32BE(16), size, `${icon.src} width`); + assert.equal(png.readUInt32BE(20), size, `${icon.src} height`); +} + const dashboard = assets .filter(asset => asset.endsWith('.js')) .map(asset => readFileSync(dist + asset.slice(1), 'utf8')) diff --git a/frontend/super_admin.html b/frontend/super_admin.html index 8a9a272b..395e948f 100644 --- a/frontend/super_admin.html +++ b/frontend/super_admin.html @@ -4,7 +4,8 @@ GoChat Super Admin - + +