Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Detecting an incoming call in Lync

Tags:

c#

lync

I'm trying to detect an incoming call in the Lync client . This is done by subscribing to ConversationManager.ConversationAdded event in the Lync client as described in this post

However, by using this method I'm not able to detect incoming calls if a conversation window with the caller is already open before the caller is calling. For instance if I'm chatting with a friend and therefore have a open conversation windows and this friend decides to call me, the ConversationAdded event is not triggered.

How would I detect incoming calls when I already have an active conversation with the caller?

Thanks, Nicklas

like image 221
Nicklas Møller Jepsen Avatar asked Feb 09 '12 08:02

Nicklas Møller Jepsen


2 Answers

You need to monitor the states of the modalities on the conversation. The two avaiable modalities are IM and AV, so you'll need to watch for state changes on these, like so:

void ConversationManager_ConversationAdded(object sender, Microsoft.Lync.Model.Conversation.ConversationManagerEventArgs e)
{
    e.Conversation.Modalities[ModalityTypes.InstantMessage].ModalityStateChanged += IMModalityStateChanged;
    e.Conversation.Modalities[ModalityTypes.AudioVideo].ModalityStateChanged += AVModalityStateChanged;
}

void IMModalityStateChanged(object sender, ModalityStateChangedEventArgs e)
{
    if (e.NewState == ModalityState.Connected)
        MessageBox.Show("IM Modality Connected");
}

void AVModalityStateChanged(object sender, ModalityStateChangedEventArgs e)
{
    if (e.NewState == ModalityState.Connected)
        MessageBox.Show("AV Modality Connected");
}

This sample is using the ConversationAdded event to wire up the event handlers for modality changes, so this will only work for conversations that are started while your application is running. To do the same for conversations that are already active before your application starts, you could add this code to your application's startup routine:

foreach (var conv in _lync.ConversationManager.Conversations)
{
    conv.Modalities[ModalityTypes.InstantMessage].ModalityStateChanged += new EventHandler<ModalityStateChangedEventArgs>(IMModalityStateChanged);
    conv.Modalities[ModalityTypes.AudioVideo].ModalityStateChanged += new EventHandler<ModalityStateChangedEventArgs>(AVModalityStateChanged);
}
like image 171
Paul Nearney Avatar answered Oct 14 '22 08:10

Paul Nearney


You should subscribe to the ModalityStateChanged event on Conversation.Modalities[ModalityTypes.AudioVideo], this will give you events when the AV modality is created or changes state.

like image 34
RasmusW Avatar answered Oct 14 '22 08:10

RasmusW