Как выполнить цикл для получения нескольких динамических полей в VXML

Как я могу использовать начальные и конечные числа для циклического перехода по полям, сохраняя ввод в массив в VXML с PHP или без него?

Псевдо-код будет примерно таким:

get startNo from caller
get endNo from caller
loop i from startNo to endNo
   audio prompt 'prompt' + i + '.wav'
   save input to results[i]
end loop
save results to database at end of loop or upon hangup

Я знаю, как получить начальные и конечные числа и как сохранить в базе данных, это цикл, в котором я не уверен.

Требования / другие примечания:

  • Сочетание VXML и PHP - это нормально, но я бы предпочел сохранить большую часть VXML в файлах .VXML, чтобы автозавершение кода сохранялось в моем редакторе.
  • Может быть до 50 подсказок (в соответствии с требованиями бизнеса, не просите меня переделывать это)
  • Решение должно поддерживать событие зависания, поэтому, если соединение будет потеряно на полпути, мы сможем сохранить полученные результаты.
  • Независимость от производителя, совместимость с VoiceXML 2.1

person Alien Technology    schedule 04.10.2012    source источник


Ответы (1)


Ваш VXML может выглядеть примерно так:

<?xml version="1.0" encoding="UTF-8"?> 
<vxml version = "2.1"> 

<var name="currNo" expr="startNo"/>
<var name="userResponse"/>

<form id="getUserInput"> 

   <field name="F_1" cond="currNo <= endNo"> 
     <grammar srcexpr="currNo + '.xml'" type="application/grammar-xml"/>
     <prompt>
       <audio expr="currNo + '.wav'"/>
     </prompt>
   </field>
   <filled>
      <assign name="userReponse" expr="F_1"/>
      <goto next="#handleResponse"/>
    </filled>
</form>

<form id="handleResponse">
   <block>
      <!-- Send each result to PHP app as you get them -->
      <!-- This way you will not loose any result on error or hangup -->
      <!-- Assumes you have some user ID to associate the result with -->
      <submit next="handleUserResponse.php" namelist="userId userResponse"/>
      <!-- Increment counter -->
      <assign name="currNo" expr="currNo + 1"/>
      <!-- If the counter is greater than endNo then we are done -->
      <if cond="currNo > endNo>
         <submit next="endApplication.vxml"/>
      <!-- Otherwise we loop back to get another response -->
      <else/>
          <goto next="#getUserInput"/>
      </if>
    </block>
</form>
</vxml>

Это дает вам хорошее представление о том, как обрабатывать цикл и отправлять результаты. Я не включил никакой обработки ошибок.

person Kevin Junghans    schedule 05.10.2012