From adb15aac40e08c9a45f70d423acc049599b8c7eb Mon Sep 17 00:00:00 2001 From: Marwan Ahmed <155799754+marawan206@users.noreply.github.com> Date: Fri, 7 Nov 2025 04:17:01 +0200 Subject: [PATCH] feat: pre-fill user info in Zendesk support link (#6586) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add user email and ID as URL parameters when opening the Contact Support link to improve support experience. Only includes user data when logged in. ## Summary Enhanced the Contact Support command to automatically pre-fill user email and ID in Zendesk support tickets, streamlining the support request process for authenticated users. ## Changes - **What**: - Added `useCurrentUser` composable to access authenticated user data in `useCoreCommands.ts` - Modified `Comfy.ContactSupport` command to append user email (`tf_anonymous_requester_email` and `tf_40029135130388`) and user ID (`tf_42515251051412`) as URL parameters when available - Maintained backward compatibility by only adding user parameters when user is logged in - Preserved existing `tf_42243568391700` parameter for distribution type (oss/ccloud) ## Review Focus - Verify that the URL parameters are correctly appended only when user is authenticated - Confirm that non-authenticated users still get the base support URL with just the distribution type parameter - Check that both Firebase auth and API key auth users have their information properly included Example URLs generated when you press on help locally (it will change automatically to ccloud on Cloud): - **Logged out**: `https://support.comfy.org/hc/en-us/requests/new?tf_42243568391700=oss` - **Logged in**: `https://support.comfy.org/hc/en-us/requests/new?tf_42243568391700=ccloud&tf_anonymous_requester_email=user@example.com&tf_40029135130388=user@example.com&tf_42515251051412=abc123xyz` ┆Issue is synchronized with this [Notion page](https://www.notion.so/PR-6586-feat-pre-fill-user-info-in-Zendesk-support-link-2a26d73d36508171b428c634b310f68b) by [Unito](https://www.unito.io) --------- Co-authored-by: Alexander Brown Co-authored-by: bymyself --- src/composables/useCoreCommands.ts | 10 +++++-- src/platform/support/config.ts | 44 ++++++++++++++++++++++++------ 2 files changed, 43 insertions(+), 11 deletions(-) diff --git a/src/composables/useCoreCommands.ts b/src/composables/useCoreCommands.ts index 966fe40e4..f691ff7f1 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' @@ -20,7 +21,7 @@ import { useAssetBrowserDialog } from '@/platform/assets/composables/useAssetBro import { createModelNodeFromAsset } from '@/platform/assets/utils/createModelNodeFromAsset' import { useSubscription } from '@/platform/cloud/subscription/composables/useSubscription' 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 type { ExecutionTriggerSource } from '@/platform/telemetry/types' import { useToastStore } from '@/platform/updates/common/toastStore' @@ -840,7 +841,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 77458ed16..584518712 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()}` +}