Lips from Google Well, it was another painful week on the Google Voice front for Asterisk® lovers. We would hasten to add that none of the pain was induced by Google. This time around it was Gizmo5 initiating the daily gear shifting. What started out last Monday as a free, unlimited Google Voice service quickly morphed into a 20 minute call, and then a 3 minute call, and then 2¢ per minute for Google Voice calls. No notice to the early adopters, of course. So they'd only learn about all of this when the funds in their Gizmo5 accounts were exhausted. Ouch! We have gotten an explanation from Michael Robertson at Gizmo5 as have others. But we're not in a position to verify any of the information so we're not inclined to just pass it on again. Burn me once, shame on you. Burn be twice, shame on me.

So let's turn the page today. There were security issues with the Gizmo5 solution last week, and you can read all about it in last week's article if you're interested. Suffice it to say, it appears there was no business relationship between Google and Gizmo5 so it was a really bad idea to be providing your gMail credentials to Gizmo5 since they also are tied to Google Checkout and other Google services.

Aug. 4 Update: The solution outlined below works reliably. But it has a couple of limitations which have been alluded to in the comments. Specifically, there is not a simple way to terminate a call to either an answering machine or an unanswered call. In addition, two dedicated DIDs are required to get inbound and outbound calls working through Google Voice. Based upon user suggestions and a few new tricks of our own, we now have a tweaked solution that requires only a single DID and that properly terminates calls when either party hangs up. Please read the updated article here. Our apologies... recalling the Wild West adage: "Pioneers are the ones with the arrows in their backs."

Today's solution is much more secure. Your Google Voice credentials are stored on your Asterisk server and are only used to make HTTP requests to Google Voice to initiate calls. If you're just getting started with Google Voice, be aware that you do not have to use your gMail address to set up your Google Voice account, but it's a good idea particularly if you plan to use other Google services. For example, if you get an Android cellphone (as we did last week), the entire phone setup is configured around your gMail address and password. And, to integrate Google Voice into the phone, you need a gMail address that's tied to your Google Voice account. Once you make that link, all U.S. calls on your Android phone are free if they're routed out through Google Voice. Very slick!

Let's get down to business now. We promised you a secure Google Voice interface to Asterisk this week, and we've got it. As this is written, the only restrictions on use to make free U.S. calls are those set forth in the Google Voice Terms of Service. When we're finished today, you'll be able to pick up any Asterisk phone and dial GV-678-123-4567 to make a free call to anywhere in the United States and Canada. The call will go directly from your Asterisk server, through Google Voice, to the destination number you specify. In short, there is no intermediary in completing the calls. Google obviously can change the terms of service but, until they do, you should have a stable and free provider for making and receiving calls within the United States.

Special Thanks. At the outset, we want to express our sincere appreciation to Jacob Feisley and Paul Marks for their pioneering work on a Python interface to Google Voice. We also stumbled upon another Python development project, Google Voice for Python. While we originally had planned to rely upon Jacob and Paul's script, we ultimately decided to implement pygooglevoice because of the additional flexibility it provided for down the road. With pygooglevoice, you not only can make Google Voice calls, but you also can send SMS messages with no muss or fuss. Jacob Feisley has now joined that project as well. So, our special tip of the hat goes to the entire Google Voice for Python development team. It's a terrific product as you will see.

Prerequisites. Today's setup requires a CentOS-based Asterisk aggregation with a current version of FreePBX. Be aware that today's solution requires Python 2.4 and reportedly will not work with Python 2.5 found in some Linux distributions. We've tested everything with PBX in a Flash and, on that platform, you're good to go. The install script should work equally well with the other CentOS-based Asterisk aggregations, but we haven't tested them. Be our guest, and let us know if you encounter any problems. Finally, a word of caution. We don't ordinarily distribute solutions using development tools we don't use. Our knowledge of Python wouldn't fill a thimble. We've made an exception today because of the extraordinary interest in Google Voice by the Asterisk community. But, if something comes unglued, we can't fix it. So have a backup plan in place just in case. 🙂

