联系电话号码 Lync SDK 2013

Posted

技术标签:

【中文标题】联系电话号码 Lync SDK 2013【英文标题】:Contact phone numbers Lync SDK 2013 【发布时间】:2017-11-28 13:49:37 【问题描述】:

您好,我正在使用 Lync SDK 2013,在 ListBox 中显示联系人的电话号码,并使用项目(电话号码)通过我的 API 调用此号码。所以我做了一个 WPF 应用程序,它只包含一个 ListBox 和 2 个按钮(呼叫 - 挂断)。我的应用程序作为自定义命令添加到 Lync 中,在联系人的 RightClick 中。它没有任何 Lync 控件。所以我想做的是:如果我右键单击联系人,我的应用程序将启动并在列表框中为我提供电话号码列表。我使用包含控件的 WPF 做到了:ContactSearchInputBox(搜索联系人)和 ContactSearchResultList,它工作得很好,我不知道没有控件怎么做。 任何人都可以帮助我!!!! :(

【问题讨论】:

【参考方案1】:

您需要阅读并理解 Lync SDK 2013 Lync Contact 文档。

如果您希望“模拟”Lync 联系人“搜索”(根据客户端搜索),则需要查看 search API。

您需要了解的其他概念是,从所有 API 返回的结果不保证返回所有请求的 Lync 联系人数据。

Lync SDK 无法“加载”大多数人似乎不理解的所有联系信息。

返回的结果是本地缓存所拥有的,仅此而已。要获取您需要了解 ContactSubscription 模型的所有 Lync 联系信息。

对于您希望收到字段更新(或加载)通知的每个 Lync 联系人,您“订阅”该 Lync 联系人,然后您将通过Contact.ContactInformationChanged 事件收到通知。

因此,您的 UI 必须能够在从任何 Lync Contact 值返回的任何初始值加载/更新字段时自动更新信息。

【讨论】:

这似乎太复杂了我的想象,我没有找到一个具体的例子:(我阅读了文档..如果你有任何例子我正在采取。再次感谢你的回答跨度> 没有我知道的例子,但我已经多次完成以上所有操作。最好先尝试一下,然后在遇到问题时提出具体问题。 所以我花了所有时间阅读文档,有我的代码,通过他的 Uri(电话号码)搜索联系人。所以我的订阅只针对这个联系人,我可以只返回他的号码电话列表。但我想做的是,当我选择一个联系人并启动我的应用程序(右键单击)时,必须使用这个 Uri。我想我必须使用 BeginSearch 而不是 GetContactByUri ?? 我的代码发布为anwser(太长,无法在评论中完成) 代码看起来没问题。我仍然不确定你的实际问题是什么。如果您有一个有效的 Skype URI,那么 GetContactByUri 是最好的。如果您没有 URI,那么 BeginSearch 是最好的,只要您了解您可能会获得多个结果,并且对于电话号码,您将获得生成的结果。【参考方案2】:
public partial class ChoosePhoneNumber : Window
    
        LyncClient lync_client;
        Contact contact;
        ContactSubscription contact_subscription;
        List<ContactInformationType> contact_information_list;
        ContactManager contact_manager;

        public ChoosePhoneNumber()
        
            InitializeComponent();

            connect_lync();
            get_subscribed_contact(this.contact);
        
    
        private void connect_lync()
        
            try
            
                lync_client = LyncClient.GetClient();
                contact_manager = lync_client.ContactManager;
            
            catch (ClientNotFoundException)
            
                MessageBox.Show("Client is ot running", "Error While GetClient", MessageBoxButton.OK, MessageBoxImage.Error);
            
        

        private void get_subscribed_contact(Contact contact)
        
            List<object> contact_phone_numbers_list = new List<object>();
            contact_information_list = new List<ContactInformationType>();
            contact_information_list.Add(ContactInformationType.ContactEndpoints);
            contact_information_list.Add(ContactInformationType.DisplayName);

            contact = contact_manager.GetContactByUri("number"); // I put here the number phone of a contact in my list
            contact_subscription = LyncClient.GetClient().ContactManager.CreateSubscription();
            contact_subscription.AddContact(contact);
            contact.ContactInformationChanged += Contact_ContactInformationChanged;
            contact_subscription.Subscribe(ContactSubscriptionRefreshRate.High, contact_information_list);

            List<object> endpoints = (List<object>)contact.GetContactInformation(ContactInformationType.ContactEndpoints);

            var phone_numbers_list = endpoints.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>();
            var name = contact.GetContactInformation(ContactInformationType.DisplayName);

            if (phone_numbers_list != null)
            
                foreach (var phone_number in phone_numbers_list)
                
                    contact_phone_numbers_list.Add(((ContactEndpoint)phone_number).DisplayName);
                
                conboboxPhoneNumbers.ItemsSource = contact_phone_numbers_list;
            
        

        private void Contact_ContactInformationChanged(object sender, ContactInformationChangedEventArgs e)
        
            var contact = (Contact)sender;
            if (e.ChangedContactInformation.Contains(ContactInformationType.ContactEndpoints))
            
                update_endpoints(contact);
            
        

        private void update_endpoints(Contact contact)
        
            if ((lync_client != null) && (lync_client.State == ClientState.SignedIn))
            
                ContactEndpoint endpoints = (ContactEndpoint)contact.GetContactInformation(ContactInformationType.ContactEndpoints);
            
        

【讨论】:

【参考方案3】:
public partial class App : Application
    
        protected override void OnStartup(StartupEventArgs e)
        
            App.Current.DispatcherUnhandledException += Current_DispatcherUnhandledException; ;
            try
            
                string argsParam = "Contacts=";

                if (e.Args.Length > 1)
                
                    if (e.Args[2].Contains(argsParam))
                    
                        var contacts_sip_uri = e.Args[2].Split('<', '>')[1];
                        Params.contacts = contacts_sip_uri;
                    
                
            
            catch (Exception ex)
            
                MessageBox.Show("Reading Startup Arguments Error - " + ex.Message);
            

        

        private void Current_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
        
            string message = e.Exception.Message;

            if (e.Exception.InnerException != null)
            
                message += string.Format("0Inner Exception: 1", Environment.NewLine, e.Exception.InnerException.Message);
            
            MessageBox.Show(message, "Unhandled Exception", MessageBoxButton.OK, MessageBoxImage.Error);
        

    

Params 是一个公共静态类,仅包含联系人作为公共静态字符串联系人 get;放;

public static class ParamContact
    
        public static string contacts  get; set; 
    

【讨论】:

以上是关于联系电话号码 Lync SDK 2013的主要内容,如果未能解决你的问题,请参考以下文章

从电话号码获取 Lync 用户

“在电话会议中”和“在会议中”的 Lync 2013 SDK ActivityID

是否可以扩展 Lync 来电弹出窗口?

从 UCMA 应用程序中的电话号码检索 Lync 联系人

如何从 Lync 联系人卡片中获取用户的电话号码或其他联系人详细信息?

Lync sdk 自动拨号