Обычный 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
Но эти изменения не ощущаются.. Как было так и есть...
Подскажите, плз...Что не так?
Спасибо!