Hilik - Asterisk
Однією з основних переваг Астериск є легкість, з якою за допомогою нього створюються IVR. Для того щоб створити IVR потрібно в першу чергу уявити собі його структуру, тобто що за чим і як робитиметься, і скласти тексти. Зараз ми опишемо створення найпростішого голосового меню, що складається з привітання та після привітання, перемикання на оператора. Файл у якому зберігається фраза «Доброго дня, ви зателефонували в нашу компанію» називається welcome.wav і знаходиться в директорії /home/menu. Номер, який приймає дзвінки 444. А виглядатиме меню так:
[sip-in] exten => 444,1,Set(home="/home/menu") exten => 444,2,Wait(1) exten => 444,3,Playback($/welcome) exten => 444,4,Dial(SIP/operator)
У нас з'явилася нова функція Playback, вона призначена для відтворення звукових файлів, файли повинні бути підготовлені заздалегідь, тому що ми описували у статті ffmpeg, готуємо звукові файли для 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="/home/menu") exten => s,2,Wait(1) exten => s,3,Playback($/welcome) exten =>s,4,Playback($/menu) exten => s,5,WaitExten() exten => 1,1,Playback($/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 аргументи, це контекст, екстеншен та мітка на яку потрібно перейти. Якщо всього два аргументи, то мається на увазі, що контекст поточний. Так само з'явилися екстеншени i — це реакція на неправильно натиснуту кнопку, Invalid input і t — реакція на час очікування вибору, що минув. Якщо їх не описати, то при закінченні таймууту або при неправильно натиснутій кнопці відбудеться обрив з'єднання.