Получение Lync Присутствия

Мое требование - мне нужно создать службу Windows, которая получает статус присутствия Lync (Доступен, Занят, Не беспокоить....) каждого пользователя в каталоге Active.

Я гуглил и обнаружил, что ниже 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 - API клиента Unified Communications. Это работает так, что вы предоставляете ему список пользователей, за которым вы хотите следить за состоянием, и он будет затем перезванивать на событие каждый раз, когда их присутствие изменяется. Вы получаете событие присутствия, как только вы начинаете подписку, так что вы можете отказаться от подписки, если вы не хотите получать текущее уведомление.

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

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

subscriptions.Add(new RemotePresentitySubscriptionTarget("sip:first_user@domain));
subscriptions.Add(new RemotePresentitySubscriptionTarget("sip:second_user@domain));
...
subscriptions.Add(new RemotePresentitySubscriptionTarget("sip:nth_user@domain));

_remotePresenceView.StartSubscribingToPresentities(subscriptions);

Есть несколько советов, хитростей и хитростей при использовании Remote Presence View: посмотрите MSDN здесь.

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

                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
        {

        }
    }

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

Другие вопросы по тегам