среда, 21 декабря 2016 г.

VXML IVR на IOS гейтвее

VXML IVR на IOS гейтвее

Ниже я покажу как создать простенькое голосовое меню на маршрутизаторе с помощью vxml-скрипта. Сам скрипт можно писать в любом текстовом редакторе, а сохранять с расширением *.vxml. Под катом подробнее..


<?xml version="1.0"?>
<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>  
Логика этого скрипта простая: звонит клиент и слышит приветствие Rus-Woman.au. Далее он может нажатиями кнопок заставить скрипт выполнить ряд действий. Сами dtmf-сигналы скрипт слушает в конструкциях <choice dtmf="0" next="#eng"/>, где #abc - это имя формы, на которую скрипт переходит при выборе соответствующей цифры.
После создания скрипта необходимо его вместе со всеми звуковыми файлами скопировать во флэш маршрутизатора. Затем в конфиге создать новый 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 бла-бла

Комментариев нет:

Отправить комментарий