Создание IVR меню в Asterisk 1.8

Задание:

Разработать диалплан, реализующий процесс записи голосовых сообщений и размещение их в виде звуковых файлов на сервере по заданному пути (задается переменной в диалплане, последним уровнем вложения каталога должен быть выбранный язык записи (ua,ru,en).

Формат имени звукового файла: 380935550104_02.05.2012_12_15.wav.
Т.е. %номер_звонящего%_%день_записи%.%месяц_записи%.%год_записи%_%ЧЧ_ММ-время записи%.wav

Согласно логике диалплан предусматривает авторизацию. Код авторизации должен быть заложен статически в диалплан. На схеме нет варианта выбора языка.

После авторизации нужно добавить воспроизведение файла language_selection.wav и предусмотреть 3 варианта выбора:
1 – украинский
2 – русский
3 – английский

Если абонент вводит не 1,2 или 3 воспроизвести звуковой файл «wrong_lang_ru_default.wav» и установить русский по-умолчанию.

Основной алгоритм диалплана:

Алгоритм воспроизведение звуковых файлов диалплана:

Решение:

В предыдущей статье было установлено и настроено Asterisk, теперь можно просто внести настройки.
extention.conf:

[globals]
SOUND_DIR=/var/lib/asterisk/sounds/en/mysounds
SERV_DIR_RU=/home/asterisk/voicemsg/ru
SERV_DIR_UA=/home/asterisk/voicemsg/ua
SERV_DIR_EN=/home/asterisk/voicemsg/en

[general]
static = yes
writeprotect = no
clearglobalvars = yes

;налаштування дзвінків в середині мережі
[internal]
exten => _XXXX,1,Dial(SIP/${EXTEN:0})

;Контекст для всіх внутрішніх номерів
[phones]
include => internal

;************ PROJECT *****************

;Телефонувати на добавочний номер 3333
exten => 3333,1,Playback(${SOUND_DIR}/welcome_ivr_recording)
same => n(auth),Read(Secret,${SOUND_DIR}/enter_entrance_code,,,3,10)
same => n,Gotoif($["${Secret}" == "1234"]?next)
same => n,Playback(${SOUND_DIR}/authorization_fail)
same => n,Goto(3333,auth)
same => n,Hangup()
same => n(next),Playback(${SOUND_DIR}/authorization_success)
same => n(language),BackGround(${SOUND_DIR}/language_selection)    ;звук переривається введенням з клавіатури
same => n,WaitExten(3)                                             ;чекає 3 сек, після того, як програлось BackGround()

exten => i,1,Playback(${SOUND_DIR}/wrong_language_ru_default)
same => n,Goto(2,1)                                                ; invalid (невірно ВВЕДЕНО номер)
exten => t,1,Goto(3333,language)                                    ; timeout
exten => 1,1,Macro(language,${SERV_DIR_UA})
exten => 2,1,Macro(language,${SERV_DIR_RU})
exten => 3,1,Macro(language,${SERV_DIR_EN})

[optmenu]
exten => 2000,1,Read(numb,${SOUND_DIR}/optional_menu,,,3,10)
same => n,Gotoif($["${numb}" = "1"]?optmenu,1,1)
same => n,Gotoif($["${numb}" = "2"]?optmenu,2,1)
same => n,Gotoif($["${numb}" = "3"]?optmenu,3,1)
same => n,Gotoif($["${numb}" = "4"]?optmenu,4,1)
same => n,System(/bin/rm ${dir}/${record_name}.wav)
same => n(bye),Playback(${SOUND_DIR}/recording_goodbye)
same => n,Hangup()

exten => 1,1,Playback(${SOUND_DIR}/interrupt_playing)
same => n,BackGround(${dir}/${record_name})                  ;прослухав запис
same => n,Goto(2000,1)

exten => 2,1,Read(digit,${SOUND_DIR}/record_was_saved,,,3,5)  ; зберегти запис
same => n,Gotoif($["${digit}" == "1"]?phones,3333,language)
same => n,Goto(2000,bye)

exten => 3,1,System(/bin/rm ${dir}/${record_name}.wav)        ;перезапис
same => n,Goto(phones,3333,language)

exten => 4,1,System(/bin/rm ${dir}/${record_name}.wav)        ;видалення запису
same => n,Goto(2000,bye)

[macro-language]
exten => s,1,Playback(${SOUND_DIR}/record_your_message)
same => n,Set(record_name=${CALLERID(number)}_${STRFTIME(${EPOCH},,%d-%m-%Y_%H-%M)})  ; Назва запису
same => n,Set(dir=${ARG1})
same => n,Record(${ARG1}/${record_name}:wav,,300,y)
same => n,Goto(optmenu,2000,1)

sip.conf:

[general]
bindport=5060
bindaddr=0.0.0.0
srvlookup=yes
registertimeout=30
maxexpiry=7200
minexpiry=3600

[1001]
qualify=yes
type=friend
context=phones
username=Sasha
host=dynamic
secret=1001
nat=yes
callerid="IT Crowd"
callgroup=1
language=ru
accountcode=Alex_Gubernatrov
disallow=all
allow=alaw
allow=ulaw
allow=gsm
allow=g729
canreinvite=no

Download source

Автор: admin, 1 сентября 2012
Рубрики: VoIP
Метки: , ,
Один комментарий к сообщению: “Создание IVR меню в Asterisk 1.8”
  1. Alexander:

    Спасибо большое. Очень пригодилось.

Написать комментарий

Последние статьи

Яндекс.Метрика
?>