Today's New Design. Here's the new design. You obviously still need a free Google Voice account. If you don't have one, you can request an invite here. At last report, it's only taking about a week from application to invite which is really great news! Once you have a Google Voice account and phone number (Google has reserved a million of them so... not to worry!), then we'll set up a couple of forwarding phone numbers in your Google Voice account. You aren't actually going to use one of them, but it does have to be registered as one of your GV forwarding numbers. We'll explain in a minute. Unlike the previous SIP approach, you no longer have to configure your Google Voice account to forward all incoming calls to voicemail. As you may recall, this allowed you to call your Google Voice number and press a few keys to make an outbound call instead of listening to your voicemails. The new Python approach simulates the Google Voice click-to-dial web interface to place calls so it won't disturb the normal use of your Google Voice phone number. But you need a RingBack number for the calls.

With a little dialplan voodoo and pygooglevoice, we'll tell Asterisk to place a click-to-dial call using one of your Google Voice forwarding numbers. Then we'll stuff in the destination U.S. phone number. When you dial GV-678-1234567 from any of your Asterisk phones, Asterisk will connect both your extension and the called party to an Asterisk MeetMe Conference where you can chat as long as you like. The entire procedure is totally transparent both to the caller and the callee. And the sound quality is still great.

To use Asterisk for inbound calls through Google Voice, you can designate a second forwarding number in Google Voice that connects to one or more extensions on your Asterisk system. All you really need for this is any DID, but you'll need separate DIDs to handle inbound and outbound calls. We'd recommend free IPkall and SIPgate DIDs. For outbound calls, we'll point one of your DIDs that's registered with Google Voice to a special Google Voice MeetMe conference line on your PBX. For inbound calls, point the other DID registered with Google Voice to an extension or ring group on your Asterisk server. Since all of these calls are free, the area code of the two DIDs really doesn't matter because you're never going to publish the fact that they exist.

Update: See the comments to this article for a one-DID solution that can handle both inbound and outbound calls.

To get everything working today, there are four steps: (1) configuring two Google Voice forwarding numbers to manage your outbound and inbound calls, (2) configuring FreePBX to route all outbound calls with a GV prefix to your special Google Voice dialplan context, (3) setting up a reserved MeetMe conference to manage your outbound Google Voice calls, and (4) running our install script which adds the dialplan code for Google Voice outbound dialing with your credentials and puts the Python application into place on your server. It sounds more complicated than it is. So hang on to your hat. Here we go!

Getting Two DIDs. Before you can use Google Voice with Asterisk, you'll need a couple of DIDs. As we indicated, we'll use one of the DIDs to handle the GV RingBack process when it places outbound calls. The other DID will be used to route incoming calls from Google Voice to your Asterisk server when people call your GV number. To get started, use the links above to obtain and configure the two DIDs. Then point each of them to an extension on your Asterisk system that can be used to verify your requests for the numbers.

The easiest method for setting these DIDs up is to create SIP URIs for the two DIDs on your Asterisk system. Then point each DID to a separate SIP URI on your server. Route each SIP URI to an Inbound Route in FreePBX where you can manage the destination for that DID's calls.

HINT: The entry in extensions_override_freepbx.conf would look something like this for a SIP URI called ipkall-1:

exten => ipkall-1,1,Goto(from-trunk,${DID},1)

Then you would create an inbound route named ipkall-1 using FreePBX and designate some existing extension on your server as the destination for these inbound calls.

When you set up the SIP forwarding for the DID at ipkall.com, you'd specify the SIP URI as:

ipkall-1@ipaddress_of_your-Asterisk_server

We've previously covered in detail how to do this so read the article if you need a refresher course. To reiterate, the area codes of these DIDs really don't matter because you're never going to give out either number. So use the free sources and save yourself some money. The real trick is you want to use DIDs with unlimited, free inbound calls. Both IPkall and SIPgate provide that functionality at no cost.

Google Voice Setup. Log into your Google Voice account and click Settings, Phones, Add Another Phone. Add the area code and phone number of both DIDs: the RingBack DID for outbound calls and the Destination DID for incoming calls. Remember, you'll need to be sure both DIDs are pointed to extensions on your PBX that you can answer since you have to go through Google's confirmation drill to successfully register each number. After the RingBack DID is confirmed, be sure you uncheck this Google Voice destination. You do not want incoming Google Voice calls routed to this DID because it is going to land in a MeetMe conference on your Asterisk system. We're only setting it up as a destination number in Google Voice so that we can use it for click-to-dial ringbacks.

