Поработал еще. Ситуация улучшается. На сегодня конфиг такой:proc init { } {
# Инициализация глобальных статических переменных
puts "\n proc Init start"
global param
global phonePattern
global commercePhone
global customerSupport
infotag set med_language_map 0 ru
infotag set med_location ru 0 tftp://хххххххххххххххххххххххххххххххх
infotag set med_location ru 1 tftp://хххххххххххххххххххххххххххххххх
infotag set med_language 0
set param(initialDigitTimeout) 10
set param(interruptPrompt) true
set param(maxDigits) 1
set phonePattern(1) {[1,2]}
# Телефонные номера служб "по умолчанию"
set customerSupport "7хххххххххх"
set commercePhone "7хххххххххх"
puts "\n proc Init finish"
}
proc init_perCallVars { } {
# Процедура инициализирует глобальные динамические переменные
puts "\n proc Init_perCallVars start"
global SetupDone
set SetupDone 0
puts "\n proc Init_perCallVars finish"
}
proc act_Setup { } {
# Процедура принимает входящий звонок и проигрывает приветсвие и просьбу о переводе телефона в тональный режим
puts "\n proc act_Setup start"
init_perCallVars
leg setupack leg_incoming
leg proceeding leg_incoming
leg connect leg_incoming
SelectMenu
puts "\n proc act_Setup finish"
}
proc SelectMenu { } {
puts "\n proc SelectMenu start"
global param
global phonePattern
media play leg_incoming %s500 _subscriberAbsent.au %s500 _subscriberBusy.au
# Первый файл в дальнейшем должен быть замещен приветствием и просьбой перевода телефона в тональный режим.
# Второй файл содержит информации по номерам
leg collectdigits leg_incoming param phonePattern
puts "\n proc SelectMenu finish"
}
proc CheckEnteredDigit { } {
# Процедура проверяет событие
puts "\n proc CheckEnteredDigit start"
set collect_status [infotag get evt_status]
switch $collect_status {
"cd_001" {
media play leg_incoming _nothingEntered.au
fsm setstate CALLCOMES
}
"cd_002" {
SelectMenu
fsm setstate CALLCOMES
}
"cd_005" {
fsm setstate PLACECALL
act_CallSetup
}
"cd_006" {
media play leg_incoming %s500 _wrongMenuPoint.au
fsm setstate CALLCOMES
}
}
}
proc act_CallSetup { } {
# Процедура установки звонка
puts "\n proc act_CallSetup start"
global SetupDone
global customerSupport
global commercePhone
set SetupDone 1
set collect_digits [infotag get evt_dcdigits]
switch $collect_digits {
1 {
leg setup $commercePhone callinfo leg_incoming
}
2 {
leg setup $customerSupport callinfo leg_incoming
}
default {
media play leg_incoming _wrongMenuPoint.au
}
}
}
proc act_CleanupT { } {
# Процедура завершения звонка
call close
}
requiredversion 2.0
init
# FSM
set ivr_fsm(any_state,ev_disconnected) "act_Cleanup same_state"
set ivr_fsm(CALLCOMES,ev_setup_indication) "act_Setup same_state"
set ivr_fsm(CALLCOMES,ev_collectdigits_done) "CheckEnteredDigit CHECKENTERED"
set ivr_fsm(CHECKENTERED,ev_media_done) "SelectMenu CALLCOMES"
set ivr_fsm(PLACECALL,ev_media_done) "act_CallSetup samestate"
set ivr_fsm(CALLDISCONNECT,ev_disconnect_done) "act_Cleanup same_state"
fsm define ivr_fsm CALLCOMES
На текущий момент нету следующего:
1. Необходимо после истечения таймаута проигрывать аушку типа вы ничего не набрали и будете соединены с техподдержкой и соединять с customerSupport.
2. После неверно набранной цифры, нужно сделать чтобы после проигрывания аушки "несуществующий пункт меню" абонент мог повторно нажать цифру и соединиться с нужным отделом.
Буду думать дальше. Если у кого есть идеи - прошу поделиться.