Получение пользовательского присутствия с помощью UCMA? - PullRequest
0 голосов
/ 26 сентября 2019

Мне просто нужно указать адрес электронной почты, и протокол ucma отправляет информацию о присутствии пользователя из Skype для бизнеса, используя C #.

У кого-нибудь есть советы о том, как получить присутствие пользователя в ucma?Учебники по MSDN не ясны по этому вопросу.

Это мой текущий код

List<string> targets = new List<string>();
targets.Add("sip:fry@nnylync.info");
_endpoint.PresenceServices.BeginPresenceQuery(targets, new string[] {"state"}, null, ar =>
{
    List<RemotePresentityNotification> presence = new List<RemotePresentityNotification>(_endpoint.PresenceServices.EndPresenceQuery(ar));
    foreach (RemotePresentityNotification rpn in presence)
    {
         Console.WriteLine(rpn.PresentityUri + " is " + rpn.AggregatedPresenceState.EndpointLocation);
    }
}, null);

1 Ответ

0 голосов
/ 26 сентября 2019

Ваш код выглядит нормально.Единственное, что я бы сказал, это то, что он возвращает список состояния присутствия для всех конечных точек, зарегистрированных для адреса sip.Обычно вы хотите использовать агрегированное присутствие, которое представляет собой общее присутствие, используемое и отображаемое всеми приложениями Skype.

Таким образом, вы обычно используете:

  • присутствие.AggregatedPresenceState.Availability - это базовая доступность
  • присутствие .AggregatedPresenceState.Activity.ActivityToken - это хорошо известное подсостояние базовой доступности, такое как "in-a-meeting","on-the-phone" и т. д.
  • sence.AggregatedPresenceState.Activity.CustomTokens - это список строк локали с пользовательскими состояниями присутствия, которые обычно определяются пользовательской настройкой XML присутствия вSkype для пользователя.

Там также много другой информации, включая всю другую информацию, которую пользователь может установить, например, местоположение ( EndpointLocation ) и примечание ()PersonalNote ).

Также используется параметр queryResultHandler (в вашем примере вы передаете null, что нормально).Это вызывается, когда результат присутствия становится доступным.Это полезно, когда вы задаете запросу список sip-адресов из более чем одного.UserCallback вызывается, когда приходят все результаты присутствия (т. Е. Вся операция завершена), что может занять некоторое время, и при любых сбоях произойдет сбой всего вызова при вызове EndPresenceQuery.QueryResultHandler будет вызываться несколько раз при получении каждого успешного результата присутствия, поэтому вы получите свои результаты быстрее и увидите все успешные результаты, даже если некоторые из них могут завершиться с ошибкой и вызвать выброс EndPresenceQuery.

Кроме того, что выМожно также подписаться на конечную точку для изменений присутствия, если вы хотите быть в курсе того, когда конечная точка изменяет присутствие.Вы должны быть осторожны с подпиской, поскольку существуют ограничения на количество конечных точек, которые могут подписаться на них.Здесь вы попадаете в типы подписки Polling и Subscribeed.В зависимости от типа приложения, которое вы пишете, зависит от того, какой тип подписки вам нужен.Обычно вы хотите подписаться только на конечные точки, которые вы отображаете / используете в реальном времени.

...