...
CountryIntent{ ... };
CityIntent{ ... };
YesIntent{ ... };
FallBackIntent{ ... };
...我在建立定制的Alexa技能。用户从CountryIntent.调用CityIntent但是,如果用户意外地说是,他将调用CountryIntent;的YesIntent,这将是不正确的逻辑。如何禁用FallBackIntent YesIntent,以便用户在不小心说“是”时调用“”
发布于 2020-06-18 08:19:14
你不能让意图失效。通过建立你的意图,你教你的技能去理解特定的句子或人类说的话--一旦教过,就很难忘记。
实际上,您可以做的是构建一个状态机,并将会话的当前状态保持在SessionAttribute中。然后,在每一种意图中,你都必须检查谈话的状态,并按照你的逻辑行事--所以在你的情况下,当你期望城市和某人说“是的”时,你的技能应该再次询问这个城市,而忽略“是”的答案。
发布于 2020-06-18 23:24:09
同意@slawciu。处理“是/否”响应的最佳方法是跟踪会话属性中的最后意图。
在您的示例中,您可以启用对城市意图的验证,从而只接受有效的城市名称,从而消除处理不正确响应的需要。
发布于 2021-02-01 00:44:06
您可以启用任何已编码的处理程序来处理YesIntent,方法是在处理程序的canHandle中将它添加为一个真正的条件,并且可以将它与会话值匹配,以便能够根据上下文使用不同的处理程序。
下面是一个例子。
let attributes = await handlerInput.attributesManager.getSessionAttributes();
return ((Alexa.getRequestType(handlerInput.requestEnvelope) === 'IntentRequest'
&& Alexa.getIntentName(handlerInput.requestEnvelope) === 'CityIntent')
|| (Alexa.getRequestType(handlerInput.requestEnvelope) === 'IntentRequest' &&
Alexa.getIntentName(handlerInput.requestEnvelope) === 'AMAZON.YesIntent' &&
attributes.last === "City"));因此,如果它们显式地命中了CityIntent,或者之前按了它(您将其存储在attributes.last中),但回答是“是的”,就会触发它。
当您知道FallbackIntent可能会回答“是”时,使用它是一种反模式。当他们说一些你不想说的话时,就会用到它。你希望“是”,所以要主动处理。
https://stackoverflow.com/questions/62418154
复制相似问题