Escalating a Two-Party Conversation to a Conference

An application can escalate a two-party IM conversation to a conference conversation only after the conference has been successfully joined, and the State of the conference session is Connected. The escalation process involves moving the existing IM calls into the Multipoint Control Unit (MCU) session, requesting that the remote participant from the existing two-party IM conversation join the ad hoc conference, and terminating the two-party IM session with the remote participant. If the escalation is unsuccessful, the conversation reverts to a two-party call.

Important

A two-party audio/video conversation cannot be escalated to a conference. The audio/video provider that is supplied with Microsoft Unified Communications Managed API (UCMA) 3.0 does not support escalation of this type. If your application must enable the escalation of an audio/video conversation to a conference, you must provide a custom subclass of the MediaProvider abstract class. For more information, see Extending the MediaProvider Class and the other topics in the Extending the UCMA Platform section.

The following code demonstrates escalating an IM conversation to a conference.

conversation.BeginEscalateToConference(Conference_EscalationCompleted, conferenceSession);

Important

Before the conversation can be escalated to a conference, a ConferenceSession instance must be created, and this instance must be joined to the conference by a call to the BeginJoin method on the ConferenceSession instance. For more information, see Joining a Conference.

When an application is in a two-party IM conversation, a remote participant can escalate this two-party conversation to a conference. When this happens, the application receives an incoming escalation request. To be able to accept and complete the escalation operation, the application must join the conference and escalate the two-party conversation to a multi-party conversation.

The following example shows how to register to receive notifications of incoming escalation requests. In this example, the application registers a handler for the EscalateToConferenceRequested event.

conversation.EscalateToConferenceRequested += this.Conversation_EscalateToConferenceRequested;

The following code demonstrates responding to an incoming escalation request.

void Conversation_EscalateToConferenceRequested(object sender, EscalateToConferenceRequestedEventArgs e)
{
  Conversation conversation = sender as Conversation;
 
  // The conference session of the escalating conversation must be joined.
  conversation.ConferenceSession.BeginJoin(default(ConferenceJoinOptions), ConferenceSessionJoinCompleted, conversation.ConferenceSession);
}

private void ConferenceSessionJoinCompleted(IAsyncResult ar)
{
  ConferenceSession confSession = ar.AsyncState as ConferenceSession;
  confSession.EndJoin(ar);
 
  // BeginEscalateToConference is called here to indicate to the endpoint that requested 
  // the escalation, that the recipient has completed the escalation procedure.
  confSession.Conversation.BeginEscalateToConference(EscalateToConferenceCompleted, confSession.Conversation);
}
 
private void EscalateToConferenceCompleted (IAsyncResult ar)
{
  Conversation conversation = ar.AsyncState as Conversation;
  conversation.EndEscalateToConference(ar);
}