- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
目前我正在创建一个 Alexa 技能来处理 FAQ 问题和导致直接回复的问题,但我对 alexa 何时需要另一个回复有疑问。
例如,如果用户询问,
“我应该吃什么”
Alexa 会回复“你想吃意大利面吗?”
用户会说"is"或“否”
如果用户说的不是"is"或“否”,它会再次提示用户说"is"或“否”。
目前我有以下代码:
if (intentName == "WhatShouldIEat")
{
EatQuestion = true;
reprompt = "Answer with yes or no";
return MakeSkillResponse(FAQHelper.getQuestionInformation(intentName)); //returns the voice response on alexa
}
//Check if users says yes or no for for eating that food
if (EatQuestion)
{
switch (intentName)
{
case "AMAZON.YesIntent":
intentName = "YesFood"; //sets response to when user says yes
EatQuestion = false;
reprompt = "Ask me another question";
break;
case "AMAZON.NoIntent":
intentName = "NoFood"; //sets response for when user says no
EatQuestion = false;
reprompt = "Ask me another question";
break;
default:
intentName = "YesNoPrompt"; //Alexa will ask the user to say either yes or no
break;
}
}
因此代码有效,如果用户说的不是"is"或“否”,并给出我想要的正确响应,则会循环重新提示。
但是我想知道是否有更好的方法来实现这一点,因为该功能目前在 FunctionHandler 中并且与 switch cases 相当困惑,并且扩展当前代码以解决其他需要 yes,no confirmation 的问题会很乱。
基本上我想知道在上面的代码中是否有更简洁的方法来实现相同的功能。
最佳答案
正确使用Session属性
您将为 yesintent 和 nointent 设置单独的处理程序类。
当您的 whatShouldIEat 处理程序向用户发回一个问题,希望得到"is"或“否”的响应时,请设置 session 属性 lastHandler = whatShouldIEat。
现在当用户响应时,控件将进入 yeshandler 或 nohandler。在此,您可以从 session 属性中检查这是什么是或否,并调用特定的处理程序。这样你也可以使用相同的 yeshandler,nohandler 来处理其他问题。
现在由您决定要在 session 属性中保存什么,无论是 bool 标志,还是任何变量或任何处理程序对象。目标是确定最后的操作。
此外,您可以使用 Stack 数据结构来跟踪调用哪个处理程序,以防有多个操作要执行。堆栈上的顶部项目(处理程序)将告知要调用的最新操作。之后的下一项将指示要调用的下一个操作。
关于c# - 如何在谈话中处理是/否,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54451793/
我是一名优秀的程序员,十分优秀!