【问题标题】:How to disable certain intents in custom Alexa skill?如何在自定义 Alexa 技能中禁用某些意图?
【发布时间】:2021-02-01 08:50:49
【问题描述】:
...
CountryIntent{ ... };
CityIntent{ ... };
YesIntent{ ... };
FallBackIntent{ ... };
...

我正在构建自定义 Alexa 技能。用户从 CountryIntent 调用 CityIntent。但是,如果用户不小心说YES,他会从CountryIntent调用YesIntent;那将是不正确的逻辑。 如何禁用 YesIntent 以便用户在不小心说 YES 时调用 FallBackIntent

【问题讨论】:

    标签: alexa alexa-skill alexa-intent


    【解决方案1】:

    您不能禁用意图。通过建立意图,您可以教授您理解人类所说的特定句子/单词的技能 - 一旦被教授,就很难忘记。

    您实际上可以做的是建立一个state machine 并将当前对话状态保存在SessionAttribute 中。然后在每个意图中,您必须检查对话处于哪个状态并根据您的逻辑行事 - 因此,当您期望城市并且有人说“是”时,您的技能应该再次询问城市并忽略“是” "回答。

    【讨论】:

      【解决方案2】:

      同意@slawciu。处理是/否响应的最佳方法是跟踪session attributes 中的最后一个意图

      在您的情况下,您可以启用对城市意图的验证以仅接受有效的城市名称,从而无需处理不正确的响应。

      【讨论】:

        【解决方案3】:

        您可以启用您编写的任何处理程序来处理 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 是一种反模式。当他们说出您期望的话时使用它。你期待“是”,所以主动处理它。

        【讨论】:

          猜你喜欢
          • 2023-03-25
          • 2018-07-26
          • 2018-12-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-02-23
          • 1970-01-01
          • 2018-01-17
          相关资源
          最近更新 更多