Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[ecf-dev] cross-project use of Skype provider

Hi -

Scott suggested I share what I am doing with the ecf-dev mail list, so here goes:

I am a committer on the technology/vtp project (Voice Tools). Back in 2005 (to meet a Feb 2006 release deadline) I developed some plugins that implement a launching capability so that VXML apps developed with the tools could be run on the Tellme Studio voice browser platform at the press of a button. That involved me developing an interface to the Skype API so that the launcher could call Studio programmatically via Skype. I completed that development, creating a Windows-only version. I did not have resources to also build Mac or Linux versions (and still do not).

About the time that effort was finishing up, I learned that Skype was supporting a development effort to create a Java interface to the Skype API called Skype4Java, which incorporates Windows, Mac, and Linux support. I would have preferred to use that code, but it was not ready in time. I have now resumed working on the Voice Tools project with a first goal of retooling to use the Skype4Java code.

I was gratified to see that ECF has already built a Skype provider based on Skype4Java, and I have been pursuing replacing the previous guts of the Tellme launcher with calls to the ECF Skype provider. It has been an interesting struggle, with very encouraging results so far.

I say it has been a struggle because the model I chose to represent a phone call in the original code is quite different from the ECF provider model, and I had to figure out how to "marry" the two. I had a lot of code that is functional in launching the VXML app, which involves making a phone call via Skype while simultaneously monitoring the Tellme Studio website to detect log messages coming from the execution of the application. There is a thread that manages the call, dialing the number and then waiting for status messages, mainly to detect the end of the call. And there is a separate thread that monitors the log output from the website, detecting the start of flow of log entries and then passing each entry back to Eclipse Voice Tools where the entries are displayed in a View. So, having all this code which works admirably, I simply wanted to replace my "dialing" code with an interface to the ECF Skype provider.

Scott had encouraged me to use the CallSessionContainerAdapter class with the sendCallRequest method to make the call as by so doing, additional call infrastructure mechanisms could be easily supported in future. *<grump>*I have to say that using the documentation I could find on the ECF pages, and the code of the Skype provider I had a very hard time figuring out how to do that. At almost every turn, I would find a parameter needed for a constructor or for an instantiator method that I did not know what value to use and could find no example code to copy.*</grump>*

Finally, I was able to actually make a Skype call by using: ("number" is a String containing the Tellme Studio Skype ID.)

      IContainer container = (IContainer) ContainerFactory.getDefault()
                       .createContainer(""); //$NON-NLS-1$
      *. . .*

      SkypeCallContainerAdapter callcontainer =
           new SkypeCallContainerAdapter(container);
      ID target = IDFactory.getDefault().createID(
                   "", number);
      callcontainer.sendCallRequest(target, new ICallSessionListener()
               {*. . .*});

As I say, that works, but is not as generic as I would like. At this point, I need to work on the *. . . *in the body of the ICallSessionListener. It needs to return status messages from the Skype API to the calling thread so it can detect error or end of call. Right now, it is not doing that very well. And then, I need to test out the new interface that Scott did to enable sending DTMF tones to Skype via the CallSessionContainerAdapter.

Difficulties aside, using the ECF provider to access the Skype4Java code has been a rewarding experience, and I think much more quickly done than if I were trying to use Skype4Java directly. Thanks to ECF for doing such a nice job on it. I think being able to share across Eclipse projects is really valuable.

-- Mike Greenawalt

Back to the top