Обнаружение входящего звонка в Lync - PullRequest
6 голосов
/ 09 февраля 2012

Я пытаюсь обнаружить входящий вызов в клиенте Lync.Это можно сделать, подписавшись на событие ConversationManager.ConversationAdded в клиенте Lync, как описано в этом сообщении

Однако, используя этот метод, я не могу обнаружить входящие вызовы, если окно разговорас вызывающим абонентом уже открыт до вызова вызывающего абонента.Например, если я общаюсь с другом и поэтому у него открыты окна разговора, и этот друг решает позвонить мне, событие ConversationAdded не инициируется.

Как я могу обнаружить входящие вызовы, когда у меня уже есть активныйРазговор с абонентом?

Спасибо, Никлас

Ответы [ 2 ]

8 голосов
/ 09 февраля 2012

Вам необходимо следить за состояниями модальности в разговоре.Две доступные модальности - IM и AV, поэтому вам нужно следить за изменениями состояния, например:

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");
}

В этом примере используется событие ConversationAdded для подключения обработчиков событий для изменений модальности., так что это будет работать только для разговоров, которые запускаются во время работы вашего приложения.Чтобы сделать то же самое для разговоров, которые уже активны до запуска вашего приложения, вы можете добавить этот код в процедуру запуска вашего приложения:

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);
}
5 голосов
/ 09 февраля 2012

Вы должны подписаться на событие ModalityStateChanged на Conversation.Modalities [ModalityTypes.AudioVideo], это даст вам события, когда модальность AV создается или изменяет состояние.

...