diff --git a/packages/chat-core-aws-connect/THIRD-PARTY-NOTICES b/packages/chat-core-aws-connect/THIRD-PARTY-NOTICES index 30fcf88..c96dc7e 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.6.1 - @types/stack-utils@2.0.3 - @types/tough-cookie@4.0.5 - @types/yargs-parser@21.0.3 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/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.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/etc/chat-core-zendesk.api.md b/packages/chat-core-zendesk/etc/chat-core-zendesk.api.md index c476ef7..012e1cc 100644 --- a/packages/chat-core-zendesk/etc/chat-core-zendesk.api.md +++ b/packages/chat-core-zendesk/etc/chat-core-zendesk.api.md @@ -18,6 +18,7 @@ export interface ChatCoreZendesk { // 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: string): Promise; resetSession(): void; } diff --git a/packages/chat-core-zendesk/src/infra/ChatCoreZendeskImpl.ts b/packages/chat-core-zendesk/src/infra/ChatCoreZendeskImpl.ts index 9a52750..9154c2a 100644 --- a/packages/chat-core-zendesk/src/infra/ChatCoreZendeskImpl.ts +++ b/packages/chat-core-zendesk/src/infra/ChatCoreZendeskImpl.ts @@ -63,7 +63,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 await 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 +88,6 @@ export class ChatCoreZendeskImpl { } this.setupEventListeners(); } - await this.setupSession(messageRsp); } /** @@ -91,7 +95,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 +139,7 @@ export class ChatCoreZendeskImpl { }`, this.conversationId ); + return this.conversationId; } private setupEventListeners() { @@ -210,4 +217,10 @@ export class ChatCoreZendeskImpl { resetSession(): void { this.conversationId = undefined; } + + async reinitializeSession(conversationId: string): Promise { + this.conversationId = conversationId; + await this.initializeZendeskSdk(); + await Smooch.loadConversation(conversationId); + } } diff --git a/packages/chat-core-zendesk/src/models/ChatCoreZendesk.ts b/packages/chat-core-zendesk/src/models/ChatCoreZendesk.ts index e02cb51..5b00719 100644 --- a/packages/chat-core-zendesk/src/models/ChatCoreZendesk.ts +++ b/packages/chat-core-zendesk/src/models/ChatCoreZendesk.ts @@ -52,4 +52,11 @@ export interface ChatCoreZendesk { * 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: string): Promise; } diff --git a/packages/chat-core-zendesk/tests/ChatCoreZendesk.test.ts b/packages/chat-core-zendesk/tests/ChatCoreZendesk.test.ts index 71e2df9..57a0f00 100644 --- a/packages/chat-core-zendesk/tests/ChatCoreZendesk.test.ts +++ b/packages/chat-core-zendesk/tests/ChatCoreZendesk.test.ts @@ -58,11 +58,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.toBe("mock-conversation-id"); }); it("avoid rendering smooch web widget on subsequent initialization", async () => {