Add Inzone handling - routing icoming calls based on dialed number and callerid.
Use _[0-9*+#]. in place of _. to avoid warnings in the log. Fix some errors with quotes Change default call type to macro for lastdialedtype.
This commit is contained in:
parent
642032dfe8
commit
66b15da9be
1 changed files with 79 additions and 25 deletions
|
@ -25,6 +25,8 @@ init_dialplanconf() {
|
|||
return 0
|
||||
}
|
||||
|
||||
match_all="_[0-9*+#]."
|
||||
|
||||
dialplangeneral_list="static writeprotect canreinvite clearglobalvars"
|
||||
dialplangeneral_list_ex="lastdialed lastdialedtype voiceboxext answerfirst dialtimeout allowtransfer international internationalout"
|
||||
|
||||
|
@ -137,25 +139,73 @@ add_dialplan_goto() {
|
|||
append dialplan_context_${context} "exten => $2,1,Goto($3,\${EXTEN},1)" "${N}"
|
||||
}
|
||||
|
||||
handle_inzone() {
|
||||
# TODO - Incoming zones.
|
||||
return 0
|
||||
dialplan_inzone_list="match caller goto"
|
||||
|
||||
valid_dialplan_inzone() {
|
||||
is_in_list $1 ${valid_inzone_list}
|
||||
return $?
|
||||
}
|
||||
|
||||
#generate_inzone() {
|
||||
#[local_Vista]
|
||||
#exten => _X.,1,Ringing()
|
||||
#exten => _X.,n,Dial(SIP/Nokia,5)
|
||||
#exten => _X.,n,Answer
|
||||
#exten => _X.,n,wait(1)
|
||||
#exten => _X.,n,Set(EXITCONTEXT=xyzzy)
|
||||
#exten => _X.,n,Dial(SIP/Nokia,15,rd)
|
||||
#exten => _X.,n,Hangup
|
||||
#[xyzzy]
|
||||
#exten => 1,1,Noop(xyzzy)
|
||||
#exten => 1,n,SayAlpha(b)
|
||||
#exten => 1,n,Hangup
|
||||
#}
|
||||
check_append_inzone() {
|
||||
local context="${1}"
|
||||
eval "local isadded=\"\${dialplan_add_inzone_${context}-0}\""
|
||||
if [ "$isadded" != "1" ] ; then
|
||||
eval "dialplan_add_inzone_${check}=1"
|
||||
append inzone_contexts "$context"
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
handle_inzone() {
|
||||
|
||||
context_name=${1}
|
||||
check_append_inzone ${context_name}
|
||||
|
||||
option_cb(){
|
||||
case $1 in
|
||||
goto) eval "inzone_${context_name}_goto=\"\$2\"" ;;
|
||||
match_ITEM*|match) append inzone_${context_name}_match "$2" " " ;;
|
||||
caller_ITEM*|caller) append inzone_${context_name}_caller "$2" " " ;;
|
||||
include_ITEM*|include) append inzone_${context_name}_include "$2" " " ;;
|
||||
match_LENGTH|caller_LENGTH|include_LENGTH) ;;
|
||||
*) logerror "Invalid Dialplan inzone option: $1" ;;
|
||||
esac
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
append_dialplan_inzone() {
|
||||
local file=$1
|
||||
for context in ${inzone_contexts} ; do
|
||||
for i in goto match caller include ; do
|
||||
eval "iz_$i=\"\${inzone_${context}_${i}}\""
|
||||
done
|
||||
if [ -z "${iz_goto}" ] ; then
|
||||
logerror "Missing goto for inzone: ${context}"
|
||||
elif [ -z "${iz_match}" -a -z "${iz_caller}" ] ; then
|
||||
logerror "Missing match for inzone: ${context}"
|
||||
else
|
||||
echo "${N}[${context}]" >> ${file}
|
||||
for curmatch in ${iz_include} ; do
|
||||
echo "include => ${curmatch}" >> $file
|
||||
done
|
||||
|
||||
local gotoline="Goto(${iz_goto},\${EXTEN},1)"
|
||||
[ -z "${iz_match}" ] && iz_match=${match_all}
|
||||
for curmatch in ${iz_match} ; do
|
||||
if [ -z "${iz_caller}" ] ; then
|
||||
echo "exten => ${curmatch},1,${gotoline}" >> $file
|
||||
else
|
||||
for curcaller in ${iz_caller} ; do
|
||||
echo "exten => ${curmatch}/${curcaller},1,${gotoline}" >> $file
|
||||
done
|
||||
fi
|
||||
done
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
append_dialplan_dialzone() {
|
||||
local file=$1
|
||||
|
@ -199,24 +249,25 @@ append_dialplan_dialzone() {
|
|||
if [ ! -z "${diallist}" ] ; then
|
||||
logdebug 2 "International: ${diallist}"
|
||||
while [ ! -z "$diallist" ] ; do
|
||||
cur=${diallist%%,*}
|
||||
nvar=${diallist#*,}
|
||||
cur="${diallist%%,*}"
|
||||
nvar="${diallist#*,}"
|
||||
|
||||
local curlen=`expr length ${cur}`
|
||||
local curlen=`expr length "${cur}"`
|
||||
if [ "$alwaysinternational" = "yes" ] ; then
|
||||
echo "exten => _${cur},1,Goto(${dialz}_dial,${addprefix}\${EXTEN:${curlen}},1)" >> $file
|
||||
else
|
||||
echo "exten => _${cur}.,1,Goto(${zonename}_check,${addprefix}\${EXTEN:${curlen}},1)" >> $file
|
||||
fi
|
||||
[ "$nvar" == "$diallist" ] && break
|
||||
diallist=${nvar}
|
||||
diallist="${nvar}"
|
||||
done
|
||||
|
||||
if [ "$alwaysinternational" != "yes" ] ; then
|
||||
logdebug 2 "Not Always International:"
|
||||
# Check for local country code
|
||||
echo "[${zonename}_check]" >> $file
|
||||
|
||||
local locallen=`expr length ${countrycode}`
|
||||
local locallen=`expr length "${countrycode}"`
|
||||
echo "exten => _${countrycode}X.,1,Goto(${localzone-default},${localprefix-0}\${EXTEN:${locallen}},1)" >> $file
|
||||
echo "exten => _X.,1,Goto(${dialz}_dial,${internationalprefix}\${EXTEN},1)" >> $file
|
||||
fi
|
||||
|
@ -269,7 +320,7 @@ append_dialplan_dialzone_out(){
|
|||
local lastparam="\${EXTEN}"
|
||||
local lastmacro=${lastdialed}
|
||||
local lastmacrotype=${lastdialedtype}
|
||||
[ -z ${lastdialedtype} ] && lastdialedtype=goto
|
||||
[ -z ${lastdialedtype} ] && lastdialedtype=macro
|
||||
|
||||
local jumpmacroline=
|
||||
gen_jumpmacro jumpmacroline "${ext}${en}" "" "${lastmacrotype}" "${lastmacro}" "${lastparam}"
|
||||
|
@ -375,7 +426,7 @@ append_dialplan_incoming(){
|
|||
enable_module func_callerid
|
||||
local lastparam="\${CALLERID(num)}"
|
||||
local lastmacrotype="${iz_lastcalltype}"
|
||||
[ -z "${iz_lastcalltype}" ] && lastmacrotype=goto
|
||||
[ -z "${iz_lastcalltype}" ] && lastmacrotype=macro
|
||||
local lastmacro=${iz_lastcall}
|
||||
append_jumpmacro "${context}" "${ext}${item}" "" "${lastmacrotype}" "${lastmacro}" "${lastparam}"
|
||||
item="n,"
|
||||
|
@ -383,7 +434,7 @@ append_dialplan_incoming(){
|
|||
if [ ! -z "${iz_missed}" ] ; then
|
||||
enable_module func_callerid
|
||||
local missedparam="\${CALLERID(num)}"
|
||||
[ -z "${iz_missedtype}" ] && iz_missedtype=goto
|
||||
[ -z "${iz_missedtype}" ] && iz_missedtype=macro
|
||||
|
||||
append_dialplan_context ${context} "${ext}${item}Set(lcsMissed=\${CALLERID(num)})"
|
||||
item="n,"
|
||||
|
@ -504,8 +555,11 @@ create_dialplanconf() {
|
|||
|
||||
append_dialplan_extensions "$file"
|
||||
|
||||
append_dialplan_inzone "$file"
|
||||
|
||||
append_dialplan_incoming "$file"
|
||||
|
||||
|
||||
# append_dialplan_lastcall "$file"
|
||||
|
||||
# Add all the contexts
|
||||
|
|
Loading…
Reference in a new issue