As I discover (late) that after being bought Skype is closing its Extras developer program, I decided to take a look to what it really means.
Skype's main revenue comes from its SkypeIn/SkypeOut feature, and it has been strange that their business model hasn't moved to maximizing that potential. One example is that Skype can't be integrated with any other application, and all the extensibility it has is centered on its public API which allows a secondary program to communicate and use the Skype client, but always while the Skype client is already running.
This in contrast with more recent models as Ribbit.
The closure of the Extras program is an admittance by Skype of something that was apparent a long time ago, that is the lack of visibility and potential of such program. Skype makes it clear that while it is closing the program, it will still support applications that already have a Skype certification, and will continue to maintain its public API.
To stop the maintenance of the public API would mean leaving Skype without any extensibility, and that is no good. What is clear to me is that they won't continue to work on it, and they must be re-architecting their platform to offer something more exciting and modern to the development community, otherwise the company is stalling.
With that in mind, I thought I'd better have a look at what the public API is and how to work with it before they announce something more.
After browsing their development web page, at the lowest level the API is a set of commands that are issued to the client. This reminds me a lot of an inheritance from the telecommunication world and the communication protocols used in some embedded devices. At a higher level some wrappers have been build including a COM framework, Java and Python.
I am all for cross-platform applications, so I decided to give the python library, skype4py a go. To make things easy I decided to used a simple GUI building framework like PythonCard which is based on wxPython, a pythonized version of wxWidgets.
The skeleton of the application looks like this:
def initSkype(self): self.call = None self.CallStatus = None self.skype = Skype4Py.Skype() self.skype.OnCallStatus = self.OnCall # Starting Skype if it's not running already.. if not self.skype.Client.IsRunning: self.log.info ('Starting Skype..') self.skype.Client.Start() # Attaching to Skype.. try: self.skype.Attach() except Skype4Py.errors.ISkypeAPIError: print ("Can't attach to Skype. Have you logged in?") sys.exit() def CallStatusText(self): return self.skype.Convert.CallStatusToText(self.CallStatus) # This handler is fired when status of Call object has changed def OnCall(self,call, status): self.CallStatus = status if self.CallStatus == Skype4Py.clsInProgress: self.call = call return # Fired on attachment status change. Here used to re-attach this script to Skype in case attachment is lost. Just in case. def OnAttach(status): self.log.info( 'API attachment status: ' + self.skype.Convert.AttachmentStatusToText(status)) if status == Skype4Py.apiAttachAvailable: self.skype.Attach()
What that gives us is a callback handler to react to call state changes. The API is very complete including features like voicemail, SMS, file transfers etc. To see some of the things that have been done have a look at the Skype extras page.
If it could only allow a better integration, both into the Skype client and of the Skype client with other applications, Skype would definitely increase their user base and their SkypeIn/Out revenue would rocket.