【问题标题】:Alexa sends SessionEndedRequest on timeout then displays error card to userAlexa 在超时时发送 SessionEndedRequest 然后向用户显示错误卡
【发布时间】:2019-08-11 23:04:19
【问题描述】:

在测试我的技能时,如果我没有回复并且超时,Alexa 会向我的 Lambda 函数发送一个 SessionEndedRequest。

基于这些文档:Handle Requests Sent by Alexa:

您的服务无法向 SessionEndedRequest 发回响应。

因此,我没有回应这些请求。

但随后我的应用会显示一张带有此消息的卡片:

技能响应被标记为失败
(技能名称)

请求标识符:amzn1.echo-api.request.xxxxxxxxxxxxxxxxxxxxx

目标 Lambda 应用程序返回失败响应

那么我们应该如何处理这个没有响应的请求,并且不会导致这个错误呢?

我在 Lambda 中使用 Node.js,但 Python 答案也可以。

【问题讨论】:

    标签: aws-lambda alexa alexa-skills-kit


    【解决方案1】:

    您确定卡中的错误仅针对 SessionEndedRequest 吗?

    一般来说,即使您向 Alexa 发送回复以获取 SessionEndedRequest,也不会被说出。

    您可以在 ask-nodejs-sdk-v2 中处理这样的SessionEndedRequest

    const SessionEndedRequestHandler = {
      canHandle(handlerInput) {
        console.log("Inside SessionEndedRequestHandler");
        return handlerInput.requestEnvelope.request.type === 'SessionEndedRequest';
      },
      handle(handlerInput) {
        console.log(`Session ended with reason: ${JSON.stringify(handlerInput.requestEnvelope)}`);
        return handlerInput.responseBuilder.getResponse();
      },
    };
    

    【讨论】:

    • 这行得通,我认为因为我根本没有响应,导致 Lambda 出错,而不是正确结束循环。由于文档,我认为提供响应会导致其自身的错误,但结果并没有像您所说的那样说出响应,并且 Lambda 很乐意返回一些东西。
    • 一个用例是持久化 sessionAttributes。顾名思义,您可以使用它来执行用户会话结束时所需的操作。
    • omg 我想你刚刚指出了我的 sessionAttributes 被丢弃的确切原因!作为旁注,这非常有价值,谢谢!
    猜你喜欢
    • 2018-10-01
    • 1970-01-01
    • 2018-11-22
    • 2017-05-11
    • 1970-01-01
    • 2023-01-14
    • 2016-08-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多