2013-05-27 3 views
2

Мое требование: мне нужно создать службу Windows, которая получает статус присутствия Lync (доступный, занятый, не беспокоить ....) каждого пользователя в каталоге Active.Получение присутствия Lync

Я нашел googled и обнаружил, что ниже SDK могут получить Lync Presence. Lync Client 2010 SDK, Управляемый API унифицированных коммуникаций, Lync Server 2010 SDK, API клиента унифицированных коммуникаций.

Пожалуйста, предложите лучший SDK среди них, чтобы достичь моих требований.

Спасибо заранее.

ответ

2

Там хорошая рецензия каждого SDK и где вы будете использовать их здесь: http://www.codelync.com/an-overview-of-the-lync-apis/

За то, что вы хотите достичь, я бы рекомендовал использовать UCMA - в Unified Communications Client API. То, как это работает, дает вам список пользователей, которым вы хотите контролировать статус, и затем будет переадресовывать события каждый раз, когда их присутствие меняется. Вы получаете событие присутствия, как только начинаете подписку, поэтому вы можете отказаться от подписки, если вы не хотите получать текущее уведомление.

Пример подписки на множество пользователей могут быть:

var _remotePresenceView = new RemotePresenceView(_endpoint); 
_remotePresenceView.PresenceNotificationReceived += _remotePresenceView_PresenceNotificationReceived; 
List<RemotePresentitySubscriptionTarget> subscriptions = new List<RemotePresentitySubscriptionTarget>(); 

subscriptions.Add(new RemotePresentitySubscriptionTarget("sip:[email protected])); 
subscriptions.Add(new RemotePresentitySubscriptionTarget("sip:[email protected])); 
... 
subscriptions.Add(new RemotePresentitySubscriptionTarget("sip:[email protected])); 

_remotePresenceView.StartSubscribingToPresentities(subscriptions); 

Там есть несколько советов, трюков и подводных камней при использовании удаленного View Presence: проверить MSDN here.

+0

Том благодарит за ответ. В этой ссылке http://social.msdn.microsoft.com/Forums/en-US/ucmanagedsdk/thread/b5329594-944b-4cfd-a517-7242328547d2 упоминается, что в настоящее время UCMA не поддерживает Office365-Lync онлайн ... поэтому, пожалуйста, сообщите мне, что мне нужно сделать для Lync онлайн. – user369287

+0

Я не думаю, что вы сейчас делаете что-то вроде Office365. Возможно, вы сможете использовать клиентский SDK, но вы ограничены в контактах, в которых вы можете получить присутствие, возможно, только в списке контактов. Боюсь, у меня нет большого опыта работы с O365. –

+0

Пытаться использовать SDK Lync Client из контекста службы Windows немного проблематично ... Клиент Lync полагается на активный менеджер рабочего стола, поэтому вы часто увидите процесс Lync.exe, который вы используете через SDK завершается, если менеджер рабочего стола уходит, т.е. пользователи выходят из ОС. Это, насколько я знаю, единственный вариант для Office 365, пока Microsoft не приступит к выпуску своего официального API. – EricRRichards

0

Я также попытался найти состояние присутствия Пользователя и выйти с приведенным ниже кодом для достижения этого требования.

   string _transferUserURI="pass your sipaddress"; 
       RemotePresenceView _RemotePresence; 

       RemotePresenceViewSettings settings = new RemotePresenceViewSettings(); 
       settings.SubscriptionMode = RemotePresenceViewSubscriptionMode.Default; 
       settings.PollingInterval = new TimeSpan(0, 0, 10); 
       _RemotePresence = new RemotePresenceView(_appEndpoint, settings); 
       _RemotePresence.PresenceNotificationReceived += new EventHandler<RemotePresentitiesNotificationEventArgs>(_RemotePresence_PresenceNotificationReceived); 
       //_RemotePresence.SubscriptionStateChanged += new EventHandler<RemoteSubscriptionStateChangedEventArgs>(_RemotePresence_SubscriptionStateChanged); 

       RemotePresentitySubscriptionTarget target = new RemotePresentitySubscriptionTarget(_transferUserURI); 
       List<RemotePresentitySubscriptionTarget> targets = new List<RemotePresentitySubscriptionTarget>() { target }; 
       _RemotePresence.StartSubscribingToPresentities(targets); 

и _RemotePresence_PresenceNotificationReceived событие

 void _RemotePresence_PresenceNotificationReceived(object sender, RemotePresentitiesNotificationEventArgs e) 
    { 
     try 
     { 
      // Extract the RemotePresenceView that received the notification. 
      RemotePresenceView view = sender as RemotePresenceView; 
      // A RemotePresentityNotification will contain all the 
      // categories for one user; Notifications can contain notifications 
      // for multiple users. 


      foreach (RemotePresentityNotification notification in e.Notifications) 
      { 
       Console.WriteLine("\nView: " + view.ApplicationContext 
        + " Received a Notification for user " 
        + notification.PresentityUri + "."); 

       // If a category on notification is null, the category 
       // was not present in the notification. This means there were no 
       // changes in that category. 
       if (notification.AggregatedPresenceState != null) 
       { 
        Console.WriteLine("Aggregate State = " + notification.AggregatedPresenceState.Availability + "."); 

        string Availblity = notification.AggregatedPresenceState.Availability.ToString(); 
       } 

       if (notification.PersonalNote != null) 
       { 
        Console.WriteLine("PersonalNote: " + notification.PersonalNote.Message + "."); 
       } 

       if (notification.ContactCard != null) 
       { 
        // A ContactCard contains many properties; only display 
        // some. 
        ContactCard contactCard = notification.ContactCard; 
        Console.WriteLine("ContactCard Company: " + contactCard.Company + "."); 
        Console.WriteLine("ContactCard DisplayName: " + contactCard.DisplayName + "."); 
        Console.WriteLine("ContactCard EmailAddress: " + contactCard.EmailAddress + "."); 
       } 
      } 
     } 
     catch 
     { 

     } 
    } 

Я надеюсь, что это был ответ, который вы ищете в противном случае поправьте меня, если я был неправ.

Смежные вопросы