【问题标题】:Alexa Skill - Keep Intent alive for dialogueAlexa Skill - 保持对话的意图
【发布时间】:2017-03-12 14:10:16
【问题描述】:

出于演示目的,我应该在对话的基础上开发 Alexa 技能。 所有的 Alexa 响应都是硬编码的。

技能的模板是这样的:

第 1 部分: 用户:Alexa,问 MySkill {Question1}。 Alexa:硬编码答案。

第 2 部分: 用户:Alexa,问 MySkill {Question2.1} Alexa:Question2.1 的硬编码答案。 用户:Alexa,问 MySkill {Qeustion2.2} Alexa:硬编码答案。

我能够创建第 1 部分。但在第 2 部分中我遇到了一些问题。 对于问题 2.1 和 2.2,我需要单独的意图吗?或者有没有可能让技能保持活力?

【问题讨论】:

    标签: node.js amazon-web-services alexa-skills-kit amazon-echo


    【解决方案1】:

    我将首先假设您在开发过程中使用的是 alexa-sdk。如果您不知道那是,请查看此链接:

    https://github.com/alexa/alexa-skills-kit-sdk-for-nodejs

    您可以通过多种方式在您的意图架构中将问题分解为您的技能。它们可以是单个意图,例如“QuestionOneIntent”和“QuestionTwoIntent”,也可以是单个意图“QuestionIntent”,其中这些意图中的槽值对应于单个问题。由于原始帖子没有提供太多信息,我不能说哪种结构是最好的设置。

    alexa-sdk 中有两种一般类型的响应。 ":tell" 会让 Alexa 做出回应并立即回到她的空闲状态(不听你的)。 ":ask" 会说一个响应,等待 8 秒,然后在等待你给出另一个命令的同时,继续提示消息。

    至于在对话中保持会话活跃,您可以简单地通过使用发出您的响应

    var speechOutput = "This is the answer to Question"
    var speechOutputReprompt = "Do you have any more questions?"
    this.emit(":ask", speechOutput, speechOutputReprompt)
    

    这将使您的会话保持打开状态,并且用户可以继续提出更多问题。如果您对重新提示回答“否”,您将不得不制定另一个意图来关闭会话,从而使 shouldEndSession 变量为真。这是我如何构建代码的示例:

    "QuestionIntent": function(){
    var responseName = ""
    var slots = this.event.request.intent.slots
    for (var slot in slots){
        if(slots[slot].value != undefined){
            responseName = slots[slot].name;
            switch(responseName){
                case "QuestionOneIntent":
                    var QuestionOneAnswer = "Answer to question one";
                    this.emit(":tell", QuestionOneAnswer);
                    break;
                case "QuestionTwoIntent":
                    var QuestionTwoAnswer = "Answer to question two";
                    this.emit(":ask", QuestionTwoAnswer, QuestionTwoAnswerReprompt);
                    break;
                default:
                    console.log("error");
                    break;
            }
        }
    }
    }
    

    【讨论】:

      【解决方案2】:

      看起来您正在使用单轮交互(即您没有保持会话打开,请检查 shouldEndSessionhttps://www.npmjs.com/package/alexa-app)。无论如何,您需要将当前状态保存在会话对象中或将其存储在其他位置(与唯一的 request.userId 相关联)。

      使用不同的意图可能是另一种解决方案,但如果您有类似的话语可能被错误地映射到彼此,则它很容易失败。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-10-24
        • 1970-01-01
        • 2022-06-21
        • 1970-01-01
        • 2018-07-22
        • 2019-07-13
        • 1970-01-01
        相关资源
        最近更新 更多