Echo 使用Node.js设置Alexa AppId

Echo 使用Node.js设置Alexa AppId,echo,alexa,app-id,Echo,Alexa,App Id,我很难使用服务模拟器测试我的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,则该技能不起作用。以下是相关代码:

'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; 
但这似乎并不正确。根据AlexaSDK源代码(无论如何都要尝试),在我实现时,属性需要是appId

看起来问题更多地与Amazon模拟器创建的json lambda请求有关。需要明确的是,这是Amazon Alexa开发人员门户上的模拟器,而不是AWS lambda测试事件界面上的测试功能


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

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

亚马逊在周末改变了一些影响JSON的事情 Lambda从模拟器接收到请求并中断验证。 这里有两个与此相关的线程,其中包括 允许它工作:

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

---小工具频道


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

亚马逊在周末改变了一些影响JSON的事情 Lambda从模拟器接收到请求并中断验证。 这里有两个与此相关的线程,其中包括 允许它工作:

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

---小工具频道


是的,这就是问题所在。我真不敢相信它已经下跌这么久了。我以为我的代码有问题。添加此选项修复了问题:
如果(event.context&&event.context.System.application.applicationId=='applicationId'){event.context.System.application.applicationId=event.session.application.applicationId;}
是,这就是问题所在。我真不敢相信它已经下跌这么久了。我以为我的代码有问题。添加此选项修复了问题:
if(event.context&&event.context.System.application.applicationId=='applicationId'){event.context.System.application.applicationId=event.session.application.applicationId;}