Thursday Jun 17, 2010

SailFin-CAFE GreetingService Demo

SailFin-CAFE provides functionality to create conversation between User and MediaGroup. For instance, a simple snippet for playing an announcement to a user would look like:

   Player p = session.createParticipant(Player.class, "myPlayer");
   Conversation conv = session.createConversation(p);

CommunicationBeans can be used to listen media events, DTMF signals and many other events, based on which application logic can be decided.

Listener for media event when a player(announcement) is finished would be:

    @CommunicationEvent(type = CommunicationEvent.Type.MEDIAENDED)
    public void mediaEnded() {
        ----- application logic ------

DTMF Signal is intercepted through CommunicationEvent type MessageArrived:

    void handleMessage() {
        DtmfSignal ds = (DtmfSignal) ctx.getMessage();
        String signal = ds.getSignal();

At the same time Communication API makes it very handy to replace participants in a conversation. eg. Replacing a user with media group or vice-versa.

All this makes it quite simple to write applications like GreetingService. The basic idea of a GreetingService is to allow users to record messages to be played to their friends at a particular date and time.

Following image illustrates the above:

Greeting Service Example

In the above scenario Alice wants to wish Bob, so she logs in and schedules a greeting for Bob. GreetingService calls Alice for recording the message, CommunicationBean is used to play initial announcement and receive DTMF signals to start/stop recording the message. 

Once the recording is finished, an agent(GreetingAgent) is invoked to schedule the Greeting. GreetingAgent calls recepient at scheduled time and plays announcement informing about the Greeting.

Based on the DTMF response of the recepient, greeting is either played or rejected. Sender is informed about the status of the Greeting through an InstantMessage.

  • The sample can be checked out at :
  • Useful Links :

Thursday Apr 29, 2010

Call Forwarding in SailFin CAFE

SailFin CAFE makes call-forwarding apps much much simpler !!

1. The following describes, how all the incoming calls to Alice are forwarded to Bob:

public class CommsBean {

  @CommunicationEvent(type = CommunicationEvent.Type.INITIALIZATION)
  void handleInit() {
      Conversation call = (Conversation) ctx.getCommunication();
      if(call.getCallee().getName().equals("")) {


2. In case Alice takes up the call and then wants to forward it to a selected user, the code will look like:

public void handleMessageArrived(){     
    Conversation call=(Conversation)ctx.getCommunication();
    DtmfSignal ds=(DtmfSignal)ctx.getMessage();      
              UserParticipant part=(UserParticipant)call.getCallee();
                     call.addParticipant("") ;

Sample application can be downloaded from here.

Sunday Nov 22, 2009

Developing Sailfin CAFE Applications using Netbeans

Developing Sailfin CAFE Application with Netbeans is easier then ever. Resolve dependencies and build the project without any hassles.

Here's a quick guide to it:

- Create a new Netbeans project : File --> New Project
- In maven category, choose Maven Web Application, you will get the following window:

click finish to create a project.
- Right click on mavenproject1 - Source Packages and select new -> Java Class, to create a new Java Class.
- Make the class as CAFE CommunicationBean, by adding the following annotation:

public class NewClass {

- For resolving the missing dependency, select the tooltip next to @CommunicationBean annotation and click on Search Dependency at maven repositories.

searching maven dependency

- the following suggestion box will appear, select cafe-communication-api and select Add.

select cafe-communication-api

- Save the project, click on the tooltip next to @CommunicatioBean and select import

- Build the project and your CAFE Application is ready !!

- Steps to install and run the App:

  • Download and install latest SailFin V2 promoted build.
  • Download and install latest SailFin CAFE build.
  • Start SailFin and deploy the application. (eg: asadmin deploy mavenproject1.war)
  • Register two SIP phones with the help of steps mentioned here.
  • Click on Alice's phone and type "". Then click on green dial button. The bob's phone is ringing !!
  • Thursday Nov 05, 2009

    Sailfin CAFE - Click to Call using JSP

    Now your JSP is capable of establishing SIP calls. Thanks to Sailfin CAFE, no SIP Servlets needed !!!

    Here is the code you need to write:

        CommunicationSession commSession = (CommunicationSession) session.getAttribute("");
        String party1 = request.getParameter("party1");
        String party2 = request.getParameter("party2");
        try {
           Conversation conv = commSession.createConversation(party1);
           out.println("Call started between " + party1 + "and" + party2);
        } catch (Exception e) {

    Next, you would need to add a CAFE CommunicationBean to the Application.
    A simple CommunicationBean looks like:


    public class CafeCommsBean {

    Your Click to Call Application is ready !!

    Steps to install and run the App:

  • Download and install latest SailFin V2 promoted build.
  • Download and install latest SailFin CAFE build.
  • Package the application as a normal web application. For compilation, please use SAILFIN_HOME/lib/communication-api.jar.
  • Start/Restart SailFin and deploy the application (eg: asadmin deploy CafeApp.war).
  • Register two SIP phones by following the steps mentioned here.
  • Access http://localhost:8080/CafeApp
  • Enter the two user id's and click on call.
  • Click on the Answer button of the SIP Phones. The Call is established !!
  • Thursday Sep 03, 2009

    Integrating SailFin-CAFE with OpenIMS

    This entry demonstrates the procedure for installing OpenIMS and integrating Sailfin-CAFE with it. The attached sailfin-cafe application could then be used to establish a call between two clients registered with open-ims.


    • Install OpenIMS core.
    • Install Sailfin-CAFE, integrate it with OpenIMS.
    • Register IMS clients with OpenIMS core.
    • Deploy the cafe-app.
    • Establish call between the clients.

    Lets get started

    Installing OpenIMS core

    -- Install instructions can be found here.

    Note: If you are running the DNS on the same machine as OpenIMS core, then while configuring the DNS server, edit the file /etc/dhcp3/dhclient.conf and uncomment this line: prepend domain_name_servers;

    -- Start OpenIMS core components viz: pcscf, scscf, icsfc and FHoSS startup as given in the installation guide.

    Setting up SailFin and SailFin-CAFE

    -- Download and install SailFin from here.

    -- Use SailFin CAFE promoted build 05 or latest. The download and install instructions are available here.

    -- Register SailFin with OpenIMS core:

    • Go to http://localhost:8080 and enter hssAdmin as username & hss as password. This will lead you to FHoSS - FOKUS Home Subscriber Server webpage.
    • Click on create(Application Server) under the servcies tab.
    • The server setting parameters will be: Server Name - sip:hostname:5060, DiameterFDQN - hostname, Default Handling - Session-continued.
    • Attach the default_ifc to the newly created server.

    IMSClient setup

    -- UCT IMS Client can be dowloaded at

    -- OpenIMS Core has Alice and Bob as the users registered by default. Use two different IMS clients to login as Alice and Bob respectively.

    Deploying test application and establishing the call

    -- Download and deploy the sample application using sailfin asadmin deploy.

    -- Call Establishing logic of the test App:

        public class NewServlet extends HttpServlet {      
             @Context CommunicationSession session;

             protected void processRequest(HttpServletRequest request, HttpServletResponse response) {


                Call call  = session.createCall(party1);




    -- Access the url : http://localhost:8080/esswebv2

    -- Enter user ids : Alice@open-ims.test  and Bob@open-ims.test

    -- Click on the call button and listen the IMS Clients ringing !!


    The screencast for the complete setup can be viewed here !!


    Mohit Gupta


    « July 2016