## @xapp/contact-app

Hosted, stand-alone contact us and scheduling page.

## Supported Query Strings

### Overrides

When provided, these will override the values from the form widget config.

-   `businessName`
-   `businessAddress`
-   `businessLogoUrl`
-   `businessWebsite`
-   `chatWidgetKey`
-   `partnerId`

### Settings

-   `disablePoweredBy` - This will disable the "Powered by XAPP AI" text at the bottom of the page.
-   `poweredByMessage` - Custom message for the "powered by" footer text (defaults to "Powered by XAPP AI").
-   `poweredByUrl` - Custom URL for the "powered by" footer link (defaults to "https://xapp.ai").

### Widget Pass-Through

These will be saved to local storage so that the widgets can look for them and respond accordingly.

-   `service` - Not in use yet but can pass through which service the user selected
-   `environment` - Can be helpful for sandbox testing
-   `origin` - Used to configure the form widget specifically for Reserve with Google
-   `enablePreferredTime` - Used to turn on preferred time capture for non-scheduling customers.
-   `rwg_token` - Set by Google Actions from Google Business Profile for tracking
-   `merchant_id` - Optional, we can add this to track merchant ID

### Tracking Parameters

Marketing attribution and tracking parameters are automatically captured and passed through to form submissions for analytics filtering. All tracking parameters are persisted to localStorage for 30 days and included in form widget API requests.

#### Standard UTM Parameters (Google Analytics standard)
-   `utm_source` - Traffic source (e.g., "google", "facebook", "newsletter")
-   `utm_medium` - Marketing medium (e.g., "cpc", "email", "social")
-   `utm_campaign` - Campaign name (e.g., "spring_sale", "product_launch")
-   `utm_term` - Paid keywords (for paid search campaigns)
-   `utm_content` - Ad content identifier (for A/B testing different ads)

#### Platform-Specific Click IDs
-   `gclid` - Google Click ID (automatically set by Google Ads)
-   `fbclid` - Facebook Click ID (automatically set by Facebook)
-   `msclkid` - Microsoft Click ID (automatically set by Bing Ads)

#### Custom Tracking Parameters
-   `track_*` - Any parameter prefixed with "track_" will be captured and passed through

**Usage Example:**
```
https://your-contact-page.com/widget-key?utm_source=google&utm_medium=cpc&utm_campaign=spring_sale&track_landing_page=homepage
```

**Data Flow:**
1. Parameters are extracted from the URL when the page loads
2. Stored in localStorage with 30-day expiration
3. Automatically included in all form widget API requests
4. Available for filtering in OpenSearch analytics

**Configuration:**
Tracking parameter capture is enabled by default. The system follows industry standards and handles parameter persistence automatically.

**Note:** The contact-app and embedded form-widget both extract tracking parameters independently. This is safe:
- Both read from the same page URL
- Both write to the same localStorage keys (`xa_tracking_*`)
- The form-widget's extraction is idempotent and just refreshes the data
- All parameters are correctly passed to the API regardless of which component extracted them
