【问题标题】:Alexa session remains open without any user inputAlexa 会话保持打开状态,无需任何用户输入
【发布时间】:2017-12-22 02:15:20
【问题描述】:

我有一个 Alexa 技能,用户提出问题并发出适当的响应。示例:

用户:哪个州有首都哈里斯堡? Alexa:宾夕法尼亚州

我正在使用询问意图来实现此目的(会话保持活动状态),但在提交我的技能时收到回复,即会话保持打开状态而无需任何用户输入。

我不希望会话结束。我希望用户能够不断地提问。处理这个问题的最佳方法是什么?

我想通过在每个答案的末尾添加一个问题来实现这一点。示例:

用户:哪个州有首都哈里斯堡? 亚历克萨:宾夕法尼亚。还有什么可以帮您的吗?

上述问题是我不确定如何处理是/否答复。

任何帮助将不胜感激。

【问题讨论】:

    标签: node.js alexa alexa-skill


    【解决方案1】:

    您建议的修复是合理的,并且是 Alexa 技能中的常见模式——Alexa 支持内置意图 AMAZON.YesIntentAMAZON.NoIntent,这些意图已经配置为侦听一组相关话语,例如“是”、“否” ” 等等。对于“是”的意图,您可能想再次向:ask 提出“您想问什么问题?”之类的问题,而对于“没有”的意图,您可能想要:tell 用户再见,并且这种告诉的用法将结束会话。

    状态管理

    也就是说,您不希望 Alexa 总是以这种方式回答“是”——如果您的技能有其他交互,而您对此问题的“是”回答没有意义怎么办?

    要解决此问题,请查看 alexa-sdk 中的 skill state management。来自文档:

    Alexa-sdk 使用状态管理器将传入的意图路由到正确的函数处理程序。状态作为字符串存储在会话属性中,指示技能的当前状态。在定义意图处理程序时,您可以通过将状态字符串附加到意图名称来模拟内置意图路由,但 alexa-sdk 可以帮助您做到这一点。

    因此,当您的 Alexa 技能回答问题时,您的部分响应逻辑可能会设置如下状态:

    this.handler.state = 'AskAnotherQuestion';
    

    对于像AskAnotherQuestion 这样的状态字符串,您可以使用:

    1。字面意图

    向您的意图处理程序添加一个名为 AMAZON.YesIntentAskAnotherQuestion 的条目,以处理 YesIntent 的 yes 响应,并按字面附加状态。

    例子:

    'AMAZON.YesIntentAskAnotherQuestion': function() {
        this.emit(':ask', 'What would you like to ask?', 'Could you repeat that?');
    },
    

    2。 Alexa-SDK 状态处理程序

    使用 alexa-sdk CreateStateHandler(state, obj) 创建一个意图处理程序,将传递的状态附加到所有条目。

    例子:

    const askQuestionHandlers = Alexa.CreateStateHandler('AskAnotherQuestion', {
    
        'AMAZON.YesIntent': function() {
            this.emit(':ask', 'What would you like to ask?', 'Could you repeat that?');
        },
    
        'AMAZON.NoIntent': function() {
            this.emit(':tell', 'See you later!');
        }
    
        // NOTE: Add another intent here that routes to your question answering logic, 
        // so that the user can just immediately ask their question again without 
        // saying yes or no.
    }
    

    请参阅 skill state management 文档以获取 CreateStateHandler 的代码完整示例实现。

    注意事项

    如果不在 YesIntent 中设置其他状态,此技能将卡在“AskAnotherQuestion”状态。对于您问题中定义的范围,这可能没问题,但请记住,随着您的技能变得更加复杂,您可能希望切换到其他状态。

    将状态重置为 null 或空目前很麻烦,需要设置多个字段。可以在github issue 中找到有关此问题的讨论和建议的解决方法。

    进一步阅读

    【讨论】:

      【解决方案2】:

      这个帖子How to keep an alexa skill open? 似乎是同一个主题,它也符合我的经验。在 Alexa 关闭您的技能之前,您可以保持会话打开的最长持续时间约为 10 到 20 秒。

      【讨论】:

        猜你喜欢
        • 2019-08-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多