Migrate Multiparty and Transfer Calls

Salesforce Voice with Partner Telephony supports four multiparty patterns.

UI ButtonPatternSDK Entry Point
Blind Transfer (when hasBlindTransfer capability is enabled)Rep dials target, drops immediately.addParticipant(contact, call, isBlindTransfer=true)
New CallRep dials target, stays to announce, then drops.addParticipant(contact, call, isBlindTransfer=false)
New Call (when canConsult capability is enabled)Rep dials a private leg while the original call is on a type of hold without music.dial(contact, new DialOptions({ isConsultCall: true }))
Add CallerA new participant is immediately merged.addParticipant(contact, call, isBlindTransfer=false) with call.callAttributes.isAutoMergeOn: true

The UI controls are gated by capability flags returned from getVoiceCapabilities(). The Blind Transfer button only appears when hasBlindTransfer: true. The consult variant of New Call appears only when canConsult: true. If you don’t enable a capability, the UI control doesn’t render.

Each call leg gets its own new VoiceCall record (0LQ...), created server-side before publishing the leg’s CALL_STARTED. Set parentVoiceCallId to link the child leg back to the parent.

The framework sends ADD_PARTICIPANT with isBlindTransfer=true. Your connector adds the new participant on the backend and returns. The framework automatically fires HANGUP for the original call. You don’t publish it yourself.

The framework sends ADD_PARTICIPANT but isBlindTransfer=false. The rep stays to announce the transfer, then manually ends their own leg. When the rep drops, the framework fires PARTICIPANT_REMOVED (not HANGUP).

The rep dials a private second leg while the original call is held. The framework sends DIAL with isConsultCall: true. Then there are three options for what happens next.

Rep ActionConnector MethodEvent Framework Fires
Merge all into conferenceconference(calls)PARTICIPANTS_CONFERENCED
Swap which leg is activeswap(call1, call2)PARTICIPANTS_SWAPPED
End consult, resume originalendCall(call)HANGUP for consult leg only

The new participant is immediately merged into a live conference. Set isAutoMergeOn: true in PhoneCallAttributes of the ParticipantResult so Salesforce knows to suppress the hold button for that leg.