-
Notifications
You must be signed in to change notification settings - Fork 384
fix(multi-party-conference): implement-multi-party-conference-feature #4520
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: next
Are you sure you want to change the base?
Conversation
This pull request is automatically being deployed by Amplify Hosting (learn more). |
…consultation states
ac80f34
to
ce038aa
Compare
@@ -1,5 +1,5 @@ | |||
// Globals | |||
let webex; | |||
let webex = undefined; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why do we have to do this?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
To fix the double initialization and browser call issue
if (checkParticipantNotInInteraction(task, this.agentId)) { | ||
if ( | ||
isParticipantInMainInteraction(task, this.agentId) || |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Aren't these functions negation of each other?
If checkParticipantNotInInteraction
is true
, isParticipantInMainInteraction
should always be false
Is my understanding correct here?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The first one is to check whether it is an interaction or not. The second one is whether it is in main interaction(mediaObj.mType === 'mainCall')
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Exactly.
So, if the first one says that the participant is not in any interaction, they are definitely not in the main interaction. Right?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There is a small difference of condition hasLeft in first method. This logic also we copied from Agent desktop.
packages/@webex/contact-center/test/unit/spec/services/task/index.ts
Outdated
Show resolved
Hide resolved
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
A few more tiny comments and we are good to go
docs/samples/contact-center/app.js
Outdated
const participantListElm = document.createElement('div'); | ||
participantListElm.id = 'participant-list'; | ||
participantListElm.style.cssText = 'margin-top:10px;padding:8px;border:1px solid #ccc;background:#f9f9f9;display:none;'; | ||
incomingDetailsElm.parentNode.appendChild(participantListElm); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This seems static again. There's no dynamic stuff here. Why not keep it in the HTML itself and just hide and show?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Addressed
function isSecondaryAgent(task) { | ||
const interaction = task.data.interaction; | ||
|
||
return ( | ||
interaction.callProcessingDetails.relationshipType === 'consult' && | ||
interaction.callProcessingDetails.parentInteractionId && | ||
interaction.callProcessingDetails.parentInteractionId !== interaction.interactionId | ||
); | ||
} | ||
|
||
function isSecondaryEpDnAgent(task) { | ||
return task.data.interaction.mediaType === 'telephony' && isSecondaryAgent(task); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What is the difference here?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We copied the logic from Agent Desktop and there is an additional condition of telephony and it might be useful when we implement conference feature in digital channel.
docs/samples/contact-center/app.js
Outdated
return interaction?.state; | ||
} | ||
|
||
function getStatus(task, agentId) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should we call it something more specific? getTaskStatus
or perhaps getConferenceStatus
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Addressed
docs/samples/contact-center/app.js
Outdated
}), | ||
consultInitiated: () => setControls({ | ||
'holdResumeElm': { hide: true, disable: false }, | ||
'muteElm': { hide: true || !isBrowser, disable: false }, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Wouldn't this hide
always be true
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Adressed
if (checkParticipantNotInInteraction(task, this.agentId)) { | ||
if ( | ||
isParticipantInMainInteraction(task, this.agentId) || |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Exactly.
So, if the first one says that the participant is not in any interaction, they are definitely not in the main interaction. Right?
COMPLETES #https://jira-eng-sjc12.cisco.com/jira/browse/CAI-7182
Vidcast Link for the MPC Feature: https://app.vidcast.io/share/c3d5e394-c931-45eb-8d76-10e1f1994b33
Transfer Conference Feature: https://app.vidcast.io/share/daf96a54-dbda-419c-9150-e9ba7aea4ca3
This pull request addresses
Implemented the Multi-Party Conference feature supporting more than three participants, along with the Conference Transfer functionality.
Conference Transfer Behavior:
An agent can initiate a transfer only during a consultation.
Scenario 1: If Agent A1 and Agent A2 are on a consultation while the customer is on hold, upon transfer, A1 leaves and A2 takes ownership of the call.
Scenario 2: If Agent A1 and Agent A3 are on a consultation while the customer and Agent A2 are already in the main conference, upon transfer, A1 leaves, A2 becomes the new owner, and A3 joins the main conference with A2 and the customer.
by making the following changes
< DESCRIBE YOUR CHANGES >
Change Type
The following scenarios were tested
< ENUMERATE TESTS PERFORMED, WHETHER MANUAL OR AUTOMATED >
The GAI Coding Policy And Copyright Annotation Best Practices
I certified that
Make sure to have followed the contributing guidelines before submitting.