【问题标题】:Getting User Presence using UCMA?使用 UCMA 获得用户状态?
【发布时间】:2019-09-26 02:52:09
【问题描述】:

我只需要提供一个电子邮件地址,然后让 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-business skypedeveloper ucma ucwa


    【解决方案1】:

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

    所以你通常会使用:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多