Ниже я покажу как создать простенькое голосовое меню на маршрутизаторе с помощью vxml-скрипта. Сам скрипт можно писать в любом текстовом редакторе, а сохранять с расширением *.vxml. Под катом подробнее..
После создания скрипта необходимо его вместе со всеми звуковыми файлами скопировать во флэш маршрутизатора. Затем в конфиге создать новый service и привязать его к нужному диал-пиру:
<?xml version="1.0"?>Логика этого скрипта простая: звонит клиент и слышит приветствие Rus-Woman.au. Далее он может нажатиями кнопок заставить скрипт выполнить ряд действий. Сами dtmf-сигналы скрипт слушает в конструкциях <choice dtmf="0" next="#eng"/>, где #abc - это имя формы, на которую скрипт переходит при выборе соответствующей цифры.
<vxml version="2.0" base="flash:/kit-ivr/KFB-RU.vxml">
<var name="number" expr="100"/>
<menu id="main" dtmf="false">
<property name="timeout" value="4s"/>
<prompt><audio src="flash:/kit-ivr/Rus-Woman.au"/></prompt>
<catch event="com.cisco.fax.cng"><goto next="#fax"/></catch>
<catch event="noinput"><goto next="#sek"/> </catch>
<catch event="nomatch"><prompt bargein="false"><audio src="flash:/vxml-ivr/absent_number.wav"/></prompt><goto next="#sek"/></catch>
<choice dtmf="0" next="#eng"/>
<choice dtmf="1" next="#cash"/>
<choice dtmf="2" next="#edu"/>
<choice dtmf="3" next="#sup"/>
<choice dtmf="4" next="#nm1"/>
<choice dtmf="5" next="#sek"/>
<choice dtmf="6" next="#nm3"/>
</menu>
<menu id="eng" dtmf="false">
<property name="timeout" value="4s"/>
<prompt><audio src="flash:/kit-ivr/Eng-Man.wav"/></prompt>
<catch event="com.cisco.fax.cng"><goto next="#fax"/></catch>
<catch event="noinput"><goto next="#sek"/> </catch>
<catch event="nomatch"><prompt bargein="false"><audio src="flash:/vxml-ivr/absent_number.wav"/></prompt><goto next="#sek"/></catch>
<choice dtmf="1" next="#cash"/>
<choice dtmf="2" next="#edu"/>
<choice dtmf="3" next="#sup"/>
<choice dtmf="4" next="#nm1"/>
<choice dtmf="6" next="#nm3"/>
</menu>
<form id="nm1">
<catch event="noinput"> <goto next="#sek"/> </catch>
<field name="num">
<grammar type="application/grammar+regex">[0-9][0-9][0-9][0-9]</grammar>
<filled>
<assign name="number" expr="'phone://4'+num"/>
<goto next="#main_nm"/>
</filled>
</field>
</form>
<form id="nm2">
<catch event="noinput"> <goto next="#sek"/> </catch>
<field name="num">
<grammar type="application/grammar+regex">[0-9][0-9][0-9][0-9]</grammar>
<filled>
<assign name="number" expr="'phone://5'+num"/>
<goto next="#main_nm"/>
</filled>
</field>
</form>
<form id="nm3">
<catch event="noinput"> <goto next="#sek"/> </catch>
<field name="num">
<grammar type="application/grammar+regex">[0-9][0-9][0-9][0-9]</grammar>
<filled>
<assign name="number" expr="'phone://6'+num"/>
<goto next="#main_nm"/>
</filled>
</field>
</form>
<form id="main_nm">
<transfer connecttimeout="15s" name="mycall" destexpr="number" bridge="true">
<catch event="error.connection.noroute error.connection.baddestination error.connection.noauthorization ">
<prompt><audio src="flash:/vxml-ivr/absent_number.wav"/></prompt>
<goto next="#sek"/>
</catch>
<filled>
<if cond="mycall == 'busy'">
<prompt><audio src="flash:/vxml-ivr/number_busy.wav"/></prompt>
<goto next="#sek"/>
<elseif cond="mycall == 'noanswer'"/>
<prompt><audio src="flash:/vxml-ivr/no_answer.wav"/></prompt>
<goto next="#sek"/>
</if>
</filled>
</transfer>
</form>
<form id="sek">
<transfer name="mycall" dest="phone://44002" bridge="false"> </transfer>
</form>
<form id="sup">
<transfer name="mycall" dest="phone://44020" bridge="true"> </transfer>
</form>
<form id="cash">
<transfer name="mycall" dest="phone://44013" bridge="true"> </transfer>
</form>
<form id="edu">
<transfer name="mycall" dest="phone://44725" bridge="false"> </transfer>
</form>
<form id="fax">
<transfer name="mycall" dest="phone://44352" bridge="true"> </transfer>
</form>
<form id="esp">
<transfer name="mycall" dest="phone://44729" bridge="true"> </transfer>
</form>
</vxml>
После создания скрипта необходимо его вместе со всеми звуковыми файлами скопировать во флэш маршрутизатора. Затем в конфиге создать новый service и привязать его к нужному диал-пиру:
applicationСледует помнить, что подобные сервисы висят в памяти роутера и при каких-либо изменениях в скрипте и его повторной заливке во флэш изменения произойдут только либо после перезагрузки, либо после выполнения:
service KITBroker flash:kit-ivr/KFB-RU.vxml
!
dial-peer voice 1009 pots
description ### ISDN-IVR ###
service kitbroker
incoming called-number ХХХХХХХ
direct-inward-dial
no sip-register
!
application
no service бла-бла
service бла-бла
Добрый день,
ОтветитьУдалитьа в Вашем скрипте нет такой проблемы, что не работает consult transfer, когда секретарь пытается перевести на кого-либо?
Здравствуйте.
УдалитьИзвините за долгий ответ, был в отпуске.
нет, на моих двух маршрутизаторах, где крутятся подобные скрипты, такой проблемы нет..собственно, данная статья - своего рода шаблон, который не претендует на идеальность..в каждом конкретном случае при возникновении каких-то проблем нужно смотреть индивидуально
Доброго времени суток. Есть задача поставленная руководством реализовать "автосекретарь" на sip-шлюзе. Замысел такой, при входящем звонке проигрывается: "...Если знаете внутренний номер абонента, наберите. Если не знаете, оставайтесь на линии". Т.е. при наборе внутреннего номера, звонок должен передаться на callmanager, далее адресату, а при бездействии переводится также на callmanager с номером телефона секретаря. Подскажете пожалуйста, что необходимо дополнить/переделать в вашем скрипте?
ОтветитьУдалить