Lync API: how to send an instant message to a contact via email?

I have an Lync user email address and you want to send him an instant message.

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();
        }
    }
}

Screenshot Lync problems Link to a large screenshot: http://i.imgur.com/LMHEF.png

As you can see in this screenshot, my program really does not work, although I can manually find the contact and send the instant message manually.

I also tried using ContactManager.BeginSearch()instead ContactManager.GetContactByUri(), but got the same result (you can see in the screenshot): http://pastie.org/private/o9joyzvux4mkhzsjw1pioa

+5
source share
2 answers

, . , .

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;
        }
    }
}
+6

Fine For me

protected void Page_Load(object sender, EventArgs e)
{ 
   SendLyncMessage();
}
private static void SendLyncMessage()
{
  string[] targetContactUris = {"sip:xxxx@domain.com"};
  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);
}
+3

All Articles