diff --git a/packages/chat-core-aws-connect/THIRD-PARTY-NOTICES b/packages/chat-core-aws-connect/THIRD-PARTY-NOTICES
index 30fcf88..8e2741a 100644
--- a/packages/chat-core-aws-connect/THIRD-PARTY-NOTICES
+++ b/packages/chat-core-aws-connect/THIRD-PARTY-NOTICES
@@ -195,7 +195,7 @@ The following NPM packages may be included in this product:
- @types/istanbul-lib-report@3.0.3
- @types/istanbul-reports@3.0.4
- @types/jsdom@20.0.1
- - @types/node@22.5.5
+ - @types/node@22.7.4
- @types/stack-utils@2.0.3
- @types/tough-cookie@4.0.5
- @types/yargs-parser@21.0.3
@@ -1863,7 +1863,7 @@ SOFTWARE.
The following NPM package may be included in this product:
- - nwsapi@2.2.12
+ - nwsapi@2.2.13
This package contains the following license and notice below:
diff --git a/packages/chat-core-aws-connect/docs/chat-core-aws-connect.chatcoreawsconnect.md b/packages/chat-core-aws-connect/docs/chat-core-aws-connect.chatcoreawsconnect.md
index 3858a0b..4bcb316 100644
--- a/packages/chat-core-aws-connect/docs/chat-core-aws-connect.chatcoreawsconnect.md
+++ b/packages/chat-core-aws-connect/docs/chat-core-aws-connect.chatcoreawsconnect.md
@@ -21,5 +21,6 @@ export interface ChatCoreAwsConnect
| [init(messageResponse)](./chat-core-aws-connect.chatcoreawsconnect.init.md) | Initialize the Amazon Connect chat session using the credentials from the Chat API. |
| [on(eventName, cb)](./chat-core-aws-connect.chatcoreawsconnect.on.md) | Register a callback for an event triggered within the Amazon Connect chat session. Supported events are: - message
: A new message has been received. - typing
: The agent is typing. - close
: The chat session has been closed. |
| [processMessage(request)](./chat-core-aws-connect.chatcoreawsconnect.processmessage.md) | Process a message sent by the user. |
+| [reinitializeSession(\_)](./chat-core-aws-connect.chatcoreawsconnect.reinitializesession.md) | Reinitialize the session using existing session data. |
| [resetSession()](./chat-core-aws-connect.chatcoreawsconnect.resetsession.md) | Resets the [ChatCoreAwsConnect](./chat-core-aws-connect.chatcoreawsconnect.md) instance, clearing the underlying Amazon Connect session. |
diff --git a/packages/chat-core-aws-connect/docs/chat-core-aws-connect.chatcoreawsconnect.reinitializesession.md b/packages/chat-core-aws-connect/docs/chat-core-aws-connect.chatcoreawsconnect.reinitializesession.md
new file mode 100644
index 0000000..906f3e5
--- /dev/null
+++ b/packages/chat-core-aws-connect/docs/chat-core-aws-connect.chatcoreawsconnect.reinitializesession.md
@@ -0,0 +1,28 @@
+
+
+[Home](./index.md) > [@yext/chat-core-aws-connect](./chat-core-aws-connect.md) > [ChatCoreAwsConnect](./chat-core-aws-connect.chatcoreawsconnect.md) > [reinitializeSession](./chat-core-aws-connect.chatcoreawsconnect.reinitializesession.md)
+
+## ChatCoreAwsConnect.reinitializeSession() method
+
+Reinitialize the session using existing session data.
+
+**Signature:**
+
+```typescript
+reinitializeSession(_: unknown): Promise;
+```
+
+## Parameters
+
+| Parameter | Type | Description |
+| --- | --- | --- |
+| \_ | unknown | |
+
+**Returns:**
+
+Promise<void>
+
+## Remarks
+
+This is currently not supported for Amazon Connect.
+
diff --git a/packages/chat-core-aws-connect/etc/chat-core-aws-connect.api.md b/packages/chat-core-aws-connect/etc/chat-core-aws-connect.api.md
index e03b3f8..863fe0e 100644
--- a/packages/chat-core-aws-connect/etc/chat-core-aws-connect.api.md
+++ b/packages/chat-core-aws-connect/etc/chat-core-aws-connect.api.md
@@ -27,6 +27,7 @@ export interface ChatCoreAwsConnect {
init(messageResponse: MessageResponse): Promise;
on(eventName: T, cb: EventCallback): void;
processMessage(request: MessageRequest): Promise;
+ reinitializeSession(_: unknown): Promise;
resetSession(): void;
}
diff --git a/packages/chat-core-aws-connect/src/infra/ChatCoreAwsConnectImpl.ts b/packages/chat-core-aws-connect/src/infra/ChatCoreAwsConnectImpl.ts
index 37cdf82..ed35b30 100644
--- a/packages/chat-core-aws-connect/src/infra/ChatCoreAwsConnectImpl.ts
+++ b/packages/chat-core-aws-connect/src/infra/ChatCoreAwsConnectImpl.ts
@@ -145,4 +145,10 @@ export class ChatCoreAwsConnectImpl implements ChatCoreAwsConnect {
this.session.disconnectParticipant();
this.session = undefined;
}
+
+ async reinitializeSession(_: unknown): Promise {
+ console.warn(
+ "Reinitializing chat session is currently not supported for AWS Connect"
+ );
+ }
}
diff --git a/packages/chat-core-aws-connect/src/models/ChatCoreAwsConnect.ts b/packages/chat-core-aws-connect/src/models/ChatCoreAwsConnect.ts
index 465890e..ba15a65 100644
--- a/packages/chat-core-aws-connect/src/models/ChatCoreAwsConnect.ts
+++ b/packages/chat-core-aws-connect/src/models/ChatCoreAwsConnect.ts
@@ -55,4 +55,14 @@ export interface ChatCoreAwsConnect {
* Resets the {@link ChatCoreAwsConnect} instance, clearing the underlying Amazon Connect session.
*/
resetSession(): void;
+
+ /**
+ * Reinitialize the session using existing session data.
+ *
+ * @param credentials - The credentials to use to reinitialize the session.
+ *
+ * @remarks
+ * This is currently not supported for Amazon Connect.
+ */
+ reinitializeSession(_: unknown): Promise;
}
diff --git a/packages/chat-core-zendesk/docs/chat-core-zendesk.chatcorezendesk.getsession.md b/packages/chat-core-zendesk/docs/chat-core-zendesk.chatcorezendesk.getsession.md
index 60f06ff..d145ac4 100644
--- a/packages/chat-core-zendesk/docs/chat-core-zendesk.chatcorezendesk.getsession.md
+++ b/packages/chat-core-zendesk/docs/chat-core-zendesk.chatcorezendesk.getsession.md
@@ -9,9 +9,9 @@ Provide the current conversation ID for the chat session.
**Signature:**
```typescript
-getSession(): void;
+getSession(): string | undefined;
```
**Returns:**
-void
+string \| undefined
diff --git a/packages/chat-core-zendesk/docs/chat-core-zendesk.chatcorezendesk.init.md b/packages/chat-core-zendesk/docs/chat-core-zendesk.chatcorezendesk.init.md
index 49a8f7b..d83cabd 100644
--- a/packages/chat-core-zendesk/docs/chat-core-zendesk.chatcorezendesk.init.md
+++ b/packages/chat-core-zendesk/docs/chat-core-zendesk.chatcorezendesk.init.md
@@ -9,7 +9,7 @@ Initialize the Amazon Connect chat session using the credentials from the Chat A
**Signature:**
```typescript
-init(messageResponse: MessageResponse): Promise;
+init(messageResponse: MessageResponse): Promise;
```
## Parameters
@@ -20,5 +20,5 @@ init(messageResponse: MessageResponse): Promise;
**Returns:**
-Promise<void>
+Promise<[ChatCoreZendeskSessionCredentials](./chat-core-zendesk.chatcorezendesksessioncredentials.md)>
diff --git a/packages/chat-core-zendesk/docs/chat-core-zendesk.chatcorezendesk.md b/packages/chat-core-zendesk/docs/chat-core-zendesk.chatcorezendesk.md
index 5edf192..3c852f8 100644
--- a/packages/chat-core-zendesk/docs/chat-core-zendesk.chatcorezendesk.md
+++ b/packages/chat-core-zendesk/docs/chat-core-zendesk.chatcorezendesk.md
@@ -21,5 +21,6 @@ export interface ChatCoreZendesk
| [init(messageResponse)](./chat-core-zendesk.chatcorezendesk.init.md) | Initialize the Amazon Connect chat session using the credentials from the Chat API. |
| [on(eventName, cb)](./chat-core-zendesk.chatcorezendesk.on.md) | Register a callback for an event triggered within the Zendesk chat session. Supported events are: - message
: A new message has been received. - typing
: The agent is typing. - close
: The chat session has been closed (e.g. agent left or closed the ticket). |
| [processMessage(request)](./chat-core-zendesk.chatcorezendesk.processmessage.md) | Process a message sent by the user. |
+| [reinitializeSession(credentials)](./chat-core-zendesk.chatcorezendesk.reinitializesession.md) | Reinitialize the session using existing session data. |
| [resetSession()](./chat-core-zendesk.chatcorezendesk.resetsession.md) | Reset the chat session by clearing the current conversation ID. |
diff --git a/packages/chat-core-zendesk/docs/chat-core-zendesk.chatcorezendesk.reinitializesession.md b/packages/chat-core-zendesk/docs/chat-core-zendesk.chatcorezendesk.reinitializesession.md
new file mode 100644
index 0000000..eeae624
--- /dev/null
+++ b/packages/chat-core-zendesk/docs/chat-core-zendesk.chatcorezendesk.reinitializesession.md
@@ -0,0 +1,24 @@
+
+
+[Home](./index.md) > [@yext/chat-core-zendesk](./chat-core-zendesk.md) > [ChatCoreZendesk](./chat-core-zendesk.chatcorezendesk.md) > [reinitializeSession](./chat-core-zendesk.chatcorezendesk.reinitializesession.md)
+
+## ChatCoreZendesk.reinitializeSession() method
+
+Reinitialize the session using existing session data.
+
+**Signature:**
+
+```typescript
+reinitializeSession(credentials: ChatCoreZendeskSessionCredentials): Promise;
+```
+
+## Parameters
+
+| Parameter | Type | Description |
+| --- | --- | --- |
+| credentials | [ChatCoreZendeskSessionCredentials](./chat-core-zendesk.chatcorezendesksessioncredentials.md) | The credentials to use to reinitialize the session. |
+
+**Returns:**
+
+Promise<void>
+
diff --git a/packages/chat-core-zendesk/docs/chat-core-zendesk.chatcorezendesksessioncredentials.conversationid.md b/packages/chat-core-zendesk/docs/chat-core-zendesk.chatcorezendesksessioncredentials.conversationid.md
new file mode 100644
index 0000000..de8c2d5
--- /dev/null
+++ b/packages/chat-core-zendesk/docs/chat-core-zendesk.chatcorezendesksessioncredentials.conversationid.md
@@ -0,0 +1,13 @@
+
+
+[Home](./index.md) > [@yext/chat-core-zendesk](./chat-core-zendesk.md) > [ChatCoreZendeskSessionCredentials](./chat-core-zendesk.chatcorezendesksessioncredentials.md) > [conversationId](./chat-core-zendesk.chatcorezendesksessioncredentials.conversationid.md)
+
+## ChatCoreZendeskSessionCredentials.conversationId property
+
+The conversation ID for the current chat session.
+
+**Signature:**
+
+```typescript
+conversationId: string;
+```
diff --git a/packages/chat-core-zendesk/docs/chat-core-zendesk.chatcorezendesksessioncredentials.md b/packages/chat-core-zendesk/docs/chat-core-zendesk.chatcorezendesksessioncredentials.md
new file mode 100644
index 0000000..ecaa78d
--- /dev/null
+++ b/packages/chat-core-zendesk/docs/chat-core-zendesk.chatcorezendesksessioncredentials.md
@@ -0,0 +1,20 @@
+
+
+[Home](./index.md) > [@yext/chat-core-zendesk](./chat-core-zendesk.md) > [ChatCoreZendeskSessionCredentials](./chat-core-zendesk.chatcorezendesksessioncredentials.md)
+
+## ChatCoreZendeskSessionCredentials interface
+
+Credentials for the Zendesk session created by the [ChatCoreZendesk](./chat-core-zendesk.chatcorezendesk.md). Used for reinitializing the session across page reloads.
+
+**Signature:**
+
+```typescript
+export interface ChatCoreZendeskSessionCredentials
+```
+
+## Properties
+
+| Property | Modifiers | Type | Description |
+| --- | --- | --- | --- |
+| [conversationId](./chat-core-zendesk.chatcorezendesksessioncredentials.conversationid.md) | | string | The conversation ID for the current chat session. |
+
diff --git a/packages/chat-core-zendesk/docs/chat-core-zendesk.md b/packages/chat-core-zendesk/docs/chat-core-zendesk.md
index 9787d76..41cf1aa 100644
--- a/packages/chat-core-zendesk/docs/chat-core-zendesk.md
+++ b/packages/chat-core-zendesk/docs/chat-core-zendesk.md
@@ -16,4 +16,5 @@
| --- | --- |
| [ChatCoreZendesk](./chat-core-zendesk.chatcorezendesk.md) | Provides methods for interacting with Chat's Zendesk integration. |
| [ChatCoreZendeskConfig](./chat-core-zendesk.chatcorezendeskconfig.md) | Configuration for this instance of the [ChatCoreZendesk](./chat-core-zendesk.chatcorezendesk.md). |
+| [ChatCoreZendeskSessionCredentials](./chat-core-zendesk.chatcorezendesksessioncredentials.md) | Credentials for the Zendesk session created by the [ChatCoreZendesk](./chat-core-zendesk.chatcorezendesk.md). Used for reinitializing the session across page reloads. |
diff --git a/packages/chat-core-zendesk/etc/chat-core-zendesk.api.md b/packages/chat-core-zendesk/etc/chat-core-zendesk.api.md
index c476ef7..128cae0 100644
--- a/packages/chat-core-zendesk/etc/chat-core-zendesk.api.md
+++ b/packages/chat-core-zendesk/etc/chat-core-zendesk.api.md
@@ -12,12 +12,13 @@ import { MessageResponse } from '@yext/chat-core';
// @public
export interface ChatCoreZendesk {
emit(eventName: T, data: EventMap[T]): void;
- getSession(): void;
- init(messageResponse: MessageResponse): Promise;
+ getSession(): string | undefined;
+ init(messageResponse: MessageResponse): Promise;
// Warning: (ae-forgotten-export) The symbol "EventMap" needs to be exported by the entry point index.d.ts
// Warning: (ae-forgotten-export) The symbol "EventCallback" needs to be exported by the entry point index.d.ts
on(eventName: T, cb: EventCallback): void;
processMessage(request: MessageRequest): Promise;
+ reinitializeSession(credentials: ChatCoreZendeskSessionCredentials): Promise;
resetSession(): void;
}
@@ -27,6 +28,11 @@ export interface ChatCoreZendeskConfig {
ticketTags?: string[];
}
+// @public
+export interface ChatCoreZendeskSessionCredentials {
+ conversationId: string;
+}
+
// Warning: (ae-forgotten-export) The symbol "ChatCoreZendeskImpl" needs to be exported by the entry point index.d.ts
//
// @public
diff --git a/packages/chat-core-zendesk/src/infra/ChatCoreZendeskImpl.ts b/packages/chat-core-zendesk/src/infra/ChatCoreZendeskImpl.ts
index 9a52750..e4f1a5d 100644
--- a/packages/chat-core-zendesk/src/infra/ChatCoreZendeskImpl.ts
+++ b/packages/chat-core-zendesk/src/infra/ChatCoreZendeskImpl.ts
@@ -1,5 +1,6 @@
/* eslint-disable @typescript-eslint/ban-ts-comment */
import { MessageRequest, MessageResponse } from "@yext/chat-core";
+import { ChatCoreZendesk } from "../models";
/**
* Issue 1: Smooch Version
@@ -32,6 +33,7 @@ const Smooch = (SmoochLib.default || SmoochLib) as typeof SmoochLib;
import { ChatCoreZendeskConfig } from "../models/ChatCoreZendeskConfig";
import { EventCallback, EventMap } from "../models/EventCallback";
+import { ChatCoreZendeskSessionCredentials } from "../models/ChatCoreZendeskSessionCredentials";
const MetadataChatSDKKey = "YEXT_CHAT_SDK";
@@ -43,7 +45,7 @@ const MetadataChatSDKKey = "YEXT_CHAT_SDK";
*
* @internal
*/
-export class ChatCoreZendeskImpl {
+export class ChatCoreZendeskImpl implements ChatCoreZendesk {
private eventListeners: { [T in keyof EventMap]?: EventCallback[] } = {};
private conversationId: string | undefined;
private integrationId: string;
@@ -63,7 +65,12 @@ export class ChatCoreZendeskImpl {
* mode on the first invocation. Subsequent calls to this method will create a
* new conversation session.
*/
- async init(messageRsp: MessageResponse): Promise {
+ async init(messageRsp: MessageResponse): Promise {
+ await this.initializeZendeskSdk();
+ return this.createZendeskConversation(messageRsp);
+ }
+
+ private async initializeZendeskSdk(): Promise {
const divId = "yext-chat-core-zendesk-container";
if (!window.document.getElementById(divId)) {
const div = window.document.createElement("div");
@@ -83,7 +90,6 @@ export class ChatCoreZendeskImpl {
}
this.setupEventListeners();
}
- await this.setupSession(messageRsp);
}
/**
@@ -91,7 +97,9 @@ export class ChatCoreZendeskImpl {
* On ticket creation, the metadata is set to include the tag "yext-chat"
* with the conversation summary as the initial message.
*/
- private async setupSession(messageRsp: MessageResponse) {
+ private async createZendeskConversation(
+ messageRsp: MessageResponse
+ ): Promise {
const ticketFields: Record = {};
try {
if (messageRsp.integrationDetails?.zendeskHandoff?.ticketFields) {
@@ -133,6 +141,10 @@ export class ChatCoreZendeskImpl {
}`,
this.conversationId
);
+
+ return {
+ conversationId: convo.id,
+ };
}
private setupEventListeners() {
@@ -208,6 +220,14 @@ export class ChatCoreZendeskImpl {
}
resetSession(): void {
+ // @ts-ignore - off() is not in the Smooch types, but does exist
+ Smooch.off();
this.conversationId = undefined;
}
+
+ async reinitializeSession(credentials: ChatCoreZendeskSessionCredentials): Promise {
+ this.conversationId = credentials.conversationId;
+ await this.initializeZendeskSdk();
+ await Smooch.loadConversation(credentials.conversationId);
+ }
}
diff --git a/packages/chat-core-zendesk/src/models/ChatCoreZendesk.ts b/packages/chat-core-zendesk/src/models/ChatCoreZendesk.ts
index e02cb51..8644f9a 100644
--- a/packages/chat-core-zendesk/src/models/ChatCoreZendesk.ts
+++ b/packages/chat-core-zendesk/src/models/ChatCoreZendesk.ts
@@ -1,5 +1,6 @@
import { MessageRequest, MessageResponse } from "@yext/chat-core";
import { EventCallback, EventMap } from "./EventCallback";
+import { ChatCoreZendeskSessionCredentials } from "./ChatCoreZendeskSessionCredentials";
/**
* Provides methods for interacting with Chat's Zendesk integration.
@@ -12,7 +13,7 @@ export interface ChatCoreZendesk {
*
* @param messageResponse - The response returned from a successful call to the Chat API.
*/
- init(messageResponse: MessageResponse): Promise;
+ init(messageResponse: MessageResponse): Promise;
/**
* Register a callback for an event triggered within the Zendesk chat session.
@@ -46,10 +47,17 @@ export interface ChatCoreZendesk {
/**
* Provide the current conversation ID for the chat session.
*/
- getSession(): void;
+ getSession(): string | undefined;
/**
* Reset the chat session by clearing the current conversation ID.
*/
resetSession(): void;
+
+ /**
+ * Reinitialize the session using existing session data.
+ *
+ * @param credentials - The credentials to use to reinitialize the session.
+ */
+ reinitializeSession(credentials: ChatCoreZendeskSessionCredentials): Promise;
}
diff --git a/packages/chat-core-zendesk/src/models/ChatCoreZendeskSessionCredentials.ts b/packages/chat-core-zendesk/src/models/ChatCoreZendeskSessionCredentials.ts
new file mode 100644
index 0000000..c147641
--- /dev/null
+++ b/packages/chat-core-zendesk/src/models/ChatCoreZendeskSessionCredentials.ts
@@ -0,0 +1,12 @@
+/**
+ * Credentials for the Zendesk session created by the {@link ChatCoreZendesk}.
+ * Used for reinitializing the session across page reloads.
+ *
+ * @public
+ */
+export interface ChatCoreZendeskSessionCredentials {
+ /**
+ * The conversation ID for the current chat session.
+ */
+ conversationId: string;
+}
\ No newline at end of file
diff --git a/packages/chat-core-zendesk/src/models/index.ts b/packages/chat-core-zendesk/src/models/index.ts
index 0767bba..6ac772a 100644
--- a/packages/chat-core-zendesk/src/models/index.ts
+++ b/packages/chat-core-zendesk/src/models/index.ts
@@ -1,2 +1,3 @@
export { ChatCoreZendeskConfig } from "./ChatCoreZendeskConfig";
export { ChatCoreZendesk } from "./ChatCoreZendesk";
+export { ChatCoreZendeskSessionCredentials } from "./ChatCoreZendeskSessionCredentials";
diff --git a/packages/chat-core-zendesk/tests/ChatCoreZendesk.test.ts b/packages/chat-core-zendesk/tests/ChatCoreZendesk.test.ts
index 71e2df9..02faa7a 100644
--- a/packages/chat-core-zendesk/tests/ChatCoreZendesk.test.ts
+++ b/packages/chat-core-zendesk/tests/ChatCoreZendesk.test.ts
@@ -33,6 +33,7 @@ jest.mock("smooch", () => ({
on: jest.fn(),
startTyping: jest.fn(),
stopTyping: jest.fn(),
+ off: jest.fn(),
}));
beforeEach(() => {
@@ -58,11 +59,11 @@ describe("chat session initialization", () => {
);
});
- it("returns no error when successfully connecting to chat session", async () => {
+ it("returns convo id and no error when successfully connecting to chat session", async () => {
const chatCoreZendesk = provideChatCoreZendesk(mockConfig);
await expect(
chatCoreZendesk.init(mockMessageResponse())
- ).resolves.toBeUndefined();
+ ).resolves.toStrictEqual({conversationId: "mock-conversation-id"});
});
it("avoid rendering smooch web widget on subsequent initialization", async () => {