1

私は現在、GRXML文法でNuanceOSDMを使用するVXML2.0アプリに取り組んでいます。

プロンプトの1つは、発信者に生年月日を入力するように求めますが、便利なものがない場合は、「キャンセル」と言うか、アスタリスクを押すことができます。これはDateOSDMであり、音声とDTMFエントリの「キャンセル」またはアスタリスクをそれぞれ処理するためのコマンド文法を追加しました。

「キャンセル」と言うのはうまくいきます。日付の文法がバイパスされ、コマンドの文法がアクティブになり、コードが期待どおりに実行されます。ただし、アスタリスクは別の話です。デバッグ呼び出しを実行して電話のアスタリスクキーを押すと、不一致として処理されます。OSDMハンドブックを調べると、Nuance Date OSDMのDTMFエントリは、2〜8桁の範囲の組み込みのDTMFディジット文法を介して実行されているように見えます。

ハンドブックには次のようにも記載されています。「並列文法が指定されている場合、OSDMはDTMF入力をDTMFコレクション文法と並列文法の両方に一致させます。DTMF文字が両方の文法に一致する場合、並列文法の一致が返されます。」

したがって、数字の文法には組み込みの終了文字として「*」が含まれていると思います。これは、「#」のみが終了文字になることができるという明示的な宣言を上書きします。

  1. アスタリスクを押します。
  2. DTMFディジット文法がアクティブになります。
  3. アスタリスクは用語文字であり、他の入力が行われなかったため、DTMF数字文法は空白になります。
  4. 長さが2〜8桁であるため、空白はOOGです。
  5. 一致しないものが返されます。

OSDMの操作は、アプリケーションがイベントログを実行する方法に不可欠であるため、OSDMの使用に固執しています。ただし、アスタリスクに対応することで創造性を発揮できます。

アスタリスクを有効な入力としてカウントし、カスタムコマンドの文法に到達させるか、OSDMの呼び出しをバイパスして自分で処理する別の方法はありますか?

4

1 に答える 1

1

解決策は、既存のグローバルコマンド文法とは別に、カスタムコマンド文法を使用することでした。

OSDMは、「SUCCESS」の代わりに「COMMAND」で応答します。これは、後処理で少し愚かさを必要としますが、それほど醜いものではありません。

これ:
<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"/>

そしてビオラ!できます。

于 2011-06-28T14:43:21.190 に答える