В настоящее время я работаю над приложением VXML 2.0, которое использует OSDM Nuance с грамматиками GRXML.
В одной из наших подсказок звонящему предлагается ввести дату рождения, но если у него ее нет под рукой, он может либо сказать «отмена», либо нажать звездочку. Это Date OSDM, и я добавил дополнительную грамматику команды для обработки «отмены» или звездочки для речи и ввода DTMF соответственно.
Говорить «отмена» работает; Грамматика даты обходится, грамматика команды активируется, и код работает так, как я ожидаю. А вот со звездочкой совсем другая история. Когда я запускаю отладочный вызов и нажимаю клавишу звездочки на своем телефоне, он обрабатывается как несоответствие. Просматривая руководство OSDM, выясняется, что запись DTMF в OSDM Nuance Date выполняется с помощью встроенной грамматики цифр DTMF с диапазоном от 2 до 8 цифр.
В руководстве также говорится следующее: «Если указана параллельная грамматика, OSDM сопоставляет ввод DTMF как с грамматикой коллекции DTMF, так и с параллельной грамматикой. Если символ DTMF соответствует обеим грамматикам, возвращается совпадение параллельной грамматики».
Итак, я думаю, что грамматика цифр имеет «*» в качестве запеченного символа завершения, и это переопределяет мое явное объявление о том, что только «#» может быть символом завершения:
- Нажимаю звездочку.
- Грамматика цифр DTMF активируется.
- Грамматика цифр DTMF приводит к пробелу, потому что звездочка является символом термина, и никакой другой ввод не был сделан.
- Пробел — это OOG, потому что длина составляет от 2 до 8 цифр.
- Несовпадение возвращается.
Я застрял с использованием OSDM, так как его работа жизненно важна для того, как наше приложение ведет журнал событий. Тем не менее, я могу проявить творческий подход, отвечая на звездочку.
Есть ли другой способ заставить звездочку считаться допустимым вводом, и либо дойти до моей пользовательской грамматики команды, либо обойти вызов OSDM и обработать его самостоятельно?