Алгоритм такой: абонент А звонит на Циску. Циска кладёт трубку, перезванивает абоненту А и просит ввести номер абонента Б. Абонент А вводит номер и Циска звонит абоненту Б.
не удается перезвонить.. что посоветуете?
вот сам код:proc do_welcome {} {
global state
global prefix
global account
global uname
global pin
global btelnum
global telnum
#global returncode
#global param1
set ev [playPrompt param1 info [set prefix]_1.au]
set ev [authorize [ani] "" "TELNUM" [ani] info]
set returncode [getVariable radius returnCode]
set telnum [ani]
if { $ev == "authorized" } {
set ev [playPrompt param1 info [set prefix]_1.au]
set account [ani]
set uname [ani]
set pin [ani]
set btelnum 1
call close
set state timerr
return 0
}
if {$ev == "authorization failed"} {
set ev [playPrompt param1 info [set prefix]_2.au]
set state end
set btelnum 0
call close
return 0
}
}
proc do_timerr {} {
global prefix
utimer 10 do_CallBack
return 0
}
proc do_CallBack {} {
global state
global telnum
global new_guid
global guid
global ani
set callInfo(guid) $new_guid
set callInfo(incomingGuid) $guid
set callInfo(telnum) $ani
leg setup $ani callInfo
if {$ev == "active"} {
set state get_dust
return 0
}
else {
set state end
}
return 0
}
proc do_get_dest {} {
global state
global destination
global fcnt
global retryCnt
global promptFlag2
global prefix
global pound
global destBusy
global param3
global prompt
global newlist
global numbers
global len
global amt
global gender
global help
global amt
set amt [getVariable radius creditAmount]
# set amt [getVariable aaa h323-credit-amount creditAmount]
set prompt ""
if {$help == 0} {
lappend prompt "[set prefix]_enter_to_help.au"
lappend prompt "[set prefix]_or.au"
set help 1
}
lappend prompt "[set prefix]_enter_dest.au"
if {$fcnt == 0} {
if {$amt > 999999.99} {
if {$destBusy == 0} {
set ev [eval [list playPrompt param3 info ] $prompt]
} else {
set destBusy 0
set ev [playPrompt param3 info [set prefix]_dest_busy.au]
}
} elseif {$pound == 1} {
set pound 0
set ev [playPrompt param3 info [set prefix]_disconnect.au]
if {$destBusy == 0} {
set ev [eval [list playPrompt param3 info ] $prompt]
} else {
set destBusy 0
set ev [playPrompt param3 info [set prefix]_dest_busy.au]
}
} elseif {$destBusy == 1} {
set destBusy 0
set ev [playPrompt param3 info [set prefix]_dest_busy.au]
} else {
if {$destBusy == 0} {
set ev [eval [list playPrompt param3 info ] $prompt]
} else {
set destBusy 0
set ev [playPrompt param3 info [set prefix]_dest_busy.au]
}
}
} else {
if {$promptFlag2 == 1} {
set ev [playPrompt param3 info [set prefix]_reenter_dest.au]
}
if {$promptFlag2 == 2} {
set ev [playPrompt param3 info [set prefix]_author_fail.au]
}
if {$promptFlag2 == 3} {
set ev [playPrompt param3 info [set prefix]_no_dest_entered.au]
}
}
if {$ev == "collect success"} {
set destination $info(digits)
set state second_authorize
return 0
}
if {$ev == "collect aborted"} {
set state get_dest
return 0
}
if {$ev == "collect fail"} {
incr fcnt
set promptFlag2 1
if {$fcnt < $retryCnt} {
set state get_dest
} else {
set state collect_fail
}
return 0
}
if {$ev == "collect timeout"} {
incr fcnt
set promptFlag2 3
if {$fcnt < $retryCnt} {
set state get_dest
} else {
set state collect_fail
}
return 0
}
set state end
return 0
}
proc do_second_authorize {} {
global state
global destination
global account
global pin
global creditTime
global warnTime
global promptFlag2
global fcnt
global retryCnt
global prefix
global noPlay
global param2
global noTimeLimit
global len
global prompt
global newlist
global second_auth
global amt
global uname
set seperate [split $destination ""]
set seperatu [split $account ""]
# if {([lindex $seperatu 0] == 5)} {
# set utime "unlimet"
# } else {
set utime "nounlimet"
# }
if {([lindex $seperate 0] == 4) && ([lindex $seperate 1] == 9) && ([lindex $seperate 2] == 0)} {
set seperate [lreplace $seperate 0 2 49]
set destination [join $seperate ""]
}
if {([lindex $seperate 0] == 8) && ([lindex $seperate 1] == 1) && ([lindex $seperate 2] == 0)} {
set seperate [lreplace $seperate 0 2]
set destination [join $seperate ""]
}
if {([lindex $seperate 0] == 1) && ([lindex $seperate 1] == 0)} {
set seperate [lreplace $seperate 0 1]
set destination [join $seperate ""]
}
if {([lindex $seperate 0] == 8) && ([lindex $seperate 1] != 1)&& ([lindex $seperate 1] != 6)&& ([lindex $seperate 1] != 2)} {
set seperate [lreplace $seperate 0 0 7]
set destination [join $seperate ""]
}
if {([lindex $seperate 0] == 0) && ([lindex $seperate 1] == 0)} {
#Вход в меню
set state get_menu
set promptFlag2 0
return 0
}
# Проверка на длину набранного номера
set ev [authorize $account $pin "DESTIN" $destination info]
if { $ev != "authorized" } {
set ev [playPrompt param2 info [set prefix]_invalid_digits.au]
set state get_dest
return 0
}
set ev [authorize $account $pin $destination [ani] info]
set returncode [getVariable radius returnCode]
if {$returncode == 13} {
#allow user to make toll-free calls
set noTimeLimit 1
set state do_place_call
return 0
}
if {$returncode == 52} {
# Redirect to customer service using redirect number
set noTimeLimit 1
set state do_place_call
return 0
}
if {$ev == "authorized"} {
set creditTime [getVariable radius creditTime]
if {$utime == "unlimet"} {
if {$creditTime == "uninitialized"} {
set ev [ playPrompt param2 info [set prefix]_no_aaa.au]
set state end
} elseif {$creditTime == "umlimited"} {
set noTimeLimit 1
} elseif {[expr $creditTime - $warnTime] < 20} {
set noPlay 1
# do_creditTime_prompt
}
} else {
if {$creditTime == "uninitialized"} {
set ev [ playPrompt param2 info [set prefix]_no_aaa.au]
set state end
} elseif {$creditTime == "umlimited"} {
set noTimeLimit 1
} elseif {[expr $creditTime - $warnTime] < 20} {
set noPlay 1
do_creditTime_prompt
} else {
do_creditTime_prompt
}
}
set state do_place_call
return 0
}
if {$ev == "authorization failed"} {
incr fcnt
set promptFlag2 2
#play prompt base on return code
if {$returncode == 3} {
set ev [playPrompt param2 info [set prefix]_account_blocked.au]
set state end
}
if {$returncode == 4} {
set ev [playPrompt param2 info [set prefix]_zero_bal.au]
set noTimeLimit 1
set state do_place_call
}
if {$returncode == 5} {
set ev [playPrompt param2 info [set prefix]_card_expired.au]
set state end
}
if {$returncode == 9} {
set ev [playPrompt param2 info [set prefix]_dest_blocked.au]
set state end
}
if {$returncode == 7} {
set ev [playPrompt param2 info [set prefix]_blocked.au]
set state end
}
if {$returncode == 12} {
set ev [playPrompt param2 info [set prefix]_not_enuf.au]
set state end
}
if {$returncode == "Uknown variable name"} {
set ev [playPrompt param2 info [set prefix]_no_aaa.au]
set state end
}
if { $fcnt < $retryCnt } {
set state get_dest
} else {
set state second_authorize_fail
}
return 0
}
set state end
return 0
}
#proc connectboth { } {
#
# global incoming
# global outgoing
# global state
# connection create $incoming $outgoing
# set state do_place_call
# return 0
# }
proc do_place_call {} {
global state
global destination
global account
global prefix
global param2
global param4
#set number $info(digits)
# puts ">>>>>>>>>>SCRIPT SPRO 3.5<<<<<<<<<<<<< Destination -----> $destination"
set callInfo(accountNum) $account
set ev [placeCall $destination callInfo info]
if {$ev == "active"} {
set state active
return 0
}
if {$ev == "call fail"} {
set state place_fail
if {($info(code) == 28)} {
set ev [playPrompt param3 info [set prefix]_no_telnumber.au]
return 0
}
if {($info(code) == 3)} {
set ev [playPrompt param3 info [set prefix]_tel_not_available.au]
return 0
}
if {($info(code) == 18) ||($info(code) == 19)} {
set ev [playPrompt param3 info [set prefix]_no_answer.au]
return 0
}
if {($info(code) == 21) ||($info(code) == 34) ||($info(code) == 52) } {
set ev [playPrompt param3 info [set prefix]_overload.au]
return 0
}
if {($info(code) == 17) } {
set ev [playPrompt param3 info [set prefix]_dest_busy.au]
return 0
}
# if {($info(code) != 17) && ($info(code) != 28) && ($info(code) != 18) && ($info(code) != 19) && ($info(code) != 21) && ($info(code) != 34) && ($info(code) != 52) } {
set ev [playPrompt param3 info [set prefix]_temp_no_service.au]
# }
return 0
}
set state end
return 0
}
proc do_active_notimer {} {
global state
set ev [waitEvent]
while { $ev == "digit" } {
set ev [waitEvent]
}
set state end
return 0
}
proc do_active_last_timer {} {
global state
global warnTime
global creditTime
global fcnt
global noPlay
global prefix
global pound
if { $noPlay == 1} {
set ev [startTimer [expr $creditTime -1] info]
} else {
set ev [startTimer [expr $warnTime - 4] info]
}
while { $ev == "digit"} {
set ev [startTimer $info(timeLeft) info]
}
if { $ev == "longpound" } {
set fcnt 0
set noPlay 0
set pound 1
clearOutgoingLeg info
#set state first_authorize
set state get_dest
return 0
} elseif { $ev == "timeout" } {
clearOutgoingLeg info
set state out_of_time
} else {
set state end
}
return 0
}
proc do_active_timer {} {
global state
global warnTime
global creditTime
global prefix
global fcnt
global noPlay
global pound
global param4
set delay [expr $creditTime - $warnTime]
set ev [startTimer $delay info]
while {$ev == "digit"} {
set ev [startTimer $info(timeLeft) info]
}
if { $ev == "longpound" } {
set fcnt 0
set noPlay 0
set pound 1
clearOutgoingLeg info
#set state first_authorize
set state get_dest
return 0
}
if {$ev == "outgoing disconnected"} {
set fcnt 0
set pound 1
#set state first_authorize
set state get_dest
return 0
}
if { $ev == "timeout" } {
if {$noPlay == 1} {
do_active_last_timer
} else {
set ev [playPrompt param4 info [set prefix]_you_have_less_min.au]
do_active_last_timer
}
} else {
set state end
}
return 0
}
proc do_active {} {
global state
global creditTime
global warnTime
global noTimeLimit
if { ($noTimeLimit == 1) || ( $creditTime == "umlimited") ||
( $creditTime == "uninitialized") } {
do_active_notimer
} else {
if {$creditTime <$warnTime} {
do_active_last_timer
} else {
do_active_timer
}
}
return 0
}
proc do_out_of_time {} {
global state
global prefix
global param2
set ev [playPrompt param2 info [set prefix]_disconnect.au]
set ev [playPrompt param2 info [set prefix]_zero_bal.au]
set state end
return 0
}
proc do_first_authorize_fail {} {
global state
global prefix
global param2
set returncode [getVariable radius returnCode]
set ev [playPrompt param2 info [set prefix]_final.au]
set state end
return 0
}
proc do_second_authorize_fail {} {
global state
global prefix
global param2
set returncode [getVariable radius returnCode]
set ev [playPrompt param2 info [set prefix]_final.au]
set state end
return 0
}
proc do_collect_fail {} {
global state
global prefix
global param2
set ev [playPrompt param2 info [set prefix]_final.au]
set state end
return 0
}
proc do_place_fail {} {
global state
global destBusy
global help
set destBusy 0
set state get_dest
set help 0
return 0
}
#-------------------------------------------------------
# main
#
acceptCall
set fcnt 0
set count 0
set counter 0
set promptFlag 0
set promptFlag2 0
set noPlay 0
set prefix "audio/ru"
set pound 0
set destBusy 0
set noTimeLimit 0
set help 0
set uname 0
set param1(interrupt) true
set param1(abortKey) *
set param1(terminationKey) #
set param2(interrupt) true
set param2(abortKey) *
set param2(terminationKey) #
set param2(playComplete) true
set param3(interrupt) true
set param3(abortKey) *
set param3(terminationKey) #
set param3(dialPlanTerm) true
set param4(interrupt) true
set param4(abortKey) *
set param4(terminationKey) #
set param4(playComplete) true
set param4(insertMessage) true
#install params
set accountLen [getVariable config uidLen]
set pinLen [getVariable config pinLen]
set retryCnt [getVariable config retryCount]
set operatorNum [getVariable config redirectNumber]
set warnTime [getVariable config warningTime]
set preLanguage [getVariable radius preferredLang]
setVariable longPound true
set totalLang [getVariable local totalLanguages]
if {$totalLang == 0} {
set state end
return 0
} else {
set state welcome
}
while {$state != "end"} {
if {$state == "welcome"} {
do_welcome
} elseif {$state == "timerr"} {
do_timerr
} elseif {$state == "CallBack"} {
do_CallBack
} elseif {$state == "get_account"} {
do_get_account
} elseif {$state == "get_pin"} {
do_get_pin
} elseif {$state == "first_authorize"} {
do_first_authorize
} elseif {$state == "second_authorize"} {
do_second_authorize
} elseif {$state == "second_authorize_pass" } {
do_second_authorize_pass
} elseif {$state == "get_dest"} {
do_get_dest
} elseif {$state == "place_call"} {
do_place_call
} elseif {$state == "active"} {
do_active
} elseif {$state == "first_authorize_fail" } {
do_first_authorize_fail
} elseif {$state == "second_authorize_fail" } {
do_second_authorize_fail
} elseif {$state == "collect_fail" } {
do_collect_fail
} elseif {$state == "place_fail"} {
do_place_fail
} elseif {$state == "out_of_time"} {
do_out_of_time
} elseif {$state == "get_menu"} {
do_get_menu
# } elseif {$state == "deblock_account"} {
# deblock_account
# } elseif {$state == "do_deblock"} {
# do_deblock
# } elseif {$state == "block_account"} {
# block_account
# } elseif {$state == "do_block"} {
# do_block
} else {
break
}
}