The RingBack DID will ring whenever you place a GV-routed Outbound Call from any phone on your Asterisk system. Remember, we're using click-to-dial technology to make these calls. You just won't see it. So, once this DID has been set up in Google Voice and you've confirmed that it works, we're going to alter the destination of this DID's inbound route and redirect it to a dedicated MeetMe conference number to manage these calls. Whenever you place an outbound call through Google Voice, pygooglevoice will initiate the click-to-dial process and then our dialplan code will transfer both the caller and the called party to the same dedicated MeetMe conference. When the other party answers, you both can begin talking. The MeetMe conference will be transparent to both parties except you'll get music on hold if either party hangs up.

Integrating Google Voice into Asterisk and FreePBX. This setup lets you place a call through Google Voice from any Asterisk phone by dialing the GV prefix plus a 10-digit number. So, to place a call to President Obama in Washington through Google Voice, you'd dial 48-202-456-1111.

First, open FreePBX with a web browser and choose Setup, Trunks, Add Custom Trunk. Insert the following Custom Dial String on the form and Submit Changes and reload the dialplan:

local/$OUTNUM$@custom-gv

Next, choose Setup, Outbound Routes, Add Route and fill in the following entries on the form:


Route Name: GoogleVoice
Dial Pattern: 48|NXXNXXXXXX
Trunk Seq: local/$OUTNUM$@custom-gv

Next, choose Admin, Setup, Conferences, Add Conference. For the conference number, make up an obscure 5-digit number. Name the conference GV. Leave both PINs blank. For Conference Options, use the following. Once you've completed all of the entries, click Submit Changes and then reload your dialplan.

  • Join Message: None
  • Leader Wait: No
  • Quiet Mode: Yes
  • User Count: No
  • User join/leave: No
  • Music on Hold: Yes
  • Allow Menu: No
  • Record Conference: No

Finally, for the inbound route of the DID that will handle the RingBacks, change the inbound route destination for this DID to the MeetMe conference number you created above.

Save your changes and reload the Asterisk dial plan one more time to complete the setup.

Integrating pygooglevoice. Now we're ready to complete the setup by running our little script which loads pygooglevoice and sets up your dialplan in extensions_custom.conf. You'll need 4 pieces of information to run the script so write them down before you begin:

1. Your Google Voice email address
2. Your Google Voice password
3. Your 11-digit RingBack DID (16781234567)
4. MeetMe Conference Number for Outbound Calls

