Friday, May 23, 2008

Using UCMA to create a custom routing bot!

Using UCMA to create a custom routing bot!

Scenario (case):
A service/help desk wanted to expand their services using OCS as an extra communication channel. The big question in this case is how can we use a single point of entry for the employees who want to connect to the service desk? How can we show that the service desk is online? How do we make sure that an available service desk employee gets the question/incoming messages? How can we maintain the pool of service desk employees?

Create a custom application using UCMA . This application registers itself as THE service desk. If one of the employees of the service desk is online/available the service desk is online/available.  If none of the employees is online the application shows itself as offline. If somebody sends a message to the service desk the message will be routed to the next available service desk employee. We wanted this to use for text messages but also for incoming video and audio calls.

Example application:
For demo purposes we created a Windows application.
In this case, if at least one of the 3 users is online/available the application is online. The colors show the availability of the different users.image
If we send a message to the application (in this case TUser4), we are routed to the next available user.
The logic to which person to route is build in the application.


The biggest technical problems we encountered:

1.    How can set the presence of the application.
2.    How can we get the status of the different users in the “pool”.
3.    Even better how can subscribe to the presence of the users in the “pool”.
4.    How can we refer the incoming session to a different user.

The solution for these problems:

1.    You can set the presence using the UCMA api by creating a presence container(this is done by a SipServiceRequest) , after the presence container is created you can publish the presence ( also a SipServiceRequest) .Setting Pressence using UCMA

2.    If you want to get the status of a user in the “pool” you can send a SipServiceRequest to the user from which you want to know the presence. See also Getting presence using UCMA

3.    Subscribing to presence was really a difficult one. In this case we used a SipSubscription and a class implementing the ISipSubscriptionProcessor interface.

4.    At the moment you cannot refer a SignalingSession to a different user(OC client doesn’t support it). So there are two scenario’s. Use the application to set up a session from the application and proxy Instant messages back and forth through the application. This only works for instant message and not for audio and video calls. So the other solution is that to use TerminateWithRedirection on the incoming  SignalingSession this also works with audio and video calls.

At this moment I cannot get deeper into the exact details of the SipServiceRequest , SipSubscription , ISipSubscriptionProcessor we used in this application.

Microsoft says that it is not possible using the UCMA to get the presence or subscribe to presence. But actually it is, if you know the exact protocols to use!!!!

For more information contact

working at e-office