Here’s my story: I’ve been experimenting with using Plivo’s SIP trunking to supplement the terrible cell service at my house and use a SIP phone. As someone who is incensed by poor quality phone calls, I’ve been extremely impressed with the good call quality and robustness of Plivo. As a programmer and home automation hobbyist, I’m excited about being able to control my SIP phones with Plivo. And as a poor price-conscious graduate student, I appreciate Plivo’s low pay-by-usage pricing.
_Cisco SIP phone (SPA301) on my desk, powered by Plivo’s SIP trunking.
SIP trunking to the rescue.
As I mentioned above, the cellular phone service at my house was terrible. Pretty much every call is unintelligible or dropped within a few minutes.
I’m not willing to pay an evil corporate monopoly $30+/month for a landline (cough cough Comcast). While researching alternatives to a landline, I discovered that there are a bunch of awesome cloud telephony services with usage-based pricing that offer a huge amount of flexibility and customizability. With a little bit of work, using Plivo’s SIP trunking I was able to roll my own fully customizable sip phone system with excellent call quality at a fraction of the price of a landline phone system.
As far as I can tell, SIP is like http for telephones. It’s a protocol for making voice calls, but you can also do video and instant messaging, I hear. I’m not going to worry about explaining SIP and SIP trunking because, honestly, I don’t totally understand it. Instead, I’m going to tell you what I use in my current SIP setup and how it works.
SIP Trunking Step#1: SIP endpoint
A SIP endpoint is basically like an email address for a phone. Someone can place a call directed at your endpoint using your address (e.g.
sip:firstname.lastname@example.org) and the sip phone you have connected to your endpoint will ring.
If you try Googling for “SIP trunking”, you might be surprised to see how many different providers there are. Unfortunately, a lot of them seem like relics from the early 2000s, are expensive, and/or are geared for the enterprise. I ended up using Plivo because they (a) charge only by usage, (b) are developer-friendly, and (c) I had heard of them because they were in Y Combinator, the Super Bowl of startup incubators.
I wrote Skype Replacement (a guide to setting up a SIP endpoint using Plivo) a while back on my blog, so if you want more details on this process go ahead and check that out.
SIP Trunking Step#2: SIP phone
There are both hardware sip phones and software sip phones that work with SIP trunking. It’s super easy to set up a software sip phone: there is a free Mac sip phone called Telephone that works out of the box with a Plivo endpoint. There are some paid sip phones that may work better (Telephone is pretty bare-bones), but I haven’t tested any.
If you’re serious about telephony, you’ll want a hardware sip phone. In my experience the call quality will be better and it’s always on (so I don’t miss calls if I accidentally close my software sip phone). I bought a Cisco sip phone, which has excellent build and sound quality and works great with Plivo. — email support to ask for the setup instructions because the configuration options are insanely complicated, and be sure to forward TCP/UDP traffic on port 5060 to your sip phone’s IP address. It doesn’t have a speakerphone, which is a bummer when sitting on hold, but I like it otherwise. The SPA 303 sip phone is also worth looking into.
My OBi110 sitting next to an ancient phone. It emulates whatever dialing and ringing interface the phone expects, and then uses Plivo and its SIP trunking to place/receive calls.
I also have an OBi110, which is a magic box that will convert any traditional phone into an internet-based sip phone. It works with Google Voice as well as SIP. It works out of the box with Plivo and the configuration is substantially easier than that for the Cisco phones, but I have it hooked up to an ancient handset so the quality isn’t great—I’m not sure what the quality would be like on a modern handset. Your mileage may vary.
No matter what you do, use a wired network instead of wifi. Voice quality over wifi is dramatically worse than over ethernet.
SIP Trunking Step#3: Integration
I use Google Voice in conjunction with Plivo to hook my cell phone up with my SIP phone and to provide voicemail service. (Or you could build a voicemail system using Plivo.)
Connect a phone number to my Cisco’s SIP endpoint via the Plivo dashboard.
Add this number to Google Voice and set it to forward calls there along with my cell phone.
Forward calls to my cell phone back to Google Voice so my Cisco phone rings if someone directly calls my cell phone. Here’s the option I’ve selected under the advanced options for my cell phone in Google Voice:
- Turned on custom “do not disturb” settings for my SIP number in Google Voice so I don’t have to remember to turn the ringer off.
Your SIP phone is all set. What’s next?
Google Voice is ok, but the features haven’t changed much since it was introduced years ago. I think it would be possible to make a custom-designed, one-of-a-kind bespoke version of Google Voice with some awesome features like:
Mute my phone when my house’s alarm system is in “away” or “night” mode, instead of relying on the time-based do not disturb settings in Google Voice.
Change the order phones ring in based on whether or not I’m home.
Place calls with a web interface (like Google Voice) but with enhanced features like setting up conference calls and one-click dialing for frequent contacts.
And a few more ideas…
Custom voicemail system with per-contact messages. You could tell that annoying friend who leaves you voicemails to not leave you voicemails (or just disable voicemail entirely for certain contacts).
Remember how I was complaining about my Cisco phone not having a speakerphone? I’m pretty sure it’s possible to set up a software phone to serve as a speaker phone over my computer’s speakers. With WebRTC, this could potentially be done in-browser.
If I thought I could live with myself, I would have a virtual secretary who places my calls and only connects me after the other person answers. Technically possible, very douchy.
I think it would be awesome to have a system like this available as an open- source app you can run on your own server or Heroku. But until this exists, I’m just happy to be able to properly hear my phone calls again.
Update: if you’re looking at other solutions, check out our Twilio Alternative page for details on our competition.
This was a guestpost written by Max Masnick. He is a epidemiology PhD student and a web/mobile software developer based in Baltimore, Maryland. He writes at http://maxmasnick.com and is @masnick on App.net.
Check the discussion on Hacker News.