我有一个使用Lync 2013的应用程序。
我的应用程序与我的手机相连,当我接到一个电话时,我的活动变得繁忙(ContactAvilability.Busy),当我终止这个电话时,我想将我的存在恢复到它的原始状态(可用或不干扰.)。
我的问题是,我如何保存我的实际状态,并返回到它,当我完成了这个电话??
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
}
}谢谢
发布于 2017-11-15 21:49:53
要保存先前的存在:
_previousPresence = client.Self.Contact.GetContactInformation(new[]
{
ContactInformationType.Availability,
ContactInformationType.ActivityId,
ContactInformationType.CustomActivity
});恢复有点困难,因为“自定义”活动,我们只得到自定义活动本地化字符串,而不是自定义活动id。此外,无法还原“未知”自定义活动(即客户端的自定义活动xml文件中未定义的自定义活动存在,这可能发生在UCMA端点或另一个客户端点具有未在此客户端上定义的自定义活动设置的情况下)。在所有情况下,保存和恢复存在的唯一方法是使用UCMA应用程序(服务器或客户端),它使您能够更多地控制如何设置存在,即对自定义活动存在类型的细粒度控制。
从Lync客户端恢复存在的示例:
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,而只返回来自自定义活动的本地化字符串。
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客户端呼叫时自动为您所做的事情。
// 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);https://stackoverflow.com/questions/47311900
复制相似问题