Avaya Client SDK

< Back to Package Overview

Making a MeetMe conference call through HTTPUA

Using the Client SDK, you can easily integrate the ability to join an Equinox conference call without the use of any telephony infrastructure. This is referred to as an Over the Top Call. Over the Top calls can only be outgoing calls.

To make a MeetMe conference call through HTTPUA, you must complete the following activities:

  • Retrieve iView conference token and Service Gateway URL through Unified Portal Service
  • Create a Call object and initialize the details for the call
  • Implement the call listener to monitor for call progress events
  • Implement the conference call event handlers
  • Start the call
  • End the call

Retrieve iView conference token and Service Gateway URL for MeetMe conference call.

// Create Unified Portal configuration object
UnifiedPortalConfiguration portalConfig = new UnifiedPortalConfiguration();

// Specify Unified Portal URL (mandatory)
portalConfig.ServerURL = myMeetingInfo.UnifiedPortalURL;

// Optionally, specify credential provider to sign in portal 
// and join the meeting as signed in user.
portalConfig.CredentialProvider = myAppConfig.UnifiedPortalCredentialProvider;

// Retrieve the token and other meeting details
user.UnifiedPortalService.RequestToJoinMeeting(
    portalConfig,
    myMeetingInfo.ConferenceID,
    myAppConfig.DisplayName,
    false,
    "",
    "",
    (meetingInfo, error) =>
    {
        if (error == null)
        {
            myMeetingInfo.MeetingInfoFromPortal = meetingInfo;
        }
        else
        {
            // Display error
        }
    });

Create a call object

CallCreationInfo callCreationInfo = new CallCreationInfo(
    myMeetingInfo.ConferenceID,
    myMeetingInfo.Passcode,
    myMeetingInfo.MeetingInfoFromPortal.PortalToken,
    myMeetingInfo.MeetingInfoFromPortal.UccpURL,
    myMeetingInfo.MeetingInfoFromPortal.ServiceGatewayURL,
    myMeetingInfo.UnifiedPortalURL,
    myAppConfig.DisplayName,
    myMeetingInfo.RemoteAddress,
    false);

Call call = user.CallService.CreateCall(callCreationInfo); 

Implement the call event handlers

To monitor call progress events, the Call events can be used. This events provides notification as the call state changes.

class AppCallDelegate{

    void call_Started(object sender, EventArgs e)
    {
        Call call = (Call)sender;
        // Called to report that call has started (ie, call is in progress).
        // Add code here to update the UI as appropriate.
    }

    void call_RemoteAlerting(object sender, EventArgs e)
    {
        Call call = (Call)sender;
        // Called to report that an outgoing call is ringing at the far end.
        // Add code here to update the UI as appropriate.
    }

    void call_Established(object sender, EventArgs e)
    {
        Call call = (Call)sender;
        // Called to report that an outgoing call has been established 
        // (ie, far end has answered and speechpath has been established).
        // Add code here to update the UI as appropriate.
    }

    void call_Ended(object sender, CallEndedEventArgs e)
    {
        // Called to report that call has ended.
        // Add code here to update the UI as appropriate.
    }

    void call_ConferenceStatusChanged(object sender,
                                      ConferenceStatusChangedEventArgs e)
    {
        Call call = (Call)sender;
        // Called to report that call has become a conference call 
        // (isConference = true). Add code here to update the UI as appropriate.
    }

    ...
}

You can instantiate an application call delegate (AppCallDelegate) and add that as a delegate to the call.

AppCallDelegate callDelegate = new AppCallDelegate();
call.Started += new EventHandler(callDelegate.call_Started);
call.RemoteAlerting += 
    new EventHandler(callDelegate.call_RemoteAlerting);
call.Established += new EventHandler(callDelegate.call_Established);
call.Ended += new EventHandler(callDelegate.call_Ended);
call.ConferenceStatusChanged += 
    new EventHandler(
        callDelegate.call_ConferenceStatusChanged);
...

Implement the conference call event handlers

To monitor conference events, the Conference events can be used. This events provide notification as the conference properties changes.

class AppConferenceDelegate{

    void conference_LectureModeStatusChanged(object sender,
                                             ConferencePropertyEventArgs e)
    {
        Conference conference = (Conference)sender;
        // Called to report that Lecture Mode has enabled or disabled in this
        // conference call. Add code here to update the UI as appropriate.
    }

