From de535269eef579f5e9492550f69cdaa77d741b1a Mon Sep 17 00:00:00 2001 From: Arjan Singh <1598641+arjansingh@users.noreply.github.com> Date: Sat, 1 Nov 2025 12:21:50 -0700 Subject: [PATCH] feat(telemetry): help center and workflow creation (#6505) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary For Cloud distribution: 1. Track help center usage 2. Track workflow creation ┆Issue is synchronized with this [Notion page](https://www.notion.so/PR-6505-feat-telemetry-help-center-and-workflow-creation-29e6d73d36508185af8ccbf19d5af9e7) by [Unito](https://www.unito.io) --------- Co-authored-by: Christian Byrne Co-authored-by: Christian Byrne Co-authored-by: Claude --- .../ComfyRunButton/ComfyQueueButton.vue | 4 +- .../dialog/content/ErrorDialogContent.vue | 7 +++ .../dialog/content/setting/CreditsPanel.vue | 7 +++ .../helpcenter/HelpCenterMenuContent.vue | 36 ++++++++++- src/composables/useCoreCommands.ts | 48 +++++++++++--- .../composables/useSubscriptionActions.ts | 10 +++ .../cloud/MixpanelTelemetryProvider.ts | 20 ++++++ src/platform/telemetry/types.ts | 62 +++++++++++++++++++ .../useSubscriptionActions.test.ts | 14 +++-- 9 files changed, 190 insertions(+), 18 deletions(-) diff --git a/src/components/actionbar/ComfyRunButton/ComfyQueueButton.vue b/src/components/actionbar/ComfyRunButton/ComfyQueueButton.vue index a6359763e..cba25fc5a 100644 --- a/src/components/actionbar/ComfyRunButton/ComfyQueueButton.vue +++ b/src/components/actionbar/ComfyRunButton/ComfyQueueButton.vue @@ -158,9 +158,7 @@ const queuePrompt = async (e: Event) => { ? 'Comfy.QueuePromptFront' : 'Comfy.QueuePrompt' - if (isCloud) { - useTelemetry()?.trackRunButton({ subscribe_to_run: false }) - } + useTelemetry()?.trackRunButton({ subscribe_to_run: false }) await commandStore.execute(commandId) } diff --git a/src/components/dialog/content/ErrorDialogContent.vue b/src/components/dialog/content/ErrorDialogContent.vue index 97b0a18d3..7b08cbe1b 100644 --- a/src/components/dialog/content/ErrorDialogContent.vue +++ b/src/components/dialog/content/ErrorDialogContent.vue @@ -61,6 +61,7 @@ import { useI18n } from 'vue-i18n' import NoResultsPlaceholder from '@/components/common/NoResultsPlaceholder.vue' import FindIssueButton from '@/components/dialog/content/error/FindIssueButton.vue' import { useCopyToClipboard } from '@/composables/useCopyToClipboard' +import { useTelemetry } from '@/platform/telemetry' import { api } from '@/scripts/api' import { app } from '@/scripts/app' import { useCommandStore } from '@/stores/commandStore' @@ -92,12 +93,18 @@ const showReport = () => { const toast = useToast() const { t } = useI18n() const systemStatsStore = useSystemStatsStore() +const telemetry = useTelemetry() const title = computed( () => error.nodeType ?? error.exceptionType ?? t('errorDialog.defaultTitle') ) const showContactSupport = async () => { + telemetry?.trackHelpResourceClicked({ + resource_type: 'help_feedback', + is_external: true, + source: 'error_dialog' + }) await useCommandStore().execute('Comfy.ContactSupport') } diff --git a/src/components/dialog/content/setting/CreditsPanel.vue b/src/components/dialog/content/setting/CreditsPanel.vue index 0221a7114..c87cde3d4 100644 --- a/src/components/dialog/content/setting/CreditsPanel.vue +++ b/src/components/dialog/content/setting/CreditsPanel.vue @@ -124,6 +124,7 @@ import UserCredit from '@/components/common/UserCredit.vue' import UsageLogsTable from '@/components/dialog/content/setting/UsageLogsTable.vue' import { useFirebaseAuthActions } from '@/composables/auth/useFirebaseAuthActions' import { useSubscription } from '@/platform/cloud/subscription/composables/useSubscription' +import { useTelemetry } from '@/platform/telemetry' import { useDialogService } from '@/services/dialogService' import { useCommandStore } from '@/stores/commandStore' import { useFirebaseAuthStore } from '@/stores/firebaseAuthStore' @@ -140,6 +141,7 @@ const dialogService = useDialogService() const authStore = useFirebaseAuthStore() const authActions = useFirebaseAuthActions() const commandStore = useCommandStore() +const telemetry = useTelemetry() const { isActiveSubscription } = useSubscription() const loading = computed(() => authStore.loading) const balanceLoading = computed(() => authStore.isFetchingBalance) @@ -170,6 +172,11 @@ const handleCreditsHistoryClick = async () => { } const handleMessageSupport = async () => { + telemetry?.trackHelpResourceClicked({ + resource_type: 'help_feedback', + is_external: true, + source: 'credits_panel' + }) await commandStore.execute('Comfy.ContactSupport') } diff --git a/src/components/helpcenter/HelpCenterMenuContent.vue b/src/components/helpcenter/HelpCenterMenuContent.vue index b6fc00aff..e028a3eb1 100644 --- a/src/components/helpcenter/HelpCenterMenuContent.vue +++ b/src/components/helpcenter/HelpCenterMenuContent.vue @@ -138,13 +138,14 @@