«Нажмите * для отмены» при вводе даты с Nuance OSDM? - PullRequest
1 голос
/ 23 июня 2011

В настоящее время я работаю над приложением VXML 2.0, которое использует OSD Nuance с грамматикой GRXML.

В одном из наших запросов вызывающему абоненту предлагается ввести дату рождения, но, если у них его нет, он может сказать «отменить» или нажать звездочку. Это дата OSDM, и я добавил дополнительную командную грамматику для обработки слов «отмена» или звездочки для речи и DTMF соответственно.

высказывание «отменить» работает; грамматика даты обойдена, командная грамматика активируется, и код выполняется так, как я ожидал. Звездочка, однако, это отдельная история. Когда я запускаю отладочный вызов и нажимаю звездочку на своем телефоне, он обрабатывается как несоответствие. При просмотре справочника по OSDM кажется, что запись DTMF в OSDM Nuance Date выполняется с помощью встроенной грамматики цифр DTMF с диапазоном 2-8 цифр.

В справочнике также говорится следующее: «Если указана параллельная диаграмма, OSDM сопоставляет вход DTMF как с грамматикой сбора DTMF, так и с параллельной диаграммой. Если символ DTMF совпадает с обеими грамматиками, возвращается совпадение с параллельной диаграммой.»

Итак, я думаю, что цифровая грамматика имеет "*" в качестве запеченного завершающего символа, и она отменяет мое явное объявление о том, что только "#" может быть символом завершения:

  1. Я нажимаю звездочку.
  2. Цифровая грамматика DTMF активируется.
  3. Цифровая грамматика DTMF приводит к пустому значению, потому что звездочка является символом термина, а другие данные не вводились.
  4. Пробел - это OOG, потому что длина составляет 2-8 цифр.
  5. Номатч возвращается.

Я застрял с использованием OSDM, так как его работа жизненно важна для того, как наше приложение регистрирует события. Однако я могу проявить изобретательность, ответив на звездочку.

Есть ли другой способ сделать так, чтобы звездочка считалась действительным входным сигналом, и либо она достигла моей пользовательской грамматики команд, либо обошла вызов OSDM и обработала его сама?

1 Ответ

1 голос
/ 28 июня 2011

Решением было использование пользовательской грамматики команд, отдельной от существующей глобальной грамматики команд.

OSDM отвечает «КОМАНДА» вместо «УСПЕХ», что требует некоторой глупости при постобработке, но это не слишком уродливо.

Это:
<date-osdm name="ClaimDate">
<dmname value="ClaimDate"/>
<collection_commandgrammar name="Generic_command.grxml"/>
<collection_dtmfcommandgrammar name="Generic_command_dtmf.grxml"/>

Вместо этого (название грамматики не является значимым для кода, оно просто имеет другое содержание):
<date-osdm name="ClaimDate">
<dmname value="ClaimDate"/>
<collection_parallelgrammar1 name="Generic_inputs.grxml"/>
<collection_dtmfparallelgrammar1 name="Generic_inputs_dtmf.grxml"/>

И альт! Это работает.

...