понедельник, 12 мая 2014 г.

Голосового меню (IVR) в ASTERISK.



Опишем создание голосового меню, состоящего из приветствия и после приветствия, переключение на оператора. Файл в котором хранится фраза «Здравствуйте, вы позвонили в нашу компанию» называется welcome.wav и находится в директории /usr/local/etc/asterisk/ivr. Номер, который принимает звонки 444. А выглядеть меню будет так:

[sip-in]
exten => 444,1,Set(home="/usr/local/etc/asterisk/ivr")
exten => 444,2,Wait(1)
exten => 444,3,Playback(${home}/welcome)
exten => 444,4,Dial(SIP/operator)
Функция Playback, предназначена для проигрывания звуковых файлов, файлы должны быть подготовленны заранее, для Asterisk. Есть еще сходная функция Background, она отлдичается от Playback тем, что не блокирует нажатия на кнопки, то есть в момент проигрывания голосовых меню, позволяет реагировать на передаваемые звонившим DTMF.
Это простейший IVR и в нем отсутствует основная особенность IVR, нет никакого выбора. Поэтому приведем пример с диалогом. Тут будет присутствовать вторая начитка: «Для связи того что бы прослушать тарифы нажмите 1, для связи с оператором нажмите 2″. Файл содержащий эту начитку будет называться menu.wav и файл с тарифами соответсвенно tariff.wav. После прочтения инструкции должен осуществляться переход в главное меню.
Выглядит это так:
[sip-in]
exten => 444,1,Goto(menu,s,1)

[menu]
exten => s,1,Set(home="/ usr/local/etc/asterisk/ivr ")
exten => s,2,Wait(1)
exten => s,3,Playback(${home}/welcome)
exten => s,4,Playback(${home}/menu)
exten => s,5,WaitExten()

exten => 1,1,Playback(${home}/tariff)
exten => 1,2,Goto(s,1)

exten => 2,1,Dial(SIP/operator)

exten => t,1,Playback(make_choice)
exten => t,2,Goto(s,1)

exten => i,1,Playback(wrong_choice)
exten => i,2,Goto(s,1)
Goto – функция безусловного перехода. Если в качестве параметров ей передается 3 аргумента, это контекст, екстеншен и метка на которую нужно перейти. Если всего 2 аргумента, то подразумевается, что контекст текущий.
 i – это реакция на неправильно нажатую кнопку, Invalid input
t – реакция на истекшее время ожидания выбора.

Если их не описать то при истечении таймаута или при неправильно нажатой кнопке произойдет обрыв соединения.

Комментариев нет:

Отправить комментарий