0

私はボット フレームワーク テクノロジに取り組んでいます。現在のプロジェクトの 1 つで、ユーザーが「ivr」または「IVR」と入力した場合にのみ許可したいと考えています。それ以外の場合は、ユーザーに何らかのフィードバックが表示されます。

そのために、以下のコード行を書きましたが、このコードはユーザーに間違った出力を示します。ユーザーが ivr または IVR を入力しても、最初はユーザーにフィードバックが表示されますが、2 回目以降は正しく機能します。

    [Serializable]
class Customer
{
    //Create Account Template
    [Prompt("Please send any of these commands like **IVR** (or) **ivr**.")]
    public string StartingWord;
    public static IForm<Customer> BuildForm()
    {
        OnCompletionAsyncDelegate<Customer> accountStatus = async (context, state) =>
        {
            await Task.Delay(TimeSpan.FromSeconds(5));
            await context.PostAsync("We are currently processing your account details. We will message you the status.");

        };
        var builder = new FormBuilder<Customer>();


        return builder
                   //.Message("Welcome to the BankIVR bot! To start an conversation with this bot send **ivr** or **IVR** command.\r \n if you need help, send the **Help** command")
                   .Field(nameof(Customer.StartingWord), validate: async (state, response) =>
                   {
                       var result = new ValidateResult { IsValid = true, Value = response };
                       string str = (response as string);
                       if (str.ToLower() != "ivr")
                       {
                           result.Feedback = "I'm sorry. I didn't understand you.";
                           result.IsValid = false;
                           return result;
                       }
                       else if (str.ToLower() == "ivr")
                       {
                           result.IsValid = true;
                           return result;
                       }
                       else
                       {
                           return result;
                       }
                   })                      
                    .OnCompletion(accountStatus)
                    .Build();
    }
};

フォーム フローの概念を使用してこの問題を解決する方法を教えてください。

-プラディープ

4

2 に答える 2

0

あなたのコードは私には正しいように見えます。ステップスルー デバッガーを使用してコードをデバッグし、ロジック テストがどこで失敗しているかを確認することをお勧めします。

とはいえ、トルコの人々にとって機能しない.ToLower()場合は、テキストの正規化に使用すべきではないためです。たとえば、この.ToLower()方法は、トルコ語のドットなし文字を含むテキストでは機能しません'I': http://archives.miloush.net/michkap /アーカイブ/2004/12/02/273619.html

また、else前の 2 つのチェック (!=および) が考えられるすべてのケースをカバーしているため、ケースがヒットすることはありません (現在、C# コンパイラは、ケースに到達不能コードとして==フラグを立てるほど洗練されていません)。else

大文字と小文字を区別しない比較を行う正しい方法は次のString.Equalsとおりです。

if( "ivr".Equals( str, StringComparison.InvariantCultureIgnoreCase ) ) {
    result.IsValid = true;
    return result;
}
else {
    result.Feedback = "I'm sorry. I didn't understand you.";
    result.IsValid = false;
}
于 2016-07-19T05:34:21.507 に答える
0

最後に、問題なく結果が得られました。

これは、ユーザーのみが「ivrまたはIVR」という単語を入力して、ボットとのフォームフロー会話を開始できるようにするための私の更新されたコードです。

 .Field(nameof(Customer.StartingWord), validate: async (state, response) =>
                   {
                       var result = new ValidateResult { IsValid = true, Value = response };
                       string str = (response as string);
                       if ("ivr".Equals(str, StringComparison.InvariantCultureIgnoreCase))
                       {
                           //result.IsValid = true;

                           //return result;

                       }
                       else
                       {
                           result.Feedback = "I'm sorry. I didn't understand you.";
                           result.IsValid = false;
                           //return result;
                       }
                       return result;
                   })

-プラディープ

于 2016-11-18T09:38:20.900 に答える