2012-09-25 38 views
5

Tôi có địa chỉ email của người dùng Lync và muốn gửi cho anh ta một tin nhắn tức thời.Lync API: Làm cách nào để gửi tin nhắn nhanh đến địa chỉ liên hệ bằng địa chỉ email?

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using Microsoft.Lync.Model; 
using Microsoft.Lync.Model.Conversation; 


namespace Build_Server_Lync_Notifier 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      if (args.Length != 2) 
      { 
       Console.WriteLine("Usage: bsln.exe <uri> <message>"); 
       return; 
      } 

      LyncClient client = Microsoft.Lync.Model.LyncClient.GetClient(); 
      Contact contact = client.ContactManager.GetContactByUri(args[0]); 

      Conversation conversation = client.ConversationManager.AddConversation(); 
      conversation.AddParticipant(contact); 

      Dictionary<InstantMessageContentType, String> messages = new Dictionary<InstantMessageContentType, String>(); 
      messages.Add(InstantMessageContentType.PlainText, args[1]); 

      InstantMessageModality m = (InstantMessageModality) conversation.Modalities[ModalityTypes.InstantMessage]; 
      m.BeginSendMessage(messages, null, messages); 

      //Console.Read(); 
     } 
    } 
} 

Ảnh chụp màn hình Lync problems Liên kết với ảnh chụp màn hình lớn: http://i.imgur.com/LMHEF.png

Như bạn có thể thấy trong ảnh chụp màn hình này, chương trình của tôi không thực sự có vẻ làm việc, mặc dù tôi có thể tự tìm kiếm liên lạc và gửi tin nhắn tức thì theo cách thủ công.

Tôi cũng đã cố gắng sử dụng ContactManager.BeginSearch() thay vì ContactManager.GetContactByUri(), nhưng có kết quả tương tự (bạn có thể nhìn thấy trong ảnh chụp màn hình): http://pastie.org/private/o9joyzvux4mkhzsjw1pioa

+0

Tôi không thể nhìn thấy bất cứ điều gì để nhà nước tại sao nó không hoạt động, bạn có thể kích hoạt các bản ghi gỡ lỗi trong l ync (cài đặt dưới tab "chung") và đặt đầu ra ở đây – Neo

+0

@Neo http://pastie.org/private/igdb3rgsdjfmujyl2j7q –

+0

Tôi sẽ cố gắng so sánh nhật ký từ nỗ lực thành công (thủ công) với nhật ký từ C# của tôi không thành công cố gắng trong thời gian đó. –

Trả lời

6

Ok, vì vậy tôi đã nhận nó làm việc bây giờ. Có nó ở trạng thái làm việc, mặc dù tôi cần phải làm một số tái cấu trúc nghiêm túc.

Program.cs

using System; 

namespace Build_Server_Lync_Notifier 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      if (args.Length != 2) 
      { 
       Console.WriteLine("Usage: bsln.exe <uri> <message>"); 
       return; 
      } 

      LyncManager lm = new LyncManager(args[0], args[1]); 

      while (!lm.Done) 
      { 
       System.Threading.Thread.Sleep(500); 
      } 
     } 
    } 
} 

LyncManager.cs

using Microsoft.Lync.Model; 
using Microsoft.Lync.Model.Conversation; 
using System; 
using System.Collections.Generic; 

namespace Build_Server_Lync_Notifier 
{ 
    class LyncManager 
    { 
     private string _uri; 
     private string _message; 
     private LyncClient _client; 
     private Conversation _conversation; 

     private bool _done = false; 
     public bool Done 
     { 
      get { return _done; } 
     } 

     public LyncManager(string arg0, string arg1) 
     { 
      _uri = arg0; 
      _message = arg1; 
      _client = Microsoft.Lync.Model.LyncClient.GetClient(); 
      _client.ContactManager.BeginSearch(
       _uri, 
       SearchProviders.GlobalAddressList, 
       SearchFields.EmailAddresses, 
       SearchOptions.ContactsOnly, 
       2, 
       BeginSearchCallback, 
       new object[] { _client.ContactManager, _uri } 
      ); 
     } 

     private void BeginSearchCallback(IAsyncResult r) 
     { 
      object[] asyncState = (object[]) r.AsyncState; 
      ContactManager cm = (ContactManager) asyncState[0]; 
      try 
      { 
       SearchResults results = cm.EndSearch(r); 
       if (results.AllResults.Count == 0) 
       { 
        Console.WriteLine("No results."); 
       } 
       else if (results.AllResults.Count == 1) 
       { 
        ContactSubscription srs = cm.CreateSubscription(); 
        Contact contact = results.Contacts[0]; 
        srs.AddContact(contact); 
        ContactInformationType[] contactInformationTypes = { ContactInformationType.Availability, ContactInformationType.ActivityId }; 
        srs.Subscribe(ContactSubscriptionRefreshRate.High, contactInformationTypes); 
        _conversation = _client.ConversationManager.AddConversation(); 
        _conversation.AddParticipant(contact); 
        Dictionary<InstantMessageContentType, String> messages = new Dictionary<InstantMessageContentType, String>(); 
        messages.Add(InstantMessageContentType.PlainText, _message); 
        InstantMessageModality m = (InstantMessageModality)_conversation.Modalities[ModalityTypes.InstantMessage]; 
        m.BeginSendMessage(messages, BeginSendMessageCallback, messages); 
       } 
       else 
       { 
        Console.WriteLine("More than one result."); 
       } 
      } 
      catch (SearchException se) 
      { 
       Console.WriteLine("Search failed: " + se.Reason.ToString()); 
      } 
      _client.ContactManager.EndSearch(r); 
     } 

     private void BeginSendMessageCallback(IAsyncResult r) 
     { 
      _conversation.End(); 
      _done = true; 
     } 
    } 
} 
3

Hãy thử Dưới Mã của nó làm việc tốt cho tôi

protected void Page_Load(object sender, EventArgs e) 
{ 
    SendLyncMessage(); 
} 
private static void SendLyncMessage() 
{ 
    string[] targetContactUris = {"sip:[email protected]"}; 
    LyncClient client = LyncClient.GetClient(); 
    Conversation conv = client.ConversationManager.AddConversation(); 

    foreach (string target in targetContactUris) 
    { 
    conv.AddParticipant(client.ContactManager.GetContactByUri(target)); 
    } 
    InstantMessageModality m = conv.Modalities[ModalityTypes.InstantMessage] as InstantMessageModality; 
    m.BeginSendMessage("Test Message", null, null); 
} 
+0

Cảm ơn! Điều đó cũng phù hợp với tôi! – derekantrican

Các vấn đề liên quan