Голосовое меню на Cisco VoiceXML |
Постановка
задачи
Будем разрабатывать
голосовое меню,
ориентированное на
голосовой шлюз
(Voice
Gateway)
Cisco 3925, поддерживающую выполнение скриптов
на VoiceXML.
В рабочие часы будет
воспроизводиться приветствие и звонок будет переводиться на заданный
внутренний номер
В нерабочее и выходные — специальное объявление, что, мол,
звоните по будням. |
Структура
голосового меню
Структура голосового меню:
-
Маршрутизация входящего звонка на наш vxml-скрипт.
-
Временно́е условие
-
Воспроизведение звукового файла
-
Перевод звонка на внутренний номер
-
Загрузка и активация vxml-скрипта
|
Маршрутизация
входящего звонка
Предположим, что номер у нас приходит от провайдера по обычной телефонной
линии (pots) в виде 7XXXYYYZZZZ. Нужно создать новый dial-peer (маршрутизатор
звонка) и указать, что
маршрутизировать входящий звонок следует на сервис «test»:
gw#conf t
gw(config)#dial-peer voice 100 pots
gw(config-dial-peer)#description IVR-Test
gw(config-dial-peer)#incoming called-number 7XXXYYYZZZZ
gw(config-dial-peer)#service test
Звонок входит, но пока нет собственно приложения «test».
|
Временно́е условие
Пишем первый XML-блок.
Сперва инициализируем переменные,
затем составляем нужное условие:
<!-- Time is in UTC -->
<!-- Day of week: 0 - sunday, 1 - monday ... 6 - sunday -->
<var name="VAR_Hour" expr="new Date().getHours()"/>
<var name="VAR_Day" expr="new Date().getDay()"/>
<!-- Time condition -->
<form id="IVR_TimeCondition">
<block>
<if cond="5 <= VAR_Hour && VAR_Hour < 14 && 0 < VAR_Day && VAR_Day < 6">
<goto next="#IVR_Business" />
<else />
<goto next="#IVR_NonBusiness" />
</if>
</block>
</form>
|
Файлы
и XML-блок
Загружаем необходимые файлы в память, к примеру, с HTTP-сервера
192.168.0.10:
gw#mkdir test
gw#copy http://192.168.0.10/ivr1.wav
flash0:/test/ivr1.wav
gw#copy http://192.168.0.10/ivr2.wav
flash0:/test/ivr2.wav
XML-блок, который отвечает за объявление по выходным, выглядит так:
<!-- Non business hours -->
<form id="IVR_NonBusiness">
<block>
<prompt><audio src="flash0:/test/ivr2.wav"/></prompt>
</block>
</form>
|
Маршрутизация на
внутренний номер
Тут по схеме также небольшое приветствие (ivr1) и перевод звонка на
заданный внутренний номер.
Перевод звонка
осуществлялся с помощью адреса phone://EXT.
<!-- Business hours -->
<form id="IVR_Business">
<block>
<prompt><audio src="flash0:/test/ivr1.wav"/></prompt>
</block>
<transfer name="mycall" transferaudio="flash0:/test/music.wav" bridge="false" dest="phone://123">
<filled>
<log>TRANSFER RETURNED: <value expr="mycall"/></log>
</filled>
</transfer>
</form>
Параметр transferaudio — это звуковой файл, который
будет играть, пока номер 123 не возьмёт трубку. |
Загрузка и
активация vxml-скрипта
Итак, теперь мы имеем окончательный скрипт test.vxml,
и можно загружать его в шлюз.
Аналогично, с помощью HTTP-сервера:
gw#copy http://192.168.0.10/test.vxml
flash0:/test/test.vxml
Активируем скрипт «test»:
gw#conf t
gw(config)#application
gw(config-app)#no service test flash0:/test/test.vxml
gw(config-app)#service test flash0:/test/test.vxml
Всё!
С помощью этого базового скрипта даже у новичка
получится написать простое голосовое меню.
|
|