我正在研究僵尸框架技术,在我当前的一个项目中,我想只允许用户输入''ivr'或“IVR”,否则它会向用户显示一些反馈。
为此,我编写了下面的代码行,但是这段代码向用户显示了一些错误的输出。即使用户输入ivr或IVR,它也会首次向用户显示反馈,但从第二次开始,它正常工作。
[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();
}
};
请告诉我如何使用表单流概念解决此问题。
-Pradeep
答案 0 :(得分:0)
您的代码对我来说是正确的 - 我只能建议您使用逐步调试器调试代码,并查看逻辑测试失败的位置。
那就是说,如果它不适合土耳其人,那是因为你不应该使用.ToLower()
来标准化文本,例如.ToLower()
方法不适用于包含土耳其无点'I'
字符的文本:http://archives.miloush.net/michkap/archive/2004/12/02/273619.html
此外,您的else
案例永远不会被命中,因为您的两个先前检查(!=
和==
)涵盖了所有可能的情况(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;
}
答案 1 :(得分:0)
最后,我得到的结果没有任何问题。
这是我更新的代码,只允许用户输入“ivr或IVR”字样,与bot开始表格流程对话。
git stash apply
-Pradeep