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