I'm having a problem where I'm getting a nomatch to any utterance for <field type="number">. If I change it to "digits", it works fine. Here's my simplified code, with some dubugging TTS added in:
<?xml version="1.0" encoding="UTF-8"?>
<vxml version="2.0">
<property name="fetchtimeout" value="15s"/>
<property name="termmaxdigits" value="true"/>
<form id="skipTo">
<var name="orgId" expr="1008" />
<var name="key" expr="'06'" />
<var name="commentCount" expr="7" />
<var name="tries" expr="0"/>
<catch event="noinput">
No input received.
<if cond="++tries < 3">
<clear/>
<reprompt/>
<else/>
I give up.
<disconnect />
</if>
</catch>
<catch event="nomatch">
No match found for <value expr="commentNumber" />.
<if cond="++tries < 3">
<clear/>
<reprompt/>
<else/>
I give up.
<disconnect />
</if>
</catch>
<field name="commentNumber" type="number">
<property name="timeout" value="6s"/>
<property name="interdigittimeout" value="8s"/>
<property name="termtimeout" value="4s"/>
<prompt bargein="true">
Please say a number between 1 and <value expr="commentCount" />
for the comment you want to hear, or enter it on the keypad
followed by the pound sign.
</prompt>
</field>
<block>
<if cond="commentNumber == 0 || commentNumber > commentCount">
<throw event="nomatch" />
<else />
You said <value expr="commentNumber" />.
<submit namelist="orgId key commentNumber" next="goToMsg" />
</if>
</block>
</form>
</vxml>
Using the above code, no matter what I enter, it responds with "No match found for." (The platform recognizes that I provided an utterance, but it's not recorded in the commentNumber variable.)
The problem you were experiencing was occurring because your script was not correctly capturing the noinput event. We changed your conditional to reflect a valid match, nomatch, and noinput. When you were experiencing the "No match found for." without an utterance played, it was not playing back the utterance because it actually should have been catching a noinput (instead of a nomatch) and therefore had nothing valid to play back. The following changes to your <field> should resolve this issue.
<field name="commentNumber" type="number">
<property name="timeout" value="6s"/>
<property name="interdigittimeout" value="8s"/>
<property name="termtimeout" value="4s"/>
<prompt bargein="true">
Please say a number between 1 and <value expr="commentCount" />
for the comment you want to hear, or enter it on the keypad
followed by the pound sign.
</prompt>
<filled>
<if cond="commentNumber <= commentCount">
You said <value expr="commentNumber" />.
<submit namelist="orgId key commentNumber" next="goToMsg" />
<elseif cond="commentNumber == 0 || commentNumber > commentCount"/>
<throw event="nomatch"/>
<else />
<throw event="noinput"/>
</if>
</filled>
</field>
We also changed your <block> tags to <filled> tags, as this is the standard for capturing input in a <field>.
Thank you, but I have made the changes you suggest, and it still fires nomatch when I provide valid input (for example, DTMF "5#").
Also, I don't think the code you provided correctly replicates the conditions I was checking for. My original condition was supposed to throw nomatch if commentNumber was 0 or greater than commentCount. (Technically, I should probably be checking for negative and fractional values, as well.) The code you provided theoretically would accept 0 as valid, since it tests commentNumber <= commentCount first.
In any case, what it needs to do is accept any value between 1 and commentCount (inclusive) and reject all others. Right now, even with your suggested changes, it still rejects perfectly valid input.
We have been unable to reproduce this issue for our hosted environment. We would recommend sending an e-mail to support@plumgroup.com for our engineering team to look further into this issue. Please make sure to include your 8-digit customer ID in the subject line of your e-mail to support. Your 8-digit customer ID can be found in your support contract with Plum.
Also, in your e-mail, you'll want to mention the IP address of your IVR system for our engineering team to check the call logs and a phone number we can dial into with steps on how we can reproduce the issue you're experiencing.