Lync SDK 2013 从来电中获取电话号码
Lync SDK 2013 get phonenumber from incoming call
所以当有人打电话给我时,我想得到他的phone号码。
Contact inviter = conversation.Properties[ConversationProperty.Inviter] as Contact; // The person that is calling
ContactEndpoint inviterContactEndpoint = inviter.Settings[ContactSetting.DefaultContactEndpoint] as ContactEndpoint;
如何获取?
使用这个
string phoneNumber = inviterContactEndpoint.Uri;
returns 我从 Skype 到 Skype
从 phone 到 Skype
我也试过使用
inviter.GetContactInformation(ContactInformationType);
但是ContactInformationType
没有phone号码属性。
您使用 GetContactInformation 方法获取所需的 ContactEndpoint objects. Now you can go through the list and find the phone number type 列表。
例如
var contactEndpoints = (Contact.GetContactInformation(ContactInformationType.ContactEndpoints) as List<object> ?? new List<object>()).Select(_ => _ as ContactEndpoint).Where(_ => _ != null);
foreach (var contactEndpoint in contactEndpoints)
{
switch (contactEndpoint.Type)
{
case ContactEndpointType.WorkPhone:
break;
case ContactEndpointType.MobilePhone:
break;
case ContactEndpointType.HomePhone:
break;
case ContactEndpointType.OtherPhone:
break;
case ContactEndpointType.Lync:
break;
case ContactEndpointType.VoiceMail:
break;
case ContactEndpointType.Invalid:
break;
default:
throw new ArgumentOutOfRangeException();
}
}
现在您将遇到的问题是,对于非缓存联系人,ContactInformationType.ContactEndpoints 将 return 为 null(或空列表,我忘了是哪个)。
所以你需要明白获取这些信息不会同步发生。如果你真的想要这个信息,你需要请求它,它会出现在联系人对象的事件更新中。为此,您需要为所需的详细信息创建联系人订阅,然后为特定联系人订阅订阅。
在应用程序启动时使用客户端 ContactManager 设置订阅:
_contactSubscription = _client.ContactManager.CreateSubscription();
_contactSubscription.Subscribe(ContactSubscriptionRefreshRate.High,
new[]
{
ContactInformationType.ContactEndpoints
});
}
catch (Exception e)
{
Log.WriteLine(e);
_mediator.ClientComConnectionDead();
}
}
设置联系人并订阅联系人更改:
contact.ContactInformationChanged += ContactOnContactInformationChanged;
_contactSubscription.AddContact(contact);
处理更新的联系信息:
private void ContactOnContactInformationChanged(object sender, ContactInformationChangedEventArgs e)
{
if (e.ChangedContactInformation.Any(_ => _ == ContactInformationType.ContactEndpoints))
{
var contactEndpoints = (Contact.GetContactInformation(ContactInformationType.ContactEndpoints) as List<object> ?? new List<object>()).Select(_ => _ as ContactEndpoint).Where(_ => _ != null);
foreach (var contactEndpoint in contactEndpoints)
{
switch (contactEndpoint.Type)
{
case ContactEndpointType.WorkPhone:
break;
case ContactEndpointType.MobilePhone:
break;
case ContactEndpointType.HomePhone:
break;
case ContactEndpointType.OtherPhone:
break;
case ContactEndpointType.Lync:
break;
case ContactEndpointType.VoiceMail:
break;
case ContactEndpointType.Invalid:
break;
default:
throw new ArgumentOutOfRangeException();
}
}
}
}
完成联系人后,您需要摘下并清理:
contact.ContactInformationChanged -= ContactOnContactInformationChanged;
_contactSubscription.RemoveContact(contact);
完成订阅后,您需要在应用程序清理时取消订阅:
_contactSubscription.Unsubscribe();
联系人更新可以随时进行,也可以多次进行,或者如果没有联系人端点则可能根本不更新。后端是 AD 联系信息,因此如果 AD 联系信息更新,您将收到已订阅信息的更新。
这个界面并不是真正用于询问联系信息和得到答复,它更多的是用于连接用户界面元素,以便它们可以在当前显示时实时更新。
所以当有人打电话给我时,我想得到他的phone号码。
Contact inviter = conversation.Properties[ConversationProperty.Inviter] as Contact; // The person that is calling
ContactEndpoint inviterContactEndpoint = inviter.Settings[ContactSetting.DefaultContactEndpoint] as ContactEndpoint;
如何获取?
使用这个
string phoneNumber = inviterContactEndpoint.Uri;
returns 我从 Skype 到 Skype
从 phone 到 Skype
我也试过使用
inviter.GetContactInformation(ContactInformationType);
但是ContactInformationType
没有phone号码属性。
您使用 GetContactInformation 方法获取所需的 ContactEndpoint objects. Now you can go through the list and find the phone number type 列表。
例如
var contactEndpoints = (Contact.GetContactInformation(ContactInformationType.ContactEndpoints) as List<object> ?? new List<object>()).Select(_ => _ as ContactEndpoint).Where(_ => _ != null);
foreach (var contactEndpoint in contactEndpoints)
{
switch (contactEndpoint.Type)
{
case ContactEndpointType.WorkPhone:
break;
case ContactEndpointType.MobilePhone:
break;
case ContactEndpointType.HomePhone:
break;
case ContactEndpointType.OtherPhone:
break;
case ContactEndpointType.Lync:
break;
case ContactEndpointType.VoiceMail:
break;
case ContactEndpointType.Invalid:
break;
default:
throw new ArgumentOutOfRangeException();
}
}
现在您将遇到的问题是,对于非缓存联系人,ContactInformationType.ContactEndpoints 将 return 为 null(或空列表,我忘了是哪个)。
所以你需要明白获取这些信息不会同步发生。如果你真的想要这个信息,你需要请求它,它会出现在联系人对象的事件更新中。为此,您需要为所需的详细信息创建联系人订阅,然后为特定联系人订阅订阅。
在应用程序启动时使用客户端 ContactManager 设置订阅:
_contactSubscription = _client.ContactManager.CreateSubscription();
_contactSubscription.Subscribe(ContactSubscriptionRefreshRate.High,
new[]
{
ContactInformationType.ContactEndpoints
});
}
catch (Exception e)
{
Log.WriteLine(e);
_mediator.ClientComConnectionDead();
}
}
设置联系人并订阅联系人更改:
contact.ContactInformationChanged += ContactOnContactInformationChanged;
_contactSubscription.AddContact(contact);
处理更新的联系信息:
private void ContactOnContactInformationChanged(object sender, ContactInformationChangedEventArgs e)
{
if (e.ChangedContactInformation.Any(_ => _ == ContactInformationType.ContactEndpoints))
{
var contactEndpoints = (Contact.GetContactInformation(ContactInformationType.ContactEndpoints) as List<object> ?? new List<object>()).Select(_ => _ as ContactEndpoint).Where(_ => _ != null);
foreach (var contactEndpoint in contactEndpoints)
{
switch (contactEndpoint.Type)
{
case ContactEndpointType.WorkPhone:
break;
case ContactEndpointType.MobilePhone:
break;
case ContactEndpointType.HomePhone:
break;
case ContactEndpointType.OtherPhone:
break;
case ContactEndpointType.Lync:
break;
case ContactEndpointType.VoiceMail:
break;
case ContactEndpointType.Invalid:
break;
default:
throw new ArgumentOutOfRangeException();
}
}
}
}
完成联系人后,您需要摘下并清理:
contact.ContactInformationChanged -= ContactOnContactInformationChanged;
_contactSubscription.RemoveContact(contact);
完成订阅后,您需要在应用程序清理时取消订阅:
_contactSubscription.Unsubscribe();
联系人更新可以随时进行,也可以多次进行,或者如果没有联系人端点则可能根本不更新。后端是 AD 联系信息,因此如果 AD 联系信息更新,您将收到已订阅信息的更新。
这个界面并不是真正用于询问联系信息和得到答复,它更多的是用于连接用户界面元素,以便它们可以在当前显示时实时更新。