A word of caution: If you used a gMail address to set up your Google Voice account, it's possible to have different gMail and Google Voice passwords. For this to work, you'll need to enter your gMail password, not your Google Voice password (assuming they're different).

Now log into your Asterisk server as root and issue the following commands:

cd /root
wget http://bestof.nerdvittles.com/applications/gv/install-gv
chmod +x install-gv
./install-gv

Google Voice Speed Dials. For frequently called numbers, you can add speed dials by inserting entries in the [from-internal-custom] context of extensions_custom.conf that look like the example below where 333 is the speed dial number and 6781234567 is the area code and number to call. Be sure to reload your Asterisk dialplan to activate them.

exten => 333,1,Dial(local/6781234567@custom-gv,300)

Congratulations! You now have free U.S. calling on your Asterisk system using Google Voice with no gimmicks and no strings. Enjoy!

If you happen to be running Asterisk 1.6, there's a simpler way to bridge your calls together without using the MeetMe conferencing trick. See this message thread in the PBX in a Flash Forum for details.

Finally, a word of caution. This transparent call design obviously only works for a single call at a time. There are no safeguards to prevent multiple calls, but that may violate the Google Voice terms of service anyway. And, even if Google Voice put the second call through, the end result would be that all four of you (2 callers + 2 destinations) would end up in the same conference. So much for privacy.



Need help with Asterisk? Visit the PBX in a Flash Forum.
Or Try the New, Free PBX in a Flash Conference Bridge.


whos.amung.us If you're wondering what your fellow man is reading on Nerd Vittles these days, wonder no more. Visit our new whos.amung.us statistical web site and check out what's happening. It's a terrific resource both for us and for you.


 

Special Thanks to Our Generous Sponsors

FULL DISCLOSURE: 3CX, RentPBX, Amazon, Vitelity, DigitalOcean, Vultr and others provide financial support to Nerd Vittles and our open source projects through advertising or referral revenue. We’ve chosen these providers not the other way around. Our decisions were based upon their corporate reputation and the quality of their offerings and their pricing. Our technology recommendations are reached independently of financial considerations 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.

Awesome Vitelity Special. Vitelity has generously offered a terrific discount for Nerd Vittles readers. You now can get an almost half-price DID from our special Vitelity sign-up link. If you're seeking the best flexibility in choosing an area code and phone number plus the lowest entry level pricing plus high quality calls, then Vitelity is the hands-down winner. Vitelity provides Tier A DID inbound service in over 3,000 rate centers throughout the US and Canada. When you use our special link to sign up, Nerd Vittles gets a few shekels down the road to support our open source development efforts while you get an incredible signup deal as well. The going rate for Vitelity's DID service is $7.95 a month which includes up to 4,000 incoming minutes on two simultaneous channels with terminations priced at 1.45¢ per minute. Not any more! For our users, here's a deal you can't (and shouldn't) refuse! Sign up now, and you can purchase a Tier A DID with unlimited incoming calls and four simultaneous channels for just $3.99 a month. To check availability of local numbers and tiers of service from Vitelity, click here. NOTE: You can only use the Nerd Vittles sign-up link to order your DIDs, or you won't get the special pricing! Vitelity's rate is just 1.44¢ per minute for outbound calls in the U.S. There is a $35 prepay when you sign up. This covers future usage. Any balance is refundable if you decide to discontinue service with Vitelity.


Some Recent Nerd Vittles Articles of Interest...

Be Sociable, Share!

Tags:

This article has 26 comments

  1. Works like a charm, great job!

  2. Thank you! Despite having multiple nodes prone to failure in between, this solution is beneficial for personal usage and seems promising.

    I know a lot of people are eagerly waiting for Google to give us plain and simple SIP access, but until then lets hope they keep don’t get the urge to lock us out somehow like they did with SIP:5061.

    As usual, great article, elaborate details. Keep up the good work !

  3. Let me know if I’m wrong, I think we may not need two DID to do this, a single DID will be sufficient. To do this trick: since GV send GV# caller ID so we can capture this on our inbound route to route to the conference. Just need to make sure that the General setting in google voice for Caller ID shows Display Caller’s number instead of Display my Google Voice number.

    So in the inbound route, if the CID on that DID match GV#, point that to your unique conference, otherwise, point it to your inbound extension.

    It depends whether the RingBack calls display the number of the person being called or the GV main number. If it’s the latter, it would work. But I suspect it’s going to show the number of the person being called. Try it and let us know.]

  4. Mine shown the callback# from my GV#. It does work on my instance.

  5. Another way to implement this that has worked well for me, but would require modifying the default install. (I wrote my own hack in PHP that does the web magic to initiate the call)

    1. Add dialplan for outgoing calls to call the AGI script and then Park()
    2. Set your parking lot to use extention 8 (this is for brevity)
    3. Set the incoming dialplan for (your_line/gvoice_num) to Wait(3) and then ParkedCall(8)

    my extensions_custom looks like this:

    [into_parked]
    exten => 1747XXXXXXX/801XXXXXXX,1,Wait(2)
    exten => 1747XXXXXXX/801XXXXXXX,2,ParkedCall(8)

    [call_gvoice]
    exten => _X.,1,AGI(gvoice/agiGVoice.php|${EXTEN})
    exten => _X.,2,Park(8)

    When you call out, you’ll get a dealy while it logs on and tells gvoice to make the call, and then you’ll hear "8″ (parking in spot 8), and then it will start ringing as the incoming call is connected to that parking lot.

    Has been working great for me for awhile; you can make multiple outgoing calls just fine, though you need multiple google voice numbers and you can’t make them at the same time.

  6. Hey Ward – nice work putting all this together, and a big thanks to the pygooglevoice team. The system works quite well!

    I’ve noticed the logical issue with dialing someone and getting their voicemail – is there a way to use meetme’s ‘wait for admin’ or similar feature to allow yourself to hang up the far end when you’re done leaving a message? As it currently stands, the conference stays up as long as the other user doesn’t hang up – in this example, AT&T or Verizon’s voicemail system.

    Thoughts?

    Obviously not a deal-killer. Really great work everyone!

    Ward – I’m still ‘working on’ (read: thinking about working on) that OpenVPN tutorial for you…

  7. Can it pass inbound DTMF tones? Example can I direct GV/IPKall to my IVR and have it except DTMF to move through options?

  8. FYI — I requested a Google Voice invite July 27 and recevied my invite July 30.

    Good news for anyone who hasn’t yet submitted an invite request — looks like the turn-around time has continued to shrink!

  9. Newbie question.

    "As this is written, the only restrictions on use to make free U.S. calls are those set forth in the Google Voice Terms of Service." Doesn’t it also depend on the free service provided by either IPKall or SIPgate? Don’t they provide the gateway functionality between PSTN and SIP?

    In the Gizmo model, Google Voice is acting as gateway to bridge PSTN and SIP domain. With this new design, the DID numbers entered in Google Voice are regular PSTN numbers hence the inbound call made by Google is through PSTN, then switched into SIP by IPKall or SIPgate.

    [WM: You’re correct. IPkall, at least, has been at this a very long time and is also an ILEC which means they get revenue from the caller every time a call is placed to one of their DIDs.]

  10. Ward, Thanks for the excellent article. I am working on installing it myself, but something does not quite line up. When Click2call is done from the website, the system allows one to pick which number the call will be received on. When that number has the call coming in, the CallerID information is your GV. I believe this has been alluded to in other comments, but I also wanted to mention that this does not need to be limited to US calls. While non-US calls will be paid for out of your balance, it should not prevent one from calling non-US numbers. (appropriate dialplan updates would be needed, but that is left as an exercise for the reader)

  11. I have discovered one issue that I am not sure how to address. I called someone today that does not have an answering machine. There is no timeout so it continues to ring and ring on my conference. If I attempt to make another call, it connects in the conference and I continue to hear the ringing from first call. I have to manually kill it. Any suggestions?

    [WM: That is an issue as are answering machines. Stay tuned. Refinements are in the works.]

  12. Great job! Here’s my dialplan entry for the dialback. This allows a single DID for both incoming and outgoing and the meetme section is protected against an outside caller from connecting after the outgoing call is initiated but before GV has made the callback.

    exten => ${SIPGATE},1,MeetMeCount(4356,mmCount)
    exten => ${SIPGATE},n,GotoIf($["${mmCount}" != "1″]?incoming,s,1)
    exten => ${SIPGATE},n,GotoIf($["${CALLERID(num)}" != "${MYGVNUMBER}"]?incoming,s,1)
    exten => ${SIPGATE},n,MeetMe(4356,1wFqx)
    exten => ${SIPGATE},n,Hangup()

  13. Is there a way to force the termination of the conference when you end the call? I do see a potential security issue here. If a called party does not hang up after the call and you make another call the previously called party could eavesdrop on the call.

    [WM: That is a shortcoming with the MeetMe conference approach unless you check your Active Channels. A refinement is underway. Stay tuned!]

  14. I originally had used an IPKall number as my "dialback" number, but I don’t get real callerid from IPKall – just their 206 area code number. I switched to a SipGate number and I received real callerid of callers calling my GV number, and I get my GV number as callerid on the ‘dialback’ call. So – with SipGate you can use a single number, but not IPKall (by my experience, anyway).

    [WM: Thanks. We’re incorporating that into the "refinement" article as well.]

  15. Here is my solution to the voicemail and answering machine problem. It will automatically end the call when you hang up your home phone. I tested this by calling my cell phone and then hanging up. Before the fix, the cell phone received the hold music. Afterwards, the cell showed Call Ended. This may not be the most polished or even the best approach to this problem as I am 100% new to Asterisk and PBXs in general.

    After some research I discovered that you can create a conference with an "x" option which will end the conference when there are no "special" users left. I created two different extensions in extensions_custom.conf. The first extension is where the incoming callback from your GV number is sent. This joins the conference with options Mqx. M for music on hold enabled, q for quiet mode, and x to end the conference with no special users are left.
    Then I created a second extension that my home phone extension is sent two after the ringback is initiated. This dumps the home phone into the same conference, but with the "A" flag which sets you as special user. When you hang up, the other person is ended. It even works with call waiting. I was able to flash and answer another call, and the waiting caller received music on hold until I came back. When I hung up, the conference ended. I will post back with some specific code.

  16. I’ve been trying to get this to work, but I’m confused with the integration of the two DIDs and how to configure it. I’ve got one of the DID trunks running, but the guide here just seems a little vague for someone who has not had a lot of experience with this.

    [WM: See the updated article. Much simpler.]

  17. I forgot to mention that this parking lot method will solve the problem Terry and Tony mentioned above. This way the called party will be disconnected when you disconnect the line.

  18. Here is my solution for properly terminating calls when you hang up. If you use call waiting, the person is put on hold and they hear the music, if you hang up, the call is ended. Instructions can be found here:

    http://muffinworld.net/freepbx/auto_end_conference_instructions.txt

    I’m curious to see how you solved this, Ward. Don’t make us wait until tomorrow!

  19. Well, thank you very much for the amazing approach using pythong and Meetme. After playing for a while, finally I got it work (*).

    I also read other comments about Meetme not hangup, and how to make 2 concurrent calls or more. Here is my solution:

    Note: My below instruction will allow you to use 2 concurrent calls through GV. Hangup issue with Meeetme also be resolved.

    Requiremetns: 2 GV accounts with 2 callback Sipgate (SG) numbers.

    0. Run the setup script install-gv

    1. Create each inbound 1-DID rule for each pair of GV-SG.

    2. Create 2 Conference Rooms, say 48001 & 48002 via FreePBX

    3. Edit extensions_override_freepbx.conf, and add these lines:

    ;——————–start
    [ext-meetme]
    exten => 48001,1,Macro(user-callerid,)
    exten => 48001,n,Set(MEETME_ROOMNUM=48001)
    exten => 48001,n,GotoIf($["${DIALSTATUS}" = "ANSWER"]?USER)
    exten => 48001,n,Answer
    exten => 48001,n,Wait(1)
    exten => 48001,n(USER),Set(MEETME_OPTS=qx)
    exten => 48001,n,Goto(STARTMEETME,1)
    exten => 48001,hint,MeetMe:48001

    exten => 48002,1,Macro(user-callerid,)
    exten => 48002,n,Set(MEETME_ROOMNUM=48002)
    exten => 48002,n,GotoIf($["${DIALSTATUS}" = "ANSWER"]?USER)
    exten => 48002,n,Answer
    exten => 48002,n,Wait(1)
    exten => 48002,n(USER),Set(MEETME_OPTS=qx)
    exten => 48002,n,Goto(STARTMEETME,1)
    exten => 48002,hint,MeetMe:48002
    ;———————end

    Note: The reason for this step is to add an ‘x’ option to MEETME_OPTS.

    4. Edit extensions_custom.conf, section [custom-gv]. Delete/comment out ALL the existing lines in this context, then add:

    ;————–start
    exten => _X.,1,Wait(1)
    exten => _X.,n,Playback(pls-wait-connect-call)

    ;room 1, GV acc 1
    exten => _X.,n,Set(ACCTNAME=GVacc1)
    exten => _X.,n,Set(ACCTPASS=****)
    exten => _X.,n,Set(RINGBACK=SGNo1)
    ;exten => _X.,n,Set(GVCONFNO=48001)
    exten => _X.,n,Set(GVCONFNO=48001)
    ;—————–

    ;—–Select the available room
    exten => _X.,n,MeetMeCount(48001,mmCount)
    exten => _X.,n,GotoIf($["${mmCount}" = "0″]?ROOMREADY)

    ;—————–room 2, GV acc 2
    exten => _X.,n,Set(ACCTNAME=GVacc2)
    exten => _X.,n,Set(ACCTPASS=****)
    exten => _X.,n,Set(RINGBACK=SGNo2)
    exten => _X.,n,Set(GVCONFNO=48002)
    ;—————–

    exten => _X.,n(ROOMREADY),System(gvoice -e ${ACCTNAME} -p ${ACCTPASS} call ${EXTEN} ${RINGBACK})
    exten => _X.,n,GotoIf($["${DIALSTATUS}" = "ANSWER"]?USER)
    exten => _X.,n,Answer
    exten => _X.,n,Wait(1)
    exten => _X.,n(USER),Set(MEETME_OPTS=Aq)
    ;start Meetme
    exten => _X.,n,MeetMe(${GVCONFNO},${MEETME_OPTS},${PIN})
    exten => _X.,n,Hangup

    Then reload your asterisk server, and there you go.

    This is the example of 2 concurrent calls, you can edit to have n concurrent calls with n pairs of GV-SG

    (*) One of my Google Voice has problem with Sipgate account. GV can reach SG, but the call does not pass to Asterisk. Tried with other SG accounts with the same problems. I have to use another GV acc and it works properly

    Best regards,

    Bao Nguyen.
    nttranbao

  20. I forgot, the python script seems not to work with Gmail passwords that have "blank" in them, like ‘hello 123’

  21. I just posted the instructions how to solve "hangup" problem by using ‘x’ and ‘A’ option in Meetme().

    For 2 or more concurrent calls, we can use MeetMeCount to check if the conference is available. If not, go to next available room.

    Bao Nguyen.

  22. Many thanks for this great article! I’ve got it working now (using the parking method), and it works great!

    However, I did have to make a tweaks to the script for stability (asterisk would crash and re-start when I tried the custom dialplan) and wanted to share with others who might have same problem. This could be a non issue on faster PCs (I’m using a slow laptop).

    In the [custom-park] script, I had to change the first line to Wait(5) instead of Wait(2). I don’t know what the parameter does.. Does it increase the delay time?

    [WM: It does increase the delay. We already had changed it to 4 to address another issue on some systems, but thanks.]

  23. Thanks for this idea. My setup is different, so it took a few minutes of tweaking to get it going. I’m running Asterisk 1.4x on Ubuntu, and I prefer (as everyone should! 😉 AEL for my dialplan.

    I ran apt-get to update my python packages and install the pyinstaller. pygooglevoice installed without issues over that. I confirmed that it was working by running from command-line.

    Then I added the following to my extensions.ael.
    in globals{}:
    GV8_PARK=720;
    GV8_NUM=888xxxxxxx;
    GV8_ACCT=jay@xxx.net;
    GV8_PASS=xxxx;
    GV8_RING=1555xxxxxx;

    New context:
    context googlevoice8 {
    _1NXXNXXXXXX =>
    {
    Ringing();
    System(gvoice -e \${GV8_ACCT} -p \${GV8_PASS} call \${EXTEN} $
    Set(PARKINGEXTEN=\${GV8_PARK});
    Park();
    }

    and in my inbound-context:
    555xxxxxxx =>
    { if("${CALLERID(number)}"="${GV8_NUM}") {
    ParkedCall(${GV8_PARK});
    } else {
    &exec-incoming(us,2:,${EXT_ALL},4000,,yes);
    }
    }

  24. How can I connect the PAP2NA device to Asterisk and make this work with the GV. Also, screenshots are nice for us simpletons 😛

  25. Hi I have a regular digital NEC pbx . Currently have several atas and gateways that provide voip lines thru fxs ports that are plugged into the pbx just like regular pots lines would be . If i set up an asterisk server to enable outbound GV calling, could i somehow attach an ATA and attach that to my PBX as a regular fxs port, the same as my other voip lines ?

    [WM: Absolutely.]

  26. Google Voice Service Takes Aim At Telephone Companies: It converts voice mails to text, and even better…nice article