Frequently Asked Question
It is important to correctly configure, and limit outbound routes on your FreePBX switch. To do this we use outbound routes, and it's dial patterns which takes a dial pattern that is allowed to use the route, and then optionally does some number translation, E.164 for example.
In this example, we are carefully allowing numbers starting with 01, 02, 03, 05, 07, 080 and 084 and therefore excluding premium rate numbers. We then strip off the 0 and add 44 which is often required by a SIP Trunking provider - but not always.
NOTE: There are 'premium' rate numbers hidden within ranges now in the UK, especially some fo the 03xx numbers and now even 05xx, but these are not the premium rate 09xx or 089x numbers - so just be aware.
prepend | prefix | match pattern |
44 | 0 | 1 |
44 | 0 | 2 |
44 | 0 | 3 |
44 | 0 | 5 |
44 | 0 | 7 |
44 | 0 | 80 |
44 | 0 | 84 |
This will build a route in /etc/extensions_additional.conf that looks like this:
[outrt-2] ; National
include => outrt-2-custom
exten => _01.,1,Gosub(macro-user-callerid,s,1(LIMIT,EXTERNAL))
exten => _01.,n,Gosub(sub-record-check,s,1(out,${EXTEN},force))
exten => _01.,n,ExecIf($[ "${CALLEE_ACCOUNCODE}" != "" ] ?Set(CHANNEL(accountcode)=${CALLEE_ACCOUNCODE}))
exten => _01.,n,Set(_ROUTEID=2)
exten => _01.,n,Set(_ROUTENAME=National)
exten => _01.,n,Set(MOHCLASS=${IF($["${MOHCLASS}"=""]?default:${MOHCLASS})})
exten => _01.,n,Set(_CALLERIDNAMEINTERNAL=${CALLERID(name)})
exten => _01.,n,Set(_CALLERIDNUMINTERNAL=${CALLERID(num)})
exten => _01.,n,Set(_EMAILNOTIFICATION=FALSE)
exten => _01.,n,Set(_NODEST=)
exten => _01.,n,Gosub(macro-dialout-trunk,s,1(16,44${EXTEN:1},,off))
exten => _01.,n,Gosub(macro-outisbusy,s,1())
exten => _02.,1,Gosub(macro-user-callerid,s,1(LIMIT,EXTERNAL))
exten => _02.,n,Gosub(sub-record-check,s,1(out,${EXTEN},force))
exten => _02.,n,ExecIf($[ "${CALLEE_ACCOUNCODE}" != "" ] ?Set(CHANNEL(accountcode)=${CALLEE_ACCOUNCODE}))
exten => _02.,n,Set(_ROUTEID=2)
exten => _02.,n,Set(_ROUTENAME=National)
exten => _02.,n,Set(MOHCLASS=${IF($["${MOHCLASS}"=""]?default:${MOHCLASS})})
exten => _02.,n,Set(_CALLERIDNAMEINTERNAL=${CALLERID(name)})
exten => _02.,n,Set(_CALLERIDNUMINTERNAL=${CALLERID(num)})
exten => _02.,n,Set(_EMAILNOTIFICATION=FALSE)
exten => _02.,n,Set(_NODEST=)
exten => _02.,n,Gosub(macro-dialout-trunk,s,1(16,44${EXTEN:1},,off))
exten => _02.,n,Gosub(macro-outisbusy,s,1())
exten => _03.,1,Gosub(macro-user-callerid,s,1(LIMIT,EXTERNAL))
exten => _03.,n,Gosub(sub-record-check,s,1(out,${EXTEN},force))
exten => _03.,n,ExecIf($[ "${CALLEE_ACCOUNCODE}" != "" ] ?Set(CHANNEL(accountcode)=${CALLEE_ACCOUNCODE}))
exten => _03.,n,Set(_ROUTEID=2)
exten => _03.,n,Set(_ROUTENAME=National)
exten => _03.,n,Set(MOHCLASS=${IF($["${MOHCLASS}"=""]?default:${MOHCLASS})})
exten => _03.,n,Set(_CALLERIDNAMEINTERNAL=${CALLERID(name)})
exten => _03.,n,Set(_CALLERIDNUMINTERNAL=${CALLERID(num)})
exten => _03.,n,Set(_EMAILNOTIFICATION=FALSE)
exten => _03.,n,Set(_NODEST=)
exten => _03.,n,Gosub(macro-dialout-trunk,s,1(16,44${EXTEN:1},,off))
exten => _03.,n,Gosub(macro-outisbusy,s,1())
exten => _05.,1,Gosub(macro-user-callerid,s,1(LIMIT,EXTERNAL))
exten => _05.,n,Gosub(sub-record-check,s,1(out,${EXTEN},force))
exten => _05.,n,ExecIf($[ "${CALLEE_ACCOUNCODE}" != "" ] ?Set(CHANNEL(accountcode)=${CALLEE_ACCOUNCODE}))
exten => _05.,n,Set(_ROUTEID=2)
exten => _05.,n,Set(_ROUTENAME=National)
exten => _05.,n,Set(MOHCLASS=${IF($["${MOHCLASS}"=""]?default:${MOHCLASS})})
exten => _05.,n,Set(_CALLERIDNAMEINTERNAL=${CALLERID(name)})
exten => _05.,n,Set(_CALLERIDNUMINTERNAL=${CALLERID(num)})
exten => _05.,n,Set(_EMAILNOTIFICATION=FALSE)
exten => _05.,n,Set(_NODEST=)
exten => _05.,n,Gosub(macro-dialout-trunk,s,1(16,44${EXTEN:1},,off))
exten => _05.,n,Gosub(macro-outisbusy,s,1())
exten => _07.,1,Gosub(macro-user-callerid,s,1(LIMIT,EXTERNAL))
exten => _07.,n,Gosub(sub-record-check,s,1(out,${EXTEN},force))
exten => _07.,n,ExecIf($[ "${CALLEE_ACCOUNCODE}" != "" ] ?Set(CHANNEL(accountcode)=${CALLEE_ACCOUNCODE}))
exten => _07.,n,Set(_ROUTEID=2)
exten => _07.,n,Set(_ROUTENAME=National)
exten => _07.,n,Set(MOHCLASS=${IF($["${MOHCLASS}"=""]?default:${MOHCLASS})})
exten => _07.,n,Set(_CALLERIDNAMEINTERNAL=${CALLERID(name)})
exten => _07.,n,Set(_CALLERIDNUMINTERNAL=${CALLERID(num)})
exten => _07.,n,Set(_EMAILNOTIFICATION=FALSE)
exten => _07.,n,Set(_NODEST=)
exten => _07.,n,Gosub(macro-dialout-trunk,s,1(16,44${EXTEN:1},,off))
exten => _07.,n,Gosub(macro-outisbusy,s,1())
exten => _080.,1,Gosub(macro-user-callerid,s,1(LIMIT,EXTERNAL))
exten => _080.,n,Gosub(sub-record-check,s,1(out,${EXTEN},force))
exten => _080.,n,ExecIf($[ "${CALLEE_ACCOUNCODE}" != "" ] ?Set(CHANNEL(accountcode)=${CALLEE_ACCOUNCODE}))
exten => _080.,n,Set(_ROUTEID=2)
exten => _080.,n,Set(_ROUTENAME=National)
exten => _080.,n,Set(MOHCLASS=${IF($["${MOHCLASS}"=""]?default:${MOHCLASS})})
exten => _080.,n,Set(_CALLERIDNAMEINTERNAL=${CALLERID(name)})
exten => _080.,n,Set(_CALLERIDNUMINTERNAL=${CALLERID(num)})
exten => _080.,n,Set(_EMAILNOTIFICATION=FALSE)
exten => _080.,n,Set(_NODEST=)
exten => _080.,n,Gosub(macro-dialout-trunk,s,1(16,44${EXTEN:1},,off))
exten => _080.,n,Gosub(macro-outisbusy,s,1())
exten => _084.,1,Gosub(macro-user-callerid,s,1(LIMIT,EXTERNAL))
exten => _084.,n,Gosub(sub-record-check,s,1(out,${EXTEN},force))
exten => _084.,n,ExecIf($[ "${CALLEE_ACCOUNCODE}" != "" ] ?Set(CHANNEL(accountcode)=${CALLEE_ACCOUNCODE}))
exten => _084.,n,Set(_ROUTEID=2)
exten => _084.,n,Set(_ROUTENAME=National)
exten => _084.,n,Set(MOHCLASS=${IF($["${MOHCLASS}"=""]?default:${MOHCLASS})})
exten => _084.,n,Set(_CALLERIDNAMEINTERNAL=${CALLERID(name)})
exten => _084.,n,Set(_CALLERIDNUMINTERNAL=${CALLERID(num)})
exten => _084.,n,Set(_EMAILNOTIFICATION=FALSE)
exten => _084.,n,Set(_NODEST=)
exten => _084.,n,Gosub(macro-dialout-trunk,s,1(16,44${EXTEN:1},,off))
exten => _084.,n,Gosub(macro-outisbusy,s,1())
DO NOT edit /etc/extensions_additional.conf as this will be overwritten every time you change something in FreePBX, instead edit /etc/extensions_custom.conf and add overrides there.
