【问题标题】:Setting Alexa AppId using Node.js使用 Node.js 设置 Alexa AppId
【发布时间】:2017-12-16 20:41:02
【问题描述】:

我在使用服务模拟器测试我的 Alexa 技能时遇到了困难。如果我设置了appId,该技能将不起作用。以下是相关代码:

'use strict';
const Alexa = require('alexa-sdk');

var APP_ID = "amzn1.ask.skill.[my skill ID]";

exports.handler = function(event, context, callback) {
    var alexa = Alexa.handler(event, context);
    alexa.appId = APP_ID;
    alexa.registerHandlers(handlers);
    alexa.execute();
}

当我在服务模拟器中运行此代码时,我得到响应“无法调用远程端点,或者它返回的响应无效。” CloudWatch 日志中的错误消息:

The applicationIds don't match: applicationId and amzn1.ask.skill.[my skill id]
"errorMessage": "Invalid ApplicationId: amzn1.ask.skill.[my skill id]"

如果我注释掉设置 appId

//alexa.appId = APP_ID

模拟器似乎返回了一个有效的响应,但我在日志中看到了这个警告:

"Warning: Application ID is not set."

这是模拟器发送的 Lambda 请求:

{
  "session": {
    "sessionId": "SessionId.bb263d3e-2018-4aab-a0df-f945b3a25bf9",
    "application": {
      "applicationId": "amzn1.ask.skill.[my skill ID]"
    },
    "attributes": {},
    "user": {
      "userId": "amzn1.ask.account.[accountID]"
    },
    "new": true
  },
  "request": {
    "type": "LaunchRequest",
    "requestId": "EdwRequestId.d8b56c7f-63ea-48e8-8816-9b7c036d5816",
    "locale": "en-US",
    "timestamp": "2017-07-12T12:06:11Z"
  },
  "version": "1.0"
}

网上一些例子提示appId属性应该是APP_ID:

alexa.APP_ID = APP_ID; 

但这似乎不正确。根据alexa-sdk源代码(无论如何都在尝试),该属性需要它是我实现的appId。

看起来问题与亚马逊模拟器创建的 json lambda 请求更相关。需要明确的是,这是 Amazon Alexa 开发者门户上的模拟器,而不是 AWS lambda 测试事件接口上的测试函数。

奇怪的是,如果我从 Amazon 模拟器剪切并粘贴 lambda 请求并从 AWS 测试界面运行它,它工作正常。

【问题讨论】:

    标签: echo alexa app-id


    【解决方案1】:

    这两天我也遇到了这个问题。我相信这是他们的最终问题。我在亚马逊论坛上看到了这个。

    亚马逊在周末改变了一些影响 JSON 的东西 Lambda 从模拟器收到的请求并中断验证。 这是关于此的两个线程,其中包括解决方法 让它工作:

    https://forums.developer.amazon.com/questions/78391/application-id-verification-issue-with-nodejs-and.html

    https://forums.developer.amazon.com/questions/78393/my-alexa-skill-is-not-returning-a-lambda-response.html

    到目前为止,亚马逊还没有更新,甚至没有确认 的问题。

    --- 小工具频道

    【讨论】:

    • 是的,这就是问题所在。我不敢相信它已经下降了这么久。我认为我的代码有问题。添加这个解决了这个问题:if(event.context && event.context.System.application.applicationId == 'applicationId'){ event.context.System.application.applicationId = event.session.application.applicationId; }
    猜你喜欢
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-14
    • 2021-05-03
    • 2019-05-14
    • 2023-01-25
    相关资源
    最近更新 更多