The OpenNET Project / Index page

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



Индекс форумов
Составление сообщения

Исходное сообщение
"иерархические голосовые меню на TCL IVR на cisco"
Отправлено lisergey, 19-Июн-07 14:24 
добрый день!

у кого-нить есть примеры иерархических голосовых меню на цискином TCL IVR?

задача - создать факс-сервер на cisco 2811 с такими возможностями:
вход. звонок приходит на циску, играется приветствие
"вы позвонили в фирму Рога и Копыта"
"если хотите отправить факс, нажмите 1"
"или если хотите соединиться с сотрудником, нажмите 2 или оставайтесь на линии"

далее, если звонящий жмет 1, то попадает на меню, реализованную цискиным скриптом
fax_detect_2.1.2.0.tcl, проигрывающего записи
"нажмите внутренний номер абонента и кнопку Старт"
"или дождитесь ответа секретаря"


первая часть реализована на скрипте, любезно предоставленным Xevyk (https://www.opennet.ru/openforum/vsluhforumID6/11941.html)

вторая часть реализована
(как описано http://www.cisco.com/univercd/cc/td/doc/product/software/ios... и http://www.cisco.com/en/US/products/sw/iosswrel/ps1839/produ...) и работает сама по себе.

не получается состыковать обе части вместе - при попадании на циску по тестовому номеру 300 и выборе 1 или 2 получаем тишину, а циска в дебагах пишет что не нашла подходящий диал-пир.

при этом по отдельности звонки на 301 или 302 пишат факсом.
звонок на 300 - играет приветствеи и дает на выбор жать 1 или 2, отдельной конфигурацией проверял что после 1 или 2 нужный номер набирается.

где грабли?  подскажите плиз, что исправить...

часть конфига
!        
fax receive called-subscriber $d$
fax interface-type fax-mail
mta send server 80.80.106.249 port 25
mta send subject fax2mail from cisco.ccard.ru
mta send filename fax
mta send postmaster fax@ccard.ru
mta send mail-from hostname cisco.ccard.ru
mta send mail-from username $s$
!        
application
service test tftp://tftp-server/test.tcl
!        
service fax2mail flash:app_faxmail_onramp.2.0.1.3.tcl
!
service faxdetect flash:fax_detect_2.1.2.0.tcl
  param prompt tftp://tftp-server/prompts/en/en_default_fax.au
  param warning-time 10
  param voice-dtmf 1
  param fax-dtmf 2
  param account-id-method ani
  param mode default-fax
!
dial-peer voice 100 mmoip
service fax_on_vfc_onramp_app out-bound
destination-pattern .T
information-type fax
session target mailto:faxtest1@domen.ru
image encoding MH
image resolution super-fine
!        
dial-peer voice 101 mmoip
service fax_on_vfc_onramp_app out-bound
destination-pattern 101
information-type fax
session target mailto:faxtest2@domen.ru
image encoding MH
image resolution super-fine
!
! пир для входящих звонков с АТСки        
dial-peer voice 300 pots
service test
incoming called-number 300
direct-inward-dial
!        
dial-peer voice 301 pots
service fax2mail
answer-address 301
incoming called-number 301
direct-inward-dial
!
dial-peer voice 302 pots
service faxdetect
incoming called-number 302
direct-inward-dial
!

в самом скрипте test.tcl прописано, что если жмем 1, то скрипт набирает 301, а если жмем 2, то

cсам скрипт (cлегка модифицировнный скрипт от Xevyk):
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://tftp-server/prompts/
        infotag set med_location ru 1 tftp://tftp-server/prompts/
        infotag set med_language 0

    set param(initialDigitTimeout) 10
    set param(maxDigits) 1
    set phonePattern(1) {[1,2]}

# Телефонные номера служб "по умолчанию"
    set commercePhone "301"
    set customerSupport "302"

    puts "\n proc Init finish"

}

proc init_perCallVars { } {
# Процедура инициализирует глобальные динамические переменные

    puts "\n proc Init_perCallVars start"

    global PressedKey
    global Status

    if { [info exists PressedKey] } { unset PressedKey }
    if { [info exists Status] } { unset Status }
    # Сразу же сбрасываем переменные на всякий случай

    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

    Play_Intro_Sound

    puts "\n proc act_Setup finish"

}

proc Play_Intro_Sound { } {
# Процедура проигрывает приветствие

    puts "\n proc Play_Intro_Sound start"

    media play leg_incoming %s500 _hello.au

    fsm setstate CHECKENTERED

    puts "\n proc Play_Intro_Sound finish"

}

proc SelectMenu { } {
# Процедура проигрывает файл с информацией по номерам и собирает нажатую цифру

    puts "\n proc SelectMenu start"

    global param
    global phonePattern
    global PressedKey
    global Status

    set param(interruptPrompt) true
    # Разрешаем прервать звуковой файл
    if { [info exists PressedKey] } { unset PressedKey }
    if { [info exists Status] } { unset Status }
    # Сбрасываем значение переменных если они уже присвоены


    media play leg_incoming %s1000 _phones.au
    # Файл содержит информации по номерам

    leg collectdigits leg_incoming param phonePattern
    # Собираем набранные цифры и проверям соответствуют ли они нашему шаблону

    puts "\n proc SelectMenu finish"
}

proc CheckEnteredDigit { } {
# Процедура проверяет событие

    puts "\n proc CheckEnteredDigit start"

    global Status
    global PressedKey

    set Status [infotag get evt_status]
    set PressedKey [infotag get evt_dcdigits]

    switch $Status {
        "cd_001" {
        # НИчего не введено - сработал таймаут
        media play leg_incoming _redirect.au
        fsm setstate CALLNOTHING
        }
        #"cd_002" {
        #SelectMenu
        #fsm setstate CALLCOMES
        #}
        "cd_005" {
        # Сделан корректный выбор - соединяем с требуемым отделом
        fsm setstate PLACECALL
        act_CallSetup
        }
        "cd_006" {
        media play leg_incoming _wrongMenuPoint.au
        # Выбран несуществующий пункт меню
        fsm setstate CALLNOTHING
        }
        "cd_007" {
        # Сбор цифры был прерван - пользователь повесил трубку
        fsm setstate CALLDISCONNECT
        }
    }
    puts "\n proc CheckEnteredDigit finish"
}

proc act_CallSupport { } {
# После таймаута и проигрывания файла соединяем пользователя с техподдержкой

    puts "\n proc act_CallSupport start"

    global customerSupport

    leg setup $customerSupport callinfo leg_incoming

    puts "\n proc act_CallSupport finish"

}

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

    puts "\n proc act_CallSetup start"

    global customerSupport
    global commercePhone
    global PressedKey

    set PressedKey [infotag get evt_dcdigits]
    switch $PressedKey {
        "1" {
        leg setup $commercePhone callinfo leg_incoming
        }
        "2" {
        leg setup $customerSupport callinfo leg_incoming
        }
        default {
        media play leg_incoming _wrongMenuPoint.au
        fsm setstate CHECKENTERED
        }
    }
}

proc act_Cleanup { } {
# Процедура завершения звонка

    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(CALLNOTHING,ev_media_done)            "act_CallSupport same_state"
set ivr_fsm(CHECKENTERED,ev_media_done)            "SelectMenu CALLCOMES"
set ivr_fsm(PLACECALL,ev_media_done)             "act_CallSetup same_state"
set ivr_fsm(CALLDISCONNECT,ev_disconnect_done)         "act_Cleanup same_state"

fsm define ivr_fsm CALLCOMES


надеюсь на помощь
если вся эта штука заработает, то в итоге будет очень полезная фича :)

 

Ваше сообщение
Имя*:
EMail:
Для отправки новых сообщений в текущей нити на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

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