首页 > 解决方案 > 使用 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);

标签: c#skype-for-businessskypedeveloperucmaucwa

解决方案


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

所以你通常会使用:

  • Presence.AggregatedPresenceState.Availability是基本可用性
  • Presence.AggregatedPresenceState.Activity.ActivityToken是众所周知的基本可用性子状态,如“会议中”、“电话中”等。
  • Presence.AggregatedPresenceState.Activity.CustomTokens是自定义存在状态的区域设置字符串列表,它通常由用户在 Skype 中的自定义存在 xml 设置定义。

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

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

除此之外,如果您想在端点更改状态时保持最新状态,您还可以订阅端点以进行状态更改。您必须小心订阅,因为端点可以订阅它们的数量是有限制的。这是您进入轮询和订阅的订阅类型的地方。根据您编写的应用程序类型,取决于您需要的订阅类型。通常,您只想订阅您当时正在显示/使用的端点。


推荐阅读