URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID6
Нить номер: 12346
[ Назад ]

Исходное сообщение
"Cisci IVR"

Отправлено Cisci IVR , 22-Дек-06 09:21 
Обычный IVR
Человек звонит на номер 555555. Играет приветствие.
Набераешь внутренний - уходишь на внутренний
Таймаут - ушел на секретарей, номер 111
набрал не существующий номер - ушел на секретарей, номер 111

Все ок.

Вот скрипт

proc init { } {
    global param
    global retryCnt
    global ParamForDest

    set param(abortKey)             *
    set param(interruptPrompt)         true
    set param(ignoreInitialTermKey)     true

    set ParamForDest(abortKey)         *
    set ParamForDest(initialDegitTimeout)     10
    set ParamForDest(terminationKey)     #
    set ParamForDest(interruptPrompt)     true
    set ParamForDest(dialPlanTerm)         true
    set ParamForDest(ignoreInitialTermKey)     true

    return
    }

proc init_perCallVars { } {
    global PromptFlag
    global DestPromptFlag
    global NoPlayWarn
    global NoTimeLimit
    global SetupDone

    set PromptFlag                0
    set DestPromptFlag            0
    set NoPlayWarn                           0
    set NoTimeLimit                          0
    set SetupDone                            0

    return
    }

proc act_Setup { } {
    global params
    set params(interruptPrompt) true
    set params(dialPlan) true

    puts "\n---- in act_Setup \n"
    init_perCallVars
    leg setupack leg_incoming
#    infotag set med_language prefix "ru"
#    SelectLanguageMenu
    media play leg_incoming flash:ru_welcome.au
    puts "\n---- playing welcome.au \n"
    leg collectdigits leg_incoming params
    fsm setstate GETDEST
    return
    }

proc act_GotDestination { } {
    global NumSedtPrompt

    puts "\n---- in  act_GotDestination\n"    
    set status [infotag get evt_status]
        puts "\n---- act_GotDestination status: $status \n"    

    # Вот здесь, внутренный набран правильно, уходим на него
    if {$status == "cd_004"} {
    set dest [infotag get evt_dcdigits]
    leg setup $dest callInfo leg_incoming
        }

    # Тут, тайм аут, ничего не набрали...
    if {$status == "cd_001"} {
    set dest [infotag get evt_dcdigits]
    leg setup 111 callInfo leg_incoming
        }

    # Набрали, но номера не существует...
    if {$status == "cd_006"} {
    set dest [infotag get evt_dcdigits]
    leg setup 111 callInfo leg_incoming
        }

    return
    }


set ivr_fsm(CALLCOMES,ev_setup_indication) "act_Setup        same_state"
set ivr_fsm(GETDEST,ev_collectdigits_done) "act_GotDestination        same_state"
fsm define ivr_fsm CALLCOMES

Вот.
Но, есть 8-межгород, и 9-выход на город. Т.е. можно позвонив на 555555, можно обратно уйти в город или даже на межгород... Дырочка, однако...
Пытаюсь отловить нажатие этих двух кнопок. Вот код:

proc init { } {
    global param
    global retryCnt
    global ParamForDest

    set param(abortKey)             *
    set param(interruptPrompt)         true
    set param(ignoreInitialTermKey)     true

    set ParamForDest(abortKey)         *
    set ParamForDest(initialDegitTimeout)     10
    set ParamForDest(terminationKey)     #
    set ParamForDest(interruptPrompt)     true
    set ParamForDest(dialPlanTerm)         true
    set ParamForDest(ignoreInitialTermKey)     true

    return
    }

proc init_perCallVars { } {
    global PromptFlag
    global DestPromptFlag
    global NoPlayWarn
    global NoTimeLimit
    global SetupDone

    set PromptFlag                0
    set DestPromptFlag            0
    set NoPlayWarn                           0
    set NoTimeLimit                          0
    set SetupDone                            0

    return
    }

proc act_Setup { } {
    global params
    set params(interruptPrompt) true
    set params(dialPlan) true

    puts "\n---- in act_Setup \n"
    init_perCallVars
    leg setupack leg_incoming
#    infotag set med_language prefix "ru"
#    SelectLanguageMenu
    media play leg_incoming flash:ru_welcome.au
    puts "\n---- playing welcome.au \n"
    leg collectdigits leg_incoming params
    fsm setstate GETDEST
    return
    }

