Max Masnick writes: I’ve been experimenting with using Plivo’s SIP trunking to supplement the terrible cell service at my house. SIP is a protocol for making voice calls. It’s like HTTP for telephones.
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 SPA 301 SIP phone on my desk, powered by Plivo’s SIP trunking
SIP trunking to the rescue
As I said, the cellular phone service at my house is 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 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.
Step 1: SIP endpoint
A SIP endpoint is like an email address for a phone. Someone can place a call to your endpoint using your address (in a format like
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 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 for 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.
Step 2: SIP phone
There are both hardware and software SIP phones that work with SIP trunking. It’s super easy to set up a software SIP phone: There’s a free Mac SIP phone called Telephone that works out of the box with a Plivo endpoint. Some paid SIP phones 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 is 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 that has excellent build and sound quality and works great with Plivo. It doesn’t have a speakerphone, which is a bummer when I’m sitting on hold, but I like it otherwise. The SPA 303 SIP phone is also worth looking into.
I also have an OBi110, which is a magic box that converts 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.
My OBi110 sitting next to an ancient phone. It emulates whatever dialing and ringing interface the phone expects, and uses Plivo and its SIP trunking to place and receive calls.
No matter what you do, use a wired network instead of Wi-Fi. Voice quality over Wi-Fi is dramatically worse than over Ethernet.
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.) Here’s what I did.
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 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’d like 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 application you could 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.
*This guest post was written by Max Masnick, a epidemiology Ph.D. student and a web/mobile software developer based in Baltimore, Maryland.*
Check the discussion on Hacker News.