Facebook VoIPness

If a tree falls in the forest, and no one is there to hear it crash to the earth, does it make a sound?

If a person exists in real life, yet does not have a Facebook profile, does he really exist?

My first year on Facebook was mostly spent ignoring it. And then came the news feed. That made it a little more worth my time to check on it from time to time. Now we have applications, and so Facebook has become a true work/play “platform.”

I’m sure there’s a lot to write about the Facebook Platform, but this isn’t a software blog, it’s a VoIP blog, so let’s talk about VoIP. I’ve been keeping an eye on the telephony applications appearing on Facebook.

Applications I use:

GrandCentral: dead simple but useful. Adds a CallMe button to your profile. This works as a Facebook integration because the button is personalized to the profile on which it sits. I’m looking at Bill’s profile and want to call him. Click the button. (VoIP because GrandCentral is VoIP on the backend. Visit GrandCentral.com to find out what this is, if you haven’t heard of it, and e-mail me if you want to be invited.)

Free Conference Calls by iotum: it’s a standard conference bridge. But the cool part is how you invite people to a scheduled conference call. It works just like the Facebook Events application and therefore is familiar to Facebook users. You can also invite external people by e-mail. During the call, participants can hang out on the Facebook page to see who’s in the call (highlighted green) and who is not (red), updated realtime, and review the agenda. According to iotum’s Alec Saunders, they’re planning to include a wall component to allow notes to be added in realtime, as well as recording.

Updated 10/2/07: Today Iotum has added two new, useful features to the Facebook Free Conference Calls application. From the application page, you (the call organizer) can mute or unmute participants. Participants can also indicate that they wish to speak by virtually raising a hand.

Haven’t yet tried but might:

Voicemail by FWD: a good idea, but I think I’d rather have people call via the GrandCentral button and leave voicemail for me in my common voicemail box.

Applications I won’t bother with: anything that just puts a link in my profile or applications menu to an external web site or program. What’s the point? There’s no real Facebook integration there.

What I’m really waiting for is a slick Adobe Flash embedded application that truly lets me “click-to-call.”

RSS news feeds for Cisco IP phones

News and Alerts main screenHere’s an application currently in use at Penn State. If you are a VoIP phone user at University Park, you’ve probably seen the News and Alerts service if you’ve explored your Services menu. It’s an RSS news feed reader with a predefined list of news sources that may be of interest to the Penn State faculty/staff community.

Download the scripts from repos/rss2cisco.

I can’t claim credit for writing this one; credit goes to Joshua Cantara of dontpokebadgers.com for the original source, released under the GNU Public License. Further enhancements to version 1.0 of the code were made by Dirk Jagdmann (I can no longer find his source listed on the web) to include caching, and finally I had my way with it to add word wrapping, better date/time presentation, and additional softkeys.

Reading an article blurbWhat’s cool about this? RSS blurbs are just about the right size for viewing on the IP phone’s display; full articles would be too much. Some of the feeds we chose, such as the ITS Alerts and the weather feed, are fully useful just on the phone. Others, such as the Research Penn State magazine feed, are there to give someone an idea of what’s in the magazine and encourage him or her to view it on the web.

rss2cisco.pl runs as a CGI program and requires several modules from CPAN. These are all documented within the code. I redefined the XML::RAI::Object::time_handler function because it actually had no concept of time (zones, that is). If you use only 3rd-generation Cisco IP phones (7906, 7941, 7961, 7971) you may be able to remove the Text::Wrap functions. The browser on these phones automatically wraps menu items at word boundaries at the end of a line.

Cantara has a useful setup how-to on his site if you are interested in setting up his version or our modified version of the code.

VoIP software clients: My Picks

I’ve had the opportunity over the last year or so to do some testing with VoIP software clients. In June 2006, when I got my Macbook Pro with its built-in camera, I was eager to try desktop video conferencing. Later, I was part of a closed test of softphones on the University’s VoIP system. What I found when looking for appropriate software was that my choices were limited and the software often beta-quality. Here’s what I required:

  • H.323 video client for Mac, because Penn State’s video systems use this protocol.
  • SIP voice clients for Mac and Windows.
  • Doesn’t crash more often than one in ten times. (I added this one to the list after trying out a few lousy, hacked-together SIP clients.)

Here’s what I wanted:

  • Free.
  • Cross-platform. I’d rather use the same client on both Mac and Windows, if possible, just for consistency.
  • Useful bells-and-whistles. I’d be satisified with a client that can just make and receive calls in a reliable manner, but some added features would be great.
  • A decent user interface. Why do programmers of soft-clients believe they need to make their soft-phones look like desk phones? I do not want to click a big ugly touch-tone keypad when I have a keyboard with 0-9, * and # already. Make it small and simple.
  • IAX2. When I started experimenting with Asterisk at home, I learned about the Inter-Asterisk eXchange protocol and its NAT-friendliness and wanted to give it a try.

The Winners

H.323 video conferencing for Mac: XMeeting (current version: 0.3.4a)

XMeeting ready screenThis is really the only free option for video conferencing on the current Mac OS. It happens to be quite good and is actively developed. The “X” in XMeeting is for Mac OS “X” and does not refer to XWindow–it’s native Aqua. XMeeting is capable of voice and video calls over both H.323 and SIP, but was primarily designed for video over H.323. You can have multiple profiles for registering with various gatekeepers or SIP registrars and different combinations of allowed codecs for each. The interface is simple and intuitive. Some nice features are remote camera control, input selection between camera, still image and live screen capture, and various screen configurations such as full-screen, side-by-side and picture-in-picture. XMeeting also integrates with the Apple Address Book.

