首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ContactAvailability Lync

ContactAvailability Lync
EN

Stack Overflow用户
提问于 2017-11-15 15:56:32
回答 1查看 252关注 0票数 1

我有一个使用Lync 2013的应用程序。

我的应用程序与我的手机相连,当我接到一个电话时,我的活动变得繁忙(ContactAvilability.Busy),当我终止这个电话时,我想将我的存在恢复到它的原始状态(可用或不干扰.)。

我的问题是,我如何保存我的实际状态,并返回到它,当我完成了这个电话??

代码语言:javascript
复制
public static void notify(Call call)
        {
            // How to save my current state
            if (call.state == Answer)
            {
                client.Self.BeginPublishContactInformation(
                new Dictionary<PublishableContactInformationType, object>() {
                {    PublishableContactInformationType.Availability, ContactAvailability.Busy }
                }, null, null);
            }
            else 
            {
                // where i want to return to my original state 
            }
        }

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-15 21:49:53

要保存先前的存在:

代码语言:javascript
复制
_previousPresence = client.Self.Contact.GetContactInformation(new[]
{
    ContactInformationType.Availability,
    ContactInformationType.ActivityId,
    ContactInformationType.CustomActivity
});

恢复有点困难,因为“自定义”活动,我们只得到自定义活动本地化字符串,而不是自定义活动id。此外,无法还原“未知”自定义活动(即客户端的自定义活动xml文件中未定义的自定义活动存在,这可能发生在UCMA端点或另一个客户端点具有未在此客户端上定义的自定义活动设置的情况下)。在所有情况下,保存和恢复存在的唯一方法是使用UCMA应用程序(服务器或客户端),它使您能够更多地控制如何设置存在,即对自定义活动存在类型的细粒度控制。

从Lync客户端恢复存在的示例:

代码语言:javascript
复制
var publishData = new Dictionary<PublishableContactInformationType, object>
{
    {PublishableContactInformationType.Availability, _previousPresence[ContactInformationType.Availability]},
    {PublishableContactInformationType.ActivityId, _previousPresence[ContactInformationType.ActivityId]}
};

var customId = FindCustomActivityId(client,
    (ContactAvailability)_previousPresence[ContactInformationType.Availability],
    ((List<object>)_previousPresence[ContactInformationType.CustomActivity]).Cast<LocaleString>().ToList());
if (customId != null)
{
    publishData.Add(PublishableContactInformationType.CustomActivityId, customId);
}

await Task.Factory.FromAsync(client.Self.BeginPublishContactInformation(publishData, null, null), client.Self.EndPublishContactInformation);

FindCustomActiviyId有点“黑”,因为它从预感存在信息中执行字符串比较搜索不会返回自定义活动id,而只返回来自自定义活动的本地化字符串。

代码语言:javascript
复制
private static object FindCustomActivityId(Client client, ContactAvailability availability, IReadOnlyCollection<LocaleString> customActivities)
{
    var currentLcid = System.Globalization.CultureInfo.CurrentUICulture.LCID;
    var customStates = client.Self.GetPublishableCustomAvailabilityStates(currentLcid);

    if (customStates == null || !customStates.Any())
    {
        return null;
    }

    var state = customStates.FirstOrDefault(cs => customActivities.Any(ca => cs.Availability == availability && string.Equals(ca.Value, cs.Activity)));

    return state?.Id;
}

您也可以考虑重叠调用。即你的电话和林克的电话重叠。在这些情况下,Lync客户端可能已经处于"OnThePhone“繁忙状态。或者当你接听其他电话系统的电话后,你的出现会改变为"OnThePhone“。

此外,您也可能希望将繁忙的子状态设置为OnThePhone,以便让其他Lync用户知道您正在打电话。这就是Lync客户端在响应Lync客户端呼叫时自动为您所做的事情。

代码语言:javascript
复制
// publish on-the-phone presence
var publishData = new Dictionary<PublishableContactInformationType, object>
{
    {PublishableContactInformationType.Availability, ContactAvailability.Busy},
    {PublishableContactInformationType.ActivityId, "on-the-phone"}
};
await Task.Factory.FromAsync(client.Self.BeginPublishContactInformation(publishData, null, null), client.Self.EndPublishContactInformation);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47311900

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档