diff --git a/src/composables/useCoreCommands.ts b/src/composables/useCoreCommands.ts index 7f5373a083..82fefe9b9a 100644 --- a/src/composables/useCoreCommands.ts +++ b/src/composables/useCoreCommands.ts @@ -1,3 +1,4 @@ +import { useCurrentUser } from '@/composables/auth/useCurrentUser' import { useFirebaseAuthActions } from '@/composables/auth/useFirebaseAuthActions' import { useSelectedLiteGraphItems } from '@/composables/canvas/useSelectedLiteGraphItems' import { useModelSelectorDialog } from '@/composables/useModelSelectorDialog' @@ -23,7 +24,7 @@ import { useAssetBrowserDialog } from '@/platform/assets/composables/useAssetBro import { createModelNodeFromAsset } from '@/platform/assets/utils/createModelNodeFromAsset' import { isCloud } from '@/platform/distribution/types' import { useSettingStore } from '@/platform/settings/settingStore' -import { SUPPORT_URL } from '@/platform/support/config' +import { buildSupportUrl } from '@/platform/support/config' import { useTelemetry } from '@/platform/telemetry' import { useToastStore } from '@/platform/updates/common/toastStore' import { useWorkflowService } from '@/platform/workflow/core/services/workflowService' @@ -785,7 +786,12 @@ export function useCoreCommands(): ComfyCommand[] { label: 'Contact Support', versionAdded: '1.17.8', function: () => { - window.open(SUPPORT_URL, '_blank') + const { userEmail, resolvedUserInfo } = useCurrentUser() + const supportUrl = buildSupportUrl({ + userEmail: userEmail.value, + userId: resolvedUserInfo.value?.id + }) + window.open(supportUrl, '_blank') } }, { diff --git a/src/platform/support/config.ts b/src/platform/support/config.ts index 77458ed16b..5845187129 100644 --- a/src/platform/support/config.ts +++ b/src/platform/support/config.ts @@ -1,17 +1,43 @@ import { isCloud } from '@/platform/distribution/types' /** - * Zendesk ticket form field ID for the distribution tag. - * This field is used to categorize support requests by their source (cloud vs OSS). + * Zendesk ticket form field IDs. */ -const DISTRIBUTION_FIELD_ID = 'tf_42243568391700' +const ZENDESK_FIELDS = { + /** Distribution tag (cloud vs OSS) */ + DISTRIBUTION: 'tf_42243568391700', + /** User email (anonymous requester) */ + ANONYMOUS_EMAIL: 'tf_anonymous_requester_email', + /** User email (authenticated) */ + EMAIL: 'tf_40029135130388', + /** User ID */ + USER_ID: 'tf_42515251051412' +} as const + +const SUPPORT_BASE_URL = 'https://support.comfy.org/hc/en-us/requests/new' /** - * Support URLs for the ComfyUI platform. - * The URL varies based on whether the application is running in Cloud or OSS distribution. + * Builds the support URL with optional user information for pre-filling. + * Users without login information will still get a valid support URL without pre-fill. * - * - Cloud: Includes 'ccloud' tag for identifying cloud-based support requests - * - OSS: Includes 'oss' tag for identifying open-source support requests + * @param params - User information to pre-fill in the support form + * @returns Complete Zendesk support URL with query parameters */ -const TAG = isCloud ? 'ccloud' : 'oss' -export const SUPPORT_URL = `https://support.comfy.org/hc/en-us/requests/new?${DISTRIBUTION_FIELD_ID}=${TAG}` +export function buildSupportUrl(params?: { + userEmail?: string | null + userId?: string | null +}): string { + const searchParams = new URLSearchParams({ + [ZENDESK_FIELDS.DISTRIBUTION]: isCloud ? 'ccloud' : 'oss' + }) + + if (params?.userEmail) { + searchParams.append(ZENDESK_FIELDS.ANONYMOUS_EMAIL, params.userEmail) + searchParams.append(ZENDESK_FIELDS.EMAIL, params.userEmail) + } + if (params?.userId) { + searchParams.append(ZENDESK_FIELDS.USER_ID, params.userId) + } + + return `${SUPPORT_BASE_URL}?${searchParams.toString()}` +}