0

如何使用开始和结束数字循环通过将输入保存到 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
4

1 回答 1

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>

这为您提供了如何处理循环和提交结果的好主意。我没有包括任何错误处理。

于 2012-10-05T13:51:26.290 回答