如何循环以获取VXML中的多个动态字段

时间:2012-10-04 22:48:30

标签: ivr vxml voicexml

如何使用起始和结束数字循环遍历字段,在使用或不使用PHP的情况下将输入保存到VXML中的数组?

Psuedo代码类似于:

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

1 个答案:

答案 0 :(得分:3)

您的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>

这使您可以很好地了解如何处理循环并提交结果。我没有包含任何错误处理。