VXML记录处理dtmf termchar

时间:2013-08-01 08:27:48

标签: voice-recording vxml voicexml

我在记录标记中处理dtmf时遇到问题。

我希望识别录制过程中输入的零点,并根据值执行特定操作。在讲话之前或之后的任何时间都可以输入零。

使用以下代码段,我看到当我输入零时,应用程序退出。它看起来像是块标记,但随后处理终止。我不知道这里有什么问题。或者有更好的方法来实现同样的目标吗?

我在这里也提到了答案:VoiceXML - Recognize DTMF in Recording,但需要更多细节。

<form id="recordMessage">
<property name="termchar" value="" />
<property name="inputmodes" value="dtmf" />

<var name="lastdtmfchar" expr="1"/>

<record name="recording"  beep="true" maxtime="120s"  dtmfterm="false" type="audio/wav">
  <grammar mode="dtmf" version="1.0" root="dtmfSettings" xmlns="http://www.w3.org/2001/06/grammar">
     <rule id="dtmfSettings" >
        <one-of>
           <item>0</item>
           <item>#</item>               
        </one-of>
     </rule>
  </grammar>
    <filled>
    <assign name="lastdtmfchar" expr="recording$.termchar"/>        
    <if cond = "recording$.termchar == '#'">
    <prompt> Hash entered
    </prompt>           
    </if>
    <if cond = "recording$.termchar == '0'">
        <prompt> zero entered
    </prompt>
    </if>
    </filled>       
</record>   
<block>
    <if cond = "lastdtmfchar == '1'">   
    <prompt>  block value not assigned
    </prompt>
    </if>   
    <if cond = "lastdtmfchar == '#'">
        <prompt> block hash entered
    </prompt>           
    </if>
    <if cond = "lastdtmfchar == '0'">
        <prompt> block zero entered
    </prompt>
            </if>
</block> 

表单中只有此记录标记,但根文档具有所有处理程序..

<vxml .....>
<catch event="connection.disconnect.hangup">
    <goto next="${hangupUrl}?cause=hangup" />
</catch>
<catch event="connection.disconnect">
    <goto next="${hangupUrl}?cause=disconnect" />
</catch>
<catch event="error">
    <prompt>
        <audio src="${goodbyeUrl">
        </audio>
    </prompt>
    <exit/>
</catch>
<catch event="*">
    <prompt>
        <audio src="${goodbyeUrl">
        </audio>
    </prompt>
    <exit/>
</catch>
<property name="termchar" value="#"/>
<link dtmf="0" next="${globalHandlerUrl}">  
</link>
</vxml>

1 个答案:

答案 0 :(得分:0)

如你所述,dtmfterm = false可能是原因。 您可以通过访问application.lastresult $来获得语法匹配的字符。参考http://www.w3.org/TR/voicexml20/#dml2.3.6 同意@kevin在IVR中,很多东西都依赖于供应商本身(在记录中使用语法本身是可选的)