Коллеги , день добрый.
Подскажите - аутентификацию проходит карточка нормально , радиус возвращает код 0 - типа Ок , но скрипт всё равно в дисконнект вываливается ((
00:13:38: RADIUS/ENCODE(00000015):Orig. component type = VOICE
00:13:38: RADIUS(00000015): Config NAS IP: 0.0.0.0
00:13:38: RADIUS/ENCODE(00000015): acct_session_id: 287
00:13:38: RADIUS(00000015): sending
00:13:38: RADIUS/ENCODE: Best Local IP-Address 81.xxx.xx.5 for Radius-Server 81.xxx.xx.222
00:13:38: RADIUS(00000015): Send Access-Request to 81.xxx.xx.222:1655 id 1645/11, len 186
00:13:38: RADIUS: authenticator 6F F0 60 C2 80 8F 1B 8B - A5 16 0D DD 1F 6C 40 1E
00:13:38: RADIUS: User-Name [1] 8 "010203"
00:13:38: RADIUS: User-Password [2] 18 *
00:13:38: RADIUS: Vendor, Cisco [26] 56
00:13:38: RADIUS: Conf-Id [24] 50 "h323-conf-id=69982A3E 47A611DB 800B000E 3846AC74"
00:13:38: RADIUS: Vendor, Cisco [26] 36
00:13:38: RADIUS: Cisco AVpair [1] 30 "h323-ivr-out=transactionID:5"
00:13:38: RADIUS: Calling-Station-Id [31] 9 "3365050"
00:13:38: RADIUS: NAS-Port-Type [61] 6 Async [0]
00:13:38: RADIUS: NAS-Port [5] 6 0
00:13:38: RADIUS: NAS-Port-Id [87] 15 "ISDN 3/0:D:10"
00:13:38: RADIUS: Service-Type [6] 6 Login [1]
00:13:38: RADIUS: NAS-IP-Address [4] 6 81.xxx.xx.5
00:13:38: RADIUS: Received from id 1645/11 81.xxx.xx.222:1655, Access-Accept, len 78
00:13:38: RADIUS: authenticator A3 21 13 A7 E2 52 79 87 - 2C C2 D5 BA BE EC C3 6A
00:13:38: RADIUS: Vendor, Cisco [26] 9
00:13:38: RADIUS: h323-return-code [103] 3 "0"
00:13:38: RADIUS: Vendor, Cisco [26] 11
00:13:38: RADIUS: h323-credit-amount [101] 5 "222"
00:13:38: RADIUS: Session-Timeout [27] 6 59
00:13:38: RADIUS: Reply-Message [18] 29
00:13:38: RADIUS: 51 74 79 20 75 6E 69 74 73 3A 30 20 20 6D 61 78 [Qty units:0 max]
00:13:38: RADIUS: 20 73 65 63 6F 6E 64 73 3A 36 30 [ seconds:60]
00:13:38: RADIUS: State [24] 3
00:13:38: RADIUS: 30 [0]
00:13:38: RADIUS(00000015): Received from id 1645/11
00:13:38: RADIUS/DECODE: parse VSA parts error
00:13:38: RADIUS/DECODE: convert VSA string; FAIL
00:13:38: RADIUS/DECODE: decoder; FAIL
00:13:38: RADIUS/DECODE: attribute h323-return-code; FAIL
00:13:38: RADIUS/DECODE: cisco VSA type 103; FAIL
00:13:38: RADIUS/DECODE: VSA; FAIL
00:13:38: RADIUS/DECODE: decoder; FAIL
00:13:38: RADIUS/DECODE: attribute Vendor-Specific; FAIL
00:13:38: RADIUS/DECODE: parse response op decode; FAIL
00:13:38: RADIUS/DECODE: Case error(no response/ bad packet/ op decode);parse response; FAIL
00:13:38: RADIUS/ENCODE(00000015):Orig. component type = VOICE
00:13:38: RADIUS(00000015): Config NAS IP: 0.0.0.0
00:13:38: RADIUS/ENCODE: Best Local IP-Address 81.xxx.xx.5 for Radius-Server 81.222.80.222
00:13:38: RADIUS: Received from id 1646/49 81.xxx.xx.222:1656, Accounting-response, len 20
Возможно, что у ВАс в RADIUS сервере проблема упаковки VSA, так как cisco не может decode.
Сделайте на RADIUS host tcpdump или на cisco - access list + debug ip.
Посмотрите tcpdump на Ethereal.
* VSA format :
* | 1 | 1 | 4 | 1 | 1 |
* |PW_VENDOR_SPECIFIC|length|vendor id|vsa type|length|
Обратите внимание на значения total_length, использование ntohl.
>00:13:38: RADIUS/DECODE: parse VSA parts error
>00:13:38: RADIUS/DECODE: convert VSA string; FAIL
>00:13:38: RADIUS/DECODE: decoder; FAIL
>00:13:38: RADIUS/DECODE: attribute h323-return-code; FAIL
>00:13:38: RADIUS/DECODE: cisco VSA type 103; FAIL
>00:13:38: RADIUS/DECODE: VSA; FAIL
>00:13:38: RADIUS/DECODE: decoder; FAIL
>00:13:38: RADIUS/DECODE: attribute Vendor-Specific; FAIL
>00:13:38: RADIUS/DECODE: parse response op decode; FAIL
>00:13:38: RADIUS/DECODE: Case error(no response/ bad packet/ op decode);parse response; FAIL
>00:13:38: RADIUS/ENCODE(00000015):Orig. component type = VOICE
>00:13:38: RADIUS(00000015): Config NAS IP: 0.0.0.0
>00:13:38: RADIUS/ENCODE: Best Local IP-Address 81.xxx.xx.5 for Radius-Server 81.222.80.222
>00:13:38: RADIUS: Received from id 1646/49 81.xxx.xx.222:1656, Accounting-response, len 20
>Возможно, что у ВАс в RADIUS сервере проблема упаковки VSA, так как
>cisco не может decode.
>Сделайте на RADIUS host tcpdump или на cisco - access list +
>debug ip.
>Посмотрите tcpdump на Ethereal.
> * VSA format :
> * | 1
> | 1
> | 4 | 1
> | 1 |
>
> * |PW_VENDOR_SPECIFIC|length|vendor id|vsa type|length|
>Обратите внимание на значения total_length, использование ntohl.
>
>
>>00:13:38: RADIUS/DECODE: parse VSA parts error
>>00:13:38: RADIUS/DECODE: convert VSA string; FAIL
>>00:13:38: RADIUS/DECODE: decoder; FAIL
>>00:13:38: RADIUS/DECODE: attribute h323-return-code; FAIL
>>00:13:38: RADIUS/DECODE: cisco VSA type 103; FAIL
>>00:13:38: RADIUS/DECODE: VSA; FAIL
>>00:13:38: RADIUS/DECODE: decoder; FAIL
>>00:13:38: RADIUS/DECODE: attribute Vendor-Specific; FAIL
>>00:13:38: RADIUS/DECODE: parse response op decode; FAIL
>>00:13:38: RADIUS/DECODE: Case error(no response/ bad packet/ op decode);parse response; FAIL
>>00:13:38: RADIUS/ENCODE(00000015):Orig. component type = VOICE
>>00:13:38: RADIUS(00000015): Config NAS IP: 0.0.0.0
>>00:13:38: RADIUS/ENCODE: Best Local IP-Address 81.xxx.xx.5 for Radius-Server 81.222.80.222
>>00:13:38: RADIUS: Received from id 1646/49 81.xxx.xx.222:1656, Accounting-response, len 20
С этой частью проблемы разобрался. Действительно было в VSA атрибутах (надо передавать не просто значение , а название атрибута=значение (забыл совсем(( )Появилась проблема дальше -
02:32:01: RADIUS: Called-Station-Id [30] 10 "33651937"
После прохождения авторизации набираю номер куда звоню , он его добавляет в конец атрибута Called-Station-Id (цифра 7 это начало нового номера) ... как сделать, что бы он не подставлял изначальный номер платформы ? или хотя бы весь номер добавлял , а не первую цифру ?
Для звонка в TCL используется :
leg setup $dnis callInfo leg_incoming
В $dnis Вы можете использовать любую цифровую строку. Нет необходимости передавать значение "set dnis [infotag get leg_dnis]".
Можно также делать различные digit manipulation на pots, только обратите внимание
, как у Вас биллинг принимает поля translated.
>Для звонка в TCL используется :
> leg setup $dnis callInfo leg_incoming
>В $dnis Вы можете использовать любую цифровую строку. Нет необходимости передавать значение
> "set dnis [infotag get leg_dnis]".
>Можно также делать различные digit manipulation на pots, только обратите внимание
>, как у Вас биллинг принимает поля translated.
Вот кусок скрипта --
То же всё самое (((
Я с ТCL не разбирался досконально , подскажешь где накосячил ?(}
proc act_CallSetup { } {
global destination
global accountset callInfo(accountNum) $account
set dnis [infotag get leg_dnis]
leg setup $dnis callInfo leg_incoming}
proc act_CallSetupDone { } {
global warnTime
global creditTime
global noPlay
global noTimeLimit
global param3set status [infotag get evt_status]
>
>proc act_CallSetup { } {
> global destination
> global account
>
> set callInfo(accountNum) $account
> set dnis [infotag get leg_dnis]
> leg setup $dnis callInfo leg_incoming
>
>}
>> set dnis [infotag get leg_dnis]
Взять номер набора равным номеру income dialpeer.
> leg setup $dnis callInfo leg_incoming
Для вызова с другого номера стоит переписать примерно так :>proc act_CallSetup { } {
> global destination
> global account
>
> set callInfo(accountNum) $account
># set dnis [infotag get leg_dnis]
># leg setup $dnis callInfo leg_incoming
> leg setup $destination callInfo leg_incoming
>
>}Посторите примеры встроенных скриптов.
>>
>>proc act_CallSetup { } {
>> global destination
>> global account
>>
>> set callInfo(accountNum) $account
>> set dnis [infotag get leg_dnis]
>> leg setup $dnis callInfo leg_incoming
>>
>>}
>>
>
>> set dnis [infotag get leg_dnis]
> Взять номер набора равным номеру income dialpeer.
>> leg setup $dnis callInfo leg_incoming
> Для вызова с другого номера стоит переписать примерно так :
>
>>proc act_CallSetup { } {
>> global destination
>> global account
>>
>> set callInfo(accountNum) $account
>># set dnis [infotag get leg_dnis]
>># leg setup $dnis callInfo leg_incoming
>> leg setup $destination callInfo leg_incoming
>>
>>}
>
>Посторите примеры встроенных скриптов.Смысл в том, что при
set destination [infotag get evt_dcdigits]он в остальных процедурах ждёт нажатия цифр и потом их заносит в
эту переменную , а в данном случае он почему то туда засовывает called number ((proc init { } {
global param1
global beep
global param2
global param3set beep 0
set param1(interruptPrompt) true
set param1(abortKey) *
set param1(terminationKey) #
set param2(interruptPrompt) true
set param2(abortKey) *
set param2(terminationKey) #
set param2(dialPlanTerm) trueset param3(interruptPrompt) true
set param3(abortKey) *
set param3(terminationKey) #
}proc init_ConfigVars { } {
global accountLen
global pinLen
global retryCnt
global operatorNum
global warnTime
global totalLang
global prefix
global prefix1
global prefix2set accountLen [string trim [infotag get cfg_avpair uid-len]]
set pinLen [string trim [infotag get cfg_avpair pin-len]]
set retryCnt [string trim [infotag get cfg_avpair retry-count]]
set operatorNum [string trim [infotag get cfg_avpair redirect-number]]
set warnTime [string trim [infotag get cfg_avpair warning-time]]#Language related variables
set totalLang [string trim [infotag get med_total_languages]]
}proc init_perCallVars { } {
global selectCnt
global count
global fcnt
global ani
global dontPlayAmount
global destBusy
global noTimeLimit
global promptFlag
global promptFlag2
global noPlay
global outgoingDisconnectset selectCnt 0
set count 0
set fcnt 0
set dontPlayAmount 0
set destBusy 0
set noTimeLimit 0
set promptFlag 0
set promptFlag2 0
set noPlay 0
set outgoingDisconnect 0set ani [infotag get leg_ani]
}proc act_Setup { } {
global totalLang
global param1
global selectCntinit_perCallVars
infotag set med_language 1leg setupack leg_incoming
leg proceeding leg_incoming
leg connect leg_incoming#Lang selection
puts "\nTotalLanguages=$totalLang"
if { $totalLang < 1 } {
act_Cleanup
return
}
if { $totalLang == 1 } {
media play leg_incoming _welcome.au
fsm setstate ONELANG
return
}set param1(maxDigits) 1
leg collectdigits leg_incoming param1#Get the map and use it...not this way ???
media play leg_incoming _welcome.au %s1000 %c1 _lang_sel1.au %s1000 %c2 _lang_sel2.au
}
proc act_LangSelect { } {
global param1
global selectCnt
global retryCntset status [infotag get evt_status]
#Collect Success ...matched pattern
if {$status == "cd_005"} {
set status [infotag set med_language [infotag get evt_dcdigits] ]if { ($status == "language not supported") ||
($status == "language not specified in configuration") } {
incr selectCnt
if {$selectCnt < $retryCnt} {
#Get the map and use it...not this way ???
set param1(maxDigits) 1
leg collectdigits leg_incoming param1
media play leg_incoming %c1 _wrong_lang_sel.au %s1000 %c1 _lang_sel1.au %s1000 %c2 _lang_sel2.au
fsm setstate same_state
return
} else {
media play leg_incoming %c1 _generic_final.au
fsm setstate CALLDISCONNECT
return
}
}
#Get the card No
act_GetCard
}
#Collect timeout/Abort
if { ($status == "cd_001") ||
($status == "cd_002")} {incr selectCnt
if {$selectCnt < $retryCnt} {
leg collectdigits leg_incoming param1
media play leg_incoming %c1 _no_lang_sel.au %s1000 %c1 _lang_sel1.au %s1000 %c2 _lang_sel2.au
fsm setstate same_state
} else {
media play leg_incoming %c1 _generic_final.au
fsm setstate CALLDISCONNECT
}
}
}proc act_GetCard { } {
global cardLen
global accountLen
global pinLen
global count
global param1
global promptFlagset cardLen [expr $accountLen + $pinLen]
set param1(maxDigits) $cardLen
leg collectdigits leg_incoming param1
if {$count == 0} {
media play leg_incoming _enter_card_num.au
} else {
if {$promptFlag == 1 } {
media play leg_incoming _invalid_digits.au
}
if {$promptFlag == 2 } {
media play leg_incoming _auth_fail.au
}
if {$promptFlag == 3} {
media play leg_incoming _no_card_entered.au
}
}}
proc act_GotCardNumber { } {
global count
global retryCnt
global promptFlag
global account
global pin
global accountLen
global cardLen
global pinLen
global aniset status [infotag get evt_status]
# Do we need to calculate len ???
if {$status == "cd_005"} {
set number [infotag get evt_dcdigits]
set numberLen [ string length $number ]
if { $numberLen == $cardLen } {
set account [ string range $number 0 [expr $accountLen -1]]
set pin [ string range $number $accountLen [expr $cardLen -1]]
#Do authorize
aaa authorize $account $pin $ani "" leg_incoming
} else {
incr count
set promptFlag 1
if {$count < $retryCnt} {
act_GetCard
fsm setstate same_state
} else {
media play leg_incoming _final.au
fsm setstate CALLDISCONNECT
}
}
return
}
#timeout
if {$status == "cd_001"} {
set number [infotag get evt_dcdigits]
puts "\nNUMBER=$number"
set numberLen [ string length $number ]
if { $numberLen == 0 } {
incr count
set promptFlag 3
if {$count < $retryCnt} {
act_GetCard
fsm setstate same_state
} else {
media play leg_incoming _final.au
fsm setstate CALLDISCONNECT
}
return
}
if { $numberLen == $cardLen } {
set account [ string range $number 0 [expr $accountLen -1]]
set pin [ string range $number $accountLen [expr $cardLen -1]]
#Do authorize
aaa authorize $account $pin $ani "" leg_incoming
} else {
incr count
set promptFlag 1
if {$count < $retryCnt} {
act_GetCard
fsm setstate same_state
} else {
media play leg_incoming _final.au
fsm setstate CALLDISCONNECT
}
}
return
}
#Aborted
if {$status == "cd_002"} {
act_GetCard
fsm setstate same_state
return
}
#timeout/fail(disconnected)/invalid_no
#shd we play a diff prompt for disconnected...what is disconnected???
if {($status == "cd_001") ||
($status == "cd_007") ||
($status == "cd_006")} {
incr count
set promptFlag 3
if {$count < $retryCnt} {
act_GetCard
fsm setstate same_state
} else {
media play leg_incoming _final.au
fsm setstate CALLDISCONNECT
}
return
}
}
proc act_FirstAuthorized { } {global count
global retryCnt
global promptFlag
set status [infotag get evt_status]
puts "\n aaa authorize Status=$status"
if { $status == "ao_000" } {
act_GetDest
return
} else {
if { [infotag get aaa_avpair_exists h323-return-code] } {
set returnCode [infotag get aaa_avpair h323-return-code]
} else {
#No return code from radius
media play leg_incoming _no_aaa.au
fsm setstate CALLDISCONNECT
return
}incr count
set promptFlag 2
if { $count < $retryCnt } {
act_GetCard
fsm setstate CARDSELECTION
} else {
#First authorize failed
act_firstAuthorizeFailed $returnCode
fsm setstate CALLDISCONNECT
}
return 0
}
fsm setstate CALLDISCONNECT
}
proc act_firstAuthorizeFailed { returnCode } {
#play prompt accordind to failure vsa code ??? get returnCode
media play leg_incoming _final.au
}proc act_secondAuthorizeFailed { returnCode } {
#play prompt accordind to failure vsa code ??? get returnCode
media play leg_incoming _final.au
}proc act_GetDest { } {
global destination
global fcnt
global promptFlag2
global destBusy
global param2
if { [infotag get aaa_avpair_exists h323-credit-amount] } {
set amt [infotag get aaa_avpair h323-credit-amount]
} else {
media play leg_incoming _no_aaa.au
fsm setstate CALLDISCONNECT
return
}set param2(ignoreInitialTermKey) true
leg collectdigits leg_incoming param2
if {$fcnt == 0} {
if {$amt == 0} {
media play leg_incoming _zero_bal.au
fsm setstate CALLDISCONNECT
} elseif {$amt > 999999.99} {
media play leg_incoming _invalid_amt.au _dollars.au %s1000 _enter_dest.au
} elseif {$destBusy == 1} {
set destBusy 0
media play leg_incoming _dest_busy.au
} else {
media play leg_incoming _you_have.au %a$amt %s1000 _enter_dest.au
}
} else {
if {$promptFlag2 == 1} {
media play leg_incoming _reenter_dest.au
}
if {$promptFlag2 == 2} {
media play leg_incoming _author_fail.au
}
if {$promptFlag2 == 3} {
media play leg_incoming _no_dest_entered.au
}
}
}
proc act_GotDest { } {
global fcnt
global retryCnt
global promptFlag2
global destination
global ani
global account
global pin
global dontPlayAmountset status [infotag get evt_status]
#matched dialplan
if {$status == "cd_004"} {
set destination [infotag get evt_dcdigits]
aaa authorize $account $pin $ani $destination leg_incoming
return
}#aborted
if {$status == "cd_002"} {
if {$dontPlayAmount == 1} {
act_Just_GetDest
} else {
act_GetDest
}
fsm setstate same_state
return
}
incr fcnt
if {$fcnt < $retryCnt} {
#timeout
#shd we play a diff prompt for disconnected...what is disconnected???
if {$status == "cd_001" } {
set promptFlag2 1
}
#fail(disconnected)
if {$status == "cd_007" } {
set promptFlag2 3
}
#for all other cases like cd_006(invalid no)
set promptFlag2 1
if {$dontPlayAmount == 1} {
act_Just_GetDest
} else {
act_GetDest
}
fsm setstate same_state
} else {
media play leg_incoming _dest_collect_fail.au
fsm setstate CALLDISCONNECT
}
}proc act_SecondAuthorized { } {
global account
global destination
global noTimeLimit
global creditTime
global warnTime
global promptFlag2
global fcnt
global retryCnt
global noPlay
set callInfo(accountNum) $accountif { [infotag get aaa_avpair_exists h323-return-code] } {
set returnCode [infotag get aaa_avpair h323-return-code]
} else {
#No return code from radius
media play leg_incoming _no_aaa.au
fsm setstate CALLDISCONNECT
return
}
if {$returnCode == 13} {
# allow user to make toll-free calls
set noTimeLimit 1
leg setup $destination callInfo leg_incoming
return
}
#this is same as above ???
if {$returnCode == 52} {
# Redirect to customer service using redirect number
set noTimeLimit 1
leg setup $destination callInfo leg_incoming
return
}set status [infotag get evt_status]
puts "\n aaa authorize Status=$status"if { $status == "ao_000" } {
if { [infotag get aaa_avpair_exists h323-credit-time] } {
set creditTime [infotag get aaa_avpair h323-credit-time]
} else {
media play leg_incoming _no_aaa.au
fsm setstate CALLDISCONNECT
return
}if {$creditTime == "uninitialized"} {
media play leg_incoming _no_aaa.au
fsm setstate CALLDISCONNECT
return
} elseif {$creditTime == "unlimited"} {
set noTimeLimit 1
# play mesg only if time left is 20 secs > warntime
} elseif {[expr $creditTime - $warnTime] < 20} {
set noPlay 1
media play leg_incoming _you_have.au %t$creditTime
} else {
media play leg_incoming _you_have.au %t$creditTime
}} else {
#Authorization failed
act_PlayReturnCode $returnCode
if { $returnCode == 4 } {
#special Case ???...no retry check also
set noTimeLimit 1
return
} else {
fsm setstate CALLDISCONNECT
return
}incr fcnt
set promptFlag2 2
if { $fcnt < $retryCnt } {
act_GetDest
fsm setstate GETDEST
} else {
#second authorize failed
act_secondAuthorizeFailed $returnCode
fsm setstate CALLDISCONNECT
}
fsm setstate CALLDISCONNECT
}
}proc act_PlayReturnCode {returnCode} {
switch $returnCode {
3 { media play leg_incoming _account_blocked.au }
4 { media play leg_incoming _zero_bal.au }
5 { media play leg_incoming _card_expired.au }
7 { media play leg_incoming _blocked.au }
9 { media play leg_incoming _dest_blocked.au }
12 { media play leg_incoming _not_enuf.au }
default { media play leg_incoming _no_aaa.au }
}
}proc act_CallSetup { } {
global destination
global accountset callInfo(accountNum) $account
leg setup $destination callInfo leg_incoming}
proc act_CallSetupDone { } {
global warnTime
global creditTime
global noPlay
global noTimeLimit
global param3set status [infotag get evt_status]
set param3(interruptPrompt) true
set param3(enableReporting) true
if {$status == "ls_000"} {
if { ($noTimeLimit == 1) ||
($creditTime == "unlimited") ||
($creditTime == "uninitialized") } {
#no timer
} else {
if {$creditTime < $warnTime} {
if {$noPlay == 1} {
timer start leg_timer [expr $creditTime -1] leg_incoming
} else {
timer start leg_timer [expr $warnTime - 4] leg_incoming
}
fsm setstate CALLLASTACTIVE} else {
set delay [expr $creditTime - $warnTime]
timer start leg_timer $delay leg_incoming
fsm setstate CALLACTIVE
}
}
#for longpound
leg collectdigits leg_incoming param3
return
}#call setup timeout/invalid no/Destination Busy/dest disconnect/
#conference failed/
if { ($status == "ls_002") ||
($status == "ls_004") ||
($status == "ls_007") ||
($status == "ls_009") ||
($status == "ls_010")
} {
act_DestBusy
return
}
# leg setupFail
set tone [infotag get evt_status]
playtone leg_incoming $tone
timer start leg_timer 5 leg_incoming
fsm setstate CALLDISCONNECT
}
proc act_HandleOutgoing { } {
global outgoingDisconnectif { [infotag get evt_legs] == [infotag get leg_outgoing] } {
puts "\nOutgoing Disconnected"
connection destroy con_all
set outgoingDisconnect 1
return
}
call close
fsm setstate CALLDISCONNECT}
proc act_LongPound { } {
global durationif { [infotag get evt_digit] != "#" } {
fsm setstate same_state
return
}set duration [infotag get evt_digit_duration]
if { $duration < 300 } {
fsm setstate same_state
return
}
connection destroy con_all
}
proc act_Just_GetDest { } {
global destination
global fcnt
global promptFlag2
global pound
global destBusy
global param2
global outgoingDisconnectset param2(ignoreInitialTermKey) true
leg collectdigits leg_incoming param2
if {$fcnt == 0} {
if {$outgoingDisconnect == 1} {
set outgoingDisconnect 0
media play leg_incoming _disconnect.au %s1000 _enter_dest.au
} elseif {$destBusy == 1} {
set destBusy 0
media play leg_incoming _dest_busy.au
} else {
media play leg_incoming _enter_dest.au
}
} else {
if {$promptFlag2 == 1} {
media play leg_incoming _reenter_dest.au
}
if {$promptFlag2 == 2} {
media play leg_incoming _author_fail.au
}
if {$promptFlag2 == 3} {
media play leg_incoming _no_dest_entered.au
}
}
}
proc act_ConnDestroyed { } {
global dontPlayAmount
leg disconnect leg_outgoing
init_perCallVars
set dontPlayAmount 1
act_Just_GetDest
}proc act_DestBusy { } {
global destBusy
#current debitcard implementation
set destBusy 1
act_Just_GetDest
fsm setstate GETDEST}
proc act_ActiveTimer { } {
global noPlay
global warnTime
global creditTime
global incoming
global outgoingset incoming [infotag get leg_incoming]
set outgoing [infotag get leg_outgoing]if {$noPlay == 1} {
timer start leg_timer [expr $creditTime -1] leg_incoming
} else {
connection destroy con_all
timer start leg_timer [expr $warnTime - 4] leg_incoming
fsm setstate CALLWARN
}
}proc act_CallWarnDestroy { } {
global warnTime
media play leg_incoming _you_have.au %t$warnTime
}proc act_CallWarnMedia { } {
global incoming
global outgoingconnection create $incoming $outgoing
}proc act_LastActiveTimer { } {
connection destroy con_all
media play leg_incoming _disconnect.au
}proc act_Ignore { } {
# Dummy
puts "Event Capture"
}proc act_Cleanup { } {
call close
}requiredversion 2.0
init#Get Variables
init_ConfigVars#----------------------------------
# State Machine
#----------------------------------
set fsm(any_state,ev_disconnected) "act_Cleanup same_state"
set fsm(CALL_INIT,ev_setup_indication) "act_Setup LANGSELECTION"set fsm(ONELANG,ev_media_done) "act_GetCard CARDSELECTION"
set fsm(LANGSELECTION,ev_collectdigits_done) "act_LangSelect CARDSELECTION"
set fsm(CARDSELECTION,ev_collectdigits_done) "act_GotCardNumber AUTHORIZE"
set fsm(AUTHORIZE,ev_authorize_done) "act_FirstAuthorized GETDEST"set fsm(GETDEST,ev_collectdigits_done) "act_GotDest SECONDAUTHORIZE"
set fsm(SECONDAUTHORIZE,ev_authorize_done) "act_SecondAuthorized PLACECALL"
set fsm(PLACECALL,ev_media_done) "act_CallSetup PLACECALL"
set fsm(PLACECALL,ev_setup_done) "act_CallSetupDone CALLACTIVE"set fsm(CALLACTIVE,ev_leg_timer) "act_ActiveTimer CALLLASTACTIVE"
set fsm(CALLLASTACTIVE,ev_leg_timer) "act_LastActiveTimer CALLDISCONNECT"
set fsm(CALLACTIVE,ev_digit_end) "act_LongPound CONNDESTROY"
set fsm(CALLLASTACTIVE,ev_digit_end) "act_LongPound CONNDESTROY"set fsm(CALLWARN,ev_destroy_done) "act_CallWarnDestroy same_state"
set fsm(CALLWARN,ev_media_done) "act_CallWarnMedia CALLLASTACTIVE"set fsm(CONNDESTROY,ev_destroy_done) "act_ConnDestroyed GETDEST"
set fsm(CALLACTIVE,ev_disconnected) "act_HandleOutgoing CONNDESTROY"
set fsm(CALLDISCONNECT,ev_media_done) "act_Cleanup same_state"
set fsm(CALLDISCONNECT,ev_disconnect_done) "act_Cleanup same_state"
set fsm(CALLDISCONNECT,ev_leg_timer) "act_Cleanup same_state"
fsm define fsm CALL_INIT
По тексту явных "ошибок" не видно.
Необходимо отлаживать. Используйте puts + deb voip ivr ... + term mon :puts "\n -----> Destination=$destination <-------\n"
>По тексту явных "ошибок" не видно.
>Необходимо отлаживать. Используйте puts + deb voip ivr ... + term mon
>:
>
>puts "\n -----> Destination=$destination <-------\n"Народ , уже всю голосу сломал !((
Подскажите где грабли , плиз.
Где то помнит номер платформы и всё тут ((( и добавляет к нему набираемый номер !((
00:14:45: //19//AFW_:/AFW_M_TclModule_Action:
00:14:45: //19//AFW_:/AFW_TclModule_DefaultEvHandling:
00:14:45: //19//TCL :/tcl_InfotagObjCmd: infotag get evt_status
00:14:45: //19//TCL :/tcl_InfotagGetObjCmd: infotag get evt_status
00:14:45: //19//AFW_:/vtr_ev_status: argc 2 argindex 2
00:14:45: //19//TCL :/tcl_InfotagObjCmd: infotag get evt_dcdigits
00:14:45: //19//TCL :/tcl_InfotagGetObjCmd: infotag get evt_dcdigits
00:14:45: //19//AFW_:/vtr_ev_dcdigits: argc 2
00:14:45: //19//AFW_:/vtr_ev_dcdigits: DCDIGITS [33651937]
00:14:45: //19//TCL :/tcl_PutsObjCmd:
-----> Destination=33651937 <-------00:14:45:
00:14:45: //19//TCL :/tcl_AAAObjCmd: aaa authorize 010203 1234 3365050 33651937 leg_incoming
00:14:45: //19//TCL :/tcl_AuthorizeObjCmd: authorize 010203 1234 3365050 33651937 leg_incoming
00:14:45: //19//AFW_:/vtd_lg_incoming: argc 6
>>По тексту явных "ошибок" не видно.
>>Необходимо отлаживать. Используйте puts + deb voip ivr ... + term mon
>>:
>>
>>puts "\n -----> Destination=$destination <-------\n"
>
>Народ , уже всю голосу сломал !((
>Подскажите где грабли , плиз.
>Где то помнит номер платформы и всё тут ((( и добавляет к
>нему набираемый номер !((
>
>
>00:14:45: //19//AFW_:/AFW_M_TclModule_Action:
>00:14:45: //19//AFW_:/AFW_TclModule_DefaultEvHandling:
>00:14:45: //19//TCL :/tcl_InfotagObjCmd: infotag get evt_status
>00:14:45: //19//TCL :/tcl_InfotagGetObjCmd: infotag get evt_status
>00:14:45: //19//AFW_:/vtr_ev_status: argc 2 argindex 2
>00:14:45: //19//TCL :/tcl_InfotagObjCmd: infotag get evt_dcdigits
>00:14:45: //19//TCL :/tcl_InfotagGetObjCmd: infotag get evt_dcdigits
>00:14:45: //19//AFW_:/vtr_ev_dcdigits: argc 2
>00:14:45: //19//AFW_:/vtr_ev_dcdigits: DCDIGITS [33651937]
>00:14:45: //19//TCL :/tcl_PutsObjCmd:
> -----> Destination=33651937 <-------
>
>00:14:45:
>00:14:45: //19//TCL :/tcl_AAAObjCmd: aaa authorize 010203 1234 3365050 33651937 leg_incoming
>00:14:45: //19//TCL :/tcl_AuthorizeObjCmd: authorize 010203 1234 3365050 33651937 leg_incoming
>00:14:45: //19//AFW_:/vtd_lg_incoming: argc 6
Мдаааа ... ну хоть чуток радует - мозг не совсем сломан )) победил )))
Дело не в скрипте . в dial-peer-е ((( было ...
port 3/0:D - был совсем лишний ((( слона то я и не заметил ((
Спасибо огромное все желающим и помогающим !!!) заставили самому разбираться , и это есть зер гут ))
>>>По тексту явных "ошибок" не видно.
>>>Необходимо отлаживать. Используйте puts + deb voip ivr ... + term mon
>>>:
>>>
>>>puts "\n -----> Destination=$destination <-------\n"
>>
>>Народ , уже всю голосу сломал !((
>>Подскажите где грабли , плиз.
>>Где то помнит номер платформы и всё тут ((( и добавляет к
>>нему набираемый номер !((
>>
>>
>>00:14:45: //19//AFW_:/AFW_M_TclModule_Action:
>>00:14:45: //19//AFW_:/AFW_TclModule_DefaultEvHandling:
>>00:14:45: //19//TCL :/tcl_InfotagObjCmd: infotag get evt_status
>>00:14:45: //19//TCL :/tcl_InfotagGetObjCmd: infotag get evt_status
>>00:14:45: //19//AFW_:/vtr_ev_status: argc 2 argindex 2
>>00:14:45: //19//TCL :/tcl_InfotagObjCmd: infotag get evt_dcdigits
>>00:14:45: //19//TCL :/tcl_InfotagGetObjCmd: infotag get evt_dcdigits
>>00:14:45: //19//AFW_:/vtr_ev_dcdigits: argc 2
>>00:14:45: //19//AFW_:/vtr_ev_dcdigits: DCDIGITS [33651937]
>>00:14:45: //19//TCL :/tcl_PutsObjCmd:
>> -----> Destination=33651937 <-------
>>
>>00:14:45:
>>00:14:45: //19//TCL :/tcl_AAAObjCmd: aaa authorize 010203 1234 3365050 33651937 leg_incoming
>>00:14:45: //19//TCL :/tcl_AuthorizeObjCmd: authorize 010203 1234 3365050 33651937 leg_incoming
>>00:14:45: //19//AFW_:/vtd_lg_incoming: argc 6
>
>
>
>
>Мдаааа ... ну хоть чуток радует - мозг не совсем сломан ))
>победил )))
>Дело не в скрипте . в dial-peer-е ((( было ...
>port 3/0:D - был совсем лишний ((( слона то я
>и не заметил ((
>Спасибо огромное все желающим и помогающим !!!) заставили самому разбираться , и
>это есть зер гут ))
Вот дальше трабла (( блин , да что такое ((
Есть мысли ?
00:59:19: //116//TCL :/tcl_InfotagGetObjCmd: infotag get evt_status
00:59:19: //116//AFW_:/vtr_ev_status: argc 2 argindex 2
00:59:19: //116//TCL :/tcl_PutsObjCmd:
aaa authorize Status=ao_000
00:59:19:
00:59:19: //116//TCL :/tcl_InfotagObjCmd: infotag get aaa_avpair_exists h323-credit-time
00:59:19: //116//TCL :/tcl_InfotagGetObjCmd: infotag get aaa_avpair_exists h323-credit-time
00:59:19: //116//AFW_:/vtr_ra_avpair_exists: argc 3 argindex 2
00:59:19: //116//TCL :/tcl_InfotagObjCmd: infotag get aaa_avpair h323-credit-time
00:59:19: //116//TCL :/tcl_InfotagGetObjCmd: infotag get aaa_avpair h323-credit-time
00:59:19: //116//AFW_:/vtr_ra_avpair: argc 3 argindex 2
00:59:19: //116//PACK:/tcl_MediaObjCmd: media play leg_incoming _you_have.au %t300
00:59:19: //116//PACK:/tcl_MediaPlayObjCmd: play leg_incoming _you_have.au %t300
00:59:19: //116//AFW_:/vtd_lg_incoming: argc 4
00:59:19: //116//AFW_:/vtd_lg_incoming: Legs [116 ]
00:59:19: //116//Tcl :/tcl_parseCallID_vartagObj: VARTAG Translation Leg Count=1
00:59:19: //116//AFW_:/AFW_FSM_Drive: Tcl_Eval to drive FSM inside Tcl modulespace. code=1 code=ERROR
00:59:19: TCL script failure
Result:
Error Adding URL to Prompt list
00:59:19: TCL script failure errorInfo:
Error Adding URL to Prompt list
while executing
"media play leg_incoming _you_have.au %t$creditTime
(procedure "act_SecondAuthorized" line 61)
invoked from within
"act_SecondAuthorized"
00:59:19: //-1//AFW_:/AFW_ExecEnv_CallClose: Exec Env state: 1
00:59:19: //-1//AFW_:/AFW_ExecEnv_CallClose: Terminating ExecEnv's root module
00:59:19: //116//AFW_:/AFW_M_TclModule_Terminate: Module is in the state: ACTIVE
00:59:19: //116//AFW_:/AFW_TclModule_Cleaner: lastFailureCause 0
00:59:19: RADIUS/ENCODE(00000094):Orig. component type = VOICE
00:59:19: RADIUS(00000094): Config NAS IP: 0.0.0.0
00:59:19: RADIUS/ENCODE: Best Local IP-Address 81.222.80.5 for Radius-Server 81.222.80.222
00:59:19: //116//AFW_:/AFW_M_TclModule_Action:
>>>>По тексту явных "ошибок" не видно.
>>>>Необходимо отлаживать. Используйте puts + deb voip ivr ... + term mon
>>>>:
>>>>
>>>>puts "\n -----> Destination=$destination <-------\n"
>>>
>>>Народ , уже всю голосу сломал !((
>>>Подскажите где грабли , плиз.
>>>Где то помнит номер платформы и всё тут ((( и добавляет к
>>>нему набираемый номер !((
>>>
>>>
>>>00:14:45: //19//AFW_:/AFW_M_TclModule_Action:
>>>00:14:45: //19//AFW_:/AFW_TclModule_DefaultEvHandling:
>>>00:14:45: //19//TCL :/tcl_InfotagObjCmd: infotag get evt_status
>>>00:14:45: //19//TCL :/tcl_InfotagGetObjCmd: infotag get evt_status
>>>00:14:45: //19//AFW_:/vtr_ev_status: argc 2 argindex 2
>>>00:14:45: //19//TCL :/tcl_InfotagObjCmd: infotag get evt_dcdigits
>>>00:14:45: //19//TCL :/tcl_InfotagGetObjCmd: infotag get evt_dcdigits
>>>00:14:45: //19//AFW_:/vtr_ev_dcdigits: argc 2
>>>00:14:45: //19//AFW_:/vtr_ev_dcdigits: DCDIGITS [33651937]
>>>00:14:45: //19//TCL :/tcl_PutsObjCmd:
>>> -----> Destination=33651937 <-------
>>>
>>>00:14:45:
>>>00:14:45: //19//TCL :/tcl_AAAObjCmd: aaa authorize 010203 1234 3365050 33651937 leg_incoming
>>>00:14:45: //19//TCL :/tcl_AuthorizeObjCmd: authorize 010203 1234 3365050 33651937 leg_incoming
>>>00:14:45: //19//AFW_:/vtd_lg_incoming: argc 6
>>
>>
>>
>>
>>Мдаааа ... ну хоть чуток радует - мозг не совсем сломан ))
>>победил )))
>>Дело не в скрипте . в dial-peer-е ((( было ...
>>port 3/0:D - был совсем лишний ((( слона то я
>>и не заметил ((
>>Спасибо огромное все желающим и помогающим !!!) заставили самому разбираться , и
>>это есть зер гут ))
>
>
>
>
>Вот дальше трабла (( блин , да что такое ((
>Есть мысли ?
>
>
>
>
>
>
>00:59:19: //116//TCL :/tcl_InfotagGetObjCmd: infotag get evt_status
>00:59:19: //116//AFW_:/vtr_ev_status: argc 2 argindex 2
>00:59:19: //116//TCL :/tcl_PutsObjCmd:
> aaa authorize Status=ao_000
>00:59:19:
>00:59:19: //116//TCL :/tcl_InfotagObjCmd: infotag get aaa_avpair_exists h323-credit-time
>00:59:19: //116//TCL :/tcl_InfotagGetObjCmd: infotag get aaa_avpair_exists h323-credit-time
>00:59:19: //116//AFW_:/vtr_ra_avpair_exists: argc 3 argindex 2
>00:59:19: //116//TCL :/tcl_InfotagObjCmd: infotag get aaa_avpair h323-credit-time
>00:59:19: //116//TCL :/tcl_InfotagGetObjCmd: infotag get aaa_avpair h323-credit-time
>00:59:19: //116//AFW_:/vtr_ra_avpair: argc 3 argindex 2
>00:59:19: //116//PACK:/tcl_MediaObjCmd: media play leg_incoming _you_have.au %t300
>00:59:19: //116//PACK:/tcl_MediaPlayObjCmd: play leg_incoming _you_have.au %t300
>00:59:19: //116//AFW_:/vtd_lg_incoming: argc 4
>00:59:19: //116//AFW_:/vtd_lg_incoming: Legs [116 ]
>00:59:19: //116//Tcl :/tcl_parseCallID_vartagObj: VARTAG Translation Leg Count=1
>00:59:19: //116//AFW_:/AFW_FSM_Drive: Tcl_Eval to drive FSM inside Tcl modulespace. code=1 code=ERROR
>00:59:19: TCL script failure
> Result:
>
>
> Error Adding URL to Prompt list
>00:59:19: TCL script failure errorInfo:
>
>
> Error Adding URL to Prompt list
> while executing
>"media play leg_incoming _you_have.au %t$creditTime
> (procedure "act_SecondAuthorized" line 61)
> invoked from within
>"act_SecondAuthorized"
>00:59:19: //-1//AFW_:/AFW_ExecEnv_CallClose: Exec Env state: 1
>00:59:19: //-1//AFW_:/AFW_ExecEnv_CallClose: Terminating ExecEnv's root module
>00:59:19: //116//AFW_:/AFW_M_TclModule_Terminate: Module is in the state: ACTIVE
>00:59:19: //116//AFW_:/AFW_TclModule_Cleaner: lastFailureCause 0
>00:59:19: RADIUS/ENCODE(00000094):Orig. component type = VOICE
>00:59:19: RADIUS(00000094): Config NAS IP: 0.0.0.0
>00:59:19: RADIUS/ENCODE: Best Local IP-Address 81.222.80.5 for Radius-Server 81.222.80.222
>00:59:19: //116//AFW_:/AFW_M_TclModule_Action:
вот вы если нашли ошибку, могли бы сказать что это такое было, а то у меня на этом месте тоже самое происходит.