Skip to content

Advanced configuration

Control the widget’s initial visibility and open state:

import {
provideZendeskWebWidget,
withZendeskWebWidgetScript,
withZendeskWebWidgetInitialState,
} from '@presencelearning/zendesk-web-widget';
export const appConfig: ApplicationConfig = {
providers: [
provideZendeskWebWidget(
withZendeskWebWidgetScript('YOUR_ZENDESK_KEY'),
withZendeskWebWidgetInitialState({
visible: true, // Show the widget button
open: false, // Don't open the chat window automatically
})
),
],
};

Authenticate users with JWT tokens:

import {
provideZendeskWebWidget,
withZendeskWebWidgetScript,
withZendeskWebWidgetAuth,
} from '@presencelearning/zendesk-web-widget';
import { inject } from '@angular/core';
import { AuthService } from './auth.service';
export const appConfig: ApplicationConfig = {
providers: [
provideZendeskWebWidget(
withZendeskWebWidgetScript('YOUR_ZENDESK_KEY'),
withZendeskWebWidgetAuth(async () => {
const authService = inject(AuthService);
const token = await authService.getZendeskToken();
return {
token,
userConversationFields: {
userId: authService.currentUser.id,
email: authService.currentUser.email,
},
};
})
),
],
};

Main provider function that sets up the Zendesk Web Widget with the specified features.

Parameters: Variable number of feature configurations. Returns: Provider[]

Provides the Zendesk widget script loader with your instance ID.

Parameters:

  • instanceId: string — Your Zendesk instance key/ID

withZendeskWebWidgetInitialState(initialState)

Section titled “withZendeskWebWidgetInitialState(initialState)”

Configures the initial state of the widget.

Parameters:

  • initialState.visible?: boolean — Whether the widget button is visible
  • initialState.open?: boolean — Whether the chat window is open

Provides authentication functionality for the widget.

Parameters:

  • authMethod: () => Promise<UserData | null> — Async function returning user auth data
interface UserData {
token: string;
userConversationFields?: Record<string, string>;
}
app.config.ts
import { ApplicationConfig } from '@angular/core';
import {
provideZendeskWebWidget,
withZendeskWebWidgetScript,
withZendeskWebWidgetInitialState,
withZendeskWebWidgetAuth,
} from '@presencelearning/zendesk-web-widget';
import { inject } from '@angular/core';
import { AuthService } from './services/auth.service';
export const appConfig: ApplicationConfig = {
providers: [
provideZendeskWebWidget(
withZendeskWebWidgetScript('your-zendesk-instance-id'),
withZendeskWebWidgetInitialState({
visible: true,
open: false,
}),
withZendeskWebWidgetAuth(async () => {
const authService = inject(AuthService);
if (!authService.isAuthenticated()) {
return null;
}
const token = await authService.getZendeskJWT();
return {
token,
userConversationFields: {
userId: authService.user.id,
email: authService.user.email,
accountType: authService.user.plan,
},
};
})
),
],
};
// support.component.ts
import { Component, inject, effect } from '@angular/core';
import { ZendeskWebWidget } from '@presencelearning/zendesk-web-widget';
@Component({
selector: 'app-support',
template: `
<div class="support-widget">
<button (click)="toggleWidget()">{{ widget.isOpen() ? 'Close' : 'Open' }} Support</button>
@if (widget.isVisible()) {
<button (click)="widget.hide()">Hide Widget</button>
} @else {
<button (click)="widget.show()">Show Widget</button>
}
</div>
`,
})
export class SupportComponent {
protected readonly widget = inject(ZendeskWebWidget);
constructor() {
// React to widget state changes
effect(() => {
console.log('Widget open state:', this.widget.isOpen());
});
}
toggleWidget() {
if (this.widget.isOpen()) {
this.widget.close();
} else {
this.widget.showAndOpen();
}
}
}