Microsoft Lync and Skype for Business have a rich set of .NET APIs which make it easy to extend the platform and integrate it with other applications. This blog helps explain how to use those APIs.

Call replacement extension method for UCMA

Posted: March 27th, 2012 | Author: | Filed under: UCMA 3.0 | Tags: , , | No Comments »

Recently I did some experimenting with call replacement, and I came up with a set of extension methods that you can use to try out the INVITE with Replaces technique. To start, I should probably explain what it does. There is a BeginReplace extension method for AudioVideoCall, which allows you to take over the spot in a two-party call that belongs to your application. Continue reading “Call replacement extension method for UCMA” »


Security exceptions with managed SIP applications

Posted: March 27th, 2012 | Author: | Filed under: Lync Development | Tags: , | No Comments »

Applications built using the Managed SIP Application API can be a bit tricky to troubleshoot. If your managed SIP application fails on startup with an UnauthorizedException or a SecurityException, make sure that the user account that the application is running under is a member of both the RTCComponentUniversalServices domain group and the RTC Server Applications local group (on the Lync Front End Server). If you’re running it as a console application, you’ll need to make sure your own user account is in both groups; if it’s a Windows service, make sure the service is using a domain account that belongs to the two groups. This should eliminate the exception.


What happened to my call?

Posted: March 20th, 2012 | Author: | Filed under: UCMA 3.0 | No Comments »

You may already be aware that you can use the Call.StateChanged event to find out when a call that is handled by your UCMA application becomes established, or terminates, or goes through some other state change. Your UCMA applications probably have event handlers very much like the following:

void OnCallStateChanged(object sender, CallStateChangedEventArgs e)
{
    _logger.Log("Call state changed from {0} to {1}.", e.PreviousState, e.State);
}

Continue reading “What happened to my call?” »


UCMA 101 – Lync Developer Roundtable

Posted: March 12th, 2012 | Author: | Filed under: Lync Development, UCMA 3.0 | 1 Comment »

For anyone who is just starting out with UCMA development, I’m doing a UCMA 101 session for the Lync Developer Roundtable series. Click on the link for the online meeting details. I’ll be talking about UCMA, what it’s good for, and some of the basics of UCMA development.


Sending a call to a specific endpoint in UCMA

Posted: March 2nd, 2012 | Author: | Filed under: UCMA 3.0 | Tags: | 6 Comments »

One of the cool things about Lync that people often take for granted is that you can sign in from multiple computers (or devices), and any call that is sent to you will ring at all of those various locations. There’s quite a bit of complex routing logic that goes into this, but it mostly takes place under the covers, and even when you’re developing a UCMA application, you generally don’t need to worry about it. If you create a new AudioVideoCall object and call AudioVideoCall.BeginEstablish with a SIP URI, Lync automatically “forks” that call to all of the registered endpoints for that user. Basically when the call hits the Lync Front End Server, the Front End Server sends a branch to each of the endpoints where that user is signed in. The first one to answer gets to take the call.

While it’s very courteous of Lync Server to do all of this stuff on its own without bothering us, the branching behaviour can sometimes get in the way. You might want to send an IM or a call to a user at one specific location. Maybe you want a call to go only to the user’s IP desk phone, but not to the Lync client on the PC. What do you do in a case like this? Continue reading “Sending a call to a specific endpoint in UCMA” »