As a developer, if you’ve every used Skype, you gotta be thinking… “wonder if there’s an API for this thing…”. Well the answer is “yes”, but not in a format that’s like anything you’ve used before!

The good news is that pretty much anything that you can do with Skype can be automated from the public api (and in a documented way). The bad news is that the API it exposes is consumed in a pretty unique fashion. You can grab the api docs from the Skype Developer page.

On Win32, the API works but using SendMessage calls to the Skype window (ie putting stuff directly on its message queue). There are also GTK equivalents that use freedesktop DBus to do similar. So it’s pretty darn ugly stuff - you end up copying API commands onto the queue (as strings… like the way you used to drive an AT modem!), and off they go. Skype has to be started and visible (part of the API license is that it has to remain visible), so no clean options there for a silent skype in the background.

So how do you call it from Java? Couplea options. There are a few libraries out there now, but mostly in a pretty average state. I found the quickest way to get going was generating my own using JNIWrapper. I installed the (very cool) ActiveSkype COM library from KhaosLabs that defines all the constants and strings you need. Then fed that COM library to JNIWrapper, and I was in business - current Skype Java lib read to roll! Then I could do stuff like:

    IAccess myAccess = Access.create(ClsCtx.SERVER);
    IUserCollection mates = myAccess.getFriendList();
    Int32 mateCount = mates.getCount();
    System.out.println("You have: " + mateCount + " mate(s)");
    for (int i = 0; i < mateCount.getValue(); i++) {
        IUser nextMate = mates.getItem(new Variant(i+1));
        System.out.println("Next Mate is: " + nextMate.getHandle());
    }

You can get access to their online status, place a call to them, or pretty much whatever the client can do. The API is pretty complete, including event notifiers for new calls, but it does have an unusual approach to exposing its services.

I thought about playing around with an “answering machine” style app… but couldn’t find hooks for sending WAV files down the line. Audio pretty much has to come down the mic channel - and whilst there are ways around it (like installing a “Virtual Audio Cable” VAC driver on windows then remapping it to a media player)… well you get the picture.. it’s a horror story.

It’s fun to be able to script Skype, though. JNIWrapper is so the business. If you have to do any COM work it’s definitely worth the dollars. It’s one of the “Just Works” products that I just gotta rave about.