Monday, November 1, 2010

Asterisk 1.8 and native Google Voice support

Last week the Asterisk development team announced Asterisk 1.8's release with native support for Google Talk / Gmail calling.  By doing so, a lot of the hackery that was previously done with bridging and AGI dialers in my earlier posts can be axed.

Even though Asterisk 1.8 was released, I didn't see any developers jumping on creating OpenWRT packages, so I decided to do so myself.  I've produced packages for both ar71xx devices (like the one I detailed in earlier posts) as well as brcm-2.4 devices that the market is flooded with.

These packages can be found at
I've also submitted the packaging changes to a ticket for inclusion in a future OpenWRT release at

So for an ar71xx device, you would add this line to your /etc/opkg.conf:

  src/gz asterisk1.8

If you've got asterisk 1.6 installed, you'll need to remove all of the associated packages for it before proceeding.

opkg remove asterisk16-sounds asterisk16-res-musiconhold asterisk16-res-agi asterisk16-func-db asterisk16-format-g726 asterisk16-form
at-g729 asterisk16-codec-g726 asterisk16-codec-a-mu asterisk16-app-system asterisk16

For Asterisk 1.8, I think these are the only packages you'll need:

opkg install asterisk18 asterisk18-func-db asterisk18-res-musiconhold asterisk18-chan-gtalk asterisk18-res-rtp-asterisk

Configuration Files

Once installed, you need to add your google information to /etc/asterisk/gtalk.conf.  This configuration will dump my incoming gtalk calls directly to a context that will be defined as 'google-in'.

context=google-in ; Context to dump call into

[guest] ; special account for options on guest account


Next configure jabber information in /etc/asterisk/jabber.conf.  This setup will cause you to always be signed into jabber, so make sure to set yourself away and give an informative message to know that it's a computer signed in, not a human.

secret=(your password)
statusmessage=I am asterisk [*]

Lastly configure your /etc/asterisk/extensions.conf dialplan for the new inbound and outbound features.  This is built upon my previous dialplan.  It will support incoming sip or google talk/voice as well as outgoing SIP, toll free, and GV.

; --
; Inbound Calls
; --

; * This extension is where any external SIP calls should route to
exten => s,1,Set(CALLERID(name)=${DB(cidname/${CALLERID(num)})})
exten => s,n,Dial(SIP/101,10)
exten => s,n, Hangup
exten => 101, 1, Dial(SIP/101, 10)

; * From Google (superm1)
exten =>, 1, Dial(SIP/101, 180, D(:1))

; --
; Outbound Calls
; --

; * Default starting context for internal SIP devices
include => local-devices
include => tollfree
include => gv-outbound
include => dial-uri

; * These are for any local extensions we should be supporting
exten => _1, 1, Dial(SIP/101,10)

; * Toll free numbers (don't use GV for these)
exten => _411, 1, Dial(SIP/,60)
exten => _1800NXXXXXX,1,Dial(SIP/${EXTEN},60) 
exten => _1888NXXXXXX,1,Dial(SIP/${EXTEN},60) 
exten => _1877NXXXXXX,1,Dial(SIP/${EXTEN},60) 
exten => _1866NXXXXXX,1,Dial(SIP/${EXTEN},60)

; * Route the call using the google voice bridge
;append an area code if necessary
exten => _NXXXXXX,1,Set(CALLERID(dnid)=1512${CALLERID(dnid)})
exten => _NXXXXXX,n,Goto(1512${EXTEN},1)
;append a 1 if necessary
exten => _NXXNXXXXXX,1,Set(CALLERID(dnid)=1${CALLERID(dnid)})
exten => _NXXNXXXXXX,n,Goto(1${EXTEN},1)
;do our real dialing
exten => _1NXXNXXXXXX,1,Dial(Gtalk/superm1/${EXTEN}
exten => _+1NXXNXXXXXX,1,Dial(Gtalk/superm1/${EXTEN}

; * Dialing by SIP URL eg
exten => _[a-z].,1,Dial(SIP/${EXTEN}@${SIPDOMAIN},120,tr)
exten => _[A-Z].,1,Dial(SIP/${EXTEN}@${SIPDOMAIN},120,tr)
exten => _X.,1,Dial(SIP/${EXTEN}@${SIPDOMAIN},120,tr)

Advantages / Disadvantages
  • This configuration is far quicker and more like a real phone.  When you dial a number, it will be connected within seconds rather than 30's of seconds.
  • The quality seems better than the old way (and in theory should be less hops, and less latency)
  • You have to always be signed into Google Talk/Chat with this solution.  If people IM you and you aren't on a computer, then the IM is lost in your gmail history.
  • If you are signed into Gmail Chat and the computer supports video (has the plugin installed) then your SIP phone won't ring.
Thanks to Paul Jennings for helping to provide a quite functional configuration to get started here for me, as well as AST/Calling+using+Google for detailing all the options actually available to configure.

This post seems to be the post that people are linking to and reading mostly when setting up Asterisk 1.8.  Just want to make sure I mention, there have been improvements since this post (as detailed in other future blog postings).  To avoid having to relive the learning experience I did with my other improvements, my (scrubbed for passwords) configs are available at