Since we began our XiVO adventure a couple months ago, the most requested feature has been direct support for Google Voice. For those in the United States, it remains the cheapest VoIP solution on the planet (when it works) with unlimited free calls throughout the U.S. and Canada. While we’ve had Google Voice functionality in XiVO through the Simonics SIP to Google Voice Gateway since the outset, there still were some who preferred to keep their credentials and tokens to themselves. And then there were those that found the $4.99 per line Simonics setup fee too rich for their blood.
To celebrate the new school year, today we’re pleased to provide a new tutorial and script that bolts Google Voice with OAuth authentication onto Incredible PBX for XiVO. Our extra special thanks goes to Sylvain Boily, the father of XiVO, for his selfless work in bringing this to fruition in less than a day. That tells you just how adaptable the XiVO platform really is. We’ve simply added a little window dressing to ease the pain for those just getting started with XiVO and Incredible PBX.
Overview. If you’re new to Google Voice, here’s how the installation scenario goes. First, you set up a Gmail account at gmail.com. Next, you create a Google Voice account. Then, you configure Google Voice for use with Asterisk®. Next, you obtain your Google Voice OAuth 2 Refresh Token which becomes your password to use in configuring Google Voice on the XiVO platform. Next, using SSH or Putty, you log into your XiVO server as root and download and run the installation script to get your Google Voice credentials set up in XiVO. Finally, you log into the XiVO GUI with a browser and set up a custom trunk as well as an outgoing and incoming route for Google Voice calls. To add more Google Voice trunks, you simply repeat the drill. You now should have a perfectly functioning, free VoIP platform compliments of Google and Sylvain Boily and his development team. Let’s get started.
Configuring Google Voice for Use with XiVO
If you’re one of the five people on Earth that does not yet have a Gmail account, start there. Once you’ve set up your Gmail account and logged in, open a new browser tab to access the Google Voice site. Accept the Google Terms and Privacy Policy. Then choose a new Phone Number in your favorite area code. NOTE: Before Google will assign you a number, you must enter an existing U.S. phone number to verify your identity and location as well as to use for initially forwarding calls. Once your account is set up, you will get an email asking that you verify your email address. Once you’ve done that, you’ll be prompted to login to your Google Voice account again. When you do so, you’ll be prompted to Install the Hangouts Dialer app to make VoIP calls from Android. Do NOT install the dialer, or you may break the ability to use your Google Voice number with Asterisk. Instead, click X to close the dialog box.
UPDATE: Google continues to tighten up on obtaining more than one Google Voice number from the same computer or the same IP address. If this is a problem for you, here’s a workaround. From your smartphone, install the Google Voice app from iPhone App Store or Google’s Play Store. Then open the app and login to your new Google account. Choose your new Google Voice number when prompted and provide a cell number with SMS as your callback number for verification. Once the number is verified, log out of Google Voice. Do NOT make any calls. Now head back to your PC’s browser and login to http://google.com/voice. You will be presented with the new Google Voice interface which does not include the Google Chat option. But fear not. At least for now there’s still a way to get there. After you have set up your new phone number and opened the Google Voice interface, click on the 3 vertical dots in the left sidebar (it’s labeled More). When it opens, click Legacy Google Voice in the sidebar. That will return you to the old UI. Now click on the Gear icon (upper right) and choose Settings. Make sure the Google Chat option is selected and disable forwarding calls to whatever default phone number you set up.
Next, click on the Calls tab. Make sure your settings match these:
- Call Screening – OFF
- Call Presentation – OFF
- Caller ID (In) – Display Caller’s Number
- Caller ID (Out) – Don’t Change Anything
- Do Not Disturb – OFF
- Call Options (Enable Recording) – OFF
- Global Spam Filtering – ON
Under the Voicemail tab, plug in your email address so you get notified of new voicemails. Then click Save Settings. Down the road, receipt of a Google Voice voicemail will be a big hint that something has come unglued on your PBX.
One final word of caution is in order regardless of your choice of providers: Do NOT use special characters in any provider passwords, or nothing will work!
Now it’s time to obtain your OAuth 2 credentials. Even though it’s a bit more work on the front end, the good news is you won’t have to worry about your Google Voice trunks failing when Google phases out plain-text passwords. The other good news is you won’t be passing your plain-text Google Voice credentials across the Internet for everyone in the world to see.
Obtaining Your Google Voice OAuth 2 Credentials for XiVO
While you’re still logged into your Google Voice account, you need to obtain a refresh_token which is what you’ll use instead of a password when setting up your Google Voice account with XiVO. Here’s how.
1. Be sure you are still logged into your Google Voice account. If not, log back in at https://voice.google.com.
2. In a separate browser tab, go to the Google OAUTH Playground using your browser while still logged into your Google Voice account.
3. Once logged in to Google OAUTH Playground, click on the Gear icon in upper right corner (as shown below).
3a. Check the box: Use your own OAuth credentials
3b. Enter Incredible PBX OAuth Client ID:
466295438629-prpknsovs0b8gjfcrs0sn04s9hgn8j3d.apps.googleusercontent.com
3c. Enter Incredible PBX OAuth Client secret: 4ewzJaCx275clcT4i4Hfxqo2
3d. Click Close
4. Click Step 1: Select and Authorize APIs (as shown below)
4a. In OAUTH Scope field, enter: https://www.googleapis.com/auth/googletalk
4b. Click Authorize APIs (blue) button.
5. Click Step 2: Exchange authorization code for tokens
5a. Click Exchange authorization code for tokens (blue) button
5b. When the tokens have been generated, Step 2 will close.
6. Reopen Step 2 and copy your Refresh_Token. This is the "password" you will need to enter (together with your Gmail account name and 10-digit GV phone number) when you add your GV trunk in the Incredible PBX GUI. Store this refresh_token in a safe place. Google doesn’t permanently store it!
7. Authorization tokens NEVER expire! If you ever need to remove your authorization tokens, go here and delete Incredible PBX Google Voice OAUTH entry by clicking on it and choosing DELETE option.
Switch back to your Gmail account and click on the Phone icon at the bottom of the window to place one test call. Once you successfully place a call, you can log out of Google Voice and Gmail.
Yes, this is a convoluted process. Setting up a secure computing environment often is. Just follow the steps and don’t skip any. It’s easy once you get the hang of it. And you’ll sleep better.
Downloading and Installing Google Voice with OAuth 2 for XiVO
Now it’s time to reconfigure XiVO to use Google Voice with OAuth 2. Before you begin, write down your 10-digit Google Voice phone number, your Google account name without @gmail.com, and your Refresh Token from the previous step.
Log into your server as root using SSH or Putty. Then execute the following commands to kick off the install:
cd /root apt-get update apt-get -y install build-essential libssl-dev wget http://incrediblepbx.com/gvoauth-xivo.tar.gz tar zxvf gvoauth-xivo.tar.gz rm -f gvoauth-xivo.tar.gz ./add-gvtrunk
Plug in your Google Voice phone number and credentials when prompted. Then check your work carefully. When the install finishes, fire up your favorite browser to finish the setup using the settings that were provided.
Configuring XiVO for Google Voice OAuth
From a browser pointed to the IP address of your server, log in to XiVO as root with your GUI password.
Choose Services.IPBX.Trunk Management.Customized. Click on + Add to create a new custom trunk. Configure the trunk using the settings provided by the installer and click the Save button. The Trunk Name will be your actual gmailname (without @gmail.com). Interface will be Motif/gmailname (using your actual Gmail name). Interface suffix will be @voice.google.com. And the Context will be Outcalls (to-extern).
Next, choose Services.IPBX.Call Management.Incoming Calls. Click on + Add to create a new inbound route for your Google Voice DID. This is where you tell XiVO how to route calls placed to your Google Voice number. For your DID, enter your 10-digit Google Voice number. For the Context, choose Incalls (from-extern). Then choose from the pick lists to select a Destination and Redirect option for the incoming calls. It could be an extension, a ring group, a conference room, or an IVR. Click Save when you’re finished.
Finally, choose Services.IPBX.Call Management.Outgoing Calls. Click on + Add to create a new outbound route. Under the General tab, configure the route as shown below using a Name of out_gmailname (using your actual Gmail name). The Context should be Outcalls (to-extern). The Preprocess subroutine should be subr-gv-outcall. And the desired Custom Trunk should be dragged left to the selected column:
Under the Exten tab, add the desired 10-digit Exten string and trim off any prefix using Stripnum. Then click the Save button.
For example, for a first trunk, you might choose NXXNXXXXXX as the Exten with a Stripnum of 0. This would tell XiVO to route all 10-digit calls to this Custom GV Trunk. For a second Google Voice trunk, you might choose 9NXXNXXXXXX with a Stripnum of 1. This would tell XiVO to route 11-digit calls with a 9 prefix to this Custom Trunk AND to strip off the first digit (9) before sending the 10-digit call to Google Voice.
Taking Google Voice for a Test Drive with XiVO
That completes the Google Voice setup. You now should be able to place a call using your Google Voice trunk by dialing any 10-digit number. And calls placed to your Google Voice number should ring at the inbound destination you chose above.
If you have additional Google Voice trunks, simply run /root/add-gvtrunk again and insert the new credentials.
Should you ever need to delete a Google Voice account from your server, just run /root/del-gvtrunk with the name of the Google Voice trunk to delete. Enjoy your free phone service!
Originally published: Tuesday, August 16, 2016 Updated: Thursday, August 18, 2016
9 Countries Have Never Visited Nerd Vittles. Got a Friend in Any of Them https://t.co/wMfmlhiQ9y #asterisk #freepbx pic.twitter.com/TPFGZbqWB6
— Ward Mundy (@NerdUno) April 22, 2016
Need help with Asterisk? Visit the PBX in a Flash Forum.
Special Thanks to Our Generous Sponsors
FULL DISCLOSURE: ClearlyIP, Skyetel, Vitelity, DigitalOcean, Vultr, VoIP.ms, 3CX, Sangoma, TelecomsXchange and VitalPBX have provided financial support to Nerd Vittles and our open source projects through advertising, referral revenue, and/or merchandise. As an Amazon Associate and Best Buy Affiliate, we also earn from qualifying purchases. We’ve chosen these providers not the other way around. Our decisions are based upon their corporate reputation and the quality of their offerings and pricing. Our recommendations regarding technology are reached without regard to financial compensation except in situations in which comparable products at comparable pricing are available from multiple sources. In this limited case, we support our sponsors because our sponsors support us.
BOGO Bonaza: Enjoy state-of-the-art VoIP service with a $10 credit and half-price SIP service on up to $500 of Skyetel trunking with free number porting when you fund your Skyetel account. No limits on number of simultaneous calls. Quadruple data center redundancy. $25 monthly minimum spend required. Tutorial and sign up details are here.
The lynchpin of Incredible PBX 2020 and beyond is ClearlyIP components which bring management of FreePBX modules and SIP phone integration to a level never before available with any other Asterisk distribution. And now you can configure and reconfigure your new Incredible PBX phones from the convenience of the Incredible PBX GUI.
VitalPBX is perhaps the fastest-growing PBX offering based upon Asterisk with an installed presence in more than 100 countries worldwide. VitalPBX has generously provided a customized White Label version of Incredible PBX tailored for use with all Incredible PBX and VitalPBX custom applications. Follow this link for a free test drive!
Special Thanks to Vitelity. Vitelity is now Voyant Communications and has halted new registrations for the time being. Our special thanks to Vitelity for their unwavering financial support over many years and to the many Nerd Vittles readers who continue to enjoy the benefits of their service offerings. We will keep everyone posted on further developments.
Some Recent Nerd Vittles Articles of Interest…
Thanks for the script and the tutorial. I wonder though:
Does this require a new xmpp module? I’m not able to get it to work. When I create a symbolic link to the generated xmpp_oauth.conf file (because the config is not found otherwise) I get the same types of ‘Invalid XML’ errors from the xmpp module that I use to get before enabling ‘less secure apps’ for the relevant google account.
Stuff works if I don’t use the refresh token and I set the gv account to use ‘less secure apps’ mode.
[WM: If you went through the steps in the tutorial, you installed a new XMPP module. No symbolic link creation is required on your part. If "stuff works if [you] don’t use the refresh token," then it sounds like you either skipped a step along the way or something came unglued during the upgrade procedure.]
I see that in the script now. I already had a gv.conf file which is checked – so the module was was not compiled. Thanks for the response and again for the script and tutorial.