    void conference_EntryExitToneStatusChanged(object sender,
                                               ConferencePropertyEventArgs e)
    {
        Conference conference = (Conference)sender;
        // Called to report that entry/exit tones have been enabled or disabled 
        // in this conference call. 
        // Add code here to update the UI as appropriate.
    }

    void conference_LockStatusChanged(object sender,
                                      ConferencePropertyEventArgs e)
    {
        Conference conference = (Conference)sender;
        // Called to report that the conference has been locked or unlocked.
        // Add code here to update the UI as appropriate.
    }

    void conference_PasscodeRequired(object sender, BooleanEventArg e)
    {
        Conference conference = (Conference)sender;
        // Called to report that the conference requires admission passcode.
        // Add code here to update the UI as appropriate.
    }

    void conference_ContinuationStatusChanged(object sender,
                                              ConferencePropertyEventArgs e)
    {
        Conference conference = (Conference)sender;
        // Called to report that the conference continuation 
        // (after moderator leave) has been enabled or disabled.
        // Add code here to update the UI as appropriate.
    }

    void conference_RecordingStatusChanged(object sender,
                                           ConferencePropertyEventArgs e)
    {
        Conference conference = (Conference)sender;
        // Called to report that conference recording has been started or 
        // stopped. Add code here to update the UI as appropriate.
    }

    void conference_ExternalAdmissionStatusChanged(object sender,
                                                   BooleanEventArg e)
    {
        Conference conference = (Conference)sender;
        // Called to report whether the conference requires admission request 
        // from user. Add code here to update the UI as appropriate.
    }

    void conference_PermissionToEnterLockedConfRequired(object sender,
                                                        EventArgs e)
    {
        Conference conference = (Conference)sender;
        // Called to report that the user has to request moderator for 
        // a permission to enter the conference.
        // Add code here to update the UI as appropriate.
    }

    void conference_VideoStatusChanged(object sender,
                                       ConferencePropertyEventArgs e)
    {
        Conference conference = (Conference)sender;
        // Called to report that the conference video has been enabled or 
        // disabled. Add code here to update the UI as appropriate.
    }

    void conference_SubjectChanged(object sender, StringEventArgse)
    {
        Conference conference = (Conference)sender;
        // Called to report that the conference subject has changed.
        // Add code here to update the UI as appropriate.
    }

    void conference_BrandNameChanged(object sender, StringEventArgse)
    {
        Conference conference = (Conference)sender;
        // Called to report that the conference brand name has changed.
        // Add code here to update the UI as appropriate.
    }

    void conference_LocalUserHandRaised(object sender, EventArgs e)
    {
        Conference conference = (Conference)sender;
        // Called to report that the user's hand has been raised.
        // Add code here to update the UI as appropriate.
    }

    void conference_LocalUserHandLowered(object sender, EventArgs e)
    {
        Conference conference = (Conference)sender;
        // Called to report that the user's hand has been lowered.
        // Add code here to update the UI as appropriate.
    }

    void conference_CapabilitiesChanged(object sender, EventArgs e)
    {
        Conference conference = (Conference)sender;
        // Called to report that some of conference capabilities have changed.
        // Add code here to update the UI as appropriate.
    }

    void conference_WaitingToStart(object sender, EventArgs e)
    {
        Conference conference = (Conference)sender;
        // Called to report that the conference has not yet been started 
        // by moderator. Add code here to update the UI as appropriate.
    }

    void conference_Started(object sender, EventArgs e)
    {
        Conference conference = (Conference)sender;
        // Called to report that the conference has been started.
        // Add code here to update the UI as appropriate.
    }

    void conference_EndTimeChanged(object sender, ConferenceEndTimeEventArg e)
    {
        Conference conference = (Conference)sender;
        // Called to report that the conference scheduled end time has been 
        // changed. Add code here to update the UI as appropriate.
    }

    void conference_ServiceUnavailable(object sender,
                                       ConferenceConnectionFailureEventArgs e)
    {
        Conference conference = (Conference)sender;
        // Called to report that conferencing server connection has been lost.
        // Add code here to update the UI as appropriate.
    }

    void conference_VideoChannelReceiveStatusChanged(object sender, 
        VideoChannelReceiveStatusEventArgs e)
    {
        Conference conference = (Conference)sender;
        // Called to report that conferencing server has started or stopped
        // streaming video. Add code here to update the UI as appropriate.
    }

