首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在自定义的Alexa技能中禁用某些意图?

如何在自定义的Alexa技能中禁用某些意图?
EN

Stack Overflow用户
提问于 2020-06-16 21:52:13
回答 3查看 305关注 0票数 1
代码语言:javascript
复制
...
CountryIntent{ ... };
CityIntent{ ... };
YesIntent{ ... };
FallBackIntent{ ... };
...

我在建立定制的Alexa技能。用户从CountryIntent.调用CityIntent但是,如果用户意外地说是,他将调用CountryIntent;的YesIntent,这将是不正确的逻辑。如何禁用FallBackIntent YesIntent,以便用户在不小心说“是”时调用“

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-06-18 08:19:14

你不能让意图失效。通过建立你的意图,你教你的技能去理解特定的句子或人类说的话--一旦教过,就很难忘记。

实际上,您可以做的是构建一个状态机,并将会话的当前状态保持在SessionAttribute中。然后,在每一种意图中,你都必须检查谈话的状态,并按照你的逻辑行事--所以在你的情况下,当你期望城市和某人说“是的”时,你的技能应该再次询问这个城市,而忽略“是”的答案。

票数 1
EN

Stack Overflow用户

发布于 2020-06-18 23:24:09

同意@slawciu。处理“是/否”响应的最佳方法是跟踪会话属性中的最后意图。

在您的示例中,您可以启用对城市意图的验证,从而只接受有效的城市名称,从而消除处理不正确响应的需要。

票数 1
EN

Stack Overflow用户

发布于 2021-02-01 00:44:06

您可以启用任何已编码的处理程序来处理YesIntent,方法是在处理程序的canHandle中将它添加为一个真正的条件,并且可以将它与会话值匹配,以便能够根据上下文使用不同的处理程序。

下面是一个例子。

代码语言:javascript
复制
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可能会回答“是”时,使用它是一种反模式。当他们说一些你不想说的话时,就会用到它。你希望“是”,所以要主动处理。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62418154

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档