# Critical Digit Timeout

When there are multiple active DTMF grammars during recognition and DTMF input matches one of the grammars but may still match other grammars, interdigittimeout applies according to the VoiceXML 2.0 specification, Appendix D.1. The Dialogic(r) IP Media Server introduces a new DTMF input timeout property called com.snowshore.criticaldigit_timer. When specified, com.snowshore.criticaldigit_timer overrides interdigittimeout for the two cases mentioned below when at least one grammar is matched by partial input. In such cases, com.snowshore.criticaldigit_timer applies instead of interdigittimeout.

INTERDIGITTIMEOUT - Grammar is Ready to Terminate

The example below shows the situation when a DTMF grammar could terminate, or extend by the addition of more DTMF input, and the user has elected not to provide any further input.

Below is a timing diagram for interdigittimeout when a grammar is ready to terminate.

Termchar and INTERDIGITTIMEOUT - Grammar Can Terminate

In the example below, a termchar is non-empty, and is entered by the user before an interdigittimeout expires to signify that the user’s DTMF input is complete. The termchar is not included as part of the recognized value.

Below is a timing diagram for termchar and interdigittimeout when a grammar can terminate.

The com.snowshore.criticaldigit_timer overrides the interdigittimeout for two reasons. The first is to enable these intervals to be different. Normally the critical digit timer is shorter than the interdigittimeout. The second is to force a shortest match first behavior if the com.snowshore.criticaldigit_timer is set to 0. The two must be separate because setting the interdigittimeout to 0 will always return a single digit.

com.snowshore.criticaldigit_timer provides a means of allowing “shortest match first” with multiple DTMF grammars. This allows co-existence of single digit <menu> entries with multi-digit global <link>s. With shortest match first, the menus would be filled first. With standard VoiceXML “longest match first”, the single digit <menu>s would fail if there was type-ahead that happened to match the <link>.

In addition, com.snowshore.criticaldigit_timer can give faster timeouts when there is a match over interdigittimeout, even in a longest match situation.

For each DTMF digit input received, the Interpreter goes through all active DTMF grammars and checks how they match with the digits accumulated so far. If the input satisfies one of the grammars, but other grammars still have partial matches, this is considered a “partial match”. An interdigittimeout timer is started and recognition resumes. The change is to check if any of the grammars are satisfied (while others have partial matches) and use com.snowshore.criticaldigit_timer instead of interdigittimeout. In the absence of the com.snowshore.criticaldigit_timer property, interdigittimeout is used as usual. Valid values for this property are any time designation as described in section 6.5.2 of the VoiceXML 2.0 specification. In this case, when there is a partial DTMF match, a “match event” (e.g., <field> is filled, or <link> is invoked, etc.) is generated after the critical timeout. If the application sets this to 0, the consequence is that a match event is generated immediately after the user enters a DTMF sequence matching a grammar. If the user uses a negative value for the Critical Timeout, the interpreter logs an error and sets the Critical Timeout value to 0. If the user omits this parameter, then the behaviour is exactly the same as described in the VoiceXML 2.0 specification.