Задание:
Разработать диалплан, реализующий процесс записи голосовых сообщений и размещение их в виде звуковых файлов на сервере по заданному пути (задается переменной в диалплане, последним уровнем вложения каталога должен быть выбранный язык записи (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
Спасибо большое. Очень пригодилось.