【问题标题】:C# get phone from SIP addressC# 从 SIP 地址获取电话
【发布时间】:2017-05-12 03:33:55
【问题描述】:

我正在使用 LyncClient 库来创建一个小部件,当外部来电时,如果联系人在用户 Outlook 联系人中,远程参与者有时会显示为“sip:emailaddress@domain”。

想知道是否有一种方法或库可以让我打开该电子邮件地址的联系人卡片,然后获取电话号码(如果有)。

现在一直在拉我的头发,但无法弄清楚。任何提示或经验(好的和坏的)都会很棒!如果你们需要更多信息,请告诉我。

【问题讨论】:

  • 所以目前我一直在匹配电子邮件地址@域,如果它存在于我们的数据库中,那么我的应用程序会做它的事情。这很好,但如果 emailaddress@domain 在卡上,是否有办法获取 Outlook 卡的内容仍然非常有兴趣。

标签: c# sip lync-client-sdk


【解决方案1】:

我制作了一个从 SIP URL 中获取电话地址的程序。 SIP Url 基本上是这种格式(不带引号):“sip:username@domain”

    try
    {
        LyncClient lyncClient = LyncClient.GetClient();
        Contact contact;
        List<object> endPoints = new List<object>();

        Dictionary<string, string> phoneNumbers = new Dictionary<string, string>();
        contact = lyncClient.ContactManager.GetContactByUri("sip:myusername@domain.com"); //PASS THE SIP ADDRESS HERE

        var telephoneNumber = (List<object>)contact.GetContactInformation(ContactInformationType.ContactEndpoints);
        //var contactName = contact.GetContactInformation(ContactInformationType.DisplayName).ToString();
        //var availability = contact.GetContactInformation(ContactInformationType.Activity).ToString();

        //foreach (object endPoint in telephoneNumber)
        //{
        //Console.WriteLine(((ContactEndpoint)endPoint).DisplayName + " " + ((ContactEndpoint)endPoint).Type.ToString());
        //}
        endPoints = telephoneNumber.Where<object>(N => ((ContactEndpoint)N).Type == ContactEndpointType.HomePhone || ((ContactEndpoint)N).Type == ContactEndpointType.MobilePhone || ((ContactEndpoint)N).Type == ContactEndpointType.OtherPhone || ((ContactEndpoint)N).Type == ContactEndpointType.WorkPhone).ToList<object>();
        foreach (var endPoint in endPoints)
        {
                    //Console.WriteLine(((ContactEndpoint)test).DisplayName.ToString());
            string numberType = Regex.Replace(((ContactEndpoint)endPoint).Type.ToString(), @"Phone", "");
            //string number = Regex.Replace(((ContactEndpoint)endPoint).DisplayName.ToString(), @"[^0-9]", "");
            string number = "";
            //Numbers only with dashes
            if (Regex.IsMatch(((ContactEndpoint)endPoint).DisplayName.ToString(), @"^\d{3}-\d{3}-\d{4}$"))
            {
                number = ((ContactEndpoint)endPoint).DisplayName.ToString();

                try
                {
                    phoneNumbers.Add(numberType, number);
                }
                catch
                {

                }
            }
            //Console.WriteLine(numberType + " " + number);
        }
        foreach (var entry in phoneNumbers)
        {
            //entry.Key is the PhoneType

            //entry.Value is the Phone Number
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show("An error occurred: " + ex.Message);
    }

【讨论】:

  • 随意与 cmets 一起玩耍,他们会为您提供有关该 sip 联系人的更多信息。
  • 当我回到项目时会再次查看这个问题。但与此同时,我也刚刚检查了数据库中的电子邮件地址。因此,如果客户端调用并且它提供了 sip:email@domain ,那么如果我们发现它,我们将通知接收者,否则什么也没有。但是也要尝试获取电话号码,以便我们也可以检查。会告诉你这件事的进展的。是为公司完成的副业/MVP 项目。希望很快会有一些停机时间。
【解决方案2】:

我认为这不是电子邮件地址。

SIP URI 的格式与电子邮件地址相同:sip:username@sipdomain,因此 Lync 可能只是发送对等 sip 地址。

在这种情况下,您只需获取“sip:”和“@”之间的子字符串即可获取呼叫者 ID。

另一个问题是 SIP 有多种方式发送呼叫者 ID。也许您应该寻找 Asserted/Preferred identity(Lync 只是从 SIP“Contact”标头中提取它)。

【讨论】:

  • 这绝对是我与网络团队交谈时的电子邮件地址。所以我的主要问题是我必须通过哪些选项来确定 SIP 地址在哪张卡上并获取卡上的其他详细信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-30
  • 1970-01-01
  • 2019-09-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多