VoicePulse Connect FlexRate for FreePBX

I couldn’t find a how to for FlexRate and FreePBX so I played with their suggestions and it has worked well for the past 2 months.

Searches start with extensions_custom.conf before FreePBX’s extensions_additional.conf. I added the routing to capture numbers that don’t fit a FlexRate lookup and send back to the FreePBX routing. The FlexRate lookup needs 11 digits so I added the last few lines for 10 or 7 digit dialing. After lookup, I send each choice back to outrt so I can make changes from FreePBX. You can have the same trunks in both groups with a different priority for backup. You can also choose to send directly to a trunk.

add all below to extensions_custom.conf

add to - [from-internal-custom]

exten => _1800NXXXXXX,1,Goto(outrt-004-TollFree,${EXTEN},1)
exten => _1822NXXXXXX,1,Goto(outrt-004-TollFree,${EXTEN},1)
exten => _1833NXXXXXX,1,Goto(outrt-004-TollFree,${EXTEN},1)
exten => _1844NXXXXXX,1,Goto(outrt-004-TollFree,${EXTEN},1)
exten => _1855NXXXXXX,1,Goto(outrt-004-TollFree,${EXTEN},1)
exten => _1866NXXXXXX,1,Goto(outrt-004-TollFree,${EXTEN},1)
exten => _1877NXXXXXX,1,Goto(outrt-004-TollFree,${EXTEN},1)
exten => _1888NXXXXXX,1,Goto(outrt-004-TollFree,${EXTEN},1)
exten => _800NXXXXXX,1,Goto(outrt-004-TollFree,${EXTEN},1)
exten => _822NXXXXXX,1,Goto(outrt-004-TollFree,${EXTEN},1)
exten => _833NXXXXXX,1,Goto(outrt-004-TollFree,${EXTEN},1)
exten => _844NXXXXXX,1,Goto(outrt-004-TollFree,${EXTEN},1)
exten => _855NXXXXXX,1,Goto(outrt-004-TollFree,${EXTEN},1)
exten => _866NXXXXXX,1,Goto(outrt-004-TollFree,${EXTEN},1)
exten => _877NXXXXXX,1,Goto(outrt-004-TollFree,${EXTEN},1)
exten => _888NXXXXXX,1,Goto(outrt-004-TollFree,${EXTEN},1)
exten => _1NXXNXXXXXX,1,Goto(custom-VP-Flex,${EXTEN},1)
exten => _NXXNXXXXXX,1,Goto(custom-VP-Flex,1${EXTEN},1)
exten => _NXXXXXX,1,Goto(custom-VP-Flex,1301${EXTEN},1)

[custom-VP-Flex]
exten => _1NXXNXXXXXX,1,Set(OTHER_PROVIDERS_FLAT_RATE=0.012)
exten => _1NXXNXXXXXX,n,Set(VOICEPULSE_API_KEY=“insert your key”)
exten => 1NXXNXXXXXX,n,Set(VOICEPULSE_API_PREFIX=VOICEPULSE)
exten => _1NXXNXXXXXX,n,Macro(voicepulseflexrate,${VOICEPULSE_API_KEY},${EXTEN})
exten => _1NXXNXXXXXX,n,Verbose(The rate is ${VOICEPULSE_FLEXRATE})
exten => _1NXXNXXXXXX,n,GotoIf($[${VOICEPULSE_FLEXRATE} > ${OTHER_PROVIDERS_FLAT_RATE}]?${EXTEN}|700)
exten => _1NXXNXXXXXX,n,Goto(outrt-006-VP-OUT,${EXTEN},1) ;FreePBX out route or use your choice
exten => _1NXXNXXXXXX,700,Goto(outrt-007-out1,${EXTEN},1) ;FreePBX out route or use your choice

[macro-voicepulseflexrate] ; no change from VoicePulse
exten => s,1,Set(${VOICEPULSE_API_PREFIX}FLEXRATE=999)
exten => s,2,Set(${VOICEPULSE_API_PREFIX}FLEX_RATE=999)
exten => s,n,Set(VoicePulsePostData=ApiKey=${ARG1}&PhoneNumber=${ARG2})
exten => s,n,Set(VoicePulseResponse=${CURL(»https://connect.voicepulse.com/secure/se···tData})})
exten => s,n,Macro(voicepulseparseresponse,${VoicePulseResponse})

[macro-voicepulseparseresponse] ; no change from VoicePulse
exten => s,1,Set(VoicePulseTemp=${ARG1})
exten => s,n,Set(VoicePulseTemp=${CUT(VoicePulseTemp,>,2-)})
exten => s,n,Set(VoicePulseTemp=${CUT(VoicePulseTemp,>,2-)})
exten => s,n,Set(VoicePulseTemp=${CUT(VoicePulseTemp, s,n,Set(VoicePulseCounter=${FIELDQTY(VoicePulseTemp,~)})
exten => s,n,While($[${VoicePulseCounter} > 0])
exten => s,n,Set(VoicePulsePair=${CUT(VoicePulseTemp,~,${VoicePulseCounter})})
exten => s,n,Set(VoicePulseKey=${CUT(VoicePulsePair,=,1)})
exten => s,n,Set(VoicePulseValue=${CUT(VoicePulsePair,=,2)})
exten => s,n,Set(${VOICEPULSE_API_PREFIX}${VoicePulseKey}=${VoicePulseValue})
exten => s,n,Set(VoicePulseCounter=$[${VoicePulseCounter}-1])
exten => s,n,EndWhile()

Sample config - not for FreePBX:
https://connect.voicepulse.com/secure/Config.aspx

Key:
https://connect.voicepulse.com/secure/Apis.aspx