使用 UCMA 获取用户状态?

Getting User Presence using UCMA?

我只需要提供一个电子邮件地址,然后让 ucma 协议使用 C# 从 Skype for business 发回用户的状态。

有没有人有一些关于如何在 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);

您的代码看起来不错。我唯一想说的是,它正在返回为 sip 地址注册的所有端点的存在状态列表。您通常想要使用的是聚合状态,即所有 Skype 应用程序使用和显示的整体状态。

所以你通常会使用:

  • presence.AggregatedPresenceState.Availability 是基本可用性
  • presence.AggregatedPresenceState.Activity.ActivityToken 是众所周知的基础可用性子状态,如 "in-a-meeting"、"on-the-phone" 等
  • presence.AggregatedPresenceState.Activity.CustomTokens 是自定义在线状态的语言环境字符串列表,通常由用户在 Skype 中的自定义在线状态 xml 设置定义。

那里还有很多其他信息,包括用户可以设置的所有其他信息,如位置 (EndpointLocation) 和备注 (PersonalNote).

另外,queryResultHandler 参数的用途是什么(您在示例中传入 null,这很好)。当存在结果可用时调用此方法。当您向查询提供一个以上的 sip 地址列表时,这很有用。 userCallback 在所有在线状态结果都进来时被调用(即整个操作完成),这可能需要一段时间,并且任何失败都会使对 EndPresenceQuery 的整个调用失败。当每个成功的在线结果出现时,queryResultHandler 将被调用多次,因此您可以更快地获得结果,并且您会看到所有成功的结果,即使有些可能会失败并导致 EndPresenceQuery 抛出。

除此之外,如果您想了解端点更改状态的时间,您还可以订阅端点以获取状态更改。您必须小心订阅,因为端点可以订阅的数量是有限的。这是您进入 Polling 和 Subscribed 订阅类型的地方。根据您正在编写的应用程序类型,取决于您需要哪种类型的订阅。通常,您只想订阅当时直播的端点 displaying/using。