Voice Mashups with Twitter, part 2: Sending telephony presence to Twitter
Monday, April 21st, 2008What if you wanted to share your telephony “presence” information with another application? i.e. you wanted to let the application know whether or not you were on the phone? For instance, when someone called you a message that you were “on the phone” could then be displayed in the other application…. perhaps a web page with a directory of staff - showing who’s on the phone… perhaps an instant messaging client…
Well, out at eComm 2008 in March, our CTO, RJ Auburn, demonstrated exactly that kind of integration using just CCXML and web services. In his talk he showed a quick application in CCXML that would send out your presence information on the current web 2.0 darling Twitter. Essentially, what happens is this:
- Someone calls a phone number (presumably because you gave it to them)
- Call is connected to your actual phone
- Call presence information is sent out in your Twitter stream.
For instance, if you call one of these numbers (please do so only if you actually want to talk to me, and please only from 9am-5pm Eastern US time- thanks!):
- Direct Local # (857) 362-8469
- Skype +99000936 9996075436
- SIP VoIP sip:9996075436@sip.voxeo.net
You’ll reach me (or my voicemail) and the corresponding status updates will appear in my Twitter stream (shown in reverse chronological order):
Now I don’t know that I would really personally want to send out this information in my twitter stream every time someone called me (although in all honesty I don’t talk on the phone as much as I used to), but you get the idea. Your “telephony presence” can be sent out to another application. It’s to me a very cool example of how you can easily mashup voice with web services. While Twitter is used here for this example, the code could basically be used to send this presence information to any type of service that lets you communicate using simple web services. Let’s dive in a bit further…
The eComm Slides
First, though, I should mention that this example was part of RJ’s talk at eComm 2008 and you can see it in his slide deck starting at slide 27:
As soon as audio is available for the presentation, we’ll provide a link here to actually listen to the presentation.
The Web Service
Now to jump into the actual code, RJ was able to do this so easily largely because Twitter’s API is so incredibly simple to use, as I discussed in a previous post about Twitter. The full CCXML code is below, but here’s the key part where RJ defined the URL to use to update Twitter:
<var name="tURL"
expr="'http://zscgeek:password@twitter.com/statuses/
That’s it. (Note that while RJ is on Twitter as zscgeek, you can rest assured that his real password is NOT “password”!)
After creating this variable “tURL” (as in “target URL”), RJ proceeds to simply assign some text to a variable “status” and then call the target URL with that “status” variable as an argument. For example:
<var name="status" expr="'RJ is on the phone'"/>
<send targettype="'basichttp'" name="'update'"
target="tURL" namelist="status"/>
Here “RJ is on the phone” is assigned to “status” and then the Twitter API is called. As shown in the code below, this same block of code is re-used with each different telephony state (and obviously with a different status message).
The Code
So here’s the code… nice and short and sweet… just enough to fit on a Keynote slide without straining eyesight (yes, it would probably fit on a PowerPoint slide, too, but remember that we’re Mac fans here). I’m not going to walk through each step of the code, but if you scan down you can see that basically the code is:
- Upon connection of the call:
- connecting the call to RJ’s cell phone (not his real number)
- sending the “RJ is on the phone” status update to Twitter
- Upon entering one of the other states (no answer, call disconnected), sending the appropriate Twitter status update.
Now if you aren’t familiar with the power of CCXML, you might want to look at our documentation and tutorial on CCXML or view one of the video tutorials on CCXML that we recently posted.
With that, here’s the code:
<?xml version="1.0" encoding="UTF-8"?>
<ccxml xmlns="http://www.w3.org/2002/09/ccxml" version="1.0">
<var name="state" expr="'init'"/>
<var name="incomingcall"/>
<var name="tURL"
expr="'http://zscgeek:password@twitter.com/statuses/update.xml'"/>
<eventprocessor statevariable="state">
<transition event="connection.alerting" state="init">
<accept/>
</transition>
<transition event="connection.connected" state="init">
<assign name="state" expr="'calling'"/>
<assign name="incomingcall" expr="event$.connectionid"/>
<createcall dest="'tel:+18315551111'"/>
</transition>
<transition event="connection.connected" state="calling">
<assign name="state" expr="'connected'"/>
<join id1="event$.connectionid" id2="incomingcall"/>
<var name="status" expr="'RJ is on the phone'"/>
<send targettype="'basichttp'" name="'update'"
target="tURL" namelist="status"/>
</transition>
<transition event="connection.failed" state="calling">
<assign name="state" expr="'done'"/>
<var name="status" expr="'RJ is not answering his phone'"/>
<send targettype="'basichttp'" name="'update'"
target="tURL" namelist="status"/>
</transition>
<transition event="connection.disconnected" state="connected">
<assign name="state" expr="'done'"/>
<var name="status" expr="'RJ is off the phone'"/>
<send targettype="'basichttp'" name="'update'"
target="tURL" namelist="status"/>
</transition>
<transition event="send.successful" state="done">
<exit/>
</transition>
</eventprocessor>
</ccxml>
Feel free to use it, modify it, etc., etc. (And if you do something cool with it, please do let us know, either as a reply to this post or via email.) While this is with Twitter, we’d love to hear where else you can think of sending telephony presence info…
P.S. If you’d like to experiment with this but are not sure of how to get started, head on over to www.voxeo.com/free and either sign up for a free developer account on our Evolution portal or download our free Prophecy software to run it on your own server.
Technorati Tags:
applications, ccxml, xml, voice, voice mashups, mashups, voxeo, twitter, presence, telephony, phone mashups

Just a brief update on my piece about

So what’s going on here? At a high level, you called into our servers where an XML document outlined a series of prompts, collected some information and then sent the result over to a Twitter account for posting. (If you aren’t familiar with Twitter,
Before I start walking through the code, let’s talk about the version of XML I am using. Here at Voxeo we support three different kinds of XML for developing voice applications (as outlined
RSS Feed