XMeeting in-callAt Penn State, XMeeting shines in point-to-point calls with Polycom videoconference rooms. It can also connect to the video bridge (MCU) but due to some incompatibility it reverts to the H.261 video protocol, which is low-res and unpleasant. Lastly, you can register with TNS’s H.323 gatekeeper and dial into conference rooms around the University using the five-digit dial plan.

Cons? The SIP implementation lacks any frills and occasionally causes XMeeting to crash. (It never crashes on me in H.323 mode.) To use the camera control or send DTMF you have to open a separate tool box. There’s no remote control support built-in, but you can use one of a number of tools for the Apple Remote and set up macros to operate the software. It’s single-line only; this reflects the author’s prioritization of the video capabilities over the SIP phone capabilities.

SIP phone for Mac and Windows: Zoiper (current version: 2.07 for Windows, 2.0b1 for Mac)

I became interested in Zoiper, formerly known as Idefisk, when looking for an IAX2 client to use with my Asterisk installation. Zoiper may be the de-facto standard for IAX clients. When it changed names from Idefisk to Zoiper, it also added a SIP implementation, which makes it a very capable VoIP client.


Zoiper is nicely implemented on both Windows and MacOS. I haven’t tried the Linux version. It satisfies my cross-platform desire as well as my “decent UI” desire. Again, no big ugly dial pad in my face when I’m using it. I can click a button to expose a dial pad, but when I don’t want it, it’s not there. Most functions I need to make, receive and manipulate calls are on the main screen. The free version has six line buttons and hold and transfer capabilities, so I can easily work with multiple calls. Conferencing is not available in the free version, nor is the voicemail button, which is just a shortcut for dialing the voicemail pilot number. There’s a visual message-waiting indicator: the call history button pulsates, prompting you to click on it. When you do, the call history pops up including the current number of new messages in your voicemail box. Finally, with Zoiper you can register to multiple SIP/IAX registrars at once. This is pretty slick, but I found it a little confusing to switch between them.

Cons? The IAX implementation is definitely more solid than the SIP implementation. I’ve been able to crash the Mac beta in SIP mode; the Windows software hasn’t crashed on me yet. It has no presence indication, which some other SIP clients have. No integration with any other address books including the Apple Address Book. I’d like to see a client with a nice LDAP lookup function.

SIP phone for Mac and Windows, runner up: Counterpath X-Lite (current version 3.0 for Mac and Windows)

I keep this SIP-only client installed on my Mac and Windows machines as a backup. It’s rock-solid on both platforms and pretty easy to set up. The interface is ugly and features The Big Dialpad, which I already mentioned I do not want to see all the time. It has two line buttons for two maximum calls and the ability to set up one SIP account. It messes with my audio settings when I start it up; soon I find that my audio is really loud or really soft. I don’t know how to stop this behavior.

Also Ran

  • SJPhone – I tried an older version and found it clunky and featureless, but it worked and was available for both Mac and Windows. I see that a new version was released in May, 2007; may give it another try.
  • Gizmo – requires subscription to the Gizmo Project service.
  • Ekiga – I tried it on a Linux machine in Parallels under Mac OS X. Not the ideal environment, and couldn’t get audio or video to work. But Linux people tell me this is the best one out there for that platform.

A full list of softphones is available here. I tried several others not mentioned above but didn’t feel they were worth mentioning either due to instability or lack of some core functionality.

Weather report for idle screen on Cisco IP phones

(Originally posted July 25, 2005)

I got my hands on a copy of Developing Cisco IP Phone Services by Cisco Press some time ago. There’s a lot of functionality available in the Cisco 7960/7940 IP phones (and some limited functionality in the 7905s). (Note: Now we’re using 7961/7941/7906.) Just scratching the surface so far, I’ve written a simple weather reporting app in Perl that provides pages for the Idle URL.

Download the scripts from repos/phonewx.

Current Conditions screenshotphonewx.txt – (rename to phonewx.pl or extension of your choice for running) Generates formatted output of current conditions for your area. Modify the variables at the top of the script to reference your city’s ICAO identifier (go to www.uswx.com and get the weather for your city — you’ll see the ICAO identifier listed on the page — begins with a K in the United States), name, and the URL that the Frcst button will point to.

Forecast screenshotphonefc.txt – (rename to phonefc.pl) Generates formatted output of a 7-day forecast. It calls Lynx to grab a text dump of a web site providing the forecast. You can rewrite this to use Perl modules, but I found the Lynx solution to be easiest.

update.sh – sample – Set up a shell script that runs on a 15-minute crontab to call these Perl scripts and place the output of each in your phone-accessible web directory. The information will then be current as phones request it.

Note that this setup uses Perl only to generate the static XML files — phones are not requesting CGI pages. The examples provided by Developing IP Phone Services all assume Windows/IIS/ASP where phones will request dynamically generated pages. In this case, dynamic generation is not necessary, and is in fact far more costly than having a cron job just put out updated XML files every so often.

Once the script is in place and the files are being generated, point your Idle URL to the phonewx output with an idle timer of 60 seconds or whatever is your preference. The output contains a Refresh header that causes the phone to re-fetch the current conditions every 15 minutes, so a phone that sits idle for a long period of time will still have current conditions displayed throughout the day.