1

我做了一个小应用程序,当我的一个联系人的可用性发生变化时,我可以得到更新。目前我只记录这个。

我在这里找到了一个很好的资源:https ://rcosic.wordpress.com/2011/11/17/availability-presence-in-lync-client/

基本上建议如下:

//Register to a contact
Contact contactByUri = _lyncClient.ContactManager.GetContactByUri(user.UserUri);
contactByUri.ContactInformationChanged += new EventHandler(Self_ContactInformationChanged);

void Self_ContactInformationChanged(object sender, ContactInformationChangedEventArgs e)
{
    Contact self = sender as Contact;

    // has user changed his availability (therefore, his presence status)?
    if (e.ChangedContactInformation.Contains(ContactInformationType.Availability))
    {
        ContactAvailability availability = (ContactAvailability)self.GetContactInformation(ContactInformationType.Availability);
        string activity = (string)self.GetContactInformation(ContactInformationType.Activity);
        OnAvailabilityChanged(availability, activity);
    }
}

可用性为以下之一:

Invalid (-1),
None (0) – Do not use this enumerator. This flag indicates that the cotact state is unspecified.,
Free (3500) – A flag indicating that the contact is available,
FreeIdle (5000) – Contact is free but inactive,
Busy (6500) – A flag indicating that the contact is busy and inactive,
BusyIdle (7500) – Contact is busy but inactive,
DoNotDisturb (9500) – A flag indicating that the contact does not want to be disturbed,
TemporarilyAway (12500) – A flag indicating that the contact is temporarily away,
Away (15500) – A flag indicating that the contact is away,
Offline (18500) – A flag indicating that the contact is signed out.

大多数情况下,一切正常,但有些日子,我收到ContactAvailability= None

我想知道为什么,如果我能做些什么来解决这个问题?(比如重置客户端 sdk,...)?

4

2 回答 2

1

我从来没有弄清楚为什么 Lync 有时无法报告真正的联系可用性的好方法或原因。我有时也会在 UCMA 代码中看到这一点,我可以在其中订阅用户的状态更新,并且在回调事件中,我收到他们的 AggregatePresenceState 为空的通知。

我还没有深入研究它,但也许将 Lync 客户端日志记录设置为最大详细程度并使用 Snooper 工具或使用 Wireshark 检查跟踪会显示收到的损坏的 SIP NOTIFY 消息?

此外,值得注意的是,SDK 中的 Microsoft 示例代码用于将原始整数 ContactInformationType.Availability 值解析为 ContactAvailability 枚举值 ( https://msdn.microsoft.com/en-us/library/office/jj937284.aspx ) 不符合他们自己的规范 ( https://msdn.microsoft.com/en-us/library/cc431501(v=office.12).aspx ) 示例代码导致无效的 0 可用性值被解释为在线。

于 2015-09-21T19:04:14.247 回答
0

你可以试试这个。

 List < ContactInformationType > contactInformationList = new List<ContactInformationType>();
 //contactInformationList.Add(ContactInformationType.Activity);
 contactInformationList.Add(ContactInformationType.Availability);
// contactInformationList.Add(ContactInformationType.CapabilityString);              
 ContactSubscription contactSubscription = 
LyncClient.GetClient().ContactManager.CreateSubscription();

并添加您要订阅的联系人

contactSubscription.AddContact(contact);                         
contactSubscription.Subscribe(ContactSubscriptionRefreshRate.High,contactInformationList);

然后尝试使用

contact.GetContactInformation(ContactInformationType.DisplayName).ToString()+"   "+ contact.GetContactInformation(ContactInformationType.Availability).ToString();
于 2016-08-04T10:03:37.940 回答