Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Lync SDK 2013从传入呼叫获取电话号码_C#_Skype_Lync_Skypedeveloper_Lync Client Sdk - Fatal编程技术网

C# Lync SDK 2013从传入呼叫获取电话号码

C# Lync SDK 2013从传入呼叫获取电话号码,c#,skype,lync,skypedeveloper,lync-client-sdk,C#,Skype,Lync,Skypedeveloper,Lync Client Sdk,所以当有人打电话给我时,我想知道他的电话号码 Contact inviter = conversation.Properties[ConversationProperty.Inviter] as Contact; // The person that is calling ContactEndpoint inviterContactEndpoint = inviter.Settings[ContactSetting.DefaultContactEndpoint] as ContactEndpoi

所以当有人打电话给我时,我想知道他的电话号码

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;
将我从Skype返回到Skype

从电话到Skype

我也试过使用

inviter.GetContactInformation(ContactInformationType);

但是
ContactInformationType
没有电话号码属性。

您可以使用GetContactInformation方法来获取对象列表。现在,您可以浏览列表并找到您想要的

e、 g

设置联系人并订阅联系人更改:

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();
            }
        }
    }
}
完成订阅后,您需要在应用程序清理时取消订阅:

_contactSubscription.Unsubscribe();
联系人更新可以在任何时间进行,也可以多次进行,或者如果没有联系人端点,则可能根本不会进行更新。这项服务的后端是广告联系人信息,因此如果广告联系人更新,则会向您发送您已订阅信息的更新


此界面并非真正用于询问联系信息并获得回复,而是用于连接用户界面元素,以便在当前显示时实时更新这些元素。

谢谢,但
ContactInformationType.ucPresenceContactEndpoints
不存在,我想我必须使用
ContactInformationType.ContactEndpoints
。在switch语句中,如何从contactEndpoint获取电话号码?如何从ContactEndpointType.Lync获取号码?我刚刚测试了代码,当有人打电话或向我发送消息时,事件不会触发。我尝试重新创建您的建议,并创建了一个自上而下的调用堆栈的小示例,可能我遗漏了一些东西,但我认为这是您建议的代码抱歉
contactEndpoint
将代表电话号码。但是事件仍然不会触发。抱歉,ContactInformationType.ContactEndpoints是正确的值,正如您所说,我已经编辑了代码。这是一个复制粘贴错误。该号码以SIP Uri的形式存在于ContactEndpoint的Uri属性中,因此电话号码将采用E164格式,例如电话:+6491234567-
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();