Skip to content

Commit f260e19

Browse files
oleksandrkitsclaude
andcommitted
feat: Add Intercom widget with license key tracking
- Integrated Intercom messenger SDK with environment-based toggle - Added INTERCOM_WIDGET flag (default: true) for easy enable/disable - Configured custom attributes including license key for better support - Custom attributes sent to Intercom: - is_sys_admin, is_root_admin, role_id - instance_url, license_key - Widget can be disabled for commercial customers via environment config - Increased initialization delay to ensure environment data loads 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
1 parent b7c5438 commit f260e19

4 files changed

Lines changed: 25 additions & 15 deletions

File tree

src/app/app.component.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,10 +114,11 @@ export class AppComponent implements OnInit {
114114

115115
private async initializeIntercom(): Promise<void> {
116116
try {
117-
// Wait a bit for authentication to complete
117+
// Wait a bit for authentication and environment data to complete
118118
setTimeout(async () => {
119+
// Ensure environment data is loaded
119120
await this.intercomService.initializeIntercom();
120-
}, 1000);
121+
}, 2000); // Increased delay to ensure environment data is loaded
121122
} catch (error) {
122123
this.loggingService.log(`Failed to initialize Intercom: ${error}`);
123124
}

src/app/shared/services/intercom.service.ts

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { Injectable } from '@angular/core';
22
import { environment } from '../../../../environments/environment';
33
import { DfUserDataService } from './df-user-data.service';
4+
import { DfSystemConfigDataService } from './df-system-config-data.service';
45

56
// Declare Intercom on window for shutdown/update operations
67

@@ -10,7 +11,10 @@ import { DfUserDataService } from './df-user-data.service';
1011
export class IntercomService {
1112
private intercomLoaded = false;
1213

13-
constructor(private dfUserDataService: DfUserDataService) {}
14+
constructor(
15+
private dfUserDataService: DfUserDataService,
16+
private dfSystemConfigDataService: DfSystemConfigDataService
17+
) {}
1418

1519
async initializeIntercom(): Promise<void> {
1620
// Check if Intercom should be enabled based on environment config
@@ -31,6 +35,7 @@ export class IntercomService {
3135

3236
// Get current user data
3337
const userData = this.dfUserDataService.userData;
38+
const systemEnvironment = this.dfSystemConfigDataService.environment;
3439

3540
if (userData) {
3641
// Initialize Intercom with user data
@@ -44,12 +49,11 @@ export class IntercomService {
4449
created_at: userData.lastLoginDate
4550
? Math.floor(new Date(userData.lastLoginDate).getTime() / 1000)
4651
: undefined,
47-
custom_attributes: {
48-
is_sys_admin: userData.isSysAdmin,
49-
is_root_admin: userData.isRootAdmin,
50-
role_id: userData.roleId,
51-
instance_url: window.location.origin,
52-
},
52+
is_sys_admin: userData.isSysAdmin,
53+
is_root_admin: userData.isRootAdmin,
54+
role_id: userData.roleId,
55+
instance_url: window.location.origin,
56+
license_key: systemEnvironment.platform?.licenseKey || 'N/A',
5357
});
5458

5559
this.intercomLoaded = true;
@@ -96,6 +100,8 @@ export class IntercomService {
96100
return;
97101
}
98102

103+
const systemEnvironment = this.dfSystemConfigDataService.environment;
104+
99105
if (userData) {
100106
(window as any).Intercom('update', {
101107
user_id: userData.id?.toString() || userData.sessionId,
@@ -106,12 +112,11 @@ export class IntercomService {
106112
created_at: userData.lastLoginDate
107113
? Math.floor(new Date(userData.lastLoginDate).getTime() / 1000)
108114
: undefined,
109-
custom_attributes: {
110-
is_sys_admin: userData.isSysAdmin,
111-
is_root_admin: userData.isRootAdmin,
112-
role_id: userData.roleId,
113-
instance_url: window.location.origin,
114-
},
115+
is_sys_admin: userData.isSysAdmin,
116+
is_root_admin: userData.isRootAdmin,
117+
role_id: userData.roleId,
118+
instance_url: window.location.origin,
119+
license_key: systemEnvironment.platform?.licenseKey || 'N/A',
115120
});
116121
}
117122
}

src/environments/environment.prod.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,6 @@ export const environment = {
33
dfAdminApiKey: '',
44
dfApiDocsApiKey: '',
55
dfFileManagerApiKey: '',
6+
intercomWidget: true, // Set to false to disable Intercom chat widget
7+
intercomAppId: 'ymvqkyiw', // Intercom workspace app ID
68
};

src/environments/environment.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,6 @@ export const environment = {
44
dfApiDocsApiKey: '',
55
dfFileManagerApiKey: '',
66
builderApiKey: '91ab2f932895468888be9adb6a3c0b5d',
7+
intercomWidget: true, // Set to false to disable Intercom chat widget
8+
intercomAppId: 'ymvqkyiw', // Intercom workspace app ID
79
};

0 commit comments

Comments
 (0)