Нажмите *, чтобы отменить ввод даты с помощью Nuance OSDM?

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

В одной из наших подсказок звонящему предлагается ввести дату рождения, но если у него ее нет под рукой, он может либо сказать «отмена», либо нажать звездочку. Это Date 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 и обработать его самостоятельно?


person IVR Avenger    schedule 23.06.2011    source источник


Ответы (1)


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

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"/>

И альт! Оно работает.

person IVR Avenger    schedule 28.06.2011