Обычный IVR
Человек звонит на номер 555555. Играет приветствие.
Набераешь внутренний - уходишь на внутренний
Таймаут - ушел на секретарей, номер 111
набрал не существующий номер - ушел на секретарей, номер 111Все ок.
Вот скрипт
proc init { } {
global param
global retryCnt
global ParamForDestset param(abortKey) *
set param(interruptPrompt) true
set param(ignoreInitialTermKey) trueset ParamForDest(abortKey) *
set ParamForDest(initialDegitTimeout) 10
set ParamForDest(terminationKey) #
set ParamForDest(interruptPrompt) true
set ParamForDest(dialPlanTerm) true
set ParamForDest(ignoreInitialTermKey) truereturn
}proc init_perCallVars { } {
global PromptFlag
global DestPromptFlag
global NoPlayWarn
global NoTimeLimit
global SetupDoneset PromptFlag 0
set DestPromptFlag 0
set NoPlayWarn 0
set NoTimeLimit 0
set SetupDone 0return
}proc act_Setup { } {
global params
set params(interruptPrompt) true
set params(dialPlan) trueputs "\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 NumSedtPromptputs "\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 ParamForDestset param(abortKey) *
set param(interruptPrompt) true
set param(ignoreInitialTermKey) trueset ParamForDest(abortKey) *
set ParamForDest(initialDegitTimeout) 10
set ParamForDest(terminationKey) #
set ParamForDest(interruptPrompt) true
set ParamForDest(dialPlanTerm) true
set ParamForDest(ignoreInitialTermKey) truereturn
}proc init_perCallVars { } {
global PromptFlag
global DestPromptFlag
global NoPlayWarn
global NoTimeLimit
global SetupDoneset PromptFlag 0
set DestPromptFlag 0
set NoPlayWarn 0
set NoTimeLimit 0
set SetupDone 0return
}proc act_Setup { } {
global params
set params(interruptPrompt) true
set params(dialPlan) trueputs "\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 NumSedtPromptputs "\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Но эти изменения не ощущаются.. Как было так и есть...
Подскажите, плз...Что не так?
Спасибо!
>
>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
А нет - добавь приблизительно то что выше
А по хороошему надо что-то типа етого:
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
}
>А по хороошему надо что-то типа етого:
>
>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
>}Пасибо, супер!