    void conference_EncryptionStatusChanged(object sender,
        ConferenceEncryptionStatusEventArg e)
    {
        Conference conference = (Conference)sender;
        // Called to report that overall media encryption status of the 
        // conference call has changed.
        // Add code here to update the UI as appropriate.
    }

    void conference_StreamingStatusChanged(object sender,
                                           ConferenceStreamingStatusEventArg e)
    {
        Conference conference = (Conference)sender;
        // Called to report that the conference streaming status has changed.
        // Add code here to update the UI as appropriate.
    }

    void conference_ActiveVideoParticipantChanged(object sender,
                                                  ParticipantEventArgs e)
    {
        Conference conference = (Conference)sender;
        // Called to report that active video participant has changed in the 
        // conference. Add code here to update the UI as appropriate.
    }

    ...
}

You can instantiate an application conference delegate (AppConferenceDelegate) and add that as a delegate to the call even before the call has been started and become a conference call.

AppConferenceDelegate conferenceDelegate = new AppConferenceDelegate();

call.Conference.LectureModeStatusChanged += 
    new EventHandler(
        conferenceDelegate.conference_LectureModeStatusChanged);
call.Conference.EntryExitToneStatusChanged += 
    new EventHandler(
        conferenceDelegate.conference_EntryExitToneStatusChanged);
call.Conference.LockStatusChanged += 
    new EventHandler(
        conferenceDelegate.conference_LockStatusChanged);
call.Conference.PasscodeRequired += 
    new EventHandler(
        conferenceDelegate.conference_PasscodeRequired);
call.Conference.ContinuationStatusChanged += 
    new EventHandler(
        conferenceDelegate.conference_ContinuationStatusChanged);
call.Conference.RecordingStatusChanged += 
    new EventHandler(
        conferenceDelegate.conference_RecordingStatusChanged);
call.Conference.ExternalAdmissionStatusChanged += 
    new EventHandler(
        conferenceDelegate.conference_ExternalAdmissionStatusChanged);
call.Conference.PermissionToEnterLockedConferenceRequired += 
    new EventHandler(
        conferenceDelegate.conference_PermissionToEnterLockedConferenceRequired);
call.Conference.VideoStatusChanged += 
    new EventHandler(
        conferenceDelegate.conference_VideoStatusChanged);
call.Conference.SubjectChanged += 
    new EventHandler(
        conferenceDelegate.conference_SubjectChanged);
call.Conference.BrandNameChanged += 
    new EventHandler(
        conferenceDelegate.conference_BrandNameChanged);
call.Conference.LocalUserHandRaised += 
    new EventHandler(conferenceDelegate.conference_LocalUserHandRaised);
call.Conference.LocalUserHandLowered += 
    new EventHandler(conferenceDelegate.conference_LocalUserHandLowered);
call.Conference.CapabilitiesChanged += 
    new EventHandler(conferenceDelegate.conference_CapabilitiesChanged);
call.Conference.WaitingToStart += 
    new EventHandler(conferenceDelegate.conference_WaitingToStart);
call.Conference.Started += 
    new EventHandler(conferenceDelegate.conference_Started);
call.Conference.EndTimeChanged += 
    new EventHandler(
        conferenceDelegate.conference_EndTimeChanged);
call.Conference.ServiceUnavailable += 
    new EventHandler(
        conferenceDelegate.conference_ServiceUnavailable);
call.Conference.VideoChannelReceiveStatusChanged += 
    new EventHandler(
        conferenceDelegate.conference_VideoChannelReceiveStatusChanged);
call.Conference.EncryptionStatusChanged += 
    new EventHandler(
        conferenceDelegate.conference_EncryptionStatusChanged);
call.Conference.StreamingStatusChanged += 
    new EventHandler(
        conferenceDelegate.conference_StreamingStatusChanged);
call.Conference.ActiveVideoParticipantChanged += 
    new EventHandler(
        conferenceDelegate.conference_ActiveVideoParticipantChanged);
...

Start the call

Once a call delegate has been added, you can call the Start() method on the Call object. Call progress events will be provided through the AppCallDelegate methods.

call.Start();

End the call

To terminate the call, you can call the End() method on the Call object.

call.End();

The call_Ended() callback event is sent to the call delegate when the call has been ended. You can use this event to update the UI of your application.