diff --git a/docs/Analytics.zh-CN.md b/docs/Analytics.zh-CN.md new file mode 100644 index 000000000000..3537546eff22 --- /dev/null +++ b/docs/Analytics.zh-CN.md @@ -0,0 +1,19 @@ +# 数据统计 + +为更好地帮助分析 LobeChat 的用户使用情况,我们在 LobeChat 中集成了若干免费 / 开源的数据统计服务,用于收集用户的使用情况,你可以按需开启。 + +## Vercel Analytics + +[Vercel Analytics](https://vercel.com/analytics) 是 Vercel 推出的一款数据分析服务,它可以帮助你收集网站的访问情况,包括访问量、访问来源、访问设备等等。 + +由于我们推荐使用 Vercel 一键部署 LobeChat,因此我们在代码中默认集成了 Vercel Analytics,你可以通过自行打开部署项目中 \[Insights] tab,查看你的应用访问情况。 + +Vercel Analytics 提供了 2500 次 / 月的免费 Web Analytics Events (可以理解为 PV),对于个人部署自用的产品来说基本够用。 + +如果你需要了解 Vercel Analytics 的详细使用教程,请查阅[Vercel Web Analytics 快速开始](https://vercel.com/docs/analytics/quickstart) + +如果你不需要 Vercel Analytics,你可以通过设置环境变量 `NEXT_PUBLIC_ANALYTICS_VERCEL=0` 来关闭它。 + +## 🚧 Posthog + +## 🚧 Mixpanel diff --git a/docs/Environment-Variable.zh-CN.md b/docs/Environment-Variable.zh-CN.md index 256c244b416a..c7c289d9491a 100644 --- a/docs/Environment-Variable.zh-CN.md +++ b/docs/Environment-Variable.zh-CN.md @@ -17,6 +17,13 @@ LobeChat 在部署时提供了一些额外的配置项,使用环境变量进 - [`PLUGINS_INDEX_URL`](#plugins_index_url) - [角色服务](#角色服务) - [`AGENTS_INDEX_URL`](#agents_index_url) +- [数据统计](#数据统计) + - [Vercel Analytics](#vercel-analytics) + - [Mixpanel Analytics](#mixpanel-analytics) + - [`NEXT_PUBLIC_MIXPANEL_PROJECT_TOKEN`](#next_public_mixpanel_project_token) + - [`NEXT_PUBLIC_MIXPANEL_DEBUG`](#next_public_mixpanel_debug) + - [Posthog Analytics](#posthog-analytics) + - [`NEXT_PUBLIC_POSTHOG_DEBUG`](#next_public_posthog_debug) - [开发环境](#开发环境) - [`DEV_API_END_PORT_URL`](#dev_api_end_port_url) @@ -94,7 +101,76 @@ LobeChat 在部署时提供了一些额外的配置项,使用环境变量进 - 描述:LobeChat 角色市场的索引地址,如果你自行部署了角色市场的服务,可以使用该变量来覆盖默认的插件市场地址 - 默认值:`https://chat-agents.lobehub.com` -
+## 数据统计 + +### Vercel Analytics + +#### `NEXT_PUBLIC_ANALYTICS_VERCEL` + +- 类型:可选 +- 描述:用于配置 Vercel Analytics 的环境变量,当设为 `0` 则关闭 Vercel Analytics +- 默认值: - +- 示例:`0` + +#### `NEXT_PUBLIC_VERCEL_DEBUG` + +- 类型:可选 +- 描述:用于开启 Vercel Analytics 的调试模式 +- 默认值: - +- 示例:`1` + +### Mixpanel Analytics + +#### `NEXT_PUBLIC_ANALYTICS_MIXPANEL` + +- 类型:可选 +- 描述:用于开启 [Mixpanel Analytics][mixpanel-analytics-url] 的环境变量,设为 `1` 时开启 Mixpanel Analytics +- 默认值: - +- 示例:`1` + +### `NEXT_PUBLIC_MIXPANEL_PROJECT_TOKEN` + +- 类型:可选 +- 描述:设置 Mixpanel 项目的识别 Token,可以在[这里][mixpanel-project-url]找到 +- 默认值: - +- 示例:`60db2abae7fdd29961f4e8f91b074b3a` + +### `NEXT_PUBLIC_MIXPANEL_DEBUG` + +- 类型:可选 +- 描述:开启 Mixpanel 的调试模式 +- 默认值: - +- 示例:`1` + +### Posthog Analytics + +#### `NEXT_PUBLIC_ANALYTICS_POSTHOG` + +- 类型:可选 +- 描述:用于开启 [PostHog Analytics][posthog-analytics-url] 的环境变量,设为 `1` 时开启 PostHog Analytics +- 默认值: - +- 示例:`1` + +#### `NEXT_PUBLIC_POSTHOG_KEY` + +- 类型:可选 +- 描述:设置 PostHog 项目 Key +- 默认值: - +- 示例:`phc_xxxxxxxx` + +#### `NEXT_PUBLIC_POSTHOG_HOST` + +- 类型:可选 +- 描述:设置 PostHog 服务的部署地址,默认为官方的 SAAS 地址 +- 默认值:`https://app.posthog.com` +- 示例:`https://example.com` + +### `NEXT_PUBLIC_POSTHOG_DEBUG` + +- 类型:可选 +- 描述:开启 PostHog 的调试模式 +- 默认值: - +- 示例:`1` ## 开发环境 @@ -106,4 +182,7 @@ LobeChat 在部署时提供了一些额外的配置项,使用环境变量进 - 示例:`https://chat-preview.lobehub.com` [azure-api-verion-url]: https://docs.microsoft.com/zh-cn/azure/developer/javascript/api-reference/es-modules/azure-sdk/ai-translation/translationconfiguration?view=azure-node-latest#api-version +[mixpanel-analytics-url]: https://mixpanel.com +[mixpanel-project-url]: https://mixpanel.com/settings/project [openai-api-page]: https://platform.openai.com/account/api-keys +[posthog-analytics-url]: https://posthog.com diff --git a/next.config.mjs b/next.config.mjs index 7afd14c13825..e12d3c177f46 100644 --- a/next.config.mjs +++ b/next.config.mjs @@ -41,6 +41,10 @@ const nextConfig = { }, ]; }, + env: { + AGENTS_INDEX_URL: process.env.AGENTS_INDEX_URL, + PLUGINS_INDEX_URL: process.env.PLUGINS_INDEX_URL, + }, }; export default isProd ? withPWA(nextConfig) : nextConfig; diff --git a/package.json b/package.json index 44944df58ee2..b536ed4463c5 100644 --- a/package.json +++ b/package.json @@ -86,10 +86,12 @@ "immer": "^10", "lodash-es": "^4", "lucide-react": "latest", + "mixpanel-browser": "^2", "nanoid": "^5", "next": "^13.5.3", "openai": "^4", "polished": "^4", + "posthog-js": "^1", "react": "^18", "react-dom": "^18", "react-hotkeys-hook": "^4", @@ -116,6 +118,7 @@ "@testing-library/react": "^14", "@types/chroma-js": "^2", "@types/lodash-es": "^4", + "@types/mixpanel-browser": "^2", "@types/node": "^20", "@types/react": "^18", "@types/react-dom": "^18", diff --git a/src/components/Analytics/Mixpanel.tsx b/src/components/Analytics/Mixpanel.tsx new file mode 100644 index 000000000000..cfe9f38e17b2 --- /dev/null +++ b/src/components/Analytics/Mixpanel.tsx @@ -0,0 +1,23 @@ +'use client'; + +import mixpanel from 'mixpanel-browser'; +import { memo, useEffect } from 'react'; + +import { getClientConfig } from '@/config/client'; + +const { MIXPANEL_PROJECT_TOKEN, MIXPANEL_DEBUG } = getClientConfig(); + +const MixpanelAnalytics = memo(() => { + useEffect(() => { + if (!MIXPANEL_PROJECT_TOKEN) return; + + mixpanel.init(MIXPANEL_PROJECT_TOKEN, { + debug: MIXPANEL_DEBUG, + persistence: 'localStorage', + track_pageview: true, + }); + }, []); + return null; +}); + +export default MixpanelAnalytics; diff --git a/src/components/Analytics/Plausible.tsx b/src/components/Analytics/Plausible.tsx new file mode 100644 index 000000000000..b0b1c82a6ef8 --- /dev/null +++ b/src/components/Analytics/Plausible.tsx @@ -0,0 +1,18 @@ +'use client'; + +import Script from 'next/script'; +import { memo } from 'react'; + +import { getClientConfig } from '@/config/client'; + +const { PLAUSIBLE_DOMAIN } = getClientConfig(); + +const PlausibleAnalytics = memo(() => { + return ( + PLAUSIBLE_DOMAIN && ( +