proc act_GotDestination { } {
    global NumSedtPrompt

    puts "\n---- in  act_GotDestination\n"    
    set status [infotag get evt_status]
        puts "\n---- act_GotDestination status: $status \n"    

    # Вот здесь, внутренный набран правильно, уходим на него
    if {$status == "cd_004"} {
    set dest [infotag get evt_dcdigits]
    leg setup $dest callInfo leg_incoming
        }

    # Тут, тайм аут, ничего не набрали...
    if {$status == "cd_001"} {
    set dest [infotag get evt_dcdigits]
    leg setup 111 callInfo leg_incoming
        }

    # Набрали, но номера не существует...
    if {$status == "cd_006"} {
    set dest [infotag get evt_dcdigits]
    leg setup 111 callInfo leg_incoming
        }

    return
    }

--- вот что добавил ---

    proc act_CallSetup { } {
    # Процедура установки звонка

        puts "\n proc act_CallSetup start"

        global PressedKey

        set PressedKey [infotag get evt_dcdigits]
        switch $PressedKey {
            "8" {
            leg setup 111 callInfo leg_incoming
            }
            "9" {
            leg setup 111 callInfo leg_incoming
            }
        }
        return
        }

set ivr_fsm(CALLCOMES,ev_setup_indication) "act_Setup        same_state"
set ivr_fsm(GETDEST,ev_collectdigits_done) "act_GotDestination        same_state"
set ivr_fsm(PLACECALL,ev_media_done)             "act_CallSetup same_state"
fsm define ivr_fsm CALLCOMES

Но эти изменения не ощущаются.. Как было так и есть...
Подскажите, плз...Что не так?
Спасибо!


Содержание

Сообщения в этом обсуждении
"Cisci IVR"
Отправлено EL , 22-Дек-06 09:52 
>
>proc act_GotDestination { } {
> global NumSedtPrompt
>
> puts "\n---- in  act_GotDestination\n"
> set status [infotag get evt_status]
>        puts "\n---- act_GotDestination status:
>$status \n"
>
> # Вот здесь, внутренный набран правильно, уходим на него
> if {$status == "cd_004"} {
> set dest [infotag get evt_dcdigits]


switch -regexp $dest {
{^8} {
     leg setup 111 callInfo leg_incoming
      }
{^9}  {
      leg setup 111 callInfo leg_incoming
      }
default {
>      leg setup $dest callInfo leg_incoming
>     }
}
}

>
> # Тут, тайм аут, ничего не набрали...
> if {$status == "cd_001"} {
> set dest [infotag get evt_dcdigits]
> leg setup 111 callInfo leg_incoming
>     }
>
> # Набрали, но номера не существует...
> if {$status == "cd_006"} {
> set dest [infotag get evt_dcdigits]
> leg setup 111 callInfo leg_incoming
>     }
>
> return
> }
>
>set ivr_fsm(CALLCOMES,ev_setup_indication) "act_Setup  same_state"
>set ivr_fsm(GETDEST,ev_collectdigits_done) "act_GotDestination  same_state"
>set ivr_fsm(PLACECALL,ev_media_done)          
>  "act_CallSetup same_state"
>fsm define ivr_fsm CALLCOMES
>
>Но эти изменения не ощущаются.. Как было так и есть...
>Подскажите, плз...Что не так?
>Спасибо!

И не будет - если интересно почему - man
А нет - добавь приблизительно то что выше


"Cisci IVR"
Отправлено EL , 22-Дек-06 10:12 
А по хороошему надо что-то типа етого:

proc act_GotDestination { } {
  set status [infotag get evt_status]
  
  if {$status == "cd_004"} {
      set dest [infotag get evt_dcdigits]

      switch -regexp $dest {
         {^8} { set dest 111 }
         {^9} { set dest 111 }
      }
   } else {
      set dest 111
   }
   leg setup $dest callinfo leg_incoming
   return
}



"Cisci IVR"
Отправлено Cisci IVR , 22-Дек-06 10:59 
>А по хороошему надо что-то типа етого:
>
>proc act_GotDestination { } {
>  set status [infotag get evt_status]
>
>  if {$status == "cd_004"} {
>      set dest [infotag get evt_dcdigits]
>
>      switch -regexp $dest {
>         {^8} { set
>dest 111 }
>         {^9} { set
>dest 111 }
>      }
>   } else {
>      set dest 111
>   }
>   leg setup $dest callinfo leg_incoming
>   return
>}

Пасибо, супер!