2016-07-19 10 views
0

Ich arbeite an Bot Framework Technologie, in einem meiner aktuellen Projekte möchte ich dem Benutzer nur erlauben, wenn er/Sie tippt das '' ivr '' oder 'IVR', ansonsten gibt es eine Rückmeldung an den Benutzer.Wie kann ich dem Benutzer nur erlauben, wenn er/sie "ivr" oder "IVR" mit Hilfe des Form Flow-Konzepts eingibt

Dafür habe ich unten Zeilen geschrieben, aber dieser Code zeigt einige falsche Ausgabe an den Benutzer. Selbst wenn der Benutzer ivr oder IVR eingibt, zeigt es dem Benutzer zum ersten Mal eine Rückmeldung, aber ab dem zweiten Mal funktioniert es richtig.

[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(); 
    } 
}; 

Bitte sagen Sie mir, wie Sie dieses Problem mit dem Form Flow-Konzept beheben können.

-Pradeep

Antwort

0

Ihr Code sieht für mich richtig - ich kann nur vorschlagen, dass Sie debuggen Ihren Code mit einem Schritt-durch-Debugger und sehen, wo die Logik Tests fehlschlagen.

Das heißt, wenn es für die Menschen in der Türkei nicht funktioniert, ist es, weil Sie nicht .ToLower() zur Normalisierung Text verwendet werden soll, zum Beispiel die .ToLower() Methode für Text nicht funktioniert, dass die türkischen dotless 'I' Zeichen enthält: http://archives.miloush.net/michkap/archive/2004/12/02/273619.html

Auch Ihre else Fall wird nie getroffen werden, weil Ihre beiden Vorabprüfungen (!= und ==) jeden möglichen Fall abdecken (der C# -Compiler ist derzeit nicht ausgereift genug, um den else Fall als unerreichbaren Code zu kennzeichnen).

Der richtige Weg, um einen Groß- und Kleinschreibung Vergleich zu tun ist mit 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; 
} 
+0

Ihr oben sieht aus wie für den Vergleich von zwei Strings. Aber ich möchte wann immer Benutzer "ivr oder IVR" im Bot-Framework-Kanal-Emulator eingeben, dann möchte ich dem Benutzer erlauben, auf die nächsten Felder im Formularfluss zuzugreifen, ansonsten erlaube ihm nicht. – pradeep

+0

@pradeep Ja, das ist, was mein Code tut. Welches Problem hast du? – Dai

+0

Mein Problem ist, dass ich das Form Flow-Konzept in meinem Bot verwendet habe, aber ich habe gekämpft, wenn jemals Benutzer "ivr oder IVR" eingeben, dann kann ich ihm nur erlauben. Ansonsten sendet es eine Rückmeldung an den Benutzer. – pradeep

0

Schließlich habe ich das Ergebnis bekam ohne jede Frage.

Hier ist mein aktualisierter Code für nur den Benutzer geben Sie "Ivr oder IVR" Wort, um eine Formularfluss-Konversation mit Bot zu starten.

.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; 
        }) 

-Pradeep