Anhytran/update disconnect participant #300
Open
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Amazon Connect Chat: Enhanced End Chat Flow Implementation
Problem Statement
The original "End Chat" button immediately terminated the WebSocket connection after calling disconnectParticipant(), preventing customers from receiving post-disconnect messages like surveys or farewell notifications.
Solution Overview
Maintain the WebSocket connection after disconnectParticipant() API call, allowing the chat to remain active until the server sends a chatEnded event.
Key Technical Changes
Deferred Connection Termination
Removed immediate cleanup from disconnectParticipant() method
Moved connection termination logic to _handleIncomingMessage() when CONTENT_TYPE.chatEnded is received
State Management Refactoring
// Before: Immediate cleanup in disconnectParticipant()
this._participantDisconnected = true;
this.hasChatEnded = true;
this.cleanUpOnParticipantDisconnect();
this.breakConnection();
// After: Server-driven cleanup in _handleIncomingMessage()
if (incomingData.ContentType === CONTENT_TYPE.chatEnded) {
this.hasChatEnded = true;
this._forwardChatEvent(CHAT_EVENTS.CHAT_ENDED, {
data: null,
chatDetails: this.getChatDetails()
}, () => {
this._participantDisconnected = true;
this.cleanUpOnParticipantDisconnect();
});
this.breakConnection();
}
Used callback pattern in _forwardChatEvent() to ensure CHAT_ENDED event is published before cleanup
Prevents race conditions between UI notifications and connection termination