I am looking for a way to bypass PSTN when calling my own DIDs. Since a2billing.php|2|did hangups if DID is not found I put together asterisk dial plan. I have also incorporated a channel limit per server. The dialplan works for US based DIDs and needs to be tweaked for any other country.
[a2billing] exten => _X.,1,Set(GROUP()=limit) exten => _X.,n,GotoIf($[${GROUP_COUNT()}>300]?103) exten => _X.,n,NoOp,${CALLERID(all)} exten => _X.,n,MYSQL(Connect connid localhost user password mya2billing) exten => _X.,n,MYSQL(Query resultid ${connid} select `did` from `cc_did` where `did`='${EXTEN:1}') exten => _X.,n,MYSQL(Fetch foundRow ${resultid} did) exten => _X.,n,GotoIf($["${foundRow}" = "1"]?localdid) exten => _X.,n,NoOp(${did}) exten => _X.,n,Goto(pstn,${EXTEN},1) exten => _X.,n(localdid),Goto(local-did,${EXTEN:1},1) ;exten => _X.,n,MYSQL(Clear ${resultid}) ;exten => _X.,n,MYSQL(Disconnect ${connid}) exten => _X.,103,SetVar(DIALSTATUS=CHANUNAVAIL) exten => _X.,n,Hangup
[did] exten => _X.,1,NoOp,${CALLERID(all)} exten => _X.,2,DeadAGI(a2billing.php|2|did) exten => _X.,3,Hangup
[local-did] exten => _X.,1,NoOp,${CALLERID(all)} exten => _X.,n,MYSQL(Clear ${resultid}) exten => _X.,n,MYSQL(Disconnect ${connid}) exten => _X.,n,DeadAGI(a2billing.php|2|did) exten => _X.,n,Hangup
[pstn] exten => _X.,1,NoOp,${CALLERID(all)} exten => _X.,n,MYSQL(Clear ${resultid}) exten => _X.,n,MYSQL(Disconnect ${connid}) exten => _X.,n,DeadAGI(a2billing.php|1) exten => _X.,n,Hangup
[default] include => a2billing exten => _X,1,Goto(a2billing,_X.,1)
The dialplan is nowhere close to be perfect and if anyone have any ideas how to make it better please let me know.
|