The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Нужна помощь по  TCL IVR  !!!!!! плиз !!"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Маршрутизаторы CISCO и др. оборудование. (Public)
Изначальное сообщение [Проследить за развитием треда]

"Нужна помощь по  TCL IVR  !!!!!! плиз !!"  
Сообщение от ATeam email(??) on 20-Сен-06, 10:20 
Коллеги , день добрый.
Подскажите - аутентификацию проходит карточка нормально , радиус возвращает код 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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "Нужна помощь по  TCL IVR  !!!!!! плиз !!"  
Сообщение от Alex email(??) on 20-Сен-06, 11:10 
Возможно, что у ВАс в 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


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Нужна помощь по  TCL IVR  !!!!!! плиз !!"  
Сообщение от ATeam email(??) on 20-Сен-06, 12:40 
>Возможно, что у ВАс в 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 это начало нового номера) ... как сделать, что бы он не подставлял изначальный номер платформы ? или хотя бы весь номер добавлял , а не первую цифру ?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Нужна помощь по  TCL IVR  !!!!!! плиз !!"  
Сообщение от Alex email(??) on 20-Сен-06, 13:40 
Для звонка в TCL используется :
leg setup $dnis callInfo leg_incoming
В $dnis Вы можете использовать любую цифровую строку. Нет необходимости передавать значение  "set dnis [infotag get leg_dnis]".
Можно также делать различные digit manipulation на pots, только обратите внимание
, как у Вас биллинг принимает поля translated.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "Нужна помощь по  TCL IVR  !!!!!! плиз !!"  
Сообщение от ATeam email(??) on 20-Сен-06, 13:52 
>Для звонка в 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 account

    set 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 param3

    set status [infotag get evt_status]

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "Нужна помощь по  TCL IVR  !!!!!! плиз !!"  
Сообщение от Alex email(??) on 20-Сен-06, 15:15 
>
>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
>
>}

Посторите примеры встроенных скриптов.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "Нужна помощь по  TCL IVR  !!!!!! плиз !!"  
Сообщение от ATeam email(ok) on 20-Сен-06, 15:19 
>>
>>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 param3

    set 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) true

    set 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 prefix2

    set 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 outgoingDisconnect

    set 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 0

    set ani [infotag get leg_ani]
    
}

proc act_Setup { } {

    global totalLang
    global param1
    global selectCnt

    init_perCallVars
    infotag set med_language 1

    leg 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 retryCnt

    set 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 promptFlag

    set 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 ani

    set 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 dontPlayAmount

    set 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) $account

    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
    }
    
     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 account

    set callInfo(accountNum) $account
    leg setup $destination callInfo leg_incoming

}

proc act_CallSetupDone { } {
    global warnTime
    global creditTime
    global noPlay
    global noTimeLimit
    global param3

    set 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 outgoingDisconnect

    if { [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 duration

    if { [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 outgoingDisconnect

    set 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 outgoing

    set 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 outgoing

    connection 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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

7. "Нужна помощь по  TCL IVR  !!!!!! плиз !!"  
Сообщение от Alex email(??) on 20-Сен-06, 16:30 
По тексту явных "ошибок" не видно.
Необходимо отлаживать. Используйте puts + deb voip ivr ... + term mon :

puts "\n -----> Destination=$destination <-------\n"

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

8. "Нужна помощь по  TCL IVR  !!!!!! плиз !!"  
Сообщение от ATeam email(??) on 21-Сен-06, 16:24 
>По тексту явных "ошибок" не видно.
>Необходимо отлаживать. Используйте 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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

9. "Нужна помощь по  TCL IVR  !!!!!! плиз !!"  
Сообщение от ATeam email(??) on 21-Сен-06, 21:22 
>>По тексту явных "ошибок" не видно.
>>Необходимо отлаживать. Используйте 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  - был совсем лишний (((  слона то я и не заметил ((
Спасибо огромное все желающим и помогающим !!!) заставили самому разбираться , и это есть зер гут ))

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

10. "Нужна помощь по  TCL IVR  !!!!!! плиз !!"  
Сообщение от ATeam email(??) on 22-Сен-06, 14:32 
>>>По тексту явных "ошибок" не видно.
>>>Необходимо отлаживать. Используйте 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:

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

11. "Нужна помощь по  TCL IVR  !!!!!! плиз !!"  
Сообщение от рфыр on 28-Ноя-06, 18:28 
>>>>По тексту явных "ошибок" не видно.
>>>>Необходимо отлаживать. Используйте 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:


вот вы если нашли ошибку, могли бы сказать что это такое было, а то у меня на этом месте тоже самое происходит.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Спонсоры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2022 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру