[
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("ecf.call.skype"); //$NON-NLS-1$
      *. . .*
      SkypeCallContainerAdapter callcontainer =
           new SkypeCallContainerAdapter(container);
      ID target = IDFactory.getDefault().createID(
                   "ecf.namespace.skype.user", 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