ipkall offers you a free Washington State number. Unlike Grand Central, incoming ipkall calls can be perfectly forwarded to your Asterisk PBX (if you won't use gizmo to forward your calls to your PBX.
Oh, I checked forwarding over gizmo, but I'm sure you don't want to use it. They don't tell asterisk the caller number. And you can only use "exten => s,priroty,command". If I want to know who is calling me I have to login on grandcentral.com, which is not acceptable for me. With two gizmo accounts on your pbx you're lost. The documentation about integration of gizmo in asterisk looks kinda outdated. Other have the same problems, too.
GrandCentral has some bad behaviours. You can't turn off or change the voice
mail, which picks up the call after around 15 time ringing the phone.
Another big lack is that you need to accept every call by pressing "1".
If you can't accept the call by pressing "1" your asterisk PBX could screw
it up and you won't receive the call. The person calling will still on
the line. Using dtmfmode=rfc2833 won't work somehow (don't ask me why). You
need to set dtmfmode to inband, which means that the dtmf tone is generated
by the phone receiving the call. After using
dtmfmode=inbandin your sip.conf context for ipkall and accepting calls won't be a problem anymore.
Another more stressfull workaround would be using a computer generated DMTF tone like you can create with f.e. dialabc. Just a note to have this page documented.
Because always pressing "1" get's anoying and I can't handle call fallback well (without obtaining more ipkall numbers and using more as one dial plan) there's another way to handle calls with Asterisk. With this solution you can't use the GrandCentral voice mail anymore. The bad effect is that the caller still have to pay (as long as there's no free dial plan to your US number/area code) even if there's a free ring signal (generated by your Asterisk PBX):
[incomingipkall]
exten => h,1,Hangup
exten => ipkallnr,1,answer
exten => ipkallnr,2,wait(2)
exten => ipkallnr,3,SendDTMF(1)
exten => ipkallnr,4,dial(SIP/phone1&SIP/phone2,${ANSWER_TIMEOUT},tr)
exten => ipkallnr,5,NoOp(incomingipkall: noone picked up, forward the call)
exten => ipkallnr,6,Dial(SIP/${FORWARDNR},60,tr)
exten => ipkallnr,107,Hangup
Once in a while, gladefully close to never, it happens that Asterisk don't
pick up the call and the grand central mailbox answers. This will result
in an email if the person left a message. It doesn't happen often. I didn't
traced it yet. I guess its a problem between grand central and ipkall or
between ipkall and my PBX. It could also be, that SendDTMF transfers an
unclear "1" sound, based on network connectivity to ipkall. But I
haven't seen any hints for this yet.